Repository: CreativeLyons/NukeSurvivalToolkit_publicRelease Branch: master Commit: b6ebfa3e88fb Files: 373 Total size: 8.4 MB Directory structure: gitextract_r8btb1q3/ ├── .gitattributes ├── .gitignore ├── CHANGELOG.md ├── DEVELOPMENT.md ├── LICENSE ├── NukeSurvivalToolkit/ │ ├── gizmos/ │ │ ├── NST_AdditiveKeyerPro.gizmo │ │ ├── NST_AnimationCurve.gizmo │ │ ├── NST_AntiAliasingFilter.gizmo │ │ ├── NST_AutoCropTool.gizmo │ │ ├── NST_AutoFlare2.gizmo │ │ ├── NST_BBoxToFormat.gizmo │ │ ├── NST_BeautifulSkin.gizmo │ │ ├── NST_BiasedSaturation.gizmo │ │ ├── NST_BinaryAlpha.gizmo │ │ ├── NST_BlacksExpon.gizmo │ │ ├── NST_BlacksMatch.gizmo │ │ ├── NST_BokehBuilder.gizmo │ │ ├── NST_C44Kernel.gizmo │ │ ├── NST_CProject.gizmo │ │ ├── NST_CProject2.gizmo │ │ ├── NST_CameraNormals.gizmo │ │ ├── NST_CardToTrack.gizmo │ │ ├── NST_CardToTrack2.gizmo │ │ ├── NST_CatsEyeDefocus.gizmo │ │ ├── NST_CellNoise.gizmo │ │ ├── NST_ChannelCombiner.gizmo │ │ ├── NST_ChannelControl.gizmo │ │ ├── NST_ChannelCreator.gizmo │ │ ├── NST_ChromaSmear.gizmo │ │ ├── NST_Chromatik.gizmo │ │ ├── NST_ColorCopy.gizmo │ │ ├── NST_ColorSampler.gizmo │ │ ├── NST_ColorSmear.gizmo │ │ ├── NST_ConstantPro.gizmo │ │ ├── NST_ContactSheetAuto.gizmo │ │ ├── NST_Contrast.gizmo │ │ ├── NST_ConvertPNZ.gizmo │ │ ├── NST_ConvolutionMatrix.gizmo │ │ ├── NST_CornerPin2D_Matrix.gizmo │ │ ├── NST_CrossProductVector2.gizmo │ │ ├── NST_CrossProductVector3.gizmo │ │ ├── NST_DVPColorCorrect.gizmo │ │ ├── NST_DVPToImage.gizmo │ │ ├── NST_DVP_Shader.gizmo │ │ ├── NST_DVP_ToonShader.gizmo │ │ ├── NST_DVPattern.gizmo │ │ ├── NST_DVPfresnel.gizmo │ │ ├── NST_DVPmatte.gizmo │ │ ├── NST_DVPortal.gizmo │ │ ├── NST_DVPrelight.gizmo │ │ ├── NST_DVPrelightPT.gizmo │ │ ├── NST_DVProjection.gizmo │ │ ├── NST_DVPscene.gizmo │ │ ├── NST_DVPsetLight.gizmo │ │ ├── NST_DasGrain.gizmo │ │ ├── NST_Deep2VP.gizmo │ │ ├── NST_Deep2VPosition.gizmo │ │ ├── NST_DeepBoolean.gizmo │ │ ├── NST_DeepCopyBBox.gizmo │ │ ├── NST_DeepCropSoft.gizmo │ │ ├── NST_DeepFromDepth.gizmo │ │ ├── NST_DeepFromPosition.gizmo │ │ ├── NST_DeepHoldoutSmoother.gizmo │ │ ├── NST_DeepKeyMix.gizmo │ │ ├── NST_DeepMerge_Advanced.gizmo │ │ ├── NST_DeepRecolorMatte.gizmo │ │ ├── NST_DeepSampleCount.gizmo │ │ ├── NST_DeepSer.gizmo │ │ ├── NST_DeflickerVelocity.gizmo │ │ ├── NST_DefocusSwirlyBokeh.gizmo │ │ ├── NST_DespillToColor.gizmo │ │ ├── NST_Diffusion.gizmo │ │ ├── NST_DirectionalBlur.gizmo │ │ ├── NST_Distance3D.gizmo │ │ ├── NST_DistanceBetween_CS.gizmo │ │ ├── NST_DotProductVector2.gizmo │ │ ├── NST_DotProductVector3.gizmo │ │ ├── NST_DummyCam.gizmo │ │ ├── NST_Edge.gizmo │ │ ├── NST_EdgeDetectAlias.gizmo │ │ ├── NST_EdgeDetectPRO.gizmo │ │ ├── NST_EdgeFromAlpha.gizmo │ │ ├── NST_Edge_Expand.gizmo │ │ ├── NST_Edge_RimLight.gizmo │ │ ├── NST_Emission.gizmo │ │ ├── NST_EnvReflect_BB.gizmo │ │ ├── NST_ErodeSmooth.gizmo │ │ ├── NST_Erode_Fine.gizmo │ │ ├── NST_ExponBlurSimple.gizmo │ │ ├── NST_ExponGlow.gizmo │ │ ├── NST_F_P_Project.gizmo │ │ ├── NST_F_P_Ramp.gizmo │ │ ├── NST_FastComplexityDistort.gizmo │ │ ├── NST_FillSampler.gizmo │ │ ├── NST_FlareSuperStar.gizmo │ │ ├── NST_FractalBlur.gizmo │ │ ├── NST_FrameFiller.gizmo │ │ ├── NST_FrameHoldSpecial.gizmo │ │ ├── NST_FrameMedian.gizmo │ │ ├── NST_GUI_Switch.gizmo │ │ ├── NST_GammaPlus.gizmo │ │ ├── NST_GenerateMatrix4.gizmo │ │ ├── NST_GenerateSTMap.gizmo │ │ ├── NST_GeoToPoints.gizmo │ │ ├── NST_Glass.gizmo │ │ ├── NST_Glow_Exponential.gizmo │ │ ├── NST_GlueP.gizmo │ │ ├── NST_GodRaysProjector.gizmo │ │ ├── NST_GradMagic.gizmo │ │ ├── NST_GradeLayerPass.gizmo │ │ ├── NST_Grain_Advanced.gizmo │ │ ├── NST_GuidedBlur.gizmo │ │ ├── NST_HSL_Tool.gizmo │ │ ├── NST_Halation.gizmo │ │ ├── NST_HeatWave.gizmo │ │ ├── NST_HexColor.gizmo │ │ ├── NST_HighPass.gizmo │ │ ├── NST_HighlightSuppress.gizmo │ │ ├── NST_ID_Extractor.gizmo │ │ ├── NST_IIDistort.gizmo │ │ ├── NST_ITransformU.gizmo │ │ ├── NST_ImagePlane3D.gizmo │ │ ├── NST_InjectMatteChannel.gizmo │ │ ├── NST_InverseMatrix33.gizmo │ │ ├── NST_InverseMatrix44.gizmo │ │ ├── NST_InvertAxis.gizmo │ │ ├── NST_InvertMatrix4.gizmo │ │ ├── NST_KeyChew.gizmo │ │ ├── NST_KeymixBBox.gizmo │ │ ├── NST_KillOutline.gizmo │ │ ├── NST_LabelFromRead.gizmo │ │ ├── NST_LensEngine.gizmo │ │ ├── NST_LightSwitch.gizmo │ │ ├── NST_LightWrapPro.gizmo │ │ ├── NST_Lightning3D.gizmo │ │ ├── NST_LineTool.gizmo │ │ ├── NST_Looper.gizmo │ │ ├── NST_LumaGrain.gizmo │ │ ├── NST_LumaKeyer.gizmo │ │ ├── NST_LumaToVector3.gizmo │ │ ├── NST_MECfiller.gizmo │ │ ├── NST_MagnitudeVector2.gizmo │ │ ├── NST_MagnitudeVector3.gizmo │ │ ├── NST_Matrix4x4Math.gizmo │ │ ├── NST_Matrix4x4_Inverse.gizmo │ │ ├── NST_MergeAll.gizmo │ │ ├── NST_MergeAtmos.gizmo │ │ ├── NST_MergeBlend.gizmo │ │ ├── NST_MirrorBorder.gizmo │ │ ├── NST_MirrorDimension.gizmo │ │ ├── NST_MonochromePlus.gizmo │ │ ├── NST_MorphDissolve.gizmo │ │ ├── NST_MotionBlurPaint.gizmo │ │ ├── NST_MultiplyVector3Matrix3.gizmo │ │ ├── NST_NAN_INF_Killer.gizmo │ │ ├── NST_N_Reflection.gizmo │ │ ├── NST_Noise3DTexture.gizmo │ │ ├── NST_Noise3D_spin.gizmo │ │ ├── NST_NoiseAdvanced.gizmo │ │ ├── NST_NormalizeVector2.gizmo │ │ ├── NST_NormalizeVector3.gizmo │ │ ├── NST_NormalsRotate.gizmo │ │ ├── NST_NukeZ.gizmo │ │ ├── NST_P2N.gizmo │ │ ├── NST_P2Z.gizmo │ │ ├── NST_P_Noise_Advanced.gizmo │ │ ├── NST_ParticleKiller.gizmo │ │ ├── NST_ParticleLights.gizmo │ │ ├── NST_PerspectiveGuide.gizmo │ │ ├── NST_PlanarProjection.gizmo │ │ ├── NST_PlotScanline.gizmo │ │ ├── NST_PointCloudKeyer.gizmo │ │ ├── NST_PosMatte_MJ.gizmo │ │ ├── NST_PosPattern_MJ.gizmo │ │ ├── NST_PosProjection_MJ.gizmo │ │ ├── NST_ProductMatrix4.gizmo │ │ ├── NST_Pyclopedia.gizmo │ │ ├── NST_Python_and_TCL.gizmo │ │ ├── NST_RP_Reformat.gizmo │ │ ├── NST_RadialAdvanced.gizmo │ │ ├── NST_RadialDilate.gizmo │ │ ├── NST_RainMaker.gizmo │ │ ├── NST_Randomizer.gizmo │ │ ├── NST_RankFilter.gizmo │ │ ├── NST_RayDeepAO.gizmo │ │ ├── NST_ReProject_3D.gizmo │ │ ├── NST_Reconcile3DFast.gizmo │ │ ├── NST_Relight_Simple.gizmo │ │ ├── NST_Relight_bb.gizmo │ │ ├── NST_Rings_of_Power.gizmo │ │ ├── NST_RotateMatrix4.gizmo │ │ ├── NST_RotateVector2.gizmo │ │ ├── NST_RotateVector3.gizmo │ │ ├── NST_RotoCentroid.gizmo │ │ ├── NST_RotoPaintTransform.gizmo │ │ ├── NST_RotoQC.gizmo │ │ ├── NST_SSMesh.gizmo │ │ ├── NST_STMapToVector2.gizmo │ │ ├── NST_STmapInverse.gizmo │ │ ├── NST_ScaleMatrix4.gizmo │ │ ├── NST_SceneDepthCalculator.gizmo │ │ ├── NST_ShadowMult.gizmo │ │ ├── NST_SimpleSSS.gizmo │ │ ├── NST_SkyMatte.gizmo │ │ ├── NST_SliceTool.gizmo │ │ ├── NST_Sparky.gizmo │ │ ├── NST_Spill_Correct.gizmo │ │ ├── NST_SpotFlare.gizmo │ │ ├── NST_SpotLight.gizmo │ │ ├── NST_Suppress_RGBCMY.gizmo │ │ ├── NST_Symmetry.gizmo │ │ ├── NST_TProject.gizmo │ │ ├── NST_TProject2.gizmo │ │ ├── NST_TimeMachine.gizmo │ │ ├── NST_TransformCutOut.gizmo │ │ ├── NST_TransformMatrix.gizmo │ │ ├── NST_TransformMatrix4.gizmo │ │ ├── NST_TransformMix.gizmo │ │ ├── NST_TransformVector2.gizmo │ │ ├── NST_TransformVector3.gizmo │ │ ├── NST_TranslateMatrix4.gizmo │ │ ├── NST_TransposeMatrix4.gizmo │ │ ├── NST_UVEditor.gizmo │ │ ├── NST_UV_Map.gizmo │ │ ├── NST_UV_Mapper.gizmo │ │ ├── NST_Unify3DCoordinate.gizmo │ │ ├── NST_Vector2ToSTMap.gizmo │ │ ├── NST_Vector3ToMatrix4.gizmo │ │ ├── NST_VectorExtendEdge.gizmo │ │ ├── NST_VectorTracker.gizmo │ │ ├── NST_Vectors_Direction.gizmo │ │ ├── NST_Vectors_to_Degrees.gizmo │ │ ├── NST_VoronoiGradient.gizmo │ │ ├── NST_WaterLens.gizmo │ │ ├── NST_WaveletBlur.gizmo │ │ ├── NST_WhiteBalance.gizmo │ │ ├── NST_WhiteSoftClip.gizmo │ │ ├── NST_X_Aton_Volumetrics.gizmo │ │ ├── NST_X_Denoise.gizmo │ │ ├── NST_X_Distort.gizmo │ │ ├── NST_X_Sharpen.gizmo │ │ ├── NST_X_Soften.gizmo │ │ ├── NST_X_Tesla.gizmo │ │ ├── NST_Z2N.gizmo │ │ ├── NST_Z2P.gizmo │ │ ├── NST_ZeroAxis.gizmo │ │ ├── NST_aPCard.gizmo │ │ ├── NST_aPMatte_v2.gizmo │ │ ├── NST_aeRefracTHOR.gizmo │ │ ├── NST_aeRelight2D.gizmo │ │ ├── NST_aeShadows.gizmo │ │ ├── NST_apChroma.gizmo │ │ ├── NST_apChromaBlurNew.gizmo │ │ ├── NST_apChromaMergeNew.gizmo │ │ ├── NST_apChromaPremult.gizmo │ │ ├── NST_apChromaTransformNew.gizmo │ │ ├── NST_apChromaUnpremult.gizmo │ │ ├── NST_apDespill.gizmo │ │ ├── NST_apDirLight.gizmo │ │ ├── NST_apEdgeCrush.gizmo │ │ ├── NST_apEdgePush.gizmo │ │ ├── NST_apFresnel.gizmo │ │ ├── NST_apLoop.gizmo │ │ ├── NST_apViewerBlocker.gizmo │ │ ├── NST_apVignette.gizmo │ │ ├── NST_apeGlow.gizmo │ │ ├── NST_apeScreenClean.gizmo │ │ ├── NST_apeScreenGrow.gizmo │ │ ├── NST_bm_CameraShake.gizmo │ │ ├── NST_bm_CurveRemapper.gizmo │ │ ├── NST_bm_MatteCheck.gizmo │ │ ├── NST_bm_NoiseGen.gizmo │ │ ├── NST_bm_OpticalGlow.gizmo │ │ ├── NST_bm_OpticalLightwrap.gizmo │ │ ├── NST_deHaze.gizmo │ │ ├── NST_fxT_ChromaticAberration.gizmo │ │ ├── NST_h_gradienteditor.gizmo │ │ ├── NST_h_silk.gizmo │ │ ├── NST_h_stickit.gizmo │ │ ├── NST_iBlurU.gizmo │ │ ├── NST_iConvolve.gizmo │ │ ├── NST_iErode.gizmo │ │ ├── NST_iMorph.gizmo │ │ ├── NST_iMorph_v2.gizmo │ │ ├── NST_iTransform_ae.gizmo │ │ ├── NST_mScatterGeo.gizmo │ │ ├── NST_origami.gizmo │ │ ├── NST_renameChannels.gizmo │ │ ├── NST_streamCart.gizmo │ │ ├── NST_vector3DMathExpression.gizmo │ │ ├── NST_viewer_render.gizmo │ │ ├── NST_waterSchmutz.gizmo │ │ ├── NST_waveCustom.gizmo │ │ ├── NST_waveGrade.gizmo │ │ ├── NST_waveMaker.gizmo │ │ ├── NST_waveMerge.gizmo │ │ └── NST_waveRetime.gizmo │ ├── init.py │ ├── menu.py │ ├── nk_files/ │ │ ├── C4x4.nk │ │ ├── GradientCorner.nk │ │ ├── IBKGizmo_Expression.nk │ │ ├── Lines_Horizontal.nk │ │ ├── Lines_Horizontal_Animated.nk │ │ ├── Lines_Vertical.nk │ │ ├── Lines_Vertical_Animated.nk │ │ ├── NST_AdvancedKeyingTemplate.nk │ │ ├── NST_AdvancedKeyingTemplate_Stamps.nk │ │ ├── NST_LightSwitchPuppet.nk │ │ ├── NST_Noise4D.nk │ │ ├── NST_ParticleLights_ExampleScript.nk │ │ ├── NST_SSMesh_demo.nk │ │ ├── NST_STMap_Keying_Setup.nk │ │ ├── NST_SparkyExampleScene.nk │ │ ├── NST_UVEditor_demo_clean.nk │ │ ├── NST_WaterLens_sampleScript.nk │ │ ├── NST_X_Aton_Examples.nk │ │ ├── Noise.nk │ │ ├── Random_colors.nk │ │ ├── Random_every_frame.nk │ │ ├── Random_every_pixel.nk │ │ ├── STMap_invert.nk │ │ ├── Trunc.nk │ │ ├── UV_to_Vector.nk │ │ ├── Vector_to_UV.nk │ │ ├── abs.nk │ │ ├── alpha_binary.nk │ │ ├── alpha_comparison.nk │ │ ├── alpha_exists.nk │ │ ├── alpha_sum.nk │ │ ├── bricks.nk │ │ ├── check_nan_inf.nk │ │ ├── check_negative.nk │ │ ├── circles.nk │ │ ├── circles_user.nk │ │ ├── coordinates.nk │ │ ├── create_inf.nk │ │ ├── create_nan.nk │ │ ├── deepThickness.nk │ │ ├── deepToDepth.nk │ │ ├── depth_normalize.nk │ │ ├── despill_blue.nk │ │ ├── despill_blue_list.nk │ │ ├── despill_green.nk │ │ ├── despill_green_list.nk │ │ ├── differenceKey.nk │ │ ├── fBm.nk │ │ ├── gradient_horizontal.nk │ │ ├── gradient_horizontal_invert.nk │ │ ├── gradient_vertical.nk │ │ ├── gradient_vertical_invert.nk │ │ ├── keying.nk │ │ ├── kill_inf.nk │ │ ├── kill_nan.nk │ │ ├── normalPass_relight.nk │ │ ├── points.nk │ │ ├── points_advanced.nk │ │ ├── radial.nk │ │ ├── radial_gradient.nk │ │ ├── radial_rays.nk │ │ ├── transform.nk │ │ ├── transform_advanced.nk │ │ ├── turbulence.nk │ │ └── twist.nk │ └── python/ │ ├── ColorGradientUi.py │ ├── GradientPresets.cfg │ ├── NST_ID_Extractor.py │ ├── NST_VectorTracker.py │ ├── NST_cardToTrack.py │ ├── NST_cardToTrack_v9.py │ ├── NST_helper.py │ └── NST_stickit.py └── README.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ # Auto detect text files and perform LF normalization * text=auto ================================================ FILE: .gitignore ================================================ # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class ## Mac ignore # General .DS_Store .AppleDouble .LSOverride *.pyc tab_stats.dat *.dat .dropbox # Thumbnails ._* # Files that might appear in the root of a volume .DocumentRevisions-V100 .fseventsd .Spotlight-V100 .TemporaryItems .Trashes .VolumeIcon.icns .com.apple.timemachine.donotpresent # Directories potentially created on remote AFP share .AppleDB .AppleDesktop Network Trash Folder Temporary Items .apdisk # C extensions *.so # Distribution / packaging *.zip .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ pip-wheel-metadata/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py,cover .hypothesis/ .pytest_cache/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 db.sqlite3-journal # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # pyenv .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. # However, in case of collaboration, if having platform-specific dependencies or dependencies # having no cross-platform support, pipenv may install dependencies that don't work, or not # install all needed dependencies. #Pipfile.lock # celery beat schedule file celerybeat-schedule # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ .dmypy.json dmypy.json # Pyre type checker .pyre/ .DS_Store *.dat # Cursor IDE .cursor/ # AI assistant/tooling .claude/ .codex/ # JetBrains IDE .idea/ # Code review reports .code-review/ .code-review ================================================ FILE: CHANGELOG.md ================================================ # Changelog All notable changes to the Nuke Survival Toolkit are documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [2.2.0] - 2026-03-19 ### Added **Tools (gizmos and Python)** **2026** - CardToTrack (AK) v9.0 **2024** - aeShadows (AE) v1.0 - FastComplexity_Distort (MHD) - fxT_ChromaticAberration (fxT) v3.1 - Emission (NW) v1.2 - aeRefracTHOR (AE) v1.0 - LightSwitch (TL) - LightSwitchPuppet template - ChromaSmear (LJ) - apEdgeCrush (AP) - MirrorDimension (TL) **2023** - PointCloudKeyer (IS) - SpotLight (TL) - Rings of Power (TL) - Symmetry (TL) - SkyMatte **2022** - CardToTrack (AK) updated to v8.0 with NST_cardToTrack.py - ID_Extractor (TL) with NST_ID_Extractor.py - ConstantPro (TL) - HexColor (NW) - RadialDilate (CF) **2021** - GuidedBlur (RF) - iErode (PP) - aeRelight2D (AE) - iTransform_ae (AE) — later fixed onCreate code for render farm - ImagePlane3D_v2 (TL) v2.0 - bm_OpticalLightwrap (renamed from bm_Lightwrap) --- **Other** - `LOAD_EXPRESSION_MENU` configuration option in `menu.py` to optionally enable or disable the Expression Nodes AG submenu (default: disabled). ### Changed - Icon assets recompressed for ~53% size reduction (~127 KB saved); no visual changes. - `ColorGradientUi.py` updated for Nuke 16+ compatibility and PySide6 migration (GradientEditor MHD). - Menu refactor: `nk_path()` and `icon_path()` helpers, f-strings, improved readability; no user-visible behavior change. - Documentation menu now uses a `Documentation` submenu with `Wiki/Docs (Auto)`, `Wiki (Online)`, `Wiki (Offline)`, and `Docs (PDF)` commands. The auto command now falls back in order: online wiki -> offline local wiki -> local PDF, with reachability checks and concise missing-target guidance. - Documentation (offline HTML): **`Wiki/Docs (Auto)`** and **`Wiki (Offline)`** open the bundled wiki via a local **`http://127.0.0.1`** static server (ephemeral port) so **MkDocs Material search** works; falls back to **`file://`** if the server cannot start; browser launch is **non-blocking** (background thread). Reuses the same server when the offline root path is unchanged. - Added dedicated icons for documentation submenu entries (`wiki_default`, `wiki_online`, `wiki_offline`) and used Nuke native `StickyNote` for PDF. - `README.md` now includes an optional offline documentation install section that points users to release ZIP downloads and the required local path (`NukeSurvivalToolkit/NST_Documentation/index.html`). - Updated .nk templates: NST_AdvancedKeyingTemplate_Stamps.nk, NST_X_Aton_Examples.nk, deepThickness.nk. - New icon assets for aeRefracTHOR, aeShadows. - EdgeDetect, GuidedBlur: corrected icons and attribution (#62). - iMorph v2 AP (beta) added alongside v1 in menu. - CardToTrack v9 (AK): Transform menu entries CardToTrack_v9 AK, CProject2 AK, TProject2 AK now use NST_-prefixed gizmos (NST_CardToTrack2, NST_CProject2, NST_TProject2) and NST_cardToTrack_v9.py. **Updated Tools** *Nuke 13 compatibility:* - aPCard - AutoCropTool - DeepKeyMix - FrameFiller - GradMagic - ImagePlane3D - LumaGrain - Matrix4x4_Inverse - mScatterGeo - origami - PlanarProjection (also fixed XAton volumes example) - Reconcile3DFast - Relight_Simple - ReProject_3D - RotoCentroid - RP_Reformat - Sparky - SSMesh - viewer_render - VoronoiGradient *Other updates:* - apeGlow (fixed overscan bug on crop knobs) - apChroma (internal restructure) - apChromaMergeNew (internal restructure) - apDespill: v1 deprecated, v2 promoted as canonical — `NST_apDespill_v2.gizmo` renamed to `NST_apDespill.gizmo` (#63) - apVignette (v0.5: added transform tab, "Apply to White Constant" option) - bm_CameraShake (v4.0: fewer internal nodes/expressions, curve smoothness control, cleaner UI, experimental auto-motionblur beta) (#39) - bm_OpticalGlow (v4.1: fixed mix slider with mask input, removed stale `algorithm_code` knob) (#40, #64) - bm_OpticalLightwrap (fixed mix slider with mask input, removed stale `algorithm_code` knob, default `effect_only` to false, renamed menu entry and icon) (#41) - CameraNormals (updated DummyCam to v1.3) - CellNoise (fixed onCreate center calculation) - ColorSampler (added option to export constant) - DeepRecolorMatte (bug fixes, ported later version) - DummyCam (v1.3, Nuke 13/14+ Camera3 class) - ExponGlow (fixed bug that deleted luma key when changing iterations) - Glass (added channel support and mask input) - InjectMatteChannel (exposed bbox knob) - LightWrapPro (fixed bounding box in non-final view modes) - MorphDissolve (added 0→1 / 1→0 options, STmap export) - SimpleSSS (internal cleanup) - SliceTool (code cleanup) - STmapInverse (code cleanup) - Suppress_RGBCMY (added mask and mix features) - UV_Map (fixed overscan scaling bug) - UV_Mapper (internal cleanup) ### Removed - `h_Qt.py` — obsolete Qt compatibility shim (no longer needed after PySide6 migration). - `NST_bm_Lightwrap.gizmo` — replaced by bm_OpticalLightwrap. - `NST_apDespill_v2.gizmo` — renamed to `NST_apDespill.gizmo` (v2 promoted as canonical). - GlobalCTRL, AnamorphicLensBlur — removed from toolkit (no menu entry, not maintained). - Duplicate `NST_ImagePlane3D_v2.gizmo` — identical to v1, single copy retained. ### Fixed - CellNoise: Blink kernel compile errors on Nuke 15+ (moved globals to #define, replaced abs() with signedness check) (#36). - apEdgeCrush: BlinkScript compile error on Nuke 16 — replaced global inline `lerp()` with `#define` macro (#59). - Windows filepath issues: use `Path.as_posix()` for all toolkit paths so forward slashes are used on every platform, avoiding backslash escape sequences (e.g. `\n` in `\nk_files`) that broke `nuke.nodePaste()` and file knobs on Windows. - Help documentation link on Windows: use `Path.as_uri()` for the documentation PDF URL so drive-letter paths open correctly in the browser. - Documentation online reachability check now handles environments where Python SSL certificate validation fails, preventing false fallback from online docs to PDF. - Offline MkDocs **search** was unreliable when the wiki was opened as **`file://`** — mitigated by serving the same folder over **localhost** when launching from Nuke (**Wiki/Docs (Auto)** / **Wiki (Offline)**). - Node class check in `filepathCreateNode`: use tuple membership instead of chained `or` for file-node detection (#46). - Replaced bare `except:` clauses with specific exception handling (ImportError, RuntimeError) for ColorGradientUi, VectorTracker, and NST_cardToTrack imports (#45). - Menu: corrected bm_Lightwrap node name to bm_OpticalLightwrap (#61). - Menu: replaced broken DeepToPosition TL with Deep2VPosition MJT (#60). - Issue #43: **`NST_FolderPath` is defined inside `NST_helper`** (from `__file__`) instead of being assigned from `menu.py`, so the helper does not depend on `menu.py` having run first and avoids import-order `NameError` risk. --- ## [2.1.1] - 2021-05-19 ### Changed - Updated NST_ImagePlane3D, NST_apDespill_v2, NST_FrameHoldSpecial gizmos. - Updated deepThickness.nk script. --- ## [2.1.0] - 2021-04-28 ### Added **Tools (gizmos and Python)** **2021** - BokehBuilder (KB) - LensEngine (KB) - RankFilter (JP) - MotionBlurPaint (AG) - RotoPaintTransform (AG) - Deep2VP (MJT) - DVPColorCorrect (MJT) - DVP_Shader (MJT) - DVP_ToonShader (MJT) - DVPrelightPT (MJT) - DVPortal (MJT) - FrameHoldSpecial (AG) - InverseMatrix33 (MJT) - InverseMatrix44 (MJT) - apDespill v2 (AP) - MonochromePlus (CF) **2020** - iMorph v2 (AP) - LabelFromRead (TL) - Unify3DCoordinate (MJT) - SceneDepthCalculator (MJT) - DasGrain (FH) - Looper (DB) - HeatWave (DB) --- **Other** - New documentation. ### Changed - NST_ImagePlane3D, NST_GradMagic, NST_iMorph updates. - Menu structure updates. --- ## [2.0.0] - 2021-03-29 ### Added **Tools (gizmos and Python)** **2021** - GodRaysProjector (CF) - MonochromePlus (CF) - RainMaker (MR) **2020** - ImagePlane3D (TL) v2.0 - FrameFiller (MJT) - Edge (RB) - Reconcile3DFast (DR) - GlueP (LS) - AutoFlare2 (NKPD) - DeepMerge_Advanced (BM) - bm_MatteCheck (BM) - bm_NoiseGen (BM) - bm_Lightwrap (BM) - SimpleSSS (MHD) - KeyChew (NKPD) - AdditiveKeyerPro (TL) - apeGlow (AP) - iBlurU (NKPD) - DeepFromDepth --- **Other** - ReadGeo class support in NST_helper. - PerspectiveBB reset points button. - UV_Map, injectChannelMatte tab rename. - Menu restructure and submenus. ### Changed - Nuke 13 compatibility updates across multiple gizmos. - Major init.py restructure. - Documentation updates. ### Fixed - ImagePlane3D crop1, DirectionalBlur CopyBBox, bm_MatteCheck grey_amt. - Menu bugs. - NST_Reconcile3DFast. --- ## [1.1.1] - 2020-10-05 ### Changed - Updated NST_AutoFlare2 gizmo. --- ## [1.1.0] - 2020-10-04 ### Added **Tools (gizmos and Python)** - AutoFlare2 (NKPD) - FrameFiller (MJT) - Edge (RB) - Reconcile3DFast (DR) - GlueP (LS) - DeepMerge_Advanced (BM) - bm_MatteCheck (BM) - bm_NoiseGen (BM) - bm_CurveRemapper (BM) - bm_Lightwrap (BM) - SimpleSSS (MHD) - KeyChew (NKPD) --- ### Changed - Dev branch merge; bm_Lightwrap replaced prior NST_bm_Lightwrap; various tool updates. --- ## [1.0.1] - 2020-09-26 ### Changed - Sparky DB updated to v1.5. - README updates. --- ## [1.0.0] - 2020-09-23 ### Added **Tools (gizmos and Python)** - Initial curated gizmo collection. --- **Other** - Portable tool menu for Foundry Nuke. - Installation via init.py plugin path. [Unreleased]: https://github.com/CreativeLyons/NukeSurvivalToolkit_publicRelease/compare/v2.2.0...HEAD [2.2.0]: https://github.com/CreativeLyons/NukeSurvivalToolkit_publicRelease/compare/v2.1.1...v2.2.0 [2.1.1]: https://github.com/CreativeLyons/NukeSurvivalToolkit_publicRelease/compare/v2.1.0...v2.1.1 [2.1.0]: https://github.com/CreativeLyons/NukeSurvivalToolkit_publicRelease/compare/v2.0.0...v2.1.0 [2.0.0]: https://github.com/CreativeLyons/NukeSurvivalToolkit_publicRelease/compare/v1.1.1...v2.0.0 [1.1.1]: https://github.com/CreativeLyons/NukeSurvivalToolkit_publicRelease/compare/v1.1.0...v1.1.1 [1.1.0]: https://github.com/CreativeLyons/NukeSurvivalToolkit_publicRelease/compare/v1.0.1...v1.1.0 [1.0.1]: https://github.com/CreativeLyons/NukeSurvivalToolkit_publicRelease/compare/v1.0.0...v1.0.1 [1.0.0]: https://github.com/CreativeLyons/NukeSurvivalToolkit_publicRelease/releases/tag/v1.0.0 ================================================ FILE: DEVELOPMENT.md ================================================ # NukeSurvivalToolkit Development Notes This document captures key learnings, architecture decisions, and development knowledge for AI agents and developers working on this project. ## Architecture Overview ``` NukeSurvivalToolkit/ ├── menu.py # Main entry point - creates toolbar, loads all tools ├── init.py # Minimal (plugin path setup happens in menu.py) ├── gizmos/ # 290+ .gizmo files (prefixed NST_) ├── python/ # Supporting Python modules ├── nk_files/ # .nk script templates and presets ├── icons/ # Menu and tool icons (.png) └── images/ # Demo images referenced by gizmos ``` **Loading Flow:** 1. User adds `nuke.pluginAddPath("path/to/NukeSurvivalToolkit")` to their `init.py` 2. Nuke auto-loads `menu.py` on startup 3. `menu.py` registers plugin paths, imports helpers, creates the toolbar menu structure **Documentation menu:** Online/offline/PDF targets and opening offline HTML (preferring a local `http://127.0.0.1` server so MkDocs Material search works) are implemented in `NST_helper`—see that module and `CHANGELOG.md`. ## Menu System ### Entry Point: `menu.py` The menu system uses `nuke.menu('Nodes')` to create a toolbar with submenus: ```python toolbar = nuke.menu('Nodes') NST_menu = toolbar.addMenu('NukeSurvivalToolkit', icon="SurvivalToolkit.png") ``` ### Helper Functions Two utility functions simplify path construction: ```python def nk_path(filename, prefix=False): """Return full path to an .nk file in nk_files folder.""" name = f"{prefixNST}{filename}" if prefix else filename return f"{NST_FolderPath}/nk_files/{name}" def icon_path(filename): """Return full path to an icon file.""" return f"{NST_FolderPath}/icons/{filename}" ``` Usage patterns: ```python # With prefix (NST_AdvancedKeyingTemplate.nk) nk_path("AdvancedKeyingTemplate.nk", prefix=True) # Without prefix (deepThickness.nk) nk_path("deepThickness.nk") ``` ### Tool Creation Methods There are three ways tools are added to menus: 1. **Direct gizmo creation** (most common): ```python menu.addCommand('ToolName', f"nuke.createNode('{prefixNST}ToolName')", icon="icon.png") ``` 2. **Node paste from .nk file** (for templates/multi-node setups): ```python menu.addCommand('Template', f'nuke.nodePaste("{nk_path("Template.nk")}")') ``` 3. **Helper function** (for tools needing file path replacement): ```python menu.addCommand('AutoFlare', f"NST_helper.filepathCreateNode('{prefixNST}AutoFlare2')") ``` ## Gizmo Naming Convention **All toolkit gizmos are prefixed with `NST_`** to avoid conflicts with user tools or other plugins. ``` NST_DummyCam.gizmo NST_LabelFromRead.gizmo NST_ID_Extractor.gizmo ``` The prefix is stored as a global in `menu.py`: ```python global prefixNST prefixNST = "NST_" ``` ## Cross-Platform Path Handling ### The Windows Backslash Problem Windows uses backslashes (`\`) in paths, which causes issues: - `\n` in a path like `C:\nk_files\` is interpreted as a newline - `nuke.nodePaste()` fails with malformed paths - File knobs display incorrectly **Solution:** Always use `Path.as_posix()` to force forward slashes: ```python from pathlib import Path # CORRECT - works on all platforms NST_FolderPath = Path(__file__).parent.as_posix() # WRONG - breaks on Windows NST_FolderPath = os.path.dirname(__file__) ``` `NST_helper.py` also defines `NST_FolderPath` at import time from its own location (toolkit root is the parent of `python/`). `menu.py` still assigns `NST_helper.NST_FolderPath` after import; both point at the same toolkit folder. ### Documentation URLs (`NST_helper`) Documentation is opened from `NST_helper` (see `openNSTDocumentationDefault`, `openNSTDocumentationOffline`, `openNSTDocumentationPDF`). - **Online wiki:** `webbrowser.open(NST_DOCS_ONLINE_URL)` with a prior HTTPS reachability check (`is_online_wiki_reachable`). - **Offline HTML:** Prefer `http://127.0.0.1:/` via a small local static server so MkDocs Material search works; if that fails, fall back to `offline_index.as_uri()` (`file://`). - **PDF in toolkit root:** Resolve with `find_pdf_doc()` (`NST_DOCS_PDF_NAME` under `_toolkit_root()`), then open with `Path.as_uri()` so Windows drive letters become valid `file:///…` URLs: ```python pdf_doc = find_pdf_doc() if pdf_doc: webbrowser.open(pdf_doc.as_uri()) ``` ## Dynamic File Path Replacement Some gizmos contain Read/Camera nodes that reference image files in the toolkit. These use a placeholder pattern: ```python # In gizmo: file path contains "<<>>" # NST_helper.filepathCreateNode() swaps it with actual path def filepathCreateNode(gizmoName): # ...create node... for i in fileNodes: if i.Class() in ("Read", "DeepRead", "ReadGeo", "ReadGeo2", "Camera2", "Axis2"): filepath = i.knob("file").getValue() if "<<>>" in filepath: newFilepath = filepath.replace("<<>>", NST_FolderPath) i.knob("file").setValue(newFilepath) ``` **Example (Read node `file` knob):** | | Path | |---|------| | **Before** (placeholder in gizmo) | `<<>>/images/my_demo.exr` | | **After** (at runtime) | `NST_FolderPath` + `/images/my_demo.exr` — e.g. `/…/NukeSurvivalToolkit/images/my_demo.exr` | Put assets under `images/` next to `gizmos/`, `python/`, etc., and keep the path after `<<>>` relative to the toolkit root. **Node classes that support file replacement:** Read, DeepRead, ReadGeo, ReadGeo2, Camera2, Axis2 ## Python Module Loading ### Safe Import Pattern When loading optional Python modules, use specific exception handling: ```python # CORRECT - catches specific errors try: import ColorGradientUi drawMenu.addCommand("GradientEditor", ...) except ImportError as e: print(f"Could not load ColorGradientUi: {e}") pass # ALSO CORRECT - for nuke.load() try: nuke.load(f'{prefixNST}VectorTracker.py') menu.addCommand('VectorTracker', ...) except RuntimeError as e: print(f"Could not load VectorTracker.py: {e}") pass ``` ### Module Dependencies | Module | Purpose | Dependencies | |--------|---------|--------------| | `ColorGradientUi.py` | Gradient editor widget | PySide6, ConfigParser | | `NST_helper.py` | Path replacement utility; documentation submenu (online/offline/PDF); local HTTP for offline HTML | nuke, nukescripts, pathlib, stdlib (http, threading) | | `NST_ID_Extractor.py` | ID channel extraction | nuke, nukescripts | | `NST_VectorTracker.py` | Vector-based tracking | nuke | | `NST_cardToTrack.py` | CardToTrack v7 — 3D card to 2D track | nuke, math, threading | | `NST_cardToTrack_v9.py` | CardToTrack v9 — used by NST_CardToTrack2, NST_CProject2, NST_TProject2 | nuke, math, re, time | | `NST_stickit.py` | Camera tracker warping | nuke, nuke.splinewarp, math | ## Nuke Version Compatibility ### Camera Class Changes (Nuke 13+) Nuke 13 introduced `Camera3` class. Code must check for all camera types: ```tcl # In DummyCam.gizmo TCL expression if {[class $x]=="Camera3"||[class $x]=="Camera2"||[class $x]=="Camera"} { # handle camera... } ``` ### PySide Migration (Nuke 16+) Nuke 16+ uses PySide6 instead of PySide2. The `ColorGradientUi.py` was updated: ```python # Old (PySide2) from PySide2 import QtGui, QtCore, QtWidgets # New (PySide6) from PySide6 import QtGui, QtCore, QtWidgets from PySide6.QtWidgets import QWidget, QLabel, ... from PySide6.QtGui import QColor, QPainter, ... ``` **Key change:** In PySide6, some classes moved from `QtWidgets` to `QtGui` (e.g., `QAction`). ## Gizmo Etiquette ### Save as Group, not Gizmo When you save a tool to disk, use a **Group** as the root node, not a **Gizmo**. NST ships tools as Groups so scripts remain valid if NST is not installed (for example on a render farm) or if the toolkit is removed. Internal nodes, expressions, and the Group structure still load; a Gizmo definition would not. ### Clean the header when pasting from Nuke Copying a node from Nuke into a text editor often includes paste/stack boilerplate before the node block. Strip that so **`Group {` is the first line** of the tool, and verify the **`name`** matches the tool. **Remove these lines** (everything above `Group {`): ```nk set cut_paste_input [stack 0] version 16.0 v8 push $cut_paste_input ``` (Version numbers will differ; remove the `set`, `version`, and `push` block in full.) **Remove graph position** so the node does not snap to a fixed spot when the script is merged or opened elsewhere. Delete the `xpos` and `ypos` lines near the top of the Group, **before** the first `addUserKnob`: ```nk xpos 136 ypos -78 ``` **Example — raw paste (abbreviated):** ```nk --- set cut_paste_input [stack 0] version 16.0 v8 push $cut_paste_input Group { name GradMagic tile_color 0x621d5aff gl_color 0xbffffff note_font "Verdana Bold" note_font_color 0x73e6e2ff selected true xpos 136 ypos -78 addUserKnob {20 GradMagic} ``` **Example — cleaned header:** ```nk Group { name GradMagic tile_color 0x621d5aff gl_color 0xbffffff note_font "Verdana Bold" note_font_color 0x73e6e2ff selected true addUserKnob {20 GradMagic} ``` ## TCL Expression Techniques ### DummyCam's Camera Traversal The DummyCam gizmo uses TCL to find an upstream camera through any number of group levels: ```tcl # Traverse up through inputs and groups to find camera set x [node $starting_point] while {$finished != 1} { while {[class $x] != "Camera3" && [class $x] != "Camera2" ...} { set x [node $x.input0] } # If found Input node, jump to parent group's corresponding input if {[class $x]=="Input"} { set inp "$x.parent.input" set inputNum [value $x.number] # ... } } ``` ## Configuration Options `menu.py` includes user-configurable variables: ```python # Set to True to load the Expression Nodes AG submenu under Draw LOAD_EXPRESSION_MENU = False ``` **Note:** Disabled by default to reduce menu clutter for users who don't need expression node presets. ## Integration with External Tools ### Stamps Integration Several tools attempt to integrate with Adrian Pueyo's Stamps tool: ```python try: import stamps stamps.anchor(title=channelName, tags="ID", input_node="", node_type="2D") except ImportError: pass # Stamps not installed, skip silently ``` **Tools with Stamps support:** ID_Extractor ## File Reference | File | Purpose | |------|---------| | `menu.py` | Main menu creation and tool registration | | `init.py` | Minimal stub (most work in menu.py) | | `NST_helper.py` | `filepathCreateNode()` for dynamic paths; documentation menu (online/offline/PDF); local HTTP server for offline wiki when opening bundled HTML | | `ColorGradientUi.py` | PySide6 gradient editor widget | | `NST_ID_Extractor.py` | RGB channel extraction with Stamps | | `NST_VectorTracker.py` | Vector/motion vector based tracking | | `NST_cardToTrack.py` | CardToTrack v7 3D→2D conversion | | `NST_cardToTrack_v9.py` | CardToTrack v9 3D→2D conversion; used by NST_CardToTrack2, NST_CProject2, NST_TProject2 gizmos | | `NST_stickit.py` | SplineWarp from CameraTracker | | `GradientPresets.cfg` | Stored gradient presets (ConfigParser) | ## Testing 1. Add toolkit path to `~/.nuke/init.py`: ```python nuke.pluginAddPath("/path/to/NukeSurvivalToolkit") ``` 2. Restart Nuke 3. Look for red multi-tool icon in toolbar 4. Test individual tools by creating them from the menu ## Contributing When adding new tools: 1. Name the gizmo file `NST_ToolName.gizmo` 2. Add menu entry in appropriate section of `menu.py` 3. Use existing icon or add new one to `icons/` 4. If tools or tool demos need images to read in, add them to `images/` and use the `<<>>` placeholder in the Read (or other file) node's file path so `NST_helper.filepathCreateNode()` can substitute the toolkit root. 5. Update CHANGELOG.md with addition ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2020 CreativeLyons Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_AdditiveKeyerPro.gizmo ================================================ Group { name AdditiveKeyerPro tile_color 0x5200ff note_font "Verdana Bold" note_font_color 0xffffffff selected true addUserKnob {20 AdditiveKeyer} addUserKnob {6 useSC l "Use Screen Color as CleanPlate" +STARTLINE} addUserKnob {41 screenColor l "Screen Color" T Keylight1.screenColour} addUserKnob {6 despillSat l "Despill Screen Color from Saturation?" +STARTLINE} despillSat true addUserKnob {26 ""} addUserKnob {7 DarkValue l "Dark Value" R 0 5} DarkValue 1 addUserKnob {7 satDarks l "Saturate Darks"} satDarks 0.2 addUserKnob {18 darkTint l "Dark Tint"} darkTint 1 addUserKnob {6 darkTint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {6 lightTint_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {7 ExtraLightValue l "Light Value Plus" R 0 2} ExtraLightValue 1 addUserKnob {7 satLights l "Saturate Lights"} satLights 0.2 addUserKnob {18 lightTint l "Light Tint"} lightTint 1 addUserKnob {6 lightTint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 LightValue l "Light Value BG Mult" R 0 5} LightValue 0.25 addUserKnob {26 ""} addUserKnob {6 darkTint_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {6 lightTint_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {6 compositeSwitch l "Output Difference to RGB" +STARTLINE} addUserKnob {6 outputDiffAlpha l "Output Difference Matte to Alpha" +STARTLINE} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l "Modified By:" T "Tony Lyons"} addUserKnob {26 desc l Description: t "adds the difference between cleanplate and key plate to the BG\n\nGood for hair details and shadows and sensitive edge treatment" T AdditiveKeyer} addUserKnob {26 ver l Version: T v04} } Input { inputs 0 name Inputmask xpos 685 ypos 1141 number 3 } Dot { name Dot10 label Mask note_font_size 41 xpos 719 ypos 1883 } Dot { name Dot11 note_font_size 41 xpos 719 ypos 1983 } Input { inputs 0 name fg label "\[value number]" xpos -500 ypos -221 number 1 } Remove { channels alpha name Remove2 xpos -500 ypos -147 } AddChannels { channels rgba name AddChannels2 xpos -500 ypos -109 } Dot { name Dot26 note_font_size 41 xpos -466 ypos 5 } set Ne63218b0 [stack 0] OFXuk.co.thefoundry.keylight.keylight_v201 { show "Final Result" unPreMultiply false screenColour {0 0 0} screenGain 1 screenBalance 0.5 alphaBias {0.5 0.5 0.5} despillBias {0.5 0.5 0.5} gangBiases true preBlur 0 "Screen Matte" 0 screenClipMin 0 screenClipMax 1 screenClipRollback 0 screenGrowShrink 0 screenSoftness 0 screenDespotBlack 0 screenDespotWhite 0 screenReplaceMethod "Soft Colour" screenReplaceColour {0.5 0.5 0.5} Tuning 0 midPoint 0.5 lowGain 1 midGain 1 highGain 1 "Inside Mask" 0 sourceAlphaHandling Ignore insideReplaceMethod "Soft Colour" insideReplaceColour {0.5 0.5 0.5} Crops 0 SourceXMethod Colour SourceYMethod Colour SourceEdgeColour 0 SourceCropL 0 SourceCropR 1 SourceCropB 0 SourceCropT 1 balanceSet false insideComponent None outsideComponent None cacheBreaker true name Keylight1 xpos -500 ypos 73 } set Nda7c91c0 [stack 0] push $Ne63218b0 Dot { name Dot27 note_font_size 41 xpos -356 ypos 5 } Merge2 { inputs 2 operation from name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -390 ypos 73 } Clamp { channels rgba name Clamp1 xpos -390 ypos 99 } Saturation { saturation 0 name Saturation4 xpos -390 ypos 125 } push $Nda7c91c0 Merge2 { inputs 2 operation plus name Merge7 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -500 ypos 125 } push $Ne63218b0 Dot { name Dot30 note_font_size 41 xpos -598 ypos 5 } Dot { name Dot31 note_font_size 41 xpos -598 ypos 218 } Switch { inputs 2 which {{parent.despillSat}} name DespillSwitch1 label "\[value which]" xpos -500 ypos 208 } Dot { name Dot8 xpos -466 ypos 373 } set Ne61ad600 [stack 0] Input { inputs 0 name clean label "\[value number]" xpos 126 ypos -175 number 2 } Remove { channels alpha name Remove3 xpos 126 ypos -101 } AddChannels { channels rgba name AddChannels1 xpos 126 ypos -63 } Grade { multiply 0 add {{parent.Keylight1.screenColour} {parent.Keylight1.screenColour} {parent.Keylight1.screenColour} {parent.Keylight1.screenColour}} name ScreenColor xpos 126 ypos -14 disable {{!parent.useSC}} } Dot { name Dot28 note_font_size 41 xpos 160 ypos 50 } set Ne61d0820 [stack 0] OFXuk.co.thefoundry.keylight.keylight_v201 { show "Final Result" unPreMultiply false screenColour {{parent.Keylight1.screenColour} {parent.Keylight1.screenColour} {parent.Keylight1.screenColour}} screenGain 1 screenBalance 0.5 alphaBias {0.5 0.5 0.5} despillBias {0.5 0.5 0.5} gangBiases true preBlur 0 "Screen Matte" 0 screenClipMin 0 screenClipMax 1 screenClipRollback 0 screenGrowShrink 0 screenSoftness 0 screenDespotBlack 0 screenDespotWhite 0 screenReplaceMethod "Soft Colour" screenReplaceColour {0.5 0.5 0.5} Tuning 0 midPoint 0.5 lowGain 1 midGain 1 highGain 1 "Inside Mask" 0 sourceAlphaHandling Ignore insideReplaceMethod "Soft Colour" insideReplaceColour {0.5 0.5 0.5} Crops 0 SourceXMethod Colour SourceYMethod Colour SourceEdgeColour 0 SourceCropL 0 SourceCropR 1 SourceCropB 0 SourceCropT 1 balanceSet false insideComponent None outsideComponent None cacheBreaker true name Keylight2 xpos 126 ypos 118 } set Ne61d4760 [stack 0] push $Ne61d0820 Dot { name Dot29 note_font_size 41 xpos 270 ypos 50 } Merge2 { inputs 2 operation from name Merge8 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 236 ypos 118 } Clamp { channels rgba name Clamp2 xpos 236 ypos 144 } Saturation { saturation 0 name Saturation5 xpos 236 ypos 170 } push $Ne61d4760 Merge2 { inputs 2 operation plus name Merge9 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 126 ypos 170 } push $Ne61d0820 Dot { name Dot33 note_font_size 41 xpos 28 ypos 50 } Dot { name Dot34 note_font_size 41 xpos 28 ypos 230 } Switch { inputs 2 which {{parent.despillSat}} name DespillSwitch2 label "\[value which]" xpos 126 ypos 223 } Dot { name Dot35 note_font_size 41 xpos 160 ypos 320 } set Ndc6e9920 [stack 0] Dot { name Dot6 xpos 412 ypos 320 } Merge2 { inputs 2 operation difference Achannels rgb Bchannels rgb name Merge6 xpos 378 ypos 370 } Group { name ChannelControl_v3 label "\[value channel_selector.in]" note_font "Bitstream Vera Sans" xpos 378 ypos 440 mapsize {0.15 0.15} addUserKnob {20 channelControl} addUserKnob {41 Channel_Selection T channel_selector.in} addUserKnob {26 Description l "" +STARTLINE T ":Channel Control:\n\nChannel math with choice of merge operation"} addUserKnob {26 ""} addUserKnob {7 redGain} redGain 0.3 addUserKnob {7 greenGain} greenGain 0.59 addUserKnob {7 blueGain} blueGain 0.11 addUserKnob {7 alphaGain} addUserKnob {41 operation T Merge1.operation} } Input { inputs 0 name Input1 xpos 558 ypos -694 } Shuffle { name channel_selector label "\[value in]" xpos 558 ypos -668 } set Ne600a100 [stack 0] Shuffle { green red blue red alpha red name Shuffle1 xpos 386 ypos -536 } Grade { channels rgba white {{parent.redGain i}} name Grade12 xpos 386 ypos -492 } push $Ne600a100 Shuffle { red green blue green alpha green name Shuffle2 xpos 499 ypos -534 } Grade { channels rgba white {{parent.greenGain i}} name Grade13 xpos 499 ypos -493 } Merge2 { inputs 2 operation plus name Merge1 xpos 411 ypos -428 } set C310f6910 [stack 0] push $Ne600a100 Shuffle { red blue green blue alpha blue name Shuffle3 xpos 610 ypos -538 } Grade { channels rgba white {{parent.blueGain i}} name Grade14 xpos 610 ypos -494 } clone $C310f6910 { inputs 2 xpos 486 ypos -369 selected false } push $Ne600a100 Shuffle { red alpha green alpha blue alpha name Shuffle4 selected true xpos 725 ypos -535 } Grade { channels rgba white {{parent.alphaGain i}} name Grade15 xpos 725 ypos -494 } clone $C310f6910 { inputs 2 xpos 580 ypos -307 selected false } Output { name Output1 xpos 600 ypos -210 } end_group Dot { name Dot14 note_font_size 41 xpos 412 ypos 1768 } Input { inputs 0 name bg label "\[value number]" xpos -845 ypos -242 } AddChannels { channels rgba name AddChannels3 xpos -845 ypos -151 } Dot { name Dot9 note_font_size 41 xpos -811 ypos -78 } Dot { name Dot4 xpos -811 ypos 1449 } set Nd631a0b0 [stack 0] Dot { name Dot13 note_font_size 41 xpos -811 ypos 1688 } set Nd631df90 [stack 0] push $Ne61ad600 Dot { name Dot2 note_font_size 41 xpos -466 ypos 421 } set Nd6321e60 [stack 0] Saturation { saturation {{parent.satDarks}} name Saturation9 xpos -378 ypos 418 } push $Ndc6e9920 Saturation { saturation {{parent.satDarks}} name Saturation8 xpos -215 ypos 317 } Merge2 { inputs 2 operation divide name Merge5 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -215 ypos 418 } Dot { name Dot38 note_font_size 41 xpos -181 ypos 674 } Clamp { channels rgba minimum 1 minimum_enable false name Clamp4 xpos -215 ypos 786 } Add { channels rgba value -1 name Add3 xpos -215 ypos 840 } Multiply { channels rgb value {{parent.DarkValue} {parent.DarkValue} {parent.DarkValue} 0} name DARK_VALUE xpos -215 ypos 892 } Grade { multiply {{parent.darkTint} {parent.darkTint} {parent.darkTint} {parent.darkTint}} reverse true black_clamp false name DARK_TINT xpos -215 ypos 931 } Add { channels rgba value 1 name Add4 xpos -215 ypos 988 } Clamp { channels rgb name Clamp5 xpos -215 ypos 1065 } Dot { name Dot39 note_font_size 41 xpos -181 ypos 1257 } push $Nd6321e60 Dot { name Dot36 note_font_size 41 xpos -466 ypos 577 } Saturation { saturation {{parent.satLights}} name Saturation1 xpos -101 ypos 574 } set Nb662b010 [stack 0] push $Ndc6e9920 Saturation { saturation {{parent.satLights}} name Saturation6 xpos 126 ypos 500 } set Nb662f000 [stack 0] Merge2 { inputs 2 operation divide also_merge all name Merge10 label all xpos 126 ypos 568 } Clamp { channels rgba minimum 1 maximum_enable false name Clamp3 xpos 126 ypos 780 } Add { channels rgba value -1 name Add1 xpos 126 ypos 838 } Multiply { channels rgb value {{parent.LightValue} {parent.LightValue} {parent.LightValue} 0} name LIGHT_VALUE xpos 126 ypos 961 } Multiply { channels rgb value {{parent.lightTint.r} {parent.lightTint.g} {parent.lightTint.b} 0} name LIGHT_TINT xpos 126 ypos 1039 } Add { channels rgba value 1 name Add2 xpos 126 ypos 1120 } Merge2 { inputs 2 operation multiply Achannels rgb Bchannels rgb output rgb name __CONSTRAIN_DARKS__ xpos 128 ypos 1253 } Dot { name Dot19 note_font_size 41 xpos 162 ypos 1354 } set Nd6028a80 [stack 0] Dot { name Dot3 xpos -8 ypos 1354 } Dot { name Dot16 note_font_size 41 xpos -8 ypos 1611 } push $Nb662f000 Dot { name Dot7 note_font_size 41 xpos 310 ypos 503 } push $Nb662b010 Dot { name Dot5 note_font_size 41 xpos -67 ypos 691 } Merge2 { inputs 2 operation from name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 276 ypos 688 } Clamp { channels rgba maximum_enable false name Clamp6 xpos 276 ypos 781 } Multiply { channels rgba value {{parent.ExtraLightValue}} name Multiply1 label "\[value value]" xpos 276 ypos 899 } Multiply { channels rgb value {{parent.lightTint.r} {parent.lightTint.g} {parent.lightTint.b} 0} name LIGHT_TINT1 xpos 276 ypos 1036 } Dot { name Dot15 note_font_size 41 xpos 310 ypos 1513 } push $Nd6028a80 Dot { name Dot1 note_font_size 41 xpos 162 ypos 1449 } push $Nd631a0b0 Merge2 { inputs 2 operation multiply Achannels rgb Bchannels rgb output rgb name CONSTRAIN_LIGHTS xpos 128 ypos 1446 } Merge2 { inputs 2 operation plus output rgb name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 128 ypos 1510 } Switch { inputs 2 which {{parent.compositeSwitch}} name Switch1 label "\[value which]" xpos 128 ypos 1604 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 128 ypos 1678 disable {{parent.outputDiffAlpha}} } Copy { inputs 2 from0 rgba.blue to0 rgba.alpha name __LUMA_INTO_ALPHA__ xpos 128 ypos 1758 disable {{!parent.outputDiffAlpha}} } Dot { name Dot17 label A note_font_size 41 xpos 162 ypos 1910 } push $Nd631df90 Dot { name Dot18 label B note_font_size 41 xpos -811 ypos 1895 } Dot { name Dot12 note_font_size 41 xpos -811 ypos 1986 } Merge2 { inputs 2+1 operation copy bbox B Achannels none Bchannels none output none also_merge rgba name MergeKeymix xpos 128 ypos 1973 } Output { name Output1 xpos 128 ypos 2235 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_AnimationCurve.gizmo ================================================ Group { name ANIMATION_CURVES inputs 0 knobChanged "nk = nuke.thisNode()\nk = nuke.thisKnob()\nif ('active_translate' in k.name()) or ('active_scale' in k.name()) or ('active_time' in k.name())or ('scale_1' in k.name()) or ('translate' in k.name()) or ('delay' in k.name()):\n input = nk.knob('input_modify').getValue()\n value = input\n expression = 'input_modify'\n string = 'input'\n if(nk.knob('active_time').getValue() == 1):\n expression = 'input_modify(frame + delay)'\n string = 'input(frame + offset)'\n if(nk.knob('active_scale').getValue() == 1):\n value = value * nk.knob('scale_1').getValue()\n expression = expression + '*scale_1'\n string = string + ' * scale'\n if(nk.knob('active_translate').getValue() == 1):\n value = value + nk.knob('translate').getValue()\n expression = '(' + expression + ' + translate)'\n string = '(' + string + '+ translate)'\n nk.knob('output_modify').setExpression(expression)\n nk.knob('expression_modify').setValue(string)\nif ('wave_type' in k.name()):\n if int(nk.knob('wave_type').getValue())==0:\n expression = 'random((frame+offset)/speed) * (max_val-min_val) + min_val'\n elif int(nk.knob('wave_type').getValue())==1:\n expression = '(noise((frame+offset)/speed)+1)/2 * (max_val-min_val) + min_val'\n elif int(nk.knob('wave_type').getValue())==2:\n expression = '(sin(2*pi*(frame+offset)/speed)+1)/2 * (max_val-min_val) + min_val'\n elif int(nk.knob('wave_type').getValue())==3:\n expression = '(asin(sin(2*pi*(frame+offset)/speed))/pi+0.5) * (max_val-min_val) + min_val'\n elif int(nk.knob('wave_type').getValue())==4:\n expression = 'int(sin(2*pi*(frame+offset)/speed)+1) * (max_val-min_val) + min_val'\n elif int(nk.knob('wave_type').getValue())==5:\n expression = '((frame+(offset+speed)) % (speed+blip)/(speed)) *(speed/blip) - (speed/blip) >= 0 ? max_val : min_val'\n elif int(nk.knob('wave_type').getValue())==6:\n expression = '((int((frame+offset) % speed)) >= 0 ? ((int((frame+offset) % speed)) <= (0+(blip-1)) ? ((sin(pi*((frame+offset) % speed)/blip)/2+1/2) * (2*max_val-2*min_val) + (2*min_val-max_val)) : min_val) : min_val)'\n elif int(nk.knob('wave_type').getValue())==7:\n expression = 'abs(sin(pi*(frame + offset)/speed))* (max_val-min_val) + min_val'\n elif int(nk.knob('wave_type').getValue())==8:\n expression = '((frame+offset) % speed)/speed * (max_val-min_val) + min_val'\n elif int(nk.knob('wave_type').getValue())==9:\n expression = 'sin((pi*(frame+offset)/(2*speed)) % (pi/2)) * (max_val-min_val) + min_val'\n elif int(nk.knob('wave_type').getValue())==10:\n expression = 'cos((pi*(frame+offset)/(2*speed)) % (pi/2)) * (max_val-min_val) + min_val'\n elif int(nk.knob('wave_type').getValue())==11:\n expression = '(exp(2*pi*((frame+offset) % speed)/speed)-1)/exp(2*pi) * (max_val-min_val) + min_val'\n nk.knob('output_wave').setExpression(expression)\n nk.knob('expression_wave').setValue(expression)\n#----------------------------------------\n#FADE\n\n\nif ('fade_type' in k.name()) or ('fade_dissolve' in k.name()):\n fadeStart = nk.knob('fadeStart').getValue()\n fadeEnd = nk.knob('fadeEnd').getValue()\n \n if int(nk.knob('fade_type').getValue())==0:\n expression_fade=\"clamp((frame-fadeStart)/(fadeEnd-fadeStart))\"\n elif int(nk.knob('fade_type').getValue())==1:\n expression_fade=\"(sin(clamp(((frame-fadeStart)*pi)/(fadeEnd-fadeStart) - pi/2, -pi/2, pi/2))+1) /2\"\n elif int(nk.knob('fade_type').getValue())==2:\n expression_fade=\"sin(clamp(((frame-fadeStart)*pi)/((fadeEnd-fadeStart)*2)-pi/2, -pi/2,0))+1\"\n elif int(nk.knob('fade_type').getValue())==3:\n expression_fade=\"sin(clamp(((frame-(fadeStart*2-fadeEnd))*pi)/((fadeEnd-fadeStart)*2)-pi/2,0,pi/2))\"\n\n\n \n saveExpression = expression_fade\n \n if int(nk.knob('fade_dissolve').getValue())==0:\n expression_fade = saveExpression\n elif int(nk.knob('fade_dissolve').getValue())==1:\n expression_fade = \"1-(\" + saveExpression + \")\"\n \n nk.knob('out_fade').setExpression(expression_fade)\n nk.knob('expression_fade').setValue(expression_fade)\n" autolabel nuke.thisNode().name() tile_color 0x367f5eff note_font "Bitstream Vera Sans Bold" note_font_color 0xffffffff addUserKnob {20 wave_generator l "Wave Generator"} addUserKnob {4 wave_type l "Wave type" M {Random Noise Sine Triangle Square Blip "Sine Blip" Bounce SawTooth "Saw Parabolic" "Saw Parabolic Reverse" "Saw Exponential" ""}} addUserKnob {7 min_val l "Min val" R -10 10} min_val 10 addUserKnob {7 max_val l "Max val" R -10 10} max_val 28 addUserKnob {7 speed l "Speed (frequency)" R 1 100} speed 2 addUserKnob {7 offset l "Time offset" R -10 10} addUserKnob {7 blip l Blip R 1 10} blip 1 addUserKnob {26 ""} addUserKnob {7 output_wave l "output wave"} output_wave {{"random((frame+offset)/speed) * (max_val-min_val) + min_val"}} addUserKnob {1 expression_wave l "Expression"} expression_wave "random((frame+offset)/speed) * (max_val-min_val) + min_val" addUserKnob {26 ""} addUserKnob {26 email l "" +STARTLINE T "Animation and Curves v2.2
\nby Andrea Geremia
\n
\nandrea.geremia89@gmail.com
\nwww.andreageremia.it
"} addUserKnob {22 Tutorial l "Tutorial" -STARTLINE T "nuke.tcl('start', 'http://www.andreageremia.it/tutorial_animation_nuke.html')"} addUserKnob {20 newrange l "New Range"} addUserKnob {26 message l "" +STARTLINE T "Normalize animation curves\nRemap a curve into a new min-max range, keeping the proportion"} addUserKnob {26 "" +STARTLINE} addUserKnob {7 input_range l "input"} addUserKnob {26 original l "ORIGINAL RANGE"} addUserKnob {22 calc_min_max l "Calculate Min and Max" t "Drag and drop your input curve, then press this button. \nYou can calculate automatically the min and max value of the curve" T "first = nuke.Root().firstFrame()\nlast = nuke.Root().lastFrame()\n\nframeRange = str(first) + \"-\" + str(last)\n\n\nret = nuke.getFramesAndViews('insert frame range', frameRange)\nif ret:\n frame_range = ret\[0].split('-')\n \n min = max = nuke.thisNode()\['input_range'].getValueAt(int(frame_range\[0]))\n \n nuke.frame(int(frame_range\[0]))\n \n for i in range(int(frame_range\[0]), int(frame_range\[1])+1):\n knob = nuke.thisNode()\['input_range'].getValueAt(i)\n if (knob > max):\n max = knob\n \n if (knob < min):\n min = knob\n \n \n nuke.thisNode()\['min_old'].setValue(min)\n nuke.thisNode()\['max_old'].setValue(max)" +STARTLINE} addUserKnob {7 min_old l min} min_old -5 addUserKnob {7 max_old l max} max_old 6 addUserKnob {26 new l "NEW RANGE"} addUserKnob {7 min_new l min} addUserKnob {7 max_new l max} max_new 1 addUserKnob {26 ""} addUserKnob {7 output_range l "output range" -STARTLINE} output_range {{min_new+(((max_new-min_new)/(max_old-min_old))*(input_range-min_old))}} addUserKnob {1 expression_range l "Expression"} expression_range min_new+(((max_new-min_new)/(max_old-min_old))*(input-min_old)) addUserKnob {22 generate l Generate -STARTLINE T "nk = nuke.thisNode()\nnk.knob('expression_range').setValue(\"min_new+(((max_new-min_new)/(max_old-min_old))*(input-min_old))\")"} addUserKnob {20 smooth_curve l "Smooth Curves"} addUserKnob {26 message_2 l "" +STARTLINE T "Drag and drop your curve and apply the smooth."} addUserKnob {26 "" +STARTLINE} addUserKnob {14 input_smooth l "input" R 0 100} addUserKnob {26 ""} addUserKnob {14 smooth l Smooth R 0 100} smooth 2 addUserKnob {4 smooth_type l Type M {low high "" ""}} smooth_type high addUserKnob {26 ""} addUserKnob {14 output_smooth l "output smooth" R 0 100} output_smooth {{"smooth_type==0?input_smooth.w.integrate(frame-1, frame+1) / (2*smooth.w):input_smooth.w.integrate(frame-smooth.w, frame+smooth.w) / (2*smooth.w)"}} addUserKnob {1 expression_smooth l "Expression"} expression_smooth "input.x.integrate(frame-smooth, frame+smooth) / (2*smooth)" addUserKnob {22 generate_smooth l Generate -STARTLINE T "nk = nuke.thisNode()\nnk.knob('expression_smooth').setValue(\"input.x.integrate(frame-smooth, frame+smooth) / (2*smooth)\")"} addUserKnob {20 modify l "Modify Curves"} addUserKnob {26 message_5 l "" +STARTLINE T "Change size, translation or offset of your curve"} addUserKnob {26 "" +STARTLINE} addUserKnob {14 input_modify l "input" R 0 100} addUserKnob {26 ""} addUserKnob {6 active_translate l "" +STARTLINE +STARTLINE} addUserKnob {26 position l TRANSLATE -STARTLINE T " "} addUserKnob {14 translate R 0 100} translate 1 addUserKnob {26 ""} addUserKnob {6 active_scale l "" +STARTLINE +STARTLINE} addUserKnob {26 scale l SCALE -STARTLINE T " "} addUserKnob {14 scale_1 l scale R 0 100} scale_1 1 addUserKnob {26 ""} addUserKnob {6 active_time l "" +STARTLINE +STARTLINE} addUserKnob {26 time l TIME -STARTLINE T " "} addUserKnob {3 delay l "Time offset"} delay 1 addUserKnob {26 frames -STARTLINE T " "} addUserKnob {26 ""} addUserKnob {14 output_modify l "output modify" R 0 100} output_modify {{input_modify}} addUserKnob {1 expression_modify l "Expression"} expression_modify input addUserKnob {20 Fade} addUserKnob {26 fade_message l "" +STARTLINE T "Create the fade/dissolve from start frame till end frame. \nYou can animate mix or another value from 0-1 or 1-0"} addUserKnob {26 "" +STARTLINE} addUserKnob {4 fade_type l Type M {Linear "Slow-in Slow-out" "Slow-in Linear-out" "Linear-in Slow-Out"}} fade_type "Slow-in Slow-out" addUserKnob {4 fade_dissolve l "fade from" M {"0 to 1" "1 to 0"}} fade_dissolve "1 to 0" addUserKnob {26 ""} addUserKnob {26 fade_message_1 l "" +STARTLINE T "Start frame has to be less than End frame"} addUserKnob {3 fadeStart l "start Frame"} addUserKnob {3 fadeEnd l "end Frame"} fadeEnd 5 addUserKnob {26 ""} addUserKnob {7 out_fade l "output fade"} out_fade {{"1-((sin(clamp(((frame-fadeStart)*pi)/(fadeEnd-fadeStart) - pi/2, -pi/2, pi/2))+1) /2)"}} addUserKnob {1 expression_fade l "Expression"} expression_fade "1-((sin(clamp(((frame-fadeStart)*pi)/(fadeEnd-fadeStart) - pi/2, -pi/2, pi/2))+1) /2)" addUserKnob {20 reference_frame l "Ref frame"} addUserKnob {26 message_1 l "" +STARTLINE T "Change reference frame of your curve.\nSet the input equal to 0 in the reference frame"} addUserKnob {26 "" +STARTLINE} addUserKnob {7 input_ref l "input"} addUserKnob {3 ref_frame l "Reference frame"} ref_frame 100 addUserKnob {22 set_frame l "set current to frame" -STARTLINE T "nk = nuke.thisNode()\nnk.knob('ref_frame').setValue(nuke.frame())"} addUserKnob {26 ""} addUserKnob {7 output_ref l "output ref"} output_ref {{"input_ref - input_ref(ref_frame)"}} addUserKnob {1 expression_ref l "Expression"} expression_ref "input - input(frame)" addUserKnob {22 generate_3 l Generate -STARTLINE T "nk = nuke.thisNode()\nnk.knob('expression_ref').setValue(\"input - input(frame)\")"} addUserKnob {20 percentage l Percentage} addUserKnob {26 message_4 l "" +STARTLINE T "Increase or reduce the curve with %"} addUserKnob {26 "" +STARTLINE} addUserKnob {7 input_percentage l "input"} addUserKnob {4 operation M {increase reduce "" "" ""}} addUserKnob {3 percentage_1 l " "} percentage_1 10 addUserKnob {26 percentage_2 l % -STARTLINE} addUserKnob {26 ""} addUserKnob {7 output_percentage l "output percentage"} output_percentage {{operation==0?input_percentage+(input_percentage*percentage_1)/100:input_percentage-(input_percentage*percentage_1)/100}} addUserKnob {1 expression_percentage l "Expression" t "nk = nuke.thisNode()\nnk.knob('expression_percentage').setValue(\"input+(input*percentage)/100\")"} expression_percentage input+(input*percentage)/100 addUserKnob {22 generate_1 l Generate -STARTLINE T "nk = nuke.thisNode()\nnk.knob('expression_percentage').setValue(\"input+(input*percentage)/100\")"} addUserKnob {20 average_1 l Average} addUserKnob {26 message_3 l "" +STARTLINE T "Find the average number of the curve values"} addUserKnob {26 "" +STARTLINE} addUserKnob {7 input_average l "input"} addUserKnob {3 frame_in l "frame range"} frame_in 1 addUserKnob {3 frame_out l "" -STARTLINE} frame_out 100 addUserKnob {26 ""} addUserKnob {7 average l "average"} average {{"input_average.integrate(frame_in, frame_out)/(frame_out-frame_in)"}} addUserKnob {1 expression_average l "Expression"} expression_average "input.integrate(frame_in, frame_out)/(frame_out-frame_in)" addUserKnob {22 generate_2 l Generate -STARTLINE T "nk = nuke.thisNode()\nnk.knob('expression_average').setValue(\"input.integrate(frame_in, frame_out)/(frame_out-frame_in)\")"} } Output { inputs 0 name Output1 xpos 0 ypos 300 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_AntiAliasingFilter.gizmo ================================================ Group { name AntialiasingFilter inputs 2 tile_color 0xc17a4aff label "(\[value antialiasing])" note_font "Verdana Bold" addUserKnob {20 Antialiasing} addUserKnob {41 channels T Matrix3.channels} addUserKnob {26 ""} addUserKnob {4 antialiasing t "Select which filter you want to apply: you have 3 intensity for the antialiasing filter and other 3 for to tweak the aliasing and get the image sharper" M {"- aliasing high" "- aliasing medium" "- aliasing low" none "+ antialiasing low" "+ antialiasing medium" "+ antialiasing high" ""}} antialiasing none addUserKnob {6 blackClamp l "black clamp" t "Aliasing filter can give you negative values" +STARTLINE} blackClamp true addUserKnob {6 whiteClamp l "white clamp" t "Aliasing filter can give you values over 1 in the alpha channel" -STARTLINE} addUserKnob {6 normalize l INVISIBLE -STARTLINE +INVISIBLE} normalize true addUserKnob {26 ""} addUserKnob {41 maskChannel l "mask channel" T Keymix1.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix1.invertMask} addUserKnob {26 ""} addUserKnob {41 mix T Keymix1.mix} addUserKnob {26 "" +STARTLINE} addUserKnob {26 email l "" +STARTLINE T "Antialiasing filter v2.0
\nby Andrea Geremia
\n
\nandrea.geremia89@gmail.com
\nwww.andreageremia.it
"} } Reformat { inputs 0 type "to box" box_width 10 box_height 10 box_fixed true name Reformat1 xpos 207 ypos -40 } Shuffle { alpha white name Shuffle1 xpos 207 ypos 40 } Input { inputs 0 name mask xpos 55 ypos -187 number 1 } Switch { inputs 2 which {{"!\[exists parent.input1]"}} name Switch3 xpos 55 ypos 40 } Dot { name Dot8 xpos 88 ypos 432 } Input { inputs 0 name src xpos -1152 ypos -390 } set N66a8cd60 [stack 0] Dot { name Dot3 xpos -1119 ypos -180 } set N7f720840 [stack 0] Dot { name Dot9 xpos -1005 ypos -180 } set N66ce7a80 [stack 0] Dot { name Dot10 xpos -858 ypos -180 } set N66ce9ee0 [stack 0] Dot { name Dot4 xpos -623 ypos -180 } Matrix { channels {{{parent.Matrix3.channels}}} matrix { {1 1 1} {1 1 1} {1 1 1} } normalize true name Matrix8 label "ANTIALIASING HIGH" xpos -656 ypos -34 } push $N66ce9ee0 Matrix { channels {{{parent.Matrix3.channels}}} matrix { {1 2 1} {2 4 2} {1 2 1} } normalize true name Matrix5 label "ANTIALIASING MEDIUM" xpos -891 ypos -24 } push $N66ce7a80 Matrix { channels {{{parent.Matrix3.channels}}} matrix { {0 1 0} {1 2 1} {0 1 0} } normalize true name Matrix6 label "ANTIALIASING LOW" xpos -1038 ypos -26 } push $N7f720840 push $N7f720840 Dot { name Dot12 xpos -1309 ypos -180 } set N66ce0a50 [stack 0] Matrix { channels {{{parent.Matrix3.channels}}} matrix { {0 -0.5 0} {-0.5 3 -0.5} {0 -0.5 0} } normalize {{parent.normalize}} name Matrix10 label "ALIASING LOW" xpos -1342 ypos -65 } push $N66ce0a50 Dot { name Dot5 xpos -1464 ypos -180 } set N66cc8b70 [stack 0] Matrix { channels {{{parent.Matrix3.channels}}} matrix { {0 -1 0} {-1 5 -1} {0 -1 0} } normalize true name Matrix7 label "ALIASING MEDIUM" xpos -1497 ypos -59 } push $N66cc8b70 Dot { name Dot13 xpos -1699 ypos -180 } Matrix { channels {{{parent.Matrix3.channels}}} matrix { {-1 -1 -1} {-1 9 -1} {-1 -1 -1} } normalize {{parent.normalize}} name Matrix4 label "ALIASING HIGH" xpos -1732 ypos -58 } Switch { inputs 7 which {{parent.antialiasing}} name Switch1 xpos -1152 ypos 244 } Clamp { channels {{{parent.Matrix3.channels}}} minimum_enable {{parent.blackClamp}} maximum_enable {{parent.whiteClamp}} name Clamp1 xpos -1152 ypos 323 } Dot { name Dot2 xpos -1119 ypos 432 } push $N66a8cd60 Dot { name Dot1 xpos -234 ypos -388 } Keymix { inputs 3 name Keymix1 xpos -267 ypos 426 } Output { name Output1 xpos -267 ypos 516 } StickyNote { inputs 0 name StickyNote2 label "sharp ." note_font_size 20 xpos -1486 ypos -239 } StickyNote { inputs 0 name StickyNote1 label "antialiasing ." note_font_size 20 xpos -925 ypos -226 } Matrix { inputs 0 channels rgba matrix { {0 0 0} {0 1 0} {0 0 0} } name Matrix3 xpos -1936 ypos -79 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_AutoCropTool.gizmo ================================================ Group { name AutoCropTool tile_color 0xa57aaaff note_font "Bitstream Vera Sans Bold" note_font_color 0xffffffff selected true addUserKnob {20 AutoCropTool} addUserKnob {41 channels l "Channels to Analyse" T CurveTool.channels} addUserKnob {26 ""} addUserKnob {26 preReformat l "@b; Pre-Reformat Scale" T " "} addUserKnob {41 scale l "" -STARTLINE T Reformat1.scale} addUserKnob {22 go l Go! T "import time\nn = nuke.thisNode()\n#Define this node\n\nct1 = nuke.toNode(\"CurveTool\")\n# Define curveTool nodes\n\nfirst_frame = int(nuke.Root()\['first_frame'].getValue())\nlast_frame = int(nuke.Root()\['last_frame'].getValue())\n# Grab first and last frame from root\n\np = nuke.Panel(\"Execute on FrameRange\")\np.addSingleLineInput('First Frame', first_frame)\np.addSingleLineInput('Last Frame', last_frame)\np.addSingleLineInput('Increment', 1)\nif p.show():\n \n # Create user input panel\n \n ff = int(p.value(\"First Frame\"))\n lf = int(p.value(\"Last Frame\"))\n i = int(p.value(\"Increment\"))\n # Define first, last, increment from user input panel\n \n with n:\n \n ct1\[\"autocropdata\"].clearAnimated()\n # Clear any intensitydata from all CurveTool nodes\n \n def executeCT(first,last,inc):\n runMe = True\n while runMe == True:\n nuke.execute(ct1,first,last,inc)\n stop_event.set()\n runMe = False\n print('CurveTools done')\n break\n # Define CurveTool execution function\n \n \n global stop_event \n stop_event = threading.Event()\n threading.Thread(target=executeCT, kwargs=dict(first=ff,last=lf,inc=i) ).start() \n while not stop_event.is_set():\n time.sleep(0.1)\n # run CurveTools with threading" +STARTLINE} addUserKnob {26 adjustbbox l "@b;Adjust Final BBox"} addUserKnob {6 blackOutside l BlackOutside +STARTLINE} addUserKnob {7 addPix l "Add Pixels" R 0 100} addPix 20 addUserKnob {20 outbbox2 l "Output BBox Data" n 1} outbbox2 0 addUserKnob {41 box T CropBBox_v02_.box} addUserKnob {41 bboxCenter l "bbox Center" T CropBBox_v02_.bboxCenter} addUserKnob {20 endGroup n -1} addUserKnob {20 Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Name: T AutoCropTool} addUserKnob {26 ver l Version: T v03} } Input { inputs 0 name Input1 xpos -489 ypos 342 } Dot { name Dot159 xpos -455 ypos 404 } set N1f815980 [stack 0] Reformat { type scale scale 0.05 pbb true name Reformat1 xpos -629 ypos 400 } set N1f864460 [stack 0] CurveTool { operation "Auto Crop" channels alpha ROI {{"min(bboxSize1.Crop6.box.x, bboxSize2.Crop6.box.x)"} {"min(bboxSize1.Crop6.box.y, bboxSize2.Crop6.box.y)"} {"max(bboxSize1.Crop6.box.r, bboxSize2.Crop6.box.r)"} {"max(bboxSize1.Crop6.box.t, bboxSize2.Crop6.box.t)"}} autocropdata {{curve} {curve} {curve} {curve}} intensitydata {0 0 0 0} name CurveTool xpos -629 ypos 496 } Crop { box {{parent.CurveTool.autocropdata} {parent.CurveTool.autocropdata} {"parent.CurveTool.autocropdata.r == 0 ? 1 : parent.CurveTool.autocropdata.r"} {"parent.CurveTool.autocropdata.t == 0 ? 1 : parent.CurveTool.autocropdata.t"}} name Crop29 xpos -629 ypos 534 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_1 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_2 l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Reformat { type scale scale {{1/parent.Reformat1.scale}} pbb true name Reformat6 xpos -629 ypos 560 } Group { name CropBBox_v02_ tile_color 0xa57aaaff xpos -629 ypos 586 lock_connections {{curve x1000 0}} addUserKnob {20 User} addUserKnob {26 info l "" +STARTLINE T "crop node with width/height set to the inputs width/height, with black outside checked off"} addUserKnob {4 type l Type M {"To Format" "To BBox"}} type "To BBox" addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {20 inputBbox n 1} addUserKnob {41 box T Crop6.box} addUserKnob {14 bboxCenter l "bbox Center" R 0 100} bboxCenter {{"(this.Crop6.box.r-this.Crop6.box.x)/2 + this.Crop6.box.x"} {"(this.Crop6.box.t-this.Crop6.box.y)/2 + this.Crop6.box.y"}} addUserKnob {20 endGroup n -1} } Input { inputs 0 name Input1 xpos 261 ypos 388 } Crop { box {{"type == 0 ? 0 : input.bbox.x"} {"type == 0 ? 0 : input.bbox.y"} {"type == 0 ? input.width : input.bbox.r"} {"type == 0 ? input.height : input.bbox.t"}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 466 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_1 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_2 l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Output { name Output1 xpos 261 ypos 583 } end_group AdjBBox { numpixels {{parent.addPix}} name AdjBBox6 xpos -629 ypos 612 } push $N1f815980 CopyBBox { inputs 2 name CopyBBox13 xpos -489 ypos 612 } BlackOutside { name BlackOutside1 xpos -489 ypos 636 disable {{!parent.blackOutside}} } Output { name Output1 xpos -489 ypos 712 } push $N1f864460 Group { name bboxSize1 tile_color 0xa57aaaff xpos -780 ypos 400 lock_connections {{curve x1000 0}} addUserKnob {20 User} addUserKnob {26 info l "" +STARTLINE T "crop node with width/height set to the inputs width/height, with black outside checked off"} addUserKnob {4 type l Type M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {20 inputBbox n 1} addUserKnob {41 box T Crop6.box} addUserKnob {14 bboxCenter l "bbox Center" R 0 100} bboxCenter {{"(this.Crop6.box.r-this.Crop6.box.x)/2 + this.Crop6.box.x"} {"(this.Crop6.box.t-this.Crop6.box.y)/2 + this.Crop6.box.y"}} addUserKnob {20 endGroup n -1} } Input { inputs 0 name Input1 xpos 261 ypos 388 } Crop { box {{"type == 0 ? 0 : input.bbox.x"} {"type == 0 ? 0 : input.bbox.y"} {"type == 0 ? input.width : input.bbox.r"} {"type == 0 ? input.height : input.bbox.t"}} intersect true crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 466 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_1 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_2 l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Output { name Output1 xpos 261 ypos 583 } end_group push $N1f864460 Group { name bboxSize2 tile_color 0xa57aaaff xpos -763 ypos 501 lock_connections {{curve x1000 0}} addUserKnob {20 User} addUserKnob {26 info l "" +STARTLINE T "crop node with width/height set to the inputs width/height, with black outside checked off"} addUserKnob {4 type l Type M {"To Format" "To BBox"}} type "To BBox" addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {20 inputBbox n 1} addUserKnob {20 endGroup n -1} } Input { inputs 0 name Input1 xpos 261 ypos 388 } Crop { box {{"type == 0 ? 0 : input.bbox.x"} {"type == 0 ? 0 : input.bbox.y"} {"type == 0 ? input.width : input.bbox.r"} {"type == 0 ? input.height : input.bbox.t"}} intersect true crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 466 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_1 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_2 l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Output { name Output1 xpos 261 ypos 583 } end_group end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_AutoFlare2.gizmo ================================================ Group { name AutoFlare selected true lock_connections true addUserKnob {20 User l Controls} addUserKnob {41 effectOnly l "effect only" T _INPUT_CTRL.effectOnly} addUserKnob {41 viewSelectedHighlights l "view highlights selection" T _INPUT_CTRL.viewSelectedHighlights} addUserKnob {41 brightspot T _INPUT_CTRL.brightspot} addUserKnob {41 threshold T _INPUT_CTRL.threshold} addUserKnob {41 gamma T _INPUT_CTRL.gamma} addUserKnob {41 clampBright l "clamp to brightspot" T _INPUT_CTRL.clampBright} addUserKnob {41 quality T _INPUT_CTRL.quality} addUserKnob {26 ""} addUserKnob {41 overallMult l "overall mult" T _INPUT_CTRL.overallMult} addUserKnob {41 overallLensScale l "overall lens scale" T _INPUT_CTRL.overallLensScale} addUserKnob {41 overallLensDistance l "overall lens distance" T _INPUT_CTRL.overallLensDistance} addUserKnob {41 overallSaturation l "overall saturation" T _INPUT_CTRL.overallSaturation} addUserKnob {41 sourceCol l "source color" T _INPUT_CTRL.sourceCol} addUserKnob {41 sourceSat l "source sat" T _INPUT_CTRL.sourceSat} addUserKnob {26 ""} addUserKnob {41 overallGrainOpacity l "overall grain opacity" T _INPUT_CTRL.overallGrainOpacity} addUserKnob {41 overallGrainSizeMult l "grain size mult" T _INPUT_CTRL.overallGrainSizeMult} addUserKnob {41 overallGrainGainMult l "grain gain mult" T _INPUT_CTRL.overallGrainGainMult} addUserKnob {26 ""} addUserKnob {41 reflectionsOpacity l "reflections opacity" T _INPUT_CTRL.reflectionsOpacity} addUserKnob {41 reflectionsRotOffset l "reflections rot offset" T _INPUT_CTRL.reflectionsRotOffset} addUserKnob {41 reflectionsBlurAdd l "reflections add blur" T _INPUT_CTRL.reflectionsBlurAdd} addUserKnob {41 reflectionsWhitepointMult l "refl whitepoint mult" T _INPUT_CTRL.reflectionsWhitepointMult} addUserKnob {41 reflectionsGammaMult l "refl gamma mult" T _INPUT_CTRL.reflectionsGammaMult} addUserKnob {26 ""} addUserKnob {41 vignetteActive l "vignette source" T _INPUT_CTRL.vignetteActive} addUserKnob {41 vignetteScale l scale T _INPUT_CTRL.vignetteScale} addUserKnob {41 vignetteDarkness l darkness T _INPUT_CTRL.vignetteDarkness} addUserKnob {20 Presets} addUserKnob {41 preset_01 l "Pink on Blue" T _INPUT_CTRL.preset_01} addUserKnob {41 preset_02 l "Fat Orange" T _INPUT_CTRL.preset_02} addUserKnob {41 preset_03 l "Classic Orange Blue" T _INPUT_CTRL.preset_03} addUserKnob {41 preset_04 l "Giant Colorful" T _INPUT_CTRL.preset_04} addUserKnob {41 preset_05 l "Thin and Wide" T _INPUT_CTRL.preset_05} addUserKnob {41 preset_06 l "Hexa Green Orange" T _INPUT_CTRL.preset_06} addUserKnob {20 Lenses} addUserKnob {41 showNumbers l "show numbers on lenses" T _INPUT_CTRL.showNumbers} addUserKnob {26 ""} addUserKnob {20 Lens1GRP l "lens 01" n 1} Lens1GRP 0 addUserKnob {41 lens1Active l active T _INPUT_CTRL.lens1Active} addUserKnob {41 lens1Size l size T _INPUT_CTRL.lens1Size} addUserKnob {41 lens1Col l color T _INPUT_CTRL.lens1Col} addUserKnob {41 lens1Blur l blur T _INPUT_CTRL.lens1Blur} addUserKnob {41 lens1AxisPos l "axis pos" T _INPUT_CTRL.lens1AxisPos} addUserKnob {41 lens1Polygon l polygon T _INPUT_CTRL.lens1Polygon} addUserKnob {41 lens1Diaphragm l diaphragm T _INPUT_CTRL.lens1Diaphragm} addUserKnob {41 lens1DiaphRot l "diaph rotation" T _INPUT_CTRL.lens1DiaphRot} addUserKnob {41 lens1grainOpacity l "grain opacity" T _INPUT_CTRL.lens1grainOpacity} addUserKnob {41 lens1grainSize l "grain size" T _INPUT_CTRL.lens1grainSize} addUserKnob {41 lens1grainGain l "grain gain" T _INPUT_CTRL.lens1grainGain} addUserKnob {41 lens1reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens1reflectionOpacity} addUserKnob {41 lens1reflectionRotation l "refl rotation" T _INPUT_CTRL.lens1reflectionRotation} addUserKnob {41 lens1reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens1reflWhitepoint} addUserKnob {41 lens1reflectionGamma l "refl gamma" T _INPUT_CTRL.lens1reflectionGamma} addUserKnob {41 lens1reflectionBlur l "refl blur" T _INPUT_CTRL.lens1reflectionBlur} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens2GRP l "lens 02" n 1} lens2GRP 0 addUserKnob {41 lens2Active l active T _INPUT_CTRL.lens2Active} addUserKnob {41 lens2Size l size T _INPUT_CTRL.lens2Size} addUserKnob {41 lens2Col l color T _INPUT_CTRL.lens2Col} addUserKnob {41 lens2Blur l blur T _INPUT_CTRL.lens2Blur} addUserKnob {41 lens2AxisPos l "axis pos" T _INPUT_CTRL.lens2AxisPos} addUserKnob {41 lens2Polygon l polygon T _INPUT_CTRL.lens2Polygon} addUserKnob {41 lens2Diaphragm l diaphragm T _INPUT_CTRL.lens2Diaphragm} addUserKnob {41 lens2DiaphRot l "diaph rotation" T _INPUT_CTRL.lens2DiaphRot} addUserKnob {41 lens2grainOpacity l "grain opacity" T _INPUT_CTRL.lens2grainOpacity} addUserKnob {41 lens2grainSize l "grain size" T _INPUT_CTRL.lens2grainSize} addUserKnob {41 lens2grainGain l "grain gain" T _INPUT_CTRL.lens2grainGain} addUserKnob {41 lens2reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens2reflectionOpacity} addUserKnob {41 lens2reflectionRotation l "refl rotation" T _INPUT_CTRL.lens2reflectionRotation} addUserKnob {41 lens2reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens2reflWhitepoint} addUserKnob {41 lens2reflectionGamma l "refl gamma" T _INPUT_CTRL.lens2reflectionGamma} addUserKnob {41 lens2reflectionBlur l "refl blur" T _INPUT_CTRL.lens2reflectionBlur} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens3GRP l "lens 03" n 1} lens3GRP 0 addUserKnob {41 lens3Active l active T _INPUT_CTRL.lens3Active} addUserKnob {41 lens3Size l size T _INPUT_CTRL.lens3Size} addUserKnob {41 lens3Col l color T _INPUT_CTRL.lens3Col} addUserKnob {41 lens3Blur l blur T _INPUT_CTRL.lens3Blur} addUserKnob {41 lens3AxisPos l "axis pos" T _INPUT_CTRL.lens3AxisPos} addUserKnob {41 lens3Polygon l polygon T _INPUT_CTRL.lens3Polygon} addUserKnob {41 lens3Diaphragm l diaphragm T _INPUT_CTRL.lens3Diaphragm} addUserKnob {41 lens3DiaphRot l "diaph rotation" T _INPUT_CTRL.lens3DiaphRot} addUserKnob {41 lens3grainOpacity l "grain opacity" T _INPUT_CTRL.lens3grainOpacity} addUserKnob {41 lens3grainSize l "grain size" T _INPUT_CTRL.lens3grainSize} addUserKnob {41 lens3grainGain l "grain gain" T _INPUT_CTRL.lens3grainGain} addUserKnob {41 lens3reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens3reflectionOpacity} addUserKnob {41 lens3reflectionRotation l "refl rotation" T _INPUT_CTRL.lens3reflectionRotation} addUserKnob {41 lens3reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens3reflWhitepoint} addUserKnob {41 lens3reflectionGamma l "refl gamma" T _INPUT_CTRL.lens3reflectionGamma} addUserKnob {41 lens3reflectionBlur l "refl blur" T _INPUT_CTRL.lens3reflectionBlur} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens4GRP l "lens 04" n 1} lens4GRP 0 addUserKnob {41 lens4Active l active T _INPUT_CTRL.lens4Active} addUserKnob {41 lens4Size l size T _INPUT_CTRL.lens4Size} addUserKnob {41 lens4Col l color T _INPUT_CTRL.lens4Col} addUserKnob {41 lens4Blur l blur T _INPUT_CTRL.lens4Blur} addUserKnob {41 lens4AxisPos l "axis pos" T _INPUT_CTRL.lens4AxisPos} addUserKnob {41 lens4Polygon l polygon T _INPUT_CTRL.lens4Polygon} addUserKnob {41 lens4Diaphragm l diaphragm T _INPUT_CTRL.lens4Diaphragm} addUserKnob {41 lens4DiaphRot l "diaph rotation" T _INPUT_CTRL.lens4DiaphRot} addUserKnob {41 lens4grainOpacity l "grain opacity" T _INPUT_CTRL.lens4grainOpacity} addUserKnob {41 lens4grainSize l "grain size" T _INPUT_CTRL.lens4grainSize} addUserKnob {41 lens4grainGain l "grain gain" T _INPUT_CTRL.lens4grainGain} addUserKnob {41 lens4reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens4reflectionOpacity} addUserKnob {41 lens4reflectionRotation l "refl rotation" T _INPUT_CTRL.lens4reflectionRotation} addUserKnob {41 lens4reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens4reflWhitepoint} addUserKnob {41 lens4reflectionGamma l "refl gamma" T _INPUT_CTRL.lens4reflectionGamma} addUserKnob {41 lens4reflectionBlur l "refl blur" T _INPUT_CTRL.lens4reflectionBlur} addUserKnob {20 endGroup_3 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens5GRP l "lens 05" n 1} lens5GRP 0 addUserKnob {41 lens5Active l active T _INPUT_CTRL.lens5Active} addUserKnob {41 lens5Size l size T _INPUT_CTRL.lens5Size} addUserKnob {41 lens5Col l color T _INPUT_CTRL.lens5Col} addUserKnob {41 lens5Blur l blur T _INPUT_CTRL.lens5Blur} addUserKnob {41 lens5AxisPos l "axis pos" T _INPUT_CTRL.lens5AxisPos} addUserKnob {41 lens5Polygon l polygon T _INPUT_CTRL.lens5Polygon} addUserKnob {41 lens5Diaphragm l diaphragm T _INPUT_CTRL.lens5Diaphragm} addUserKnob {41 lens5DiaphRot l "diaph rotation" T _INPUT_CTRL.lens5DiaphRot} addUserKnob {41 lens5grainOpacity l "grain opacity" T _INPUT_CTRL.lens5grainOpacity} addUserKnob {41 lens5grainSize l "grain size" T _INPUT_CTRL.lens5grainSize} addUserKnob {41 lens5grainGain l "grain gain" T _INPUT_CTRL.lens5grainGain} addUserKnob {41 lens5reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens5reflectionOpacity} addUserKnob {41 lens5reflectionRotation l "refl rotation" T _INPUT_CTRL.lens5reflectionRotation} addUserKnob {41 lens5reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens5reflWhitepoint} addUserKnob {41 lens5reflectionGamma l "refl gamma" T _INPUT_CTRL.lens5reflectionGamma} addUserKnob {41 lens5reflectionBlur l "refl blur" T _INPUT_CTRL.lens5reflectionBlur} addUserKnob {20 endGroup_4 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens6GRP l "lens 06" n 1} lens6GRP 0 addUserKnob {41 lens6Active l active T _INPUT_CTRL.lens6Active} addUserKnob {41 lens6Size l size T _INPUT_CTRL.lens6Size} addUserKnob {41 lens6Col l color T _INPUT_CTRL.lens6Col} addUserKnob {41 lens6Blur l blur T _INPUT_CTRL.lens6Blur} addUserKnob {41 lens6AxisPos l "axis pos" T _INPUT_CTRL.lens6AxisPos} addUserKnob {41 lens6Polygon l polygon T _INPUT_CTRL.lens6Polygon} addUserKnob {41 lens6Diaphragm l diaphragm T _INPUT_CTRL.lens6Diaphragm} addUserKnob {41 lens6DiaphRot l "diaph rotation" T _INPUT_CTRL.lens6DiaphRot} addUserKnob {41 lens6grainOpacity l "grain opacity" T _INPUT_CTRL.lens6grainOpacity} addUserKnob {41 lens6grainSize l "grain size" T _INPUT_CTRL.lens6grainSize} addUserKnob {41 lens6grainGain l "grain gain" T _INPUT_CTRL.lens6grainGain} addUserKnob {41 lens6reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens6reflectionOpacity} addUserKnob {41 lens6reflectionRotation l "refl rotation" T _INPUT_CTRL.lens6reflectionRotation} addUserKnob {41 lens6reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens6reflWhitepoint} addUserKnob {41 lens6reflectionGamma l "refl gamma" T _INPUT_CTRL.lens6reflectionGamma} addUserKnob {41 lens6reflectionBlur l "refl blur" T _INPUT_CTRL.lens6reflectionBlur} addUserKnob {20 endGroup_5 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens7GRP l "lens 07" n 1} lens7GRP 0 addUserKnob {41 lens7Active l active T _INPUT_CTRL.lens7Active} addUserKnob {41 lens7Size l size T _INPUT_CTRL.lens7Size} addUserKnob {41 lens7Col l color T _INPUT_CTRL.lens7Col} addUserKnob {41 lens7Blur l blur T _INPUT_CTRL.lens7Blur} addUserKnob {41 lens7AxisPos l "axis pos" T _INPUT_CTRL.lens7AxisPos} addUserKnob {41 lens7Polygon l polygon T _INPUT_CTRL.lens7Polygon} addUserKnob {41 lens7Diaphragm l diaphragm T _INPUT_CTRL.lens7Diaphragm} addUserKnob {41 lens7DiaphRot l "diaph rotation" T _INPUT_CTRL.lens7DiaphRot} addUserKnob {41 lens7grainOpacity l "grain opacity" T _INPUT_CTRL.lens7grainOpacity} addUserKnob {41 lens7grainSize l "grain size" T _INPUT_CTRL.lens7grainSize} addUserKnob {41 lens7grainGain l "grain gain" T _INPUT_CTRL.lens7grainGain} addUserKnob {41 lens7reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens7reflectionOpacity} addUserKnob {41 lens7reflectionRotation l "refl rotation" T _INPUT_CTRL.lens7reflectionRotation} addUserKnob {41 lens7reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens7reflWhitepoint} addUserKnob {41 lens7reflectionGamma l "refl gamma" T _INPUT_CTRL.lens7reflectionGamma} addUserKnob {41 lens7reflectionBlur l "refl blur" T _INPUT_CTRL.lens7reflectionBlur} addUserKnob {20 endGroup_6 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens8GRP l "lens 08" n 1} lens8GRP 0 addUserKnob {41 lens8Active l active T _INPUT_CTRL.lens8Active} addUserKnob {41 lens8Size l size T _INPUT_CTRL.lens8Size} addUserKnob {41 lens8Col l color T _INPUT_CTRL.lens8Col} addUserKnob {41 lens8Blur l blur T _INPUT_CTRL.lens8Blur} addUserKnob {41 lens8AxisPos l "axis pos" T _INPUT_CTRL.lens8AxisPos} addUserKnob {41 lens8Polygon l polygon T _INPUT_CTRL.lens8Polygon} addUserKnob {41 lens8Diaphragm l diaphragm T _INPUT_CTRL.lens8Diaphragm} addUserKnob {41 lens8DiaphRot l "diaph rotation" T _INPUT_CTRL.lens8DiaphRot} addUserKnob {41 lens8grainOpacity l "grain opacity" T _INPUT_CTRL.lens8grainOpacity} addUserKnob {41 lens8grainSize l "grain size" T _INPUT_CTRL.lens8grainSize} addUserKnob {41 lens8grainGain l "grain gain" T _INPUT_CTRL.lens8grainGain} addUserKnob {41 lens8reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens8reflectionOpacity} addUserKnob {41 lens8reflectionRotation l "refl rotation" T _INPUT_CTRL.lens8reflectionRotation} addUserKnob {41 lens8reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens8reflWhitepoint} addUserKnob {41 lens8reflectionGamma l "refl gamma" T _INPUT_CTRL.lens8reflectionGamma} addUserKnob {41 lens8reflectionBlur l "refl blur" T _INPUT_CTRL.lens8reflectionBlur} addUserKnob {20 endGroup_7 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens9GRP l "lens 09" n 1} lens9GRP 0 addUserKnob {41 lens9Active l active T _INPUT_CTRL.lens9Active} addUserKnob {41 lens9Size l size T _INPUT_CTRL.lens9Size} addUserKnob {41 lens9Col l color T _INPUT_CTRL.lens9Col} addUserKnob {41 lens9Blur l blur T _INPUT_CTRL.lens9Blur} addUserKnob {41 lens9AxisPos l "axis pos" T _INPUT_CTRL.lens9AxisPos} addUserKnob {41 lens9Polygon l polygon T _INPUT_CTRL.lens9Polygon} addUserKnob {41 lens9Diaphragm l diaphragm T _INPUT_CTRL.lens9Diaphragm} addUserKnob {41 lens9DiaphRot l "diaph rotation" T _INPUT_CTRL.lens9DiaphRot} addUserKnob {41 lens9grainOpacity l "grain opacity" T _INPUT_CTRL.lens9grainOpacity} addUserKnob {41 lens9grainSize l "grain size" T _INPUT_CTRL.lens9grainSize} addUserKnob {41 lens9grainGain l "grain gain" T _INPUT_CTRL.lens9grainGain} addUserKnob {41 lens9reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens9reflectionOpacity} addUserKnob {41 lens9reflectionRotation l "refl rotation" T _INPUT_CTRL.lens9reflectionRotation} addUserKnob {41 lens9reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens9reflWhitepoint} addUserKnob {41 lens9reflectionGamma l "refl gamma" T _INPUT_CTRL.lens9reflectionGamma} addUserKnob {41 lens9reflectionBlur l "refl blur" T _INPUT_CTRL.lens9reflectionBlur} addUserKnob {20 endGroup_8 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens10GRP l "lens 10" n 1} lens10GRP 0 addUserKnob {41 lens10Active l active T _INPUT_CTRL.lens10Active} addUserKnob {41 lens10Size l size T _INPUT_CTRL.lens10Size} addUserKnob {41 lens10Col l color T _INPUT_CTRL.lens10Col} addUserKnob {41 lens10Blur l blur T _INPUT_CTRL.lens10Blur} addUserKnob {41 lens10AxisPos l "axis pos" T _INPUT_CTRL.lens10AxisPos} addUserKnob {41 lens10Polygon l polygon T _INPUT_CTRL.lens10Polygon} addUserKnob {41 lens10Diaphragm l diaphragm T _INPUT_CTRL.lens10Diaphragm} addUserKnob {41 lens10DiaphRot l "diaph rotation" T _INPUT_CTRL.lens10DiaphRot} addUserKnob {41 lens10grainOpacity l "grain opacity" T _INPUT_CTRL.lens10grainOpacity} addUserKnob {41 lens10grainSize l "grain size" T _INPUT_CTRL.lens10grainSize} addUserKnob {41 lens10grainGain l "grain gain" T _INPUT_CTRL.lens10grainGain} addUserKnob {41 lens10reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens10reflectionOpacity} addUserKnob {41 lens10reflectionRotation l "refl rotation" T _INPUT_CTRL.lens10reflectionRotation} addUserKnob {41 lens10reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens10reflWhitepoint} addUserKnob {41 lens10reflectionGamma l "refl gamma" T _INPUT_CTRL.lens10reflectionGamma} addUserKnob {41 lens10reflectionBlur l "refl blur" T _INPUT_CTRL.lens10reflectionBlur} addUserKnob {20 endGroup_9 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens11GRP l "lens 11" n 1} lens11GRP 0 addUserKnob {41 lens11Active l active T _INPUT_CTRL.lens11Active} addUserKnob {41 lens11Size l size T _INPUT_CTRL.lens11Size} addUserKnob {41 lens11Col l color T _INPUT_CTRL.lens11Col} addUserKnob {41 lens11Blur l blur T _INPUT_CTRL.lens11Blur} addUserKnob {41 lens11AxisPos l "axis pos" T _INPUT_CTRL.lens11AxisPos} addUserKnob {41 lens11Polygon l polygon T _INPUT_CTRL.lens11Polygon} addUserKnob {41 lens11Diaphragm l diaphragm T _INPUT_CTRL.lens11Diaphragm} addUserKnob {41 lens11DiaphRot l "diaph rotation" T _INPUT_CTRL.lens11DiaphRot} addUserKnob {41 lens11grainOpacity l "grain opacity" T _INPUT_CTRL.lens11grainOpacity} addUserKnob {41 lens11grainSize l "grain size" T _INPUT_CTRL.lens11grainSize} addUserKnob {41 lens11grainGain l "grain gain" T _INPUT_CTRL.lens11grainGain} addUserKnob {41 lens11reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens11reflectionOpacity} addUserKnob {41 lens11reflectionRotation l "refl rotation" T _INPUT_CTRL.lens11reflectionRotation} addUserKnob {41 lens11reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens11reflWhitepoint} addUserKnob {41 lens11reflectionGamma l "refl gamma" T _INPUT_CTRL.lens11reflectionGamma} addUserKnob {41 lens11reflectionBlur l "refl blur" T _INPUT_CTRL.lens11reflectionBlur} addUserKnob {20 endGroup_10 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens12GRP l "lens 12" n 1} lens12GRP 0 addUserKnob {41 lens12Active l active T _INPUT_CTRL.lens12Active} addUserKnob {41 lens12Size l size T _INPUT_CTRL.lens12Size} addUserKnob {41 lens12Col l color T _INPUT_CTRL.lens12Col} addUserKnob {41 lens12Blur l blur T _INPUT_CTRL.lens12Blur} addUserKnob {41 lens12AxisPos l "axis pos" T _INPUT_CTRL.lens12AxisPos} addUserKnob {41 lens12Polygon l polygon T _INPUT_CTRL.lens12Polygon} addUserKnob {41 lens12Diaphragm l diaphragm T _INPUT_CTRL.lens12Diaphragm} addUserKnob {41 lens12DiaphRot l "diaph rotation" T _INPUT_CTRL.lens12DiaphRot} addUserKnob {41 lens12grainOpacity l "grain opacity" T _INPUT_CTRL.lens12grainOpacity} addUserKnob {41 lens12grainSize l "grain size" T _INPUT_CTRL.lens12grainSize} addUserKnob {41 lens12grainGain l "grain gain" T _INPUT_CTRL.lens12grainGain} addUserKnob {41 lens12reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens12reflectionOpacity} addUserKnob {41 lens12reflectionRotation l "refl rotation" T _INPUT_CTRL.lens12reflectionRotation} addUserKnob {41 lens12reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens12reflWhitepoint} addUserKnob {41 lens12reflectionGamma l "refl gamma" T _INPUT_CTRL.lens12reflectionGamma} addUserKnob {41 lens12reflectionBlur l "refl blur" T _INPUT_CTRL.lens12reflectionBlur} addUserKnob {20 endGroup_11 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 len13GRP l "lens 13" n 1} len13GRP 0 addUserKnob {41 lens13Active l active T _INPUT_CTRL.lens13Active} addUserKnob {41 lens13Size l size T _INPUT_CTRL.lens13Size} addUserKnob {41 lens13Col l color T _INPUT_CTRL.lens13Col} addUserKnob {41 lens13Blur l blur T _INPUT_CTRL.lens13Blur} addUserKnob {41 lens13AxisPos l "axis pos" T _INPUT_CTRL.lens13AxisPos} addUserKnob {41 lens13Polygon l polygon T _INPUT_CTRL.lens13Polygon} addUserKnob {41 lens13Diaphragm l diaphragm T _INPUT_CTRL.lens13Diaphragm} addUserKnob {41 lens13DiaphRot l "diaph rotation" T _INPUT_CTRL.lens13DiaphRot} addUserKnob {41 lens13grainOpacity l "grain opacity" T _INPUT_CTRL.lens13grainOpacity} addUserKnob {41 lens13grainSize l "grain size" T _INPUT_CTRL.lens13grainSize} addUserKnob {41 lens13grainGain l "grain gain" T _INPUT_CTRL.lens13grainGain} addUserKnob {41 lens13reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens13reflectionOpacity} addUserKnob {41 lens13reflectionRotation l "refl rotation" T _INPUT_CTRL.lens13reflectionRotation} addUserKnob {41 lens13reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens13reflWhitepoint} addUserKnob {41 lens13reflectionGamma l "refl gamma" T _INPUT_CTRL.lens13reflectionGamma} addUserKnob {41 lens13reflectionBlur l "refl blur" T _INPUT_CTRL.lens13reflectionBlur} addUserKnob {20 endGroup_12 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens14GRP l "lens 14" n 1} lens14GRP 0 addUserKnob {41 lens14Active l active T _INPUT_CTRL.lens14Active} addUserKnob {41 lens14Size l size T _INPUT_CTRL.lens14Size} addUserKnob {41 lens14Col l color T _INPUT_CTRL.lens14Col} addUserKnob {41 lens14Blur l blur T _INPUT_CTRL.lens14Blur} addUserKnob {41 lens14AxisPos l "axis pos" T _INPUT_CTRL.lens14AxisPos} addUserKnob {41 lens14Polygon l polygon T _INPUT_CTRL.lens14Polygon} addUserKnob {41 lens14Diaphragm l diaphragm T _INPUT_CTRL.lens14Diaphragm} addUserKnob {41 lens14DiaphRot l "diaph rotation" T _INPUT_CTRL.lens14DiaphRot} addUserKnob {41 lens14grainOpacity l "grain opacity" T _INPUT_CTRL.lens14grainOpacity} addUserKnob {41 lens14grainSize l "grain size" T _INPUT_CTRL.lens14grainSize} addUserKnob {41 lens14grainGain l "grain gain" T _INPUT_CTRL.lens14grainGain} addUserKnob {41 lens14reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens14reflectionOpacity} addUserKnob {41 lens14reflectionRotation l "refl rotation" T _INPUT_CTRL.lens14reflectionRotation} addUserKnob {41 lens14reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens14reflWhitepoint} addUserKnob {41 lens14reflectionGamma l "refl gamma" T _INPUT_CTRL.lens14reflectionGamma} addUserKnob {41 lens14reflectionBlur l "refl blur" T _INPUT_CTRL.lens14reflectionBlur} addUserKnob {20 endGroup_13 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens15GRP l "lens 15" n 1} lens15GRP 0 addUserKnob {41 lens15Active l active T _INPUT_CTRL.lens15Active} addUserKnob {41 lens15Size l size T _INPUT_CTRL.lens15Size} addUserKnob {41 lens15Col l color T _INPUT_CTRL.lens15Col} addUserKnob {41 lens15Blur l blur T _INPUT_CTRL.lens15Blur} addUserKnob {41 lens15AxisPos l "axis pos" T _INPUT_CTRL.lens15AxisPos} addUserKnob {41 lens15Polygon l polygon T _INPUT_CTRL.lens15Polygon} addUserKnob {41 lens15Diaphragm l diaphragm T _INPUT_CTRL.lens15Diaphragm} addUserKnob {41 lens15DiaphRot l "diaph rotation" T _INPUT_CTRL.lens15DiaphRot} addUserKnob {41 lens15grainOpacity l "grain opacity" T _INPUT_CTRL.lens15grainOpacity} addUserKnob {41 lens15grainSize l "grain size" T _INPUT_CTRL.lens15grainSize} addUserKnob {41 lens15grainGain l "grain gain" T _INPUT_CTRL.lens15grainGain} addUserKnob {41 lens15reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens15reflectionOpacity} addUserKnob {41 lens15reflectionRotation l "refl rotation" T _INPUT_CTRL.lens15reflectionRotation} addUserKnob {41 lens15reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens15reflWhitepoint} addUserKnob {41 lens15reflectionGamma l "refl gamma" T _INPUT_CTRL.lens15reflectionGamma} addUserKnob {41 lens15reflectionBlur l "refl blur" T _INPUT_CTRL.lens15reflectionBlur} addUserKnob {20 endGroup_14 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens16GRP l "lens 16" n 1} lens16GRP 0 addUserKnob {41 lens16Active l active T _INPUT_CTRL.lens16Active} addUserKnob {41 lens16Size l size T _INPUT_CTRL.lens16Size} addUserKnob {41 lens16Col l color T _INPUT_CTRL.lens16Col} addUserKnob {41 lens16Blur l blur T _INPUT_CTRL.lens16Blur} addUserKnob {41 lens16AxisPos l "axis pos" T _INPUT_CTRL.lens16AxisPos} addUserKnob {41 lens16Polygon l polygon T _INPUT_CTRL.lens16Polygon} addUserKnob {41 lens16Diaphragm l diaphragm T _INPUT_CTRL.lens16Diaphragm} addUserKnob {41 lens16DiaphRot l "diaph rotation" T _INPUT_CTRL.lens16DiaphRot} addUserKnob {41 lens16grainOpacity l "grain opacity" T _INPUT_CTRL.lens16grainOpacity} addUserKnob {41 lens16grainSize l "grain size" T _INPUT_CTRL.lens16grainSize} addUserKnob {41 lens16grainGain l "grain gain" T _INPUT_CTRL.lens16grainGain} addUserKnob {41 lens16reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens16reflectionOpacity} addUserKnob {41 lens16reflectionRotation l "refl rotation" T _INPUT_CTRL.lens16reflectionRotation} addUserKnob {41 lens16reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens16reflWhitepoint} addUserKnob {41 lens16reflectionGamma l "refl gamma" T _INPUT_CTRL.lens16reflectionGamma} addUserKnob {41 lens16reflectionBlur l "refl blur" T _INPUT_CTRL.lens16reflectionBlur} addUserKnob {20 endGroup_15 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens17GRP l "lens 17" n 1} lens17GRP 0 addUserKnob {41 lens17Active l active T _INPUT_CTRL.lens17Active} addUserKnob {41 lens17Size l size T _INPUT_CTRL.lens17Size} addUserKnob {41 lens17Col l color T _INPUT_CTRL.lens17Col} addUserKnob {41 lens17Blur l blur T _INPUT_CTRL.lens17Blur} addUserKnob {41 lens17AxisPos l "axis pos" T _INPUT_CTRL.lens17AxisPos} addUserKnob {41 lens17Polygon l polygon T _INPUT_CTRL.lens17Polygon} addUserKnob {41 lens17Diaphragm l diaphragm T _INPUT_CTRL.lens17Diaphragm} addUserKnob {41 lens17DiaphRot l "diaph rotation" T _INPUT_CTRL.lens17DiaphRot} addUserKnob {41 lens17grainOpacity l "grain opacity" T _INPUT_CTRL.lens17grainOpacity} addUserKnob {41 lens17grainSize l "grain size" T _INPUT_CTRL.lens17grainSize} addUserKnob {41 lens17grainGain l "grain gain" T _INPUT_CTRL.lens17grainGain} addUserKnob {41 lens17reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens17reflectionOpacity} addUserKnob {41 lens17reflectionRotation l "refl rotation" T _INPUT_CTRL.lens17reflectionRotation} addUserKnob {41 lens17reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens17reflWhitepoint} addUserKnob {41 lens17reflectionGamma l "refl gamma" T _INPUT_CTRL.lens17reflectionGamma} addUserKnob {41 lens17reflectionBlur l "refl blur" T _INPUT_CTRL.lens17reflectionBlur} addUserKnob {20 endGroup_16 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens18GRP l "lens 18" n 1} lens18GRP 0 addUserKnob {41 lens18Active l active T _INPUT_CTRL.lens18Active} addUserKnob {41 lens18Size l size T _INPUT_CTRL.lens18Size} addUserKnob {41 lens18Col l color T _INPUT_CTRL.lens18Col} addUserKnob {41 lens18Blur l blur T _INPUT_CTRL.lens18Blur} addUserKnob {41 lens18AxisPos l "axis pos" T _INPUT_CTRL.lens18AxisPos} addUserKnob {41 lens18Polygon l polygon T _INPUT_CTRL.lens18Polygon} addUserKnob {41 lens18Diaphragm l diaphragm T _INPUT_CTRL.lens18Diaphragm} addUserKnob {41 lens18DiaphRot l "diaph rotation" T _INPUT_CTRL.lens18DiaphRot} addUserKnob {41 lens18grainOpacity l "grain opacity" T _INPUT_CTRL.lens18grainOpacity} addUserKnob {41 lens18grainSize l "grain size" T _INPUT_CTRL.lens18grainSize} addUserKnob {41 lens18grainGain l "grain gain" T _INPUT_CTRL.lens18grainGain} addUserKnob {41 lens18reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens18reflectionOpacity} addUserKnob {41 lens18reflectionRotation l "refl rotation" T _INPUT_CTRL.lens18reflectionRotation} addUserKnob {41 lens18reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens18reflWhitepoint} addUserKnob {41 lens18reflectionGamma l "refl gamma" T _INPUT_CTRL.lens18reflectionGamma} addUserKnob {41 lens18reflectionBlur l "refl blur" T _INPUT_CTRL.lens18reflectionBlur} addUserKnob {20 endGroup_17 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens19GRP l "lens 19" n 1} lens19GRP 0 addUserKnob {41 lens19Active l active T _INPUT_CTRL.lens19Active} addUserKnob {41 lens19Size l size T _INPUT_CTRL.lens19Size} addUserKnob {41 lens19Col l color T _INPUT_CTRL.lens19Col} addUserKnob {41 lens19Blur l blur T _INPUT_CTRL.lens19Blur} addUserKnob {41 lens19AxisPos l "axis pos" T _INPUT_CTRL.lens19AxisPos} addUserKnob {41 lens19Polygon l polygon T _INPUT_CTRL.lens19Polygon} addUserKnob {41 lens19Diaphragm l diaphragm T _INPUT_CTRL.lens19Diaphragm} addUserKnob {41 lens19DiaphRot l "diaph rotation" T _INPUT_CTRL.lens19DiaphRot} addUserKnob {41 lens19grainOpacity l "grain opacity" T _INPUT_CTRL.lens19grainOpacity} addUserKnob {41 lens19grainSize l "grain size" T _INPUT_CTRL.lens19grainSize} addUserKnob {41 lens19grainGain l "grain gain" T _INPUT_CTRL.lens19grainGain} addUserKnob {41 lens19reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens19reflectionOpacity} addUserKnob {41 lens19reflectionRotation l "refl rotation" T _INPUT_CTRL.lens19reflectionRotation} addUserKnob {41 lens19reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens19reflWhitepoint} addUserKnob {41 lens19reflectionGamma l "refl gamma" T _INPUT_CTRL.lens19reflectionGamma} addUserKnob {41 lens19reflectionBlur l "refl blur" T _INPUT_CTRL.lens19reflectionBlur} addUserKnob {20 endGroup_18 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens20GRP l "lens 20" n 1} lens20GRP 0 addUserKnob {41 lens20Active l active T _INPUT_CTRL.lens20Active} addUserKnob {41 lens20Size l size T _INPUT_CTRL.lens20Size} addUserKnob {41 lens20Col l color T _INPUT_CTRL.lens20Col} addUserKnob {41 lens20Blur l blur T _INPUT_CTRL.lens20Blur} addUserKnob {41 lens20AxisPos l "axis pos" T _INPUT_CTRL.lens20AxisPos} addUserKnob {41 lens20Polygon l polygon T _INPUT_CTRL.lens20Polygon} addUserKnob {41 lens20Diaphragm l diaphragm T _INPUT_CTRL.lens20Diaphragm} addUserKnob {41 lens20DiaphRot l "diaph rotation" T _INPUT_CTRL.lens20DiaphRot} addUserKnob {41 lens20grainOpacity l "grain opacity" T _INPUT_CTRL.lens20grainOpacity} addUserKnob {41 lens20grainSize l "grain size" T _INPUT_CTRL.lens20grainSize} addUserKnob {41 lens20grainGain l "grain gain" T _INPUT_CTRL.lens20grainGain} addUserKnob {41 lens20reflectionOpacity l "refl opacity" T _INPUT_CTRL.lens20reflectionOpacity} addUserKnob {41 lens20reflectionRotation l "refl rotation" T _INPUT_CTRL.lens20reflectionRotation} addUserKnob {41 lens20reflWhitepoint l "refl whitepoint" T _INPUT_CTRL.lens20reflWhitepoint} addUserKnob {41 lens20reflectionGamma l "refl gamma" T _INPUT_CTRL.lens20reflectionGamma} addUserKnob {41 lens20reflectionBlur l "refl blur" T _INPUT_CTRL.lens20reflectionBlur} addUserKnob {20 endGroup_19 l endGroup n -1} } Input { inputs 0 name Input xpos 153 ypos 416 } NoOp { name _INPUT_ xpos 153 ypos 456 } set N49d16e70 [stack 0] NoOp { name _SOURCE xpos -72 ypos 456 } Multiply { value 0 name _compOnSource xpos -72 ypos 10508 disable {{1-_INPUT_CTRL.effectOnly i}} } push $N49d16e70 Reformat { type scale scale {{_INPUT_CTRL.quality i}} name _reformatQuality xpos 153 ypos 485 } NoOp { name _INPUT_CTRL xpos 153 ypos 523 addUserKnob {20 Controls} addUserKnob {6 effectOnly l "effect only" +STARTLINE} addUserKnob {6 viewSelectedHighlights l "view highlights selection" +STARTLINE} addUserKnob {7 brightspot R 0.9 15} brightspot 2 addUserKnob {7 threshold} threshold 1 addUserKnob {7 gamma t "Value for the gamma function applied between threshold value and brightspot value.\n" R 0 3} gamma 2.2 addUserKnob {6 clampBright l "clamp to brightspot" t "Clamp the maximum values to the brightspot value." +STARTLINE} clampBright true addUserKnob {7 quality} quality 0.5 addUserKnob {26 ""} addUserKnob {7 overallMult l "overall mult" R 0 2} overallMult 1 addUserKnob {7 overallLensScale l "overall lens scale" R 0 2} overallLensScale 1 addUserKnob {7 overallLensDistance l "overall lens distance" R 0 2} overallLensDistance 1 addUserKnob {7 overallSaturation l "overall saturation" R 0 2} overallSaturation 1 addUserKnob {7 sourceCol l "source color" t "Mix with source color"} sourceCol 1 addUserKnob {7 sourceSat l "source sat" R 0 3} sourceSat 1 addUserKnob {26 ""} addUserKnob {7 overallGrainOpacity l "overall grain opacity"} addUserKnob {7 overallGrainSizeMult l "grain size mult" R 0 10} overallGrainSizeMult 1 addUserKnob {7 overallGrainGainMult l "grain gain mult" R 0 5} overallGrainGainMult 1 addUserKnob {26 ""} addUserKnob {7 reflectionsOpacity l "reflections opacity"} addUserKnob {7 reflectionsRotOffset l "reflections rot offset" R 0 360} addUserKnob {7 reflectionsBlurAdd l "reflections add blur" R 0 50} addUserKnob {18 reflectionsWhitepointMult l "refl whitepoint mult" R 0 2} reflectionsWhitepointMult 1 addUserKnob {6 reflectionsWhitepointMult_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 reflectionsWhitepointMult_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 reflectionsWhitepointMult_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 reflectionsGammaMult l "refl gamma mult" R 0 5} reflectionsGammaMult 1 addUserKnob {6 reflectionsGammaMult_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 reflectionsGammaMult_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 reflectionsGammaMult_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {6 vignetteActive l "vignette source" +STARTLINE} vignetteActive true addUserKnob {7 vignetteScale l scale} vignetteScale 0.7 addUserKnob {7 vignetteDarkness l darkness} vignetteDarkness 1 addUserKnob {20 Presets} addUserKnob {22 preset_01 l "Pink on Blue" T "n=nuke.toNode('_INPUT_CTRL')\n\nn.knob('lens1Active').setValue(True)\nn.knob('lens1Size').setValue(230)\nn.knob('lens1Col').setValue(2.48,0)\nn.knob('lens1Col').setValue(2.86,1)\nn.knob('lens1Col').setValue(16.6,2)\nn.knob('lens1Blur').setValue(17)\nn.knob('lens1AxisPos').setValue(-1.18)\nn.knob('lens1Polygon').setValue(0)\nn.knob('lens1Diaphragm').setValue(1)\nn.knob('lens1DiaphRot').setValue(0)\n\nn.knob('lens2Active').setValue(True)\nn.knob('lens2Size').setValue(50)\nn.knob('lens2Col').setValue(0.0027,0)\nn.knob('lens2Col').setValue(0.0095,1)\nn.knob('lens2Col').setValue(0.3,2)\nn.knob('lens2Blur').setValue(0)\nn.knob('lens2AxisPos').setValue(1.86)\nn.knob('lens2Polygon').setValue(0)\nn.knob('lens2Diaphragm').setValue(1)\nn.knob('lens2DiaphRot').setValue(0)\n\nn.knob('lens3Active').setValue(True)\nn.knob('lens3Size').setValue(200)\nn.knob('lens3Col').setValue(7,0)\nn.knob('lens3Col').setValue(6.02,1)\nn.knob('lens3Col').setValue(2.79,2)\nn.knob('lens3Blur').setValue(0)\nn.knob('lens3AxisPos').setValue(-1.18)\nn.knob('lens3Polygon').setValue(0)\nn.knob('lens3Diaphragm').setValue(1)\nn.knob('lens3DiaphRot').setValue(0)\n\nn.knob('lens4Active').setValue(True)\nn.knob('lens4Size').setValue(900)\nn.knob('lens4Col').setValue(26,0)\nn.knob('lens4Col').setValue(5.88,1)\nn.knob('lens4Col').setValue(10.64,2)\nn.knob('lens4Blur').setValue(0)\nn.knob('lens4AxisPos').setValue(-2.2)\nn.knob('lens4Polygon').setValue(0)\nn.knob('lens4Diaphragm').setValue(1)\nn.knob('lens4DiaphRot').setValue(0)\n\nn.knob('lens5Active').setValue(True)\nn.knob('lens5Size').setValue(540)\nn.knob('lens5Col').setValue(0.6,0)\nn.knob('lens5Col').setValue(0.34,1)\nn.knob('lens5Col').setValue(0.4,2)\nn.knob('lens5Blur').setValue(0)\nn.knob('lens5AxisPos').setValue(1)\nn.knob('lens5Polygon').setValue(0)\nn.knob('lens5Diaphragm').setValue(1)\nn.knob('lens5DiaphRot').setValue(0)\n\nn.knob('lens6Active').setValue(True)\nn.knob('lens6Size').setValue(430)\nn.knob('lens6Col').setValue(1.29,0)\nn.knob('lens6Col').setValue(0.19,1)\nn.knob('lens6Col').setValue(1.17,2)\nn.knob('lens6Blur').setValue(0)\nn.knob('lens6AxisPos').setValue(2.2)\nn.knob('lens6Polygon').setValue(0)\nn.knob('lens6Diaphragm').setValue(1)\nn.knob('lens6DiaphRot').setValue(0)\n\nn.knob('lens7Active').setValue(True)\nn.knob('lens7Size').setValue(400)\nn.knob('lens7Col').setValue(0,0)\nn.knob('lens7Col').setValue(674.66,1)\nn.knob('lens7Col').setValue(720,2)\nn.knob('lens7Blur').setValue(0)\nn.knob('lens7AxisPos').setValue(0.1)\nn.knob('lens7Polygon').setValue(0)\nn.knob('lens7Diaphragm').setValue(1)\nn.knob('lens7DiaphRot').setValue(0)\n\nn.knob('lens8Active').setValue(True)\nn.knob('lens8Size').setValue(950)\nn.knob('lens8Col').setValue(5,0)\nn.knob('lens8Col').setValue(13.21,1)\nn.knob('lens8Col').setValue(20,2)\nn.knob('lens8Blur').setValue(40)\nn.knob('lens8AxisPos').setValue(-2.16)\nn.knob('lens8Polygon').setValue(0)\nn.knob('lens8Diaphragm').setValue(1)\nn.knob('lens8DiaphRot').setValue(0)\n\nn.knob('lens9Active').setValue(True)\nn.knob('lens9Size').setValue(130)\nn.knob('lens9Col').setValue(0.07,0)\nn.knob('lens9Col').setValue(0.23,1)\nn.knob('lens9Col').setValue(4.8,2)\nn.knob('lens9Blur').setValue(5.6)\nn.knob('lens9AxisPos').setValue(0.7)\nn.knob('lens9Polygon').setValue(0)\nn.knob('lens9Diaphragm').setValue(1)\nn.knob('lens9DiaphRot').setValue(0)\n\nn.knob('lens10Active').setValue(True)\nn.knob('lens10Size').setValue(350)\nn.knob('lens10Col').setValue(1.549,0)\nn.knob('lens10Col').setValue(1,1)\nn.knob('lens10Col').setValue(0.85,2)\nn.knob('lens10Blur').setValue(0)\nn.knob('lens10AxisPos').setValue(-1.8)\nn.knob('lens10Polygon').setValue(0)\nn.knob('lens10Diaphragm').setValue(1)\nn.knob('lens10DiaphRot').setValue(0)\n\nn.knob('lens11Active').setValue(True)\nn.knob('lens11Size').setValue(10)\nn.knob('lens11Col').setValue(0.1,0)\nn.knob('lens11Col').setValue(0.032,1)\nn.knob('lens11Col').setValue(0.087,2)\nn.knob('lens11Blur').setValue(3.8)\nn.knob('lens11AxisPos').setValue(-0.6)\nn.knob('lens11Polygon').setValue(0)\nn.knob('lens11Diaphragm').setValue(1)\nn.knob('lens11DiaphRot').setValue(0)\n\nn.knob('lens12Active').setValue(True)\nn.knob('lens12Size').setValue(390)\nn.knob('lens12Col').setValue(0.11,0)\nn.knob('lens12Col').setValue(0.053,1)\nn.knob('lens12Col').setValue(0.036,2)\nn.knob('lens12Blur').setValue(2.1)\nn.knob('lens12AxisPos').setValue(-1.8)\nn.knob('lens12Polygon').setValue(0)\nn.knob('lens12Diaphragm').setValue(1)\nn.knob('lens12DiaphRot').setValue(0)\n\nn.knob('lens13Active').setValue(True)\nn.knob('lens13Size').setValue(140)\nn.knob('lens13Col').setValue(0.5,0)\nn.knob('lens13Col').setValue(2.75,1)\nn.knob('lens13Col').setValue(5,2)\nn.knob('lens13Blur').setValue(140)\nn.knob('lens13AxisPos').setValue(2)\nn.knob('lens13Polygon').setValue(0)\nn.knob('lens13Diaphragm').setValue(1)\nn.knob('lens13DiaphRot').setValue(0)\n\nn.knob('lens14Active').setValue(True)\nn.knob('lens14Size').setValue(420)\nn.knob('lens14Col').setValue(509.29,0)\nn.knob('lens14Col').setValue(-50.93,1)\nn.knob('lens14Col').setValue(500.3,2)\nn.knob('lens14Blur').setValue(20)\nn.knob('lens14AxisPos').setValue(0.08)\nn.knob('lens14Polygon').setValue(0)\nn.knob('lens14Diaphragm').setValue(1)\nn.knob('lens14DiaphRot').setValue(0)\n\nn.knob('lens15Active').setValue(True)\nn.knob('lens15Size').setValue(590)\nn.knob('lens15Col').setValue(1120,0)\nn.knob('lens15Col').setValue(-55.99,1)\nn.knob('lens15Col').setValue(946.47,2)\nn.knob('lens15Blur').setValue(0)\nn.knob('lens15AxisPos').setValue(-0.1)\nn.knob('lens15Polygon').setValue(0)\nn.knob('lens15Diaphragm').setValue(1)\nn.knob('lens15DiaphRot').setValue(0)\n\nn.knob('lens16Active').setValue(True)\nn.knob('lens16Size').setValue(130)\nn.knob('lens16Col').setValue(0.8,0)\nn.knob('lens16Col').setValue(0.74,1)\nn.knob('lens16Col').setValue(0.119,2)\nn.knob('lens16Blur').setValue(5.8)\nn.knob('lens16AxisPos').setValue(-0.51)\nn.knob('lens16Polygon').setValue(0)\nn.knob('lens16Diaphragm').setValue(1)\nn.knob('lens16DiaphRot').setValue(0)\n\nn.knob('lens17Active').setValue(True)\nn.knob('lens17Size').setValue(210)\nn.knob('lens17Col').setValue(0.4911,0)\nn.knob('lens17Col').setValue(1.01,1)\nn.knob('lens17Col').setValue(2.59,2)\nn.knob('lens17Blur').setValue(0)\nn.knob('lens17AxisPos').setValue(1.2)\nn.knob('lens17Polygon').setValue(0)\nn.knob('lens17Diaphragm').setValue(1)\nn.knob('lens17DiaphRot').setValue(0)\n\nn.knob('lens18Active').setValue(True)\nn.knob('lens18Size').setValue(50)\nn.knob('lens18Col').setValue(0.26,0)\nn.knob('lens18Col').setValue(0.039,1)\nn.knob('lens18Col').setValue(-0.624,2)\nn.knob('lens18Blur').setValue(0)\nn.knob('lens18AxisPos').setValue(-0.83)\nn.knob('lens18Polygon').setValue(0)\nn.knob('lens18Diaphragm').setValue(1)\nn.knob('lens18DiaphRot').setValue(0)\n\nn.knob('lens19Active').setValue(True)\nn.knob('lens19Size').setValue(410)\nn.knob('lens19Col').setValue(4.4,0)\nn.knob('lens19Col').setValue(2.7,1)\nn.knob('lens19Col').setValue(2.04,2)\nn.knob('lens19Blur').setValue(0)\nn.knob('lens19AxisPos').setValue(-0.95)\nn.knob('lens19Polygon').setValue(0)\nn.knob('lens19Diaphragm').setValue(1)\nn.knob('lens19DiaphRot').setValue(0)\n\nn.knob('lens20Active').setValue(True)\nn.knob('lens20Size').setValue(700)\nn.knob('lens20Col').setValue(2.32,0)\nn.knob('lens20Col').setValue(0,1)\nn.knob('lens20Col').setValue(104,2)\nn.knob('lens20Blur').setValue(0)\nn.knob('lens20AxisPos').setValue(0.6)\nn.knob('lens20Polygon').setValue(0)\nn.knob('lens20Diaphragm').setValue(1)\nn.knob('lens20DiaphRot').setValue(0)\n\n\n" +STARTLINE} addUserKnob {22 preset_02 l "Fat Orange" T "n=nuke.toNode('_INPUT_CTRL')\n\nn.knob('lens1Active').setValue(True)\nn.knob('lens1Size').setValue(7)\nn.knob('lens1Col').setValue(0.0074,0)\nn.knob('lens1Col').setValue(0,1)\nn.knob('lens1Col').setValue(0.07,2)\nn.knob('lens1Blur').setValue(17)\nn.knob('lens1AxisPos').setValue(-1.3)\nn.knob('lens1Polygon').setValue(0)\nn.knob('lens1Diaphragm').setValue(1)\nn.knob('lens1DiaphRot').setValue(0)\n\nn.knob('lens2Active').setValue(True)\nn.knob('lens2Size').setValue(130)\nn.knob('lens2Col').setValue(0.11,0)\nn.knob('lens2Col').setValue(0.055,1)\nn.knob('lens2Col').setValue(0.0709,2)\nn.knob('lens2Blur').setValue(9.5)\nn.knob('lens2AxisPos').setValue(-1.66)\nn.knob('lens2Polygon').setValue(0)\nn.knob('lens2Diaphragm').setValue(1)\nn.knob('lens2DiaphRot').setValue(0)\n\nn.knob('lens3Active').setValue(True)\nn.knob('lens3Size').setValue(340)\nn.knob('lens3Col').setValue(3.9,0)\nn.knob('lens3Col').setValue(1.125,1)\nn.knob('lens3Col').setValue(0.195,2)\nn.knob('lens3Blur').setValue(0)\nn.knob('lens3AxisPos').setValue(-0.32)\nn.knob('lens3Polygon').setValue(0)\nn.knob('lens3Diaphragm').setValue(1)\nn.knob('lens3DiaphRot').setValue(0)\n\nn.knob('lens4Active').setValue(True)\nn.knob('lens4Size').setValue(160)\nn.knob('lens4Col').setValue(2.59,0)\nn.knob('lens4Col').setValue(0.13,1)\nn.knob('lens4Col').setValue(0.228,2)\nn.knob('lens4Blur').setValue(0)\nn.knob('lens4AxisPos').setValue(-0.24)\nn.knob('lens4Polygon').setValue(0)\nn.knob('lens4Diaphragm').setValue(1)\nn.knob('lens4DiaphRot').setValue(0)\n\nn.knob('lens5Active').setValue(True)\nn.knob('lens5Size').setValue(350)\nn.knob('lens5Col').setValue(0.6,0)\nn.knob('lens5Col').setValue(0.135,1)\nn.knob('lens5Col').setValue(0,2)\nn.knob('lens5Blur').setValue(0)\nn.knob('lens5AxisPos').setValue(-0.78)\nn.knob('lens5Polygon').setValue(0)\nn.knob('lens5Diaphragm').setValue(1)\nn.knob('lens5DiaphRot').setValue(0)\n\nn.knob('lens6Active').setValue(True)\nn.knob('lens6Size').setValue(30)\nn.knob('lens6Col').setValue(0.11,0)\nn.knob('lens6Col').setValue(0.053,1)\nn.knob('lens6Col').setValue(0.0000012,2)\nn.knob('lens6Blur').setValue(4)\nn.knob('lens6AxisPos').setValue(-0.75)\nn.knob('lens6Polygon').setValue(0)\nn.knob('lens6Diaphragm').setValue(1)\nn.knob('lens6DiaphRot').setValue(0)\n\nn.knob('lens7Active').setValue(True)\nn.knob('lens7Size').setValue(1000)\nn.knob('lens7Col').setValue(190,0)\nn.knob('lens7Col').setValue(24.27,1)\nn.knob('lens7Col').setValue(0,2)\nn.knob('lens7Blur').setValue(0)\nn.knob('lens7AxisPos').setValue(-0.04)\nn.knob('lens7Polygon').setValue(0)\nn.knob('lens7Diaphragm').setValue(1)\nn.knob('lens7DiaphRot').setValue(0)\n\nn.knob('lens8Active').setValue(True)\nn.knob('lens8Size').setValue(350)\nn.knob('lens8Col').setValue(0.6,0)\nn.knob('lens8Col').setValue(0.233,1)\nn.knob('lens8Col').setValue(0.089,2)\nn.knob('lens8Blur').setValue(100)\nn.knob('lens8AxisPos').setValue(-1.9)\nn.knob('lens8Polygon').setValue(0)\nn.knob('lens8Diaphragm').setValue(1)\nn.knob('lens8DiaphRot').setValue(0)\n\nn.knob('lens9Active').setValue(True)\nn.knob('lens9Size').setValue(200)\nn.knob('lens9Col').setValue(0.949,0)\nn.knob('lens9Col').setValue(0.05,1)\nn.knob('lens9Col').setValue(0,2)\nn.knob('lens9Blur').setValue(30)\nn.knob('lens9AxisPos').setValue(-0.76)\nn.knob('lens9Polygon').setValue(0)\nn.knob('lens9Diaphragm').setValue(1)\nn.knob('lens9DiaphRot').setValue(0)\n\nn.knob('lens10Active').setValue(True)\nn.knob('lens10Size').setValue(270)\nn.knob('lens10Col').setValue(5,0)\nn.knob('lens10Col').setValue(1.78,1)\nn.knob('lens10Col').setValue(0.87,2)\nn.knob('lens10Blur').setValue(0)\nn.knob('lens10AxisPos').setValue(0.18)\nn.knob('lens10Polygon').setValue(0)\nn.knob('lens10Diaphragm').setValue(1)\nn.knob('lens10DiaphRot').setValue(0)\n\nn.knob('lens11Active').setValue(True)\nn.knob('lens11Size').setValue(20)\nn.knob('lens11Col').setValue(0.03,0)\nn.knob('lens11Col').setValue(0.0093,1)\nn.knob('lens11Col').setValue(0,2)\nn.knob('lens11Blur').setValue(3.5)\nn.knob('lens11AxisPos').setValue(-0.6)\nn.knob('lens11Polygon').setValue(0)\nn.knob('lens11Diaphragm').setValue(1)\nn.knob('lens11DiaphRot').setValue(0)\n\nn.knob('lens12Active').setValue(True)\nn.knob('lens12Size').setValue(700)\nn.knob('lens12Col').setValue(0.04,0)\nn.knob('lens12Col').setValue(0,1)\nn.knob('lens12Col').setValue(0.0058,2)\nn.knob('lens12Blur').setValue(10)\nn.knob('lens12AxisPos').setValue(-2.2)\nn.knob('lens12Polygon').setValue(0)\nn.knob('lens12Diaphragm').setValue(1)\nn.knob('lens12DiaphRot').setValue(0)\n\nn.knob('lens13Active').setValue(True)\nn.knob('lens13Size').setValue(100)\nn.knob('lens13Col').setValue(0.12,0)\nn.knob('lens13Col').setValue(0,1)\nn.knob('lens13Col').setValue(0.0178,2)\nn.knob('lens13Blur').setValue(200)\nn.knob('lens13AxisPos').setValue(2)\nn.knob('lens13Polygon').setValue(0)\nn.knob('lens13Diaphragm').setValue(1)\nn.knob('lens13DiaphRot').setValue(0)\n\nn.knob('lens14Active').setValue(True)\nn.knob('lens14Size').setValue(80)\nn.knob('lens14Col').setValue(0.28,0)\nn.knob('lens14Col').setValue(0.0419,1)\nn.knob('lens14Col').setValue(0.101,2)\nn.knob('lens14Blur').setValue(0)\nn.knob('lens14AxisPos').setValue(0.38)\nn.knob('lens14Polygon').setValue(0)\nn.knob('lens14Diaphragm').setValue(1)\nn.knob('lens14DiaphRot').setValue(0)\n\nn.knob('lens15Active').setValue(True)\nn.knob('lens15Size').setValue(500)\nn.knob('lens15Col').setValue(1,0)\nn.knob('lens15Col').setValue(0.2428,1)\nn.knob('lens15Col').setValue(0.1,2)\nn.knob('lens15Blur').setValue(0)\nn.knob('lens15AxisPos').setValue(-0.5)\nn.knob('lens15Polygon').setValue(0)\nn.knob('lens15Diaphragm').setValue(1)\nn.knob('lens15DiaphRot').setValue(0)\n\nn.knob('lens16Active').setValue(True)\nn.knob('lens16Size').setValue(130)\nn.knob('lens16Col').setValue(0.449,0)\nn.knob('lens16Col').setValue(0.146,1)\nn.knob('lens16Col').setValue(0.0225,2)\nn.knob('lens16Blur').setValue(0)\nn.knob('lens16AxisPos').setValue(1.4)\nn.knob('lens16Polygon').setValue(0)\nn.knob('lens16Diaphragm').setValue(1)\nn.knob('lens16DiaphRot').setValue(0)\n\nn.knob('lens17Active').setValue(True)\nn.knob('lens17Size').setValue(210)\nn.knob('lens17Col').setValue(0.09,0)\nn.knob('lens17Col').setValue(0.009,1)\nn.knob('lens17Col').setValue(0.056,2)\nn.knob('lens17Blur').setValue(0)\nn.knob('lens17AxisPos').setValue(1.2)\nn.knob('lens17Polygon').setValue(0)\nn.knob('lens17Diaphragm').setValue(1)\nn.knob('lens17DiaphRot').setValue(0)\n\nn.knob('lens18Active').setValue(True)\nn.knob('lens18Size').setValue(100)\nn.knob('lens18Col').setValue(0.06,0)\nn.knob('lens18Col').setValue(0.009,1)\nn.knob('lens18Col').setValue(0.0579,2)\nn.knob('lens18Blur').setValue(120)\nn.knob('lens18AxisPos').setValue(2.5)\nn.knob('lens18Polygon').setValue(0)\nn.knob('lens18Diaphragm').setValue(1)\nn.knob('lens18DiaphRot').setValue(0)\n\nn.knob('lens19Active').setValue(True)\nn.knob('lens19Size').setValue(150)\nn.knob('lens19Col').setValue(0.2,0)\nn.knob('lens19Col').setValue(0.0708,1)\nn.knob('lens19Col').setValue(0.1219,2)\nn.knob('lens19Blur').setValue(9)\nn.knob('lens19AxisPos').setValue(0.8)\nn.knob('lens19Polygon').setValue(0)\nn.knob('lens19Diaphragm').setValue(1)\nn.knob('lens19DiaphRot').setValue(0)\n\nn.knob('lens20Active').setValue(True)\nn.knob('lens20Size').setValue(1100)\nn.knob('lens20Col').setValue(0.8,0)\nn.knob('lens20Col').setValue(0.178,1)\nn.knob('lens20Col').setValue(0.119,2)\nn.knob('lens20Blur').setValue(0)\nn.knob('lens20AxisPos').setValue(0.95)\nn.knob('lens20Polygon').setValue(0)\nn.knob('lens20Diaphragm').setValue(1)\nn.knob('lens20DiaphRot').setValue(0)\n\n\n" +STARTLINE} addUserKnob {22 preset_03 l "Classic Orange Blue" T "n=nuke.toNode('_INPUT_CTRL')\n\nn.knob('lens1Active').setValue(True)\nn.knob('lens1Size').setValue(650)\nn.knob('lens1Col').setValue(35.59,0)\nn.knob('lens1Col').setValue(19.95,1)\nn.knob('lens1Col').setValue(5.27,2)\nn.knob('lens1Blur').setValue(17)\nn.knob('lens1AxisPos').setValue(0.98)\nn.knob('lens1Polygon').setValue(0)\nn.knob('lens1Diaphragm').setValue(1)\nn.knob('lens1DiaphRot').setValue(0)\n\nn.knob('lens2Active').setValue(True)\nn.knob('lens2Size').setValue(20)\nn.knob('lens2Col').setValue(0.649,0)\nn.knob('lens2Col').setValue(0.34,1)\nn.knob('lens2Col').setValue(0.137,2)\nn.knob('lens2Blur').setValue(7)\nn.knob('lens2AxisPos').setValue(0.77)\nn.knob('lens2Polygon').setValue(0)\nn.knob('lens2Diaphragm').setValue(1)\nn.knob('lens2DiaphRot').setValue(0)\n\nn.knob('lens3Active').setValue(True)\nn.knob('lens3Size').setValue(520)\nn.knob('lens3Col').setValue(446,0)\nn.knob('lens3Col').setValue(249.31,1)\nn.knob('lens3Col').setValue(44.6,2)\nn.knob('lens3Blur').setValue(9.4)\nn.knob('lens3AxisPos').setValue(-0.43)\nn.knob('lens3Polygon').setValue(0)\nn.knob('lens3Diaphragm').setValue(1)\nn.knob('lens3DiaphRot').setValue(0)\n\nn.knob('lens4Active').setValue(True)\nn.knob('lens4Size').setValue(60)\nn.knob('lens4Col').setValue(26,0)\nn.knob('lens4Col').setValue(22.8,1)\nn.knob('lens4Col').setValue(14,2)\nn.knob('lens4Blur').setValue(7)\nn.knob('lens4AxisPos').setValue(0.7)\nn.knob('lens4Polygon').setValue(0)\nn.knob('lens4Diaphragm').setValue(1)\nn.knob('lens4DiaphRot').setValue(0)\n\nn.knob('lens5Active').setValue(True)\nn.knob('lens5Size').setValue(220)\nn.knob('lens5Col').setValue(30,0)\nn.knob('lens5Col').setValue(11.46,1)\nn.knob('lens5Col').setValue(0,2)\nn.knob('lens5Blur').setValue(4.4)\nn.knob('lens5AxisPos').setValue(0.66)\nn.knob('lens5Polygon').setValue(0)\nn.knob('lens5Diaphragm').setValue(1)\nn.knob('lens5DiaphRot').setValue(0)\n\nn.knob('lens6Active').setValue(True)\nn.knob('lens6Size').setValue(130)\nn.knob('lens6Col').setValue(0.134,0)\nn.knob('lens6Col').setValue(17.49,1)\nn.knob('lens6Col').setValue(40,2)\nn.knob('lens6Blur').setValue(0)\nn.knob('lens6AxisPos').setValue(0.23)\nn.knob('lens6Polygon').setValue(0)\nn.knob('lens6Diaphragm').setValue(1)\nn.knob('lens6DiaphRot').setValue(0)\n\nn.knob('lens7Active').setValue(True)\nn.knob('lens7Size').setValue(200)\nn.knob('lens7Col').setValue(50,0)\nn.knob('lens7Col').setValue(47.767,1)\nn.knob('lens7Col').setValue(31.44,2)\nn.knob('lens7Blur').setValue(0)\nn.knob('lens7AxisPos').setValue(0.203)\nn.knob('lens7Polygon').setValue(0)\nn.knob('lens7Diaphragm').setValue(1)\nn.knob('lens7DiaphRot').setValue(0)\n\nn.knob('lens8Active').setValue(True)\nn.knob('lens8Size').setValue(850)\nn.knob('lens8Col').setValue(130,0)\nn.knob('lens8Col').setValue(61.45,1)\nn.knob('lens8Col').setValue(1.76,2)\nn.knob('lens8Blur').setValue(40)\nn.knob('lens8AxisPos').setValue(-0.96)\nn.knob('lens8Polygon').setValue(0)\nn.knob('lens8Diaphragm').setValue(1)\nn.knob('lens8DiaphRot').setValue(0)\n\nn.knob('lens9Active').setValue(True)\nn.knob('lens9Size').setValue(10)\nn.knob('lens9Col').setValue(1.25,0)\nn.knob('lens9Col').setValue(0.249,1)\nn.knob('lens9Col').setValue(0.756,2)\nn.knob('lens9Blur').setValue(0)\nn.knob('lens9AxisPos').setValue(0.53)\nn.knob('lens9Polygon').setValue(0)\nn.knob('lens9Diaphragm').setValue(1)\nn.knob('lens9DiaphRot').setValue(0)\n\nn.knob('lens10Active').setValue(True)\nn.knob('lens10Size').setValue(65)\nn.knob('lens10Col').setValue(20,0)\nn.knob('lens10Col').setValue(9.2,1)\nn.knob('lens10Col').setValue(5.5,2)\nn.knob('lens10Blur').setValue(4.8)\nn.knob('lens10AxisPos').setValue(0.18)\nn.knob('lens10Polygon').setValue(0)\nn.knob('lens10Diaphragm').setValue(1)\nn.knob('lens10DiaphRot').setValue(0)\n\nn.knob('lens11Active').setValue(True)\nn.knob('lens11Size').setValue(30)\nn.knob('lens11Col').setValue(4.5,0)\nn.knob('lens11Col').setValue(8.26,1)\nn.knob('lens11Col').setValue(10,2)\nn.knob('lens11Blur').setValue(0)\nn.knob('lens11AxisPos').setValue(-0.2)\nn.knob('lens11Polygon').setValue(0)\nn.knob('lens11Diaphragm').setValue(1)\nn.knob('lens11DiaphRot').setValue(0)\n\nn.knob('lens12Active').setValue(True)\nn.knob('lens12Size').setValue(1090)\nn.knob('lens12Col').setValue(0.11,0)\nn.knob('lens12Col').setValue(0.053,1)\nn.knob('lens12Col').setValue(0.036,2)\nn.knob('lens12Blur').setValue(2.1)\nn.knob('lens12AxisPos').setValue(-0.8)\nn.knob('lens12Polygon').setValue(0)\nn.knob('lens12Diaphragm').setValue(1)\nn.knob('lens12DiaphRot').setValue(0)\n\nn.knob('lens13Active').setValue(True)\nn.knob('lens13Size').setValue(32)\nn.knob('lens13Col').setValue(10,0)\nn.knob('lens13Col').setValue(9.7,1)\nn.knob('lens13Col').setValue(6.26,2)\nn.knob('lens13Blur').setValue(19.6)\nn.knob('lens13AxisPos').setValue(0.68)\nn.knob('lens13Polygon').setValue(0)\nn.knob('lens13Diaphragm').setValue(1)\nn.knob('lens13DiaphRot').setValue(0)\n\nn.knob('lens14Active').setValue(True)\nn.knob('lens14Size').setValue(320)\nn.knob('lens14Col').setValue(2509,0)\nn.knob('lens14Col').setValue(1171,1)\nn.knob('lens14Col').setValue(1256,2)\nn.knob('lens14Blur').setValue(0)\nn.knob('lens14AxisPos').setValue(-0.04)\nn.knob('lens14Polygon').setValue(0)\nn.knob('lens14Diaphragm').setValue(1)\nn.knob('lens14DiaphRot').setValue(0)\n\nn.knob('lens15Active').setValue(True)\nn.knob('lens15Size').setValue(590)\nn.knob('lens15Col').setValue(1120,0)\nn.knob('lens15Col').setValue(506,1)\nn.knob('lens15Col').setValue(456,2)\nn.knob('lens15Blur').setValue(0)\nn.knob('lens15AxisPos').setValue(-0.1)\nn.knob('lens15Polygon').setValue(0)\nn.knob('lens15Diaphragm').setValue(1)\nn.knob('lens15DiaphRot').setValue(0)\n\nn.knob('lens16Active').setValue(True)\nn.knob('lens16Size').setValue(60)\nn.knob('lens16Col').setValue(18,0)\nn.knob('lens16Col').setValue(4.51,1)\nn.knob('lens16Col').setValue(1.8,2)\nn.knob('lens16Blur').setValue(5.8)\nn.knob('lens16AxisPos').setValue(-0.27)\nn.knob('lens16Polygon').setValue(0)\nn.knob('lens16Diaphragm').setValue(1)\nn.knob('lens16DiaphRot').setValue(0)\n\nn.knob('lens17Active').setValue(True)\nn.knob('lens17Size').setValue(70)\nn.knob('lens17Col').setValue(20,0)\nn.knob('lens17Col').setValue(13.74,1)\nn.knob('lens17Col').setValue(4.58,2)\nn.knob('lens17Blur').setValue(0)\nn.knob('lens17AxisPos').setValue(-0.24)\nn.knob('lens17Polygon').setValue(0)\nn.knob('lens17Diaphragm').setValue(1)\nn.knob('lens17DiaphRot').setValue(0)\n\nn.knob('lens18Active').setValue(True)\nn.knob('lens18Size').setValue(50)\nn.knob('lens18Col').setValue(30,0)\nn.knob('lens18Col').setValue(8.94,1)\nn.knob('lens18Col').setValue(-10.5,2)\nn.knob('lens18Blur').setValue(30)\nn.knob('lens18AxisPos').setValue(-0.32)\nn.knob('lens18Polygon').setValue(0)\nn.knob('lens18Diaphragm').setValue(1)\nn.knob('lens18DiaphRot').setValue(0)\n\nn.knob('lens19Active').setValue(True)\nn.knob('lens19Size').setValue(50)\nn.knob('lens19Col').setValue(1.97,0)\nn.knob('lens19Col').setValue(3.2,1)\nn.knob('lens19Col').setValue(0.32,2)\nn.knob('lens19Blur').setValue(4.4)\nn.knob('lens19AxisPos').setValue(-0.47)\nn.knob('lens19Polygon').setValue(0)\nn.knob('lens19Diaphragm').setValue(1)\nn.knob('lens19DiaphRot').setValue(0)\n\nn.knob('lens20Active').setValue(True)\nn.knob('lens20Size').setValue(80)\nn.knob('lens20Col').setValue(3.79,0)\nn.knob('lens20Col').setValue(3.11,1)\nn.knob('lens20Col').setValue(0.8,2)\nn.knob('lens20Blur').setValue(0)\nn.knob('lens20AxisPos').setValue(-0.15)\nn.knob('lens20Polygon').setValue(0)\nn.knob('lens20Diaphragm').setValue(1)\nn.knob('lens20DiaphRot').setValue(0)\n\n\n" +STARTLINE} addUserKnob {22 preset_04 l "Giant Colorful" T "n=nuke.toNode('_INPUT_CTRL')\n\nn.knob('lens1Active').setValue(True)\nn.knob('lens1Size').setValue(6)\nn.knob('lens1Col').setValue(0.4,0)\nn.knob('lens1Col').setValue(0.664,1)\nn.knob('lens1Col').setValue(1.85,2)\nn.knob('lens1Blur').setValue(0)\nn.knob('lens1AxisPos').setValue(-0.16)\nn.knob('lens1Polygon').setValue(0)\nn.knob('lens1Diaphragm').setValue(1)\nn.knob('lens1DiaphRot').setValue(0)\n\nn.knob('lens2Active').setValue(True)\nn.knob('lens2Size').setValue(1.1)\nn.knob('lens2Col').setValue(2.67,0)\nn.knob('lens2Col').setValue(3.09,1)\nn.knob('lens2Col').setValue(0.68,2)\nn.knob('lens2Blur').setValue(0)\nn.knob('lens2AxisPos').setValue(0.05)\nn.knob('lens2Polygon').setValue(0)\nn.knob('lens2Diaphragm').setValue(1)\nn.knob('lens2DiaphRot').setValue(0)\n\nn.knob('lens3Active').setValue(True)\nn.knob('lens3Size').setValue(410)\nn.knob('lens3Col').setValue(14,0)\nn.knob('lens3Col').setValue(4.77,1)\nn.knob('lens3Col').setValue(0.76,2)\nn.knob('lens3Blur').setValue(0)\nn.knob('lens3AxisPos').setValue(1.1)\nn.knob('lens3Polygon').setValue(0)\nn.knob('lens3Diaphragm').setValue(1)\nn.knob('lens3DiaphRot').setValue(0)\n\nn.knob('lens4Active').setValue(True)\nn.knob('lens4Size').setValue(370)\nn.knob('lens4Col').setValue(12,0)\nn.knob('lens4Col').setValue(3.96,1)\nn.knob('lens4Col').setValue(10.37,2)\nn.knob('lens4Blur').setValue(7)\nn.knob('lens4AxisPos').setValue(0.95)\nn.knob('lens4Polygon').setValue(0)\nn.knob('lens4Diaphragm').setValue(1)\nn.knob('lens4DiaphRot').setValue(0)\n\nn.knob('lens5Active').setValue(True)\nn.knob('lens5Size').setValue(1120)\nn.knob('lens5Col').setValue(110,0)\nn.knob('lens5Col').setValue(48.46,1)\nn.knob('lens5Col').setValue(7.55,2)\nn.knob('lens5Blur').setValue(18.8)\nn.knob('lens5AxisPos').setValue(0.26)\nn.knob('lens5Polygon').setValue(0)\nn.knob('lens5Diaphragm').setValue(1)\nn.knob('lens5DiaphRot').setValue(0)\n\nn.knob('lens6Active').setValue(True)\nn.knob('lens6Size').setValue(330)\nn.knob('lens6Col').setValue(0.55,0)\nn.knob('lens6Col').setValue(0.329,1)\nn.knob('lens6Col').setValue(0.073,2)\nn.knob('lens6Blur').setValue(0)\nn.knob('lens6AxisPos').setValue(-1.43)\nn.knob('lens6Polygon').setValue(0)\nn.knob('lens6Diaphragm').setValue(1)\nn.knob('lens6DiaphRot').setValue(0)\n\nn.knob('lens7Active').setValue(True)\nn.knob('lens7Size').setValue(360)\nn.knob('lens7Col').setValue(5.69,0)\nn.knob('lens7Col').setValue(3.44,1)\nn.knob('lens7Col').setValue(0,2)\nn.knob('lens7Blur').setValue(0)\nn.knob('lens7AxisPos').setValue(-1.58)\nn.knob('lens7Polygon').setValue(0)\nn.knob('lens7Diaphragm').setValue(1)\nn.knob('lens7DiaphRot').setValue(0)\n\nn.knob('lens8Active').setValue(True)\nn.knob('lens8Size').setValue(8)\nn.knob('lens8Col').setValue(0.38,0)\nn.knob('lens8Col').setValue(1.5,1)\nn.knob('lens8Col').setValue(3.79,2)\nn.knob('lens8Blur').setValue(0)\nn.knob('lens8AxisPos').setValue(0.1)\nn.knob('lens8Polygon').setValue(0)\nn.knob('lens8Diaphragm').setValue(1)\nn.knob('lens8DiaphRot').setValue(0)\n\nn.knob('lens9Active').setValue(True)\nn.knob('lens9Size').setValue(46.5)\nn.knob('lens9Col').setValue(1.8,0)\nn.knob('lens9Col').setValue(1.88,1)\nn.knob('lens9Col').setValue(3.29,2)\nn.knob('lens9Blur').setValue(2.8)\nn.knob('lens9AxisPos').setValue(-0.22)\nn.knob('lens9Polygon').setValue(0)\nn.knob('lens9Diaphragm').setValue(1)\nn.knob('lens9DiaphRot').setValue(0)\n\nn.knob('lens10Active').setValue(True)\nn.knob('lens10Size').setValue(400)\nn.knob('lens10Col').setValue(14,0)\nn.knob('lens10Col').setValue(7.09,1)\nn.knob('lens10Col').setValue(12.38,2)\nn.knob('lens10Blur').setValue(0)\nn.knob('lens10AxisPos').setValue(0.44)\nn.knob('lens10Polygon').setValue(0)\nn.knob('lens10Diaphragm').setValue(1)\nn.knob('lens10DiaphRot').setValue(0)\n\nn.knob('lens11Active').setValue(True)\nn.knob('lens11Size').setValue(6.2)\nn.knob('lens11Col').setValue(0.14,0)\nn.knob('lens11Col').setValue(0.11,1)\nn.knob('lens11Col').setValue(0.014,2)\nn.knob('lens11Blur').setValue(10.8)\nn.knob('lens11AxisPos').setValue(-1.4)\nn.knob('lens11Polygon').setValue(0)\nn.knob('lens11Diaphragm').setValue(1)\nn.knob('lens11DiaphRot').setValue(0)\n\nn.knob('lens12Active').setValue(True)\nn.knob('lens12Size').setValue(10)\nn.knob('lens12Col').setValue(0.11,0)\nn.knob('lens12Col').setValue(0.05,1)\nn.knob('lens12Col').setValue(0.02,2)\nn.knob('lens12Blur').setValue(4.6)\nn.knob('lens12AxisPos').setValue(-1.42)\nn.knob('lens12Polygon').setValue(0)\nn.knob('lens12Diaphragm').setValue(1)\nn.knob('lens12DiaphRot').setValue(0)\n\nn.knob('lens13Active').setValue(True)\nn.knob('lens13Size').setValue(2.3)\nn.knob('lens13Col').setValue(0.14,0)\nn.knob('lens13Col').setValue(0.13,1)\nn.knob('lens13Col').setValue(0.04,2)\nn.knob('lens13Blur').setValue(3)\nn.knob('lens13AxisPos').setValue(-1.48)\nn.knob('lens13Polygon').setValue(0)\nn.knob('lens13Diaphragm').setValue(1)\nn.knob('lens13DiaphRot').setValue(0)\n\nn.knob('lens14Active').setValue(True)\nn.knob('lens14Size').setValue(1020)\nn.knob('lens14Col').setValue(260,0)\nn.knob('lens14Col').setValue(122,1)\nn.knob('lens14Col').setValue(12.6,2)\nn.knob('lens14Blur').setValue(0)\nn.knob('lens14AxisPos').setValue(0.5)\nn.knob('lens14Polygon').setValue(0)\nn.knob('lens14Diaphragm').setValue(1)\nn.knob('lens14DiaphRot').setValue(0)\n\nn.knob('lens15Active').setValue(True)\nn.knob('lens15Size').setValue(650)\nn.knob('lens15Col').setValue(80,0)\nn.knob('lens15Col').setValue(21.6,1)\nn.knob('lens15Col').setValue(47.88,2)\nn.knob('lens15Blur').setValue(0)\nn.knob('lens15AxisPos').setValue(0.4)\nn.knob('lens15Polygon').setValue(0)\nn.knob('lens15Diaphragm').setValue(1)\nn.knob('lens15DiaphRot').setValue(0)\n\nn.knob('lens16Active').setValue(True)\nn.knob('lens16Size').setValue(60)\nn.knob('lens16Col').setValue(2.04,0)\nn.knob('lens16Col').setValue(0.42,1)\nn.knob('lens16Col').setValue(0.10,2)\nn.knob('lens16Blur').setValue(0)\nn.knob('lens16AxisPos').setValue(0.4)\nn.knob('lens16Polygon').setValue(0)\nn.knob('lens16Diaphragm').setValue(1)\nn.knob('lens16DiaphRot').setValue(0)\n\nn.knob('lens17Active').setValue(True)\nn.knob('lens17Size').setValue(80)\nn.knob('lens17Col').setValue(1.2,0)\nn.knob('lens17Col').setValue(0.36,1)\nn.knob('lens17Col').setValue(0.388,2)\nn.knob('lens17Blur').setValue(70)\nn.knob('lens17AxisPos').setValue(-2.4)\nn.knob('lens17Polygon').setValue(0)\nn.knob('lens17Diaphragm').setValue(1)\nn.knob('lens17DiaphRot').setValue(0)\n\nn.knob('lens18Active').setValue(True)\nn.knob('lens18Size').setValue(60)\nn.knob('lens18Col').setValue(10,0)\nn.knob('lens18Col').setValue(4.42,1)\nn.knob('lens18Col').setValue(0,2)\nn.knob('lens18Blur').setValue(30)\nn.knob('lens18AxisPos').setValue(-0.54)\nn.knob('lens18Polygon').setValue(0)\nn.knob('lens18Diaphragm').setValue(1)\nn.knob('lens18DiaphRot').setValue(0)\n\nn.knob('lens19Active').setValue(True)\nn.knob('lens19Size').setValue(99)\nn.knob('lens19Col').setValue(1.54,0)\nn.knob('lens19Col').setValue(1.25,1)\nn.knob('lens19Col').setValue(0.24,2)\nn.knob('lens19Blur').setValue(50)\nn.knob('lens19AxisPos').setValue(1.8)\nn.knob('lens19Polygon').setValue(0)\nn.knob('lens19Diaphragm').setValue(1)\nn.knob('lens19DiaphRot').setValue(0)\n\nn.knob('lens20Active').setValue(True)\nn.knob('lens20Size').setValue(9.4)\nn.knob('lens20Col').setValue(0.239,0)\nn.knob('lens20Col').setValue(0.121,1)\nn.knob('lens20Col').setValue(0.065,2)\nn.knob('lens20Blur').setValue(4)\nn.knob('lens20AxisPos').setValue(0.58)\nn.knob('lens20Polygon').setValue(0)\nn.knob('lens20Diaphragm').setValue(1)\nn.knob('lens20DiaphRot').setValue(0)\n\n\n" +STARTLINE} addUserKnob {22 preset_05 l "Thin and Wide" T "n=nuke.toNode('_INPUT_CTRL')\n\nn.knob('lens1Active').setValue(True)\nn.knob('lens1Size').setValue(25.2)\nn.knob('lens1Col').setValue(0.97,0)\nn.knob('lens1Col').setValue(2.927,1)\nn.knob('lens1Col').setValue(18,2)\nn.knob('lens1Blur').setValue(0)\nn.knob('lens1AxisPos').setValue(-0.11)\nn.knob('lens1Polygon').setValue(0)\nn.knob('lens1Diaphragm').setValue(0.8)\nn.knob('lens1DiaphRot').setValue(0)\n\nn.knob('lens2Active').setValue(True)\nn.knob('lens2Size').setValue(4.8)\nn.knob('lens2Col').setValue(-2.3,0)\nn.knob('lens2Col').setValue(6.32,1)\nn.knob('lens2Col').setValue(15.39,2)\nn.knob('lens2Blur').setValue(0)\nn.knob('lens2AxisPos').setValue(-0.082)\nn.knob('lens2Polygon').setValue(0)\nn.knob('lens2Diaphragm').setValue(1)\nn.knob('lens2DiaphRot').setValue(0)\n\nn.knob('lens3Active').setValue(True)\nn.knob('lens3Size').setValue(13.5)\nn.knob('lens3Col').setValue(1.17,0)\nn.knob('lens3Col').setValue(1.72,1)\nn.knob('lens3Col').setValue(26,2)\nn.knob('lens3Blur').setValue(0)\nn.knob('lens3AxisPos').setValue(-0.06)\nn.knob('lens3Polygon').setValue(0)\nn.knob('lens3Diaphragm').setValue(0.8)\nn.knob('lens3DiaphRot').setValue(0)\n\nn.knob('lens4Active').setValue(True)\nn.knob('lens4Size').setValue(2.05)\nn.knob('lens4Col').setValue(6.93,0)\nn.knob('lens4Col').setValue(32,1)\nn.knob('lens4Col').setValue(29.82,2)\nn.knob('lens4Blur').setValue(0)\nn.knob('lens4AxisPos').setValue(0.08)\nn.knob('lens4Polygon').setValue(0)\nn.knob('lens4Diaphragm').setValue(1)\nn.knob('lens4DiaphRot').setValue(0)\n\nn.knob('lens5Active').setValue(True)\nn.knob('lens5Size').setValue(200)\nn.knob('lens5Col').setValue(1.09,0)\nn.knob('lens5Col').setValue(1.14,1)\nn.knob('lens5Col').setValue(8,2)\nn.knob('lens5Blur').setValue(0)\nn.knob('lens5AxisPos').setValue(0.27)\nn.knob('lens5Polygon').setValue(0)\nn.knob('lens5Diaphragm').setValue(1)\nn.knob('lens5DiaphRot').setValue(0)\n\nn.knob('lens6Active').setValue(True)\nn.knob('lens6Size').setValue(1000)\nn.knob('lens6Col').setValue(50,0)\nn.knob('lens6Col').setValue(6.38,1)\nn.knob('lens6Col').setValue(0,2)\nn.knob('lens6Blur').setValue(0)\nn.knob('lens6AxisPos').setValue(-1.08)\nn.knob('lens6Polygon').setValue(0)\nn.knob('lens6Diaphragm').setValue(1)\nn.knob('lens6DiaphRot').setValue(0)\n\nn.knob('lens7Active').setValue(True)\nn.knob('lens7Size').setValue(460)\nn.knob('lens7Col').setValue(0,0)\nn.knob('lens7Col').setValue(0.99,1)\nn.knob('lens7Col').setValue(20,2)\nn.knob('lens7Blur').setValue(0)\nn.knob('lens7AxisPos').setValue(-0.88)\nn.knob('lens7Polygon').setValue(0)\nn.knob('lens7Diaphragm').setValue(1)\nn.knob('lens7DiaphRot').setValue(0)\n\nn.knob('lens8Active').setValue(True)\nn.knob('lens8Size').setValue(450)\nn.knob('lens8Col').setValue(12,0)\nn.knob('lens8Col').setValue(2.25,1)\nn.knob('lens8Col').setValue(10.04,2)\nn.knob('lens8Blur').setValue(9.9)\nn.knob('lens8AxisPos').setValue(-0.69)\nn.knob('lens8Polygon').setValue(0)\nn.knob('lens8Diaphragm').setValue(1)\nn.knob('lens8DiaphRot').setValue(0)\n\nn.knob('lens9Active').setValue(True)\nn.knob('lens9Size').setValue(50.4)\nn.knob('lens9Col').setValue(0.9,0)\nn.knob('lens9Col').setValue(1.012,1)\nn.knob('lens9Col').setValue(3,2)\nn.knob('lens9Blur').setValue(2.8)\nn.knob('lens9AxisPos').setValue(0.34)\nn.knob('lens9Polygon').setValue(0)\nn.knob('lens9Diaphragm').setValue(1)\nn.knob('lens9DiaphRot').setValue(0)\n\nn.knob('lens10Active').setValue(True)\nn.knob('lens10Size').setValue(85.6)\nn.knob('lens10Col').setValue(2.79,0)\nn.knob('lens10Col').setValue(1.537,1)\nn.knob('lens10Col').setValue(-2.6,2)\nn.knob('lens10Blur').setValue(4.6)\nn.knob('lens10AxisPos').setValue(0.37)\nn.knob('lens10Polygon').setValue(0)\nn.knob('lens10Diaphragm').setValue(1)\nn.knob('lens10DiaphRot').setValue(0)\n\nn.knob('lens11Active').setValue(True)\nn.knob('lens11Size').setValue(83.5)\nn.knob('lens11Col').setValue(0,0)\nn.knob('lens11Col').setValue(4.86,1)\nn.knob('lens11Col').setValue(30,2)\nn.knob('lens11Blur').setValue(0)\nn.knob('lens11AxisPos').setValue(0.15)\nn.knob('lens11Polygon').setValue(0)\nn.knob('lens11Diaphragm').setValue(1)\nn.knob('lens11DiaphRot').setValue(0)\n\nn.knob('lens12Active').setValue(True)\nn.knob('lens12Size').setValue(40)\nn.knob('lens12Col').setValue(10,0)\nn.knob('lens12Col').setValue(3.9,1)\nn.knob('lens12Col').setValue(7.98,2)\nn.knob('lens12Blur').setValue(4.6)\nn.knob('lens12AxisPos').setValue(0.44)\nn.knob('lens12Polygon').setValue(0)\nn.knob('lens12Diaphragm').setValue(1)\nn.knob('lens12DiaphRot').setValue(0)\n\nn.knob('lens13Active').setValue(True)\nn.knob('lens13Size').setValue(1.4)\nn.knob('lens13Col').setValue(3.29,0)\nn.knob('lens13Col').setValue(1.28,1)\nn.knob('lens13Col').setValue(2.6,2)\nn.knob('lens13Blur').setValue(5.6)\nn.knob('lens13AxisPos').setValue(0.45)\nn.knob('lens13Polygon').setValue(0)\nn.knob('lens13Diaphragm').setValue(1)\nn.knob('lens13DiaphRot').setValue(0)\n\nn.knob('lens14Active').setValue(True)\nn.knob('lens14Size').setValue(1)\nn.knob('lens14Col').setValue(1.64,0)\nn.knob('lens14Col').setValue(0.74,1)\nn.knob('lens14Col').setValue(1.3,2)\nn.knob('lens14Blur').setValue(2)\nn.knob('lens14AxisPos').setValue(0.458)\nn.knob('lens14Polygon').setValue(0)\nn.knob('lens14Diaphragm').setValue(1)\nn.knob('lens14DiaphRot').setValue(0)\n\nn.knob('lens15Active').setValue(True)\nn.knob('lens15Size').setValue(1050)\nn.knob('lens15Col').setValue(80,0)\nn.knob('lens15Col').setValue(24,1)\nn.knob('lens15Col').setValue(49.19,2)\nn.knob('lens15Blur').setValue(0)\nn.knob('lens15AxisPos').setValue(0.8)\nn.knob('lens15Polygon').setValue(0)\nn.knob('lens15Diaphragm').setValue(1)\nn.knob('lens15DiaphRot').setValue(0)\n\nn.knob('lens16Active').setValue(True)\nn.knob('lens16Size').setValue(600)\nn.knob('lens16Col').setValue(30,0)\nn.knob('lens16Col').setValue(7.29,1)\nn.knob('lens16Col').setValue(12.7,2)\nn.knob('lens16Blur').setValue(0)\nn.knob('lens16AxisPos').setValue(-0.42)\nn.knob('lens16Polygon').setValue(0)\nn.knob('lens16Diaphragm').setValue(1)\nn.knob('lens16DiaphRot').setValue(0)\n\nn.knob('lens17Active').setValue(True)\nn.knob('lens17Size').setValue(600)\nn.knob('lens17Col').setValue(25,0)\nn.knob('lens17Col').setValue(7.5,1)\nn.knob('lens17Col').setValue(8.08,2)\nn.knob('lens17Blur').setValue(50)\nn.knob('lens17AxisPos').setValue(0.7)\nn.knob('lens17Polygon').setValue(0)\nn.knob('lens17Diaphragm').setValue(1)\nn.knob('lens17DiaphRot').setValue(0)\n\nn.knob('lens18Active').setValue(True)\nn.knob('lens18Size').setValue(270)\nn.knob('lens18Col').setValue(6.4,0)\nn.knob('lens18Col').setValue(3.69,1)\nn.knob('lens18Col').setValue(0.73,2)\nn.knob('lens18Blur').setValue(0)\nn.knob('lens18AxisPos').setValue(-0.36)\nn.knob('lens18Polygon').setValue(0)\nn.knob('lens18Diaphragm').setValue(1)\nn.knob('lens18DiaphRot').setValue(0)\n\nn.knob('lens19Active').setValue(True)\nn.knob('lens19Size').setValue(99)\nn.knob('lens19Col').setValue(5.249,0)\nn.knob('lens19Col').setValue(7.51,1)\nn.knob('lens19Col').setValue(40,2)\nn.knob('lens19Blur').setValue(20)\nn.knob('lens19AxisPos').setValue(-0.16)\nn.knob('lens19Polygon').setValue(0)\nn.knob('lens19Diaphragm').setValue(1)\nn.knob('lens19DiaphRot').setValue(0)\n\nn.knob('lens20Active').setValue(True)\nn.knob('lens20Size').setValue(9.4)\nn.knob('lens20Col').setValue(0.03,0)\nn.knob('lens20Col').setValue(0.006,1)\nn.knob('lens20Col').setValue(0.015,2)\nn.knob('lens20Blur').setValue(4)\nn.knob('lens20AxisPos').setValue(0.5)\nn.knob('lens20Polygon').setValue(0)\nn.knob('lens20Diaphragm').setValue(1)\nn.knob('lens20DiaphRot').setValue(0)\n\n\n" +STARTLINE} addUserKnob {22 preset_06 l "Hexa Green Orange" T "n=nuke.toNode('_INPUT_CTRL')\n\nn.knob('lens1Active').setValue(True)\nn.knob('lens1Size').setValue(140)\nn.knob('lens1Col').setValue(0.918,0)\nn.knob('lens1Col').setValue(6.62,1)\nn.knob('lens1Col').setValue(7,2)\nn.knob('lens1Blur').setValue(12.9)\nn.knob('lens1AxisPos').setValue(-0.426)\nn.knob('lens1Polygon').setValue(0)\nn.knob('lens1Diaphragm').setValue(0.722)\nn.knob('lens1DiaphRot').setValue(26)\n\nn.knob('lens2Active').setValue(True)\nn.knob('lens2Size').setValue(140)\nn.knob('lens2Col').setValue(10.72,0)\nn.knob('lens2Col').setValue(13,1)\nn.knob('lens2Col').setValue(1.63,2)\nn.knob('lens2Blur').setValue(9.5)\nn.knob('lens2AxisPos').setValue(-0.358)\nn.knob('lens2Polygon').setValue(0)\nn.knob('lens2Diaphragm').setValue(0.656)\nn.knob('lens2DiaphRot').setValue(26)\n\nn.knob('lens3Active').setValue(True)\nn.knob('lens3Size').setValue(82)\nn.knob('lens3Col').setValue(3,0)\nn.knob('lens3Col').setValue(1.72,1)\nn.knob('lens3Col').setValue(0,2)\nn.knob('lens3Blur').setValue(5.4)\nn.knob('lens3AxisPos').setValue(-0.346)\nn.knob('lens3Polygon').setValue(0)\nn.knob('lens3Diaphragm').setValue(0.792)\nn.knob('lens3DiaphRot').setValue(26)\n\nn.knob('lens4Active').setValue(True)\nn.knob('lens4Size').setValue(230)\nn.knob('lens4Col').setValue(152,0)\nn.knob('lens4Col').setValue(41.01,1)\nn.knob('lens4Col').setValue(0,2)\nn.knob('lens4Blur').setValue(6.1)\nn.knob('lens4AxisPos').setValue(-0.634)\nn.knob('lens4Polygon').setValue(0)\nn.knob('lens4Diaphragm').setValue(0.566)\nn.knob('lens4DiaphRot').setValue(26)\n\nn.knob('lens5Active').setValue(True)\nn.knob('lens5Size').setValue(250)\nn.knob('lens5Col').setValue(23,0)\nn.knob('lens5Col').setValue(19,1)\nn.knob('lens5Col').setValue(0,2)\nn.knob('lens5Blur').setValue(60)\nn.knob('lens5AxisPos').setValue(-0.66)\nn.knob('lens5Polygon').setValue(0)\nn.knob('lens5Diaphragm').setValue(1)\nn.knob('lens5DiaphRot').setValue(26)\n\nn.knob('lens6Active').setValue(True)\nn.knob('lens6Size').setValue(520)\nn.knob('lens6Col').setValue(12,0)\nn.knob('lens6Col').setValue(-2.54,1)\nn.knob('lens6Col').setValue(-4.8,2)\nn.knob('lens6Blur').setValue(21)\nn.knob('lens6AxisPos').setValue(-1.06)\nn.knob('lens6Polygon').setValue(0)\nn.knob('lens6Diaphragm').setValue(0.446)\nn.knob('lens6DiaphRot').setValue(26)\n\nn.knob('lens7Active').setValue(True)\nn.knob('lens7Size').setValue(460)\nn.knob('lens7Col').setValue(2.46,0)\nn.knob('lens7Col').setValue(9,1)\nn.knob('lens7Col').setValue(0.9,2)\nn.knob('lens7Blur').setValue(50)\nn.knob('lens7AxisPos').setValue(-1.04)\nn.knob('lens7Polygon').setValue(0)\nn.knob('lens7Diaphragm').setValue(0.536)\nn.knob('lens7DiaphRot').setValue(26)\n\nn.knob('lens8Active').setValue(True)\nn.knob('lens8Size').setValue(110)\nn.knob('lens8Col').setValue(4,0)\nn.knob('lens8Col').setValue(2.44,1)\nn.knob('lens8Col').setValue(0,2)\nn.knob('lens8Blur').setValue(4.5)\nn.knob('lens8AxisPos').setValue(0.414)\nn.knob('lens8Polygon').setValue(0)\nn.knob('lens8Diaphragm').setValue(0.754)\nn.knob('lens8DiaphRot').setValue(26)\n\nn.knob('lens9Active').setValue(True)\nn.knob('lens9Size').setValue(50)\nn.knob('lens9Col').setValue(7,0)\nn.knob('lens9Col').setValue(4.89,1)\nn.knob('lens9Col').setValue(2.45,2)\nn.knob('lens9Blur').setValue(2.8)\nn.knob('lens9AxisPos').setValue(0.19)\nn.knob('lens9Polygon').setValue(0)\nn.knob('lens9Diaphragm').setValue(0.726)\nn.knob('lens9DiaphRot').setValue(26)\n\nn.knob('lens10Active').setValue(True)\nn.knob('lens10Size').setValue(40)\nn.knob('lens10Col').setValue(-0.32,0)\nn.knob('lens10Col').setValue(10,1)\nn.knob('lens10Col').setValue(-5,2)\nn.knob('lens10Blur').setValue(12.1)\nn.knob('lens10AxisPos').setValue(0.234)\nn.knob('lens10Polygon').setValue(0)\nn.knob('lens10Diaphragm').setValue(0.836)\nn.knob('lens10DiaphRot').setValue(26)\n\nn.knob('lens11Active').setValue(True)\nn.knob('lens11Size').setValue(57)\nn.knob('lens11Col').setValue(5.3,0)\nn.knob('lens11Col').setValue(10,1)\nn.knob('lens11Col').setValue(6.13,2)\nn.knob('lens11Blur').setValue(3)\nn.knob('lens11AxisPos').setValue(0.3)\nn.knob('lens11Polygon').setValue(0)\nn.knob('lens11Diaphragm').setValue(0.732)\nn.knob('lens11DiaphRot').setValue(26)\n\nn.knob('lens12Active').setValue(True)\nn.knob('lens12Size').setValue(70)\nn.knob('lens12Col').setValue(-9,0)\nn.knob('lens12Col').setValue(16,1)\nn.knob('lens12Col').setValue(20,2)\nn.knob('lens12Blur').setValue(4.6)\nn.knob('lens12AxisPos').setValue(0.216)\nn.knob('lens12Polygon').setValue(0)\nn.knob('lens12Diaphragm').setValue(1)\nn.knob('lens12DiaphRot').setValue(26)\n\nn.knob('lens13Active').setValue(True)\nn.knob('lens13Size').setValue(120)\nn.knob('lens13Col').setValue(10,0)\nn.knob('lens13Col').setValue(8.51,1)\nn.knob('lens13Col').setValue(1.19,2)\nn.knob('lens13Blur').setValue(5.6)\nn.knob('lens13AxisPos').setValue(0.242)\nn.knob('lens13Polygon').setValue(0)\nn.knob('lens13Diaphragm').setValue(0.363)\nn.knob('lens13DiaphRot').setValue(26)\n\nn.knob('lens14Active').setValue(True)\nn.knob('lens14Size').setValue(20)\nn.knob('lens14Col').setValue(5.5,0)\nn.knob('lens14Col').setValue(3.02,1)\nn.knob('lens14Col').setValue(0,2)\nn.knob('lens14Blur').setValue(1.7)\nn.knob('lens14AxisPos').setValue(0.18)\nn.knob('lens14Polygon').setValue(0)\nn.knob('lens14Diaphragm').setValue(0.532)\nn.knob('lens14DiaphRot').setValue(26)\n\nn.knob('lens15Active').setValue(True)\nn.knob('lens15Size').setValue(500)\nn.knob('lens15Col').setValue(50,0)\nn.knob('lens15Col').setValue(21.61,1)\nn.knob('lens15Col').setValue(-7.5,2)\nn.knob('lens15Blur').setValue(500)\nn.knob('lens15AxisPos').setValue(1.2)\nn.knob('lens15Polygon').setValue(0)\nn.knob('lens15Diaphragm').setValue(1)\nn.knob('lens15DiaphRot').setValue(0)\n\nn.knob('lens16Active').setValue(True)\nn.knob('lens16Size').setValue(30)\nn.knob('lens16Col').setValue(20,0)\nn.knob('lens16Col').setValue(16.7,1)\nn.knob('lens16Col').setValue(5,2)\nn.knob('lens16Blur').setValue(5)\nn.knob('lens16AxisPos').setValue(0.7)\nn.knob('lens16Polygon').setValue(0)\nn.knob('lens16Diaphragm').setValue(0.496)\nn.knob('lens16DiaphRot').setValue(26)\n\nn.knob('lens17Active').setValue(True)\nn.knob('lens17Size').setValue(10)\nn.knob('lens17Col').setValue(5,0)\nn.knob('lens17Col').setValue(2.31,1)\nn.knob('lens17Col').setValue(0.26,2)\nn.knob('lens17Blur').setValue(3.7)\nn.knob('lens17AxisPos').setValue(0.67)\nn.knob('lens17Polygon').setValue(0)\nn.knob('lens17Diaphragm').setValue(0.468)\nn.knob('lens17DiaphRot').setValue(26)\n\nn.knob('lens18Active').setValue(True)\nn.knob('lens18Size').setValue(200)\nn.knob('lens18Col').setValue(6.4,0)\nn.knob('lens18Col').setValue(0.86,1)\nn.knob('lens18Col').setValue(-0.64,2)\nn.knob('lens18Blur').setValue(70)\nn.knob('lens18AxisPos').setValue(0.75)\nn.knob('lens18Polygon').setValue(0)\nn.knob('lens18Diaphragm').setValue(0.624)\nn.knob('lens18DiaphRot').setValue(26)\n\nn.knob('lens19Active').setValue(True)\nn.knob('lens19Size').setValue(9)\nn.knob('lens19Col').setValue(0.3,0)\nn.knob('lens19Col').setValue(0.1,1)\nn.knob('lens19Col').setValue(0.284,2)\nn.knob('lens19Blur').setValue(9.4)\nn.knob('lens19AxisPos').setValue(0.64)\nn.knob('lens19Polygon').setValue(0)\nn.knob('lens19Diaphragm').setValue(1)\nn.knob('lens19DiaphRot').setValue(0)\n\nn.knob('lens20Active').setValue(True)\nn.knob('lens20Size').setValue(500)\nn.knob('lens20Col').setValue(500,0)\nn.knob('lens20Col').setValue(100,1)\nn.knob('lens20Col').setValue(250,2)\nn.knob('lens20Blur').setValue(100)\nn.knob('lens20AxisPos').setValue(-0.1)\nn.knob('lens20Polygon').setValue(0)\nn.knob('lens20Diaphragm').setValue(1)\nn.knob('lens20DiaphRot').setValue(26)\n\n\n" +STARTLINE} addUserKnob {20 Lenses} addUserKnob {6 showNumbers l "show numbers on lenses" +STARTLINE} addUserKnob {26 ""} addUserKnob {20 Lens1GRP l "lens 01" n 1} Lens1GRP 0 addUserKnob {6 lens1Active l active +STARTLINE} lens1Active true addUserKnob {14 lens1Size l size R 0 100} lens1Size 25.2 addUserKnob {18 lens1Col l color R 0 10} lens1Col {0.97 2.927 18} addUserKnob {6 lens1Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens1Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens1Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens1Blur l blur R 0 50} addUserKnob {7 lens1AxisPos l "axis pos" R -3 3} lens1AxisPos -0.11 addUserKnob {4 lens1Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon ""}} addUserKnob {7 lens1Diaphragm l diaphragm} lens1Diaphragm 0.8 addUserKnob {7 lens1DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens1grainOpacity l "grain opacity"} lens1grainOpacity 1 addUserKnob {7 lens1grainSize l "grain size" R 0 1000} lens1grainSize 100 addUserKnob {7 lens1grainGain l "grain gain" R 0 3} lens1grainGain 1 addUserKnob {7 lens1reflectionOpacity l "refl opacity"} lens1reflectionOpacity 1 addUserKnob {7 lens1reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens1reflWhitepoint l "refl whitepoint" R 0 2} lens1reflWhitepoint 1 addUserKnob {18 lens1reflectionGamma l "refl gamma" R 0 5} lens1reflectionGamma 1 addUserKnob {6 lens1reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens1reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens1reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens1reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens2GRP l "lens 02" n 1} lens2GRP 0 addUserKnob {6 lens2Active l active +STARTLINE} lens2Active true addUserKnob {14 lens2Size l size R 0 100} lens2Size 4.8 addUserKnob {18 lens2Col l color R 0 10} lens2Col {-2.3 6.32 15.39} addUserKnob {6 lens2Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens2Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens2Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens2Blur l blur R 0 50} addUserKnob {7 lens2AxisPos l "axis pos" R -3 3} lens2AxisPos -0.082 addUserKnob {4 lens2Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon ""}} addUserKnob {7 lens2Diaphragm l diaphragm} lens2Diaphragm 1 addUserKnob {7 lens2DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens2grainOpacity l "grain opacity"} lens2grainOpacity 1 addUserKnob {7 lens2grainSize l "grain size" R 0 1000} lens2grainSize 100 addUserKnob {7 lens2grainGain l "grain gain" R 0 3} lens2grainGain 1 addUserKnob {7 lens2reflectionOpacity l "refl opacity"} lens2reflectionOpacity 1 addUserKnob {7 lens2reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens2reflWhitepoint l "refl whitepoint" R 0 2} lens2reflWhitepoint 1 addUserKnob {18 lens2reflectionGamma l "refl gamma" R 0 5} lens2reflectionGamma 1 addUserKnob {6 lens2reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens2reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens2reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens2reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens3GRP l "lens 03" n 1} lens3GRP 0 addUserKnob {6 lens3Active l active +STARTLINE} lens3Active true addUserKnob {14 lens3Size l size R 0 100} lens3Size 13.5 addUserKnob {18 lens3Col l color R 0 10} lens3Col {1.17 1.72 26} addUserKnob {6 lens3Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens3Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens3Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens3Blur l blur R 0 50} addUserKnob {7 lens3AxisPos l "axis pos" R -3 3} lens3AxisPos -0.06 addUserKnob {4 lens3Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon ""}} addUserKnob {7 lens3Diaphragm l diaphragm} lens3Diaphragm 0.8 addUserKnob {7 lens3DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens3grainOpacity l "grain opacity"} lens3grainOpacity 1 addUserKnob {7 lens3grainSize l "grain size" t "\t" R 0 1000} lens3grainSize 100 addUserKnob {7 lens3grainGain l "grain gain" R 0 3} lens3grainGain 1 addUserKnob {7 lens3reflectionOpacity l "refl opacity"} lens3reflectionOpacity 1 addUserKnob {7 lens3reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens3reflWhitepoint l "refl whitepoint" R 0 2} lens3reflWhitepoint 1 addUserKnob {18 lens3reflectionGamma l "refl gamma" R 0 5} lens3reflectionGamma 1 addUserKnob {6 lens3reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens3reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens3reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens3reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens4GRP l "lens 04" n 1} lens4GRP 0 addUserKnob {6 lens4Active l active +STARTLINE} lens4Active true addUserKnob {14 lens4Size l size R 0 100} lens4Size 2.05 addUserKnob {18 lens4Col l color R 0 10} lens4Col {6.93 32 29.82} addUserKnob {6 lens4Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens4Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens4Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens4Blur l blur R 0 50} addUserKnob {7 lens4AxisPos l "axis pos" R -3 3} lens4AxisPos 0.08 addUserKnob {4 lens4Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon ""}} addUserKnob {7 lens4Diaphragm l diaphragm} lens4Diaphragm 1 addUserKnob {7 lens4DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens4grainOpacity l "grain opacity"} lens4grainOpacity 1 addUserKnob {7 lens4grainSize l "grain size" R 0 1000} lens4grainSize 100 addUserKnob {7 lens4grainGain l "grain gain" R 0 3} lens4grainGain 1 addUserKnob {7 lens4reflectionOpacity l "refl opacity"} lens4reflectionOpacity 1 addUserKnob {7 lens4reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens4reflWhitepoint l "refl whitepoint" R 0 2} lens4reflWhitepoint 1 addUserKnob {18 lens4reflectionGamma l "refl gamma" R 0 5} lens4reflectionGamma 1 addUserKnob {6 lens4reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens4reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens4reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens4reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_3 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens5GRP l "lens 05" n 1} lens5GRP 0 addUserKnob {6 lens5Active l active +STARTLINE} lens5Active true addUserKnob {14 lens5Size l size R 0 100} lens5Size 200 addUserKnob {18 lens5Col l color R 0 10} lens5Col {1.09 1.14 8} addUserKnob {6 lens5Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens5Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens5Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens5Blur l blur R 0 50} addUserKnob {7 lens5AxisPos l "axis pos" R -3 3} lens5AxisPos 0.27 addUserKnob {4 lens5Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon ""}} addUserKnob {7 lens5Diaphragm l diaphragm} lens5Diaphragm 1 addUserKnob {7 lens5DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens5grainOpacity l "grain opacity"} lens5grainOpacity 1 addUserKnob {7 lens5grainSize l "grain size" R 0 1000} lens5grainSize 100 addUserKnob {7 lens5grainGain l "grain gain" R 0 3} lens5grainGain 1 addUserKnob {7 lens5reflectionOpacity l "refl opacity"} lens5reflectionOpacity 1 addUserKnob {7 lens5reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens5reflWhitepoint l "refl whitepoint" R 0 2} lens5reflWhitepoint 1 addUserKnob {18 lens5reflectionGamma l "refl gamma" R 0 5} lens5reflectionGamma 1 addUserKnob {6 lens5reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens5reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens5reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens5reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_4 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens6GRP l "lens 06" n 1} lens6GRP 0 addUserKnob {6 lens6Active l active +STARTLINE} lens6Active true addUserKnob {14 lens6Size l size R 0 100} lens6Size 1000 addUserKnob {18 lens6Col l color R 0 10} lens6Col {50 6.38 0} addUserKnob {6 lens6Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens6Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens6Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens6Blur l blur R 0 50} addUserKnob {7 lens6AxisPos l "axis pos" R -3 3} lens6AxisPos -1.08 addUserKnob {4 lens6Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon ""}} addUserKnob {7 lens6Diaphragm l diaphragm} lens6Diaphragm 1 addUserKnob {7 lens6DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens6grainOpacity l "grain opacity"} lens6grainOpacity 1 addUserKnob {7 lens6grainSize l "grain size" R 0 1000} lens6grainSize 100 addUserKnob {7 lens6grainGain l "grain gain" R 0 3} lens6grainGain 1 addUserKnob {7 lens6reflectionOpacity l "refl opacity"} lens6reflectionOpacity 1 addUserKnob {7 lens6reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens6reflWhitepoint l "refl whitepoint" R 0 2} lens6reflWhitepoint 1 addUserKnob {18 lens6reflectionGamma l "refl gamma" R 0 5} lens6reflectionGamma 1 addUserKnob {6 lens6reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens6reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens6reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens6reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_5 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens7GRP l "lens 07" n 1} lens7GRP 0 addUserKnob {6 lens7Active l active +STARTLINE} lens7Active true addUserKnob {14 lens7Size l size R 0 100} lens7Size 460 addUserKnob {18 lens7Col l color R 0 10} lens7Col {0 3.959999084 80} addUserKnob {6 lens7Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens7Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens7Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {16 lens7Blur l blur} addUserKnob {7 lens7AxisPos l "axis pos" R -3 3} lens7AxisPos -0.88 addUserKnob {4 lens7Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon ""}} addUserKnob {7 lens7Diaphragm l diaphragm} lens7Diaphragm 1 addUserKnob {7 lens7DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens7grainOpacity l "grain opacity"} lens7grainOpacity 1 addUserKnob {7 lens7grainSize l "grain size" R 0 1000} lens7grainSize 100 addUserKnob {7 lens7grainGain l "grain gain" R 0 3} lens7grainGain 1 addUserKnob {7 lens7reflectionOpacity l "refl opacity"} lens7reflectionOpacity 1 addUserKnob {7 lens7reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens7reflWhitepoint l "refl whitepoint" R 0 2} lens7reflWhitepoint 1 addUserKnob {18 lens7reflectionGamma l "refl gamma" R 0 5} lens7reflectionGamma 1 addUserKnob {6 lens7reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens7reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens7reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens7reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_6 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens8GRP l "lens 08" n 1} lens8GRP 0 addUserKnob {6 lens8Active l active +STARTLINE} lens8Active true addUserKnob {14 lens8Size l size R 0 100} lens8Size 450 addUserKnob {18 lens8Col l color R 0 10} lens8Col {12 2.25 10.04} addUserKnob {6 lens8Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens8Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens8Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens8Blur l blur R 0 10} lens8Blur 9.9 addUserKnob {7 lens8AxisPos l "axis pos" R -3 3} lens8AxisPos -0.69 addUserKnob {4 lens8Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon ""}} addUserKnob {7 lens8Diaphragm l diaphragm} lens8Diaphragm 1 addUserKnob {7 lens8DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens8grainOpacity l "grain opacity"} lens8grainOpacity 1 addUserKnob {7 lens8grainSize l "grain size" R 0 1000} lens8grainSize 100 addUserKnob {7 lens8grainGain l "grain gain" R 0 3} lens8grainGain 1 addUserKnob {7 lens8reflectionOpacity l "refl opacity"} lens8reflectionOpacity 1 addUserKnob {7 lens8reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens8reflWhitepoint l "refl whitepoint" R 0 2} lens8reflWhitepoint 1 addUserKnob {18 lens8reflectionGamma l "refl gamma" R 0 5} lens8reflectionGamma 1 addUserKnob {6 lens8reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens8reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens8reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens8reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_7 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens9GRP l "lens 09" n 1} lens9GRP 0 addUserKnob {6 lens9Active l active +STARTLINE} lens9Active true addUserKnob {14 lens9Size l size R 0 100} lens9Size 50.4 addUserKnob {18 lens9Col l color R 0 10} lens9Col {0.9 1.012 3} addUserKnob {6 lens9Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens9Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens9Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens9Blur l blur R 0 50} lens9Blur 2.8 addUserKnob {7 lens9AxisPos l "axis pos" R -3 3} lens9AxisPos 0.34 addUserKnob {4 lens9Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon ""}} addUserKnob {7 lens9Diaphragm l diaphragm} lens9Diaphragm 1 addUserKnob {7 lens9DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens9grainOpacity l "grain opacity"} lens9grainOpacity 1 addUserKnob {7 lens9grainSize l "grain size" R 0 1000} lens9grainSize 100 addUserKnob {7 lens9grainGain l "grain gain" R 0 3} lens9grainGain 1 addUserKnob {7 lens9reflectionOpacity l "refl opacity"} lens9reflectionOpacity 1 addUserKnob {7 lens9reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens9reflWhitepoint l "refl whitepoint" R 0 2} lens9reflWhitepoint 1 addUserKnob {18 lens9reflectionGamma l "refl gamma" R 0 5} lens9reflectionGamma 1 addUserKnob {6 lens9reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens9reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens9reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens9reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_8 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens10GRP l "lens 10" n 1} lens10GRP 0 addUserKnob {6 lens10Active l active +STARTLINE} lens10Active true addUserKnob {14 lens10Size l size R 0 100} lens10Size 85.6 addUserKnob {18 lens10Col l color R 0 10} lens10Col {2.79 1.537 -2.6} addUserKnob {6 lens10Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens10Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens10Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens10Blur l blur R 0 50} lens10Blur 4.6 addUserKnob {7 lens10AxisPos l "axis pos" R -3 3} lens10AxisPos 0.37 addUserKnob {4 lens10Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon ""}} addUserKnob {7 lens10Diaphragm l diaphragm} lens10Diaphragm 1 addUserKnob {7 lens10DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens10grainOpacity l "grain opacity"} lens10grainOpacity 1 addUserKnob {7 lens10grainSize l "grain size" R 0 1000} lens10grainSize 100 addUserKnob {7 lens10grainGain l "grain gain" R 0 3} lens10grainGain 1 addUserKnob {7 lens10reflectionOpacity l "refl opacity"} lens10reflectionOpacity 1 addUserKnob {7 lens10reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens10reflWhitepoint l "refl whitepoint" R 0 2} lens10reflWhitepoint 1 addUserKnob {18 lens10reflectionGamma l "refl gamma" R 0 5} lens10reflectionGamma 1 addUserKnob {6 lens10reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens10reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens10reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens10reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_9 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens11GRP l "lens 11" n 1} lens11GRP 0 addUserKnob {6 lens11Active l active +STARTLINE} lens11Active true addUserKnob {14 lens11Size l size R 0 100} lens11Size 83.5 addUserKnob {18 lens11Col l color R 0 10} lens11Col {0 4.86 30} addUserKnob {6 lens11Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens11Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens11Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens11Blur l blur R 0 50} addUserKnob {7 lens11AxisPos l "axis pos" R -3 3} lens11AxisPos 0.15 addUserKnob {4 lens11Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon ""}} addUserKnob {7 lens11Diaphragm l diaphragm} lens11Diaphragm 1 addUserKnob {7 lens11DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens11grainOpacity l "grain opacity"} lens11grainOpacity 1 addUserKnob {7 lens11grainSize l "grain size" R 0 1000} lens11grainSize 100 addUserKnob {7 lens11grainGain l "grain gain" R 0 3} lens11grainGain 1 addUserKnob {7 lens11reflectionOpacity l "refl opacity"} lens11reflectionOpacity 1 addUserKnob {7 lens11reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens11reflWhitepoint l "refl whitepoint" R 0 2} lens11reflWhitepoint 1 addUserKnob {18 lens11reflectionGamma l "refl gamma" R 0 5} lens11reflectionGamma 1 addUserKnob {6 lens11reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens11reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens11reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens11reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_10 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens12GRP l "lens 12" n 1} lens12GRP 0 addUserKnob {6 lens12Active l active +STARTLINE} lens12Active true addUserKnob {14 lens12Size l size R 0 100} lens12Size 40 addUserKnob {18 lens12Col l color R 0 10} lens12Col {10 3.9 7.98} addUserKnob {6 lens12Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens12Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens12Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens12Blur l blur R 0 10} lens12Blur 4.6 addUserKnob {7 lens12AxisPos l "axis pos" R -3 3} lens12AxisPos 0.44 addUserKnob {4 lens12Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon "" ""}} addUserKnob {7 lens12Diaphragm l diaphragm} lens12Diaphragm 1 addUserKnob {7 lens12DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens12grainOpacity l "grain opacity"} lens12grainOpacity 1 addUserKnob {7 lens12grainSize l "grain size" R 0 1000} lens12grainSize 100 addUserKnob {7 lens12grainGain l "grain gain" R 0 3} lens12grainGain 1 addUserKnob {7 lens12reflectionOpacity l "refl opacity"} lens12reflectionOpacity 1 addUserKnob {7 lens12reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens12reflWhitepoint l "refl whitepoint" R 0 2} lens12reflWhitepoint 1 addUserKnob {18 lens12reflectionGamma l "refl gamma" R 0 5} lens12reflectionGamma 1 addUserKnob {6 lens12reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens12reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens12reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens12reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_11 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 len13GRP l "lens 13" n 1} len13GRP 0 addUserKnob {6 lens13Active l active +STARTLINE} lens13Active true addUserKnob {14 lens13Size l size R 0 100} lens13Size 1.4 addUserKnob {18 lens13Col l color R 0 10} lens13Col {3.29 1.28 2.6} addUserKnob {6 lens13Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens13Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens13Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens13Blur l blur R 0 50} lens13Blur 5.6 addUserKnob {7 lens13AxisPos l "axis pos" R -3 3} lens13AxisPos 0.45 addUserKnob {4 lens13Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon}} addUserKnob {7 lens13Diaphragm l diaphragm} lens13Diaphragm 1 addUserKnob {7 lens13DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens13grainOpacity l "grain opacity"} lens13grainOpacity 1 addUserKnob {7 lens13grainSize l "grain size" R 0 1000} lens13grainSize 100 addUserKnob {7 lens13grainGain l "grain gain" R 0 3} lens13grainGain 1 addUserKnob {7 lens13reflectionOpacity l "refl opacity"} lens13reflectionOpacity 1 addUserKnob {7 lens13reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens13reflWhitepoint l "refl whitepoint" R 0 2} lens13reflWhitepoint 1 addUserKnob {18 lens13reflectionGamma l "refl gamma" R 0 5} lens13reflectionGamma 1 addUserKnob {6 lens13reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens13reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens13reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens13reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_12 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens14GRP l "lens 14" n 1} lens14GRP 0 addUserKnob {6 lens14Active l active +STARTLINE} lens14Active true addUserKnob {14 lens14Size l size R 0 100} lens14Size 1 addUserKnob {18 lens14Col l color R 0 10} lens14Col {1.64 0.74 1.3} addUserKnob {6 lens14Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens14Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens14Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens14Blur l blur R 0 50} lens14Blur 2 addUserKnob {7 lens14AxisPos l "axis pos" R -3 3} lens14AxisPos 0.458 addUserKnob {4 lens14Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon ""}} addUserKnob {7 lens14Diaphragm l diaphragm} lens14Diaphragm 1 addUserKnob {7 lens14DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens14grainOpacity l "grain opacity"} lens14grainOpacity 1 addUserKnob {7 lens14grainSize l "grain size" R 0 1000} lens14grainSize 100 addUserKnob {7 lens14grainGain l "grain gain" R 0 3} lens14grainGain 1 addUserKnob {7 lens14reflectionOpacity l "refl opacity"} lens14reflectionOpacity 1 addUserKnob {7 lens14reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens14reflWhitepoint l "refl whitepoint" R 0 2} lens14reflWhitepoint 1 addUserKnob {18 lens14reflectionGamma l "refl gamma" R 0 5} lens14reflectionGamma 1 addUserKnob {6 lens14reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens14reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens14reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens14reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_13 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens15GRP l "lens 15" n 1} lens15GRP 0 addUserKnob {6 lens15Active l active +STARTLINE} lens15Active true addUserKnob {14 lens15Size l size R 0 100} lens15Size 1050 addUserKnob {18 lens15Col l color R 0 10} lens15Col {80 24 49.19} addUserKnob {6 lens15Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens15Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens15Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens15Blur l blur R 0 50} addUserKnob {7 lens15AxisPos l "axis pos" R -3 3} lens15AxisPos 0.8 addUserKnob {4 lens15Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon ""}} addUserKnob {7 lens15Diaphragm l diaphragm} lens15Diaphragm 1 addUserKnob {7 lens15DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens15grainOpacity l "grain opacity"} lens15grainOpacity 1 addUserKnob {7 lens15grainSize l "grain size" R 0 1000} lens15grainSize 100 addUserKnob {7 lens15grainGain l "grain gain" R 0 3} lens15grainGain 1 addUserKnob {7 lens15reflectionOpacity l "refl opacity"} lens15reflectionOpacity 1 addUserKnob {7 lens15reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens15reflWhitepoint l "refl whitepoint" R 0 2} lens15reflWhitepoint 1 addUserKnob {18 lens15reflectionGamma l "refl gamma" R 0 5} lens15reflectionGamma 1 addUserKnob {6 lens15reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens15reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens15reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens15reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_14 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens16GRP l "lens 16" n 1} lens16GRP 0 addUserKnob {6 lens16Active l active +STARTLINE} lens16Active true addUserKnob {14 lens16Size l size R 0 100} lens16Size 600 addUserKnob {18 lens16Col l color R 0 10} lens16Col {30 7.29 12.7} addUserKnob {6 lens16Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens16Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens16Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens16Blur l blur R 0 50} addUserKnob {7 lens16AxisPos l "axis pos" R -3 3} lens16AxisPos -0.42 addUserKnob {4 lens16Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon ""}} addUserKnob {7 lens16Diaphragm l diaphragm} lens16Diaphragm 1 addUserKnob {7 lens16DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens16grainOpacity l "grain opacity"} lens16grainOpacity 1 addUserKnob {7 lens16grainSize l "grain size" R 0 1000} lens16grainSize 100 addUserKnob {7 lens16grainGain l "grain gain" R 0 3} lens16grainGain 1 addUserKnob {7 lens16reflectionOpacity l "refl opacity"} lens16reflectionOpacity 1 addUserKnob {7 lens16reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens16reflWhitepoint l "refl whitepoint" R 0 2} lens16reflWhitepoint 1 addUserKnob {18 lens16reflectionGamma l "refl gamma" R 0 5} lens16reflectionGamma 1 addUserKnob {6 lens16reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens16reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens16reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens16reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_15 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens17GRP l "lens 17" n 1} lens17GRP 0 addUserKnob {6 lens17Active l active +STARTLINE} lens17Active true addUserKnob {14 lens17Size l size R 0 100} lens17Size 600 addUserKnob {18 lens17Col l color R 0 10} lens17Col {25 7.5 8.08} addUserKnob {6 lens17Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens17Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens17Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens17Blur l blur R 0 50} lens17Blur 50 addUserKnob {7 lens17AxisPos l "axis pos" R -3 3} lens17AxisPos 0.7 addUserKnob {4 lens17Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon ""}} addUserKnob {7 lens17Diaphragm l diaphragm} lens17Diaphragm 1 addUserKnob {7 lens17DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens17grainOpacity l "grain opacity"} lens17grainOpacity 1 addUserKnob {7 lens17grainSize l "grain size" R 0 1000} lens17grainSize 100 addUserKnob {7 lens17grainGain l "grain gain" R 0 3} lens17grainGain 1 addUserKnob {7 lens17reflectionOpacity l "refl opacity"} lens17reflectionOpacity 1 addUserKnob {7 lens17reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens17reflWhitepoint l "refl whitepoint" R 0 2} lens17reflWhitepoint 1 addUserKnob {18 lens17reflectionGamma l "refl gamma" R 0 5} lens17reflectionGamma 1 addUserKnob {6 lens17reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens17reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens17reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens17reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_16 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens18GRP l "lens 18" n 1} lens18GRP 0 addUserKnob {6 lens18Active l active +STARTLINE} lens18Active true addUserKnob {14 lens18Size l size R 0 100} lens18Size 270 addUserKnob {18 lens18Col l color R 0 10} lens18Col {6.4 3.69 0.73} addUserKnob {6 lens18Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens18Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens18Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens18Blur l blur R 0 50} addUserKnob {7 lens18AxisPos l "axis pos" R -3 3} lens18AxisPos -0.36 addUserKnob {4 lens18Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon ""}} addUserKnob {7 lens18Diaphragm l diaphragm} lens18Diaphragm 1 addUserKnob {7 lens18DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens18grainOpacity l "grain opacity"} lens18grainOpacity 1 addUserKnob {7 lens18grainSize l "grain size" R 0 1000} lens18grainSize 100 addUserKnob {7 lens18grainGain l "grain gain" R 0 3} lens18grainGain 1 addUserKnob {7 lens18reflectionOpacity l "refl opacity"} lens18reflectionOpacity 1 addUserKnob {7 lens18reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens18reflWhitepoint l "refl whitepoint" R 0 2} lens18reflWhitepoint 1 addUserKnob {18 lens18reflectionGamma l "refl gamma" R 0 5} lens18reflectionGamma 1 addUserKnob {6 lens18reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens18reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens18reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens18reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_17 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens19GRP l "lens 19" n 1} lens19GRP 0 addUserKnob {6 lens19Active l active +STARTLINE} lens19Active true addUserKnob {14 lens19Size l size R 0 100} lens19Size 99 addUserKnob {18 lens19Col l color R 0 10} lens19Col {5.249 7.51 40} addUserKnob {6 lens19Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens19Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens19Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens19Blur l blur R 0 50} lens19Blur 20 addUserKnob {7 lens19AxisPos l "axis pos" R -3 3} lens19AxisPos -0.16 addUserKnob {4 lens19Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon ""}} addUserKnob {7 lens19Diaphragm l diaphragm} lens19Diaphragm 1 addUserKnob {7 lens19DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens19grainOpacity l "grain opacity"} lens19grainOpacity 1 addUserKnob {7 lens19grainSize l "grain size" R 0 1000} lens19grainSize 100 addUserKnob {7 lens19grainGain l "grain gain" R 0 3} lens19grainGain 1 addUserKnob {7 lens19reflectionOpacity l "refl opacity"} lens19reflectionOpacity 1 addUserKnob {7 lens19reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens19reflWhitepoint l "refl whitepoint" R 0 2} lens19reflWhitepoint 1 addUserKnob {18 lens19reflectionGamma l "refl gamma" R 0 5} lens19reflectionGamma 1 addUserKnob {6 lens19reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens19reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens19reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens19reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_18 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 lens20GRP l "lens 20" n 1} lens20GRP 0 addUserKnob {6 lens20Active l active +STARTLINE} lens20Active true addUserKnob {14 lens20Size l size R 0 100} lens20Size 9.4 addUserKnob {18 lens20Col l color R 0 10} lens20Col {0.03 0.006 0.015} addUserKnob {6 lens20Col_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens20Col_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens20Col_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens20Blur l blur R 0 50} lens20Blur 4 addUserKnob {7 lens20AxisPos l "axis pos" R -3 3} lens20AxisPos 0.5 addUserKnob {4 lens20Polygon l polygon M {Pentagon Hexagon Heptagon Octogon Nonagon Decagon Undecagon Dodecagon ""}} addUserKnob {7 lens20Diaphragm l diaphragm} lens20Diaphragm 1 addUserKnob {7 lens20DiaphRot l "diaph rotation" R -180 180} addUserKnob {7 lens20grainOpacity l "grain opacity"} lens20grainOpacity 1 addUserKnob {7 lens20grainSize l "grain size" R 0 1000} lens20grainSize 100 addUserKnob {7 lens20grainGain l "grain gain" R 0 3} lens20grainGain 1 addUserKnob {7 lens20reflectionOpacity l "refl opacity"} lens20reflectionOpacity 1 addUserKnob {7 lens20reflectionRotation l "refl rotation" R 0 360} addUserKnob {7 lens20reflWhitepoint l "refl whitepoint" R 0 2} lens20reflWhitepoint 1 addUserKnob {18 lens20reflectionGamma l "refl gamma" R 0 5} lens20reflectionGamma 1 addUserKnob {6 lens20reflectionGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens20reflectionGamma_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lens20reflectionGamma_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lens20reflectionBlur l "refl blur" R 0 50} addUserKnob {20 endGroup_19 l endGroup n -1} } set N49978760 [stack 0] Dot { name Dot21 xpos 274 ypos 566 } SphericalTransform { fix true name _SphericalTransformLensALL xpos 240 ypos 960 } Reformat { format "256 256 0 0 256 256 1 square_256" resize distort name _ReformatReflectionLensALL xpos 240 ypos 1002 } Shuffle { alpha white name _ShuffleCleanALensALL xpos 240 ypos 1044 } Dot { name Dot26 xpos 274 ypos 1128 } set N474c77c0 [stack 0] Dot { name Dot22 xpos 274 ypos 1560 } set N3f716ff0 [stack 0] Dot { name Dot23 xpos 274 ypos 1992 } set N4a48a940 [stack 0] Dot { name Dot24 xpos 274 ypos 2428 } set N47423090 [stack 0] Dot { name Dot27 xpos 274 ypos 2889 } set N3f719100 [stack 0] Dot { name Dot28 xpos 274 ypos 3335 } set N4a6543b0 [stack 0] Dot { name Dot30 xpos 274 ypos 3791 } set N4a469eb0 [stack 0] Dot { name Dot31 xpos 274 ypos 4338 } set N676f4660 [stack 0] Dot { name Dot32 xpos 274 ypos 4811 } set N4a6df9c0 [stack 0] Dot { name Dot33 xpos 274 ypos 5253 } set N4a6925e0 [stack 0] Dot { name Dot29 xpos 274 ypos 5734 } set N6662b930 [stack 0] Dot { name Dot34 xpos 274 ypos 6211 } set N67043a20 [stack 0] Dot { name Dot35 xpos 274 ypos 6685 } set N6d8e0a10 [stack 0] Dot { name Dot36 xpos 274 ypos 7163 } set N4a2dc600 [stack 0] Dot { name Dot37 xpos 274 ypos 7632 } set N474278a0 [stack 0] Dot { name Dot38 xpos 274 ypos 8100 } set N4a542850 [stack 0] Dot { name Dot39 xpos 273 ypos 8578 } set N4a541e20 [stack 0] Dot { name Dot40 xpos 273 ypos 9052 } set N4a58cd50 [stack 0] Dot { name Dot41 xpos 273 ypos 9548 } set N66a55920 [stack 0] Dot { name Dot25 xpos 273 ypos 10031 } Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens20 xpos 402 ypos 10026 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens20 xpos 402 ypos 10054 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens20 xpos 402 ypos 10082 } Read { inputs 0 file_type png file <<>>/images/dodecagon.png format "512 512 0 0 512 512 1 square_512" origset true name Read19 xpos 1735 ypos 632 } Shuffle { green red blue red alpha red name Shuffle1 note_font_color 0xffffffff xpos 1735 ypos 712 } set N4a2244b0 [stack 0] Read { inputs 0 file_type png file <<>>/images/undecagon.png format "512 512 0 0 512 512 1 square_512" origset true name Read26 xpos 1649 ypos 632 } Shuffle { green red blue red alpha red name Shuffle2 note_font_color 0xffffffff xpos 1649 ypos 712 } set N4a638510 [stack 0] Read { inputs 0 file_type png file <<>>/images/decagon.png format "512 512 0 0 512 512 1 square_512" origset true name Read3 xpos 1562 ypos 633 } Shuffle { green red blue red alpha red name Shuffle3 note_font_color 0xffffffff xpos 1562 ypos 713 } set N6703bbe0 [stack 0] Read { inputs 0 file_type png file <<>>/images/nonagon.png format "512 512 0 0 512 512 1 square_512" origset true name Read22 xpos 1475 ypos 632 } Shuffle { green red blue red alpha red name Shuffle4 note_font_color 0xffffffff xpos 1475 ypos 712 } set N4993c8b0 [stack 0] Read { inputs 0 file_type png file <<>>/images/octogon.png format "512 512 0 0 512 512 1 square_512" origset true name Read23 xpos 1388 ypos 632 } Shuffle { green red blue red alpha red name Shuffle5 note_font_color 0xffffffff xpos 1388 ypos 712 } set N4a1d10d0 [stack 0] Read { inputs 0 file_type png file <<>>/images/heptagon.png format "512 512 0 0 512 512 1 square_512" origset true name Read20 xpos 1301 ypos 632 } Shuffle { green red blue red alpha red name Shuffle8 note_font_color 0xffffffff xpos 1301 ypos 712 } set N4a055400 [stack 0] Read { inputs 0 file_type png file <<>>/images/hexagon.png format "512 512 0 0 512 512 1 square_512" origset true name Read21 xpos 1214 ypos 633 } Shuffle { green red blue red alpha red name Shuffle6 note_font_color 0xffffffff xpos 1214 ypos 713 } set N4a07d0f0 [stack 0] Read { inputs 0 file_type png file <<>>/images/pentagon.png format "512 512 0 0 512 512 1 square_512" origset true name Read24 xpos 1128 ypos 633 } Shuffle { green red blue red alpha red name Shuffle7 note_font_color 0xffffffff xpos 1128 ypos 713 } set N49b24150 [stack 0] Switch { inputs 8 which {{_INPUT_CTRL.lens20Polygon i}} name _switchPolygon20 xpos 684 ypos 9983 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens20DiaphRot i}} scale {{_INPUT_CTRL.lens20Diaphragm*0.65 i}} center {256 256} name _transformPolygon20 xpos 684 ypos 10012 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult}} gamma 1 center {640 360} name _NoiseLens20 xpos 684 ypos 10040 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens20 xpos 684 ypos 10082 } Read { inputs 0 file_type png file <<>>/images/twoCircle2.png format "256 256 0 0 256 256 1 square_256" origset true name Read12 xpos 893 ypos 3398 } set N49bb6c00 [stack 0] Dot { name Dot8 xpos 927 ypos 6783 } set N49b4e340 [stack 0] Dot { name Dot13 xpos 927 ypos 8198 } set N477b0ad0 [stack 0] Dot { name Dot16 xpos 927 ypos 10129 } Merge2 { inputs 2 operation multiply name _multPolygon20 xpos 684 ypos 10124 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask20 xpos 684 ypos 10153 } Bezier { replace true points {{ {87.8 180.4} {107.6 179.9} {108.6 87.6} {87.4 86.8} {87.4 155.4} {73.1 143.4} {60.9 158.9} }} shape {} center {128 128} color 10 name _number30 xpos 574 ypos 10160 disable {{1-_INPUT_CTRL.showNumbers i}} } Bezier { points {{ {123 89.3} {123 102.5} {161.3 104 7.1 0.64 14.9} {169.1 124.7} {127.3 123.1 15.2 2.59 16.7} {114.3 159.5 19.5 1.33 18.5} {170.4 176.6 19.5 -0.72 18.8} {183.7 141.3} {169.5 138} {157 167.5 16.1 2.79 15.4} {127.3 155.2 3.5 4.4 9.3} {135.5 135.8 11.8 5.78 11} {183.7 141.3} {172.6 95.5 17.6 4.01 19.1} }} shape {} center {128 128} color 10 name _number31 xpos 574 ypos 10189 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens20Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i} {(_INPUT_CTRL.lens20Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i}} name _bokehSize20 xpos 574 ypos 10218 } push $N49978760 Dot { name Dot1 xpos 72 ypos 528 } Multiply { value 0 name _mkBlack xpos 38 ypos 701 } set N49dbb260 [stack 0] Dot { name Dot12 xpos -149 ypos 713 } set N49b99050 [stack 0] Dot { name Dot11 xpos -259 ypos 713 } Add { value 1 name _mkWhite xpos -293 ypos 772 } Clamp { name _vignetteClamp xpos -293 ypos 815 } Crop { box {{_INPUT_CTRL.width-((_INPUT_CTRL.width/2)+((_INPUT_CTRL.vignetteScale/2+0.5))*(_INPUT_CTRL.width/2)) i} {_INPUT_CTRL.height-((_INPUT_CTRL.width/2)+((_INPUT_CTRL.vignetteScale/2+0.5))*(_INPUT_CTRL.width/2)-(_INPUT_CTRL.width-_INPUT_CTRL.height)) i} {(_INPUT_CTRL.width/2)+((_INPUT_CTRL.vignetteScale/2+0.5))*(_INPUT_CTRL.width/2) i} {(_INPUT_CTRL.width/2)+((_INPUT_CTRL.vignetteScale/2+0.5))*(_INPUT_CTRL.width/2)-(_INPUT_CTRL.width-_INPUT_CTRL.height) i}} name _cropVignette xpos -293 ypos 858 } push $N49b99050 Add { value {{1-_INPUT_CTRL.vignetteDarkness i}} name _vignetteDarkness xpos -183 ypos 772 } Merge2 { inputs 2 name _compVignette xpos -183 ypos 858 } Blur { size {{_cropVignette.box.x*0.8 i}} name Blur2 xpos -183 ypos 887 } push $N49978760 Clamp { name _clampCol xpos 310 ypos 516 } Saturation { saturation {{_INPUT_CTRL.sourceSat i}} name _sourceSaturation xpos 310 ypos 617 } push $N49978760 Expression { temp_name0 X temp_expr0 (_INPUT_CTRL.brightspot/pow((_INPUT_CTRL.brightspot-_INPUT_CTRL.threshold),_INPUT_CTRL.gamma))*pow(((0.2126*r+0.7152*g+0.0722*b)-_INPUT_CTRL.threshold),(_INPUT_CTRL.gamma+0.000000001)) expr0 X expr1 X expr2 X expr3 X name _curvOp xpos 153 ypos 610 } Clamp { minimum_enable false maximum {{_INPUT_CTRL.brightspot i}} MinClampTo_enable true MaxClampTo {{_INPUT_CTRL.brightspot i}} MaxClampTo_enable true name _resultClamp xpos 153 ypos 639 disable {{1-(_INPUT_CTRL.clampBright) i}} } Merge2 { inputs 2 operation multiply mix {{_INPUT_CTRL.sourceCol i}} name _multCol xpos 310 ypos 646 } NoOp { name _GAMMA_RESULT xpos 310 ypos 674 } set N499e6c00 [stack 0] Merge2 { inputs 2 operation multiply name _multVignette xpos 310 ypos 894 disable {{1-_INPUT_CTRL.vignetteActive i}} } set N67220f40 [stack 0] NoOp { name _inputToBokeh20 xpos 473 ypos 10218 } Transform { scale {{_INPUT_CTRL.lens20AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource20 xpos 473 ypos 10247 } Convolve { inputs 2 channels rgb name _convolveLens20 xpos 574 ypos 10247 } Multiply { value {{_INPUT_CTRL.lens20Col.r i} {_INPUT_CTRL.lens20Col.g i} {_INPUT_CTRL.lens20Col.b i} 0} name _colorLens20 xpos 574 ypos 10276 } Blur { size {{_INPUT_CTRL.lens20Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens20 xpos 574 ypos 10319 } push $N66a55920 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens19 xpos 401 ypos 9543 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens19 xpos 401 ypos 9571 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens19 xpos 401 ypos 9599 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens19Polygon i}} name _switchPolygon19 xpos 683 ypos 9500 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens19DiaphRot i}} scale {{_INPUT_CTRL.lens19Diaphragm*0.65 i}} center {256 256} name _transformPolygon19 xpos 683 ypos 9529 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult}} gamma 1 center {640 360} name _NoiseLens19 xpos 683 ypos 9557 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens19 xpos 683 ypos 9599 } Read { inputs 0 file_type png file <<>>/images/circleNoise1.png format "256 256 0 0 256 256 1 square_256" origset true name Read7 xpos 1110 ypos 2055 } set N4996bc50 [stack 0] Dot { name Dot5 xpos 1144 ypos 5351 } set N4995abf0 [stack 0] Dot { name Dot15 xpos 1143 ypos 9646 } Merge2 { inputs 2 operation multiply name _multPolygon19 xpos 683 ypos 9641 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask19 xpos 683 ypos 9670 } Bezier { replace true points {{ {87.8 180.4} {107.6 179.9} {108.6 87.6} {87.4 86.8} {87.4 155.4} {73.1 143.4} {60.9 158.9} }} shape {} center {128 128} color 10 name _number28 xpos 573 ypos 9677 disable {{1-_INPUT_CTRL.showNumbers i}} } Bezier { points {{ {123 89.3} {123 102.5} {161.3 104 7.1 0.64 14.9} {169.1 124.7} {127.3 123.1 15.2 2.59 16.7} {114.3 159.5 19.5 1.33 18.5} {170.4 176.6 19.5 -0.72 18.8} {183.7 141.3} {169.5 138} {157 167.5 16.1 2.79 15.4} {127.3 155.2 3.5 4.4 9.3} {135.5 135.8 11.8 5.78 11} {183.7 141.3} {172.6 95.5 17.6 4.01 19.1} }} shape {} center {128 128} color 10 name _number29 xpos 573 ypos 9706 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens19Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i} {(_INPUT_CTRL.lens19Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i}} name _bokehSize19 xpos 573 ypos 9735 } push $N67220f40 NoOp { name _inputToBokeh19 xpos 472 ypos 9735 } Transform { scale {{_INPUT_CTRL.lens19AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource19 xpos 472 ypos 9764 } Convolve { inputs 2 channels rgb name _convolveLens19 xpos 573 ypos 9764 } Multiply { value {{_INPUT_CTRL.lens19Col.r i} {_INPUT_CTRL.lens19Col.g i} {_INPUT_CTRL.lens19Col.b i} 0} name _colorLens19 xpos 573 ypos 9793 } Blur { size {{_INPUT_CTRL.lens19Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens19 xpos 573 ypos 9836 } push $N4a58cd50 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens18 xpos 401 ypos 9047 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens18 xpos 401 ypos 9075 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens18 xpos 401 ypos 9103 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens18Polygon i}} name _switchPolygon18 xpos 683 ypos 9004 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens18DiaphRot i}} scale {{_INPUT_CTRL.lens18Diaphragm*0.65 i}} center {256 256} name _transformPolygon18 xpos 683 ypos 9033 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult}} gamma 1 center {640 360} name _NoiseLens18 xpos 683 ypos 9061 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens18 xpos 683 ypos 9103 } Read { inputs 0 file_type png file <<>>/images/circleHard1.png format "256 256 0 0 256 256 1 square_256" origset true name Read14 xpos 817 ypos 3854 } set N4a1f2640 [stack 0] Dot { name Dot9 xpos 851 ypos 7261 } set N67230a50 [stack 0] Dot { name Dot10 xpos 851 ypos 7730 } set N4a1df840 [stack 0] Dot { name Dot2 xpos 850 ypos 9150 } Merge2 { inputs 2 operation multiply name _multPolygon18 xpos 683 ypos 9145 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask18 xpos 683 ypos 9174 } Bezier { replace true points {{ {87.8 180.4} {107.6 179.9} {108.6 87.6} {87.4 86.8} {87.4 155.4} {73.1 143.4} {60.9 158.9} }} shape {} center {128 128} color 10 name _number26 xpos 573 ypos 9181 disable {{1-_INPUT_CTRL.showNumbers i}} } Bezier { points {{ {159.8 178.7 1.4 -1.72 4.3 1.7 0 0 0 0 0 1.7} {159.4 167.3 4.7 -3.07 2.5 1.44 0 0 0 0 0 1.44} {144.1 152.3 8.9 -1.57 13.4} {157.2 136 6.1 0.68 2.9 -1.3 0 0 0 0 0 -1.3} {173.6 153.5 11.3 -4.79 14} {159.6 167.6 2.1 1.59 4.4 1.47 0 0 0 0 0 1.47} {159.8 178.7 8.6 -0.04 3.9 1.55 0 0 0 0 0 1.55} {185.7 152.5 18.1 -1.56 22.7} {156.8 123.6 3.2 2.78 1} {133.4 150.5 27.6 1.55 16.4} }} shape {} center {128 128} color 10 name _number8 xpos 573 ypos 9210 disable {{1-_INPUT_CTRL.showNumbers i}} } Bezier { points {{ {161.2 78.4 1.3 1.48 4.3 1.7 0 0 0 0 0 1.7} {160.7 90.8 4.7 0.13 2.5 1.44 0 0 0 0 0 1.44} {177.5 108.8 8.8 1.63 13.3} {160.9 125.2 6 3.88 2.9 -1.3 0 0 0 0 0 -1.3} {144.7 105.3 11.2 -1.59 13.9} {160.5 90.5 2.1 4.79 4.4 1.47 0 0 0 0 0 1.47} {161.2 78.4 8.5 3.16 3.9 1.55 0 0 0 0 0 1.55} {132.7 105.7 18 1.64 22.6} {160.6 137.5 3.1 5.98 1} {188 111.1 27.4 4.75 16.3} }} shape {} center {128 128} color 10 name _number8_2 xpos 574 ypos 9239 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens18Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i} {(_INPUT_CTRL.lens18Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i}} name _bokehSize18 xpos 574 ypos 9268 } push $N67220f40 NoOp { name _inputToBokeh18 xpos 473 ypos 9268 } Transform { scale {{_INPUT_CTRL.lens18AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource18 xpos 473 ypos 9297 } Convolve { inputs 2 channels rgb name _convolveLens18 xpos 574 ypos 9297 } Multiply { value {{_INPUT_CTRL.lens18Col.r i} {_INPUT_CTRL.lens18Col.g i} {_INPUT_CTRL.lens18Col.b i} 0} name _colorLens18 xpos 574 ypos 9326 } Blur { size {{_INPUT_CTRL.lens18Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens18 xpos 574 ypos 9369 } push $N4a541e20 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens17 xpos 403 ypos 8573 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens17 xpos 403 ypos 8601 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens17 xpos 403 ypos 8629 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens17Polygon i}} name _switchPolygon17 xpos 685 ypos 8530 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens17DiaphRot i}} scale {{_INPUT_CTRL.lens17Diaphragm*0.65 i}} center {256 256} name _transformPolygon17 xpos 685 ypos 8559 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult}} gamma 1 center {640 360} name _NoiseLens17 xpos 685 ypos 8587 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens17 xpos 685 ypos 8629 } Read { inputs 0 file_type png file <<>>/images/circleBlur1.png format "256 256 0 0 256 256 1 square_256" origset true name Read9 xpos 1035 ypos 2491 } set N4a5c4aa0 [stack 0] Dot { name Dot6 xpos 1069 ypos 5832 } set N4a5e2670 [stack 0] Dot { name Dot14 xpos 1069 ypos 8676 } Merge2 { inputs 2 operation multiply name _multPolygon17 xpos 685 ypos 8671 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask17 xpos 685 ypos 8700 } Bezier { replace true points {{ {87.8 180.4} {107.6 179.9} {108.6 87.6} {87.4 86.8} {87.4 155.4} {73.1 143.4} {60.9 158.9} }} shape {} center {128 128} color 10 name _number24 xpos 575 ypos 8707 disable {{1-_INPUT_CTRL.showNumbers i}} } Bezier { points {{ {120.4 178.9} {120 164.1} {166.3 164.8} {128.3 88.5} {147.1 87.9} {184.7 163.7} {185.5 180.2} }} shape {} center {128 128} color 10 name _number25 xpos 575 ypos 8736 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens17Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i} {(_INPUT_CTRL.lens17Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i}} name _bokehSize17 xpos 575 ypos 8765 } push $N67220f40 NoOp { name _inputToBokeh17 xpos 474 ypos 8765 } Transform { scale {{_INPUT_CTRL.lens17AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource17 xpos 474 ypos 8794 } Convolve { inputs 2 channels rgb name _convolveLens17 xpos 575 ypos 8794 } Multiply { value {{_INPUT_CTRL.lens17Col.r i} {_INPUT_CTRL.lens17Col.g i} {_INPUT_CTRL.lens17Col.b i} 0} name _colorLens17 xpos 575 ypos 8823 } Blur { size {{_INPUT_CTRL.lens17Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens17 xpos 575 ypos 8866 } push $N4a542850 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens16 xpos 403 ypos 8095 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens16 xpos 403 ypos 8123 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens16 xpos 403 ypos 8151 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens16Polygon i}} name _switchPolygon16 xpos 685 ypos 8052 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens16DiaphRot i}} scale {{_INPUT_CTRL.lens16Diaphragm*0.65 i}} center {256 256} name _transformPolygon16 xpos 685 ypos 8081 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult}} gamma 1 center {640 360} name _NoiseLens16 xpos 685 ypos 8109 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens16 xpos 685 ypos 8151 } push $N477b0ad0 Merge2 { inputs 2 operation multiply name _multPolygon16 xpos 685 ypos 8193 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask16 xpos 685 ypos 8222 } Bezier { replace true points {{ {90.2 180.4} {110 179.9} {111 87.6} {89.8 86.8} {89.8 155.4} {75.5 143.4} {63.3 158.9} }} shape {} center {128 128} color 10 name _number22 xpos 575 ypos 8229 disable {{1-_INPUT_CTRL.showNumbers i}} } Bezier { points {{ {180.5 180.1} {180.5 166.6} {141.4 165.1 7.2 -2.5 15.2} {133.5 143.9} {176.1 145.6 15.6 -0.55 17} {189.7 108.4 15.6 -1.76 18.9} {130.8 90.1 19.9 -3.94 24.2} {118.7 126.8} {133.2 129.9} {145.8 100.2 16.4 -0.35 15.7} {176.1 112.8 3.6 1.34 3.6} {167.7 132.6 12.1 2.64 11.2} {118.7 126.5} {129.8 173.8 18 0.87 19.5} }} shape {} center {128 128} color 10 name _number23 xpos 575 ypos 8258 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens16Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i} {(_INPUT_CTRL.lens16Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i}} name _bokehSize16 xpos 575 ypos 8287 } push $N67220f40 NoOp { name _inputToBokeh16 xpos 474 ypos 8287 } Transform { scale {{_INPUT_CTRL.lens16AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource16 xpos 474 ypos 8316 } Convolve { inputs 2 channels rgb name _convolveLens16 xpos 575 ypos 8316 } Multiply { value {{_INPUT_CTRL.lens16Col.r i} {_INPUT_CTRL.lens16Col.g i} {_INPUT_CTRL.lens16Col.b i} 0} name _colorLens16 xpos 575 ypos 8345 } Blur { size {{_INPUT_CTRL.lens16Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens16 xpos 575 ypos 8388 } push $N474278a0 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens15 xpos 403 ypos 7627 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens15 xpos 403 ypos 7655 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens15 xpos 403 ypos 7683 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens15Polygon i}} name _switchPolygon15 xpos 685 ypos 7584 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens15DiaphRot i}} scale {{_INPUT_CTRL.lens15Diaphragm*0.65 i}} center {256 256} name _transformPolygon15 xpos 685 ypos 7613 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult}} gamma 1 center {640 360} name _NoiseLens15 xpos 685 ypos 7641 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens15 xpos 685 ypos 7683 } push $N4a1df840 Merge2 { inputs 2 operation multiply name _multPolygon15 xpos 685 ypos 7725 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask15 xpos 685 ypos 7754 } Bezier { replace true points {{ {87.8 180.4} {107.6 179.9} {108.6 87.6} {87.4 86.8} {87.4 155.4} {73.1 143.4} {60.9 158.9} }} shape {} center {128 128} color 10 name _number20 xpos 575 ypos 7761 disable {{1-_INPUT_CTRL.showNumbers i}} } Bezier { points {{ {179.3 178.7} {179.3 164.8} {133.6 165.5} {134.1 146.6} {175.1 144.5 15 -0.55 16.4} {188.1 108.6 15 -1.76 18.3} {147.3 85.8 9.6 -3.39 14.2} {118.7 94.6} {123.3 109.8} {151.1 100.9 11 -0.02 10.3} {174.6 112.8 3.5 1.34 3.5} {167.6 133.1 11.6 2.64 10.8} {120.3 127} {120.3 179.4} }} shape {} center {128 128} color 10 name _number21 xpos 575 ypos 7790 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens15Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i} {(_INPUT_CTRL.lens15Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i}} name _bokehSize15 xpos 575 ypos 7819 } push $N67220f40 NoOp { name _inputToBokeh15 xpos 474 ypos 7819 } Transform { scale {{_INPUT_CTRL.lens15AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource15 xpos 474 ypos 7848 } Convolve { inputs 2 channels rgb name _convolveLens15 xpos 575 ypos 7848 } Multiply { value {{_INPUT_CTRL.lens15Col.r i} {_INPUT_CTRL.lens15Col.g i} {_INPUT_CTRL.lens15Col.b i} 0} name _colorLens15 xpos 575 ypos 7878 } Blur { size {{_INPUT_CTRL.lens15Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens15 xpos 575 ypos 7920 } push $N4a2dc600 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens14 xpos 406 ypos 7158 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens14 xpos 406 ypos 7186 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens14 xpos 406 ypos 7214 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens14Polygon i}} name _switchPolygon14 xpos 688 ypos 7115 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens14DiaphRot i}} scale {{_INPUT_CTRL.lens14Diaphragm*0.65 i}} center {256 256} name _transformPolygon14 xpos 688 ypos 7144 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult}} gamma 1 center {640 360} name _NoiseLens14 xpos 688 ypos 7172 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens14 xpos 688 ypos 7214 } push $N67230a50 Merge2 { inputs 2 operation multiply name _multPolygon14 xpos 688 ypos 7256 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask14 xpos 688 ypos 7285 } Bezier { replace true points {{ {87.8 180.4} {107.6 179.9} {108.6 87.6} {87.4 86.8} {87.4 155.4} {73.1 143.4} {60.9 158.9} }} shape {} center {128 128} color 10 name _number18 xpos 578 ypos 7292 disable {{1-_INPUT_CTRL.showNumbers i}} } Bezier { points {{ {159.5 183} {118.6 121.8} {119.3 100.1} {153.8 102.3} {154 86.4} {169 89} {168.6 104.3} {181 105.2} {180.5 121.8} {168.1 120.3} {168.2 131.5} {153.8 130.8} {154.4 120.2} {137 119.2} {173.5 176.2} }} shape {} center {128 128} color 10 name _number19 xpos 578 ypos 7321 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens14Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i} {(_INPUT_CTRL.lens14Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i}} name _bokehSize14 xpos 578 ypos 7350 } push $N67220f40 NoOp { name _inputToBokeh14 xpos 477 ypos 7350 } Transform { scale {{_INPUT_CTRL.lens14AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource14 xpos 477 ypos 7379 } Convolve { inputs 2 channels rgb name _convolveLens14 xpos 578 ypos 7379 } Multiply { value {{_INPUT_CTRL.lens14Col.r i} {_INPUT_CTRL.lens14Col.g i} {_INPUT_CTRL.lens14Col.b i} 0} name _colorLens14 xpos 578 ypos 7408 } Blur { size {{_INPUT_CTRL.lens14Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens14 xpos 578 ypos 7451 } push $N6d8e0a10 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens13 xpos 406 ypos 6680 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens13 xpos 406 ypos 6708 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens13 xpos 406 ypos 6736 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens13Polygon i}} name _switchPolygon13 xpos 688 ypos 6637 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens13DiaphRot i}} scale {{_INPUT_CTRL.lens13Diaphragm*0.65 i}} center {256 256} name _transformPolygon13 xpos 688 ypos 6666 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult}} gamma 1 center {640 360} name _NoiseLens13 xpos 688 ypos 6694 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens13 xpos 688 ypos 6736 } push $N49b4e340 Merge2 { inputs 2 operation multiply name _multPolygon13 xpos 688 ypos 6778 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask13 xpos 688 ypos 6807 } Bezier { replace true points {{ {91.5 175.1} {109.1 174.7} {110 92.6} {91.1 91.9} {91.1 152.9} {78.4 142.2} {67.6 156} }} shape {} center {128 128} color 10 name _number16 xpos 578 ypos 6814 disable {{1-_INPUT_CTRL.showNumbers i}} } Bezier { points {{ {125 172.8} {142.6 180.8 19.6 0.25 15.5} {173.4 150.2 14.3 -1.84 18.3} {155.4 134.4} {177.4 103.8 30.5 -1.76 27.9} {126.4 89} {126.6 103.8} {161.2 107.8 18.9 1.34 17.9} {135.6 126.4} {135.4 142.2} {159.8 155.8 23.6 1.72 6.8} {131.2 161.6} }} shape {} center {128 128} color 10 name _number17 xpos 578 ypos 6843 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens13Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i} {(_INPUT_CTRL.lens13Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i}} name _bokehSize13 xpos 578 ypos 6872 } push $N67220f40 NoOp { name _inputToBokeh13 xpos 477 ypos 6872 } Transform { scale {{_INPUT_CTRL.lens13AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource13 xpos 477 ypos 6901 } Convolve { inputs 2 channels rgb name _convolveLens13 xpos 578 ypos 6901 } Multiply { value {{_INPUT_CTRL.lens13Col.r i} {_INPUT_CTRL.lens13Col.g i} {_INPUT_CTRL.lens13Col.b i} 0} name _colorLens13 xpos 578 ypos 6930 } Blur { size {{_INPUT_CTRL.lens13Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens13 xpos 578 ypos 6973 } push $N67043a20 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens12 xpos 406 ypos 6206 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens12 xpos 406 ypos 6234 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens12 xpos 406 ypos 6262 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens12Polygon i}} name _switchPolygon12 xpos 688 ypos 6163 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens12DiaphRot i}} scale {{_INPUT_CTRL.lens12Diaphragm*0.65 i}} center {256 256} name _transformPolygon12 xpos 688 ypos 6192 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult}} gamma 1 center {640 360} name _NoiseLens12 xpos 688 ypos 6220 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens12 xpos 688 ypos 6262 } Read { inputs 0 file_type png file <<>>/images/twoCircle1.png format "256 256 0 0 256 256 1 square_256" origset true name Read11 xpos 964 ypos 2952 } set N4a09bae0 [stack 0] Dot { name Dot7 xpos 998 ypos 6309 } Merge2 { inputs 2 operation multiply name _multPolygon12 xpos 688 ypos 6304 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask12 xpos 688 ypos 6333 } Bezier { replace true points {{ {91.5 175.1} {109.1 174.7} {110 92.6} {91.1 91.9} {91.1 152.9} {78.4 142.2} {67.6 156} }} shape {} center {128 128} color 10 name _number14 xpos 578 ypos 6340 disable {{1-_INPUT_CTRL.showNumbers i}} } Bezier { points {{ {115.9 160.7} {143.6 176.4 17.4 0.25 13.8} {172.7 149.4 18.4 -1.88 16.3} {143.2 111.5} {177.2 111.5} {177.7 93.2} {121.9 93.2} {122.5 112.2} {156.9 152.6 21 1.72 6} {123.2 147.1} }} shape {} center {128 128} color 10 name _number15 xpos 578 ypos 6369 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens12Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i} {(_INPUT_CTRL.lens12Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i}} name _bokehSize12 xpos 578 ypos 6398 } push $N67220f40 NoOp { name _inputToBokeh12 xpos 477 ypos 6398 } Transform { scale {{_INPUT_CTRL.lens12AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource12 xpos 477 ypos 6427 } Convolve { inputs 2 channels rgb name _convolveLens12 xpos 578 ypos 6427 } Multiply { value {{_INPUT_CTRL.lens12Col.r i} {_INPUT_CTRL.lens12Col.g i} {_INPUT_CTRL.lens12Col.b i} 0} name _colorLens12 xpos 578 ypos 6456 } Blur { size {{_INPUT_CTRL.lens12Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens12 xpos 578 ypos 6499 } push $N6662b930 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens11 xpos 406 ypos 5729 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens11 xpos 406 ypos 5757 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens11 xpos 406 ypos 5785 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens11Polygon i}} name _switchPolygon11 xpos 688 ypos 5686 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens11DiaphRot i}} scale {{_INPUT_CTRL.lens11Diaphragm*0.65 i}} center {256 256} name _transformPolygon11 xpos 688 ypos 5715 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult}} gamma 1 center {640 360} name _NoiseLens11 xpos 688 ypos 5743 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens11 xpos 688 ypos 5785 } push $N4a5e2670 Merge2 { inputs 2 operation multiply name _multPolygon11 xpos 688 ypos 5827 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask11 xpos 688 ypos 5856 } Bezier { replace true points {{ {103.8 170.6} {119.4 170.3} {120.2 97.4} {103.4 96.8} {103.4 150.9} {92.2 141.4} {82.6 153.7} }} shape {} center {128 128} color 10 name _number13 xpos 578 ypos 5863 disable {{1-_INPUT_CTRL.showNumbers i}} } Bezier { points {{ {146.2 171.4} {161.8 171.1} {162.6 98.2} {145.8 97.6} {145.8 151.7} {134.6 142.2} {125 154.5} }} shape {} center {128 128} color 10 name _number11 xpos 578 ypos 5892 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens11Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i} {(_INPUT_CTRL.lens11Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i}} name _bokehSize11 xpos 578 ypos 5921 } push $N67220f40 NoOp { name _inputToBokeh11 xpos 477 ypos 5921 } Transform { scale {{_INPUT_CTRL.lens11AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource11 xpos 477 ypos 5950 } Convolve { inputs 2 channels rgb name _convolveLens11 xpos 578 ypos 5950 } Multiply { value {{_INPUT_CTRL.lens11Col.r i} {_INPUT_CTRL.lens11Col.g i} {_INPUT_CTRL.lens11Col.b i} 0} name _colorLens11 xpos 578 ypos 5979 } Blur { size {{_INPUT_CTRL.lens11Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens11 xpos 578 ypos 6022 } push $N4a6925e0 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens10 xpos 402 ypos 5248 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens10 xpos 402 ypos 5276 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens10 xpos 402 ypos 5304 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens10Polygon i}} name _switchPolygon10 xpos 684 ypos 5205 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens10DiaphRot i}} scale {{_INPUT_CTRL.lens10Diaphragm*0.65 i}} center {256 256} name _transformPolygon10 xpos 684 ypos 5234 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult}} gamma 1 center {640 360} name _NoiseLens10 xpos 684 ypos 5262 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens10 xpos 684 ypos 5304 } push $N4995abf0 Merge2 { inputs 2 operation multiply name _multPolygon10 xpos 684 ypos 5346 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask10 xpos 684 ypos 5375 } Bezier { replace true points {{ {150.9 171.1 34.4 3.15 26.2} {122.4 130.5} {134.9 131.3} {150 158.8 13.2 0 19.2} {165.4 133.6 8 -1.54 13} {150.4 111.4 13.8 -3.13 11.6} {134.9 131.3} {122.5 130.4} {151.3 97.6 24 0.01 26.9} {178 134.4 7.3 1.57 6.6} }} shape {} center {128 128} color 10 name _number10 xpos 574 ypos 5382 disable {{1-_INPUT_CTRL.showNumbers i}} } Bezier { points {{ {98.8 171} {114.4 170.7} {115.2 97.8} {98.4 97.2} {98.4 151.3} {87.2 141.8} {77.6 154.1} }} shape {} center {128 128} color 10 name _number12 xpos 574 ypos 5411 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens10Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i} {(_INPUT_CTRL.lens10Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i}} name _bokehSize10 xpos 574 ypos 5440 } push $N67220f40 NoOp { name _inputToBokeh10 xpos 473 ypos 5440 } Transform { scale {{_INPUT_CTRL.lens10AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource10 xpos 473 ypos 5469 } Convolve { inputs 2 channels rgb name _convolveLens10 xpos 574 ypos 5469 } Multiply { value {{_INPUT_CTRL.lens10Col.r i} {_INPUT_CTRL.lens10Col.g i} {_INPUT_CTRL.lens9Col.b i} 0} name _colorLens10 xpos 574 ypos 5498 } Blur { size {{_INPUT_CTRL.lens10Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens10 xpos 574 ypos 5541 } push $N4a6df9c0 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens9 xpos 417 ypos 4806 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens9 xpos 417 ypos 4834 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens9 xpos 417 ypos 4862 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens9Polygon i}} name _switchPolygon9 xpos 684 ypos 4763 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens9DiaphRot i}} scale {{_INPUT_CTRL.lens9Diaphragm*0.65 i}} center {256 256} name _transformPolygon9 xpos 684 ypos 4792 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult}} gamma 1 center {640 360} name _NoiseLens9 xpos 684 ypos 4820 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens9 xpos 684 ypos 4862 } Read { inputs 0 file_type png file <<>>/images/circleHard3.png format "256 256 0 0 256 256 1 square_256" origset true name Read6 xpos 1205 ypos 1623 } set N49f68da0 [stack 0] Dot { name Dot4 xpos 1217 ypos 4909 } Merge2 { inputs 2 operation multiply name _multPolygon9 xpos 684 ypos 4904 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask9 xpos 684 ypos 4932 } Bezier { replace true points {{ {105 94.4} {105 105.6} {137.4 106.8 6 0.64 12.6} {144 124.4} {108.6 123 12.9 2.59 14.1} {97.6 153.8 16.5 1.33 15.7} {145.1 168.3 16.5 -0.72 15.9} {156.4 138.4} {144.4 135.6} {133.8 160.6 13.6 2.79 13} {108.6 150.2 3 4.4 7.9} {115.6 133.8 10 5.78 9.3} {156.4 138.4} {147 99.6 14.9 4.01 16.2} }} shape {} center {128 128} color 10 name _number9 xpos 574 ypos 4939 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens9Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i} {(_INPUT_CTRL.lens9Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i}} name _bokehSize9 xpos 574 ypos 4968 } push $N67220f40 NoOp { name _inputToBokeh9 xpos 473 ypos 4968 } Transform { scale {{_INPUT_CTRL.lens9AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource9 xpos 473 ypos 4997 } Convolve { inputs 2 channels rgb name _convolveLens9 xpos 574 ypos 4997 } Multiply { value {{_INPUT_CTRL.lens9Col.r i} {_INPUT_CTRL.lens9Col.g i} {_INPUT_CTRL.lens9Col.b i} 0} name _colorLens9 xpos 574 ypos 5026 } Blur { size {{_INPUT_CTRL.lens9Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens9 xpos 574 ypos 5069 } push $N676f4660 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens8 xpos 401 ypos 4333 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens8 xpos 401 ypos 4361 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens8 xpos 401 ypos 4389 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens8Polygon i}} name _switchPolygon8 xpos 683 ypos 4290 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens8DiaphRot i}} scale {{_INPUT_CTRL.lens8Diaphragm*0.65 i}} center {256 256} name _transformPolygon8 xpos 683 ypos 4319 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity i}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult i}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult i}} gamma 1 center {640 360} name _NoiseLens8 xpos 683 ypos 4347 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens8 xpos 683 ypos 4389 } Read { inputs 0 file_type png file <<>>/images/circleHard2.png format "256 256 0 0 256 256 1 square_256" origset true name Read5 xpos 1264 ypos 1079 } set N67371ef0 [stack 0] Dot { name Dot3 xpos 1298 ypos 4436 } Merge2 { inputs 2 operation multiply name _multPolygon8 xpos 683 ypos 4431 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask8 xpos 683 ypos 4460 } Bezier { replace true points {{ {125.5 178.3 1.2 -1.72 3.8 1.7 0 0 0 0 0 1.7} {125.3 167.2 4.2 -3.07 2.2 1.44 0 0 0 0 0 1.44} {109.3 152.1 7.9 -1.57 11.9} {123.2 136.5 5.4 0.68 2.6 -1.3 0 0 0 0 0 -1.3} {138.7 153.3 10 -4.79 12.4} {125.5 167.4 1.9 1.59 3.9 1.47 0 0 0 0 0 1.47} {125.5 178.3 7.6 -0.04 3.5 1.55 0 0 0 0 0 1.55} {149.5 152.4 16.1 -1.56 20.2} {122.8 125.5 2.8 2.78 0.9} {99.8 150.5 24.5 1.55 14.6} }} shape {} center {128 128} color 10 name _number27 xpos 573 ypos 4467 disable {{1-_INPUT_CTRL.showNumbers i}} } Bezier { points {{ {125 84.6 1.2 1.48 3.8 1.7 0 0 0 0 0 1.7} {124.6 95.7 4.2 0.13 2.2 1.44 0 0 0 0 0 1.44} {139.6 111.8 7.9 1.63 11.9} {124.7 126.5 5.4 3.88 2.6 -1.3 0 0 0 0 0 -1.3} {110.3 108.7 10 -1.59 12.4} {124.4 95.5 1.9 4.79 3.9 1.47 0 0 0 0 0 1.47} {125 84.6 7.6 3.16 3.5 1.55 0 0 0 0 0 1.55} {99.5 109 16.1 1.64 20.2} {124.5 137.5 2.8 5.98 0.9} {149 113.9 24.5 4.75 14.6} }} shape {} center {128 128} color 10 name _number8_1 xpos 574 ypos 4496 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens8Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/247)+0.01 i} {(_INPUT_CTRL.lens8Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/247)+0.01 i}} name _bokehSize8 xpos 574 ypos 4525 } push $N67220f40 NoOp { name _inputToBokeh8 xpos 473 ypos 4525 } Transform { scale {{_INPUT_CTRL.lens8AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource8 xpos 473 ypos 4554 } Convolve { inputs 2 channels rgb name _convolveLens8 xpos 574 ypos 4554 } Multiply { value {{_INPUT_CTRL.lens8Col.r i} {_INPUT_CTRL.lens8Col.g i} {_INPUT_CTRL.lens8Col.b i} 0} name _colorLens8 xpos 574 ypos 4583 } Blur { size {{_INPUT_CTRL.lens8Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens8 xpos 574 ypos 4626 } push $N4a469eb0 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens7 xpos 397 ypos 3786 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens7 xpos 397 ypos 3814 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens7 xpos 397 ypos 3842 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens7Polygon i}} name _switchPolygon7 xpos 679 ypos 3743 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens7DiaphRot i}} scale {{_INPUT_CTRL.lens7Diaphragm*0.65 i}} center {256 256} name _transformPolygon7 xpos 679 ypos 3772 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult}} gamma 1 center {640 360} name _NoiseLens7 xpos 679 ypos 3800 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens7 xpos 679 ypos 3842 } push $N4a1f2640 Merge2 { inputs 2 operation multiply name _multPolygon7 xpos 679 ypos 3884 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask7 xpos 679 ypos 4032 } Bezier { replace true points {{ {98.7 170.4} {98.3 156.4} {142.2 157} {106.2 84.6} {124 84.1} {159.7 156} {160.4 171.6} }} shape {} center {128 128} color 10 name _number7 xpos 574 ypos 4039 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens7Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/246)+0.01 i} {(_INPUT_CTRL.lens7Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/246)+0.01 i}} name _bokehSize7 xpos 574 ypos 4069 } push $N67220f40 NoOp { name _inputToBokeh7 xpos 473 ypos 4068 } Transform { scale {{_INPUT_CTRL.lens7AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource7 xpos 473 ypos 4097 } Convolve { inputs 2 channels rgb name _convolveLens7 xpos 574 ypos 4097 } Multiply { value {{_INPUT_CTRL.lens7Col.r i} {_INPUT_CTRL.lens7Col.g i} {_INPUT_CTRL.lens7Col.b i} 0} name _colorLens7 xpos 574 ypos 4126 } Blur { size {{_INPUT_CTRL.lens7Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens7 xpos 574 ypos 4169 } push $N4a6543b0 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens6 xpos 403 ypos 3330 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens6 xpos 403 ypos 3358 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens6 xpos 403 ypos 3386 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens6Polygon}} name _switchPolygon6 xpos 685 ypos 3287 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens6DiaphRot i}} scale {{_INPUT_CTRL.lens6Diaphragm*0.65 i}} center {256 256} name _transformPolygon6 xpos 685 ypos 3316 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult}} gamma 1 center {640 360} name _NoiseLens6 xpos 685 ypos 3344 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens6 xpos 685 ypos 3386 } push $N49bb6c00 Merge2 { inputs 2 operation multiply name _multPolygon6 xpos 684 ypos 3428 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask6 xpos 684 ypos 3457 } Bezier { replace true points {{ {148.6 169} {148.6 157.8} {116.2 156.6 6 -2.5 12.6} {109.6 139} {145 140.4 12.9 -0.55 14.1} {156.2 109.6 12.9 -1.76 15.7} {107.4 94.4 16.5 -3.94 20.1} {97.4 124.8} {109.4 127.4} {119.8 102.8 13.6 -0.35 13} {145 113.2 3 1.34 3} {138 129.6 10 2.64 9.3} {97.4 124.6} {106.6 163.8 14.9 0.87 16.2} }} shape {} center {128 128} color 10 name _number6 xpos 574 ypos 3464 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens6Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i} {(_INPUT_CTRL.lens6Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/223)+0.01 i}} name _bokehSize6 xpos 574 ypos 3493 } push $N67220f40 NoOp { name _inputToBokeh6 xpos 473 ypos 3493 } Transform { scale {{_INPUT_CTRL.lens6AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource6 xpos 473 ypos 3522 } Convolve { inputs 2 channels rgb name _convolveLens6 xpos 574 ypos 3522 } Multiply { value {{_INPUT_CTRL.lens6Col.r i} {_INPUT_CTRL.lens6Col.g i} {_INPUT_CTRL.lens6Col.b i} 0} name _colorLens6 xpos 574 ypos 3551 } Blur { size {{_INPUT_CTRL.lens6Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens6 xpos 574 ypos 3594 } push $N3f719100 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens5 xpos 402 ypos 2884 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens5 xpos 402 ypos 2912 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens5 xpos 402 ypos 2940 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens5Polygon i}} name _switchPolygon5 xpos 684 ypos 2842 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens5DiaphRot i}} scale {{_INPUT_CTRL.lens5Diaphragm*0.65 i}} center {256 256} name _transformPolygon5 xpos 684 ypos 2870 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult}} gamma 1 center {640 360} name _NoiseLens5 xpos 684 ypos 2898 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens5 xpos 684 ypos 2940 } push $N4a09bae0 Merge2 { inputs 2 operation multiply name _multPolygon5 xpos 684 ypos 2982 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask5 xpos 684 ypos 3011 } Bezier { replace true points {{ {154.4 168.4} {154.4 156.4} {115.2 157} {115.6 140.8} {150.8 139 12.9 -0.55 14.1} {162 108.2 12.9 -1.76 15.7} {127 88.6 8.2 -3.39 12.2} {102.4 96.2} {106.4 109.2} {130.2 101.6 9.4 -0.02 8.8} {150.4 111.8 3 1.34 3} {144.4 129.2 10 2.64 9.3} {103.8 124} {103.8 169} }} shape {} center {128 128} color 10 name _number5 xpos 574 ypos 3018 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens5Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/240)+0.01 i} {(_INPUT_CTRL.lens5Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/240)+0.01 i}} name _bokehSize5 xpos 574 ypos 3047 } push $N67220f40 NoOp { name _inputToBokeh5 xpos 473 ypos 3047 } Transform { scale {{_INPUT_CTRL.lens5AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource5 xpos 473 ypos 3076 } Convolve { inputs 2 channels rgb name _convolveLens5 xpos 574 ypos 3076 } Multiply { value {{_INPUT_CTRL.lens5Col.r i} {_INPUT_CTRL.lens5Col.g i} {_INPUT_CTRL.lens5Col.b i} 0} name _colorLens5 xpos 574 ypos 3105 } Blur { size {{_INPUT_CTRL.lens5Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens5 xpos 574 ypos 3148 } push $N47423090 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens4 xpos 402 ypos 2423 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens4 xpos 402 ypos 2451 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens4 xpos 402 ypos 2479 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens4Polygon i}} name _switchPolygon4 xpos 684 ypos 2380 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens4DiaphRot i}} scale {{_INPUT_CTRL.lens4Diaphragm*0.65 i}} center {256 256} name _transformPolygon4 xpos 684 ypos 2409 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult}} gamma 1 center {640 360} name _NoiseLens4 xpos 684 ypos 2437 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens4 xpos 684 ypos 2479 } push $N4a5c4aa0 Merge2 { inputs 2 operation multiply name _multPolygon4 xpos 684 ypos 2521 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask4 xpos 684 ypos 2550 } Bezier { replace true points {{ {132.9 186.8} {92 125.6} {92.7 103.9} {127.2 106.1} {127.4 90.2} {142.4 92.8} {142 108.1} {154.4 109} {153.9 125.6} {141.5 124.1} {141.6 135.3} {127.2 134.6} {127.8 124} {110.4 123} {146.9 180} }} shape {} center {128 128} color 10 name _number4 xpos 574 ypos 2557 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens4Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/242)+0.01 i} {(_INPUT_CTRL.lens4Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/242)+0.01 i}} name _bokehSize4 xpos 574 ypos 2586 } push $N67220f40 NoOp { name _inputToBokeh4 xpos 473 ypos 2586 } Transform { scale {{_INPUT_CTRL.lens4AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource4 xpos 473 ypos 2615 } Convolve { inputs 2 channels rgb name _convolveLens4 xpos 574 ypos 2615 } Multiply { value {{_INPUT_CTRL.lens4Col.r i} {_INPUT_CTRL.lens4Col.g i} {_INPUT_CTRL.lens4Col.b i} 0} name _colorLens4 xpos 574 ypos 2644 } Blur { size {{_INPUT_CTRL.lens4Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens4 xpos 574 ypos 2687 } push $N4a48a940 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens3 xpos 402 ypos 1987 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens3 xpos 402 ypos 2015 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens3 xpos 402 ypos 2043 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens3Polygon}} name _switchPolygon3 xpos 684 ypos 1877 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens3DiaphRot i}} scale {{_INPUT_CTRL.lens3Diaphragm*0.65 i}} center {256 256} name _transformPolygon3 xpos 684 ypos 1906 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult}} gamma 1 center {640 360} name _NoiseLens3 xpos 684 ypos 2001 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens3 xpos 684 ypos 2043 } push $N4996bc50 Merge2 { inputs 2 operation multiply name _multPolygon3 xpos 684 ypos 2085 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask3 xpos 684 ypos 2114 } Bezier { replace true points {{ {105.2 171.6} {122.8 179.6 19.6 0.25 15.5} {153.6 149 14.3 -1.84 18.3} {135.6 133.2} {157.6 102.6 30.5 -1.76 27.9} {106.6 87.8} {106.8 102.6} {141.4 106.6 18.9 1.34 17.9} {115.8 125.2} {115.6 141} {140 154.6 23.6 1.72 6.8} {111.4 160.4} }} shape {} center {128 128} color 10 name _number3 xpos 574 ypos 2121 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens3Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/247)+0.01 i} {(_INPUT_CTRL.lens3Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/247)+0.01 i}} name _bokehSize3 xpos 574 ypos 2149 } push $N67220f40 NoOp { name _inputToBokeh3 xpos 473 ypos 2149 } Transform { scale {{_INPUT_CTRL.lens3AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource3 xpos 473 ypos 2178 } Convolve { inputs 2 channels rgb name _convolveLens3 xpos 574 ypos 2178 } Multiply { value {{_INPUT_CTRL.lens3Col.r i} {_INPUT_CTRL.lens3Col.g i} {_INPUT_CTRL.lens3Col.b i} 0} name _colorLens3 xpos 574 ypos 2207 } Blur { size {{_INPUT_CTRL.lens3Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens3 xpos 574 ypos 2250 } push $N3f716ff0 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens2 xpos 402 ypos 1555 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens2 xpos 402 ypos 1583 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd}} name _BlurReflectionLens2 xpos 402 ypos 1611 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens2Polygon i}} name _switchPolygon2 xpos 684 ypos 1512 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens2DiaphRot i}} scale {{_INPUT_CTRL.lens2Diaphragm*0.65 i}} center {256 256} name _transformPolygon2 xpos 684 ypos 1541 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult}} gamma 1 center {640 360} name _NoiseLens2 xpos 684 ypos 1569 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity}} name _MergeReflectionLens2 xpos 684 ypos 1611 } push $N49f68da0 Merge2 { inputs 2 operation multiply name _multPolygon2 xpos 684 ypos 1653 } Reformat { format "256 256 0 0 256 256 1 square_256" name _reformatPolyMask2 xpos 684 ypos 1682 } Bezier { replace true points {{ {89.6 161.8 0 0.82} {120.8 179.4 19.6 0.25 15.5} {153.6 149 20.7 -1.88 18.3} {120.4 106.4 0 -1.39} {158.6 106.4 0 -0.49} {159.2 85.8 0 -2.82} {96.4 85.8} {97 107.2} {135.8 152.6 23.6 1.72 6.8} {97.8 146.4 0 3.14} }} shape {} center {128 128} color 10 name _number2 xpos 574 ypos 1689 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens2Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/237)+0.01 i} {(_INPUT_CTRL.lens2Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/237)+0.01 i}} name _bokehSize2 xpos 574 ypos 1718 } push $N67220f40 NoOp { name _inputToBokeh2 xpos 473 ypos 1718 } Transform { scale {{_INPUT_CTRL.lens2AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource2 xpos 473 ypos 1747 } Convolve { inputs 2 channels rgb name _convolveLens2 xpos 574 ypos 1747 } Multiply { value {{_INPUT_CTRL.lens2Col.r i} {_INPUT_CTRL.lens2Col.g i} {_INPUT_CTRL.lens2Col.b i} 0} name _colorLens2 xpos 574 ypos 1776 } Blur { size {{_INPUT_CTRL.lens2Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens2 xpos 574 ypos 1819 } push $N474c77c0 Grade { whitepoint {{_INPUT_CTRL.lens1reflWhitepoint*_INPUT_CTRL.reflectionsWhitepointMult i}} gamma {{_INPUT_CTRL.lens1reflectionGamma*_INPUT_CTRL.reflectionsGammaMult i}} name _GradeReflectionLens1 xpos 397 ypos 1123 } Transform { rotate {{_INPUT_CTRL.reflectionsRotOffset+_INPUT_CTRL.lens1reflectionRotation i}} center {128 128} name _TransformReflectionLens1 xpos 397 ypos 1151 } Blur { size {{_INPUT_CTRL.lens1reflectionBlur+_INPUT_CTRL.reflectionsBlurAdd i}} name _BlurReflectionLens1 xpos 397 ypos 1179 } push $N4a2244b0 push $N4a638510 push $N6703bbe0 push $N4993c8b0 push $N4a1d10d0 push $N4a055400 push $N4a07d0f0 push $N49b24150 Switch { inputs 8 which {{_INPUT_CTRL.lens1Polygon i}} name _switchPolygon1 xpos 679 ypos 1051 } Transform { translate {-128 -128} rotate {{_INPUT_CTRL.lens1DiaphRot i}} scale {{_INPUT_CTRL.lens1Diaphragm*0.65 i}} center {256 256} name _transformPolygon1 xpos 679 ypos 1081 } push $N67371ef0 Merge2 { inputs 2 operation multiply name _multPolygon1 xpos 679 ypos 1109 } Noise { opacity {{_INPUT_CTRL.lens7grainOpacity*_INPUT_CTRL.overallGrainOpacity i}} maskChannelInput rgba.red size {{_INPUT_CTRL.lens1grainSize*_INPUT_CTRL.overallGrainSizeMult i}} octaves 4 lacunarity 5 gain {{_INPUT_CTRL.lens1grainGain*_INPUT_CTRL.overallGrainGainMult i}} gamma 1 center {640 360} name _NoiseLens1 xpos 679 ypos 1137 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red mix {{_INPUT_CTRL.lens1reflectionOpacity*_INPUT_CTRL.reflectionsOpacity i}} name _MergeReflectionLens1 xpos 679 ypos 1179 } Reformat { format "256 256 0 0 256 256 1 square_256" box_width 256 name _reformatPolyMask1 xpos 679 ypos 1255 } Bezier { replace true points {{ {121.6 171.4} {138.8 171.1} {139.6 98.2} {121.2 97.6} {121.2 151.7} {110 142.2} {100.4 154.5} }} shape {} center {128 128} color 10 name _number1 xpos 572 ypos 1262 disable {{1-_INPUT_CTRL.showNumbers i}} } Reformat { type scale scale {{(_INPUT_CTRL.lens1Size.w*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/247)+0.01 i} {(_INPUT_CTRL.lens1Size.h*_INPUT_CTRL.quality*_INPUT_CTRL.overallLensScale/247)+0.01 i}} name _bokehSize1 xpos 572 ypos 1291 } push $N67220f40 NoOp { name _inputToBokeh1 xpos 471 ypos 1291 } Transform { scale {{_INPUT_CTRL.lens1AxisPos*_INPUT_CTRL.overallLensDistance i}} center {{_INPUT_CTRL.width/2 i} {_INPUT_CTRL.height/2 i}} name _symSource1 xpos 471 ypos 1320 } Convolve { inputs 2 channels rgb name _convolveLens1 xpos 572 ypos 1320 } Multiply { value {{_INPUT_CTRL.lens1Col.r i} {_INPUT_CTRL.lens1Col.g i} {_INPUT_CTRL.lens1Col.b i} 0} name _colorLens1 xpos 572 ypos 1349 } Blur { size {{_INPUT_CTRL.lens1Blur*(1-_INPUT_CTRL.showNumbers) i}} name _blurLens1 xpos 572 ypos 1392 } push $N49dbb260 Merge2 { inputs 2 name _screenLens1 xpos 38 ypos 1399 disable {{1-_INPUT_CTRL.lens1Active i}} } Merge2 { inputs 2 name _screenLens2 xpos 38 ypos 1826 disable {{1-_INPUT_CTRL.lens2Active i}} } Merge2 { inputs 2 name _screenLens3 xpos 38 ypos 2257 disable {{1-_INPUT_CTRL.lens3Active i}} } Merge2 { inputs 2 name _screenLens4 xpos 38 ypos 2694 disable {{1-_INPUT_CTRL.lens4Active i}} } Merge2 { inputs 2 name _screenLens5 xpos 38 ypos 3155 disable {{1-_INPUT_CTRL.lens5Active i}} } Merge2 { inputs 2 name _screenLens6 xpos 38 ypos 3601 disable {{1-_INPUT_CTRL.lens6Active i}} } Merge2 { inputs 2 name _screenLens7 xpos 38 ypos 4176 disable {{1-_INPUT_CTRL.lens7Active i}} } Merge2 { inputs 2 name _screenLens8 xpos 38 ypos 4633 disable {{1-_INPUT_CTRL.lens8Active i}} } Merge2 { inputs 2 name _screenLens9 xpos 38 ypos 5076 disable {{1-_INPUT_CTRL.lens9Active i}} } Merge2 { inputs 2 name _screenLens10 xpos 38 ypos 5548 disable {{1-_INPUT_CTRL.lens10Active i}} } Merge2 { inputs 2 name _screenLens11 xpos 38 ypos 6029 disable {{1-_INPUT_CTRL.lens11Active i}} } Merge2 { inputs 2 name _screenLens12 xpos 38 ypos 6506 disable {{1-_INPUT_CTRL.lens12Active i}} } Merge2 { inputs 2 name _screenLens13 xpos 38 ypos 6980 disable {{1-_INPUT_CTRL.lens13Active i}} } Merge2 { inputs 2 name _screenLens14 xpos 38 ypos 7458 disable {{1-_INPUT_CTRL.lens14Active i}} } Merge2 { inputs 2 name _screenLens15 xpos 38 ypos 7927 disable {{1-_INPUT_CTRL.lens15Active i}} } Merge2 { inputs 2 name _screenLens16 xpos 38 ypos 8395 disable {{1-_INPUT_CTRL.lens16Active i}} } Merge2 { inputs 2 name _screenLens17 xpos 38 ypos 8873 disable {{1-_INPUT_CTRL.lens17Active i}} } Merge2 { inputs 2 name _screenLens18 xpos 36 ypos 9376 disable {{1-_INPUT_CTRL.lens18Active i}} } Merge2 { inputs 2 name _screenLens19 xpos 36 ypos 9843 disable {{1-_INPUT_CTRL.lens19Active i}} } Merge2 { inputs 2 name _screenLens20 xpos 38 ypos 10330 disable {{1-_INPUT_CTRL.lens20Active i}} } Reformat { type "to box" box_width {{_INPUT_.width i}} box_height {{_INPUT_.height i}} box_fixed true resize distort filter Mitchell name _reformatQualityOriginal xpos 38 ypos 10393 } Saturation { saturation {{_INPUT_CTRL.overallSaturation i}} mode Average name _overallSaturation xpos 38 ypos 10422 } Multiply { value {{_INPUT_CTRL.overallMult i}} name _overallMult xpos 38 ypos 10451 } Merge2 { inputs 2 operation screen name Merge5 xpos 38 ypos 10515 } push $N499e6c00 Dot { name Dot18 xpos 194 ypos 814 } Dot { name Dot17 xpos 194 ypos 10620 } Switch { inputs 2 which {{1-_INPUT_CTRL.viewSelectedHighlights i}} name _switchSelectedHighlights xpos 38 ypos 10615 } NoOp { name _OUTPUT xpos 38 ypos 10643 } Output { name Output1 xpos 38 ypos 10702 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_BBoxToFormat.gizmo ================================================ Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"overscanType\":\n if n.knob(\"overscanType\").getValue() == 1:\n n.knob(\"overscanPercent\").setVisible(True)\n n.knob(\"overscan\").setVisible(False)\n else:\n n.knob(\"overscanPercent\").setVisible(False)\n n.knob(\"overscan\").setVisible(True)" tile_color 0xa57aaaff note_font "Verdana Bold" note_font_color 0xffffffff selected true addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} overscanType Percentage addUserKnob {14 overscan l Overscan +HIDDEN R 0 400} addUserKnob {14 overscanPercent l "Overscan Percent" R 1 4} overscanPercent 1 addUserKnob {20 inputBbox l "BBox Data" n 1} inputBbox 0 addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set N7f3e26e0 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set N7f3e6330 [stack 0] push $N7f3e26e0 Crop { box {{curve} {curve} {input.width} {input.height}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N7f3e9f50 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set N7f3f5c30 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{input.bbox.r/2} {input.bbox.t/2}} shutteroffset centred name Transform1 xpos 120 ypos 555 } push $N7f3f5c30 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $N7f3e6330 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $N7f3e9f50 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N7f4342c0 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $N7f4342c0 NoOp { name OutputBBox1 selected true xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_BeautifulSkin.gizmo ================================================ Group { name BeautifulSkin tile_color 0xb2776dff note_font "Verdana Bold" note_font_color 0xffffffff selected true addUserKnob {20 BeautifulSkin} addUserKnob {41 channels l Channels T Merge1.also_merge} addUserKnob {41 size l "Dilate size" T Dilate5.size} addUserKnob {26 ""} addUserKnob {4 blurType l "Blur Type" M {Blur Defocus Median}} blurType Median addUserKnob {7 blurDefocusSize l "Blur/Defocus size" R 0 100} blurDefocusSize 5 addUserKnob {41 size_2 l "Median size" T Median2.size} addUserKnob {6 guiblur l "use blur in gui, switch to defocus/median at render time" +STARTLINE} guiblur true addUserKnob {26 ""} addUserKnob {41 mixMax l "mix Max back in" T Merge8.mix} addUserKnob {41 mixMin l "mix Min back in" T Merge7.mix} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge1.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge1.fringe} addUserKnob {41 mix T Merge1.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: T BeautifulSkin} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Inputmask xpos 626 ypos -370 number 1 } Input { inputs 0 name Input xpos 462 ypos -1126 } Dot { name Dot9 xpos 496 ypos -1018 } set Neb880d20 [stack 0] Dot { name Dot10 xpos 264 ypos -1018 } Dot { name Dot12 xpos 264 ypos -530 } set Neb885890 [stack 0] Dot { name Dot13 xpos 264 ypos -454 } set Neb8897b0 [stack 0] push $Neb885890 push $Neb880d20 Dilate { size 3 name Dilate5 xpos 462 ypos -959 } Dilate { size {{-parent.Dilate5.size i}} name Dilate6 xpos 462 ypos -895 } Dot { name Dot14 xpos 496 ypos -819 } set Neb8d7770 [stack 0] Blur { size {{parent.blurDefocusSize}} name Blur10 label "\[value size]" xpos 343 ypos -736 } set Neb8db490 [stack 0] push $Neb8d7770 Median { channels all size 2 ignore_top_line false name Median2 xpos 573 ypos -729 } push $Neb8d7770 Defocus { defocus {{parent.blurDefocusSize i}} name Defocus1 xpos 462 ypos -728 } push $Neb8db490 Switch { inputs 3 which {{parent.blurType i}} name Switch1 xpos 462 ypos -660 } Switch { inputs 2 which {{guiblur i}} name Switch2 xpos 462 ypos -602 } Merge2 { inputs 2 operation max also_merge all mix 0.5 name Merge8 xpos 462 ypos -534 } Merge2 { inputs 2 operation min also_merge all mix 0.2 name Merge7 xpos 462 ypos -458 } push $Neb8897b0 Dot { name Dot11 xpos 264 ypos -367 } Merge2 { inputs 2+1 operation copy Achannels none Bchannels none output none also_merge rgb name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 462 ypos -374 } Output { name Output1 xpos 462 ypos -225 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_BiasedSaturation.gizmo ================================================ Group { name BiasedSaturation tile_color 0x5c7fc0ff note_font "Verdana Bold" note_font_color 0xffffffff selected true addUserKnob {20 BiasedSaturation} addUserKnob {41 channels T MergeKeymix.also_merge} addUserKnob {26 ""} addUserKnob {41 source l "bias colour" T targetMult.source} addUserKnob {41 mode l "luminance math" T Saturation1.mode} addUserKnob {41 saturation T Saturation1.saturation} addUserKnob {7 restoreLuminance l "Restore Luminance"} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask -STARTLINE T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 unpremult l "(un)premult? by" T Unpremult1.alpha} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {20 info l Info} addUserKnob {26 createdBy l "Created By:" T "Paul Raeburn"} addUserKnob {26 creator l "Modified By:" T "Tony Lyons"} addUserKnob {26 desc l Description: t "desaturates towards target color" T BiasedSaturation} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Inputmask xpos 346 ypos 202 number 1 } Dot { name Dot5 label Mask note_font_size 41 xpos 380 ypos 577 } Dot { name Dot4 note_font_size 41 xpos 380 ypos 677 } Input { inputs 0 name Input xpos 0 ypos -269 } Dot { name Dot1 note_font_size 41 xpos 34 ypos -102 } set N544377f0 [stack 0] Unpremult { channels all alpha -rgba.alpha name Unpremult1 xpos 0 ypos -40 } set N54210d80 [stack 0] Dot { name Dot7 note_font_size 41 xpos -247 ypos -30 } Colorspace { channels all colorspace_out HSV name Colorspace3 label "\[value colorspace_in] >> \[value colorspace_out]" xpos -281 ypos 193 } Dot { name Dot6 note_font_size 41 xpos -247 ypos 287 } push $N54210d80 Multiply { value {{target/source} {target/source} {target/source} {target/source}} name targetMult xpos 0 ypos 49 addUserKnob {20 User} addUserKnob {19 source l "bias colour"} source {0.03229996562 0.1138856411 0.2395002097 0.218351528} addUserKnob {6 source_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {19 target} target {{(source.r*.3)+(source.g*.59)+(source.b*.11)}} addUserKnob {6 target_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Saturation { channels all saturation 0.5 unpremult -rgba.alpha name Saturation1 xpos 0 ypos 87 } Multiply { value {{1/targetMult.value} {1/targetMult.value} {1/targetMult.value} {1/targetMult.value}} name MultiBack xpos 0 ypos 125 } Dot { name Dot8 note_font_size 41 xpos 34 ypos 212 } set N5476c040 [stack 0] Colorspace { channels all colorspace_out HSV name Colorspace2 label "\[value colorspace_in] >> \[value colorspace_out]" xpos -137 ypos 196 } Copy { inputs 2 from0 rgba.blue to0 rgba.blue name Copy1 xpos -137 ypos 277 } Colorspace { channels all colorspace_in HSV name Colorspace1 label "\[value colorspace_in] >> \[value colorspace_out]" xpos -137 ypos 337 } push $N5476c040 Dissolve { inputs 2 which {{parent.restoreLuminance}} name Dissolve1 label "\[value which]" xpos 0 ypos 337 } Dot { name Dot9 note_font_size 41 xpos 34 ypos 459 } Premult { channels all alpha {{{parent.Unpremult1.alpha}}} name Premult1 xpos 0 ypos 521 } Dot { name Dot17 label A note_font_size 41 xpos 34 ypos 589 } push $N544377f0 Dot { name Dot2 note_font_size 41 xpos -389 ypos -102 } Dot { name Dot18 label B note_font_size 41 xpos -389 ypos 586 } Dot { name Dot3 note_font_size 41 xpos -389 ypos 677 } Merge2 { inputs 2+1 operation copy bbox B Achannels none Bchannels none output none also_merge rgb mix 0.5 name MergeKeymix xpos 0 ypos 670 } Output { name Output1 xpos 0 ypos 851 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_BinaryAlpha.gizmo ================================================ Group { name BinaryAlpha tile_color 0x2a2a2aff label "(\[value an] --> \[value output1])" note_font Verdana note_font_color 0xfffff9ff selected true addUserKnob {20 BinaryAlpha} addUserKnob {4 an l Analyze: M {rgb rgba alpha "" "" ""}} addUserKnob {4 output1 l Output: M {rgba alpha "" "" "" ""}} output1 alpha addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Analyzes channel input and creates a binary result 0 or 1 and outputs it into output channel" T BinaryAlpha} addUserKnob {26 ver l Version: T v03} } Input { inputs 0 name Input xpos -398 ypos 275 } Expression { temp_name0 rgb_an temp_expr0 "r !=0 || g!=0 || b!=0?1:0" temp_name1 rgba_an temp_expr1 "r!=0 || g!=0 || b!=0 || a!=0?1:0" temp_name2 alpha_an temp_expr2 a!=0?1:0 expr3 "parent.an == 0 ? rgb_an : parent.an == 1 ? rgba_an : alpha_an" name Expression xpos -398 ypos 341 } Shuffle { red alpha green alpha blue alpha name Shuffle label "\[value in]" xpos -398 ypos 367 disable {{parent.output1}} } Output { name Output1 xpos -398 ypos 456 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_BlacksExpon.gizmo ================================================ Group { name BlacksExpon knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"steps\": \n s = int(k.value())\n if s<1:\n k.setValue(1)\n else:\n with n:\n ebs1 = nuke.toNode(\"ExponBlurSimple\")\n ebs2 = nuke.toNode(\"ExponBlurSimple1\")\n ebs1.knob('steps').setValue(s)\n ebs2.knob('steps').setValue(s)\n \n both = \[ebs1, ebs2]\n for ebs in both:\n with ebs: \n start = nuke.toNode(\"Start\")\n end = nuke.toNode(\"End\")\n b1 = nuke.toNode(\"Blur1\")\n merge = nuke.toNode(\"Merge1\")\n AvgMult = nuke.toNode(\"AverageMult\")\n \n b1x = b1.xpos()\n b1y = b1.ypos()\n b1n = b1.name()\n \n steps = int(n.knob('steps').getValue())\n size = ebs1.knob('size').getValue()\n mult = ebs1.knob('mult').getValue()\n \n #b1.setInput(0, start)\n for i in range(1,merge.inputs()):\n merge.setInput(i,None)\n merge.setInput(0, b1)\n \[nuke.delete(i) for i in nuke.allNodes() if i.xpos()>start.xpos()]\n for i in range(1,steps):\n # Blur\n b = nuke.nodes.Blur()\n b.setXYpos(b1x+i*100,b1y)\n b.setInput(0,start)\n b\[\"channels\"].setValue(\"rgba\")\n b\[\"crop\"].setValue(0)\n b\[\"size\"].setValue(0, 1)\n b\[\"size\"].setExpression(\"(Blur1.size)*(mult)**%s\"%(i))\n b\[\"label\"].setValue(\"\[value size]\")\n merge.setInput(i if i<2 else i+1, b)\n AvgMult\['whitepoint'].setValue(i if i<2 else i+1)\n \n\n \n\n" tile_color 0x262626ff note_font "Verdana Bold Bold Bold Bold Bold Bold Bold" note_font_color 0xccccccff selected true addUserKnob {20 BlacksExpon} addUserKnob {41 maskChannelInput l "area mask" T Merge1.maskChannelInput} addUserKnob {41 invert_mask l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 operation2 l operation T Keyer1.operation} addUserKnob {6 previewKey l "Preview Key" -STARTLINE} addUserKnob {6 invertKey l "invert key" -STARTLINE} invertKey true addUserKnob {7 blackpoint} blackpoint 0.1 addUserKnob {7 whitepoint} whitepoint 0.2 addUserKnob {26 ""} addUserKnob {41 steps l " Steps Min" T ExponBlurSimple.steps} addUserKnob {41 steps_1 l " Steps Over" -STARTLINE T ExponBlurSimple1.steps} addUserKnob {7 size l Size R 0 20} size 3 addUserKnob {7 mult l Multiply R 1 8} mult 2 addUserKnob {14 postBlur R 0 100} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput_1 l "" -STARTLINE T Merge2.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge2.inject} addUserKnob {41 invert_mask_1 l invert -STARTLINE T Merge2.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge2.fringe} addUserKnob {41 mix T Merge2.mix} addUserKnob {41 bbox l "set bbox to " T Merge2.bbox} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: T BlacksExpon} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Inputmask xpos 198 ypos 1042 number 2 } Input { inputs 0 name Inputarea xpos 371 ypos 371 number 1 } Input { inputs 0 name Inputimg xpos 52 ypos 109 } Dot { name Dot1 note_font_size 41 xpos 86 ypos 202 } set N32d06f00 [stack 0] Keyer { operation "luminance key" name Keyer1 xpos 177 ypos 192 } Shuffle { red alpha green alpha blue alpha name Shuffle1 tile_color 0xffffffff xpos 177 ypos 230 } Grade { channels rgba blackpoint {{parent.blackpoint}} whitepoint {{parent.whitepoint}} white_clamp true name Grade1 xpos 177 ypos 272 } Invert { channels rgba name Invert1 xpos 177 ypos 298 disable {{!parent.invertKey}} } Constant { inputs 0 color 1 name Constant1 xpos 299 ypos 303 postage_stamp false } Merge2 { inputs 2+1 operation copy name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 177 ypos 371 } Dot { name Dot2 note_font_size 41 xpos 211 ypos 450 } set N9ad740a0 [stack 0] Dot { name Dot3 note_font_size 41 xpos 211 ypos 984 } push $N9ad740a0 push $N32d06f00 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 52 ypos 440 } Premult { name Premult1 xpos 52 ypos 478 } Unpremult { name Unpremult1 xpos 52 ypos 504 } Group { name BinaryAlpha tile_color 0x2a2a2aff label "(\[value an] --> \[value output1])" note_font Verdana note_font_color 0xfffff9ff xpos 52 ypos 580 addUserKnob {20 BinaryAlpha} addUserKnob {4 an l Analyze: M {rgb rgba alpha "" "" ""}} addUserKnob {4 output1 l Output: M {rgba alpha "" "" "" ""}} output1 alpha addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Analyzes channel input and creates a binary result 0 or 1 and outputs it into output channel" T BinaryAlpha} addUserKnob {26 ver l Version: T v03} } Input { inputs 0 name Input xpos -398 ypos 275 } Expression { temp_name0 rgb_an temp_expr0 "r !=0 || g!=0 || b!=0?1:0" temp_name1 rgba_an temp_expr1 "r!=0 || g!=0 || b!=0 || a!=0?1:0" temp_name2 alpha_an temp_expr2 a!=0?1:0 expr3 "parent.an == 0 ? rgb_an : parent.an == 1 ? rgba_an : alpha_an" name Expression xpos -398 ypos 341 } Shuffle { red alpha green alpha blue alpha name Shuffle label "\[value in]" xpos -398 ypos 367 disable {{parent.output1}} } Output { name Output1 xpos -398 ypos 456 } end_group Group { name ExponBlurSimple onCreate "n = nuke.thisNode()\nn.knob('size').setRange(-100, 100)\nn.knob('adjustBBoxPixels').setRange(0, 400)\nn.knob('adjustBBoxPercent').setRange(1, 2)\nn.knob('safeBBoxPixels').setRange(0, 400)\nn.knob('safeBBoxPercent').setRange(1, 2)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"includeOriginal\":\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n \n else:\n merge.setInput(steps+1, None)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps)\n \nelif k.name() == \"steps\":\n \n s = int(k.value())\n if s<1:\n k.setValue(1)\n else:\n start = nuke.toNode(\"Start\")\n end = nuke.toNode(\"End\")\n b1 = nuke.toNode(\"Blur1\")\n merge = nuke.toNode(\"Merge1\")\n AvgMult = nuke.toNode(\"AverageMult\")\n \n b1x = b1.xpos()\n b1y = b1.ypos()\n b1n = b1.name()\n \n steps = int(n.knob('steps').getValue())\n size = n.knob('size').getValue()\n mult = n.knob('mult').getValue()\n \n #b1.setInput(0, start)\n for i in range(1,merge.inputs()):\n merge.setInput(i,None)\n merge.setInput(0, b1)\n \[nuke.delete(i) for i in nuke.allNodes() if i.xpos()>start.xpos()]\n for i in range(1,steps):\n # Blur\n b = nuke.nodes.Blur()\n b.setXYpos(b1x+i*100,b1y)\n b.setInput(0,start)\n b\[\"channels\"].setValue(\"rgba\")\n b\[\"crop\"].setValue(0)\n b\[\"size\"].setValue(0, 1)\n b\[\"size\"].setExpression(\"(Blur1.size)*(mult)**%s\"%(i))\n b\[\"label\"].setValue(\"\[value size]\")\n merge.setInput(i if i<2 else i+1, b)\n AvgMult\['whitepoint'].setValue(i if i<2 else i+1)\n \n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n \nelif k.name() == \"output2\":\n if n.knob(\"output2\").getValue() == 4:\n n.knob('AvgMaxOriginal').setVisible(True)\n else:\n n.knob('AvgMaxOriginal').setVisible(False)\n \nelif k.name() == \"safeBBox\":\n if n.knob(\"safeBBox\").getValue() == 0:\n n.knob('safeBBoxText').setVisible(False)\n n.knob('safetyBBoxMethod').setVisible(False)\n n.knob('safeBBoxPixels').setVisible(False)\n n.knob('safeBBoxPercent').setVisible(False)\n \n elif n.knob(\"safeBBox\").getValue() == 1:\n n.knob('safetyBBoxMethod').setVisible(True)\n n.knob('safeBBoxText').setVisible(True)\n if n.knob('safetyBBoxMethod').value() == \"pixels\":\n n.knob('safeBBoxPixels').setVisible(True)\n n.knob('safeBBoxPercent').setVisible(False)\n elif n.knob('safetyBBoxMethod').value() == \"percent\":\n n.knob('safeBBoxPixels').setVisible(False)\n n.knob('safeBBoxPercent').setVisible(True)\n \nelif k.name() == \"safetyBBoxMethod\":\n if n.knob(\"safetyBBoxMethod\").value() == \"pixels\":\n n.knob('safeBBoxPixels').setVisible(True)\n n.knob('safeBBoxPercent').setVisible(False)\n elif n.knob(\"safetyBBoxMethod\").value() == \"percent\":\n n.knob('safeBBoxPixels').setVisible(False)\n n.knob('safeBBoxPercent').setVisible(True)\n \nelif k.name() == \"adjustBBoxExtra\":\n if n.knob(\"adjustBBoxExtra\").value() == \"pixels\":\n n.knob('adjustBBoxPixels').setVisible(True)\n n.knob('adjustBBoxPercent').setVisible(False)\n elif n.knob(\"adjustBBoxExtra\").value() == \"percent\":\n n.knob('adjustBBoxPixels').setVisible(False)\n n.knob('adjustBBoxPercent').setVisible(True)\n" tile_color 0xcc804eff label "(\[value output2])" note_font "Verdana Bold Bold Bold Bold Bold Bold Bold" note_font_color 0xffffffff xpos 52 ypos 645 addUserKnob {20 ExponBlurSimple} addUserKnob {41 channels T Shuffle1.in} addUserKnob {41 maskChannelMask_1 l area T Multiply1.maskChannelMask} addUserKnob {41 inject_1 l inject -STARTLINE T Multiply1.inject} addUserKnob {41 invert_mask_1 l invert -STARTLINE T Multiply1.invert_mask} addUserKnob {41 fringe_1 l fringe -STARTLINE T Multiply1.fringe} addUserKnob {26 ""} addUserKnob {4 output2 l Operation: M {Screen Plus Over Hypot Average Max Min "" "" "" "" ""}} output2 Min addUserKnob {3 steps l " Steps" -STARTLINE} steps 8 addUserKnob {3 mergeNumber -STARTLINE +INVISIBLE} mergeNumber {{"output2 == 0 ? 25 : output2 == 1 ? 24 : output2 == 2 ? 22 : output2 == 3 ? 13 : output2 == 4 ? 24 : output2 == 5 ? 17 : 18"}} addUserKnob {26 text l " " -STARTLINE T " "} addUserKnob {6 includeOriginal l "Include Original?" -STARTLINE} includeOriginal true addUserKnob {6 AvgMaxOriginal l "Use Max of Average and Original" +HIDDEN +STARTLINE} addUserKnob {14 size l Size R -100 100} size {{parent.ExponBlurSimple1.size} {parent.ExponBlurSimple1.size}} addUserKnob {7 mult l Multiplier R 1 8} mult {{parent.mult}} addUserKnob {14 postBlur l "Post Blur" R 0 100} postBlur {0 0} addUserKnob {26 text_1 l " " -STARTLINE T " "} addUserKnob {26 ""} addUserKnob {20 bboxControl l "BBox Control" n 1} bboxControl 0 addUserKnob {26 text_2 l " " T " "} addUserKnob {4 bbox l "BBox: " -STARTLINE M {union intersectionMask A B "input format" "" "" "" "" "" "" "" "" "" "" "" ""}} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {6 safeBBox l "Safe BBox" t "If the output BBox is larger than the input format and the input box combined. the result will be max of the input/format bbox plus a safety \"buffer\" in pixels or percent \n\nTurning off might make your BBox grow exponentially with high blur values" -STARTLINE} safeBBox true addUserKnob {26 safeBBoxText l "" +STARTLINE T " "} addUserKnob {4 safetyBBoxMethod l "Safe BBox Buffer " -STARTLINE M {pixels percent "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""}} safetyBBoxMethod percent addUserKnob {14 safeBBoxPercent l "" -STARTLINE R 1 2} safeBBoxPercent 1.1 addUserKnob {26 text_3 l "" +STARTLINE T " "} addUserKnob {4 adjustBBoxExtra l "Extra BBox Adjust" -STARTLINE M {pixels percent "" "" "" "" "" "" "" "" "" "" "" "" ""}} addUserKnob {14 adjustBBoxPixels l "" -STARTLINE R 0 400} addUserKnob {26 ""} addUserKnob {20 endGroup n -1} addUserKnob {41 maskChannelMask l mask T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {14 safeBBoxPixels l "" +STARTLINE +HIDDEN R 0 400} safeBBoxPixels 100 addUserKnob {14 adjustBBoxPercent l "" -STARTLINE +HIDDEN R 1 2} adjustBBoxPercent 1 addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Add description and tooltip for gizmo" T ExponBlurSimple} addUserKnob {26 ver l Version: T v02} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x535e5a00 label "BBox Management" note_font_size 30 note_font_color 0xffffffff xpos -529 ypos 492 bdwidth 341 bdheight 525 } Input { inputs 0 name Inputimg xpos 0 ypos -969 } Dot { name Dot16 note_font_size 41 xpos 34 ypos -802 } set N9ade9da0 [stack 0] Dot { name Dot2 note_font_size 41 xpos -367 ypos -802 } Dot { name Dot18 label B note_font_size 41 xpos -367 ypos 434 } Dot { name Dot11 note_font_size 41 xpos -367 ypos 623 } set N9adf8000 [stack 0] Dot { name Dot3 note_font_size 41 xpos -367 ypos 675 } set N9adfcc00 [stack 0] Dot { name Dot8 note_font_size 41 xpos -463 ypos 675 } Dot { name Dot15 note_font_size 41 xpos -463 ypos 831 } push $N9ade9da0 Dot { name Dot1 note_font_size 41 xpos 461 ypos -802 } Shuffle { name Shuffle1 label "\[value in]" xpos 427 ypos -756 } Remove { operation keep channels rgba name Remove1 xpos 427 ypos -718 } Dot { name Dot21 note_font_size 41 xpos 461 ypos -597 } set N9ae289a0 [stack 0] Invert { channels rgba name Invert1 xpos 695 ypos -601 disable {{"parent.size < 0 ? 0 : 1"}} } set N9ae2d530 [stack 0] Dot { name Dot4 note_font_size 41 xpos 540 ypos -543 } NoOp { name Original xpos 506 ypos -327 } set N9ac4da10 [stack 0] Dot { name Dot5 note_font_size 41 xpos 540 ypos 14 } Crop { inputs 0 box {{input.format.x} {input.format.y} {input.format.r} {input.format.t}} reformat true crop false name Crop1 xpos 210 ypos -750 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } AddChannels { channels rgba name AddChannels2 xpos 210 ypos -724 } push $N9ade9da0 Merge2 { inputs 2 name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 83 ypos -671 } NoOp { name BBoxInput xpos 83 ypos -628 addUserKnob {20 User} addUserKnob {15 bbox} bbox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} } push $N9ac4da10 Input { inputs 0 name Inputarea xpos 289 ypos -638 number 2 } AddChannels { channels alpha color 1 name AddChannels1 xpos 289 ypos -580 } Invert { channels rgba name Invert3 xpos 289 ypos -503 } push $N9ae2d530 Multiply { inputs 1+1 channels rgba value 0 name Multiply1 label "\[value value]" xpos 695 ypos -509 } NoOp { name Start xpos 695 ypos -450 } set N9aca5f90 [stack 0] Blur { channels rgba size {{(Blur1.size)*(mult)**7} {(Blur1.size)*(mult)**7}} crop false name Blur8 label "\[value size]" xpos 1395 ypos -370 } push $N9aca5f90 Blur { channels rgba size {{(Blur1.size)*(mult)**6} {(Blur1.size)*(mult)**6}} crop false name Blur7 label "\[value size]" xpos 1295 ypos -370 } push $N9aca5f90 Blur { channels rgba size {{(Blur1.size)*(mult)**5} {(Blur1.size)*(mult)**5}} crop false name Blur6 label "\[value size]" xpos 1195 ypos -370 } push $N9aca5f90 Blur { channels rgba size {{(Blur1.size)*(mult)**4} {(Blur1.size)*(mult)**4}} crop false name Blur5 label "\[value size]" xpos 1095 ypos -370 } push $N9aca5f90 Blur { channels rgba size {{(Blur1.size)*(mult)**3} {(Blur1.size)*(mult)**3}} crop false name Blur4 label "\[value size]" xpos 995 ypos -370 } push $N9aca5f90 Blur { channels rgba size {{(Blur1.size)*(mult)**2} {(Blur1.size)*(mult)**2}} crop false name Blur3 label "\[value size]" xpos 895 ypos -370 } push 0 push $N9aca5f90 Blur { channels rgba size {{(Blur1.size)*(mult)**1} {(Blur1.size)*(mult)**1}} crop false name Blur2 label "\[value size]" xpos 795 ypos -370 } push $N9aca5f90 Blur { channels rgba size {{parent.size.w} {parent.size.h}} name Blur1 label "\[value size]" xpos 695 ypos -370 } Merge2 { inputs 9+1 operation {{parent.mergeNumber}} name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 695 ypos -256 } NoOp { name End xpos 695 ypos -230 } set N9ad292a0 [stack 0] CopyBBox { inputs 2 name CopyBBox1 xpos 585 ypos -175 } Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" tile_color 0xa57aaaff note_font "Verdana Bold Bold Bold Bold Bold Bold Bold" note_font_color 0xffffffff xpos 585 ypos -151 addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} overscanType {{parent.safetyBBoxMethod}} addUserKnob {14 overscan l Overscan R 0 400} overscan {{parent.safeBBoxPixels} {parent.safeBBoxPixels}} addUserKnob {14 overscanPercent l "Overscan Percent" R 1 4} overscanPercent {{parent.safeBBoxPercent} {parent.safeBBoxPercent}} addUserKnob {20 inputBbox l "BBox Data" n 1} addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set N9ab58640 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set N9ab5d180 [stack 0] push $N9ab58640 Crop { box {{parent.inputBBox} {parent.inputBBox} {parent.inputBBox} {parent.inputBBox}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N9ab61d00 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set N9ab6d0f0 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{((input.bbox.r-input.bbox.x)/2)+input.bbox.x} {((input.bbox.t-input.bbox.y)/2)+input.bbox.y}} shutteroffset centred name Transform1 selected true xpos 120 ypos 553 } push $N9ab6d0f0 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $N9ab5d180 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $N9ab61d00 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N9abb8db0 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $N9abb8db0 NoOp { name OutputBBox1 xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group push $N9ad292a0 Merge2 { inputs 2 bbox intersection name Merge4 xpos 585 ypos -127 } push $N9ad292a0 CopyBBox { inputs 2 name CopyBBox2 xpos 585 ypos -101 } push $N9ad292a0 Switch { inputs 2 which {{"parent.safeBBox && ((BBoxResult.bbox.x < BBoxInput.bbox.x || BBoxResult.bbox.y < BBoxInput.bbox.y || BBoxResult.bbox.r > BBoxInput.bbox.r || BBoxResult.bbox.t > BBoxInput.bbox.t))"}} name Switch2 label "\[value which]" xpos 695 ypos -106 } Grade { channels rgba whitepoint 9 black_clamp false name AverageMult xpos 695 ypos -37 disable {{"output2 == 4 ? 0 : 1"}} } Merge2 { inputs 2 operation max name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 695 ypos 10 disable {{"output2 == 4 && includeOriginal == 1 && AvgMaxOriginal == 1 ? 0 : 1"}} } Blur { channels rgba size {{postBlur} {postBlur}} name BlurOriginal label "\[value size]" xpos 695 ypos 59 } Invert { channels rgba name Invert2 xpos 695 ypos 97 disable {{"parent.size < 0 ? 0 : 1"}} } push $N9ae289a0 Switch { inputs 2 which {{"parent.size == 0 ? 0 : 1"}} name Switch1 label "\[value which]" xpos 427 ypos 93 } push $N9ade9da0 ShuffleCopy { inputs 2 in2 none black red white green red2 blue green2 alpha out none out2 {{{parent.Shuffle1.in}}} name ShuffleCopy1 xpos 0 ypos 97 } Dot { name Dot17 label A note_font_size 41 xpos 34 ypos 455 } Dot { name Dot7 note_font_size 41 xpos 34 ypos 585 } set N9aa53770 [stack 0] Dot { name Dot12 note_font_size 41 xpos -260 ypos 585 } Dot { name Dot13 note_font_size 41 xpos -260 ypos 799 } push $N9adf8000 Input { inputs 0 name Inputmask xpos 346 ypos 325 number 1 } Dot { name Dot19 label Mask note_font_size 41 xpos 380 ypos 438 } set N9aa66520 [stack 0] Dot { name Dot20 note_font_size 41 xpos 270 ypos 438 } push $N9aa53770 Merge2 { inputs 2 bbox intersection Achannels {rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue rgba.alpha} output {rgba.red -rgba.green -rgba.blue rgba.alpha} name MergeIntersection xpos 236 ypos 575 disable {{"!\[exists parent.input1]"}} } Merge2 { inputs 2 Achannels {rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue rgba.alpha} output {rgba.red -rgba.green -rgba.blue rgba.alpha} name MergeUnion xpos 236 ypos 613 disable {{"!\[exists parent.input1]"}} } Dot { name Dot6 label "intersection\nof (Mask and A) + B" note_font_size 14 note_font_color 0xffffffff xpos 270 ypos 773 } push $N9aa66520 Dot { name Dot10 note_font_size 41 xpos 380 ypos 675 } push $N9aa53770 push $N9adfcc00 Merge2 { inputs 2+1 operation copy Achannels none Bchannels none output none also_merge all name MergeKeymix xpos 0 ypos 665 } Dot { name Dot14 note_font_size 41 xpos 34 ypos 747 } set N9aaaa4f0 [stack 0] push $N9adfcc00 CopyBBox { inputs 2 name CopyBBoxUnion xpos -401 ypos 743 disable {{parent.bbox==0?0:1}} } CopyBBox { inputs 2 name CopyBBoxIntersection xpos -401 ypos 769 disable {{"parent.bbox==1 ? 0 : 1"}} } CopyBBox { inputs 2 name CopyBBoxA xpos -401 ypos 795 disable {{"parent.bbox==2 ? 0 : 1"}} } CopyBBox { inputs 2 name CopyBBoxB xpos -401 ypos 827 disable {{"parent.bbox==3 ? 0 : 1"}} } Crop { box {0 0 {parent.width} {parent.height}} crop false name CopyBBoxFormat xpos -401 ypos 853 disable {{"parent.bbox==4 ? 0 : 1"}} addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N9aace0b0 [stack 0] Transform { scale {{parent.adjustBBoxPercent} {parent.adjustBBoxPercent}} center {{((input.bbox.r-input.bbox.x)/2)+input.bbox.x} {((input.bbox.t-input.bbox.y)/2)+input.bbox.y}} black_outside false shutteroffset centred name TransformBBoxAdjustPercent xpos -516 ypos 898 } push $N9aace0b0 AdjBBox { numpixels {{parent.adjustBBoxPixels} {parent.adjustBBoxPixels}} name AdjBBoxPixels xpos -401 ypos 901 } Switch { inputs 2 which {{adjustBBoxExtra}} name Switch3 xpos -401 ypos 940 } Dot { name Dot9 note_font_size 41 xpos -367 ypos 993 } push $N9aaaa4f0 CopyBBox { inputs 2 name CopyBBox xpos 0 ypos 989 } BlackOutside { name BlackOutside1 xpos 0 ypos 1015 disable {{!parent.blackOutside}} } Output { name Output1 xpos 0 ypos 1155 } push $N9ad292a0 NoOp { name BBoxResult xpos 588 ypos -223 addUserKnob {20 User} addUserKnob {15 bbox} bbox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} } end_group Group { name BinaryAlpha1 tile_color 0x2a2a2aff label "(\[value an] --> \[value output1])" note_font Verdana note_font_color 0xfffff9ff xpos 52 ypos 741 addUserKnob {20 BinaryAlpha} addUserKnob {4 an l Analyze: M {rgb rgba alpha "" "" ""}} addUserKnob {4 output1 l Output: M {rgba alpha "" "" "" ""}} output1 alpha addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Analyzes channel input and creates a binary result 0 or 1 and outputs it into output channel" T BinaryAlpha} addUserKnob {26 ver l Version: T v03} } Input { inputs 0 name Input xpos -398 ypos 275 } Expression { temp_name0 rgb_an temp_expr0 "r !=0 || g!=0 || b!=0?1:0" temp_name1 rgba_an temp_expr1 "r!=0 || g!=0 || b!=0 || a!=0?1:0" temp_name2 alpha_an temp_expr2 a!=0?1:0 expr3 "parent.an == 0 ? rgb_an : parent.an == 1 ? rgba_an : alpha_an" name Expression xpos -398 ypos 341 } Shuffle { red alpha green alpha blue alpha name Shuffle label "\[value in]" xpos -398 ypos 367 disable {{parent.output1}} } Output { name Output1 xpos -398 ypos 456 } end_group Group { name ExponBlurSimple1 onCreate "n = nuke.thisNode()\nn.knob('size').setRange(-100, 100)\nn.knob('adjustBBoxPixels').setRange(0, 400)\nn.knob('adjustBBoxPercent').setRange(1, 2)\nn.knob('safeBBoxPixels').setRange(0, 400)\nn.knob('safeBBoxPercent').setRange(1, 2)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"includeOriginal\":\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n \n else:\n merge.setInput(steps+1, None)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps)\n \nelif k.name() == \"steps\":\n \n s = int(k.value())\n if s<1:\n k.setValue(1)\n else:\n start = nuke.toNode(\"Start\")\n end = nuke.toNode(\"End\")\n b1 = nuke.toNode(\"Blur1\")\n merge = nuke.toNode(\"Merge1\")\n AvgMult = nuke.toNode(\"AverageMult\")\n \n b1x = b1.xpos()\n b1y = b1.ypos()\n b1n = b1.name()\n \n steps = int(n.knob('steps').getValue())\n size = n.knob('size').getValue()\n mult = n.knob('mult').getValue()\n \n #b1.setInput(0, start)\n for i in range(1,merge.inputs()):\n merge.setInput(i,None)\n merge.setInput(0, b1)\n \[nuke.delete(i) for i in nuke.allNodes() if i.xpos()>start.xpos()]\n for i in range(1,steps):\n # Blur\n b = nuke.nodes.Blur()\n b.setXYpos(b1x+i*100,b1y)\n b.setInput(0,start)\n b\[\"channels\"].setValue(\"rgba\")\n b\[\"crop\"].setValue(0)\n b\[\"size\"].setValue(0, 1)\n b\[\"size\"].setExpression(\"(Blur1.size)*(mult)**%s\"%(i))\n b\[\"label\"].setValue(\"\[value size]\")\n merge.setInput(i if i<2 else i+1, b)\n AvgMult\['whitepoint'].setValue(i if i<2 else i+1)\n \n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n \nelif k.name() == \"output2\":\n if n.knob(\"output2\").getValue() == 4:\n n.knob('AvgMaxOriginal').setVisible(True)\n else:\n n.knob('AvgMaxOriginal').setVisible(False)\n \nelif k.name() == \"safeBBox\":\n if n.knob(\"safeBBox\").getValue() == 0:\n n.knob('safeBBoxText').setVisible(False)\n n.knob('safetyBBoxMethod').setVisible(False)\n n.knob('safeBBoxPixels').setVisible(False)\n n.knob('safeBBoxPercent').setVisible(False)\n \n elif n.knob(\"safeBBox\").getValue() == 1:\n n.knob('safetyBBoxMethod').setVisible(True)\n n.knob('safeBBoxText').setVisible(True)\n if n.knob('safetyBBoxMethod').value() == \"pixels\":\n n.knob('safeBBoxPixels').setVisible(True)\n n.knob('safeBBoxPercent').setVisible(False)\n elif n.knob('safetyBBoxMethod').value() == \"percent\":\n n.knob('safeBBoxPixels').setVisible(False)\n n.knob('safeBBoxPercent').setVisible(True)\n \nelif k.name() == \"safetyBBoxMethod\":\n if n.knob(\"safetyBBoxMethod\").value() == \"pixels\":\n n.knob('safeBBoxPixels').setVisible(True)\n n.knob('safeBBoxPercent').setVisible(False)\n elif n.knob(\"safetyBBoxMethod\").value() == \"percent\":\n n.knob('safeBBoxPixels').setVisible(False)\n n.knob('safeBBoxPercent').setVisible(True)\n \nelif k.name() == \"adjustBBoxExtra\":\n if n.knob(\"adjustBBoxExtra\").value() == \"pixels\":\n n.knob('adjustBBoxPixels').setVisible(True)\n n.knob('adjustBBoxPercent').setVisible(False)\n elif n.knob(\"adjustBBoxExtra\").value() == \"percent\":\n n.knob('adjustBBoxPixels').setVisible(False)\n n.knob('adjustBBoxPercent').setVisible(True)\n" tile_color 0xcc804eff label "(\[value output2])" note_font "Verdana Bold Bold Bold Bold Bold Bold Bold" note_font_color 0xffffffff selected true xpos 52 ypos 823 addUserKnob {20 ExponBlurSimple} addUserKnob {41 channels T Shuffle1.in} addUserKnob {41 maskChannelMask_1 l area T Multiply1.maskChannelMask} addUserKnob {41 inject_1 l inject -STARTLINE T Multiply1.inject} addUserKnob {41 invert_mask_1 l invert -STARTLINE T Multiply1.invert_mask} addUserKnob {41 fringe_1 l fringe -STARTLINE T Multiply1.fringe} addUserKnob {26 ""} addUserKnob {4 output2 l Operation: M {Screen Plus Over Hypot Average Max Min "" "" "" "" ""}} output2 Over addUserKnob {3 steps l " Steps" -STARTLINE} steps 8 addUserKnob {3 mergeNumber -STARTLINE +INVISIBLE} mergeNumber {{"output2 == 0 ? 25 : output2 == 1 ? 24 : output2 == 2 ? 22 : output2 == 3 ? 13 : output2 == 4 ? 24 : output2 == 5 ? 17 : 18"}} addUserKnob {26 text l " " -STARTLINE T " "} addUserKnob {6 includeOriginal l "Include Original?" -STARTLINE} addUserKnob {6 AvgMaxOriginal l "Use Max of Average and Original" +HIDDEN +STARTLINE} addUserKnob {14 size l Size R -100 100} size {{parent.size} {parent.size}} addUserKnob {7 mult l Multiplier R 1 8} mult {{parent.mult}} addUserKnob {26 text_1 l " " T " "} addUserKnob {14 postBlur l "Post Blur" R 0 100} postBlur {{parent.postBlur} {parent.postBlur}} addUserKnob {26 ""} addUserKnob {20 bboxControl l "BBox Control" n 1} bboxControl 0 addUserKnob {26 text_2 l " " T " "} addUserKnob {4 bbox l "BBox: " -STARTLINE M {union intersectionMask A B "input format" "" "" "" "" "" "" "" "" "" "" "" ""}} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {6 safeBBox l "Safe BBox" t "If the output BBox is larger than the input format and the input box combined. the result will be max of the input/format bbox plus a safety \"buffer\" in pixels or percent \n\nTurning off might make your BBox grow exponentially with high blur values" -STARTLINE} safeBBox true addUserKnob {26 safeBBoxText l "" +STARTLINE T " "} addUserKnob {4 safetyBBoxMethod l "Safe BBox Buffer " -STARTLINE M {pixels percent "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""}} safetyBBoxMethod percent addUserKnob {14 safeBBoxPercent l "" -STARTLINE R 1 2} safeBBoxPercent 1.1 addUserKnob {26 text_3 l "" +STARTLINE T " "} addUserKnob {4 adjustBBoxExtra l "Extra BBox Adjust" -STARTLINE M {pixels percent "" "" "" "" "" "" "" "" "" "" "" "" ""}} addUserKnob {14 adjustBBoxPixels l "" -STARTLINE R 0 400} addUserKnob {26 ""} addUserKnob {20 endGroup n -1} addUserKnob {41 maskChannelMask l mask T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {14 safeBBoxPixels l "" +STARTLINE +HIDDEN R 0 400} safeBBoxPixels 100 addUserKnob {14 adjustBBoxPercent l "" -STARTLINE +HIDDEN R 1 2} adjustBBoxPercent 1 addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Add description and tooltip for gizmo" T ExponBlurSimple} addUserKnob {26 ver l Version: T v02} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x535e5a00 label "BBox Management" note_font_size 30 note_font_color 0xffffffff xpos -529 ypos 492 bdwidth 341 bdheight 525 } Input { inputs 0 name Inputimg xpos 0 ypos -969 } Dot { name Dot16 note_font_size 41 xpos 34 ypos -802 } set N9a974650 [stack 0] Dot { name Dot2 note_font_size 41 xpos -367 ypos -802 } Dot { name Dot18 label B note_font_size 41 xpos -367 ypos 434 } Dot { name Dot11 note_font_size 41 xpos -367 ypos 623 } set N9a9828b0 [stack 0] Dot { name Dot3 note_font_size 41 xpos -367 ypos 675 } set N9a9874b0 [stack 0] Dot { name Dot8 note_font_size 41 xpos -463 ypos 675 } Dot { name Dot15 note_font_size 41 xpos -463 ypos 831 } push $N9a974650 Dot { name Dot1 note_font_size 41 xpos 461 ypos -802 } Shuffle { name Shuffle1 label "\[value in]" xpos 427 ypos -756 } Remove { operation keep channels rgba name Remove1 xpos 427 ypos -718 } Dot { name Dot21 note_font_size 41 xpos 461 ypos -597 } set N9a9b3250 [stack 0] Invert { channels rgba name Invert1 xpos 695 ypos -601 disable {{"parent.size < 0 ? 0 : 1"}} } set N9a9b7de0 [stack 0] Dot { name Dot4 note_font_size 41 xpos 540 ypos -543 } NoOp { name Original xpos 506 ypos -327 } Dot { name Dot5 note_font_size 41 xpos 540 ypos 14 } Crop { inputs 0 box {{input.format.x} {input.format.y} {input.format.r} {input.format.t}} reformat true crop false name Crop1 xpos 210 ypos -750 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } AddChannels { channels rgba name AddChannels2 xpos 210 ypos -724 } push $N9a974650 Merge2 { inputs 2 name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 83 ypos -671 } NoOp { name BBoxInput xpos 83 ypos -628 addUserKnob {20 User} addUserKnob {15 bbox} bbox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} } Input { inputs 0 name Inputarea xpos 289 ypos -638 number 2 } AddChannels { channels alpha color 1 name AddChannels1 xpos 289 ypos -580 } Invert { channels rgba name Invert3 xpos 289 ypos -503 } push $N9a9b7de0 Multiply { inputs 1+1 channels rgba value 0 name Multiply1 label "\[value value]" xpos 695 ypos -509 } NoOp { name Start xpos 695 ypos -450 } set N9aa20930 [stack 0] Blur { channels rgba size {{(Blur1.size)*(mult)**7} {(Blur1.size)*(mult)**7}} crop false name Blur8 label "\[value size]" xpos 1395 ypos -370 } push $N9aa20930 Blur { channels rgba size {{(Blur1.size)*(mult)**6} {(Blur1.size)*(mult)**6}} crop false name Blur7 label "\[value size]" xpos 1295 ypos -370 } push $N9aa20930 Blur { channels rgba size {{(Blur1.size)*(mult)**5} {(Blur1.size)*(mult)**5}} crop false name Blur6 label "\[value size]" xpos 1195 ypos -370 } push $N9aa20930 Blur { channels rgba size {{(Blur1.size)*(mult)**4} {(Blur1.size)*(mult)**4}} crop false name Blur5 label "\[value size]" xpos 1095 ypos -370 } push $N9aa20930 Blur { channels rgba size {{(Blur1.size)*(mult)**3} {(Blur1.size)*(mult)**3}} crop false name Blur4 label "\[value size]" xpos 995 ypos -370 } push $N9aa20930 Blur { channels rgba size {{(Blur1.size)*(mult)**2} {(Blur1.size)*(mult)**2}} crop false name Blur3 label "\[value size]" xpos 895 ypos -370 } push 0 push $N9aa20930 Blur { channels rgba size {{(Blur1.size)*(mult)**1} {(Blur1.size)*(mult)**1}} crop false name Blur2 label "\[value size]" xpos 795 ypos -370 } push $N9aa20930 Blur { channels rgba size {{parent.size.w} {parent.size.h}} name Blur1 label "\[value size]" xpos 695 ypos -370 } Merge2 { inputs 8+1 operation {{parent.mergeNumber}} name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 695 ypos -256 } NoOp { name End xpos 695 ypos -230 } set Nd6534700 [stack 0] CopyBBox { inputs 2 name CopyBBox1 xpos 585 ypos -175 } Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" tile_color 0xa57aaaff note_font "Verdana Bold Bold Bold Bold Bold Bold Bold" note_font_color 0xffffffff xpos 585 ypos -151 addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} overscanType {{parent.safetyBBoxMethod}} addUserKnob {14 overscan l Overscan R 0 400} overscan {{parent.safeBBoxPixels} {parent.safeBBoxPixels}} addUserKnob {14 overscanPercent l "Overscan Percent" R 1 4} overscanPercent {{parent.safeBBoxPercent} {parent.safeBBoxPercent}} addUserKnob {20 inputBbox l "BBox Data" n 1} addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set Nd6553b90 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set Nd65586d0 [stack 0] push $Nd6553b90 Crop { box {{parent.inputBBox} {parent.inputBBox} {parent.inputBBox} {parent.inputBBox}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set Nd655d250 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set Nd6568640 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{((input.bbox.r-input.bbox.x)/2)+input.bbox.x} {((input.bbox.t-input.bbox.y)/2)+input.bbox.y}} shutteroffset centred name Transform1 selected true xpos 120 ypos 553 } push $Nd6568640 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $Nd65586d0 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $Nd655d250 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N9ed07210 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $N9ed07210 NoOp { name OutputBBox1 xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group push $Nd6534700 Merge2 { inputs 2 bbox intersection name Merge4 xpos 585 ypos -127 } push $Nd6534700 CopyBBox { inputs 2 name CopyBBox2 xpos 585 ypos -101 } push $Nd6534700 Switch { inputs 2 which {{"parent.safeBBox && ((BBoxResult.bbox.x < BBoxInput.bbox.x || BBoxResult.bbox.y < BBoxInput.bbox.y || BBoxResult.bbox.r > BBoxInput.bbox.r || BBoxResult.bbox.t > BBoxInput.bbox.t))"}} name Switch2 label "\[value which]" xpos 695 ypos -106 } Grade { channels rgba whitepoint 8 black_clamp false name AverageMult xpos 695 ypos -37 disable {{"output2 == 4 ? 0 : 1"}} } Merge2 { inputs 2 operation max name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 695 ypos 10 disable {{"output2 == 4 && includeOriginal == 1 && AvgMaxOriginal == 1 ? 0 : 1"}} } Blur { channels rgba size {{postBlur} {postBlur}} name BlurOriginal label "\[value size]" xpos 695 ypos 59 } Invert { channels rgba name Invert2 xpos 695 ypos 97 disable {{"parent.size < 0 ? 0 : 1"}} } push $N9a9b3250 Switch { inputs 2 which {{"parent.size == 0 ? 0 : 1"}} name Switch1 label "\[value which]" xpos 427 ypos 93 } push $N9a974650 ShuffleCopy { inputs 2 in2 none black red white green red2 blue green2 alpha out none out2 {{{parent.Shuffle1.in}}} name ShuffleCopy1 xpos 0 ypos 97 } Dot { name Dot17 label A note_font_size 41 xpos 34 ypos 455 } Dot { name Dot7 note_font_size 41 xpos 34 ypos 585 } set N9eda1cc0 [stack 0] Dot { name Dot12 note_font_size 41 xpos -260 ypos 585 } Dot { name Dot13 note_font_size 41 xpos -260 ypos 799 } push $N9a9828b0 Input { inputs 0 name Inputmask xpos 346 ypos 325 number 1 } Dot { name Dot19 label Mask note_font_size 41 xpos 380 ypos 438 } set N9edb4a70 [stack 0] Dot { name Dot20 note_font_size 41 xpos 270 ypos 438 } push $N9eda1cc0 Merge2 { inputs 2 bbox intersection Achannels {rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue rgba.alpha} output {rgba.red -rgba.green -rgba.blue rgba.alpha} name MergeIntersection xpos 236 ypos 575 disable {{"!\[exists parent.input1]"}} } Merge2 { inputs 2 Achannels {rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue rgba.alpha} output {rgba.red -rgba.green -rgba.blue rgba.alpha} name MergeUnion xpos 236 ypos 613 disable {{"!\[exists parent.input1]"}} } Dot { name Dot6 label "intersection\nof (Mask and A) + B" note_font_size 14 note_font_color 0xffffffff xpos 270 ypos 773 } push $N9edb4a70 Dot { name Dot10 note_font_size 41 xpos 380 ypos 675 } push $N9eda1cc0 push $N9a9874b0 Merge2 { inputs 2+1 operation copy Achannels none Bchannels none output none also_merge all name MergeKeymix xpos 0 ypos 665 } Dot { name Dot14 note_font_size 41 xpos 34 ypos 747 } set N9eb08930 [stack 0] push $N9a9874b0 CopyBBox { inputs 2 name CopyBBoxUnion xpos -401 ypos 743 disable {{parent.bbox==0?0:1}} } CopyBBox { inputs 2 name CopyBBoxIntersection xpos -401 ypos 769 disable {{"parent.bbox==1 ? 0 : 1"}} } CopyBBox { inputs 2 name CopyBBoxA xpos -401 ypos 795 disable {{"parent.bbox==2 ? 0 : 1"}} } CopyBBox { inputs 2 name CopyBBoxB xpos -401 ypos 827 disable {{"parent.bbox==3 ? 0 : 1"}} } Crop { box {0 0 {parent.width} {parent.height}} crop false name CopyBBoxFormat xpos -401 ypos 853 disable {{"parent.bbox==4 ? 0 : 1"}} addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N9eb2c890 [stack 0] Transform { scale {{parent.adjustBBoxPercent} {parent.adjustBBoxPercent}} center {{((input.bbox.r-input.bbox.x)/2)+input.bbox.x} {((input.bbox.t-input.bbox.y)/2)+input.bbox.y}} black_outside false shutteroffset centred name TransformBBoxAdjustPercent xpos -516 ypos 898 } push $N9eb2c890 AdjBBox { numpixels {{parent.adjustBBoxPixels} {parent.adjustBBoxPixels}} name AdjBBoxPixels xpos -401 ypos 901 } Switch { inputs 2 which {{adjustBBoxExtra}} name Switch3 xpos -401 ypos 940 } Dot { name Dot9 note_font_size 41 xpos -367 ypos 993 } push $N9eb08930 CopyBBox { inputs 2 name CopyBBox xpos 0 ypos 989 } BlackOutside { name BlackOutside1 xpos 0 ypos 1015 disable {{!parent.blackOutside}} } Output { name Output1 xpos 0 ypos 1155 } push $Nd6534700 NoOp { name BBoxResult xpos 588 ypos -223 addUserKnob {20 User} addUserKnob {15 bbox} bbox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} } end_group Unpremult { name Unpremult6 xpos 52 ypos 929 } Switch { inputs 2 which {{parent.previewKey}} name Switch1 label "\[value which]" xpos 52 ypos 977 } push $N32d06f00 Dot { name Dot4 note_font_size 41 xpos -124 ypos 202 } Dot { name Dot5 note_font_size 41 xpos -124 ypos 1046 } Merge2 { inputs 2+1 operation copy name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 52 ypos 1043 } Output { name Output1 xpos 52 ypos 1163 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_BlacksMatch.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { name BlacksMatch help "Choose a black point color or plug an image /constant you wish to be your blackpoint into BlackColor input.\n\nUse Mult Range to control how far above the blackpoint color to affect the lows\n\nUse the RollOff gamma to add fall off to the bottom of the curve\n\nTurn on the preview Plotscan and move the sampler over a region to see what your settings are doing to a linear 0-1 ramp. This will help you see if you have weird curves, clamping or other funky problems as you adjust settings" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"inputChange\":\n nsd = nuke.toNode(\"SwitchDefault\")\n n\[\"defaultBlack\"].setEnabled(nsd\[\"which\"].getValue()==1)\n\nif k.name() == \"previewPlotScan\":\n p = n.knob(\"previewPlotScan\").value()\n if p == True:\n n.knob(\"plotscanSampler\").setVisible(True)\n else:\n n.knob(\"plotscanSampler\").setVisible(False)" tile_color 0x1c1c1cff note_font "Helvetica Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" selected true addUserKnob {20 BlacksMatch} addUserKnob {6 default_black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 premultInput l "Premultiplied Input" +STARTLINE} addUserKnob {4 mergeOp l Operation: t "Plus and Screen do the same thing with our operation, so I only included a hypot between plus/screen and hypot. Hypot raises the mult by x2 because I thought that gave more pleasising results. It will probably be a harsher curve (more towards clamp) than the plus/screen result)." M {Plus/Screen Hypot "" ""}} addUserKnob {18 defaultBlack l "Default Black"} defaultBlack {0.05 0.05 0.05} addUserKnob {6 defaultBlack_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 defaultBlack_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {7 multBase l "Mult Low Range" t "This is the Multiplier for the top of the \"toe\" curve. It is multiplying the BlackPoint color by this number and setting it as the highest point weird the curve will influence the midtones and the highlights" R 1.5 10} multBase 4 addUserKnob {7 rolloffGamma l "Rolloff Gamma" t "This controls the bottom of the curve, the falloff to where it is bending toward the \"cut off point\" which is out black color. A lower value will act more like a clamp and a higher value will act more like a plus." R 0.1 1} rolloffGamma 0.35 addUserKnob {4 minVal l "Min Value is:" M {"Toe Result" "Clamp Result" "" ""}} addUserKnob {6 previewPlotScan l "Preview PlotScan" t "Click to overlay a plotscan graph to show you how your black color is influenced by your settings." +STARTLINE} addUserKnob {12 plotscanSampler l "PlotScan Sampler" +HIDDEN} plotscanSampler {200 200} addUserKnob {6 color_rgb_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask -STARTLINE T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Name: T BlacksMatch} addUserKnob {26 ver l Version: T v10} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x556a5000 label "This Creates a \nPer Channel Key\nBased on the Blackpoint" note_font_size 30 note_font_color 0xffffffff xpos 991 ypos -77 bdwidth 314 bdheight 421 } StickyNote { inputs 0 name StickyNote2 tile_color 0xff label green note_font_size 41 note_font_color 0xffffffff xpos 177 ypos 466 } StickyNote { inputs 0 name StickyNote1 tile_color 0xff label red note_font_size 41 note_font_color 0xffffffff xpos 188 ypos 350 } StickyNote { inputs 0 name StickyNote3 tile_color 0xff label blue note_font_size 41 note_font_color 0xffffffff xpos 186 ypos 570 } StickyNote { inputs 0 name StickyNote4 tile_color 0xff label "min will be \nblack color" note_font_size 31 note_font_color 0xffffffff xpos 143 ypos 733 } Input { inputs 0 name Inputimg xpos 322 ypos -550 } Dot { name Dot17 xpos 356 ypos -418 } set N8dc35590 [stack 0] AddChannels { channels rgba color 1 name AddChannels1 xpos 322 ypos -365 } Dot { name Dot5 note_font_size 41 xpos 356 ypos -288 } set N8dd1b7b0 [stack 0] Grade { channels rgba white 0 multiply 0 add {{defaultBlack.r} {defaultBlack.g} {defaultBlack.b} 0} black_clamp false name Grade1 label color xpos 922 ypos -295 } Input { inputs 0 name InputBlackColor xpos 1138 ypos -569 number 1 } Switch { inputs 2 which {{"!\[exists parent.input1]"}} name SwitchDefault xpos 1138 ypos -291 } Dot { name Dot26 label "Black Color" note_font_size 41 xpos 1172 ypos -212 } Dot { name Dot4 note_font_size 41 xpos 1172 ypos -151 } set N8dc262e0 [stack 0] Dot { name Dot36 note_font_size 41 xpos 1631 ypos -151 } set N7a523960 [stack 0] Dot { name Dot16 note_font_size 41 xpos 2140 ypos -151 } set N920f36d0 [stack 0] Crop { box {{plotscanSampler.x-2} {plotscanSampler.y-2} {plotscanSampler.x+2} {plotscanSampler.x+2}} reformat true crop false name Crop1 xpos 2432 ypos -154 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_1 l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Blur { channels rgb size 16 name Blur1 label "\[value size]" xpos 2432 ypos -130 } Reformat { format "512 512 0 0 512 512 1 square_512" name Reformat4 xpos 2432 ypos -92 } Dot { name Dot12 note_font_size 41 xpos 2466 ypos -43 } set N8d9639b0 [stack 0] Dot { name Dot47 note_font_size 41 xpos 2917 ypos -43 } set N8daf4010 [stack 0] Dot { name Dot42 label "Black Color" note_font_size 41 xpos 2917 ypos 286 } Dot { name Dot43 note_font_size 41 xpos 2917 ypos 366 } set N8de4da70 [stack 0] Dot { name Dot44 note_font_size 41 xpos 2917 ypos 480 } set N8de34ea0 [stack 0] Dot { name Dot45 note_font_size 41 xpos 2917 ypos 588 } set N8de26340 [stack 0] Dot { name Dot31 note_font_size 41 xpos 2917 ypos 656 } set N6a60ea60 [stack 0] push $N6a60ea60 push $N8daf4010 Dot { name Dot11 label "Black Color" note_font_size 41 xpos 3426 ypos -43 } Multiply { channels rgb value 2 name Multiply6 label "mult black color" xpos 3392 ypos 77 } Reformat { inputs 0 format "512 512 0 0 512 512 1 square_512" pbb true name Reformat1 xpos 2711 ypos 61 } Ramp { p0 {0 0} p1 {512 0} name Ramp1 xpos 2711 ypos 93 } Dot { name Dot1 note_font_size 41 xpos 2745 ypos 154 } set N8dd35090 [stack 0] Dot { name Dot7 note_font_size 41 xpos 3138 ypos 154 } set N8deb2480 [stack 0] MergeExpression { inputs 2 expr0 Br/Ar expr1 Bg/Ag expr2 Bb/Ab name MergeDivide2 xpos 3392 ypos 151 } Invert { channels rgb name Invert5 xpos 3392 ypos 175 } Clamp { channels rgb name Clamp4 xpos 3392 ypos 199 } Gamma { channels rgb value 0.5 name Gamma4 xpos 3392 ypos 223 } Dot { name Dot39 xpos 3426 ypos 366 } set N8de36a30 [stack 0] Dot { name Dot40 xpos 3426 ypos 480 } set N8de3ea20 [stack 0] Dot { name Dot41 xpos 3426 ypos 588 } Shuffle { red blue green blue alpha blue name Shuffle11 tile_color 0x3fbfff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 3277 ypos 581 } push $N8de26340 push $N8de3ea20 Shuffle { red green blue green alpha green name Shuffle12 tile_color 0xbf00ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 3276 ypos 473 } push $N8de34ea0 push $N8de36a30 Shuffle { green red blue red alpha red name Shuffle13 tile_color 0xbf0000ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 3270 ypos 359 } push $N8de4da70 push $N8deb2480 Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} output {rgba.red -rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge14 label red xpos 3104 ypos 359 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} Bchannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} output {-rgba.red rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge15 label green xpos 3104 ypos 473 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} Bchannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} output {-rgba.red -rgba.green rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge16 label blue xpos 3104 ypos 581 } Merge2 { inputs 2 operation max bbox B Achannels rgb Bchannels rgb output rgb name Merge18 label "Set Min Color\nto Blackpoint" xpos 3104 ypos 644 } Dot { name Dot46 note_font_size 41 xpos 3138 ypos 742 } Switch { inputs 2 which {{minVal}} name SwitchMinColor1 xpos 2883 ypos 739 } push $N8d9639b0 Multiply { channels rgb value {{multBase}} name Multiply3 label "mult black color" xpos 2432 ypos 63 } Multiply { channels rgb value 2 name Multiply4 label "hypot Extra Mult\n" xpos 2432 ypos 95 disable {{"mergeOp == 1 ? 0 : 1"}} } push $N8dd35090 MergeExpression { inputs 2 expr0 Br/Ar expr1 Bg/Ag expr2 Bb/Ab name MergeDivide1 xpos 2432 ypos 151 } Invert { channels rgb name Invert2 xpos 2432 ypos 175 } Clamp { channels rgb name Clamp2 xpos 2432 ypos 199 } Gamma { channels rgb value {{rolloffGamma}} name Gamma2 xpos 2432 ypos 223 } Dot { name Dot6 xpos 2466 ypos 366 } set N8dd476b0 [stack 0] Dot { name Dot9 xpos 2466 ypos 480 } set N8dd49a30 [stack 0] Dot { name Dot10 xpos 2466 ypos 588 } Shuffle { red blue green blue alpha blue name Shuffle4 tile_color 0x3fbfff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 2511 ypos 581 } push $N8de26340 push $N8dd49a30 Shuffle { red green blue green alpha green name Shuffle5 tile_color 0xbf00ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 2511 ypos 473 } push $N8de34ea0 push $N8dd476b0 Shuffle { green red blue red alpha red name Shuffle6 tile_color 0xbf0000ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 2517 ypos 359 } push $N8de4da70 push $N8dd35090 Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} output {rgba.red -rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge2 label red xpos 2711 ypos 359 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} Bchannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} output {-rgba.red rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge6 label green xpos 2711 ypos 473 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} Bchannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} output {-rgba.red -rgba.green rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge7 label blue xpos 2711 ypos 581 } Merge2 { inputs 2 operation max bbox B Achannels rgb Bchannels rgb output rgb name Merge8 label "Set Min Color\nto Blackpoint" xpos 2711 ypos 730 } Group { name PlotScanline tile_color 0x9c0000ff xpos 2711 ypos 805 addUserKnob {20 Controls} addUserKnob {4 mode l "Sampling method" M {"Slice Per Pixel (faster)" "Slice Area (slower)" "Full Scanline" "" "" ""}} mode "Full Scanline" addUserKnob {6 add2image l "Add to original" +STARTLINE} addUserKnob {6 Normalize -STARTLINE} addUserKnob {6 tonemap l "Tone Map (HDRI)" -STARTLINE} addUserKnob {6 curve l "Plot as curve" +STARTLINE} curve true addUserKnob {3 curveFat l "Curve Thickness" -STARTLINE} addUserKnob {3 sa l "Sample Area" t "Disabled when using pr pixel method."} sa 1 addUserKnob {7 lift l Lift R -1 1} addUserKnob {7 scale l Scale R 0 5} scale 1 addUserKnob {26 ""} addUserKnob {12 p1 l "Start Point"} p1 {376 418} addUserKnob {12 p2 l "End Point" -STARTLINE} p2 {428.5 425.5} addUserKnob {26 ""} addUserKnob {26 "" l "About " T "Plot Scanline v0.4 | theo@euqahuba.com\nUse P1 to select your scanline and/or you start slice."} } Input { inputs 0 name Input1 xpos -480 ypos 62 } set N8d8817e0 [stack 0] Expression { temp_name0 length temp_expr0 sqrt(r*r+g*g+b*b) expr0 r/length expr1 g/length expr2 b/length name Normalize xpos -480 ypos 108 disable {{1-parent.Normalize i}} } Expression { expr0 r/(r+1) expr1 g/(g+1) expr2 b/(b+1) name tonamap xpos -480 ypos 134 disable {{1-parent.tonemap i}} } set N8d88b5b0 [stack 0] Expression { temp_name0 rExpr temp_expr0 "min(max(0,\r\nceil(r(x,parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" temp_name1 gExpr temp_expr1 "min(max(0,\r\nceil(g(x,parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" temp_name2 bExpr temp_expr2 "min(max(0,\r\nceil(b(x,parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" expr0 rExpr expr1 gExpr expr2 bExpr expr3 0 name scanline xpos -302 ypos 193 addUserKnob {20 User} } push $N8d88b5b0 Expression { temp_name0 rExpr temp_expr0 "min(max(0,\r\nceil(r((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y,parent.sa,parent.sa)-((y/height+parent.lift)*parent.scale))),1)" temp_name1 gExpr temp_expr1 "min(max(0,\r\nceil(g((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y,parent.sa,parent.sa)-((y/height+parent.lift)*parent.scale))),1)" temp_name2 bExpr temp_expr2 "min(max(0,\r\nceil(b((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y,parent.sa,parent.sa)-((y/height+parent.lift)*parent.scale))),1)" expr0 rExpr expr1 gExpr expr2 bExpr expr3 0 name Expression_highQuality xpos -515 ypos 197 addUserKnob {20 User} } push $N8d88b5b0 Expression { temp_name0 rExpr temp_expr0 "min(max(0,\r\nceil(r((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" temp_name1 gExpr temp_expr1 "min(max(0,\r\nceil(g((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" temp_name2 bExpr temp_expr2 "min(max(0,\r\nceil(b((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" expr0 rExpr expr1 gExpr expr2 bExpr expr3 0 name perPixel xpos -419 ypos 201 addUserKnob {20 User} } Switch { inputs 3 which {{parent.mode i}} name Switch2 xpos -480 ypos 253 } Matrix { matrix { {0 1 0} {1 -4 1} {0 1 0} } name Matrix2 xpos -480 ypos 284 disable {{-1+parent.curve i x70 1}} } Dilate { size {{parent.curveFat}} name Dilate1 xpos -480 ypos 326 disable {{-1+parent.curve.main}} } Clamp { name Clamp1 xpos -480 ypos 383 } set N8dd6f3b0 [stack 0] push $N8d8817e0 Dot { name Dot1 xpos -556 ypos 66 } Clamp { maximum 331 name Clamp2 xpos -590 ypos 352 } Merge2 { inputs 2 operation plus bbox intersection name Merge1 xpos -590 ypos 394 } Dot { name Dot2 xpos -556 ypos 433 } push $N8dd6f3b0 Switch { inputs 2 which {{parent.add2image i}} name Switch1 xpos -480 ypos 430 } Output { name Output1 xpos -480 ypos 470 } end_group Dot { name Dot15 note_font_size 41 xpos 2745 ypos 857 } set N8d88db50 [stack 0] Shuffle { red white green white blue white alpha white name Shuffle7 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 2821 ypos 850 } BlackOutside { name BlackOutside1 xpos 2821 ypos 882 } Dilate { channels rgba size -2 name Dilate1 xpos 2821 ypos 910 } Invert { name Invert3 xpos 2821 ypos 934 } push $N8d88db50 Merge2 { inputs 2 name Merge9 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 2711 ypos 938 } Group { name BinaryAlpha tile_color 0x2a2a2aff label "(\[value an] --> \[value output1])" note_font Verdana note_font_color 0xfffff9ff xpos 2711 ypos 983 addUserKnob {20 BinaryAlpha} addUserKnob {4 an l Analyze: M {rgb rgba alpha "" "" ""}} addUserKnob {4 output1 l Output: M {rgba alpha "" "" "" ""}} output1 alpha addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Analyzes channel input and creates a binary result 0 or 1 and outputs it into output channel" T BinaryAlpha} addUserKnob {26 ver l Version: T v03} } Input { inputs 0 name Input xpos -398 ypos 275 } Expression { temp_name0 rgb_an temp_expr0 "r !=0 || g!=0 || b!=0?1:0" temp_name1 rgba_an temp_expr1 "r!=0 || g!=0 || b!=0 || a!=0?1:0" temp_name2 alpha_an temp_expr2 a!=0?1:0 expr3 "parent.an == 0 ? rgb_an : parent.an == 1 ? rgba_an : alpha_an" name Expression xpos -398 ypos 341 } Shuffle { red alpha green alpha blue alpha name Shuffle label "\[value in]" xpos -398 ypos 367 disable {{parent.output1}} } Output { name Output1 xpos -398 ypos 456 } end_group Reformat { type "to box" box_height {{"\[exists parent.input0] ? parent.input.height : root.format.height"}} resize height filter Impulse pbb true name Reformat2 xpos 2711 ypos 1041 } Reformat { type "to box" box_width {{"\[exists parent.input0] ? parent.input.width : root.format.width"}} box_height {{input.height}} resize none filter Impulse black_outside true pbb true name Reformat3 xpos 2711 ypos 1081 } Dilate { channels rgba size 1 name Dilate2 xpos 2711 ypos 1121 } Dot { name Dot14 note_font_size 41 xpos 2745 ypos 1192 } Input { inputs 0 name Inputmask xpos 864 ypos 878 number 2 } Dot { name Dot29 xpos 898 ypos 1015 } push $N7a523960 Dot { name Dot33 label "Black Color" note_font_size 41 xpos 1631 ypos 295 } Dot { name Dot37 note_font_size 41 xpos 1631 ypos 360 } set N7a5235b0 [stack 0] Dot { name Dot34 note_font_size 41 xpos 1631 ypos 474 } set N7a51e4a0 [stack 0] Dot { name Dot35 note_font_size 41 xpos 1631 ypos 582 } set N7a520820 [stack 0] Dot { name Dot13 note_font_size 41 xpos 1631 ypos 674 } set N92018d80 [stack 0] push $N92018d80 push $N920f36d0 Multiply { channels rgb value 2 name Multiply7 label "mult black color" xpos 2106 ypos 87 } push $N8dd1b7b0 Unpremult { name Unpremult1 xpos 322 ypos -16 disable {{"! premultInput"}} } Dot { name Dot18 xpos 356 ypos 145 } set N8d8b1320 [stack 0] Dot { name Dot22 note_font_size 41 xpos 1028 ypos 145 } set N920f9750 [stack 0] Dot { name Dot32 note_font_size 41 xpos 1852 ypos 145 } set N8dea12a0 [stack 0] MergeExpression { inputs 2 expr0 Br/Ar expr1 Bg/Ag expr2 Bb/Ab name MergeDivide3 xpos 2106 ypos 142 } Invert { channels rgb name Invert4 xpos 2106 ypos 166 } Clamp { channels rgb name Clamp3 xpos 2106 ypos 190 } Gamma { channels rgb value 0.51 name Gamma3 xpos 2106 ypos 214 } Dot { name Dot24 xpos 2140 ypos 360 } set N8d9b6b10 [stack 0] Dot { name Dot25 xpos 2140 ypos 474 } set N8d9b8fd0 [stack 0] Dot { name Dot27 xpos 2140 ypos 582 } Shuffle { red blue green blue alpha blue name Shuffle8 tile_color 0x3fbfff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 1990 ypos 575 } push $N7a520820 push $N8d9b8fd0 Shuffle { red green blue green alpha green name Shuffle9 tile_color 0xbf00ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 1990 ypos 467 } push $N7a51e4a0 push $N8d9b6b10 Shuffle { green red blue red alpha red name Shuffle10 tile_color 0xbf0000ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 1984 ypos 353 } push $N7a5235b0 push $N8dea12a0 Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} output {rgba.red -rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge11 label red xpos 1818 ypos 353 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} Bchannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} output {-rgba.red rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge12 label green xpos 1818 ypos 467 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} Bchannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} output {-rgba.red -rgba.green rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge13 label blue xpos 1818 ypos 575 } Merge2 { inputs 2 operation max bbox B Achannels rgb Bchannels rgb output rgb name Merge17 label "Set Min Color\nto Blackpoint" xpos 1818 ypos 662 } Dot { name Dot38 note_font_size 41 xpos 1852 ypos 760 } Switch { inputs 2 which {{minVal}} name SwitchMinColor xpos 1597 ypos 757 } push $N8dc262e0 Multiply { channels rgb value {{multBase}} name Multiply1 label "mult black color" xpos 1138 ypos 52 } Multiply { channels rgb value 2 name Multiply2 label "hypot Extra Mult\n" xpos 1138 ypos 84 disable {{"mergeOp == 1 ? 0 : 1"}} } push $N920f9750 MergeExpression { inputs 2 expr0 Br/Ar expr1 Bg/Ag expr2 Bb/Ab name MergeDivide xpos 1138 ypos 194 } Invert { channels rgb name Invert1 xpos 1138 ypos 239 } Clamp { channels rgb name Clamp1 xpos 1138 ypos 263 } Gamma { channels rgb value {{rolloffGamma}} name Gamma1 xpos 1138 ypos 287 } Dot { name Dot19 xpos 1172 ypos 364 } set N8d8cc9a0 [stack 0] Dot { name Dot20 xpos 1172 ypos 478 } set N8d8ced20 [stack 0] Dot { name Dot21 xpos 1172 ypos 586 } Shuffle { red blue green blue alpha blue name Shuffle3 tile_color 0x3fbfff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 1022 ypos 579 } push $N8dc262e0 Dot { name Dot23 xpos 706 ypos -151 } Dot { name Dot8 label "Black Color" note_font_size 41 xpos 706 ypos 293 } set N8dcc6640 [stack 0] Dot { name Dot2 note_font_size 41 xpos 706 ypos 404 } set N8dcc8b00 [stack 0] Dot { name Dot3 note_font_size 41 xpos 706 ypos 523 } push $N8d8ced20 Shuffle { red green blue green alpha green name Shuffle2 tile_color 0xbf00ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 1022 ypos 471 } push $N8dcc8b00 push $N8d8cc9a0 Shuffle { green red blue red alpha red name Shuffle1 tile_color 0xbf0000ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 1016 ypos 357 } push $N8dcc6640 push $N8d8b1320 Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} output {rgba.red -rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge3 label red xpos 322 ypos 357 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} Bchannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} output {-rgba.red rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge4 label green xpos 322 ypos 471 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} Bchannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} output {-rgba.red -rgba.green rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge5 label blue xpos 322 ypos 579 } Merge2 { inputs 2 operation max bbox B Achannels rgb Bchannels rgb output rgb name Merge1 label "Set Min Color\nto Blackpoint" xpos 322 ypos 748 } Premult { name Premult4 xpos 322 ypos 881 disable {{"! premultInput"}} } push $N8dc35590 Dot { name Dot28 xpos -146 ypos -418 } Dot { name Dot30 xpos -146 ypos 1015 } Merge2 { inputs 2+1 operation copy bbox B Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} output {rgba.red rgba.green rgba.blue -rgba.alpha} name MergeKeymix label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 322 ypos 1012 } Merge2 { inputs 2 name Merge10 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 322 ypos 1189 disable {{!previewPlotScan}} } Output { name Output1 xpos 322 ypos 1395 } NoOp { inputs 0 name Settings note_font_size 51 xpos 2494 ypos -414 addUserKnob {20 User} addUserKnob {7 mergeOpNum l "Merge Op Num"} mergeOpNum {{"mergeOp == 0 ? 24 : 13"}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_BokehBuilder.gizmo ================================================ Group { inputs 0 name BokehBuilder tile_color 0x242424ff note_font_color 0x91d5ffff selected true addUserKnob {20 mainSettings l main} addUserKnob {26 header l "" +STARTLINE T "Bokeh Builder v1.0 "} addUserKnob {26 subheader l "" +STARTLINE T "by Kyran Bishop"} addUserKnob {26 formatHeader l INVISIBLE +INVISIBLE} addUserKnob {41 format l INVISIBLE +INVISIBLE T Constant1.format} addUserKnob {26 qualityHeader l "bokeh quality"} addUserKnob {7 bokehQuality l quality} bokehQuality 0.2 addUserKnob {26 typeHeader l "bokeh controls"} addUserKnob {4 bokehType l type M {circular spiked}} addUserKnob {7 bokehAnamorph l anamorph} addUserKnob {7 bokehRotation l rotation R -180 180} addUserKnob {7 bokehGamma l gamma} addUserKnob {6 grainEnable l grain +STARTLINE} addUserKnob {26 presetHeader l "preset picker"} addUserKnob {4 presetPicker l presets M {"broken blue" "soft blue" "natural blue" microscope "hexagonal falloff" "ringed blue" "blue microscope" "purple haze" "dirty circle" "softer dirty circle" "super blue" "soft spike"}} presetPicker "soft spike" addUserKnob {22 presetApply l "apply preset" -STARTLINE T "import nuke\n\n#TEMPLATE\n#nuke.thisNode()\[''].setValue()\n\nnuke.thisNode()\['bokehQuality'].setValue(0.25)\n\nif nuke.thisNode()\['presetPicker'].value() == \"broken blue\":\n\tnuke.thisNode()\['bokehType'].setValue(0)\n\tnuke.thisNode()\['bokehAnamorph'].setValue(0)\n\tnuke.thisNode()\['bokehRotation'].setValue(0)\n\tnuke.thisNode()\['bokehGamma'].setValue(0)\n\tnuke.thisNode()\['grainEnable'].setValue(1)\n\t#\t\n\tnuke.thisNode()\['noiseEnable'].setValue(1)\n\tnuke.thisNode()\['noiseSize'].setValue(200)\n\tnuke.thisNode()\['noiseGain'].setValue(0.835)\n\tnuke.thisNode()\['noiseGamma'].setValue(0.135)\n\tnuke.thisNode()\['noiseMix'].setValue(0.21)\n\t#\n\tnuke.thisNode()\['naturalNoiseEnable'].setValue(1)\n\tnuke.thisNode()\['naturalNoisePicker'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseSize'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseSoftness'].setValue(1.2)\n\tnuke.thisNode()\['naturalNoiseGain'].setValue(0.3)\n\tnuke.thisNode()\['naturalNoiseGamma'].setValue(0.2)\n\tnuke.thisNode()\['naturalNoiseStrength'].setValue(0.495)\n\t#\n\tnuke.thisNode()\['ringsEnable'].setValue(0)\n\tnuke.thisNode()\['ringsThickness'].setValue(0.02)\n\tnuke.thisNode()\['ringsStrength'].setValue(0.5)\n\t#\n\tnuke.thisNode()\['chromaEnable'].setValue(1)\n\tnuke.thisNode()\['innerChromaSize'].setValue(0)\n\tnuke.thisNode()\['innerChromaFalloff'].setValue(0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(0, 0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(1, 1)\n\tnuke.thisNode()\['innerChromaTint'].setValue(2, 2)\n\tnuke.thisNode()\['innerChromaStrength'].setValue(0.5)\n\t#\n\tnuke.thisNode()\['outerChromaEnable'].setValue(1)\n\tnuke.thisNode()\['outerChromaSize'].setValue(23)\n\tnuke.thisNode()\['outerChromaTint'].setValue(0, 0)\n\tnuke.thisNode()\['outerChromaTint'].setValue(1, 1)\n\tnuke.thisNode()\['outerChromaTint'].setValue(1, 2)\n\tnuke.thisNode()\['outerChromaStrength'].setValue(1)\n\t#\n\tnuke.thisNode()\['distortionEnable'].setValue(1)\n\tnuke.thisNode()\['distortionSize'].setValue(100)\n\tnuke.thisNode()\['noiseDetail'].setValue(5.95)\n\tnuke.thisNode()\['distortionStrength'].setValue(2.8)\n\t#\n\tnuke.thisNode()\['circularTypePicker'].setValue(6)\n\tnuke.thisNode()\['spikedTypePicker'].setValue(0)\n\t\nif nuke.thisNode()\['presetPicker'].value() == \"soft blue\":\n\tnuke.thisNode()\['bokehType'].setValue(0)\n\tnuke.thisNode()\['bokehAnamorph'].setValue(0)\n\tnuke.thisNode()\['bokehRotation'].setValue(0)\n\tnuke.thisNode()\['bokehGamma'].setValue(0)\n\tnuke.thisNode()\['grainEnable'].setValue(0)\n\t#\t\n\tnuke.thisNode()\['noiseEnable'].setValue(0)\n\tnuke.thisNode()\['noiseSize'].setValue(200)\n\tnuke.thisNode()\['noiseGain'].setValue(0.835)\n\tnuke.thisNode()\['noiseGamma'].setValue(0.135)\n\tnuke.thisNode()\['noiseMix'].setValue(0.21)\n\t#\n\tnuke.thisNode()\['naturalNoiseEnable'].setValue(1)\n\tnuke.thisNode()\['naturalNoisePicker'].setValue(1)\n\tnuke.thisNode()\['naturalNoiseSize'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseSoftness'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseGain'].setValue(0.3)\n\tnuke.thisNode()\['naturalNoiseGamma'].setValue(0.2)\n\tnuke.thisNode()\['naturalNoiseStrength'].setValue(0.15)\n\t#\n\tnuke.thisNode()\['ringsEnable'].setValue(0)\n\tnuke.thisNode()\['ringsThickness'].setValue(0.02)\n\tnuke.thisNode()\['ringsStrength'].setValue(0.5)\n\t#\n\tnuke.thisNode()\['chromaEnable'].setValue(1)\n\tnuke.thisNode()\['innerChromaSize'].setValue(0)\n\tnuke.thisNode()\['innerChromaFalloff'].setValue(0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(0, 0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(1, 1)\n\tnuke.thisNode()\['innerChromaTint'].setValue(2, 2)\n\tnuke.thisNode()\['innerChromaStrength'].setValue(0.49)\n\t#\n\tnuke.thisNode()\['outerChromaEnable'].setValue(1)\n\tnuke.thisNode()\['outerChromaSize'].setValue(19)\n\tnuke.thisNode()\['outerChromaTint'].setValue(0, 0)\n\tnuke.thisNode()\['outerChromaTint'].setValue(4, 1)\n\tnuke.thisNode()\['outerChromaTint'].setValue(4, 2)\n\tnuke.thisNode()\['outerChromaStrength'].setValue(1)\n\t#\n\tnuke.thisNode()\['distortionEnable'].setValue(0)\n\tnuke.thisNode()\['distortionSize'].setValue(100)\n\tnuke.thisNode()\['noiseDetail'].setValue(5.95)\n\tnuke.thisNode()\['distortionStrength'].setValue(2.8)\n\t#\n\tnuke.thisNode()\['circularTypePicker'].setValue(4)\n\tnuke.thisNode()\['spikedTypePicker'].setValue(0)\n\t\nif nuke.thisNode()\['presetPicker'].value() == \"natural blue\":\n\tnuke.thisNode()\['bokehType'].setValue(0)\n\tnuke.thisNode()\['bokehAnamorph'].setValue(0)\n\tnuke.thisNode()\['bokehRotation'].setValue(0)\n\tnuke.thisNode()\['bokehGamma'].setValue(0)\n\tnuke.thisNode()\['grainEnable'].setValue(0)\n\t#\t\n\tnuke.thisNode()\['noiseEnable'].setValue(1)\n\tnuke.thisNode()\['noiseSize'].setValue(98)\n\tnuke.thisNode()\['noiseGain'].setValue(0.755)\n\tnuke.thisNode()\['noiseGamma'].setValue(0.035)\n\tnuke.thisNode()\['noiseMix'].setValue(0.095)\n\t#\n\tnuke.thisNode()\['naturalNoiseEnable'].setValue(1)\n\tnuke.thisNode()\['naturalNoisePicker'].setValue(3)\n\tnuke.thisNode()\['naturalNoiseSize'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseSoftness'].setValue(0.5)\n\tnuke.thisNode()\['naturalNoiseGain'].setValue(0.63)\n\tnuke.thisNode()\['naturalNoiseGamma'].setValue(0.24)\n\tnuke.thisNode()\['naturalNoiseStrength'].setValue(0.24)\n\t#\n\tnuke.thisNode()\['ringsEnable'].setValue(0)\n\tnuke.thisNode()\['ringsThickness'].setValue(0.02)\n\tnuke.thisNode()\['ringsStrength'].setValue(0.5)\n\t#\n\tnuke.thisNode()\['chromaEnable'].setValue(1)\n\tnuke.thisNode()\['innerChromaSize'].setValue(0)\n\tnuke.thisNode()\['innerChromaFalloff'].setValue(0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(0, 0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(1, 1)\n\tnuke.thisNode()\['innerChromaTint'].setValue(2, 2)\n\tnuke.thisNode()\['innerChromaStrength'].setValue(0.49)\n\t#\n\tnuke.thisNode()\['outerChromaEnable'].setValue(1)\n\tnuke.thisNode()\['outerChromaSize'].setValue(19)\n\tnuke.thisNode()\['outerChromaTint'].setValue(0, 0)\n\tnuke.thisNode()\['outerChromaTint'].setValue(4, 1)\n\tnuke.thisNode()\['outerChromaTint'].setValue(4, 2)\n\tnuke.thisNode()\['outerChromaStrength'].setValue(1)\n\t#\n\tnuke.thisNode()\['distortionEnable'].setValue(1)\n\tnuke.thisNode()\['distortionSize'].setValue(22)\n\tnuke.thisNode()\['noiseDetail'].setValue(0)\n\tnuke.thisNode()\['distortionStrength'].setValue(8.5)\n\t#\n\tnuke.thisNode()\['circularTypePicker'].setValue(1)\n\tnuke.thisNode()\['spikedTypePicker'].setValue(0)\n\t\nif nuke.thisNode()\['presetPicker'].value() == \"microscope\":\n\tnuke.thisNode()\['bokehType'].setValue(0)\n\tnuke.thisNode()\['bokehAnamorph'].setValue(0)\n\tnuke.thisNode()\['bokehRotation'].setValue(0)\n\tnuke.thisNode()\['bokehGamma'].setValue(0)\n\tnuke.thisNode()\['grainEnable'].setValue(1)\n\t#\t\n\tnuke.thisNode()\['noiseEnable'].setValue(1)\n\tnuke.thisNode()\['noiseSize'].setValue(100)\n\tnuke.thisNode()\['noiseGain'].setValue(0.66)\n\tnuke.thisNode()\['noiseGamma'].setValue(0.41)\n\tnuke.thisNode()\['noiseMix'].setValue(0.04)\n\t#\n\tnuke.thisNode()\['naturalNoiseEnable'].setValue(1)\n\tnuke.thisNode()\['naturalNoisePicker'].setValue(1)\n\tnuke.thisNode()\['naturalNoiseSize'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseSoftness'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseGain'].setValue(0.55)\n\tnuke.thisNode()\['naturalNoiseGamma'].setValue(0.39)\n\tnuke.thisNode()\['naturalNoiseStrength'].setValue(0.31)\n\t#\n\tnuke.thisNode()\['ringsEnable'].setValue(1)\n\tnuke.thisNode()\['ringsThickness'].setValue(0.0392)\n\tnuke.thisNode()\['ringsStrength'].setValue(0.545)\n\t#\n\tnuke.thisNode()\['chromaEnable'].setValue(0)\n\tnuke.thisNode()\['innerChromaSize'].setValue(0)\n\tnuke.thisNode()\['innerChromaFalloff'].setValue(0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(1, 0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(1, 1)\n\tnuke.thisNode()\['innerChromaTint'].setValue(1, 2)\n\tnuke.thisNode()\['innerChromaStrength'].setValue(0.49)\n\t#\n\tnuke.thisNode()\['outerChromaEnable'].setValue(0)\n\tnuke.thisNode()\['outerChromaSize'].setValue(0)\n\tnuke.thisNode()\['outerChromaTint'].setValue(1, 0)\n\tnuke.thisNode()\['outerChromaTint'].setValue(1, 1)\n\tnuke.thisNode()\['outerChromaTint'].setValue(1, 2)\n\tnuke.thisNode()\['outerChromaStrength'].setValue(1)\n\t#\n\tnuke.thisNode()\['distortionEnable'].setValue(1)\n\tnuke.thisNode()\['distortionSize'].setValue(100)\n\tnuke.thisNode()\['noiseDetail'].setValue(1)\n\tnuke.thisNode()\['distortionStrength'].setValue(9)\n\t#\n\tnuke.thisNode()\['circularTypePicker'].setValue(3)\n\tnuke.thisNode()\['spikedTypePicker'].setValue(0)\n\nif nuke.thisNode()\['presetPicker'].value() == \"hexagonal falloff\":\n\tnuke.thisNode()\['bokehType'].setValue(1)\n\tnuke.thisNode()\['bokehAnamorph'].setValue(0)\n\tnuke.thisNode()\['bokehRotation'].setValue(0)\n\tnuke.thisNode()\['bokehGamma'].setValue(0)\n\tnuke.thisNode()\['grainEnable'].setValue(0)\n\t#\t\n\tnuke.thisNode()\['noiseEnable'].setValue(1)\n\tnuke.thisNode()\['noiseSize'].setValue(100)\n\tnuke.thisNode()\['noiseGain'].setValue(0.66)\n\tnuke.thisNode()\['noiseGamma'].setValue(0.41)\n\tnuke.thisNode()\['noiseMix'].setValue(0.01)\n\t#\n\tnuke.thisNode()\['naturalNoiseEnable'].setValue(1)\n\tnuke.thisNode()\['naturalNoisePicker'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseSize'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseSoftness'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseGain'].setValue(0.55)\n\tnuke.thisNode()\['naturalNoiseGamma'].setValue(0.39)\n\tnuke.thisNode()\['naturalNoiseStrength'].setValue(0.31)\n\t#\n\tnuke.thisNode()\['ringsEnable'].setValue(0)\n\tnuke.thisNode()\['ringsThickness'].setValue(0.0392)\n\tnuke.thisNode()\['ringsStrength'].setValue(0.545)\n\t#\n\tnuke.thisNode()\['chromaEnable'].setValue(0)\n\tnuke.thisNode()\['innerChromaSize'].setValue(0)\n\tnuke.thisNode()\['innerChromaFalloff'].setValue(0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(1, 0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(1, 1)\n\tnuke.thisNode()\['innerChromaTint'].setValue(1, 2)\n\tnuke.thisNode()\['innerChromaStrength'].setValue(0.49)\n\t#\n\tnuke.thisNode()\['outerChromaEnable'].setValue(1)\n\tnuke.thisNode()\['outerChromaSize'].setValue(13.5)\n\tnuke.thisNode()\['outerChromaTint'].setValue(1, 0)\n\tnuke.thisNode()\['outerChromaTint'].setValue(1, 1)\n\tnuke.thisNode()\['outerChromaTint'].setValue(5, 2)\n\tnuke.thisNode()\['outerChromaStrength'].setValue(1)\n\t#\n\tnuke.thisNode()\['distortionEnable'].setValue(0)\n\tnuke.thisNode()\['distortionSize'].setValue(100)\n\tnuke.thisNode()\['noiseDetail'].setValue(1)\n\tnuke.thisNode()\['distortionStrength'].setValue(0)\n\t#\n\tnuke.thisNode()\['circularTypePicker'].setValue(0)\n\tnuke.thisNode()\['spikedTypePicker'].setValue(3)\n\t\nif nuke.thisNode()\['presetPicker'].value() == \"ringed blue\":\n\tnuke.thisNode()\['bokehType'].setValue(0)\n\tnuke.thisNode()\['bokehAnamorph'].setValue(0)\n\tnuke.thisNode()\['bokehRotation'].setValue(0)\n\tnuke.thisNode()\['bokehGamma'].setValue(0.185)\n\tnuke.thisNode()\['grainEnable'].setValue(1)\n\t#\t\n\tnuke.thisNode()\['noiseEnable'].setValue(1)\n\tnuke.thisNode()\['noiseSize'].setValue(100)\n\tnuke.thisNode()\['noiseGain'].setValue(0.66)\n\tnuke.thisNode()\['noiseGamma'].setValue(0.41)\n\tnuke.thisNode()\['noiseMix'].setValue(0.04)\n\t#\n\tnuke.thisNode()\['naturalNoiseEnable'].setValue(1)\n\tnuke.thisNode()\['naturalNoisePicker'].setValue(3)\n\tnuke.thisNode()\['naturalNoiseSize'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseSoftness'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseGain'].setValue(0.55)\n\tnuke.thisNode()\['naturalNoiseGamma'].setValue(0.39)\n\tnuke.thisNode()\['naturalNoiseStrength'].setValue(0.2)\n\t#\n\tnuke.thisNode()\['ringsEnable'].setValue(1)\n\tnuke.thisNode()\['ringsThickness'].setValue(0.0392)\n\tnuke.thisNode()\['ringsStrength'].setValue(0.695)\n\t#\n\tnuke.thisNode()\['chromaEnable'].setValue(1)\n\tnuke.thisNode()\['innerChromaSize'].setValue(43)\n\tnuke.thisNode()\['innerChromaFalloff'].setValue(125)\n\tnuke.thisNode()\['innerChromaTint'].setValue(1, 0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(1, 1)\n\tnuke.thisNode()\['innerChromaTint'].setValue(4, 2)\n\tnuke.thisNode()\['innerChromaStrength'].setValue(0.78)\n\t#\n\tnuke.thisNode()\['outerChromaEnable'].setValue(1)\n\tnuke.thisNode()\['outerChromaSize'].setValue(13.5)\n\tnuke.thisNode()\['outerChromaTint'].setValue(4, 0)\n\tnuke.thisNode()\['outerChromaTint'].setValue(4, 1)\n\tnuke.thisNode()\['outerChromaTint'].setValue(0, 2)\n\tnuke.thisNode()\['outerChromaStrength'].setValue(1)\n\t#\n\tnuke.thisNode()\['distortionEnable'].setValue(1)\n\tnuke.thisNode()\['distortionSize'].setValue(100)\n\tnuke.thisNode()\['noiseDetail'].setValue(1)\n\tnuke.thisNode()\['distortionStrength'].setValue(6)\n\t#\n\tnuke.thisNode()\['circularTypePicker'].setValue(0)\n\tnuke.thisNode()\['spikedTypePicker'].setValue(0)\n\nif nuke.thisNode()\['presetPicker'].value() == \"blue microscope\":\n\tnuke.thisNode()\['bokehType'].setValue(0)\n\tnuke.thisNode()\['bokehAnamorph'].setValue(0)\n\tnuke.thisNode()\['bokehRotation'].setValue(0)\n\tnuke.thisNode()\['bokehGamma'].setValue(0.185)\n\tnuke.thisNode()\['grainEnable'].setValue(1)\n\t#\t\n\tnuke.thisNode()\['noiseEnable'].setValue(1)\n\tnuke.thisNode()\['noiseSize'].setValue(68)\n\tnuke.thisNode()\['noiseGain'].setValue(0.66)\n\tnuke.thisNode()\['noiseGamma'].setValue(0.41)\n\tnuke.thisNode()\['noiseMix'].setValue(0.04)\n\t#\n\tnuke.thisNode()\['naturalNoiseEnable'].setValue(1)\n\tnuke.thisNode()\['naturalNoisePicker'].setValue(4)\n\tnuke.thisNode()\['naturalNoiseSize'].setValue(0.1)\n\tnuke.thisNode()\['naturalNoiseSoftness'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseGain'].setValue(0.535)\n\tnuke.thisNode()\['naturalNoiseGamma'].setValue(0.405)\n\tnuke.thisNode()\['naturalNoiseStrength'].setValue(0.45)\n\t#\n\tnuke.thisNode()\['ringsEnable'].setValue(1)\n\tnuke.thisNode()\['ringsThickness'].setValue(0.0392)\n\tnuke.thisNode()\['ringsStrength'].setValue(0.28)\n\t#\n\tnuke.thisNode()\['chromaEnable'].setValue(0)\n\tnuke.thisNode()\['innerChromaSize'].setValue(0)\n\tnuke.thisNode()\['innerChromaFalloff'].setValue(0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(1, 0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(2, 1)\n\tnuke.thisNode()\['innerChromaTint'].setValue(2, 2)\n\tnuke.thisNode()\['innerChromaStrength'].setValue(0.345)\n\t#\n\tnuke.thisNode()\['outerChromaEnable'].setValue(1)\n\tnuke.thisNode()\['outerChromaSize'].setValue(15)\n\tnuke.thisNode()\['outerChromaTint'].setValue(1, 0)\n\tnuke.thisNode()\['outerChromaTint'].setValue(5, 1)\n\tnuke.thisNode()\['outerChromaTint'].setValue(5, 2)\n\tnuke.thisNode()\['outerChromaStrength'].setValue(1)\n\t#\n\tnuke.thisNode()\['distortionEnable'].setValue(1)\n\tnuke.thisNode()\['distortionSize'].setValue(100)\n\tnuke.thisNode()\['noiseDetail'].setValue(1)\n\tnuke.thisNode()\['distortionStrength'].setValue(0.7)\n\t#\n\tnuke.thisNode()\['circularTypePicker'].setValue(6)\n\tnuke.thisNode()\['spikedTypePicker'].setValue(0)\n\nif nuke.thisNode()\['presetPicker'].value() == \"purple haze\":\n\tnuke.thisNode()\['bokehType'].setValue(0)\n\tnuke.thisNode()\['bokehAnamorph'].setValue(0)\n\tnuke.thisNode()\['bokehRotation'].setValue(0)\n\tnuke.thisNode()\['bokehGamma'].setValue(0.185)\n\tnuke.thisNode()\['grainEnable'].setValue(1)\n\t#\t\n\tnuke.thisNode()\['noiseEnable'].setValue(1)\n\tnuke.thisNode()\['noiseSize'].setValue(100)\n\tnuke.thisNode()\['noiseGain'].setValue(0.765)\n\tnuke.thisNode()\['noiseGamma'].setValue(0.1)\n\tnuke.thisNode()\['noiseMix'].setValue(0.08)\n\t#\n\tnuke.thisNode()\['naturalNoiseEnable'].setValue(1)\n\tnuke.thisNode()\['naturalNoisePicker'].setValue(1)\n\tnuke.thisNode()\['naturalNoiseSize'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseSoftness'].setValue(4)\n\tnuke.thisNode()\['naturalNoiseGain'].setValue(0.13)\n\tnuke.thisNode()\['naturalNoiseGamma'].setValue(1)\n\tnuke.thisNode()\['naturalNoiseStrength'].setValue(0.155)\n\t#\n\tnuke.thisNode()\['ringsEnable'].setValue(1)\n\tnuke.thisNode()\['ringsThickness'].setValue(0.0392)\n\tnuke.thisNode()\['ringsStrength'].setValue(0.28)\n\t#\n\tnuke.thisNode()\['chromaEnable'].setValue(1)\n\tnuke.thisNode()\['innerChromaSize'].setValue(0)\n\tnuke.thisNode()\['innerChromaFalloff'].setValue(0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(2, 0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(0, 1)\n\tnuke.thisNode()\['innerChromaTint'].setValue(1.5, 2)\n\tnuke.thisNode()\['innerChromaStrength'].setValue(1)\n\t#\n\tnuke.thisNode()\['outerChromaEnable'].setValue(1)\n\tnuke.thisNode()\['outerChromaSize'].setValue(19)\n\tnuke.thisNode()\['outerChromaTint'].setValue(0, 0)\n\tnuke.thisNode()\['outerChromaTint'].setValue(10, 1)\n\tnuke.thisNode()\['outerChromaTint'].setValue(10, 2)\n\tnuke.thisNode()\['outerChromaStrength'].setValue(1)\n\t#\n\tnuke.thisNode()\['distortionEnable'].setValue(0)\n\tnuke.thisNode()\['distortionSize'].setValue(100)\n\tnuke.thisNode()\['noiseDetail'].setValue(1)\n\tnuke.thisNode()\['distortionStrength'].setValue(0.7)\n\t#\n\tnuke.thisNode()\['circularTypePicker'].setValue(4)\n\tnuke.thisNode()\['spikedTypePicker'].setValue(0)\n\t\nif nuke.thisNode()\['presetPicker'].value() == \"dirty circle\":\n\tnuke.thisNode()\['bokehType'].setValue(0)\n\tnuke.thisNode()\['bokehAnamorph'].setValue(0)\n\tnuke.thisNode()\['bokehRotation'].setValue(0)\n\tnuke.thisNode()\['bokehGamma'].setValue(0.185)\n\tnuke.thisNode()\['grainEnable'].setValue(1)\n\t#\t\n\tnuke.thisNode()\['noiseEnable'].setValue(1)\n\tnuke.thisNode()\['noiseSize'].setValue(70)\n\tnuke.thisNode()\['noiseGain'].setValue(0.63)\n\tnuke.thisNode()\['noiseGamma'].setValue(0.41)\n\tnuke.thisNode()\['noiseMix'].setValue(0.04)\n\t#\n\tnuke.thisNode()\['naturalNoiseEnable'].setValue(1)\n\tnuke.thisNode()\['naturalNoisePicker'].setValue(4)\n\tnuke.thisNode()\['naturalNoiseSize'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseSoftness'].setValue(4)\n\tnuke.thisNode()\['naturalNoiseGain'].setValue(0.585)\n\tnuke.thisNode()\['naturalNoiseGamma'].setValue(0.18)\n\tnuke.thisNode()\['naturalNoiseStrength'].setValue(0.595)\n\t#\n\tnuke.thisNode()\['ringsEnable'].setValue(1)\n\tnuke.thisNode()\['ringsThickness'].setValue(0.0472)\n\tnuke.thisNode()\['ringsStrength'].setValue(0.615)\n\t#\n\tnuke.thisNode()\['chromaEnable'].setValue(1)\n\tnuke.thisNode()\['innerChromaSize'].setValue(0)\n\tnuke.thisNode()\['innerChromaFalloff'].setValue(0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(0, 0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(0, 1)\n\tnuke.thisNode()\['innerChromaTint'].setValue(1.5, 2)\n\tnuke.thisNode()\['innerChromaStrength'].setValue(1)\n\t#\n\tnuke.thisNode()\['outerChromaEnable'].setValue(1)\n\tnuke.thisNode()\['outerChromaSize'].setValue(3.4)\n\tnuke.thisNode()\['outerChromaTint'].setValue(0, 0)\n\tnuke.thisNode()\['outerChromaTint'].setValue(5, 1)\n\tnuke.thisNode()\['outerChromaTint'].setValue(5, 2)\n\tnuke.thisNode()\['outerChromaStrength'].setValue(0.415)\n\t#\n\tnuke.thisNode()\['distortionEnable'].setValue(1)\n\tnuke.thisNode()\['distortionSize'].setValue(100)\n\tnuke.thisNode()\['noiseDetail'].setValue(2.7)\n\tnuke.thisNode()\['distortionStrength'].setValue(6)\n\t#\n\tnuke.thisNode()\['circularTypePicker'].setValue(0)\n\tnuke.thisNode()\['spikedTypePicker'].setValue(0)\n\nif nuke.thisNode()\['presetPicker'].value() == \"softer dirty circle\":\n\tnuke.thisNode()\['bokehType'].setValue(0)\n\tnuke.thisNode()\['bokehAnamorph'].setValue(0)\n\tnuke.thisNode()\['bokehRotation'].setValue(0)\n\tnuke.thisNode()\['bokehGamma'].setValue(0.185)\n\tnuke.thisNode()\['grainEnable'].setValue(1)\n\t#\t\n\tnuke.thisNode()\['noiseEnable'].setValue(1)\n\tnuke.thisNode()\['noiseSize'].setValue(70)\n\tnuke.thisNode()\['noiseGain'].setValue(0.63)\n\tnuke.thisNode()\['noiseGamma'].setValue(0.13)\n\tnuke.thisNode()\['noiseMix'].setValue(0.04)\n\t#\n\tnuke.thisNode()\['naturalNoiseEnable'].setValue(1)\n\tnuke.thisNode()\['naturalNoisePicker'].setValue(4)\n\tnuke.thisNode()\['naturalNoiseSize'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseSoftness'].setValue(4)\n\tnuke.thisNode()\['naturalNoiseGain'].setValue(0.585)\n\tnuke.thisNode()\['naturalNoiseGamma'].setValue(0.18)\n\tnuke.thisNode()\['naturalNoiseStrength'].setValue(0.595)\n\t#\n\tnuke.thisNode()\['ringsEnable'].setValue(1)\n\tnuke.thisNode()\['ringsThickness'].setValue(0.0472)\n\tnuke.thisNode()\['ringsStrength'].setValue(0.615)\n\t#\n\tnuke.thisNode()\['chromaEnable'].setValue(1)\n\tnuke.thisNode()\['innerChromaSize'].setValue(0)\n\tnuke.thisNode()\['innerChromaFalloff'].setValue(0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(0, 0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(0, 1)\n\tnuke.thisNode()\['innerChromaTint'].setValue(1.5, 2)\n\tnuke.thisNode()\['innerChromaStrength'].setValue(1)\n\t#\n\tnuke.thisNode()\['outerChromaEnable'].setValue(1)\n\tnuke.thisNode()\['outerChromaSize'].setValue(3.4)\n\tnuke.thisNode()\['outerChromaTint'].setValue(0, 0)\n\tnuke.thisNode()\['outerChromaTint'].setValue(5, 1)\n\tnuke.thisNode()\['outerChromaTint'].setValue(5, 2)\n\tnuke.thisNode()\['outerChromaStrength'].setValue(0.415)\n\t#\n\tnuke.thisNode()\['distortionEnable'].setValue(1)\n\tnuke.thisNode()\['distortionSize'].setValue(100)\n\tnuke.thisNode()\['noiseDetail'].setValue(2.7)\n\tnuke.thisNode()\['distortionStrength'].setValue(6)\n\t#\n\tnuke.thisNode()\['circularTypePicker'].setValue(4)\n\tnuke.thisNode()\['spikedTypePicker'].setValue(0)\n\nif nuke.thisNode()\['presetPicker'].value() == \"super blue\":\n\tnuke.thisNode()\['bokehType'].setValue(0)\n\tnuke.thisNode()\['bokehAnamorph'].setValue(0.08)\n\tnuke.thisNode()\['bokehRotation'].setValue(0)\n\tnuke.thisNode()\['bokehGamma'].setValue(0.165)\n\tnuke.thisNode()\['grainEnable'].setValue(1)\n\t#\t\n\tnuke.thisNode()\['noiseEnable'].setValue(1)\n\tnuke.thisNode()\['noiseSize'].setValue(70)\n\tnuke.thisNode()\['noiseGain'].setValue(0.32)\n\tnuke.thisNode()\['noiseGamma'].setValue(0.105)\n\tnuke.thisNode()\['noiseMix'].setValue(0.095)\n\t#\n\tnuke.thisNode()\['naturalNoiseEnable'].setValue(1)\n\tnuke.thisNode()\['naturalNoisePicker'].setValue(4)\n\tnuke.thisNode()\['naturalNoiseSize'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseSoftness'].setValue(1.2)\n\tnuke.thisNode()\['naturalNoiseGain'].setValue(0.375)\n\tnuke.thisNode()\['naturalNoiseGamma'].setValue(0.69)\n\tnuke.thisNode()\['naturalNoiseStrength'].setValue(1)\n\t#\n\tnuke.thisNode()\['ringsEnable'].setValue(1)\n\tnuke.thisNode()\['ringsThickness'].setValue(0.0472)\n\tnuke.thisNode()\['ringsStrength'].setValue(0.615)\n\t#\n\tnuke.thisNode()\['chromaEnable'].setValue(1)\n\tnuke.thisNode()\['innerChromaSize'].setValue(11)\n\tnuke.thisNode()\['innerChromaFalloff'].setValue(78)\n\tnuke.thisNode()\['innerChromaTint'].setValue(0, 0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(5, 1)\n\tnuke.thisNode()\['innerChromaTint'].setValue(10, 2)\n\tnuke.thisNode()\['innerChromaStrength'].setValue(0.88)\n\t#\n\tnuke.thisNode()\['outerChromaEnable'].setValue(1)\n\tnuke.thisNode()\['outerChromaSize'].setValue(26.5)\n\tnuke.thisNode()\['outerChromaTint'].setValue(0, 0)\n\tnuke.thisNode()\['outerChromaTint'].setValue(4, 1)\n\tnuke.thisNode()\['outerChromaTint'].setValue(10, 2)\n\tnuke.thisNode()\['outerChromaStrength'].setValue(1)\n\t#\n\tnuke.thisNode()\['distortionEnable'].setValue(1)\n\tnuke.thisNode()\['distortionSize'].setValue(100)\n\tnuke.thisNode()\['noiseDetail'].setValue(2.7)\n\tnuke.thisNode()\['distortionStrength'].setValue(3.4)\n\t#\n\tnuke.thisNode()\['circularTypePicker'].setValue(5)\n\tnuke.thisNode()\['spikedTypePicker'].setValue(0)\n\nif nuke.thisNode()\['presetPicker'].value() == \"soft spike\":\n\tnuke.thisNode()\['bokehType'].setValue(1)\n\tnuke.thisNode()\['bokehAnamorph'].setValue(0)\n\tnuke.thisNode()\['bokehRotation'].setValue(0)\n\tnuke.thisNode()\['bokehGamma'].setValue(0)\n\tnuke.thisNode()\['grainEnable'].setValue(0)\n\t#\t\n\tnuke.thisNode()\['noiseEnable'].setValue(1)\n\tnuke.thisNode()\['noiseSize'].setValue(86)\n\tnuke.thisNode()\['noiseGain'].setValue(0.43)\n\tnuke.thisNode()\['noiseGamma'].setValue(0.15)\n\tnuke.thisNode()\['noiseMix'].setValue(0.055)\n\t#\n\tnuke.thisNode()\['naturalNoiseEnable'].setValue(1)\n\tnuke.thisNode()\['naturalNoisePicker'].setValue(3)\n\tnuke.thisNode()\['naturalNoiseSize'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseSoftness'].setValue(1.2)\n\tnuke.thisNode()\['naturalNoiseGain'].setValue(0.375)\n\tnuke.thisNode()\['naturalNoiseGamma'].setValue(0.69)\n\tnuke.thisNode()\['naturalNoiseStrength'].setValue(0.205)\n\t#\n\tnuke.thisNode()\['ringsEnable'].setValue(0)\n\tnuke.thisNode()\['ringsThickness'].setValue(0.0472)\n\tnuke.thisNode()\['ringsStrength'].setValue(0.615)\n\t#\n\tnuke.thisNode()\['chromaEnable'].setValue(1)\n\tnuke.thisNode()\['innerChromaSize'].setValue(11)\n\tnuke.thisNode()\['innerChromaFalloff'].setValue(78)\n\tnuke.thisNode()\['innerChromaTint'].setValue(0, 0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(2, 1)\n\tnuke.thisNode()\['innerChromaTint'].setValue(5, 2)\n\tnuke.thisNode()\['innerChromaStrength'].setValue(1)\n\t#\n\tnuke.thisNode()\['outerChromaEnable'].setValue(1)\n\tnuke.thisNode()\['outerChromaSize'].setValue(10)\n\tnuke.thisNode()\['outerChromaTint'].setValue(0, 0)\n\tnuke.thisNode()\['outerChromaTint'].setValue(4, 1)\n\tnuke.thisNode()\['outerChromaTint'].setValue(5, 2)\n\tnuke.thisNode()\['outerChromaStrength'].setValue(0.385)\n\t#\n\tnuke.thisNode()\['distortionEnable'].setValue(0)\n\tnuke.thisNode()\['distortionSize'].setValue(100)\n\tnuke.thisNode()\['noiseDetail'].setValue(2.7)\n\tnuke.thisNode()\['distortionStrength'].setValue(3.4)\n\t#\n\tnuke.thisNode()\['circularTypePicker'].setValue(0)\n\tnuke.thisNode()\['spikedTypePicker'].setValue(2)"} addUserKnob {26 uiControlHeader l "UI controls"} addUserKnob {22 resetButton l "reset all" T "import nuke\n\n#TEMPLATE\n#nuke.thisNode()\[''].setValue()\n\nif nuke.ask('Are you sure you want to reset the bokeh shape? This cannot be undone!'):\t\n\tnuke.thisNode()\['bokehQuality'].setValue(0.2)\n\tnuke.thisNode()\['bokehType'].setValue(0)\n\tnuke.thisNode()\['bokehAnamorph'].setValue(0)\n\tnuke.thisNode()\['bokehRotation'].setValue(0)\n\tnuke.thisNode()\['bokehGamma'].setValue(0)\n\tnuke.thisNode()\['grainEnable'].setValue(0)\n\t#\t\n\tnuke.thisNode()\['noiseEnable'].setValue(1)\n\tnuke.thisNode()\['noiseSize'].setValue(100)\n\tnuke.thisNode()\['noiseGain'].setValue(0.5)\n\tnuke.thisNode()\['noiseGamma'].setValue(0.4)\n\tnuke.thisNode()\['noiseMix'].setValue(0.05)\n\t#\n\tnuke.thisNode()\['naturalNoiseEnable'].setValue(1)\n\tnuke.thisNode()\['naturalNoisePicker'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseSize'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseSoftness'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseGain'].setValue(0)\n\tnuke.thisNode()\['naturalNoiseGamma'].setValue(0.7)\n\tnuke.thisNode()\['naturalNoiseStrength'].setValue(0.4)\n\t#\n\tnuke.thisNode()\['ringsEnable'].setValue(0)\n\tnuke.thisNode()\['ringsThickness'].setValue(0.04)\n\tnuke.thisNode()\['ringsStrength'].setValue(0.1)\n\t#\n\tnuke.thisNode()\['chromaEnable'].setValue(0)\n\tnuke.thisNode()\['innerChromaSize'].setValue(0)\n\tnuke.thisNode()\['innerChromaFalloff'].setValue(0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(1, 0)\n\tnuke.thisNode()\['innerChromaTint'].setValue(1, 1)\n\tnuke.thisNode()\['innerChromaTint'].setValue(1, 2)\n\tnuke.thisNode()\['innerChromaStrength'].setValue(0.5)\n\t#\n\tnuke.thisNode()\['outerChromaEnable'].setValue(0)\n\tnuke.thisNode()\['outerChromaSize'].setValue(0)\n\tnuke.thisNode()\['outerChromaTint'].setValue(1, 0)\n\tnuke.thisNode()\['outerChromaTint'].setValue(1, 1)\n\tnuke.thisNode()\['outerChromaTint'].setValue(1, 2)\n\tnuke.thisNode()\['outerChromaStrength'].setValue(1)\n\t#\n\tnuke.thisNode()\['distortionEnable'].setValue(0)\n\tnuke.thisNode()\['distortionSize'].setValue(100)\n\tnuke.thisNode()\['noiseDetail'].setValue(1)\n\tnuke.thisNode()\['distortionStrength'].setValue(8.5)\n\t#\n\tnuke.thisNode()\['circularTypePicker'].setValue(0)\n\tnuke.thisNode()\['spikedTypePicker'].setValue(0)" +STARTLINE} addUserKnob {20 globalTab l global} addUserKnob {26 globalOptionsHeader l "global options"} addUserKnob {20 noiseGrp l noise n 1} addUserKnob {6 noiseEnable l enable +STARTLINE} noiseEnable true addUserKnob {26 ""} addUserKnob {14 noiseSize l size R 0 100} noiseSize 100 addUserKnob {7 noiseGain l gain R 0.1 1} noiseGain 0.5 addUserKnob {7 noiseGamma l gamma} noiseGamma 0.4 addUserKnob {26 ""} addUserKnob {7 noiseMix l strength} noiseMix 0.05 addUserKnob {26 ""} addUserKnob {20 endGroup_3 l endGroup n -1} addUserKnob {20 naturalNoiseGrp l "natural noise" n 1} addUserKnob {6 naturalNoiseEnable l enable +STARTLINE} naturalNoiseEnable true addUserKnob {4 naturalNoisePicker l type M {wavy streaks blobs "spiky blobs" "inverted blobs"}} addUserKnob {26 ""} addUserKnob {14 naturalNoiseSize l size R 0 100} addUserKnob {14 naturalNoiseSoftness l softness R 0 100} addUserKnob {7 naturalNoiseGain l gain} addUserKnob {7 naturalNoiseGamma l gamma} naturalNoiseGamma 0.7 addUserKnob {26 ""} addUserKnob {7 naturalNoiseStrength l strength} naturalNoiseStrength 0.4 addUserKnob {26 ""} addUserKnob {20 endGroup_8 l endGroup n -1} addUserKnob {20 ringsGrp l rings n 1} ringsGrp 0 addUserKnob {6 ringsEnable l enable +STARTLINE} addUserKnob {26 ""} addUserKnob {7 ringsThickness l thickness R 0 0.05} ringsThickness 0.04 addUserKnob {26 thicknessDescriptor l "" +STARTLINE T "(thick) < - - - > (thin)"} addUserKnob {26 ""} addUserKnob {7 ringsStrength l strength} ringsStrength 0.1 addUserKnob {26 ""} addUserKnob {20 endGroup_4 l endGroup n -1} addUserKnob {20 innerChromaGrp l "inner chroma" n 1} innerChromaGrp 0 addUserKnob {6 chromaEnable l enable +STARTLINE} addUserKnob {26 ""} addUserKnob {14 innerChromaSize l size R 0 100} addUserKnob {7 innerChromaFalloff l falloff R 0 200} addUserKnob {18 innerChromaTint l tint} innerChromaTint {1 1 1} addUserKnob {6 innerChromaTint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {7 innerChromaStrength l strength} innerChromaStrength 0.5 addUserKnob {26 ""} addUserKnob {20 endGroup_5 l endGroup n -1} addUserKnob {20 outerChromaGrp l "outer chroma" n 1} outerChromaGrp 0 addUserKnob {6 outerChromaEnable l enable +STARTLINE} addUserKnob {26 ""} addUserKnob {14 outerChromaSize l size R 0 100} addUserKnob {18 outerChromaTint l tint} outerChromaTint {1 1 1} addUserKnob {6 outerChromaTint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {7 outerChromaStrength l strength} outerChromaStrength 1 addUserKnob {26 ""} addUserKnob {20 endGroup_7 l endGroup n -1} addUserKnob {20 distortionGrp l distortion n 1} distortionGrp 0 addUserKnob {6 distortionEnable l enable +STARTLINE} addUserKnob {26 ""} addUserKnob {14 distortionSize l size R 0 100} distortionSize 100 addUserKnob {7 noiseDetail l detail R 1 10} noiseDetail 1 addUserKnob {26 ""} addUserKnob {14 distortionStrength l strength R 0 100} distortionStrength 8.5 addUserKnob {26 ""} addUserKnob {20 endGroup_6 l endGroup n -1} addUserKnob {20 typeTab l type} addUserKnob {26 typeHeader_1 l "type options"} addUserKnob {20 circularGrp l circular n 1} addUserKnob {4 circularTypePicker l type M {"solid circle" "radial falloff" "smooth radial falloff" "soft outer clip" "inverted outer clip" "sharp split" "thin clip" "punch hole" ""}} addUserKnob {20 endGroup n -1} addUserKnob {20 spikedGrp l spiked n 1} addUserKnob {4 spikedTypePicker l type M {"medium incline" "short incline" "soft curves" "no incline"}} addUserKnob {20 endGroup_1 l endGroup n -1} } Noise { inputs 0 size {{parent.distortionSize}} lacunarity {{parent.noiseDetail}} center {640 360} name Noise2 xpos -196 ypos 959 } Reformat { inputs 0 type "to box" box_width 512 box_height 512 box_fixed true name Reformat2 xpos 992 ypos -312 } Dot { name Dot38 xpos 1026 ypos -286 } set N672a3400 [stack 0] Dot { name Dot41 xpos 1864 ypos -286 } Flare { position {256 256} radius {80 113.15 120} size_mult 2 ring_color 0.33 inner_color 0.1 outer_falloff 0.56 inner_falloff 1.55 flattening 0.7 sharpness 0.98 name Flare8 xpos 1830 ypos -222 } Dot { name Dot37 xpos 1864 ypos 337 } push $N672a3400 Flare { position {256 256} radius {80 117.54 120} size_mult 2 inner_color 1 flattening 0.7 sharpness 0.98 name Flare7 xpos 992 ypos -251 } Roto { output alpha curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x43800000 x43800000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier1 512 bezier {{cc {f 8192} {px x429e0000 {0 0} {xc2635552 x41e40000} {0 0} {0 0} {x438000a9 x438000ac} {0 0} {0 0} {x43b0c000 xc21c0000} {0 0}}} idem} {tx x429e0000 x4325d555 x426f5555} {a osw x41200000 osf 0 str 1 spx x43800000 spy x43800000 sb 1 ltn x429e0000 ltm x429e0000 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {256 256} colorOverlay {0 0 0 0} lifetime_type "all frames" lifetime_start 79 lifetime_end 79 motionblur_shutter_offset_type centred source_black_outside true name Roto1 xpos 992 ypos -209 } Premult { name Premult2 xpos 992 ypos -158 } set N7cf6b400 [stack 0] Transform { rotate 60 center {256 256} name Transform9 xpos 1103 ypos -129 } set N7cf6b000 [stack 0] Transform { rotate {{parent.Transform9.rotate}} center {256 256} name Transform10 xpos 1103 ypos -79 } set N7cf6ac00 [stack 0] Transform { rotate {{parent.Transform9.rotate}} center {256 256} name Transform11 xpos 1103 ypos -37 } set N7cf6a800 [stack 0] Transform { rotate {{parent.Transform9.rotate}} center {256 256} name Transform12 xpos 1103 ypos 10 } set N7cf6a400 [stack 0] Transform { rotate {{parent.Transform9.rotate}} center {256 256} name Transform13 xpos 1103 ypos 50 } set N7cf6a000 [stack 0] Transform { rotate {{parent.Transform9.rotate}} center {256 256} name Transform14 xpos 1103 ypos 104 } Roto { curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x43800000 x43800000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier3 512 bezier {{cc {f 8192} {px x429e0000 {0 0} {x43538000 x439a0000} {0 0} {xc0400000 x40800000} {x434f0000 x43568000} {x40400000 xc0800000} {xc1800000 xc1e80000} {x439a4000 x43500000} {x41800000 x41e80000} {x40d00000 xc1780000} {x43a34000 x4386c000} {xc0d00000 x41780000} {x3fc00000 x3fc00000} {x435e0000 x439b0000} {xbfc00000 xbfc00000}}} idem} {tx x429e0000 x437f199a x43830000} {a osw x41200000 osf 0 str 1 spx x43800000 spy x43800000 sb 1 ltn x429e0000 ltm x429e0000 tt x40800000}} {curvegroup Bezier2 512 bezier {{cc {f 8192} {px x429e0000 {0 0} {x43a3a666 x42533333} {0 0} {x3e999800 x3dccce00} {x43963333 x4205999a} {xbe999800 xbdccce00} {xbf666600 1} {x4396599a x41dccccd} {x3f666600 xbf800000} {xc1133340 x3f4ccce0} {x439d6666 x41a5999a} {x41133340 xbf4ccce0} {xbf800000 xc111999c} {x43a9a666 x41c66666} {1 x4111999c} {x40466680 xc0533340} {x43a8599a x422c6666} {xc0466680 x40533340}}} idem} {tx x429e0000 x439feeef x4206eeef} {a r 0 g 0 b 0 a 0 osw x41200000 osf 0 str 1 spx x43800000 spy x43800000 sb 1 ltn x429e0000 ltm x429e0000 tt x40800000}} {curvegroup Bezier1 512 bezier {{cc {f 8192} {px x429e0000 {0 0} {x438aa333 x42633333} {0 0} {xbeccd000 1} {x438be666 x41b1999a} {x3eccd000 xbf800000} {xbfb33300 0} {x438d6684 x41b134ff} {x3fb33300 0} {xbf4cce00 xbf199980} {x43b6c2eb x42a4ce98} {x3f4cce00 x3f199980} {xbf999a00 xbfb33300} {x43d4cb40 x430aa9b0} {x3f999a00 x3fb33300} {x41266660 x40866660} {x43973333 x43006666} {xc1266660 xc0866660}}} {cc {f 8192} {px x429e0000 {0 0} {xc010fe00 x3ed4da80} {0 0} {xbeccd000 1} {xbff23900 xbf5b6460} {x3eccd000 xbf800000} {xbfb33300 0} {0 xc0180000} {x3fb33300 0} {xbf4cce00 xbf199980} {x3f9f6f00 xbfc59f00} {x3f4cce00 x3f199980} {xbf999a00 xbfb33300} {x40a4f180 x400a2280} {x3f999a00 x3fb33300} {x41266660 x40866660} {0 0} {xc1266660 xc0866660}}}} {tx x429e0000 x43a15555 x42944445} {a osw x41200000 osf 0 str 1 spx x43800000 spy x43800000 sb 1 ltn x429e0000 ltm x429e0000 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {256 256} colorOverlay {0 0 0 0} lifetime_type "all frames" lifetime_start 79 lifetime_end 79 motionblur_shutter_offset_type centred source_black_outside true name Roto2 xpos 1103 ypos 130 } push $N7cf6a000 push $N7cf6a400 push $N7cf6a800 push $N7cf6ac00 push $N7cf6b000 push $N7cf6b400 Merge2 { inputs 2 name Merge22 xpos 992 ypos -96 } Merge2 { inputs 2 name Merge23 xpos 992 ypos -53 } Merge2 { inputs 2 name Merge24 xpos 992 ypos -11 } Merge2 { inputs 2 name Merge25 xpos 992 ypos 36 } Merge2 { inputs 2 name Merge26 xpos 992 ypos 111 } Merge2 { inputs 2 name Merge27 xpos 992 ypos 165 } set N7fff3c00 [stack 0] Dot { name Dot35 xpos 1136 ypos 169 } set N7fff3800 [stack 0] Dot { name Dot45 xpos 1246 ypos 169 } Dot { name Dot46 xpos 1246 ypos -217 } Dot { name Dot47 xpos 1404 ypos -217 } set N7fff2c00 [stack 0] Dot { name Dot40 xpos 1657 ypos -217 } Roto { curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44200000 x43b40000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {layer Layer6 {f 512} {t x43800000 x43800000 0 0 0 0 0 0 x43960000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier1 512 bezier {{cc {f 8192} {px x429e0000 {xbe4cd000 0} {x43def9f0 x43c58d06} {x3e4cd000 0} {x3f000000 x3ff33300} {x43dcf97c x43c0e62d} {xbf000000 xbff33300} {x3e4cc800 x40600000} {x43dbd960 x43baed22} {xbe4cc800 xc0600000} {xbe4cc800 x40399980} {x43dc199a x43b48ccd} {x3e4cc800 xc0399980} {x3dccd000 x40066680} {x43dca714 x43aecccd} {xbdccd000 xc0066680} {x40a999c0 xc0833300} {x43d5599a x43add99a} {xc0a999c0 x40833300} {x3f999900 xc11b3340} {x43ce6666 x43baa666} {xbf999900 x411b3340} {xc08cccc0 xbe4cd000} {x43d74000 x43c68000} {x408cccc0 x3e4cd000}}} {cc {f 8192} {px x429e0000 {xbe4cd000 0} {x4023ab80 x3f7fa800} {x3e4cd000 0} {x3f000000 x3ff33300} {x400bf800 xbf57ce00} {xbf000000 xbff33300} {x3e4cc800 x40600000} {x4020a480 x3e144800} {xbe4cc800 xc0600000} {xbe4cc800 x40399980} {x401ebb00 xbd9df000} {x3e4cc800 xc0399980} {x3dccd000 x40066680} {x403de500 xc04d7d80} {xbdccd000 xc0066680} {x40a999c0 xc0833300} {0 0} {xc0a999c0 x40833300} {x3f999900 xc11b3340} {0 0} {xbf999900 x411b3340} {xc08cccc0 xbe4cd000} {xbe9ba000 x40498400} {x408cccc0 x3e4cd000}}}} {tx x429e0000 x43d97000 x43ba8666} {a osw x41200000 osf 0 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x40800000}}} {layer Layer5 {f 512} {t x43800000 x43800000 0 0 0 0 0 0 x43700000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier1 512 bezier {{cc {f 8192} {px x429e0000 {xbe4cd000 0} {x43def9f0 x43c58d06} {x3e4cd000 0} {x3f000000 x3ff33300} {x43dcf97c x43c0e62d} {xbf000000 xbff33300} {x3e4cc800 x40600000} {x43dbd960 x43baed22} {xbe4cc800 xc0600000} {xbe4cc800 x40399980} {x43dc199a x43b48ccd} {x3e4cc800 xc0399980} {x3dccd000 x40066680} {x43dca714 x43aecccd} {xbdccd000 xc0066680} {x40a999c0 xc0833300} {x43d5599a x43add99a} {xc0a999c0 x40833300} {x3f999900 xc11b3340} {x43ce6666 x43baa666} {xbf999900 x411b3340} {xc08cccc0 xbe4cd000} {x43d74000 x43c68000} {x408cccc0 x3e4cd000}}} {cc {f 8192} {px x429e0000 {xbe4cd000 0} {x4023ab80 x3f7fa800} {x3e4cd000 0} {x3f000000 x3ff33300} {x400bf800 xbf57ce00} {xbf000000 xbff33300} {x3e4cc800 x40600000} {x4020a480 x3e144800} {xbe4cc800 xc0600000} {xbe4cc800 x40399980} {x401ebb00 xbd9df000} {x3e4cc800 xc0399980} {x3dccd000 x40066680} {x403de500 xc04d7d80} {xbdccd000 xc0066680} {x40a999c0 xc0833300} {0 0} {xc0a999c0 x40833300} {x3f999900 xc11b3340} {0 0} {xbf999900 x411b3340} {xc08cccc0 xbe4cd000} {xbe9ba000 x40498400} {x408cccc0 x3e4cd000}}}} {tx x429e0000 x43d97000 x43ba8666} {a osw x41200000 osf 0 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x40800000}}} {layer Layer4 {f 512} {t x43800000 x43800000 0 0 0 0 0 0 x43340000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier1 512 bezier {{cc {f 8192} {px x429e0000 {xbe4cd000 0} {x43def9f0 x43c58d06} {x3e4cd000 0} {x3f000000 x3ff33300} {x43dcf97c x43c0e62d} {xbf000000 xbff33300} {x3e4cc800 x40600000} {x43dbd960 x43baed22} {xbe4cc800 xc0600000} {xbe4cc800 x40399980} {x43dc199a x43b48ccd} {x3e4cc800 xc0399980} {x3dccd000 x40066680} {x43dca714 x43aecccd} {xbdccd000 xc0066680} {x40a999c0 xc0833300} {x43d5599a x43add99a} {xc0a999c0 x40833300} {x3f999900 xc11b3340} {x43ce6666 x43baa666} {xbf999900 x411b3340} {xc08cccc0 xbe4cd000} {x43d74000 x43c68000} {x408cccc0 x3e4cd000}}} {cc {f 8192} {px x429e0000 {xbe4cd000 0} {x4023ab80 x3f7fa800} {x3e4cd000 0} {x3f000000 x3ff33300} {x400bf800 xbf57ce00} {xbf000000 xbff33300} {x3e4cc800 x40600000} {x4020a480 x3e144800} {xbe4cc800 xc0600000} {xbe4cc800 x40399980} {x401ebb00 xbd9df000} {x3e4cc800 xc0399980} {x3dccd000 x40066680} {x403de500 xc04d7d80} {xbdccd000 xc0066680} {x40a999c0 xc0833300} {0 0} {xc0a999c0 x40833300} {x3f999900 xc11b3340} {0 0} {xbf999900 x411b3340} {xc08cccc0 xbe4cd000} {xbe9ba000 x40498400} {x408cccc0 x3e4cd000}}}} {tx x429e0000 x43d97000 x43ba8666} {a osw x41200000 osf 0 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x40800000}}} {layer Layer3 {f 512} {t x43800000 x43800000 0 0 0 0 0 0 x42f00000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier1 512 bezier {{cc {f 8192} {px x429e0000 {xbe4cd000 0} {x43def9f0 x43c58d06} {x3e4cd000 0} {x3f000000 x3ff33300} {x43dcf97c x43c0e62d} {xbf000000 xbff33300} {x3e4cc800 x40600000} {x43dbd960 x43baed22} {xbe4cc800 xc0600000} {xbe4cc800 x40399980} {x43dc199a x43b48ccd} {x3e4cc800 xc0399980} {x3dccd000 x40066680} {x43dca714 x43aecccd} {xbdccd000 xc0066680} {x40a999c0 xc0833300} {x43d5599a x43add99a} {xc0a999c0 x40833300} {x3f999900 xc11b3340} {x43ce6666 x43baa666} {xbf999900 x411b3340} {xc08cccc0 xbe4cd000} {x43d74000 x43c68000} {x408cccc0 x3e4cd000}}} {cc {f 8192} {px x429e0000 {xbe4cd000 0} {x4023ab80 x3f7fa800} {x3e4cd000 0} {x3f000000 x3ff33300} {x400bf800 xbf57ce00} {xbf000000 xbff33300} {x3e4cc800 x40600000} {x4020a480 x3e144800} {xbe4cc800 xc0600000} {xbe4cc800 x40399980} {x401ebb00 xbd9df000} {x3e4cc800 xc0399980} {x3dccd000 x40066680} {x403de500 xc04d7d80} {xbdccd000 xc0066680} {x40a999c0 xc0833300} {0 0} {xc0a999c0 x40833300} {x3f999900 xc11b3340} {0 0} {xbf999900 x411b3340} {xc08cccc0 xbe4cd000} {xbe9ba000 x40498400} {x408cccc0 x3e4cd000}}}} {tx x429e0000 x43d97000 x43ba8666} {a osw x41200000 osf 0 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x40800000}}} {layer Layer2 {f 512} {t x43800000 x43800000 0 0 0 0 0 0 x42700000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier1 512 bezier {{cc {f 8192} {px x429e0000 {xbe4cd000 0} {x43def9f0 x43c58d06} {x3e4cd000 0} {x3f000000 x3ff33300} {x43dcf97c x43c0e62d} {xbf000000 xbff33300} {x3e4cc800 x40600000} {x43dbd960 x43baed22} {xbe4cc800 xc0600000} {xbe4cc800 x40399980} {x43dc199a x43b48ccd} {x3e4cc800 xc0399980} {x3dccd000 x40066680} {x43dca714 x43aecccd} {xbdccd000 xc0066680} {x40a999c0 xc0833300} {x43d5599a x43add99a} {xc0a999c0 x40833300} {x3f999900 xc11b3340} {x43ce6666 x43baa666} {xbf999900 x411b3340} {xc08cccc0 xbe4cd000} {x43d74000 x43c68000} {x408cccc0 x3e4cd000}}} {cc {f 8192} {px x429e0000 {xbe4cd000 0} {x4023ab80 x3f7fa800} {x3e4cd000 0} {x3f000000 x3ff33300} {x400bf800 xbf57ce00} {xbf000000 xbff33300} {x3e4cc800 x40600000} {x4020a480 x3e144800} {xbe4cc800 xc0600000} {xbe4cc800 x40399980} {x401ebb00 xbd9df000} {x3e4cc800 xc0399980} {x3dccd000 x40066680} {x403de500 xc04d7d80} {xbdccd000 xc0066680} {x40a999c0 xc0833300} {0 0} {xc0a999c0 x40833300} {x3f999900 xc11b3340} {0 0} {xbf999900 x411b3340} {xc08cccc0 xbe4cd000} {xbe9ba000 x40498400} {x408cccc0 x3e4cd000}}}} {tx x429e0000 x43d97000 x43ba8666} {a osw x41200000 osf 0 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x40800000}}} {layer Layer1 {f 512} {t x43800000 x43800000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier1 512 bezier {{cc {f 8192} {px x429e0000 {xbe4cd000 0} {x43def9f0 x43c58d06} {x3e4cd000 0} {x3f000000 x3ff33300} {x43dcf97c x43c0e62d} {xbf000000 xbff33300} {x3e4cc800 x40600000} {x43dbd960 x43baed22} {xbe4cc800 xc0600000} {xbe4cc800 x40399980} {x43dc199a x43b48ccd} {x3e4cc800 xc0399980} {x3dccd000 x40066680} {x43dca714 x43aecccd} {xbdccd000 xc0066680} {x40a999c0 xc0833300} {x43d5599a x43add99a} {xc0a999c0 x40833300} {x3f999900 xc11b3340} {x43ce6666 x43baa666} {xbf999900 x411b3340} {xc08cccc0 xbe4cd000} {x43d74000 x43c68000} {x408cccc0 x3e4cd000}}} {cc {f 8192} {px x429e0000 {xbe4cd000 0} {x4023ab80 x3f7fa800} {x3e4cd000 0} {x3f000000 x3ff33300} {x400bf800 xbf57ce00} {xbf000000 xbff33300} {x3e4cc800 x40600000} {x4020a480 x3e144800} {xbe4cc800 xc0600000} {xbe4cc800 x40399980} {x401ebb00 xbd9df000} {x3e4cc800 xc0399980} {x3dccd000 x40066680} {x403de500 xc04d7d80} {xbdccd000 xc0066680} {x40a999c0 xc0833300} {0 0} {xc0a999c0 x40833300} {x3f999900 xc11b3340} {0 0} {xbf999900 x411b3340} {xc08cccc0 xbe4cd000} {xbe9ba000 x40498400} {x408cccc0 x3e4cd000}}}} {tx x429e0000 x43d97000 x43ba8666} {a osw x41200000 osf 0 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x40800000}}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {640 360} colorOverlay {0 0 0 0} lifetime_type "all frames" lifetime_start 79 lifetime_end 79 view {} motionblur_on true motionblur_shutter_offset_type centred source_black_outside true name Roto4 xpos 1623 ypos -99 } Grade { multiply 0.28 name Grade18 xpos 1623 ypos -20 } Dot { name Dot39 xpos 1657 ypos 54 } set N7fff1c00 [stack 0] Dot { name Dot44 xpos 1767 ypos 54 } FilterErode { channels all size 31 name FilterErode7 xpos 1733 ypos 120 } Blur { size 37 name Blur12 xpos 1733 ypos 173 } push $N7fff1c00 Merge2 { inputs 2 operation from mix 0.705 name Merge21 xpos 1623 ypos 227 } Dot { name Dot36 xpos 1657 ypos 290 } push $N7fff2c00 Roto { curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44200000 x43b40000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {layer Layer6 {f 2097664} {t x43800000 x43800000 0 0 0 0 0 0 x43960000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier1 512 bezier {{cc {f 8192} {px x429e0000 {0 0} {x43ddc380 x43c2ac85} {0 0} {0 0} {x436aabab x43ec7e7e} {0 0} {0 0} {x43681818 x43f6e7e8} {0 0} {0 0} {x43ede666 x43cb3333} {0 0}}} {cc {f 8192} {px x429e0000 {0 0} {xbee5b000 xc01dde00} {0 0} {0 0} {xbfd7e700 xc02c0480} {0 0} {0 0} {0 0} {0 0} {0 0} {0 0} {0 0}}}} {tx x429e0000 x43acd99a x43dc0667} {a osw x41200000 osf 0 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x40800000 a 0 b 0 g 0 r 0}}} {layer Layer5 {f 2097664} {t x43800000 x43800000 0 0 0 0 0 0 x43700000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier1 512 bezier {{cc {f 8192} {px x429e0000 {0 0} {x43ddc380 x43c2ac85} {0 0} {0 0} {x436aabab x43ec7e7e} {0 0} {0 0} {x43681818 x43f6e7e8} {0 0} {0 0} {x43ede666 x43cb3333} {0 0}}} {cc {f 8192} {px x429e0000 {0 0} {xbee5b000 xc01dde00} {0 0} {0 0} {xbfd7e700 xc02c0480} {0 0} {0 0} {0 0} {0 0} {0 0} {0 0} {0 0}}}} {tx x429e0000 x43acd99a x43dc0667} {a osw x41200000 osf 0 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x40800000 a 0 b 0 g 0 r 0}}} {layer Layer4 {f 512} {t x43800000 x43800000 0 0 0 0 0 0 x43340000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier1 512 bezier {{cc {f 8192} {px x429e0000 {0 0} {x43ddc380 x43c2ac85} {0 0} {0 0} {x436aabab x43ec7e7e} {0 0} {0 0} {x43681818 x43f6e7e8} {0 0} {0 0} {x43ede666 x43cb3333} {0 0}}} {cc {f 8192} {px x429e0000 {0 0} {xbee5b000 xc01dde00} {0 0} {0 0} {xbfd7e700 xc02c0480} {0 0} {0 0} {0 0} {0 0} {0 0} {0 0} {0 0}}}} {tx x429e0000 x43acd99a x43dc0667} {a osw x41200000 osf 0 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x40800000 a 0 b 0 g 0 r 0}}} {layer Layer3 {f 2097664} {t x43800000 x43800000 0 0 0 0 0 0 x42f00000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier1 512 bezier {{cc {f 8192} {px x429e0000 {0 0} {x43ddc380 x43c2ac85} {0 0} {0 0} {x436aabab x43ec7e7e} {0 0} {0 0} {x43681818 x43f6e7e8} {0 0} {0 0} {x43ede666 x43cb3333} {0 0}}} {cc {f 8192} {px x429e0000 {0 0} {xbee5b000 xc01dde00} {0 0} {0 0} {xbfd7e700 xc02c0480} {0 0} {0 0} {0 0} {0 0} {0 0} {0 0} {0 0}}}} {tx x429e0000 x43acd99a x43dc0667} {a osw x41200000 osf 0 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x40800000 a 0 b 0 g 0 r 0}}} {layer Layer2 {f 2097664} {t x43800000 x43800000 0 0 0 0 0 0 x42700000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier1 512 bezier {{cc {f 8192} {px x429e0000 {0 0} {x43ddc380 x43c2ac85} {0 0} {0 0} {x436aabab x43ec7e7e} {0 0} {0 0} {x43681818 x43f6e7e8} {0 0} {0 0} {x43ede666 x43cb3333} {0 0}}} {cc {f 8192} {px x429e0000 {0 0} {xbee5b000 xc01dde00} {0 0} {0 0} {xbfd7e700 xc02c0480} {0 0} {0 0} {0 0} {0 0} {0 0} {0 0} {0 0}}}} {tx x429e0000 x43acd99a x43dc0667} {a osw x41200000 osf 0 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x40800000 a 0 b 0 g 0 r 0}}} {layer Layer1 {f 512} {t x43800000 x43800000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier1 512 bezier {{cc {f 8192} {px x429e0000 {0 0} {x43ddc380 x43c2ac85} {0 0} {0 0} {x436aabab x43ec7e7e} {0 0} {0 0} {x43681818 x43f6e7e8} {0 0} {0 0} {x43ede666 x43cb3333} {0 0}}} {cc {f 8192} {px x429e0000 {0 0} {xbee5b000 xc01dde00} {0 0} {0 0} {xbfd7e700 xc02c0480} {0 0} {0 0} {0 0} {0 0} {0 0} {0 0} {0 0}}}} {tx x429e0000 x43acd99a x43dc0667} {a osw x41200000 osf 0 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x40800000 a 0 b 0 g 0 r 0}}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 tt 5 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {640 360} color 0 colorOverlay {0 0 0 0} lifetime_type "all frames" lifetime_start 79 lifetime_end 79 view {} motionblur_on true motionblur_shutter_offset_type centred source_black_outside true name Roto3 xpos 1370 ypos -55 } Grade { multiply 0.32 name Grade12 xpos 1370 ypos -12 } Dot { name Dot43 xpos 1404 ypos 51 } set N7ff67800 [stack 0] Dot { name Dot42 xpos 1514 ypos 51 } FilterErode { channels all size 31 name FilterErode4 xpos 1480 ypos 117 } Blur { size 37 name Blur11 xpos 1480 ypos 170 } push $N7ff67800 Merge2 { inputs 2 operation from mix 0.705 name Merge35 xpos 1370 ypos 224 } Dot { name Dot34 xpos 1404 ypos 283 } push $N7fff3800 FilterErode { channels all size 5.5 name FilterErode5 xpos 1102 ypos 210 } push $N7fff3c00 Merge2 { inputs 2 operation from mix 0.365 name Merge28 xpos 992 ypos 216 } Grade { multiply 0.32 name Grade16 xpos 992 ypos 265 } Switch { inputs 4 which {{parent.spikedTypePicker}} name Switch4 xpos 992 ypos 333 } Reformat { type "to box" box_width {{"root.width * parent.bokehQuality"}} box_height {{"root.width * parent.bokehQuality"}} box_fixed true name Reformat3 xpos 992 ypos 376 } Grain2 { name Grain2_1 label "Kodak 5248" xpos 99 ypos 500 disable {{!parent.grainEnable}} red_m 0.17 green_m 0.195 blue_m 0.235 black {0 0 0} minimum {0 0 0} maskgrain false } Constant { inputs 0 channels rgba format "512 512 0 0 512 512 1 square_512" name Constant1 xpos -78 ypos -599 } Crop { box {0 0 {"root.width * parent.bokehQuality"} {"root.width * parent.bokehQuality"}} reformat true crop false name Crop2 xpos -78 ypos -502 } Dot { name Dot1 xpos -44 ypos -411 } Dot { name Dot2 xpos -44 ypos -325 } set N7feee000 [stack 0] Dot { name Dot20 xpos 522 ypos -325 } set N7feedc00 [stack 0] Dot { name Dot24 xpos 632 ypos -325 } set N7feed800 [stack 0] Dot { name Dot26 xpos 733 ypos -325 } set N7feed400 [stack 0] Dot { name Dot28 xpos 833 ypos -325 } set N7feed000 [stack 0] Flare { position {{"parent.Crop2.box.r / 2"} {"parent.Crop2.box.t / 2"}} radius {17.14 49.31 54.22} size_mult {{"parent.Crop2.box.r / 256"}} inner_color 1 outer_falloff 0.31 inner_falloff 1.75 brightness 0.53 vis_in 1.01 vis_out 1.29 vis_mask_size 3.15 sharpness 0.93 name Flare6 xpos 861 ypos -289 } push $N7feed000 Flare { position {{"parent.Crop2.box.r / 2"} {"parent.Crop2.box.t / 2"}} radius {96.09 117.08 120} size_mult {{"parent.Crop2.box.r / 256"}} ring_color 0.235 inner_color 0.96 outer_falloff 0.31 inner_falloff 1.75 brightness 0.53 vis_in 1.01 vis_out 1.29 vis_mask_size 3.15 sharpness 0.93 name Flare5 xpos 799 ypos -260 } set N7feec400 [stack 0] Merge2 { inputs 2 operation from name Merge19 xpos 861 ypos -209 } Dot { name Dot30 xpos 895 ypos -74 } push $N7feec400 Dot { name Dot29 xpos 833 ypos -105 } push $N7feed400 Flare { position {{"parent.Crop2.box.r / 2"} {"parent.Crop2.box.t / 2"}} radius {96.09 117.08 120} size_mult {{"parent.Crop2.box.r / 256"}} ring_color 0.125 inner_color 0.74 outer_falloff 0.52 inner_falloff 0.31 brightness 0.53 vis_in 1.01 vis_out 1.29 vis_mask_size 3.15 sharpness 0.93 name Flare4 xpos 699 ypos -261 } Dot { name Dot27 xpos 733 ypos -127 } push $N7feed800 Flare { position {{"parent.Crop2.box.r / 2"} {"parent.Crop2.box.t / 2"}} radius {96.09 120 120} size_mult {{"parent.Crop2.box.r / 256"}} ring_color 0.09 inner_color 0.56 brightness 0.53 vis_in 1.01 vis_out 1.29 vis_mask_size 3.15 sharpness 0.93 name Flare3 xpos 598 ypos -261 } Dot { name Dot25 xpos 632 ypos -147 } push $N7feedc00 Flare { position {{"parent.Crop2.box.r / 2"} {"parent.Crop2.box.t / 2"}} radius {101.93 120 120} size_mult {{"parent.Crop2.box.r / 256"}} ring_color 0.6 inner_color 0.024 brightness 0.53 vis_in 1.01 vis_out 1.29 vis_mask_size 3.15 sharpness 0.93 name Flare2 xpos 488 ypos -261 } Dot { name Dot21 xpos 522 ypos -164 } push $N7feee000 Flare { position {{"parent.Crop2.box.r / 2"} {"parent.Crop2.box.t / 2"}} radius {80 119 120} size_mult {{"parent.Crop2.box.r / 256"}} ring_color 0.6 brightness 0.53 vis_in 1.01 vis_out 1.29 vis_mask_size 3.15 sharpness 0.93 name Flare1 xpos -78 ypos -266 } set N78be0800 [stack 0] Dot { name Dot4 xpos 81 ypos -262 } set N78b8fc00 [stack 0] Dot { name Dot19 xpos 295 ypos -262 } set N78b8f800 [stack 0] Blur { size 400 name Blur10 xpos 365 ypos -213 } Grade { whitepoint 0.56 name Grade9 xpos 365 ypos -175 } push $N78b8f800 Merge2 { inputs 2 operation from name Merge18 xpos 261 ypos -175 } Dot { name Dot22 xpos 295 ypos -138 } push $N78b8fc00 Blur { size 100 name Blur1 xpos 151 ypos -213 } push $N78b8fc00 Merge2 { inputs 2 operation from mix 0.9 name Merge1 xpos 47 ypos -207 } Dot { name Dot23 xpos 81 ypos -160 } push $N78be0800 Switch { inputs 8 which {{parent.circularTypePicker}} name Switch2 xpos -78 ypos -29 } Blur { size 2.2 name Blur13 xpos -78 ypos 47 } Grain2 { name Grain2_2 label "Kodak 5248" xpos -78 ypos 424 disable {{!parent.grainEnable}} red_m 0.17 green_m 0.195 blue_m 0.235 black {0 0 0} minimum {0 0 0} maskgrain false } Switch { inputs 2 which {{parent.bokehType}} name Switch1 xpos -78 ypos 535 } Transform { rotate {{parent.bokehRotation}} scale {{"1 - parent.bokehAnamorph"} 1} center {{"root.width * parent.bokehQuality / 2"} {"root.width * parent.bokehQuality / 2"}} name Transform15 xpos -78 ypos 652 } Copy { inputs 2 from0 rgba.red to0 forward.u from1 rgba.red to1 forward.v name Copy1 xpos -78 ypos 977 } IDistort { uv forward uv_scale {{parent.distortionStrength}} blur_scale 0.8 name IDistort1 xpos -78 ypos 1029 disable {{!parent.distortionEnable}} } Crop { box {0 0 {"root.width * parent.bokehQuality"} {"root.width * parent.bokehQuality"}} reformat true crop false name Crop3 xpos -78 ypos 1083 } Transform { scale 0.86 center {{"root.width * parent.bokehQuality / 2"} {"root.width * parent.bokehQuality / 2"}} name Transform16 xpos -78 ypos 1126 } Clamp { name Clamp1 xpos -78 ypos 1172 } set N78b12000 [stack 0] Shuffle { alpha red name Shuffle4 xpos 682 ypos 1178 } Dot { name Dot12 xpos 716 ypos 3715 } set N78b11800 [stack 0] Dot { name Dot15 xpos 364 ypos 3715 } Dot { name Dot16 xpos 364 ypos 4041 } push $N78b11800 Dilate { size {{"1 - parent.innerChromaSize"}} name Dilate1 xpos 682 ypos 3760 } Blur { size {{parent.innerChromaFalloff}} filter box name Blur6 xpos 682 ypos 3810 } Clamp { name Clamp5 xpos 682 ypos 3848 } Dot { name Dot14 xpos 716 ypos 3944 } Reformat { inputs 0 type "to box" box_width 500 box_height 500 box_fixed true name Reformat1 xpos 32 ypos 2994 } set N803f3800 [stack 0] RotoPaint { curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44200000 x43b40000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush87 512 catmullrom {cc {f 2080} {px x429e0000 {x41900000 x43ef8000 1} {x41800000 x43ef8000 x3ec9324d} {x41700000 x43ef8000 x3ee5b96e} {x41700000 x43ef0000 x3f0aa2a9} {x41700000 x43ee8000 x3f0b22c9} {x41700000 x43ee0000 x3f0b22c9} {x41800000 x43ed8000 x3e80a028}}} {tx x429e0000 x417b6db7 x43eec925} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush86 512 catmullrom {cc {f 2080} {px x429e0000 {x42780000 x43e08000 x3ec1304c} {x42700000 x43e08000 x3efbbef0}}} {tx x429e0000 x42740000 x43e08000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush85 512 catmullrom {cc {f 2080} {px x429e0000 {x43580000 x43e78000 1}}} {tx x429e0000 x43580000 x43e78000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush84 512 catmullrom {cc {f 2080} {px x429e0000 {x43700000 x43ca0000 1} {x436f0000 x43ca0000 x3f05a168} {x436d0000 x43c98000 x3f2deb7b} {x436c0000 x43c98000 x3f2f6bdb} {x436c0000 x43c90000 x3f23e8fa} {x436a0000 x43c88000 0}}} {tx x429e0000 x436d0000 x43c96aab} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush83 512 catmullrom {cc {f 2080} {px x429e0000 {x43d58000 x43df0000 1} {x43d48000 x43df0000 x3f00e038} {x43d58000 x43de8000 x3edf37ce}}} {tx x429e0000 x43d52aab x43ded555} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush82 512 catmullrom {cc {f 2080} {px x429e0000 {x43d90000 x43de8000 1}}} {tx x429e0000 x43d90000 x43de8000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush81 512 catmullrom {cc {f 2080} {px x429e0000 {x43d60000 x43e00000 1}}} {tx x429e0000 x43d60000 x43e00000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush80 512 catmullrom {cc {f 2080} {px x429e0000 {x43d90000 x43f00000 x3eb02c0b} {x43d80000 x43f00000 x3ece338d} {x43d78000 x43f00000 x3ed0340d} {x43d78000 x43ef8000 x3ed0340d} {x43d80000 x43ef0000 0}}} {tx x429e0000 x43d80000 x43efb333} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush79 512 catmullrom {cc {f 2080} {px x429e0000 {x43e20000 x43d60000 1} {x43e18000 x43d60000 x3f15e579} {x43e18000 x43d58000 x3f1a268a} {x43e20000 x43d48000 x3ec6b1ac}}} {tx x429e0000 x43e1c000 x43d58000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush78 512 catmullrom {cc {f 2080} {px x429e0000 {x42000000 x41a80000 1} {x42000000 x41a00000 x3f09e279} {x42000000 x41980000 x3f0a2289} {x42000000 x41900000 x3edb36ce}}} {tx x429e0000 x42000000 x419c0000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush77 512 catmullrom {cc {f 2080} {px x429e0000 {x422c0000 x437a0000 1} {x42280000 x437a0000 x3ef1bc6f} {x42280000 x43780000 x3eae2b8b}}} {tx x429e0000 x42295555 x43795555} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush76 512 catmullrom {cc {f 2080} {px x429e0000 {x43d38000 x41f00000 x3eb0ac2b} {x43d30000 x41f00000 x3ec1304c} {x43d30000 x41e80000 x3ed5b56d} {x43d38000 x41e80000 x3f0ca329} {x43d40000 x41e80000 x3f0360d8} {x43d48000 x41e00000 x3e902409}}} {tx x429e0000 x43d39555 x41e95555} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush75 512 catmullrom {cc {f 2080} {px x429e0000 {x43710000 x423c0000 1} {x43700000 x423c0000 x3ed0b42d} {x43710000 x423c0000 x3f1ae6ba} {x43730000 x423c0000 x3f18661a}}} {tx x429e0000 x43714000 x423c0000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush74 512 catmullrom {cc {f 2080} {px x429e0000 {x43908000 x434e0000 1} {x438f8000 x434e0000 x3f10e439} {x438f8000 x434d0000 x3f006018} {x438f8000 x434b0000 x3e822088}}} {tx x429e0000 x438fc000 x434d0000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush73 512 catmullrom {cc {f 2080} {px x429e0000 {x43d00000 x43950000 1} {x43d00000 x43940000 x3ef93e50} {x43d00000 x43930000 x3e773dcf}}} {tx x429e0000 x43d00000 x43940000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush72 512 catmullrom {cc {f 2080} {px x429e0000 {x43ec8000 x43690000 x3ed8360e} {x43ec8000 x43680000 x3ef53d4f} {x43ed8000 x43670000 x3ea0280a}}} {tx x429e0000 x43ecd555 x43680000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush71 512 catmullrom {cc {f 2080} {px x429e0000 {x43fc8000 x43230000 x3ebfafec} {x43fc0000 x43230000 x3eecbb2f} {x43fb8000 x43230000 x3f08a229} {x43fb8000 x43220000 x3f1324c9} {x43fb8000 x43210000 x3f11e479} {x43fc0000 x43210000 x3ece338d} {x43fc8000 x43210000 x3df83e10}}} {tx x429e0000 x43fbedb7 x43220000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush70 512 catmullrom {cc {f 2080} {px x429e0000 {x43c00000 x42ba0000 1} {x43c10000 x42ba0000 x3ece338d} {x43c10000 x42b60000 x3e152549}}} {tx x429e0000 x43c0aaab x42b8aaab} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush69 512 catmullrom {cc {f 2080} {px x429e0000 {x433f0000 x43310000 x3e842108} {x43400000 x43310000 x3eb5ad6b}}} {tx x429e0000 x433f8000 x43310000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush68 512 catmullrom {cc {f 2080} {px x429e0000 {x43410000 x43360000 1} {x43430000 x43360000 x3ef7bdef} {x43440000 x43340000 x3ee5394e} {x43450000 x43330000 x3e94a529}}} {tx x429e0000 x43434000 x4334c000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush67 512 catmullrom {cc {f 2080} {px x429e0000 {x43808000 x43040000 x3eae2b8b} {x43810000 x43030000 x3f0ae2b9} {x43818000 x43030000 x3eccb32d} {x43818000 x43020000 x3dfa3e90}}} {tx x429e0000 x43812000 x43030000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush66 512 catmullrom {cc {f 2080} {px x429e0000 {x43170000 x43b00000 x3e723c8f} {x43170000 x43af0000 x3e6b3acf}}} {tx x429e0000 x43170000 x43af8000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush65 512 catmullrom {cc {f 2080} {px x429e0000 {x429a0000 x43b70000 x3e7d3f50} {x429a0000 x43b60000 x3f01a068} {x429e0000 x43b58000 x3ea5294a}}} {tx x429e0000 x429b5555 x43b62aab} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush64 512 catmullrom {cc {f 2080} {px x429e0000 {x43950000 x43e80000 1} {x43940000 x43e80000 x3e9ba6ea}}} {tx x429e0000 x43948000 x43e80000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush63 512 catmullrom {cc {f 2080} {px x429e0000 {x42100000 x43c60000 x3eda368e} {x421c0000 x43c60000 x3eb82e0c}}} {tx x429e0000 x42160000 x43c60000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush62 512 catmullrom {cc {f 2080} {px x429e0000 {x43860000 x43940000 1} {x43858000 x43940000 x3ed8360e} {x43850000 x43940000 x3e52348d}}} {tx x429e0000 x43858000 x43940000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush61 512 catmullrom {cc {f 2080} {px x429e0000 {x43bd8000 x435a0000 1} {x43bc8000 x435a0000 x3f02a0a8} {x43bd8000 x43590000 x3f0761d8} {x43be0000 x43590000 x3f0761d8} {x43bf8000 x43590000 x3ebdaf6c} {x43c10000 x43590000 0}}} {tx x429e0000 x43be5555 x43595555} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush60 512 catmullrom {cc {f 2080} {px x429e0000 {x42480000 x42f20000 x3ec2b0ac} {x42440000 x42f20000 x3ee4390e} {x42440000 x42f00000 x3f292a4b} {x42480000 x42f00000 x3ec0b02c}}} {tx x429e0000 x42460000 x42f10000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush59 512 catmullrom {cc {f 2080} {px x429e0000 {x42f00000 x43520000 x3e862188} {x42ec0000 x43520000 x3ec8320d} {x42f00000 x43520000 x3f122489} {x42f20000 x43520000 x3edfb7ee} {x42f40000 x43520000 x3d042108}}} {tx x429e0000 x42f06666 x43520000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush58 512 catmullrom {cc {f 2080} {px x429e0000 {x43a98000 x43ea0000 x3e50340d} {x43a98000 x43ea8000 x3ec5314c} {x43a80000 x43ea8000 x3efc3f10} {x43a80000 x43ea0000 x3ed8360e} {x43a80000 x43e90000 x3e842108}}} {tx x429e0000 x43a8999a x43ea0000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush57 512 catmullrom {cc {f 2080} {px x429e0000 {x43f68000 x43b38000 x3ed0340d} {x43f68000 x43b28000 x3ea6a9aa}}} {tx x429e0000 x43f68000 x43b30000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush56 512 catmullrom {cc {f 2080} {px x429e0000 {x43ec0000 x42880000 x3edeb7ae} {x43eb8000 x42880000 x3f0ae2b9} {x43eb8000 x42860000 x3f162589}}} {tx x429e0000 x43ebaaab x42875555} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush55 512 catmullrom {cc {f 2080} {px x429e0000 {x43878000 x42b20000 x3e6d3b4f}}} {tx x429e0000 x43878000 x42b20000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush54 512 catmullrom {cc {f 2080} {px x429e0000 {x43540000 x43b58000 x3eac2b0b} {x43560000 x43b58000 x3e062188}}} {tx x429e0000 x43550000 x43b58000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush53 512 catmullrom {cc {f 2080} {px x429e0000 {x43450000 x43808000 x3edb36ce} {x43450000 x437f0000 x3efc3f10}}} {tx x429e0000 x43450000 x43800000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush52 512 catmullrom {cc {f 2080} {px x429e0000 {x43ca8000 x43370000 1} {x43ca0000 x43370000 x3f0d6359}}} {tx x429e0000 x43ca4000 x43370000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush51 512 catmullrom {cc {f 2080} {px x429e0000 {1 x42860000 x3d743d0f} {x40000000 x42860000 x3eca328d} {x40800000 x42860000 x3e5d374e}}} {tx x429e0000 x40155555 x42860000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush50 512 catmullrom {cc {f 2080} {px x429e0000 {x42ea0000 x42940000 1} {x42e80000 x42940000 x3efabeb0}}} {tx x429e0000 x42e90000 x42940000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush49 512 catmullrom {cc {f 2080} {px x429e0000 {x430b0000 x43e88000 x3ea1a86a} {x430b0000 x43e80000 x3e0b22c9}}} {tx x429e0000 x430b0000 x43e84000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush48 512 catmullrom {cc {f 2080} {px x429e0000 {x42040000 x43ac8000 x3ea4290a} {x42040000 x43ab8000 x3f22288a} {x42040000 x43ab0000 x3f21284a} {x42000000 x43ab0000 0}}} {tx x429e0000 x42030000 x43ab8000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush47 512 catmullrom {cc {f 2080} {px x429e0000 {x42f40000 x43860000 1} {x42f00000 x43860000 x3ea328ca} {x42f00000 x43858000 x3ea328ca}}} {tx x429e0000 x42f15555 x4385d555} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush46 512 catmullrom {cc {f 2080} {px x429e0000 {x43ae8000 x43ae8000 x3ea2a8aa}}} {tx x429e0000 x43ae8000 x43ae8000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush45 512 catmullrom {cc {f 2080} {px x429e0000 {x43b18000 x43480000 1} {x43b08000 x43480000 x3f1f67da} {x43b10000 x43480000 x3f2dab6b} {x43b10000 x434a0000 x3eedbb6f}}} {tx x429e0000 x43b10000 x43488000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush44 512 catmullrom {cc {f 2080} {px x429e0000 {x43fb0000 x43280000 x3ea8aa2b} {x43fb0000 x43260000 x3f08a229}}} {tx x429e0000 x43fb0000 x43270000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush43 512 catmullrom {cc {f 2080} {px x429e0000 {x43ea8000 x42740000 1} {x43eb0000 x42740000 x3f042108} {x43eb8000 x42740000 x3f0de379} {x43ec0000 x42740000 x3f106419} {x43ec8000 x42740000 x3f10e439} {x43ed8000 x42740000 x3f10e439} {x43ee0000 x42700000 x3f10a429} {x43ee8000 x426c0000 x3ed1344d}}} {tx x429e0000 x43ec7000 x42728000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush42 512 catmullrom {cc {f 2080} {px x429e0000 {x43c98000 x42880000 1} {x43ca0000 x42880000 x3f11e479} {x43ca8000 x42880000 x3f06e1b8} {x43cb8000 x42880000 x3e19264a}}} {tx x429e0000 x43ca6000 x42880000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush41 512 catmullrom {cc {f 2080} {px x429e0000 {x439c8000 x43080000 x3ea5a96a}}} {tx x429e0000 x439c8000 x43080000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush40 512 catmullrom {cc {f 2080} {px x429e0000 {x41a80000 x42a60000 1} {x41a00000 x42a60000 x3ee2b8ae} {x41b80000 x42a60000 0}}} {tx x429e0000 x41aaaaab x42a60000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush39 512 catmullrom {cc {f 2080} {px x429e0000 {x42080000 x42780000 1} {x42040000 x42780000 x3f046118}}} {tx x429e0000 x42060000 x42780000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush38 512 catmullrom {cc {f 2080} {px x429e0000 {x43230000 x41f00000 1} {x43220000 x41f00000 x3f1ce73a}}} {tx x429e0000 x43228000 x41f00000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush37 512 catmullrom {cc {f 2080} {px x429e0000 {x437f0000 x42600000 0} {x437f0000 x425c0000 x3f09a269} {x43808000 x425c0000 x3f0fa3e9} {x43810000 x425c0000 x3f0fa3e9} {x43810000 x42580000 0}}} {tx x429e0000 x43804ccd x425c0000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush36 512 catmullrom {cc {f 2080} {px x429e0000 {x43550000 x42a60000 x3ea5294a} {x43550000 x42a40000 x3ee6398e} {x43580000 x42a20000 x3f1364d9} {x43590000 x42a20000 x3f1a669a} {x435b0000 x42a00000 x3f1c671a} {x435c0000 x42a00000 x3f1c671a} {x435f0000 x429a0000 x3f16a5a9} {x43600000 x429a0000 x3f0a6299} {x43620000 x42980000 x3edcb72e} {x43630000 x42960000 0}}} {tx x429e0000 x435bcccd x429e6666} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush35 512 catmullrom {cc {f 2080} {px x429e0000 {x431a0000 x42ea0000 x3ef83e10} {x431b0000 x42ea0000 x3f32ecbb} {x431c0000 x42ea0000 x3f2febfb} {x431d0000 x42ea0000 x3f22689a} {x431f0000 x42e80000 x3e7d3f50}}} {tx x429e0000 x431c3333 x42e9999a} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush34 512 catmullrom {cc {f 2080} {px x429e0000 {x42740000 x43100000 1} {x42700000 x43100000 x3eff3fd0} {x42700000 x430f0000 x3f1b66da} {x42740000 x430f0000 x3f062188} {x42780000 x430f0000 x3eac2b0b}}} {tx x429e0000 x42733333 x430f6666} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush33 512 catmullrom {cc {f 2080} {px x429e0000 {x428c0000 x43400000 1} {x428a0000 x43400000 x3ee338ce}}} {tx x429e0000 x428b0000 x43400000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush32 512 catmullrom {cc {f 2080} {px x429e0000 {x40a00000 x436d0000 x3eb7adeb} {x40c00000 x436c0000 x3ef3bcef}}} {tx x429e0000 x40b00000 x436c8000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush31 512 catmullrom {cc {f 2080} {px x429e0000 {x42380000 x43988000 1} {x42380000 x43970000 x3d802008}}} {tx x429e0000 x42380000 x4397c000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush30 512 catmullrom {cc {f 2080} {px x429e0000 {x430f0000 x43b08000 1} {x430e0000 x43b08000 x3ed4b52d} {x430d0000 x43b08000 x3ed4b52d}}} {tx x429e0000 x430e0000 x43b08000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush29 512 catmullrom {cc {f 2080} {px x429e0000 {x43510000 x439f8000 1}}} {tx x429e0000 x43510000 x439f8000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush28 512 catmullrom {cc {f 2080} {px x429e0000 {x437a0000 x43878000 x3e95a569} {x43780000 x43878000 x3f106419} {x437a0000 x43878000 x3f0360d8} {x437b0000 x43878000 x3e96a5a9}}} {tx x429e0000 x4379c000 x43878000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush27 512 catmullrom {cc {f 2080} {px x429e0000 {x43210000 x43680000 1} {x43210000 x43670000 x3e773dcf}}} {tx x429e0000 x43210000 x43678000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush26 512 catmullrom {cc {f 2080} {px x429e0000 {x438d0000 x43c10000 1} {x438e0000 x43c10000 x3ec4310c} {x438e0000 x43c00000 x3e152549}}} {tx x429e0000 x438daaab x43c0aaab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush25 512 catmullrom {cc {f 2080} {px x429e0000 {x439d0000 x43de0000 x3f002008} {x439c8000 x43de0000 1} {x439d0000 x43dd8000 x3eefbbef}}} {tx x429e0000 x439cd555 x43ddd555} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush24 512 catmullrom {cc {f 2080} {px x429e0000 {x43560000 x43ea0000 x3e723c8f} {x43580000 x43ea0000 x3ebe2f8c} {x43580000 x43ea8000 x3f19a66a} {x43580000 x43ea0000 x3f1725c9}}} {tx x429e0000 x43578000 x43ea2000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush23 512 catmullrom {cc {f 2080} {px x429e0000 {x431f0000 x43cc0000 1} {x431e0000 x43cc0000 x3eeb3acf} {x431e0000 x43cc8000 x3f12e4b9}}} {tx x429e0000 x431e5555 x43cc2aab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush22 512 catmullrom {cc {f 2080} {px x429e0000 {x43600000 x43b80000 x3e743d0f} {x43610000 x43b80000 x3ed5354d}}} {tx x429e0000 x43608000 x43b80000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush21 512 catmullrom {cc {f 2080} {px x429e0000 {x43870000 x43b00000 1} {x43870000 x43af0000 x3eb3aceb} {x43870000 x43ae8000 x3e46318c}}} {tx x429e0000 x43870000 x43af2aab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush20 512 catmullrom {cc {f 2080} {px x429e0000 {x43cf0000 x439a0000 1} {x43ce8000 x439a0000 x3ee7b9ee} {x43ce8000 x43998000 x3f0ee3b9} {x43cf0000 x43998000 x3f056158} {x43cf8000 x43998000 x3ed2b4ad}}} {tx x429e0000 x43cee666 x4399b333} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush19 512 catmullrom {cc {f 2080} {px x429e0000 {x43ff0000 x43e30000 1} {x43fe8000 x43e30000 x3ee4b92e} {x43fe8000 x43e20000 x3ef9be70}}} {tx x429e0000 x43feaaab x43e2aaab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush18 512 catmullrom {cc {f 2080} {px x429e0000 {x43da0000 x43e90000 x3dda368e}}} {tx x429e0000 x43da0000 x43e90000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush17 512 catmullrom {cc {f 2080} {px x429e0000 {x43ac8000 x43d20000 x3e19264a} {x43ab8000 x43d28000 x3e052148}}} {tx x429e0000 x43ac0000 x43d24000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush16 512 catmullrom {cc {f 2080} {px x429e0000 {x43c98000 x437a0000 x3e93a4e9}}} {tx x429e0000 x43c98000 x437a0000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush15 512 catmullrom {cc {f 2080} {px x429e0000 {x438e0000 x43610000 1} {x438d0000 x43610000 x3e8b22c9} {x438d0000 x43600000 x3eaaaaab} {x438e0000 x435f0000 x3cb02c0b}}} {tx x429e0000 x438d8000 x43604000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush14 512 catmullrom {cc {f 2080} {px x429e0000 {x431d0000 x431c0000 x3ea729ca}}} {tx x429e0000 x431d0000 x431c0000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush13 512 catmullrom {cc {f 2080} {px x429e0000 {x42860000 x43090000 x3ec0b02c} {x42840000 x43090000 x3edb36ce} {x42840000 x43080000 x3e25294a}}} {tx x429e0000 x4284aaab x4308aaab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush12 512 catmullrom {cc {f 2080} {px x429e0000 {x41e80000 x43a90000 1}}} {tx x429e0000 x41e80000 x43a90000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush11 512 catmullrom {cc {f 2080} {px x429e0000 {x42b60000 x43ec8000 1} {x42b40000 x43ec8000 x3eb8ae2c}}} {tx x429e0000 x42b50000 x43ec8000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush10 512 catmullrom {cc {f 2080} {px x429e0000 {x42f20000 x425c0000 x3e362d8b} {x42f00000 x425c0000 x3e9aa6aa}}} {tx x429e0000 x42f10000 x425c0000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush9 512 catmullrom {cc {f 2080} {px x429e0000 {x439a8000 x42700000 1} {x439a0000 x42700000 x3e49324d}}} {tx x429e0000 x439a4000 x42700000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush8 512 catmullrom {cc {f 2080} {px x429e0000 {x43d38000 x43140000 1} {x43d30000 x43140000 x3ec4310c} {x43d20000 x43140000 x3eef3bcf} {x43d28000 x43140000 x3eefbbef} {x43d30000 x43140000 x3eb3aceb}}} {tx x429e0000 x43d2cccd x43140000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush7 512 catmullrom {cc {f 2080} {px x429e0000 {x43660000 x43220000 1} {x43680000 x43220000 x3e7d3f50}}} {tx x429e0000 x43670000 x43220000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush6 512 catmullrom {cc {f 2080} {px x429e0000 {x431a0000 x439f0000 x3e7a3e90} {x43180000 x439f0000 x3eca328d} {x431a0000 x439f0000 x3e9aa6aa}}} {tx x429e0000 x43195555 x439f0000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush5 512 catmullrom {cc {f 2080} {px x429e0000 {x435b0000 x43cf0000 1} {x435c0000 x43cf0000 x3e9725c9}}} {tx x429e0000 x435b8000 x43cf0000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush4 512 catmullrom {cc {f 2080} {px x429e0000 {x43c68000 x43c68000 1} {x43c60000 x43c70000 x3eb8ae2c} {x43c58000 x43c70000 x3ebcaf2c} {x43c68000 x43c68000 x3d48320d}}} {tx x429e0000 x43c62000 x43c6c000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush3 512 catmullrom {cc {f 2080} {px x429e0000 {x43970000 x438e0000 1} {x43968000 x438e0000 x3e842108}}} {tx x429e0000 x4396c000 x438e0000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush2 512 catmullrom {cc {f 2080} {px x429e0000 {x42ea0000 x43760000 1}}} {tx x429e0000 x42ea0000 x43760000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {px x429e0000 {x42940000 x43b78000 x3e322c8b}}} {tx x429e0000 x42940000 x43b78000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}}}}}} toolbox {brush { { selectAll opc 0.1 bs 249 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush opc 0.1 bs 249 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 79 ltm 79 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone bs 53 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 79 ltm 79 tt 19 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_opacity 0.1000000015 toolbar_brush_size 249 toolbar_brush_hardness 0.200000003 toolbar_lifetime_type single toolbar_lifetime_start 79 toolbar_lifetime_end 79 toolbar_openspline_render_hull always toolbar_source_transform_scale {1 1} toolbar_source_transform_center {640 360} colorOverlay {0 0 0 0} opacity 0.5 lifetime_type "all frames" lifetime_start 79 lifetime_end 79 brush_size 47 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint5 xpos 381 ypos 3065 } Grade { blackpoint -0.01 whitepoint 0.76 black -0.065 name Grade14 xpos 381 ypos 3091 } set N803f2c00 [stack 0] FilterErode { channels all size 0.1 name FilterErode6 xpos 481 ypos 3085 } push $N803f2c00 Merge2 { inputs 2 operation stencil mix 0.76 name Merge29 xpos 381 ypos 3139 } Grade { blackpoint 0.015 whitepoint 0.92 black -0.008 white 0.88 add -0.18 name Grade15 xpos 381 ypos 3170 } set N803f2000 [stack 0] Invert { name Invert3 xpos 499 ypos 3197 } Grade { blackpoint 0.76 multiply 0.16 name Grade17 xpos 499 ypos 3235 } push $N803f2000 Dot { name Dot31 xpos 415 ypos 3208 } push $N803f3800 RotoPaint { curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44200000 x43b40000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush87 512 catmullrom {cc {f 2080} {px x429e0000 {x41900000 x43ef8000 1} {x41800000 x43ef8000 x3ec9324d} {x41700000 x43ef8000 x3ee5b96e} {x41700000 x43ef0000 x3f0aa2a9} {x41700000 x43ee8000 x3f0b22c9} {x41700000 x43ee0000 x3f0b22c9} {x41800000 x43ed8000 x3e80a028}}} {tx x429e0000 x417b6db7 x43eec925} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush86 512 catmullrom {cc {f 2080} {px x429e0000 {x42780000 x43e08000 x3ec1304c} {x42700000 x43e08000 x3efbbef0}}} {tx x429e0000 x42740000 x43e08000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush85 512 catmullrom {cc {f 2080} {px x429e0000 {x43580000 x43e78000 1}}} {tx x429e0000 x43580000 x43e78000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush84 512 catmullrom {cc {f 2080} {px x429e0000 {x43700000 x43ca0000 1} {x436f0000 x43ca0000 x3f05a168} {x436d0000 x43c98000 x3f2deb7b} {x436c0000 x43c98000 x3f2f6bdb} {x436c0000 x43c90000 x3f23e8fa} {x436a0000 x43c88000 0}}} {tx x429e0000 x436d0000 x43c96aab} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush83 512 catmullrom {cc {f 2080} {px x429e0000 {x43d58000 x43df0000 1} {x43d48000 x43df0000 x3f00e038} {x43d58000 x43de8000 x3edf37ce}}} {tx x429e0000 x43d52aab x43ded555} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush82 512 catmullrom {cc {f 2080} {px x429e0000 {x43d90000 x43de8000 1}}} {tx x429e0000 x43d90000 x43de8000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush81 512 catmullrom {cc {f 2080} {px x429e0000 {x43d60000 x43e00000 1}}} {tx x429e0000 x43d60000 x43e00000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush80 512 catmullrom {cc {f 2080} {px x429e0000 {x43d90000 x43f00000 x3eb02c0b} {x43d80000 x43f00000 x3ece338d} {x43d78000 x43f00000 x3ed0340d} {x43d78000 x43ef8000 x3ed0340d} {x43d80000 x43ef0000 0}}} {tx x429e0000 x43d80000 x43efb333} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush79 512 catmullrom {cc {f 2080} {px x429e0000 {x43e20000 x43d60000 1} {x43e18000 x43d60000 x3f15e579} {x43e18000 x43d58000 x3f1a268a} {x43e20000 x43d48000 x3ec6b1ac}}} {tx x429e0000 x43e1c000 x43d58000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush78 512 catmullrom {cc {f 2080} {px x429e0000 {x42000000 x41a80000 1} {x42000000 x41a00000 x3f09e279} {x42000000 x41980000 x3f0a2289} {x42000000 x41900000 x3edb36ce}}} {tx x429e0000 x42000000 x419c0000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush77 512 catmullrom {cc {f 2080} {px x429e0000 {x422c0000 x437a0000 1} {x42280000 x437a0000 x3ef1bc6f} {x42280000 x43780000 x3eae2b8b}}} {tx x429e0000 x42295555 x43795555} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush76 512 catmullrom {cc {f 2080} {px x429e0000 {x43d38000 x41f00000 x3eb0ac2b} {x43d30000 x41f00000 x3ec1304c} {x43d30000 x41e80000 x3ed5b56d} {x43d38000 x41e80000 x3f0ca329} {x43d40000 x41e80000 x3f0360d8} {x43d48000 x41e00000 x3e902409}}} {tx x429e0000 x43d39555 x41e95555} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush75 512 catmullrom {cc {f 2080} {px x429e0000 {x43710000 x423c0000 1} {x43700000 x423c0000 x3ed0b42d} {x43710000 x423c0000 x3f1ae6ba} {x43730000 x423c0000 x3f18661a}}} {tx x429e0000 x43714000 x423c0000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush74 512 catmullrom {cc {f 2080} {px x429e0000 {x43908000 x434e0000 1} {x438f8000 x434e0000 x3f10e439} {x438f8000 x434d0000 x3f006018} {x438f8000 x434b0000 x3e822088}}} {tx x429e0000 x438fc000 x434d0000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush73 512 catmullrom {cc {f 2080} {px x429e0000 {x43d00000 x43950000 1} {x43d00000 x43940000 x3ef93e50} {x43d00000 x43930000 x3e773dcf}}} {tx x429e0000 x43d00000 x43940000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush72 512 catmullrom {cc {f 2080} {px x429e0000 {x43ec8000 x43690000 x3ed8360e} {x43ec8000 x43680000 x3ef53d4f} {x43ed8000 x43670000 x3ea0280a}}} {tx x429e0000 x43ecd555 x43680000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush71 512 catmullrom {cc {f 2080} {px x429e0000 {x43fc8000 x43230000 x3ebfafec} {x43fc0000 x43230000 x3eecbb2f} {x43fb8000 x43230000 x3f08a229} {x43fb8000 x43220000 x3f1324c9} {x43fb8000 x43210000 x3f11e479} {x43fc0000 x43210000 x3ece338d} {x43fc8000 x43210000 x3df83e10}}} {tx x429e0000 x43fbedb7 x43220000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush70 512 catmullrom {cc {f 2080} {px x429e0000 {x43c00000 x42ba0000 1} {x43c10000 x42ba0000 x3ece338d} {x43c10000 x42b60000 x3e152549}}} {tx x429e0000 x43c0aaab x42b8aaab} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush69 512 catmullrom {cc {f 2080} {px x429e0000 {x433f0000 x43310000 x3e842108} {x43400000 x43310000 x3eb5ad6b}}} {tx x429e0000 x433f8000 x43310000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush68 512 catmullrom {cc {f 2080} {px x429e0000 {x43410000 x43360000 1} {x43430000 x43360000 x3ef7bdef} {x43440000 x43340000 x3ee5394e} {x43450000 x43330000 x3e94a529}}} {tx x429e0000 x43434000 x4334c000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush67 512 catmullrom {cc {f 2080} {px x429e0000 {x43808000 x43040000 x3eae2b8b} {x43810000 x43030000 x3f0ae2b9} {x43818000 x43030000 x3eccb32d} {x43818000 x43020000 x3dfa3e90}}} {tx x429e0000 x43812000 x43030000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush66 512 catmullrom {cc {f 2080} {px x429e0000 {x43170000 x43b00000 x3e723c8f} {x43170000 x43af0000 x3e6b3acf}}} {tx x429e0000 x43170000 x43af8000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush65 512 catmullrom {cc {f 2080} {px x429e0000 {x429a0000 x43b70000 x3e7d3f50} {x429a0000 x43b60000 x3f01a068} {x429e0000 x43b58000 x3ea5294a}}} {tx x429e0000 x429b5555 x43b62aab} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush64 512 catmullrom {cc {f 2080} {px x429e0000 {x43950000 x43e80000 1} {x43940000 x43e80000 x3e9ba6ea}}} {tx x429e0000 x43948000 x43e80000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush63 512 catmullrom {cc {f 2080} {px x429e0000 {x42100000 x43c60000 x3eda368e} {x421c0000 x43c60000 x3eb82e0c}}} {tx x429e0000 x42160000 x43c60000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush62 512 catmullrom {cc {f 2080} {px x429e0000 {x43860000 x43940000 1} {x43858000 x43940000 x3ed8360e} {x43850000 x43940000 x3e52348d}}} {tx x429e0000 x43858000 x43940000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush61 512 catmullrom {cc {f 2080} {px x429e0000 {x43bd8000 x435a0000 1} {x43bc8000 x435a0000 x3f02a0a8} {x43bd8000 x43590000 x3f0761d8} {x43be0000 x43590000 x3f0761d8} {x43bf8000 x43590000 x3ebdaf6c} {x43c10000 x43590000 0}}} {tx x429e0000 x43be5555 x43595555} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush60 512 catmullrom {cc {f 2080} {px x429e0000 {x42480000 x42f20000 x3ec2b0ac} {x42440000 x42f20000 x3ee4390e} {x42440000 x42f00000 x3f292a4b} {x42480000 x42f00000 x3ec0b02c}}} {tx x429e0000 x42460000 x42f10000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush59 512 catmullrom {cc {f 2080} {px x429e0000 {x42f00000 x43520000 x3e862188} {x42ec0000 x43520000 x3ec8320d} {x42f00000 x43520000 x3f122489} {x42f20000 x43520000 x3edfb7ee} {x42f40000 x43520000 x3d042108}}} {tx x429e0000 x42f06666 x43520000} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43790000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush58 512 catmullrom {cc {f 2080} {px x429e0000 {x43a98000 x43ea0000 x3e50340d} {x43a98000 x43ea8000 x3ec5314c} {x43a80000 x43ea8000 x3efc3f10} {x43a80000 x43ea0000 x3ed8360e} {x43a80000 x43e90000 x3e842108}}} {tx x429e0000 x43a8999a x43ea0000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush57 512 catmullrom {cc {f 2080} {px x429e0000 {x43f68000 x43b38000 x3ed0340d} {x43f68000 x43b28000 x3ea6a9aa}}} {tx x429e0000 x43f68000 x43b30000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush56 512 catmullrom {cc {f 2080} {px x429e0000 {x43ec0000 x42880000 x3edeb7ae} {x43eb8000 x42880000 x3f0ae2b9} {x43eb8000 x42860000 x3f162589}}} {tx x429e0000 x43ebaaab x42875555} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush55 512 catmullrom {cc {f 2080} {px x429e0000 {x43878000 x42b20000 x3e6d3b4f}}} {tx x429e0000 x43878000 x42b20000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush54 512 catmullrom {cc {f 2080} {px x429e0000 {x43540000 x43b58000 x3eac2b0b} {x43560000 x43b58000 x3e062188}}} {tx x429e0000 x43550000 x43b58000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush53 512 catmullrom {cc {f 2080} {px x429e0000 {x43450000 x43808000 x3edb36ce} {x43450000 x437f0000 x3efc3f10}}} {tx x429e0000 x43450000 x43800000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush52 512 catmullrom {cc {f 2080} {px x429e0000 {x43ca8000 x43370000 1} {x43ca0000 x43370000 x3f0d6359}}} {tx x429e0000 x43ca4000 x43370000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush51 512 catmullrom {cc {f 2080} {px x429e0000 {1 x42860000 x3d743d0f} {x40000000 x42860000 x3eca328d} {x40800000 x42860000 x3e5d374e}}} {tx x429e0000 x40155555 x42860000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush50 512 catmullrom {cc {f 2080} {px x429e0000 {x42ea0000 x42940000 1} {x42e80000 x42940000 x3efabeb0}}} {tx x429e0000 x42e90000 x42940000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush49 512 catmullrom {cc {f 2080} {px x429e0000 {x430b0000 x43e88000 x3ea1a86a} {x430b0000 x43e80000 x3e0b22c9}}} {tx x429e0000 x430b0000 x43e84000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush48 512 catmullrom {cc {f 2080} {px x429e0000 {x42040000 x43ac8000 x3ea4290a} {x42040000 x43ab8000 x3f22288a} {x42040000 x43ab0000 x3f21284a} {x42000000 x43ab0000 0}}} {tx x429e0000 x42030000 x43ab8000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush47 512 catmullrom {cc {f 2080} {px x429e0000 {x42f40000 x43860000 1} {x42f00000 x43860000 x3ea328ca} {x42f00000 x43858000 x3ea328ca}}} {tx x429e0000 x42f15555 x4385d555} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush46 512 catmullrom {cc {f 2080} {px x429e0000 {x43ae8000 x43ae8000 x3ea2a8aa}}} {tx x429e0000 x43ae8000 x43ae8000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x431b0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush45 512 catmullrom {cc {f 2080} {px x429e0000 {x43b18000 x43480000 1} {x43b08000 x43480000 x3f1f67da} {x43b10000 x43480000 x3f2dab6b} {x43b10000 x434a0000 x3eedbb6f}}} {tx x429e0000 x43b10000 x43488000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush44 512 catmullrom {cc {f 2080} {px x429e0000 {x43fb0000 x43280000 x3ea8aa2b} {x43fb0000 x43260000 x3f08a229}}} {tx x429e0000 x43fb0000 x43270000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush43 512 catmullrom {cc {f 2080} {px x429e0000 {x43ea8000 x42740000 1} {x43eb0000 x42740000 x3f042108} {x43eb8000 x42740000 x3f0de379} {x43ec0000 x42740000 x3f106419} {x43ec8000 x42740000 x3f10e439} {x43ed8000 x42740000 x3f10e439} {x43ee0000 x42700000 x3f10a429} {x43ee8000 x426c0000 x3ed1344d}}} {tx x429e0000 x43ec7000 x42728000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush42 512 catmullrom {cc {f 2080} {px x429e0000 {x43c98000 x42880000 1} {x43ca0000 x42880000 x3f11e479} {x43ca8000 x42880000 x3f06e1b8} {x43cb8000 x42880000 x3e19264a}}} {tx x429e0000 x43ca6000 x42880000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush41 512 catmullrom {cc {f 2080} {px x429e0000 {x439c8000 x43080000 x3ea5a96a}}} {tx x429e0000 x439c8000 x43080000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush40 512 catmullrom {cc {f 2080} {px x429e0000 {x41a80000 x42a60000 1} {x41a00000 x42a60000 x3ee2b8ae} {x41b80000 x42a60000 0}}} {tx x429e0000 x41aaaaab x42a60000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush39 512 catmullrom {cc {f 2080} {px x429e0000 {x42080000 x42780000 1} {x42040000 x42780000 x3f046118}}} {tx x429e0000 x42060000 x42780000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush38 512 catmullrom {cc {f 2080} {px x429e0000 {x43230000 x41f00000 1} {x43220000 x41f00000 x3f1ce73a}}} {tx x429e0000 x43228000 x41f00000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush37 512 catmullrom {cc {f 2080} {px x429e0000 {x437f0000 x42600000 0} {x437f0000 x425c0000 x3f09a269} {x43808000 x425c0000 x3f0fa3e9} {x43810000 x425c0000 x3f0fa3e9} {x43810000 x42580000 0}}} {tx x429e0000 x43804ccd x425c0000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush36 512 catmullrom {cc {f 2080} {px x429e0000 {x43550000 x42a60000 x3ea5294a} {x43550000 x42a40000 x3ee6398e} {x43580000 x42a20000 x3f1364d9} {x43590000 x42a20000 x3f1a669a} {x435b0000 x42a00000 x3f1c671a} {x435c0000 x42a00000 x3f1c671a} {x435f0000 x429a0000 x3f16a5a9} {x43600000 x429a0000 x3f0a6299} {x43620000 x42980000 x3edcb72e} {x43630000 x42960000 0}}} {tx x429e0000 x435bcccd x429e6666} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush35 512 catmullrom {cc {f 2080} {px x429e0000 {x431a0000 x42ea0000 x3ef83e10} {x431b0000 x42ea0000 x3f32ecbb} {x431c0000 x42ea0000 x3f2febfb} {x431d0000 x42ea0000 x3f22689a} {x431f0000 x42e80000 x3e7d3f50}}} {tx x429e0000 x431c3333 x42e9999a} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush34 512 catmullrom {cc {f 2080} {px x429e0000 {x42740000 x43100000 1} {x42700000 x43100000 x3eff3fd0} {x42700000 x430f0000 x3f1b66da} {x42740000 x430f0000 x3f062188} {x42780000 x430f0000 x3eac2b0b}}} {tx x429e0000 x42733333 x430f6666} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush33 512 catmullrom {cc {f 2080} {px x429e0000 {x428c0000 x43400000 1} {x428a0000 x43400000 x3ee338ce}}} {tx x429e0000 x428b0000 x43400000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush32 512 catmullrom {cc {f 2080} {px x429e0000 {x40a00000 x436d0000 x3eb7adeb} {x40c00000 x436c0000 x3ef3bcef}}} {tx x429e0000 x40b00000 x436c8000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush31 512 catmullrom {cc {f 2080} {px x429e0000 {x42380000 x43988000 1} {x42380000 x43970000 x3d802008}}} {tx x429e0000 x42380000 x4397c000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush30 512 catmullrom {cc {f 2080} {px x429e0000 {x430f0000 x43b08000 1} {x430e0000 x43b08000 x3ed4b52d} {x430d0000 x43b08000 x3ed4b52d}}} {tx x429e0000 x430e0000 x43b08000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush29 512 catmullrom {cc {f 2080} {px x429e0000 {x43510000 x439f8000 1}}} {tx x429e0000 x43510000 x439f8000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush28 512 catmullrom {cc {f 2080} {px x429e0000 {x437a0000 x43878000 x3e95a569} {x43780000 x43878000 x3f106419} {x437a0000 x43878000 x3f0360d8} {x437b0000 x43878000 x3e96a5a9}}} {tx x429e0000 x4379c000 x43878000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush27 512 catmullrom {cc {f 2080} {px x429e0000 {x43210000 x43680000 1} {x43210000 x43670000 x3e773dcf}}} {tx x429e0000 x43210000 x43678000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush26 512 catmullrom {cc {f 2080} {px x429e0000 {x438d0000 x43c10000 1} {x438e0000 x43c10000 x3ec4310c} {x438e0000 x43c00000 x3e152549}}} {tx x429e0000 x438daaab x43c0aaab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush25 512 catmullrom {cc {f 2080} {px x429e0000 {x439d0000 x43de0000 x3f002008} {x439c8000 x43de0000 1} {x439d0000 x43dd8000 x3eefbbef}}} {tx x429e0000 x439cd555 x43ddd555} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush24 512 catmullrom {cc {f 2080} {px x429e0000 {x43560000 x43ea0000 x3e723c8f} {x43580000 x43ea0000 x3ebe2f8c} {x43580000 x43ea8000 x3f19a66a} {x43580000 x43ea0000 x3f1725c9}}} {tx x429e0000 x43578000 x43ea2000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush23 512 catmullrom {cc {f 2080} {px x429e0000 {x431f0000 x43cc0000 1} {x431e0000 x43cc0000 x3eeb3acf} {x431e0000 x43cc8000 x3f12e4b9}}} {tx x429e0000 x431e5555 x43cc2aab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush22 512 catmullrom {cc {f 2080} {px x429e0000 {x43600000 x43b80000 x3e743d0f} {x43610000 x43b80000 x3ed5354d}}} {tx x429e0000 x43608000 x43b80000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush21 512 catmullrom {cc {f 2080} {px x429e0000 {x43870000 x43b00000 1} {x43870000 x43af0000 x3eb3aceb} {x43870000 x43ae8000 x3e46318c}}} {tx x429e0000 x43870000 x43af2aab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush20 512 catmullrom {cc {f 2080} {px x429e0000 {x43cf0000 x439a0000 1} {x43ce8000 x439a0000 x3ee7b9ee} {x43ce8000 x43998000 x3f0ee3b9} {x43cf0000 x43998000 x3f056158} {x43cf8000 x43998000 x3ed2b4ad}}} {tx x429e0000 x43cee666 x4399b333} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush19 512 catmullrom {cc {f 2080} {px x429e0000 {x43ff0000 x43e30000 1} {x43fe8000 x43e30000 x3ee4b92e} {x43fe8000 x43e20000 x3ef9be70}}} {tx x429e0000 x43feaaab x43e2aaab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush18 512 catmullrom {cc {f 2080} {px x429e0000 {x43da0000 x43e90000 x3dda368e}}} {tx x429e0000 x43da0000 x43e90000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush17 512 catmullrom {cc {f 2080} {px x429e0000 {x43ac8000 x43d20000 x3e19264a} {x43ab8000 x43d28000 x3e052148}}} {tx x429e0000 x43ac0000 x43d24000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush16 512 catmullrom {cc {f 2080} {px x429e0000 {x43c98000 x437a0000 x3e93a4e9}}} {tx x429e0000 x43c98000 x437a0000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush15 512 catmullrom {cc {f 2080} {px x429e0000 {x438e0000 x43610000 1} {x438d0000 x43610000 x3e8b22c9} {x438d0000 x43600000 x3eaaaaab} {x438e0000 x435f0000 x3cb02c0b}}} {tx x429e0000 x438d8000 x43604000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush14 512 catmullrom {cc {f 2080} {px x429e0000 {x431d0000 x431c0000 x3ea729ca}}} {tx x429e0000 x431d0000 x431c0000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush13 512 catmullrom {cc {f 2080} {px x429e0000 {x42860000 x43090000 x3ec0b02c} {x42840000 x43090000 x3edb36ce} {x42840000 x43080000 x3e25294a}}} {tx x429e0000 x4284aaab x4308aaab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush12 512 catmullrom {cc {f 2080} {px x429e0000 {x41e80000 x43a90000 1}}} {tx x429e0000 x41e80000 x43a90000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush11 512 catmullrom {cc {f 2080} {px x429e0000 {x42b60000 x43ec8000 1} {x42b40000 x43ec8000 x3eb8ae2c}}} {tx x429e0000 x42b50000 x43ec8000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush10 512 catmullrom {cc {f 2080} {px x429e0000 {x42f20000 x425c0000 x3e362d8b} {x42f00000 x425c0000 x3e9aa6aa}}} {tx x429e0000 x42f10000 x425c0000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush9 512 catmullrom {cc {f 2080} {px x429e0000 {x439a8000 x42700000 1} {x439a0000 x42700000 x3e49324d}}} {tx x429e0000 x439a4000 x42700000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush8 512 catmullrom {cc {f 2080} {px x429e0000 {x43d38000 x43140000 1} {x43d30000 x43140000 x3ec4310c} {x43d20000 x43140000 x3eef3bcf} {x43d28000 x43140000 x3eefbbef} {x43d30000 x43140000 x3eb3aceb}}} {tx x429e0000 x43d2cccd x43140000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush7 512 catmullrom {cc {f 2080} {px x429e0000 {x43660000 x43220000 1} {x43680000 x43220000 x3e7d3f50}}} {tx x429e0000 x43670000 x43220000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush6 512 catmullrom {cc {f 2080} {px x429e0000 {x431a0000 x439f0000 x3e7a3e90} {x43180000 x439f0000 x3eca328d} {x431a0000 x439f0000 x3e9aa6aa}}} {tx x429e0000 x43195555 x439f0000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush5 512 catmullrom {cc {f 2080} {px x429e0000 {x435b0000 x43cf0000 1} {x435c0000 x43cf0000 x3e9725c9}}} {tx x429e0000 x435b8000 x43cf0000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush4 512 catmullrom {cc {f 2080} {px x429e0000 {x43c68000 x43c68000 1} {x43c60000 x43c70000 x3eb8ae2c} {x43c58000 x43c70000 x3ebcaf2c} {x43c68000 x43c68000 x3d48320d}}} {tx x429e0000 x43c62000 x43c6c000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush3 512 catmullrom {cc {f 2080} {px x429e0000 {x43970000 x438e0000 1} {x43968000 x438e0000 x3e842108}}} {tx x429e0000 x4396c000 x438e0000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush2 512 catmullrom {cc {f 2080} {px x429e0000 {x42ea0000 x43760000 1}}} {tx x429e0000 x42ea0000 x43760000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {px x429e0000 {x42940000 x43b78000 x3e322c8b}}} {tx x429e0000 x42940000 x43b78000} {a ro 0 go 0 bo 0 ao 0 bs x423c0000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}}}}}} toolbox {brush { { selectAll opc 0.1 bs 249 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush opc 0.1 bs 249 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 79 ltm 79 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone bs 53 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 79 ltm 79 tt 19 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_opacity 0.1 toolbar_brush_size 249 toolbar_brush_hardness 0.200000003 toolbar_lifetime_type single toolbar_openspline_render_hull always toolbar_source_transform_scale {1 1} toolbar_source_transform_center {640 360} colorOverlay {0 0 0 0} opacity 0.5 lifetime_type "all frames" lifetime_start 79 lifetime_end 79 brush_size 47 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint3 xpos 269 ypos 3066 } Dot { name Dot33 xpos 303 ypos 3220 } push $N803f3800 RotoPaint { curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44200000 x43b40000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush104 512 catmullrom {cc {f 2080} {px x429e0000 {x434e0000 x42d60000 1} {x43420000 x42c20000 x3ec8320d} {x432e0000 x429e0000 x3eb3aceb} {x43240000 x42900000 x3eb7adeb} {x431d0000 x42820000 x3eb7adeb} {x43150000 x42580000 x3ec6318c} {x43150000 x42480000 x3ecd334d} {x43450000 x42840000 x3d683a0f}}} {tx x429e0000 x432dc000 x42938000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush103 512 catmullrom {cc {f 2080} {px x429e0000 {x42bc0000 x42c40000 1} {x42b80000 x42b80000 x3efcbf30} {x42b40000 x42aa0000 x3efcbf30} {x42a40000 x42800000 x3f016058} {x429c0000 x425c0000 x3f0320c8} {x42920000 x423c0000 x3f0721c8} {x42740000 x41c00000 x3f126499} {x42380000 xc0a00000 x3f142509} {x42280000 xc1200000 x3f1364d9} {x42180000 xc1b00000 x3ef43d0f} {x42440000 xc1a00000 0}}} {tx x429e0000 x4287745d x42145d17} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush102 512 catmullrom {cc {f 2080} {px x429e0000 {x43998000 x43ae0000 1} {x43990000 x43af0000 x3e86a1a8} {x43988000 x43b10000 x3e9324c9} {x43980000 x43b20000 x3ea729ca} {x43970000 x43b38000 x3eb42d0b} {x43968000 x43b48000 x3ebdaf6c} {x43958000 x43b68000 x3ed8360e} {x43950000 x43b70000 x3ee0380e} {x43930000 x43b70000 x3f046118} {x438b0000 x43ad0000 x3f15e579} {x43878000 x43a80000 x3f1aa6aa} {x43838000 x43a28000 x3f1fa7ea} {x43630000 x438f8000 x3f292a4b} {x431c0000 x43600000 x3f322c8b} {x430a0000 x43510000 x3f336cdb} {x42a40000 x431a0000 x3f34ed3b} {x42780000 x42f00000 x3f2b2acb} {x42780000 x42e60000 x3f20681a} {x42920000 x42dc0000 x3ebe2f8c} {x429e0000 x42dc0000 x3e96a5a9} {x42a80000 x42e00000 x3e25294a}}} {tx x429e0000 x4355db6e x43871249} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush101 512 catmullrom {cc {f 2080} {px x429e0000 {x43a60000 x434e0000 x3e793e50} {x43ad0000 x43690000 1} {x43b00000 x43750000 x3e793e50} {x43b48000 x43848000 x3e9aa6aa} {x43b68000 x43880000 x3ea5294a} {x43b90000 x438e0000 x3ec2b0ac} {x43b98000 x43940000 x3ef0bc2f} {x43b98000 x43958000 x3efebfb0} {x43b98000 x43968000 x3f056158} {x43b98000 x43980000 x3f09e279} {x43ba0000 x43998000 x3f12e4b9} {x43b98000 x43998000 x3f2aaaab} {x43b78000 x43980000 x3f2eabab} {x43b50000 x43950000 x3f2f6bdb} {x43a88000 x43870000 x3f342d0b} {x438b0000 x435a0000 x3f3a2e8c} {x43820000 x434b0000 x3f3aeebc} {x432d0000 x430b0000 x3f3beefc} {x42ce0000 x42b40000 x3f3c2f0c} {x42b60000 x42a40000 x3f3b6edc} {x428e0000 x42820000 x3f24691a} {x428c0000 x42740000 x3f19264a} {x428c0000 x42700000 x3f06e1b8} {x42a00000 x42780000 x3d8c2309}}} {tx x429e0000 x4389d000 x43577555} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush100 512 catmullrom {cc {f 2080} {px x429e0000 {x43cb0000 x43740000 1} {x43c70000 x43700000 x3e9725c9} {x43c38000 x436a0000 x3e9b26ca} {x43bf8000 x43630000 x3ea2a8aa} {x43ba8000 x43590000 x3eb02c0b} {x43b50000 x434e0000 x3ebdaf6c} {x43aa0000 x43380000 x3ed9364e} {x43968000 x43110000 x3efbbef0} {x438f8000 x43030000 x3f012048} {x435f0000 x429a0000 x3f0ae2b9} {x43280000 x42100000 x3f0e6399} {x43200000 x41f00000 x3f0e6399} {x43150000 x41b80000 x3f096259} {x43240000 x42280000 x3e1725c9}}} {tx x429e0000 x43929b6e x43116db7} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush99 512 catmullrom {cc {f 2080} {px x429e0000 {x43ce8000 x42b40000 1} {x43cb8000 x42ac0000 x3eef3bcf} {x43c68000 x429e0000 x3eedbb6f} {x43c38000 x42920000 x3ef5bd6f} {x43c08000 x42780000 x3efabeb0} {x43bf8000 x426c0000 x3efabeb0} {x43be0000 x425c0000 x3ef8be30} {x43b80000 x422c0000 x3eeebbaf} {x43b08000 x41f80000 x3edb36ce} {x43b00000 x41f80000 x3ecdb36d} {x43b08000 x42280000 x3d102409}}} {tx x429e0000 x43be1746 x426cba2f} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush98 512 catmullrom {cc {f 2080} {px x429e0000 {x43e80000 x43660000 1} {x43e90000 x43660000 x3da0280a} {x43ea0000 x43660000 x3dd6358d} {x43ea0000 x43650000 x3df03c0f} {x43ea0000 x43630000 x3e052148} {x43e98000 x435c0000 x3e4b32cd} {x43df0000 x43460000 x3e9ca72a} {x43db8000 x433f0000 x3eadab6b} {x43d78000 x43380000 x3ebcaf2c} {x43ca0000 x431e0000 x3ed4b52d} {x43b80000 x42f40000 x3ee9ba6f} {x43b40000 x42e40000 x3eeb3acf} {x43b10000 x42d60000 x3eeb3acf} {x43ab0000 x42b20000 x3eeb3acf} {x43ad8000 x429e0000 x3ea1284a} {x43b08000 x429e0000 x3e59364e} {x43b38000 x42a00000 0}}} {tx x429e0000 x43ce0000 x4322c3c4} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush97 512 catmullrom {cc {f 2080} {px x429e0000 {x43a00000 x42e60000 x3e5f37ce} {x43a10000 x42d60000 x3e693a4f} {x439f0000 x42c20000 x3eaaaaab} {x439c8000 x42b40000 x3ece338d} {x439c0000 x42ac0000 x3ee0380e} {x439b8000 x42a80000 x3ef0bc2f} {x439b0000 x42a40000 x3efb3ed0} {x43a48000 x42b60000 x3ed8360e} {x43a88000 x42c20000 x3ed1b46d} {x43bb0000 x43020000 x3e7f3fd0} {x43c38000 x43140000 0}}} {tx x429e0000 x43a55174 x42cce8ba} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush96 512 catmullrom {cc {f 2080} {px x429e0000 {x43e48000 x43b30000 1} {x43e18000 x43b08000 x3eb6adab} {x43de0000 x43ad0000 x3eb9ae6c} {x43da8000 x43a90000 x3ec8b22d} {x43d60000 x43a50000 x3ed735cd} {x43d20000 x43a10000 x3ee338ce} {x43ce0000 x439c0000 x3ef03c0f} {x43c58000 x43920000 x3efdbf70} {x43b78000 x43808000 x3f0320c8} {x43b20000 x43740000 x3f0360d8} {x43ad0000 x43650000 x3f046118} {x43a60000 x43570000 x3f046118} {x43990000 x433a0000 x3f04e138} {x43830000 x430b0000 x3f056158} {x43800000 x43040000 x3f056158} {x437d0000 x42fe0000 x3f056158} {x43800000 x42ee0000 x3ee5b96e} {x438c0000 x42e80000 x3e042108}}} {tx x429e0000 x43b3638e x4375471c} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush95 512 catmullrom {cc {f 2080} {px x429e0000 {x43bb0000 x43ba8000 1} {x43bd0000 x43ba8000 x3e6d3b4f} {x43bd0000 x43b90000 x3e90a429} {x43bc0000 x43b70000 x3eb12c4b} {x43ba0000 x43b40000 x3ecd334d} {x43b40000 x43ad0000 x3ef63d8f} {x43ab0000 x43a30000 x3f056158} {x43920000 x438a8000 x3f166599} {x43898000 x43838000 x3f17e5f9} {x43818000 x437a0000 x3f19264a} {x43520000 x43520000 x3f1aa6aa} {x43200000 x43220000 x3f18a62a} {x431a0000 x431a0000 x3f122489} {x43120000 x430c0000 x3e2b2acb}}} {tx x429e0000 x43919249 x438dc925} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush94 512 catmullrom {cc {f 2080} {px x429e0000 {x439c8000 x43c90000 1} {x43988000 x43c58000 x3eb3aceb} {x43908000 x43bf0000 x3ec6318c} {x438d0000 x43bb0000 x3ed9364e} {x43898000 x43b70000 x3ee3b8ee} {x43780000 x43a58000 x3efe3f90} {x43520000 x438e0000 x3f046118} {x43470000 x43880000 x3f04e138} {x43240000 x436e0000 x3f066198} {x43270000 x436a0000 x3ecbb2ed} {x432e0000 x436f0000 x3e9c270a} {x43380000 x43750000 0}}} {tx x429e0000 x436a2aab x439cc000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush93 512 catmullrom {cc {f 2080} {px x429e0000 {x437b0000 x43e30000 1} {x43710000 x43de0000 x3e842108} {x43660000 x43d80000 x3e9c270a} {x43590000 x43d18000 x3eb2acab} {x434b0000 x43c98000 x3ec8320d} {x433b0000 x43c10000 x3eddb76e} {x432a0000 x43b80000 x3ef0bc2f} {x42f80000 x439d0000 x3f012048} {x42da0000 x43950000 x3f022088} {x42980000 x43818000 x3f012048} {x428e0000 x437c0000 x3efabeb0} {x428c0000 x43780000 x3ef03c0f} {x42a60000 x43800000 x3e042108}}} {tx x429e0000 x431c4ec5 x43ae589e} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush92 512 catmullrom {cc {f 2080} {px x429e0000 {x42ac0000 x43f40000 1} {x42a40000 x43ef0000 x3ea2288a} {x42940000 x43e90000 x3eb0ac2b} {x426c0000 x43db8000 x3ec2b0ac} {x42240000 x43cd0000 x3ed9364e} {x41400000 x43b78000 x3ef93e50} {x40800000 x43b08000 x3efdbf70} {xc1800000 x43998000 x3edab6ae} {xc1000000 x43958000 0}}} {tx x429e0000 x421471c7 x43c8638e} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush91 512 catmullrom {cc {f 2080} {px x429e0000 {x42ec0000 x43fd0000 1} {x42a60000 x43ef8000 x3eb0ac2b} {x42880000 x43ea0000 x3eb7adeb} {x42540000 x43e48000 x3eba2e8c} {x42100000 x43df0000 x3ecc330d} {x41200000 x43d78000 x3eddb76e} {xc1200000 x43d40000 x3eecbb2f} {x40c00000 x43de8000 x3ed6b5ad} {x420c0000 x43ea8000 x3eaeabab} {x42180000 x43ec8000 x3ea5294a} {x42200000 x43ed8000 x3ea5a96a} {x42140000 x43ed8000 x3eadab6b} {x42000000 x43ed0000 x3eb5ad6b} {x41500000 x43e90000 x3ece338d} {x41000000 x43e80000 x3ed9b66e} {x40000000 x43e78000 x3ee93a4f} {x40000000 x43e80000 x3ee93a4f} {x40000000 x43e98000 x3ee739ce} {x41400000 x43f00000 x3ed1344d} {x41980000 x43f68000 x3ebeafac} {x41980000 x43f70000 x3ebeafac} {x41900000 x43f80000 x3ec8320d} {x41900000 x43f88000 x3ed4b52d} {x41900000 x43f90000 x3ed4b52d} {x41900000 x43f98000 x3ed5b56d} {x41900000 x43f70000 x3ef0bc2f} {x41900000 x43f60000 x3ef6bdaf} {x41600000 x43f40000 x3eff3fd0} {x41600000 x43f68000 x3ef1bc6f} {x41880000 x43f88000 x3ee6398e} {x41d00000 x43ff0000 x3ebe2f8c} {x41f00000 x44008000 x3eb5ad6b} {x42000000 x44010000 x3eaeabab} {x42100000 x44018000 x3ea92a4b} {x42100000 x44014000 x3ea92a4b} {x41e80000 x43fc8000 x3eb9ae6c} {x41b80000 x43f98000 x3ec1304c} {x41300000 x43f50000 x3ec8320d} {xc1200000 x43ed0000 x3ee1384e} {xc1400000 x43ec0000 x3ee4390e} {xc1300000 x43eb0000 x3ed1344d} {xc0e00000 x43ec8000 x3ecc330d} {xbf800000 x43ed8000 x3eca328d} {x41b80000 x43f38000 x3eaf2bcb} {x41f00000 x43f50000 x3ea2288a} {x42400000 x43f88000 x3e90a429} {x42540000 x43f98000 x3e912449} {x42600000 x43fa0000 x3e91a469} {x42700000 x43fb0000 x3e93a4e9} {x42480000 x43f20000 x3eb4ad2b} {x42300000 x43ef0000 x3ebdaf6c} {x42200000 x43ec0000 x3ec4b12c} {x41a00000 x43e20000 x3edab6ae} {xbf800000 x43d70000 x3ef63d8f} {xc0000000 x43d58000 x3ef63d8f} {x40a00000 x43d58000 x3eab2acb} {x41a00000 x43da8000 0}}} {tx x429e0000 x41c50d79 x43ef50d8} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush90 512 catmullrom {cc {f 2080} {px x429e0000 {x43330000 x43d58000 1} {x43290000 x43cf8000 x3e9fa7ea} {x431d0000 x43c98000 x3ea6298a} {x43040000 x43bc8000 x3eb82e0c} {x42ec0000 x43b60000 x3ec6318c} {x42ce0000 x43ae8000 x3ed334cd} {x42b00000 x43a80000 x3ee5394e} {x42920000 x43a18000 x3ef1bc6f} {x42700000 x439b0000 x3ef9be70} {x423c0000 x43958000 x3efebfb0} {x42100000 x43908000 x3effbff0} {x41c00000 x438a8000 x3efe3f90} {x41c00000 x438b0000 x3ee5b96e} {x42180000 x43970000 x3e5f37ce} {x423c0000 x439d0000 x3e0c2309}}} {tx x429e0000 x42acaaab x43a8c444} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush89 512 catmullrom {cc {f 2080} {px x429e0000 {x43440000 x43bc8000 x3e4b32cd} {x43420000 x43ba8000 x3e802008} {x43270000 x43b08000 x3eae2b8b} {x430b0000 x43a78000 x3eb12c4b} {x42b60000 x439b0000 x3eb1ac6b} {x42940000 x43980000 x3eb1ac6b} {x42180000 x43950000 x3eb1ac6b} {x42000000 x43958000 x3eaaaaab} {x41f00000 x43980000 x3e96a5a9} {x42140000 x43a48000 x3e6a3a8f} {x42300000 x43a90000 x3e292a4b} {x42880000 x43b48000 x3a802008} {x42940000 x43b68000 x3de4390e} {x429c0000 x43b70000 x3e22288a} {x429e0000 x43b18000 x3e8ea3a9} {x42480000 x43a10000 x3ebcaf2c} {x42280000 x439c8000 x3ec6318c} {x41000000 x43920000 x3ee2b8ae} {x41000000 x43970000 x3eda368e} {x41800000 x439b8000 x3eceb3ad} {x42480000 x43af0000 x3ec4b12c} {x429e0000 x43c70000 x3ebe2f8c} {x42aa0000 x43cc0000 x3ebeafac} {x42b40000 x43cf8000 x3ec0300c} {x42bc0000 x43d20000 x3ec2308c} {x42bc0000 x43d18000 x3ecdb36d} {x42b20000 x43cf8000 x3ee6398e} {x42840000 x43c38000 x3efb3ed0} {x42680000 x43bf8000 x3f03a0e8} {x41e80000 x43b20000 x3f0e2389} {x41980000 x43ae8000 x3f0e6399} {x40000000 x43ab0000 x3f122489} {x420c0000 x43bd0000 x3eba2e8c} {x42400000 x43c30000 x3ea7a9ea} {x42ca0000 x43dd8000 x3dcc330d} {x43100000 x43ee0000 x3e40300c} {x43160000 x43ef8000 x3e713c4f} {x43120000 x43ea0000 x3e9ea7aa} {x42e80000 x43d88000 x3eb1ac6b} {x42ac0000 x43c60000 x3eb82e0c} {x42a00000 x43c20000 x3eb92e4c} {x42980000 x43be0000 x3eb9ae6c} {x428e0000 x43b90000 x3eb1ac6b} {x42920000 x43b90000 x3e9324c9} {x42a00000 x43ba8000 0}}} {tx x429e0000 x42984444 x43b8693f} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush88 512 catmullrom {cc {f 2080} {px x429e0000 {x43868000 x43ad8000 1} {x438c8000 x43b20000 x3df83e10} {x43938000 x43b78000 x3e25294a} {x43950000 x43b80000 x3e64390e} {x43920000 x43b70000 x3eaa2a8b} {x438d8000 x43b40000 x3eb5ad6b} {x43870000 x43b08000 x3ebaaeac} {x43800000 x43ab0000 x3ebdaf6c} {x43320000 x43930000 x3ec2308c} {x42c80000 x43740000 x3ec3b0ec} {x42a80000 x43690000 x3ec4310c} {x42540000 x435a0000 x3ec0b02c} {x42860000 x43720000 0}}} {tx x429e0000 x4351b13b x439d4ec5} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush87 512 catmullrom {cc {f 2080} {px x429e0000 {x43bd8000 x43b68000 1} {x43bc0000 x43b68000 x3eb3aceb} {x43b80000 x43b68000 x3eba2e8c} {x43b00000 x43b08000 x3ed3b4ed} {x43aa8000 x43ab8000 x3ee8ba2f} {x439c8000 x439d0000 x3efe3f90} {x438a8000 x438a8000 x3f01a068} {x43808000 x43810000 x3f03a0e8} {x436a0000 x436e0000 x3f062188} {x431e0000 x432d0000 x3f0d2349} {x43060000 x43180000 x3f0da369} {x42680000 x42b80000 x3f0fa3e9} {x42140000 x42a00000 x3f0e2389} {x42180000 x42aa0000 x3eefbbef} {x42780000 x42f20000 x3e8d2349} {x42940000 x430a0000 x3e25294a}}} {tx x429e0000 x43582000 x43687000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush86 512 catmullrom {cc {f 2080} {px x429e0000 {x43b98000 x43a88000 1} {x43ba8000 x43a88000 x3e902409} {x43b40000 x439e0000 x3ea2288a} {x43ae0000 x43970000 x3eb0ac2b} {x43a70000 x43900000 x3eb92e4c} {x439f0000 x43878000 x3ec1b06c} {x438d8000 x436b0000 x3ecbb2ed} {x43530000 x431d0000 x3ee6398e} {x433f0000 x430a0000 x3ee9ba6f} {x432e0000 x42ee0000 x3eea3a8f} {x42fe0000 x42940000 x3eed3b4f} {x42e80000 x42820000 x3eecbb2f} {x42cc0000 x42600000 x3eaf2bcb} {x42d00000 x42780000 0}}} {tx x429e0000 x4373b6db x4344edb7} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush85 512 catmullrom {cc {f 2080} {px x429e0000 {x43be0000 x438a8000 1} {x43b98000 x43870000 x3eab2acb} {x43ad8000 x43780000 x3eadab6b} {x43a70000 x436a0000 x3eb8ae2c} {x439f0000 x435a0000 x3ebfafec} {x438d0000 x43360000 x3eddb76e} {x43838000 x43240000 x3eeb3acf} {x43740000 x43110000 x3ef6bdaf} {x433c0000 x42be0000 x3f012048} {x430e0000 x42540000 x3f012048} {x430a0000 x42480000 x3f00a028} {x430e0000 x428e0000 x3e783e10}}} {tx x429e0000 x43833555 x43274000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush84 512 catmullrom {cc {f 2080} {px x429e0000 {x43e18000 x43350000 x3ea5294a} {x43d28000 x43180000 1} {x43cc8000 x430e0000 x3eb0ac2b} {x43b70000 x42ce0000 x3ec6318c} {x43af0000 x42b40000 x3ec8b22d} {x43a70000 x429a0000 x3ec9324d} {x439e0000 x42800000 x3ec9b26d} {x43958000 x42500000 x3eca328d} {x438d8000 x42200000 x3ecab2ad} {x43870000 x41f80000 x3ecbb2ed} {x437b0000 x41c80000 x3eb2acab} {x437e0000 x42000000 0}}} {tx x429e0000 x43a6d555 x42a4d555} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush83 512 catmullrom {cc {f 2080} {px x429e0000 {x43f50000 x42b80000 1} {x43eb0000 x429c0000 x3ec3b0ec} {x43e80000 x42940000 x3edb36ce} {x43e60000 x428e0000 x3eef3bcf} {x43e30000 x42860000 x3efb3ed0} {x43de8000 x42800000 x3f0761d8} {x43e00000 x42860000 x3efb3ed0} {x43e70000 x42aa0000 x3eb12c4b} {x43e80000 x42b60000 x3e9da76a} {x43e90000 x42e00000 x3e89a269} {x43e90000 x42f00000 x3e85a168} {x43e90000 x43000000 x3e7a3e90} {x43e70000 x431d0000 x3dda368e} {x43e70000 x43280000 x3d2c2b0b}}} {tx x429e0000 x43e76492 x42c44925} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush82 512 catmullrom {cc {f 2080} {px x429e0000 {x43e40000 x42880000 x3da2288a} {x43e60000 x428c0000 x3e703c0f} {x43e78000 x428e0000 x3e753d4f} {x43e90000 x428e0000 x3e773dcf} {x43ea8000 x428e0000 x3e773dcf} {x43ec0000 x428e0000 x3e703c0f} {x43ec8000 x428e0000 x3e58360e} {x43ec8000 x42880000 x3e4b32cd} {x43eb0000 x42800000 x3e4731cc} {x43ea8000 x42800000 x3e5735cd} {x43ea8000 x428c0000 x3e22288a} {x43ec0000 x42940000 0}}} {tx x429e0000 x43e9d555 x428ad555} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush81 512 catmullrom {cc {f 2080} {px x429e0000 {x43c00000 x43260000 x3e5d374e} {x43cc0000 x43380000 1} {x43d18000 x433e0000 x3e46318c} {x43de8000 x43440000 x3e892249} {x43de8000 x433e0000 x3e9725c9} {x43db8000 x432a0000 x3eaaaaab} {x43cb8000 x43050000 x3ed0b42d} {x43c58000 x42f20000 x3edcb72e} {x43c00000 x42da0000 x3ee93a4f} {x43b08000 x429c0000 x3ef6bdaf} {x43a70000 x42580000 x3ef9be70} {x43a70000 x42500000 x3ef9be70} {x43b48000 x42580000 x3edc370e} {x43c58000 x42860000 x3ed1b46d} {x43c88000 x428e0000 x3ed1b46d} {x43cc0000 x42920000 x3ed1b46d} {x43cc0000 x42900000 x3ed2b4ad} {x43cc0000 x42880000 x3edfb7ee} {x43c50000 x42540000 x3ee5b96e} {x43c28000 x42400000 x3ee93a4f} {x43bc8000 x42100000 x3ef6bdaf} {x43ba8000 x42000000 x3ef8be30} {x43b98000 x41f00000 x3ef93e50} {x43b78000 x41d00000 x3ef9be70} {x43b80000 x41e00000 x3eecbb2f} {x43c30000 x42280000 x3ec6318c} {x43c80000 x42400000 x3eb2acab} {x43db0000 x42840000 x3e7b3ed0} {x43e30000 x42880000 0}}} {tx x429e0000 x43c56584 x42ae234f} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush80 512 catmullrom {cc {f 2080} {px x429e0000 {x43e20000 x43920000 1} {x43de0000 x438f8000 x3e96a5a9} {x43d20000 x43878000 x3ea7a9ea} {x43cb8000 x43820000 x3eb8ae2c} {x43c50000 x43770000 x3ecab2ad} {x43bf0000 x43690000 x3ed8360e} {x43b78000 x43580000 x3ee3b8ee} {x43aa0000 x43350000 x3eeebbaf} {x438e0000 x42da0000 x3ef3bcef} {x43740000 x425c0000 x3ef2bcaf} {x436f0000 x42380000 x3eedbb6f} {x43690000 x41b80000 x3eaeabab} {x436f0000 x41c00000 0}}} {tx x429e0000 x43aaf627 x432c9d8a} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush79 512 catmullrom {cc {f 2080} {px x429e0000 {x43ae0000 x43958000 1} {x43a80000 x438f0000 x3ea3a8ea} {x43a20000 x43870000 x3ea3a8ea} {x43950000 x436f0000 x3ea729ca} {x43868000 x434d0000 x3eae2b8b} {x43620000 x431c0000 x3eb5ad6b} {x43520000 x430c0000 x3eb5ad6b} {x432a0000 x42ca0000 x3eb5ad6b} {x43200000 x42b40000 x3eb12c4b} {x43180000 x42a40000 x3eaa2a8b} {x430c0000 x42780000 x3e80a028} {x430b0000 x42700000 x3e312c4b}}} {tx x429e0000 x43670000 x4325d555} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush78 512 catmullrom {cc {f 2080} {px x429e0000 {x43fb8000 x43a50000 x3e19264a} {x43fd0000 x43a90000 1} {x43fe8000 x43ad0000 x3e352d4b} {x43ff8000 x43b00000 x3e50340d} {x44000000 x43b18000 x3e703c0f} {x44008000 x43b38000 x3e89a269} {x44008000 x43b40000 x3e99264a} {x44008000 x43b50000 x3eb0ac2b} {x44000000 x43b38000 x3edb36ce} {x43fb8000 x43ae8000 x3edf37ce} {x43f38000 x43a60000 x3ee3b8ee} {x43ef0000 x43a10000 x3ee5394e} {x43e90000 x439b0000 x3ee83a0f} {x43e18000 x43938000 x3eed3b4f} {x43bf0000 x435e0000 x3f002008} {x43980000 x42fe0000 x3f0be2f9} {x438d8000 x42ce0000 x3f0c6319} {x435f0000 x41f00000 x3f0ca329} {x434c0000 x41000000 x3f0be2f9} {x433a0000 xc1300000 x3f0a2289} {x430e0000 xc2740000 x3f07a1e8} {x42d00000 xc2c80000 x3f062188} {x42c40000 xc2d00000 x3f0320c8} {x42ac0000 xc2d40000 x3eecbb2f} {x42aa0000 xc2be0000 x3ed1344d} {x42aa0000 xc2b00000 x3ec8b22d} {x42aa0000 xc29e0000 x3eba2e8c} {x42aa0000 xc28e0000 x3eab2acb} {x42aa0000 xc2700000 x3e9ea7aa} {x42b00000 xc2400000 x3e952549} {x42c20000 xc1a00000 x3e8a2289} {x42ec0000 x41500000 x3e892249} {x43030000 x42000000 x3e89a269} {x43120000 x42500000 x3e8b22c9} {x43240000 x428e0000 x3e8c2309} {x43818000 x431a0000 x3e8e2389} {x43b48000 x43700000 x3e8d2349} {x43c10000 x43830000 x3e8d2349} {x43e68000 x43a00000 x3e912449} {x43f20000 x43a88000 x3e93a4e9} {x43fc0000 x43b00000 x3e97a5e9} {x4408c000 x43c10000 x3eab2acb} {x440e0000 x43d00000 x3ec9b26d} {x440e4000 x43d28000 x3ed2b4ad} {x440ec000 x43d88000 x3eeb3acf} {x440e4000 x43d88000 x3f016058} {x440d4000 x43d60000 x3f022088} {x440a0000 x43ce8000 x3f02e0b8} {x44040000 x43c20000 x3f042108} {x43ff8000 x43ba0000 x3f042108} {x43f68000 x43b10000 x3f056158} {x43e00000 x439c8000 x3f062188} {x43d30000 x43910000 x3f066198} {x43c60000 x43850000 x3f06a1a8} {x43b80000 x43710000 x3f0721c8} {x43830000 x43080000 x3f092249} {x43240000 x42200000 x3f09a269} {x43100000 x41900000 x3f09a269} {x42be0000 xc20c0000 x3f096259} {x42a80000 xc2440000 x3f096259} {x42540000 xc2b60000 x3f0360d8} {x42400000 xc2c20000 x3efb3ed0} {x42280000 xc2d00000 x3eceb3ad} {x42240000 xc2ca0000 x3eacab2b} {x42240000 xc2c00000 x3ea0280a} {x42240000 xc2b40000 x3e9ca72a} {x42240000 xc2a60000 x3e9aa6aa} {x42240000 xc2920000 x3e98260a} {x422c0000 xc2700000 x3e96a5a9} {x42400000 xc23c0000 x3e96a5a9} {x425c0000 xc1f80000 x3e95a569} {x42920000 x40800000 x3e952549} {x42aa0000 x41b80000 x3e95a569} {x42c20000 x42300000 x3e98260a} {x432c0000 x430a0000 x3eadab6b} {x43440000 x43230000 x3eb02c0b} {x43990000 x43840000 x3eb5ad6b} {x43c40000 x43ab0000 x3eba2e8c} {x43cc0000 x43b38000 x3ebc2f0c} {x43df0000 x43c90000 x3ebe2f8c} {x43e38000 x43cf8000 x3ebe2f8c} {x43e60000 x43d58000 x3ebe2f8c} {x43e80000 x43e30000 x3ebe2f8c} {x43e80000 x43e50000 x3ebe2f8c} {x43e48000 x43e90000 x3ec7b1ec} {x43e08000 x43e48000 x3ed1b46d} {x43dd8000 x43e08000 x3ed2348d} {x43cd0000 x43c88000 x3ed6b5ad} {x43c58000 x43bd8000 x3ed6b5ad} {x43bc0000 x43b08000 x3ed6b5ad} {x43980000 x43850000 x3edab6ae} {x433b0000 x430e0000 x3ef93e50} {x431e0000 x42dc0000 x3efbbef0} {x42740000 xbf800000 x3f02e0b8} {xc1200000 xc2940000 x3f0761d8} {xc1b80000 xc2ac0000 x3f0761d8} {xc2080000 xc2c40000 x3f0761d8} {xc2580000 xc2e60000 x3f07a1e8} {xc2740000 xc2f40000 x3f006018} {xc2840000 xc2fe0000 x3ef93e50} {xc2880000 xc3020000 x3ef93e50} {xc2880000 xc2fc0000 x3ea4290a} {xc2880000 xc2f00000 x3e9b26ca} {xc2880000 xc2e20000 x3e94a529} {xc2860000 xc2ce0000 x3e922489} {xc2800000 xc2b80000 x3e922489} {xc26c0000 xc29c0000 x3e922489} {xc2500000 xc2780000 x3e9324c9} {xc22c0000 xc2380000 x3e952549} {xc2000000 xc1d00000 x3e9aa6aa} {xc1980000 xc0c00000 x3ea2a8aa} {xc0a00000 x41800000 x3eadab6b} {x41400000 x42180000 x3eb92e4c} {x42480000 x42b20000 x3eccb32d} {x42f00000 x432a0000 x3edcb72e} {x436a0000 x43898000 x3eeebbaf} {x43838000 x43950000 x3ef1bc6f} {x43b10000 x43bc8000 x3ef63d8f} {x43ce8000 x43db8000 x3ef8be30} {x43d50000 x43e20000 x3efabeb0} {x43e38000 x43f30000 x3efc3f10} {x43e70000 x43f80000 x3efc3f10} {x43ea0000 x43fc8000 x3efebfb0} {x43f30000 x4403c000 x3f016058} {x43f58000 x44050000 x3f016058} {x43fa0000 x44070000 x3f02a0a8} {x43fb0000 x44074000 x3f02a0a8} {x43fb0000 x44068000 x3f09e279} {x43f88000 x44030000 x3f0d2349} {x43f60000 x4400c000 x3f0de379} {x43f28000 x43fb8000 x3f0fe3f9} {x43ee0000 x43f50000 x3f126499} {x43e90000 x43ed8000 x3f13a4e9} {x43dc0000 x43dd8000 x3f14e539} {x43c28000 x43bf8000 x3f122489} {x43b90000 x43b48000 x3f0f63d9} {x438f8000 x438c8000 x3f0a2289} {x43690000 x436e0000 x3f0be2f9} {x43680000 x436c0000 x3f0da369} {x43820000 x43810000 x3f0d2349} {x438b0000 x43890000 x3f0c6319} {x43958000 x43910000 x3f0be2f9} {x43b70000 x43b08000 x3f06e1b8} {x43e68000 x43da8000 x3f00a028} {x43f08000 x43e30000 x3effbff0} {x44074000 x43fd0000 x3efdbf70} {x440cc000 x44058000 x3efdbf70} {x440d4000 x44068000 x3efdbf70} {x440e8000 x4408c000 x3efdbf70} {x440ec000 x44090000 x3efdbf70} {x440ec000 x44098000 x3efdbf70} {x440e8000 x44078000 x3ee5394e} {x440d8000 x44058000 x3ee5394e} {x440c8000 x44030000 x3ee7b9ee} {x440b0000 x44000000 x3ee83a0f} {x4408c000 x43f98000 x3ee93a4f} {x44060000 x43f28000 x3eea3a8f} {x44038000 x43ea8000 x3eed3b4f} {x44000000 x43e20000 x3eeebbaf} {x43f88000 x43d88000 x3eeebbaf} {x43f00000 x43ce8000 x3ef03c0f} {x43dc0000 x43b70000 x3ef53d4f} {x43c60000 x439f8000 x3ef83e10} {x43ba8000 x43940000 x3ef83e10} {x43b00000 x43898000 x3efabeb0} {x43908000 x435a0000 x3f022088} {x43870000 x434b0000 x3f046118} {x435a0000 x43200000 x3f0c6319} {x43530000 x43180000 x3f096259} {x43590000 x431c0000 x3f03a0e8} {x437a0000 x43340000 x3eee3b8f} {x43838000 x433f0000 x3ee5394e} {x43a10000 x43740000 x3ed735cd} {x43be0000 x43980000 x3edab6ae} {x43c60000 x43a00000 x3edb36ce} {x43ec0000 x43c40000 x3ede378e} {x44084000 x43e48000 x3ede378e} {x440c0000 x43eb0000 x3eddb76e} {x44150000 x43f98000 x3edb36ce} {x44174000 x43fd0000 x3ed8360e} {x44190000 x44000000 x3ed6b5ad} {x441ac000 x44020000 x3ed1b46d} {x441ac000 x44024000 x3ed1b46d} {x44198000 x44020000 x3edf37ce} {x44188000 x44008000 x3ee739ce} {x44164000 x43fb0000 x3ee7b9ee} {x4414c000 x43f60000 x3ee9ba6f} {x44110000 x43e98000 x3ef3bcef} {x440b4000 x43d88000 x3ef83e10} {x44040000 x43c38000 x3f002008} {x43f60000 x43ad8000 x3f0360d8} {x43ec8000 x43a18000 x3f03a0e8} {x43d78000 x438a0000 x3f042108} {x43b08000 x433c0000 x3f056158} {x43958000 x42fc0000 x3f0be2f9} {x43910000 x42e60000 x3f0c6319} {x438c8000 x42c40000 x3f0e2389} {x438c8000 x42c00000 x3f0e2389} {x43928000 x42ca0000 x3ef93e50} {x43a20000 x430a0000 x3ee93a4f} {x43a78000 x43170000 x3ee5394e} {x43c20000 x435c0000 x3ee4b92e} {x43e98000 x43930000 x3ee5b96e} {x43f38000 x439c0000 x3ee5b96e} {x44078000 x43b18000 x3ee4b92e} {x440b8000 x43b70000 x3ee4b92e} {x440e4000 x43bc0000 x3ee4390e} {x44130000 x43c50000 x3ee4390e} {x44134000 x43c60000 x3ee5394e} {x44134000 x43c68000 x3f06a1a8} {x44130000 x43c60000 x3f0ae2b9} {x44120000 x43c50000 x3f0be2f9} {x44100000 x43be0000 x3f0da369} {x440e8000 x43b98000 x3f0e6399} {x440a8000 x43ad0000 x3f106419} {x44084000 x43a60000 x3f10e439} {x4405c000 x439f0000 x3f11e479} {x4402c000 x43970000 x3f12e4b9} {x43ff0000 x438f8000 x3f1324c9} {x43f88000 x43870000 x3f1364d9} {x43f10000 x437d0000 x3f13a4e9} {x43e98000 x436b0000 x3f13a4e9} {x43db0000 x43480000 x3f14a529} {x43d48000 x43390000 x3f14a529} {x43ca0000 x431c0000 x3f14e539} {x43c68000 x43110000 x3f14e539} {x43be0000 x42ec0000 x3f14e539} {x43b78000 x42c00000 x3f122489} {x43b70000 x42bc0000 x3f106419} {x43b70000 x42b80000 x3f0fa3e9} {x43b70000 x42b60000 x3f09e279} {x43bd0000 x42dc0000 x3ef5bd6f} {x43bf8000 x42ee0000 x3ef83e10} {x43cb8000 x43270000 x3efb3ed0} {x43e08000 x43680000 x3efc3f10} {x43e78000 x437a0000 x3efc3f10} {x43fe0000 x43960000 x3efb3ed0} {x44030000 x439e0000 x3efb3ed0} {x4406c000 x43a50000 x3efabeb0} {x44114000 x43b70000 x3ef6bdaf} {x44194000 x43c50000 x3eeabaaf} {x441a0000 x43c60000 x3eea3a8f} {x441a4000 x43c70000 x3eea3a8f} {x44194000 x43c70000 x3ef83e10} {x44170000 x43c50000 x3efabeb0} {x44150000 x43c20000 x3efbbef0} {x44130000 x43bd8000 x3efc3f10} {x44108000 x43b80000 x3efe3f90} {x440a8000 x43aa0000 x3f002008} {x44028000 x43988000 x3f012048} {x43fb8000 x438f0000 x3f016058} {x43f10000 x43850000 x3f022088} {x43e68000 x43770000 x3f026098} {x43d10000 x434e0000 x3f0320c8} {x43c68000 x433a0000 x3f0320c8} {x43b60000 x43150000 x3f062188} {x43ae8000 x43040000 x3f06e1b8} {x439f8000 x42a60000 x3f09e279} {x439f0000 x42940000 x3f09e279} {x439f0000 x425c0000 x3f082209} {x43a00000 x42480000 x3f042108} {x43a10000 x42380000 x3efa3e90} {x43a18000 x420c0000 x3ed1344d} {x439f8000 x41c00000 x3ec2b0ac} {x439e8000 x41b00000 x3ec2308c} {x439d0000 x41980000 x3ec2308c} {x439a0000 x41500000 x3ec7b1ec} {x43998000 x41400000 x3eca328d} {x43998000 x41200000 x3ecdb36d} {x439a0000 x41200000 x3ece338d} {x439e8000 x41200000 x3ecd334d} {x439f8000 x41400000 x3ecd334d} {x43a10000 x41800000 x3ecd334d} {x43a48000 x41e80000 x3eceb3ad} {x43a60000 x420c0000 x3ed2348d} {x43ad0000 x42940000 x3edab6ae} {x43ba8000 x430c0000 x3ee4390e} {x43c00000 x43210000 x3ee4b92e} {x43d58000 x435f0000 x3ee4390e} {x43de8000 x43740000 x3ee2b8ae} {x4400c000 x439c0000 x3ed2b4ad} {x440e0000 x43b60000 x3ecdb36d} {x44108000 x43ba8000 x3ecd334d} {x4412c000 x43bf0000 x3eccb32d} {x44174000 x43c80000 x3ecd334d} {x4417c000 x43c98000 x3ee93a4f} {x44174000 x43c80000 x3ef63d8f} {x44148000 x43be0000 x3efb3ed0} {x440f0000 x43af0000 x3f026098} {x44074000 x439e0000 x3f042108} {x43fb0000 x43898000 x3f062188} {x43ef8000 x437d0000 x3f06e1b8} {x43d80000 x43500000 x3f07e1f8} {x43cb8000 x43380000 x3f07e1f8} {x43aa0000 x42e60000 x3f092249} {x43850000 x422c0000 x3f0e2389} {x437d0000 x41e80000 x3f0f23c9} {x43710000 x41800000 x3f0f63d9} {x43570000 xc1900000 x3f0fe3f9} {x43460000 xc23c0000 x3f0fa3e9} {x43440000 xc2500000 x3f0ea3a9} {x43400000 xc2780000 x3f0ae2b9} {x433f0000 xc2820000 x3f0a2289} {x433a0000 xc2900000 x3f08a229} {x433a0000 xc2920000 x3f086219} {x433b0000 xc28e0000 x3ef33ccf} {x43440000 xc2780000 x3ef33ccf} {x434e0000 xc2480000 x3ef33ccf} {x43560000 xc2280000 x3ef33ccf} {x43650000 xc1c80000 x3ef2bcaf} {x43760000 xc0c00000 x3ef4bd2f} {x43800000 x40800000 x3ef63d8f} {x438a8000 x41b00000 x3ef8be30} {x43990000 x42400000 x3ef9be70} {x439d0000 x42680000 x3efa3e90} {x43aa0000 x42aa0000 x3efa3e90} {x43ae0000 x42c00000 x3efabeb0} {x43b18000 x42d60000 x3efb3ed0} {x43ba8000 x430b0000 x3efbbef0} {x43c30000 x43380000 x3efc3f10} {x43c58000 x43420000 x3efc3f10} {x43c88000 x434e0000 x3efc3f10} {x43d70000 x43740000 x3efe3f90} {x43ef8000 x43908000 x3effbff0} {x43f50000 x43960000 x3effbff0} {x43fa0000 x439b8000 x3effbff0} {x44058000 x43ab0000 x3eff3fd0} {x44108000 x43c10000 x3effbff0} {x44130000 x43c68000 x3effbff0} {x4417c000 x43d48000 x3effbff0} {x44188000 x43d80000 x3effbff0} {x44194000 x43e30000 x3eff3fd0} {x44180000 x43ed8000 x3ef8be30} {x4417c000 x43ed0000 x3ef8be30} {x44164000 x43e90000 x3efcbf30} {x4414c000 x43e48000 x3effbff0} {x44108000 x43d90000 x3f04a128} {x440d4000 x43d28000 x3f082209} {x4405c000 x43c20000 x3f0e6399} {x43f88000 x43ae0000 x3f12e4b9} {x43ed8000 x43a40000 x3f14a529} {x43d58000 x438d0000 x3f15a569} {x43bc8000 x436b0000 x3f162589} {x43b00000 x43540000 x3f166599} {x43960000 x43270000 x3f16a5a9} {x43898000 x43100000 x3f1725c9} {x43470000 x42a80000 x3f19264a} {x43320000 x42840000 x3f1a268a} {x431d0000 x42440000 x3f1b26ca} {x42dc0000 x41200000 x3f1c671a} {x42a40000 xc1500000 x3f1e278a} {x42a00000 xc1600000 x3f1e679a} {x42b20000 xc1200000 x3f17a5e9} {x42f20000 x41a00000 x3f13a4e9} {x43050000 x42000000 x3f122489} {x43120000 x423c0000 x3f11e479} {x43360000 x429c0000 x3f11e479} {x437c0000 x43060000 x3f11e479} {x438a0000 x431b0000 x3f11e479} {x43af0000 x435e0000 x3f10e439} {x43bc8000 x43750000 x3f106419} {x43ca0000 x43868000 x3f0fe3f9} {x43f50000 x43a80000 x3f0d6359} {x4411c000 x43cf0000 x3f07e1f8} {x44160000 x43d70000 x3f06a1a8} {x44198000 x43de0000 x3f056158} {x44220000 x43ed8000 x3efc3f10} {x44280000 x43f80000 x3ef53d4f} {x44288000 x43f90000 x3ef53d4f} {x44288000 x43f98000 x3ef5bd6f} {x44278000 x43f90000 x3f04e138} {x44264000 x43f70000 x3f04e138} {x44224000 x43f20000 x3f066198} {x441c0000 x43e70000 x3f086219} {x44178000 x43df0000 x3f0aa2a9} {x440c0000 x43ca0000 x3f102409} {x43fa0000 x43b18000 x3f14a529} {x43ea0000 x43a50000 x3f17e5f9} {x43c90000 x438a8000 x3f1c671a} {x43b90000 x437b0000 x3f1da76a} {x439b8000 x43460000 x3f1ea7aa} {x438d8000 x432d0000 x3f1f27ca} {x437e0000 x43150000 x3f1f27ca} {x43320000 x42aa0000 x3f20681a} {x42f20000 x42200000 x3f20280a} {x42d80000 x41f00000 x3f20280a} {x42c40000 x41b00000 x3f20280a} {x42ac0000 x40c00000 x3f1d675a} {x42b60000 xc0c00000 x3f016058} {x42bc0000 xc1000000 x3ef1bc6f} {x42c40000 xc1000000 x3ec7b1ec} {x42ca0000 xc0e00000 x3ebfafec} {x42ce0000 xc0000000 x3ebe2f8c} {x42ec0000 x41c00000 x3ec4b12c} {x42fa0000 x42140000 x3ec9324d} {x431b0000 x42ac0000 x3ed2b4ad} {x43280000 x42d40000 x3ed5354d} {x43740000 x43400000 x3ed8360e} {x43850000 x43570000 x3ed7b5ed} {x43a88000 x438b0000 x3ed735cd} {x43b40000 x43950000 x3ed6b5ad} {x43bf8000 x439e8000 x3ed6b5ad} {x43e08000 x43b80000 x3ed5b56d} {x44014000 x43d30000 x3ed334cd} {x44048000 x43d90000 x3ed2b4ad} {x440e0000 x43ee0000 x3ed2348d} {x4414c000 x43ff0000 x3ed334cd} {x44164000 x44018000 x3ed3b4ed} {x44198000 x44058000 x3ed3b4ed} {x441b0000 x44074000 x3ed3b4ed} {x441e8000 x440b0000 x3ed334cd} {x44210000 x440e0000 x3ed1344d} {x44224000 x440f0000 x3ecdb36d} {x4423c000 x44114000 x3ecc330d} {x44240000 x44120000 x3ecab2ad} {x44240000 x44128000 x3ecab2ad} {x4423c000 x44128000 x3ecc330d} {x44238000 x4412c000 x3ecc330d} {x44224000 x4412c000 x3eca328d} {x44220000 x4412c000 x3ecbb2ed} {x4421c000 x4412c000 x3ecc330d} {x4420c000 x44130000 x3eceb3ad} {x44204000 x44134000 x3ed2b4ad} {x44200000 x44138000 x3ed3b4ed} {x441f8000 x44144000 x3ed2b4ad} {x441f8000 x44148000 x3ed1b46d} {x441f4000 x44158000 x3ecc330d} {x441f0000 x44164000 x3eca328d} {x441ec000 x44170000 x3eca328d} {x441e0000 x44178000 x3eca328d} {x441dc000 x4417c000 x3ecbb2ed} {x441c8000 x4417c000 x3edf37ce} {x441ac000 x44174000 x3eecbb2f} {x44194000 x44164000 x3ef03c0f} {x4415c000 x44140000 x3efbbef0} {x44138000 x44120000 x3f022088} {x440e8000 x440e8000 x3f0a6299} {x44084000 x44090000 x3f1364d9} {x44048000 x44060000 x3f17a5e9} {x43fb0000 x43ff8000 x3f1ea7aa} {x43f38000 x43f98000 x3f21685a} {x43e50000 x43ed8000 x3f2729ca} {x43d80000 x43e20000 x3f2baaeb} {x43d20000 x43dd0000 x3f2ceb3b} {x43c90000 x43d30000 x3f30ac2b} {x43c40000 x43cf0000 x3f322c8b} {x43bd0000 x43c70000 x3f336cdb} {x43ba0000 x43c38000 x3f33aceb} {x43b70000 x43c10000 x3f346d1b} {x43b08000 x43bc0000 x3f35ad6b} {x43af0000 x43bb0000 x3f35ad6b} {x43ae0000 x43ba0000 x3f35ed7b} {x43ad8000 x43b98000 x3f366d9b} {x43ad0000 x43b90000 x3f366d9b} {x43aa0000 x43b68000 x3f36adab} {x43a48000 x43b20000 x3f366d9b} {x43a20000 x43b08000 x3f366d9b} {x439f0000 x43ad8000 x3f366d9b} {x43910000 x43a28000 x3f35ed7b} {x436b0000 x43900000 x3f35ad6b} {x435c0000 x438b0000 x3f35ad6b} {x432d0000 x437b0000 x3f34ed3b} {x43260000 x43780000 x3f2d6b5b} {x432a0000 x437d0000 x3f2aeabb} {x434b0000 x438e0000 x3f26699a} {x435a0000 x43950000 x3f25294a} {x43900000 x43b70000 x3f1c671a} {x43b38000 x43da8000 x3f19a66a} {x43bb0000 x43e20000 x3f19665a} {x43c20000 x43e98000 x3f19264a} {x43d10000 x43f98000 x3f17a5e9} {x43d58000 x44038000 x3f17e5f9} {x43d58000 x44040000 x3f17e5f9} {x43d58000 x44048000 x3f18260a} {x43d20000 x44054000 x3f1c270a} {x43d10000 x44054000 x3f1f27ca} {x43ca0000 x44020000 x3f2368da} {x43c58000 x43ff0000 x3f23a8ea} {x43b98000 x43f10000 x3f25695a} {x43b18000 x43e90000 x3f25695a} {x439d0000 x43d40000 x3f26a9aa} {x436a0000 x43ad8000 x3f2ceb3b} {x434d0000 x439f0000 x3f2e6b9b} {x42f00000 x436a0000 x3f312c4b} {x42be0000 x434e0000 x3f31ac6b} {xc0800000 x42e00000 x3f326c9b} {xc2b40000 x42440000 x3f2f6bdb} {xc2ce0000 x42240000 x3f2f6bdb} {xc2f40000 x42080000 x3f2dab6b} {xc2c20000 x429c0000 x3f25294a} {xc2a80000 x42c00000 x3f22a8aa} {xc2400000 x43060000 x3f1f27ca} {xc1d00000 x431d0000 x3f1ea7aa} {x41b80000 x434b0000 x3f1e278a} {x42440000 x43630000 x3f1da76a} {x43060000 x43960000 x3f1da76a} {x43660000 x43b98000 x3f1d675a} {x43a18000 x43d70000 x3f1ba6ea} {x43cb8000 x43f20000 x3f19665a} {x43d20000 x43f60000 x3f18260a} {x43e10000 x44010000 x3f1725c9} {x43e18000 x4403c000 x3f1725c9} {x43e18000 x44044000 x3f1725c9} {x43e18000 x44050000 x3f1725c9} {x43e10000 x44054000 x3f1725c9} {x43db8000 x4402c000 x3f18661a} {x43d78000 x44000000 x3f18a62a} {x43c98000 x43f10000 x3f1a669a} {x43c08000 x43e78000 x3f1ba6ea} {x43ab0000 x43d10000 x3f1fa7ea} {x439e0000 x43c40000 x3f2368da} {x438f8000 x43b78000 x3f26a9aa} {x43600000 x439e0000 x3f2c6b1b} {x43400000 x43908000 x3f2dab6b} {x42ce0000 x435c0000 x3f2f6bdb} {x429c0000 x43480000 x3f2f6bdb} {x41400000 x43180000 x3f302c0b} {xc1e00000 x42fa0000 x3f312c4b} {xc1f00000 x42f80000 x3f312c4b} {xc1980000 x43000000 x3f1ae6ba} {x41880000 x43260000 x3f0d2349} {x41f80000 x43340000 x3f0be2f9} {x42840000 x43560000 x3f0ba2e9} {x42aa0000 x43680000 x3f0ba2e9} {x43110000 x43928000 x3f0be2f9} {x43280000 x439d0000 x3f0be2f9} {x437a0000 x43c00000 x3f0b22c9} {x438a8000 x43cc0000 x3f082209} {x43bc0000 x43f08000 x3efa3e90} {x43d78000 x4402c000 x3ef7bdef} {x43db0000 x44044000 x3ef7bdef} {x43e00000 x44074000 x3ef7bdef} {x43e00000 x44080000 x3ef83e10} {x43e00000 x44084000 x3ef8be30} {x43df0000 x4408c000 x3f0360d8} {x43db8000 x44084000 x3f0ee3b9} {x43d58000 x44054000 x3f10e439} {x43d18000 x44028000 x3f13e4f9} {x43c60000 x43f70000 x3f19665a} {x43be0000 x43ee0000 x3f1be6fa} {x43ab0000 x43da8000 x3f21685a} {x439f0000 x43cf0000 x3f23e8fa} {x436c0000 x43a90000 x3f2a6a9b} {x43330000 x438f0000 x3f2beafb} {x43170000 x43820000 x3f2beafb} {x42820000 x432e0000 x3f286a1b} {x42440000 x431e0000 x3f2769da} {x41800000 x42fc0000 x3f26e9ba} {x41c80000 x43020000 x3f162589} {x42000000 x43090000 x3f11e479} {x42700000 x432e0000 x3f0f63d9} {x42900000 x433f0000 x3f0e6399} {x42aa0000 x43510000 x3f0c6319} {x42fc0000 x43860000 x3f0aa2a9} {x430b0000 x438f8000 x3f09a269} {x43360000 x43ae0000 x3f046118} {x43460000 x43b80000 x3efdbf70} {x43820000 x43dc0000 x3ed735cd} {x43988000 x43f40000 x3eceb3ad} {x439c0000 x43f90000 x3ece338d} {x439f8000 x43fd0000 x3ecd334d} {x43a58000 x44038000 x3ecd334d} {x43a70000 x44048000 x3ecd334d} {x43a90000 x44074000 x3ecdb36d} {x43aa0000 x44084000 x3ed0340d} {x43ac0000 x440b0000 x3eda368e} {x43ac0000 x440b8000 x3ee2388e} {x43ac0000 x440bc000 x3ee8ba2f} {x43ab8000 x440b0000 x3f0ea3a9} {x43a70000 x44078000 x3f126499} {x43a40000 x44050000 x3f152549} {x439f0000 x44024000 x3f19665a} {x43938000 x43f70000 x3f1f67da} {x438c8000 x43f00000 x3f21284a} {x437c0000 x43e30000 x3f23e8fa} {x436f0000 x43dd0000 x3f24a92a} {x434c0000 x43c98000 x3f26298a} {x43270000 x43b30000 x3f26298a} {x431a0000 x43ab8000 x3f25a96a} {x42d80000 x43970000 x3f2368da} {x42280000 x43838000 x3f23a8ea} {xc1000000 x43750000 x3f23e8fa} {xc1880000 x43750000 x3f23a8ea} {xc1b00000 x43770000 x3f22288a} {xc1c80000 x437c0000 x3f18e63a} {xc1980000 x438e0000 x3f112449} {x41200000 x43a50000 x3f022088} {x41b00000 x43ad0000 x3efa3e90} {x42740000 x43c50000 x3ee4b92e} {x42d00000 x43db8000 x3edab6ae} {x431a0000 x43f30000 x3ed9364e} {x43230000 x43f80000 x3ed9364e} {x432a0000 x43fc0000 x3ed9b66e} {x43380000 x44030000 x3eddb76e} {x43390000 x44044000 x3ee0b82e} {x43360000 x4406c000 x3efcbf30} {x43340000 x44070000 x3f042108} {x43290000 x44070000 x3f1725c9} {x43240000 x44068000 x3f1b26ca} {x431e0000 x44054000 x3f1de77a} {x43100000 x4400c000 x3f24a92a} {x43050000 x43fb8000 x3f26e9ba} {x42da0000 x43ed0000 x3f2a2a8b} {x42be0000 x43e50000 x3f2aaaab} {x42380000 x43ce0000 x3f2beafb} {x41000000 x43bf8000 x3f2cab2b} {xc1200000 x43b90000 x3f2d6b5b} {xc1e80000 x43b30000 x3f2d6b5b} {xc29c0000 x43a58000 x3f2d6b5b} {xc2c80000 x43a10000 x3f2cab2b} {xc2ca0000 x43a10000 x3f2b2acb} {xc2c20000 x43a70000 x3f26699a} {xc2b40000 x43ab8000 x3f21a86a} {xc2820000 x43b98000 x3f1da76a} {xc2400000 x43c10000 x3f1a669a} {xc1000000 x43d28000 x3f112449} {x41500000 x43db8000 x3f0ea3a9} {x420c0000 x43e40000 x3f0da369} {x42be0000 x43fb0000 x3f0a6299} {x43080000 x44050000 x3f092249} {x43180000 x4408c000 x3f092249} {x431a0000 x44098000 x3f092249} {x43110000 x44074000 x3f21a86a} {x43090000 x44054000 x3f22a8aa} {x42ca0000 x43f70000 x3f26a9aa} {x42880000 x43e80000 x3f27e9fa} {x42500000 x43e00000 x3f28ea3b} {xc0e00000 x43c60000 x3f29aa6b} {xc2820000 x43ad8000 x3f296a5b} {xc2cc0000 x439c8000 x3f27e9fa} {xc2f80000 x43920000 x3f2729ca} {xc2f80000 x43910000 x3f26699a} {xc2ec0000 x43930000 x3f18a62a} {xc2d80000 x43988000 x3f15e579} {xc2ca0000 x439c8000 x3f156559} {xc29e0000 x43a88000 x3f156559} {xc2820000 x43b00000 x3f156559} {xc1500000 x43c70000 x3f156559} {x41c00000 x43d78000 x3f14e539} {x422c0000 x43df0000 x3f14a529} {x42740000 x43e68000 x3f14a529} {x42c00000 x43f40000 x3f13a4e9} {x42e00000 x43fa0000 x3f1364d9} {x42fc0000 x44000000 x3f12a4a9} {x43240000 x44080000 x3f102409} {x43460000 x440d4000 x3f0f63d9} {x434d0000 x440e8000 x3f0f63d9} {x43580000 x44100000 x3f0f23c9} {x435a0000 x44108000 x3f0ee3b9} {x435c0000 x44108000 x3f0f23c9} {x43570000 x440e8000 x3f12e4b9} {x43470000 x440a0000 x3f166599} {x433c0000 x44070000 x3f17a5e9} {x43320000 x44040000 x3f18a62a} {x43170000 x43fa0000 x3f1a669a} {x43090000 x43f28000 x3f1ae6ba} {x42c80000 x43e00000 x3f1ae6ba} {x429c0000 x43d58000 x3f1ae6ba} {x42580000 x43cb0000 x3f19a66a} {xc1c00000 x43ab0000 x3f18a62a} {xc2c40000 x438e0000 x3f19665a} {xc3150000 x436f0000 x3f1ae6ba} {xc3200000 x43630000 x3f1b66da} {xc32f0000 x434a0000 x3f1be6fa} {xc32c0000 x43450000 x3f1324c9} {xc3240000 x43450000 x3f0b22c9} {xc3200000 x43450000 x3f092249} {xc31d0000 x43460000 x3f0721c8} {xc3160000 x434c0000 x3f04a128} {xc3140000 x43520000 x3f04a128} {xc30a0000 x43620000 x3f05e178} {xc3040000 x436c0000 x3f066198} {xc2fa0000 x43780000 x3f07a1e8} {xc2d60000 x43890000 x3f0a2289} {xc2c00000 x43900000 x3f0a6299} {xc2580000 x43a80000 x3f0ae2b9} {x40000000 x43c30000 x3f0aa2a9} {x42280000 x43d40000 x3f0aa2a9} {x42740000 x43db0000 x3f0a6299} {x429e0000 x43e20000 x3f0a6299} {x42e20000 x43ef0000 x3f0a6299} {x43000000 x43f50000 x3f0a6299} {x430f0000 x43fa0000 x3f0a6299} {x43360000 x44040000 x3f0aa2a9} {x43420000 x44060000 x3f0a6299} {x434d0000 x44084000 x3f0a6299} {x43600000 x440b8000 x3f09e279} {x43690000 x440d0000 x3f096259} {x437d0000 x44104000 x3f092249} {x43848000 x4411c000 x3f08a229} {x43860000 x4411c000 x3f08a229} {x43860000 x44110000 x3f0aa2a9} {x43838000 x440f8000 x3f0c6319} {x43808000 x440d0000 x3f0f23c9} {x436a0000 x44070000 x3f13a4e9} {x435c0000 x44038000 x3f156559} {x43210000 x43ec0000 x3f1a268a} {x42e60000 x43d58000 x3f1ba6ea} {x42b40000 x43c90000 x3f1ba6ea} {x41600000 x43a40000 x3f1c270a} {xc1000000 x43988000 x3f1ce73a} {xc2880000 x43720000 x3f1ce73a} {xc2a60000 x43600000 x3f1ce73a} {xc2e80000 x43320000 x3f1aa6aa} {xc2fa0000 x43240000 x3f1a268a} {xc30c0000 x43060000 x3f19665a} {xc30f0000 x43000000 x3f18e63a} {xc3120000 x42ee0000 x3f1765d9} {xc3120000 x42e80000 x3f126499} {xc3110000 x42ec0000 x3f0b22c9} {xc30e0000 x42f00000 x3f09e279} {xc30b0000 x42f40000 x3f09a269} {xc3080000 x42fc0000 x3f09a269} {xc3000000 x43090000 x3f0ae2b9} {xc2f80000 x43100000 x3f0b62d9} {xc2ec0000 x43180000 x3f0c6319} {xc2b60000 x43390000 x3f0e2389} {xc2820000 x43540000 x3f0f63d9} {xc2400000 x43640000 x3f102409} {xc1f00000 x43750000 x3f112449} {x41400000 x438d8000 x3f122489} {x42080000 x43980000 x3f122489} {x42600000 x43a28000 x3f122489} {x42f20000 x43c10000 x3f112449} {x430e0000 x43cb0000 x3f10a429} {x43460000 x43e30000 x3f0ea3a9} {x43580000 x43ea0000 x3f0de379} {x43850000 x43fc8000 x3f0c6319} {x438d8000 x44010000 x3f0c6319} {x43958000 x44038000 x3f0ba2e9} {x43a88000 x44098000 x3f092249} {x43b50000 x440d0000 x3f062188} {x43bd8000 x440ec000 x3f016058} {x43c28000 x440fc000 x3efdbf70} {x43c20000 x440f0000 x3efa3e90} {x43bc0000 x440c0000 x3f002008} {x43af0000 x44044000 x3f056158} {x43988000 x43ef0000 x3f09a269} {x436c0000 x43cc0000 x3f0be2f9} {x431e0000 x43a48000 x3f0b22c9} {x42a60000 x43720000 x3f0b62d9} {x426c0000 x43560000 x3f0b62d9} {xc1200000 x43040000 x3f0c6319} {xc1e80000 x42d80000 x3f0ca329} {xc2380000 x42b00000 x3f0da369} {xc2a00000 x420c0000 x3f0da369} {xc2b80000 xbf800000 x3f0de379} {xc2bc0000 xc1200000 x3f0ca329} {xc2bc0000 xc1c80000 x3f096259} {xc2a80000 xc1e00000 x3f002008} {xc2800000 xc1200000 x3eefbbef} {xc1f00000 x42080000 x3ef33ccf} {x41900000 x42bc0000 x3ef6bdaf} {x42a60000 x43230000 x3efabeb0} {x43240000 x43680000 x3efcbf30} {x43820000 x43930000 x3f002008} {x43910000 x439c8000 x3f002008} {x439f0000 x43a58000 x3effbff0} {x43ca0000 x43c58000 x3efe3f90} {x43e10000 x43d70000 x3efbbef0} {x43e60000 x43db0000 x3efa3e90} {x43e98000 x43de8000 x3ef8be30} {x43ed0000 x43e40000 x3efa3e90} {x43ed0000 x43e48000 x3eff3fd0} {x43ea8000 x43e30000 x3f0f23c9} {x43e78000 x43e08000 x3f102409} {x43cd0000 x43c60000 x3f18661a} {x43af0000 x43aa8000 x3f1f67da} {x43a30000 x43a00000 x3f21a86a} {x43590000 x43650000 x3f2729ca} {x42fc0000 x43090000 x3f28aa2b} {x42dc0000 x42ec0000 x3f28ea3b} {x42920000 x42740000 x3f29ea7b} {x426c0000 x41d00000 x3f26e9ba} {x42500000 x41300000 x3f1de77a} {x42500000 x41400000 x3f05a168} {x42500000 x41800000 x3f04a128} {x42700000 x42180000 x3f04e138} {x42820000 x42440000 x3f04e138} {x428e0000 x42700000 x3f04e138} {x42c40000 x42c20000 x3f05a168} {x43180000 x431b0000 x3f082209} {x432a0000 x432a0000 x3f086219} {x43800000 x43710000 x3f09a269} {x43ae8000 x439f0000 x3f092249} {x43b98000 x43a80000 x3f086219} {x43de0000 x43c60000 x3f02a0a8} {x43f70000 x43dc0000 x3efcbf30} {x44060000 x43ec0000 x3efb3ed0} {x44084000 x43ef0000 x3efabeb0} {x440a0000 x43f20000 x3efabeb0} {x440ec000 x43fd0000 x3ef83e10} {x440ec000 x43fe0000 x3ef6bdaf} {x440d0000 x43fe8000 x3ef63d8f} {x4405c000 x43f60000 x3ef7bdef} {x44020000 x43f10000 x3ef8be30} {x43e68000 x43d90000 x3f002008} {x43bf8000 x43b80000 x3f022088} {x43970000 x43938000 x3f06a1a8} {x43400000 x43400000 x3f082209} {x43260000 x43280000 x3f086219} {x429c0000 x42b00000 x3f092249} {x42700000 x42920000 x3f096259} {x41880000 x42140000 x3f09e279} {x40c00000 x41e00000 x3f0a6299} {xc1c00000 xc0a00000 x3f0aa2a9} {xc2080000 xc1a00000 x3f0a6299} {xc20c0000 xc1c00000 x3f0a2289} {xc2200000 xc1f00000 x3f08a229} {xc2240000 xc1f80000 x3f086219} {xc23c0000 xc2000000 x3f07e1f8} {xc23c0000 xc1b00000 x3f06a1a8} {xc2300000 xc1800000 x3f06a1a8} {xc1f80000 0 x3f066198} {xc1b80000 x41000000 x3f066198} {xc1500000 x41800000 x3f066198} {x41a00000 x42200000 x3f06a1a8} {x42000000 x42440000 x3f06a1a8} {x42740000 x42880000 x3f0761d8} {x42980000 x429c0000 x3f07a1e8} {x42b40000 x42b20000 x3f07a1e8} {x43000000 x42f00000 x3f082209} {x430b0000 x43000000 x3f082209} {x43270000 x43170000 x3f086219} {x432e0000 x431d0000 x3f086219} {x43390000 x43220000 x3f086219} {x432a0000 x43110000 x3f0f63d9} {x42fc0000 x42da0000 x3f10a429} {x42e20000 x42c40000 x3f112449} {x42c20000 x42b20000 x3f112449} {x42540000 x42580000 x3f11e479} {x42180000 x422c0000 x3f11e479} {x40c00000 x41800000 x3f126499} {1 x41300000 x3f126499} {x41000000 x41880000 x3f10a429} {x426c0000 x42800000 x3f10e439} {x42940000 x429e0000 x3f10e439} {x42fa0000 x43060000 x3f10e439} {x430f0000 x431b0000 x3f10e439} {x43220000 x43320000 x3f10e439} {x43640000 x43780000 x3f10e439} {x437b0000 x43880000 x3f106419} {x439c8000 x43a88000 x3f0f63d9} {x43a50000 x43b20000 x3f0f63d9} {x43ad0000 x43bb0000 x3f0f23c9} {x43c30000 x43d78000 x3f0f63d9} {x43d00000 x43e70000 x3f0fa3e9} {x43d50000 x43ec0000 x3f0fa3e9} {x43d90000 x43f00000 x3f0fe3f9} {x43e60000 x43fe0000 x3f0fa3e9} {x43e98000 x44010000 x3f0fa3e9} {x43f20000 x44074000 x3f0f63d9} {x43f50000 x44098000 x3f0f63d9} {x4400c000 x44128000 x3f07e1f8} {x44060000 x44198000 x3ef9be70} {x44070000 x441ac000 x3ef5bd6f} {x44084000 x441d4000 x3eefbbef} {x44090000 x441e0000 x3eee3b8f} {x44098000 x441e8000 x3eee3b8f} {x440a0000 x441e8000 x3ee9ba6f} {x440a0000 x441c0000 x3eea3a8f} {x44090000 x441a0000 x3ef6bdaf} {x44028000 x440f0000 x3f16a5a9} {x43f30000 x4402c000 x3f25695a} {x43ed0000 x43fd0000 x3f27e9fa} {x43db0000 x43e18000 x3f2dab6b} {x43cf0000 x43c80000 x3f2fabeb} {x43c90000 x43b20000 x3f2f2bcb} {x43c80000 x43ab0000 x3f2f2bcb} {x43c60000 x43a48000 x3f2eabab} {x43be0000 x438c0000 x3f2beafb} {x43b78000 x43770000 x3f2729ca} {x43b50000 x436e0000 x3f24290a} {x43ab8000 x43460000 x3f152549} {x43a90000 x433b0000 x3f1324c9} {x43a80000 x43330000 x3f11e479} {x43a80000 x43210000 x3f10a429} {x43a90000 x431d0000 x3f10a429} {x43ab0000 x431c0000 x3f0ee3b9} {x43b30000 x431b0000 x3efebfb0} {x43b68000 x431e0000 x3ef7bdef} {x43c58000 x43350000 x3ef53d4f} {x43cc8000 x43400000 x3ef7bdef} {x43e60000 x436a0000 x3efb3ed0} {x43ef0000 x437a0000 x3efb3ed0} {x43f70000 x43848000 x3efbbef0} {x44084000 x439b8000 x3efb3ed0} {x440c0000 x43a28000 x3ef9be70} {x44188000 x43b78000 x3ef33ccf} {x441d8000 x43bc8000 x3ef3bcef} {x441c4000 x43b20000 x3f0b62d9} {x441a4000 x43ab8000 x3f102409} {x44114000 x43938000 x3f21685a} {x4403c000 x436f0000 x3f25294a} {x43fd0000 x435a0000 x3f26a9aa} {x43de0000 x431a0000 x3f286a1b} {x43d40000 x43040000 x3f28aa2b} {x43b90000 x428c0000 x3f282a0b} {x43b10000 x42480000 x3f27a9ea} {x43a90000 x42000000 x3f26a9aa} {x43970000 xc1600000 x3f2328ca} {x43938000 xc1c80000 x3f22e8ba} {x43910000 xc2000000 x3f22689a} {x43900000 xc2300000 x3f21284a} {x43920000 xc2380000 x3f19264a} {x43940000 xc23c0000 x3f0da369} {x439c8000 xc2300000 x3ee6398e} {x43a00000 xc2280000 x3ed7b5ed} {x43a88000 xc1e80000 x3eb5ad6b} {x43ab0000 xc1c00000 x3eaeabab} {x43b20000 xc0e00000 x3ea2288a} {x43b48000 xbf800000 x3e99264a} {x43bf8000 x41400000 x3e9324c9} {x43c30000 x41880000 x3e842108} {x43c80000 x41a00000 0}}} {tx x429e0000 x438fbc93 x43916406} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush77 512 catmullrom {cc {f 2080} {px x429e0000 {x43c20000 x43080000 1} {x43c70000 x431c0000 x3c102409}}} {tx x429e0000 x43c48000 x43120000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush76 512 catmullrom {cc {f 2080} {px x429e0000 {x43e20000 x43460000 1} {x43de8000 x433f0000 x3ec8b22d} {x43da0000 x43360000 x3ec8b22d} {x43d50000 x432d0000 x3ec8b22d} {x43ca0000 x43170000 x3ed735cd} {x43c40000 x430b0000 x3ee4390e} {x43bd8000 x42fc0000 x3ee9ba6f} {x43b70000 x42e20000 x3eed3b4f} {x43a78000 x42a40000 x3ef83e10} {x439f0000 x42840000 x3f002008} {x43960000 x42440000 x3f02e0b8} {x437e0000 x40c00000 x3f0d6359} {x43650000 xc1c80000 x3f10a429} {x43630000 xc1e80000 x3f10e439} {x43630000 xc2000000 x3f10e439} {x43630000 xc2200000 x3f0ae2b9} {x43680000 xc22c0000 x3ee9ba6f} {x43690000 xc22c0000 x3edbb6ee} {x436e0000 xc2240000 x3ebe2f8c} {x43760000 xc2080000 x3eb3aceb} {x43818000 xc1a00000 x3eae2b8b} {x43860000 xc1500000 x3eab2acb} {x438a0000 xc0800000 x3ea9aa6b} {x438f0000 x40a00000 x3ea9aa6b} {x43c38000 x42f40000 x3eb02c0b} {x43c88000 x43000000 x3eb12c4b} {x43cc8000 x43050000 x3eb12c4b} {x43d00000 x43090000 x3eb2acab} {x43d40000 x430a0000 x3eb42d0b} {x43d30000 x43030000 x3eb82e0c} {x43c58000 x42ce0000 x3ed4b52d} {x43bf8000 x42b40000 x3ee0380e} {x43a18000 x41c80000 x3efe3f90} {x43860000 xc20c0000 x3f0761d8} {x43818000 xc2300000 x3f086219} {x437d0000 xc26c0000 x3f092249} {x43820000 xc26c0000 x3f07a1e8} {x43870000 xc2580000 x3f01a068} {x439e8000 xc1a00000 x3ee4b92e} {x43b00000 x41400000 x3eddb76e} {x43b80000 x41f00000 x3eda368e} {x43c00000 x42400000 x3ed2b4ad} {x43c70000 x42840000 x3eca328d} {x43ce8000 x42a60000 x3ec5314c} {x43e38000 x43000000 x3ec3b0ec} {x43ea0000 x430c0000 x3ec2b0ac} {x43f38000 x43200000 x3ec6318c} {x43f40000 x43220000 x3ec9b26d} {x43f40000 x43230000 x3ed2b4ad} {x43f10000 x431c0000 x3f09a269} {x43e20000 x42e80000 x3f0d2349} {x43db8000 x42ce0000 x3f0da369} {x43d50000 x42b00000 x3f0da369} {x43ce0000 x428e0000 x3f0da369} {x43c00000 x42100000 x3f0de379} {x43a90000 xc1e00000 x3f0e6399} {x43a60000 xc2240000 x3f0e6399} {x43a30000 xc2880000 x3f0ee3b9} {x43a30000 xc2940000 x3f0e2389} {x43a50000 xc29a0000 x3f0ae2b9} {x43ac0000 xc2940000 x3ec6b1ac} {x43af0000 xc28c0000 x3eac2b0b} {x43b18000 xc2800000 x3e94a529} {x43b40000 xc2600000 x3e82a0a8} {x43b70000 xc23c0000 x3e82a0a8} {x43ba0000 xc2180000 x3e86a1a8} {x43bd0000 xc1e00000 x3e8b22c9} {x43c00000 xc1880000 x3e8fa3e9} {x43c30000 xc0a00000 x3e94a529} {x43c68000 x41200000 x3e9a268a} {x43cb0000 x41c00000 x3e9f27ca} {x43d00000 x42180000 x3ea328ca} {x43d58000 x42500000 x3ea6298a} {x43ed0000 x42b00000 x3eb5ad6b} {x43f40000 x42b20000 x3ec6318c} {x43f40000 x42a60000 x3edab6ae} {x43e98000 x42540000 x3ef7bdef} {x43e40000 x42200000 x3efabeb0} {x43dd8000 x41d00000 x3efcbf30} {x43c68000 xc1a00000 x3f01a068} {x43bf8000 xc20c0000 x3f02e0b8} {x43b00000 xc2920000 x3f0da369} {x43ad8000 xc2a00000 x3f126499} {x43b10000 xc2b20000 x3f152549} {x43b98000 xc2a00000 x3f0f23c9} {x43bf0000 xc2920000 x3f0b62d9} {x43c40000 xc2820000 x3f07e1f8} {x43ca0000 xc2580000 x3f0360d8} {x43d58000 xc1f80000 x3efabeb0} {x43e18000 xc0e00000 x3ef83e10} {x43eb0000 x41900000 x3ef7bdef} {x43ef0000 x41f80000 x3ef7bdef} {x43f28000 x42300000 x3ef7bdef} {x43f60000 x42680000 x3ef7bdef} {x43f98000 x428e0000 x3ef6bdaf} {x44000000 x42c00000 x3ef7bdef} {x44024000 x42d60000 x3ef7bdef} {x44040000 x42e80000 x3ef7bdef} {x4408c000 x430a0000 x3ef83e10} {x440a0000 x430f0000 x3ef83e10} {x440d0000 x431b0000 x3ef8be30} {x440d8000 x431d0000 x3ef9be70} {x440e0000 x43200000 x3ef9be70} {x440e4000 x43210000 x3ef9be70} {x440d8000 x431c0000 x3f02a0a8} {x440c8000 x43160000 x3f02a0a8} {x44090000 x43040000 x3f02a0a8} {x44048000 x42da0000 x3f03a0e8} {x44024000 x42c00000 x3f05a168} {x43ff8000 x42a60000 x3f062188} {x43fb0000 x428c0000 x3f06e1b8} {x43f60000 x425c0000 x3f0761d8} {x43f10000 x42240000 x3f0761d8} {x43ec8000 x41e00000 x3f07e1f8} {x43e78000 x41600000 x3f07e1f8} {x43d70000 xc1e80000 x3f07e1f8} {x43d00000 xc2540000 x3f06e1b8} {x43d00000 xc2600000 x3f06a1a8} {x43d10000 xc2680000 x3ee7b9ee} {x43d20000 xc2600000 x3ed5354d} {x43d30000 xc2540000 x3ed1344d} {x43d90000 xc20c0000 x3eceb3ad} {x43dc0000 xc1d00000 x3ece338d} {x43df0000 xc1880000 x3ece338d} {x43e38000 xc0e00000 x3eceb3ad} {x43e70000 x40800000 x3ed1344d} {x43eb0000 x41800000 x3ed2348d} {x43ef8000 x41e00000 x3ed3b4ed} {x43fd0000 x42740000 x3ed9b66e} {x44010000 x428e0000 x3ed9b66e} {x44070000 x42b40000 x3edab6ae} {x44080000 x42b80000 x3eda368e} {x44088000 x42bc0000 x3eda368e} {x44080000 x42b20000 x3efa3e90} {x44008000 x42600000 x3efebfb0} {x43fb8000 x42380000 x3effbff0} {x43ef8000 x41b00000 x3f006018} {x43e38000 xc0000000 x3f046118} {x43d78000 xc20c0000 x3f126499} {x43d70000 xc2200000 x3f1324c9} {x43d70000 xc2280000 x3f1324c9} {x43d90000 xc22c0000 x3f10e439} {x43db0000 xc22c0000 x3f086219} {x43dd0000 xc2280000 x3efb3ed0} {x43e38000 xc1f00000 x3ed6b5ad} {x43e60000 xc1c80000 x3ed5354d} {x43e80000 xc1900000 x3ed1b46d} {x43ea8000 xc1300000 x3ed0340d} {x43ed0000 xc0000000 x3eceb3ad} {x43ef8000 x40e00000 x3ece338d} {x43f20000 x41880000 x3ecdb36d} {x43f58000 x41d00000 x3ecdb36d} {x43f88000 x420c0000 x3ecdb36d} {x44010000 x42600000 x3ece338d} {x44028000 x42740000 x3ece338d} {x44044000 x42860000 x3ece338d} {x44020000 x42740000 x3ee5b96e} {x44008000 x425c0000 x3ee83a0f} {x43fd0000 x42440000 x3eeb3acf} {x43f90000 x42280000 x3eeebbaf} {x43f00000 x41c00000 x3ef3bcef} {x43da8000 xc1300000 x3efc3f10} {x43d58000 xc1880000 x3effbff0} {x43ce0000 xc1e80000 x3f016058} {x43d20000 xc1000000 x3eea3a8f} {x43d80000 x41880000 x3ed6b5ad} {x43db8000 x42000000 x3ec1b06c} {x43df0000 x42400000 x3ea2288a} {x43e38000 x42840000 x3e85a168} {x43f58000 x430b0000 x3e40300c} {x44014000 x43470000 x3e842108} {x44024000 x43510000 x3e8ca329} {x4402c000 x43590000 x3e97a5e9} {x44030000 x43640000 x3eb92e4c} {x44030000 x43660000 x3ec6318c} {x44030000 x43680000 x3ed3b4ed} {x44014000 x435e0000 x3ef6bdaf} {x43ff0000 x43530000 x3ef83e10} {x43fa0000 x43460000 x3ef93e50} {x43f30000 x43350000 x3efa3e90} {x43eb0000 x43240000 x3efa3e90} {x43e30000 x43120000 x3efbbef0} {x43da8000 x43020000 x3efbbef0} {x43c10000 x429c0000 x3efc3f10} {x43b80000 x42740000 x3efdbf70} {x43a00000 x41600000 x3f012048} {x43998000 1 x3f022088} {x43958000 xc1000000 x3f02e0b8} {x43908000 xc1b00000 x3f03a0e8} {x43970000 xc1200000 x3ebcaf2c} {x439b0000 0 x3e9da76a} {x43a28000 x41d00000 0}}} {tx x429e0000 x43d3feab x422fe555} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush75 512 catmullrom {cc {f 2080} {px x429e0000 {x43dd0000 x43500000 1} {x43d78000 x43440000 x3ea328ca} {x43d20000 x43350000 x3e9324c9} {x43c58000 x43150000 x3e9aa6aa} {x43be0000 x43020000 x3ea5294a} {x43b68000 x42dc0000 x3eadab6b} {x43a48000 x428c0000 x3eb5ad6b} {x43908000 x41e00000 x3ebcaf2c} {x43530000 xc2540000 x3ec5314c} {x43420000 xc28c0000 x3ec5314c} {x43240000 xc2dc0000 x3e9ba6ea}}} {tx x429e0000 x43a48ba3 x42988ba3} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush74 512 catmullrom {cc {f 2080} {px x429e0000 {x43ed0000 x43660000 1} {x43e98000 x43600000 x3eeb3acf} {x43e40000 x43500000 x3ed2348d} {x43e08000 x43450000 x3ed3b4ed} {x43d80000 x432c0000 x3edbb6ee} {x43cd0000 x430f0000 x3ee1384e} {x43c70000 x42fe0000 x3ee2388e} {x43c08000 x42dc0000 x3ee2388e} {x43a78000 x42580000 x3ee3b8ee} {x439f0000 x42100000 x3ee4390e} {x43870000 xc1600000 x3ee4b92e} {x43818000 xc1d00000 x3ee2b8ae} {x437d0000 xc20c0000 x3ed9b66e} {x437b0000 xc22c0000 0}}} {tx x429e0000 x43b82db7 x42c59249} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush73 512 catmullrom {cc {f 2080} {px x429e0000 {x43e98000 x434d0000 1} {x43e38000 x43450000 x3ed2348d} {x43dd8000 x433b0000 x3ed2348d} {x43d20000 x43260000 x3ed0340d} {x43cc8000 x431a0000 x3ed4b52d} {x43c70000 x430b0000 x3eda368e} {x43c20000 x42f80000 x3ee0380e} {x43ae0000 x42900000 x3ee7b9ee} {x43a60000 x42580000 x3ee7b9ee} {x43928000 x40a00000 x3ee5b96e} {x438e0000 xc0e00000 x3ee4390e} {x438b0000 xc1800000 x3edeb7ae} {x438c0000 xc1c00000 x3d44310c}}} {tx x429e0000 x43b86c4f x42c13b14} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush72 512 catmullrom {cc {f 2080} {px x429e0000 {x43f58000 x42600000 1} {x43f08000 x42480000 x3e97a5e9} {x43e60000 x42100000 x3e97a5e9} {x43e00000 x41e80000 x3e97a5e9} {x43d48000 x41800000 x3e91a469} {x43d00000 x41200000 x3e912449} {x43cb0000 x40800000 x3e90a429} {x43cb0000 x40c00000 0}}} {tx x429e0000 x43dcd000 x41cf0000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush71 512 catmullrom {cc {f 2080} {px x429e0000 {x43f60000 x42180000 x3e723c8f} {x43f38000 x420c0000 1} {x43f10000 x41e80000 x3e892249} {x43ef0000 x41c00000 x3e9ca72a} {x43eb0000 x41880000 x3eaaaaab} {x43e80000 x41300000 x3eb4ad2b} {x43e48000 x40a00000 x3ebcaf2c} {x43de0000 xc1000000 x3ec9324d} {x43db0000 xc1500000 x3ecc330d} {x43d80000 xc1980000 x3edab6ae} {x43d90000 xc1980000 x3ed7b5ed} {x43db8000 xc1900000 x3ec0300c} {x43e68000 xc0000000 x3e2f2bcb}}} {tx x429e0000 x43e5ec4f x40c4ec4f} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush70 512 catmullrom {cc {f 2080} {px x429e0000 {x43fe8000 x42ee0000 1} {x43fa0000 x42dc0000 x3ed3b4ed} {x43f68000 x42cc0000 x3ed3b4ed} {x43ef8000 x42a80000 x3edf37ce} {x43eb0000 x42940000 x3ee5394e} {x43e70000 x42820000 x3ee93a4f} {x43e30000 x425c0000 x3eedbb6f} {x43db8000 x42180000 x3ef1bc6f} {x43d90000 x41f00000 x3ef1bc6f} {x43d70000 x41c00000 x3ef23c8f} {x43d48000 x41200000 x3eefbbef} {x43d58000 x40000000 x3e99264a} {x43d70000 x40000000 x3e54350d} {x43d88000 x40800000 0}}} {tx x429e0000 x43e40925 x424d6db7} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush69 512 catmullrom {cc {f 2080} {px x429e0000 {x43df0000 x40800000 1} {x43db0000 xc0e00000 x3dde378e} {x43d78000 xc1600000 x3e3c2f0c} {x43d78000 xc1880000 x3e5735cd} {x43d88000 xc1800000 x3e282a0b} {x43db8000 xc1400000 x3da6298a}}} {tx x429e0000 x43da2aab xc1255555} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush68 512 catmullrom {cc {f 2080} {px x429e0000 {x43b10000 x42aa0000 1} {x439d0000 x41e80000 x3eb82e0c} {x439c0000 x41a00000 x3ec1b06c} {x439c0000 x41800000 x3ec4b12c} {x439f0000 x41200000 x3ec6318c} {x43a80000 x41400000 x3eb4ad2b} {x43b48000 x42200000 x3eb0ac2b} {x43b80000 x42480000 x3eb1ac6b} {x43cb0000 x42ce0000 x3ec0b02c} {x43e90000 x43220000 x3ec2308c} {x43f10000 x432f0000 x3ec2308c} {x4403c000 x434c0000 x3ec1b06c} {x4406c000 x43520000 x3ec1304c} {x44090000 x43570000 x3ec1304c} {x440d8000 x43620000 x3ec0300c} {x440e4000 x43630000 x3ebfafec} {x440e8000 x43630000 x3eb5ad6b} {x440e0000 x43600000 x3eb5ad6b} {x440b4000 x43570000 x3eb4ad2b} {x44074000 x43480000 x3eb0ac2b} {x44020000 x43340000 x3eac2b0b} {x43fd0000 x43290000 x3ea8aa2b} {x43f68000 x431c0000 x3ea6a9aa} {x43ef8000 x430f0000 x3ea6298a} {x43e78000 x42fe0000 x3ea6298a} {x43df0000 x42e00000 x3ea6298a} {x43c00000 x42300000 x3eae2b8b} {x43bb0000 x41f00000 x3eb5ad6b} {x43b40000 0 x3ec1304c} {x43b40000 xc0c00000 x3ec1304c} {x43b40000 xc1300000 x3ec1304c} {x43ba8000 xc1900000 x3e5d374e}}} {tx x429e0000 x43dcd000 x42df8000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush67 512 catmullrom {cc {f 2080} {px x429e0000 {x438d8000 x42700000 1} {x438c0000 x42480000 x3e89a269} {x438a8000 x422c0000 x3e89a269} {x438a8000 x42180000 x3e89a269} {x438b0000 x420c0000 x3e89a269} {x438d0000 x420c0000 x3e89a269} {x438f8000 x420c0000 x3e80a028} {x43920000 x42140000 x3e6d3b4f} {x43970000 x423c0000 x3e6a3a8f} {x43a48000 x42aa0000 x3e9aa6aa} {x43a88000 x42c40000 x3eb42d0b} {x43c58000 x43230000 x3ecab2ad} {x43ed0000 x43540000 x3ed0b42d} {x43f58000 x435d0000 x3ed0b42d} {x44060000 x43750000 x3ecc330d} {x4409c000 x437d0000 x3ec2308c} {x44084000 x437b0000 x3e892249} {x44070000 x43760000 x3e5334cd} {x44048000 x436f0000 0}}} {tx x429e0000 x43bfbca2 x42fbe50d} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush66 512 catmullrom {cc {f 2080} {px x429e0000 {x437a0000 x429c0000 1} {x43690000 x426c0000 x3e4731cc} {x43510000 x41d00000 x3e4731cc} {x43480000 x41500000 x3e693a4f} {x43450000 x40800000 x3e892249} {x43470000 xc1400000 x3e99264a} {x435f0000 xc0800000 x3e753d4f} {x43660000 x40a00000 x3e753d4f} {x43808000 x42180000 x3e86a1a8} {x43848000 x42500000 x3e9324c9} {x438a0000 x42840000 x3e9b26ca} {x439a0000 x42ec0000 x3ea8aa2b} {x43a00000 x430a0000 x3ea9aa6b} {x43b48000 x434a0000 x3ea9aa6b} {x43bc8000 x435e0000 x3ea7a9ea} {x43c50000 x43710000 x3ea6298a} {x43e10000 x43920000 x3e98a62a} {x44000000 x43a90000 x3e6a3a8f} {x44038000 x43ae0000 x3e59364e} {x440c8000 x43ba8000 x3e102409} {x440e8000 x43bd0000 x3d042108}}} {tx x429e0000 x43a4bcf4 x430daaab} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush65 512 catmullrom {cc {f 2080} {px x429e0000 {x436e0000 x42100000 x3e392e4c} {x43750000 x42280000 1} {x437c0000 x42400000 x3e3d2f4c} {x43820000 x425c0000 x3e51344d} {x43868000 x42740000 x3e753d4f} {x438f0000 x42900000 x3e862188} {x439c0000 x42b40000 x3e892249} {x439f0000 x42c00000 x3e89a269} {x43aa0000 x42fe0000 x3ea2a8aa} {x43b80000 x43330000 x3ea6298a} {x43bc0000 x43420000 x3ea2a8aa} {x43c90000 x43750000 x3e54350d} {x43ce0000 x43820000 x3e0a2289} {x43d40000 x43898000 0}}} {tx x429e0000 x43a0c925 x42fe4925} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush64 512 catmullrom {cc {f 2080} {px x429e0000 {x433b0000 x426c0000 1} {x432f0000 x42380000 x3e9725c9} {x43260000 x42000000 x3ea328ca} {x43210000 x41d00000 x3eaaaaab} {x431d0000 x41b00000 x3eb12c4b} {x431b0000 x41900000 x3eb5ad6b} {x431a0000 x41880000 x3eb82e0c} {x43210000 x41b00000 x3ebbaeec} {x43520000 x42820000 x3ebeafac} {x43620000 x429e0000 x3ebfafec} {x43880000 x43030000 x3ec6318c} {x43900000 x43160000 x3ec6318c} {x43980000 x432a0000 x3ec6b1ac} {x43ad0000 x436a0000 x3ec6318c} {x43c50000 x43970000 x3ec0300c} {x43ca0000 x439d0000 x3ec0b02c} {x43cf8000 x43a28000 x3ec0b02c} {x43e00000 x43b00000 x3ec0b02c} {x43ed0000 x43b68000 x3ebeafac} {x43ed0000 x43b60000 x3eb9ae6c} {x43e18000 x43a40000 x3ebcaf2c} {x43bf8000 x437d0000 x3ebeafac} {x43b50000 x43660000 x3ec0b02c} {x438a8000 x42fe0000 x3ec2b0ac} {x434d0000 x420c0000 x3ec6b1ac} {x433f0000 x41800000 x3ec8b22d} {x43270000 xc1c00000 x3eceb3ad} {x43240000 xc1f80000 x3eceb3ad} {x43240000 xc2140000 x3eceb3ad} {x43260000 xc2280000 x3eb42d0b} {x43290000 xc2240000 x3e91a469} {x43300000 xc1f80000 0}}} {tx x429e0000 x4383f800 x42f24000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush63 512 catmullrom {cc {f 2080} {px x429e0000 {x4400c000 x43e90000 x3e4330cc} {x43fd0000 x43e10000 x3e50340d} {x43f88000 x43d80000 x3e5334cd} {x43e38000 x43b80000 x3e8a2289} {x43da8000 x43ad0000 x3e96a5a9} {x43d10000 x43a10000 x3e9f27ca} {x43c68000 x43950000 x3ea7a9ea} {x43b00000 x43760000 x3eb62d8b} {x43a30000 x435c0000 x3ebcaf2c} {x43630000 x42f00000 x3ec6b1ac} {x431a0000 x42200000 x3eca328d} {x430f0000 x41c80000 x3ecbb2ed} {x42f40000 xc1200000 x3ecc330d} {x42ee0000 xc1880000 x3ecab2ad} {x42ec0000 xc1b80000 x3ec6318c} {x42ec0000 xc1f00000 x3e842108} {x42f00000 xc1f00000 0}}} {tx x429e0000 x4393c3c4 x433d9697} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush62 512 catmullrom {cc {f 2080} {px x429e0000 {x43100000 x429e0000 1} {x430c0000 x42980000 x3eb82e0c} {x430c0000 x42940000 x3ebaaeac} {x430f0000 x42980000 x3ebaaeac} {x43140000 x42a00000 x3ebdaf6c} {x431a0000 x42ac0000 x3ec0b02c} {x43210000 x42bc0000 x3ec4b12c} {x432a0000 x42ce0000 x3ec7b1ec} {x43400000 x42fe0000 x3ec8320d} {x43800000 x43480000 x3ec8320d} {x438a0000 x435e0000 x3ec7b1ec} {x43b20000 x439c0000 x3eb0ac2b} {x43d48000 x43c28000 x3e802008} {x43db8000 x43ca0000 x3e5e378e} {x43ea8000 x43de0000 x3e4d334d} {x43ee0000 x43e38000 x3e4c330d} {x43f10000 x43e78000 x3e4b32cd} {x43f98000 x43f20000 x3e162589} {x43fc8000 x43f50000 x3e022088} {x43ff0000 x43f70000 0}}} {tx x429e0000 x43982000 x4380cccd} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush61 512 catmullrom {cc {f 2080} {px x429e0000 {x42b20000 x42820000 1} {x42cc0000 x42980000 x3e19264a} {x42e80000 x42b00000 x3e332ccb} {x43040000 x42c80000 x3e5f37ce} {x43280000 x42fa0000 x3e8d2349} {x433b0000 x430b0000 x3e922489} {x437a0000 x43350000 x3ea2a8aa} {x43868000 x43440000 x3ea6298a} {x439f0000 x436c0000 x3ea6a9aa} {x43a58000 x43780000 x3ea5294a} {x43b08000 x43848000 0}}} {tx x429e0000 x4352745d x431c45d1} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush60 512 catmullrom {cc {f 2080} {px x429e0000 {xc2860000 x42180000 x3e5f37ce} {xc2860000 x42240000 x3e6d3b4f} {xc2820000 x42300000 x3e773dcf} {xc2700000 x42440000 x3e8a2289} {xc25c0000 x425c0000 x3e96a5a9} {xc2440000 x42780000 x3e9ca72a} {xc2280000 x42900000 x3ea1284a} {xc2080000 x42a40000 x3ea3a8ea} {xc1c00000 x42b80000 x3ea5294a} {xc1400000 x42d40000 x3ea5294a} {x40000000 x42f20000 x3ea6a9aa} {x41980000 x430a0000 x3ea8aa2b} {x42200000 x431e0000 x3ea92a4b} {x42780000 x43340000 x3eaaaaab} {x42b00000 x434b0000 x3eaaaaab} {x43340000 x43898000 x3ea92a4b} {x43a00000 x43b38000 x3e9ca72a} {x43af0000 x43bc0000 x3e96a5a9} {x43e08000 x43db0000 x3e2a2a8b} {x43f30000 x43e78000 0}}} {tx x429e0000 x4298199a x4327999a} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush59 512 catmullrom {cc {f 2080} {px x429e0000 {x43860000 x43cf8000 1} {x43850000 x43cf8000 x3e9725c9} {x43808000 x43cf8000 x3ebdaf6c} {x437c0000 x43ce0000 x3ece338d} {x43760000 x43cc0000 x3ed7b5ed} {x43700000 x43c88000 x3ee2b8ae} {x43580000 x43b78000 x3ef43d0f} {x43240000 x43938000 x3f006018} {x43150000 x43898000 x3f00e038} {x429e0000 x43400000 x3efabeb0} {x40c00000 x42da0000 x3edf37ce} {xc1200000 x42b80000 x3ed5b56d} {xc2480000 x42480000 x3eb0ac2b} {xc2740000 x42200000 x3ea328ca} {xc2a40000 x41b80000 x3e5a368e} {xc2a40000 x41c00000 0}}} {tx x429e0000 x42e84000 x4375d000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush58 512 catmullrom {cc {f 2080} {px x429e0000 {x43c40000 x43f08000 1} {x43c00000 x43ed8000 x3eaeabab} {x43bc8000 x43ea8000 x3eb0ac2b} {x43b40000 x43e18000 x3ebc2f0c} {x43ab8000 x43d78000 x3ec4310c} {x43a70000 x43d10000 x3ec9b26d} {x439b8000 x43c10000 x3ed1b46d} {x43940000 x43b78000 x3ed334cd} {x438c0000 x43ad8000 x3ed5b56d} {x43580000 x438c0000 x3ed8360e} {x42e40000 x433a0000 x3ed0b42d} {x42b20000 x43240000 x3ed0340d} {1 x42be0000 x3ed2348d} {xc2380000 x426c0000 x3ed8360e} {xc2400000 x42580000 x3ed8360e} {xc2280000 x42480000 x3eab2acb} {xc2100000 x42480000 x3e82a0a8} {xc1e80000 x42540000 x3d743d0f}}} {tx x429e0000 x43371c72 x4385c71c} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush57 512 catmullrom {cc {f 2080} {px x429e0000 {x43b30000 x43ed0000 1} {x43b50000 x43ed0000 x3e4b32cd} {x43b40000 x43ea0000 x3e8721c8} {x43b00000 x43e48000 x3eb12c4b} {x439f0000 x43d48000 x3edab6ae} {x43640000 x43b00000 x3ef23c8f} {x433f0000 x43a20000 x3ef83e10} {x431b0000 x43940000 x3efbbef0} {x425c0000 x43580000 x3f0360d8} {x41e00000 x43400000 x3f04a128} {xc2000000 x43030000 x3f04e138} {xc2300000 x42e80000 x3f04e138} {xc2200000 x42c80000 x3ed2b4ad} {x41400000 x43050000 0}}} {tx x429e0000 x43248000 x43948000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush56 512 catmullrom {cc {f 2080} {px x429e0000 {x41300000 x43b98000 1} {x42140000 x43c20000 x3dee3b8f} {x42820000 x43c98000 x3df63d8f} {x43470000 x43f70000 x3dc0300c} {x43540000 x43fc8000 x3dc0300c} {x43630000 x44024000 x3df03c0f} {x435d0000 x44044000 x3e733ccf} {x43540000 x44044000 x3e9aa6aa} {x434c0000 x44044000 x3ea729ca} {x432d0000 x44024000 x3eb92e4c} {x43040000 x43f58000 x3eb92e4c} {x42f40000 x43f00000 x3eb9ae6c} {x42e20000 x43e98000 x3ebaaeac} {x42ca0000 x43e30000 x3ebc2f0c} {x42540000 x43c30000 x3eb9ae6c} {x42240000 x43bb0000 x3eb1ac6b} {x40e00000 x43a58000 x3e733ccf} {1 x439f8000 x3e2b2acb} {xc0800000 x439b0000 x3d743d0f}}} {tx x429e0000 x42dfe50d x43dd35e5} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush55 512 catmullrom {cc {f 2080} {px x429e0000 {x43450000 x43ef8000 1} {x43400000 x43ef8000 x3ea1284a} {x43330000 x43ed0000 x3eb92e4c} {x432c0000 x43ea8000 x3ec5314c} {x431a0000 x43e38000 x3ed8360e} {x42ee0000 x43d20000 x3ee9ba6f} {x42ce0000 x43cb0000 x3eeb3acf} {x42aa0000 x43c30000 x3eecbb2f} {x41b80000 x43aa0000 x3eed3b4f} {xc2740000 x438d0000 x3edcb72e} {xc29e0000 x43880000 x3ed2b4ad} {xc2bc0000 x43848000 x3ed0340d} {xc2e60000 x43818000 x3ec4b12c} {xc2dc0000 x438c0000 x3e7d3f50} {xc2d00000 x438f8000 x3e2c2b0b} {xc2aa0000 x43990000 x3c902409}}} {tx x429e0000 x42100000 x43b73800} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush54 512 catmullrom {cc {f 2080} {px x429e0000 {x437d0000 x4402c000 1} {x43808000 x44038000 x3e25294a} {x43760000 x44014000 x3e9324c9} {x436e0000 x43fe8000 x3e9aa6aa} {x43630000 x43f98000 x3ea6298a} {x43570000 x43f38000 x3eb0ac2b} {x433b0000 x43e68000 x3ec4b12c} {x432d0000 x43df0000 x3eca328d} {x43000000 x43c68000 x3ece338d} {x42e20000 x43bd8000 x3eceb3ad} {x42c00000 x43b48000 x3ed0340d} {x42400000 x439b0000 x3ed0b42d} {xc1600000 x43800000 x3ecdb36d} {xc1c80000 x43760000 x3ecdb36d} {xc2300000 x436a0000 x3eb9ae6c} {xc2180000 x436e0000 0}}} {tx x429e0000 x4300c000 x43c7a800} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush53 512 catmullrom {cc {f 2080} {px x429e0000 {xc1800000 x43660000 1} {1 x43720000 x3e6739ce} {x41900000 x437e0000 x3e6b3acf} {x42080000 x43850000 x3e6b3acf} {x42480000 x438c0000 x3e7f3fd0} {x42840000 x43920000 x3e882209} {x42bc0000 x439e8000 x3e902409} {x43020000 x43b18000 x3e9aa6aa} {x430c0000 x43b80000 x3e9b26ca} {x43390000 x43d10000 x3e9ca72a} {x43660000 x43e70000 x3e9da76a} {x43710000 x43eb0000 x3e9da76a} {x438b0000 x43fc0000 x3e8fa3e9} {x43940000 x44030000 x3e6a3a8f} {x43940000 x44038000 x3e6a3a8f} {x43928000 x4403c000 x3e902409} {x43900000 x44028000 x3e9ea7aa} {x438c8000 x4400c000 x3ea5294a} {x43780000 x43ed0000 x3ece338d} {x435a0000 x43dd8000 x3ed1344d} {x43480000 x43d58000 x3ed1344d} {x43360000 x43ce0000 x3ed1344d} {x43270000 x43c60000 x3ed2348d} {x42d60000 x43a88000 x3ebbaeec} {x42bc0000 x43a28000 x3eaa2a8b} {x42820000 x43968000 x3e49324d} {x426c0000 x43940000 x3dfe3f90}}} {tx x429e0000 x431d38e4 x43c2212f} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush52 512 catmullrom {cc {f 2080} {px x429e0000 {x43210000 x43c00000 1} {x43320000 x43c58000 1} {x43420000 x43cb8000 x3e322c8b} {x43620000 x43d58000 x3e352d4b} {x43700000 x43da8000 x3e7e3f90} {x437c0000 x43df0000 x3e8c2309} {x43950000 x43f00000 x3eaa2a8b} {x43998000 x43f40000 x3eadab6b} {x43a58000 x4400c000 x3eb5ad6b} {x43a88000 x4402c000 x3eb6adab} {x43ab8000 x44048000 x3eb7adeb} {x43b30000 x4409c000 x3eb8ae2c} {x43b98000 x440e8000 x3eb92e4c} {x43ba0000 x440f0000 x3eb9ae6c} {x43ba8000 x440f0000 x3eb9ae6c} {x43ba8000 x440f8000 x3eb9ae6c} {x43b90000 x440d8000 x3ed8360e} {x43b68000 x440b8000 x3edbb6ee} {x43b30000 x44090000 x3edeb7ae} {x43ae8000 x44060000 x3ee0380e} {x43a90000 x44028000 x3ee1384e} {x43a30000 x43fe0000 x3ee2b8ae} {x43940000 x43ed8000 x3ee338ce} {x43800000 x43db0000 x3ee0380e} {x43200000 x43b30000 x3ee2388e} {x43080000 x43a90000 x3ee2388e} {x42400000 x43860000 x3eeb3acf} {xc1e00000 x43510000 x3ef23c8f} {xc2300000 x43440000 x3ef2bcaf} {xc2aa0000 x43220000 x3eeebbaf} {xc2be0000 x43180000 x3ee5b96e} {xc2d00000 x43110000 x3ed9b66e} {xc3000000 x42fe0000 x3ec6318c} {xc30b0000 x42ee0000 x3eac2b0b} {xc30f0000 x42e80000 x3e9b26ca} {xc3120000 x42e40000 x3e822088} {xc3140000 x42e20000 x3e42308c} {xc3150000 x42e00000 x3dae2b8b}}} {tx x429e0000 x432b3ca2 x43bf75e5} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush51 512 catmullrom {cc {f 2080} {px x429e0000 {x43a40000 x43f80000 x3dde378e} {x43ab0000 x43fe0000 1} {x43b08000 x44014000 x3de0380e} {x43b80000 x44054000 x3df83e10} {x43bc0000 x44078000 x3e1b26ca} {x43bc0000 x44090000 x3e65394e} {x43bb0000 x44090000 x3e7e3f90} {x43b98000 x44088000 x3e912449} {x43b68000 x4406c000 x3e9ba6ea} {x43b18000 x4402c000 x3ea2288a} {x43ab0000 x43fb0000 x3ea92a4b} {x43a60000 x43f40000 x3ea92a4b} {x43a18000 x43ed0000 x3ea7a9ea} {x439b8000 x43e60000 x3ea0280a} {x43760000 x43c80000 x3e8d2349} {x432a0000 x43ac0000 x3e93a4e9} {x43180000 x43a70000 x3e9725c9} {x430a0000 x43a28000 x3e9aa6aa} {x42e40000 x439c0000 x3ea729ca} {x42d60000 x439b0000 1} {x42d00000 x439f8000 x3eb02c0b} {x42e00000 x43a50000 x3ea328ca} {x43270000 x43c38000 x3e20280a} {x433a0000 x43cc8000 0}}} {tx x429e0000 x43859555 x43dee000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush50 512 catmullrom {cc {f 2080} {px x429e0000 {x42240000 x43400000 1} {x42540000 x43500000 x3e8c2309} {x429a0000 x436f0000 x3e8c2309} {x42b60000 x43800000 x3e922489} {x42f40000 x43910000 x3ea3a8ea} {x430e0000 x43998000 x3ea92a4b} {x434b0000 x43b10000 x3eb02c0b} {x43600000 x43b80000 x3eb02c0b} {x438a8000 x43cc8000 x3eb12c4b} {x43928000 x43d28000 x3eb2acab} {x43a90000 x43e98000 x3eb42d0b} {x43b98000 x43fe0000 x3eb5ad6b} {x43bd8000 x44014000 x3eb5ad6b} {x43c68000 x44080000 x3eb4ad2b} {x43c90000 x4409c000 x3eb4ad2b} {x43cb0000 x440b4000 x3eb42d0b} {x43ce0000 x440e0000 x3eb4ad2b} {x43c60000 x44084000 x3ec6b1ac} {x43bc0000 x44010000 x3eceb3ad} {x43ae0000 x43f10000 x3ed5b56d} {x43a60000 x43e80000 x3ed5b56d} {x439d0000 x43de0000 x3ed5354d} {x43938000 x43d30000 x3ed1344d} {x434c0000 x43a78000 x3ec0b02c} {x42e80000 x43870000 x3eba2e8c} {x42c40000 x43818000 x3ebcaf2c} {x42820000 x43750000 x3ec1304c} {x42b60000 x438f8000 x3e9e278a} {x42d40000 x43980000 x3e8b22c9} {x42f00000 x43a00000 0}}} {tx x429e0000 x436c4ccd x43c22666} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush49 512 catmullrom {cc {f 2080} {px x429e0000 {x43c00000 x43e00000 1} {x43bd0000 x43de0000 x3e99264a} {x43b48000 x43d70000 x3ea1a86a} {x43b00000 x43d10000 x3eadab6b} {x43aa0000 x43ca0000 x3ebaaeac} {x43a30000 x43c28000 x3ec9324d} {x43938000 x43af0000 x3ed5b56d} {x438a0000 x43a48000 x3edbb6ee} {x432f0000 x43660000 x3eeabaaf} {x43140000 x434c0000 x3eecbb2f} {x428e0000 x43020000 x3ee83a0f} {x42400000 x42d80000 x3ee2388e} {xc1a00000 x422c0000 x3ec7b1ec} {xc22c0000 x41b00000 x3e94a529}}} {tx x429e0000 x435cc925 x438d0925} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush48 512 catmullrom {cc {f 2080} {px x429e0000 {x42920000 x42940000 1} {x42d00000 x42e40000 x3e332ccb} {x42f40000 x43080000 x3e3c2f0c} {x430f0000 x431d0000 x3e42308c} {x43260000 x43340000 x3e46318c} {x433f0000 x434a0000 x3e4731cc} {x43770000 x43770000 x3e49324d} {x43a20000 x439b0000 x3e46318c} {x43ad0000 x43a48000 x3e4330cc} {x43cf0000 x43c60000 x3e46318c} {x43e50000 x43e10000 x3e102409} {x43e90000 x43e60000 x3dec3b0f} {x43eb0000 x43ea8000 x3db82e0c} {x43ed8000 x43ef0000 x3da2288a} {x43f08000 x43f60000 x3d962589} {x43f20000 x44000000 x3dbc2f0c} {x43f28000 x4400c000 x3dd0340d} {x43f28000 x44014000 x3df03c0f} {x43f28000 x44018000 x3e1324c9} {x43ec0000 x43f90000 x3e91a469} {x43e80000 x43f38000 x3ea1284a} {x43e38000 x43ed8000 x3ea9aa6b} {x43de0000 x43e70000 x3eb02c0b} {x43c30000 x43c58000 x3ec0300c} {x43bb0000 x43ba8000 x3ec4b12c} {x439f0000 x43960000 x3ec7b1ec} {x43938000 x43898000 x3ec6318c} {x43880000 x437a0000 x3ec2308c} {x43460000 x432e0000 x3ebaaeac} {x42d40000 x42a80000 x3eb9ae6c} {x42aa0000 x42800000 x3eb2acab} {x41b00000 1 x3e98a62a} {xbf800000 xc1c80000 x3e52348d} {xbf800000 xc1d00000 x3db02c0b}}} {tx x429e0000 x4397a5a6 x43981a5a} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush47 512 catmullrom {cc {f 2080} {px x429e0000 {x437c0000 x43230000 1} {x43940000 x43520000 x3ebfafec} {x43998000 x435f0000 x3ed6b5ad} {x439a0000 x43630000 x3ee5394e} {x43958000 x435d0000 x3f0d2349} {x43900000 x43530000 x3f0ea3a9} {x43890000 x43450000 x3f0fa3e9} {x43540000 x430c0000 x3f0fe3f9} {x42e60000 x42600000 x3f106419} {x42b80000 x42140000 x3f106419} {x41d00000 xc1c80000 x3f07e1f8} {1 xc2500000 x3eedbb6f} {0 xc2500000 x3edab6ae} {x41200000 xc1c80000 x3dc0300c}}} {tx x429e0000 x43312492 x42dab6db} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush46 512 catmullrom {cc {f 2080} {px x429e0000 {x43f00000 x439d0000 1} {x43ee0000 x439d0000 x3eae2b8b} {x43e78000 x439c0000 x3edc370e} {x43e38000 x43990000 x3eea3a8f} {x43de0000 x43950000 x3ef93e50} {x43d88000 x43900000 x3f02a0a8} {x43c58000 x43760000 x3f0be2f9} {x43be0000 x43650000 x3f0c6319} {x43a40000 x432c0000 x3f0d2349} {x43998000 x43160000 x3f0d2349} {x438e0000 x42fe0000 x3f0d2349} {x43540000 x426c0000 x3f086219} {x43060000 xc1880000 x3ed5354d} {x42f20000 xc1f80000 x3ebcaf2c} {x42bc0000 xc2740000 0}}} {tx x429e0000 x43a6ddde x43346666} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush45 512 catmullrom {cc {f 2080} {px x429e0000 {x43c28000 x43500000 1} {x43c38000 x43540000 x3e713c4f} {x43c40000 x43580000 x3e733ccf} {x43c40000 x43590000 x3e80a028} {x43c40000 x435a0000 x3e912449} {x43c28000 x43590000 x3ec9324d} {x43c10000 x43570000 x3ed2b4ad} {x43b70000 x43390000 x3ee739ce} {x439f0000 x43020000 x3ee7b9ee} {x43968000 x42e40000 x3ee739ce} {x43620000 x42440000 x3ee6398e} {x43240000 xc0800000 x3eb8ae2c} {x431b0000 xc1600000 x3e9e278a} {x430b0000 xc1f80000 x3d98260a}}} {tx x429e0000 x439d2492 x430a0000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush44 512 catmullrom {cc {f 2080} {px x429e0000 {x43d20000 xc0800000 1} {x43cb8000 xc1500000 1} {x43c50000 xc1b80000 x3e96a5a9} {x43bd0000 xc2080000 x3ea92a4b} {x43ae0000 xc2580000 x3eba2e8c} {x43a60000 xc2800000 x3ec6318c} {x439f0000 xc2920000 x3eca328d} {x43990000 xc2a40000 x3ecab2ad} {x43938000 xc2b20000 x3ecab2ad} {x438f0000 xc2bc0000 x3ec5314c} {x438c0000 xc2c20000 x3ebaaeac} {x438a0000 xc2c00000 x3ea2a8aa} {x438b0000 xc2a40000 x3e25294a}}} {tx x429e0000 x43a613b1 xc277b13b} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x429e0000 ltm x429e0000 tt x41880000}} {cubiccurve Brush43 512 catmullrom {cc {f 2080} {px x41b00000 {x43e80000 x43030000 1} {x43ec0000 x430c0000 1} {x43ef8000 x43170000 x3e5f37ce} {x43f28000 x43210000 x3e8ca329} {x43f68000 x43350000 x3eae2b8b} {x43f90000 x433f0000 x3eaf2bcb} {x43fa0000 x43470000 x3eaf2bcb} {x43fc8000 x434e0000 x3eb02c0b} {x44000000 x43580000 x3eb0ac2b} {x44014000 x435c0000 x3eb0ac2b} {x44038000 x434e0000 x3eb3aceb} {x43f98000 x43170000 x3eb92e4c} {x43f30000 x43050000 x3ebfafec} {x43ec0000 x42e60000 x3ec4310c} {x43e40000 x42be0000 x3ec6b1ac} {x43c00000 x41400000 x3ec8b22d} {x43a60000 xc2600000 x3ec8b22d} {x43a28000 xc2880000 x3ec9324d} {x43a30000 xc2a80000 x3ebe2f8c} {x43a78000 xc2a80000 0}}} {tx x41b00000 x43e2a666 x42dd999a} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush42 512 catmullrom {cc {f 2080} {px x41b00000 {x43c50000 x43220000 1} {x43cf8000 x433c0000 x3e60380e} {x43d48000 x434a0000 x3e60380e} {x43de8000 x43630000 x3e6338ce} {x43ec8000 x43808000 x3e59364e} {x43f08000 x43838000 x3e59364e} {x43fe0000 x43870000 x3e59364e} {x43ff0000 x43808000 x3e6d3b4f} {x43fc8000 x43780000 x3e733ccf} {x43f90000 x436f0000 x3e733ccf} {x43e80000 x43450000 x3e733ccf} {x43c50000 x42ee0000 x3e9da76a} {x43bc0000 x42c00000 x3ea4290a} {x43990000 x40e00000 x3eacab2b} {x437d0000 xc2700000 x3ea729ca} {x43750000 xc2900000 x3ea4290a} {x43660000 xc2b40000 x3e98260a} {x436a0000 xc2a40000 0}}} {tx x41b00000 x43c6c71c x4306e38e} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush41 512 catmullrom {cc {f 2080} {px x41b00000 {x438e0000 x43290000 1} {x438c0000 x43240000 x3e9aa6aa} {x438a0000 x43200000 x3ead2b4b} {x438c0000 x43240000 x3ebc2f0c} {x439f8000 x43500000 x3ec5314c} {x43a70000 x435e0000 x3ed6b5ad} {x43bc8000 x43898000 x3ee83a0f} {x43c40000 x43938000 x3ee93a4f} {x43cc0000 x439e8000 x3ee9ba6f} {x43e68000 x43bc8000 x3eea3a8f} {x44008000 x43d48000 x3ee93a4f} {x44024000 x43d70000 x3ee5394e} {x44020000 x43d48000 x3ee4390e} {x43f08000 x43bc0000 x3eedbb6f} {x43e90000 x43b20000 x3eedbb6f} {x43e08000 x43a80000 x3eea3a8f} {x43d70000 x439c8000 x3ee5394e} {x43ab8000 x43500000 x3ebd2f4c} {x439f8000 x43340000 x3ebd2f4c} {x43770000 x42bc0000 x3ebc2f0c} {x435f0000 x42840000 x3eb82e0c} {x43480000 x42240000 x3eb82e0c} {x43150000 xc1b80000 x3ead2b4b} {x42f40000 xc2940000 x3e743d0f} {x42f40000 xc2a00000 x3e3a2e8c} {x42f40000 xc2a80000 0}}} {tx x41b00000 x43a62276 x434d6276} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush40 512 catmullrom {cc {f 2080} {px x41b00000 {x43e38000 x43f58000 1} {x43dd0000 x43f20000 x3ecbb2ed} {x43d60000 x43ec8000 x3ecbb2ed} {x43c80000 x43de0000 x3ed5b56d} {x43c00000 x43d48000 x3edc370e} {x43b80000 x43c98000 x3ee4b92e} {x43b00000 x43bd8000 x3ee93a4f} {x439c8000 x43a40000 x3eedbb6f} {x43910000 x43960000 x3eee3b8f} {x43360000 x432f0000 x3ee739ce} {x42a80000 x42680000 x3ed9364e} {x42820000 x42080000 x3ecc330d} {x42400000 x41400000 x3ec0300c} {x41800000 xc2000000 x3e64390e} {x41500000 xc2200000 0}}} {tx x41b00000 x43800000 x43832222} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush39 512 catmullrom {cc {f 2080} {px x41b00000 {x43db0000 x43e68000 x3dd8360e} {x43d90000 x43e48000 x3e362d8b} {x43c40000 x43d58000 x3ea1284a} {x43a60000 x43ba0000 x3eb7adeb} {x435f0000 x43840000 x3ec7b1ec} {x43400000 x436b0000 x3ecab2ad} {x42a00000 x42ee0000 x3ece338d} {x40000000 x41f00000 x3ebeafac} {xc1000000 x41600000 x3eb3aceb} {xc1b80000 xc0a00000 x3e4c330d}}} {tx x41b00000 x434e3333 x436d6666} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush38 512 catmullrom {cc {f 2080} {px x41b00000 {x436c0000 x43b68000 1} {x43580000 x43ae0000 x3ea7a9ea} {x432c0000 x439c0000 x3eb9ae6c} {x43150000 x43920000 x3eccb32d} {x42fc0000 x43870000 x3ed735cd} {x42d00000 x43770000 x3edfb7ee} {x42400000 x43350000 x3ee4b92e} {x42000000 x43210000 x3edeb7ae} {xbf800000 x42c40000 x3e98260a} {xc0000000 x42aa0000 0}}} {tx x41b00000 x42d80000 x436be666} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush37 512 catmullrom {cc {f 2080} {px x41b00000 {x42940000 x44010000 1} {x42900000 x43ff0000 x3e86a1a8} {x42580000 x43f68000 x3e9da76a} {x42280000 x43f10000 x3ea9aa6b} {x41880000 x43e68000 x3ebaaeac} {x40800000 x43e10000 x3ec2b0ac} {xc1d00000 x43cd0000 x3ed4b52d} {xc20c0000 x43c60000 x3ed735cd} {xc2380000 x43ac0000 x3ea7a9ea} {xc2380000 x43a80000 x3e162589}}} {tx x41b00000 x41300000 x43dbe666} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush36 512 catmullrom {cc {f 2080} {px x41b00000 {x42800000 x43f90000 1} {x42800000 x43f98000 x3e6e3b8f} {x42780000 x43f98000 x3e793e50} {x42480000 x43f80000 x3e9ca72a} {x42240000 x43f58000 x3ea4290a} {x41f00000 x43f28000 x3eaaaaab} {xc0c00000 x43e80000 x3eb5ad6b} {xc1980000 x43e40000 x3eb92e4c} {xc1f00000 x43e08000 x3ebe2f8c} {xc2500000 x43da8000 x3ec8320d} {xc1e80000 x43e30000 x3e42308c}}} {tx x41b00000 x417e8ba3 x43eda2e9} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush35 512 catmullrom {cc {f 2080} {px x41b00000 {x429c0000 x43ef8000 1} {x42740000 x43ea8000 x3ead2b4b} {x422c0000 x43e50000 x3eae2b8b} {x41200000 x43db8000 x3eb7adeb} {xc0a00000 x43d70000 x3ec4310c} {xc1880000 x43d40000 x3ed7b5ed} {xc1d00000 x43d18000 x3edeb7ae} {xc1b80000 x43d28000 x3eb9ae6c} {xc1800000 x43d58000 x3eb1ac6b} {x41a00000 x43e20000 x3d44310c}}} {tx x41b00000 x41480000 x43dce666} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush34 512 catmullrom {cc {f 2080} {px x41b00000 {x437a0000 x44024000 x3e26298a} {x43720000 x44010000 1} {x43680000 x43ff0000 x3e2f2bcb} {x43500000 x43f80000 x3e58360e} {x43400000 x43f38000 x3e753d4f} {x43320000 x43ef8000 x3e8a2289} {x43230000 x43eb0000 x3e95a569} {x42fe0000 x43de8000 x3eb3aceb} {x42ee0000 x43db0000 x3eb4ad2b} {x42dc0000 x43d80000 x3eb5ad6b} {x42ca0000 x43d20000 x3eb0ac2b} {x42ca0000 x43d18000 x3e9fa7ea}}} {tx x41b00000 x43289555 x43eab555} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush33 512 catmullrom {cc {f 2080} {px x41b00000 {x43090000 x43fe8000 x3e352d4b} {x430b0000 x43ff0000 1} {x430f0000 x43ff8000 x3e3c2f0c} {x43120000 x44000000 x3e56358d} {x431b0000 x44008000 x3e773dcf} {x43210000 x44008000 x3e7a3e90} {x43290000 x4400c000 x3e7a3e90} {x43330000 x44014000 x3e7a3e90} {x433c0000 x44018000 x3e793e50} {x43480000 x44024000 x3e753d4f} {x43530000 x4402c000 x3e64390e} {x435d0000 x44038000 x3e49324d} {x43660000 x4403c000 x3e332ccb} {x436f0000 x44044000 0}}} {tx x41b00000 x4333db6e x44016492} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush32 512 catmullrom {cc {f 2080} {px x41b00000 {x43020000 x43f30000 1} {x42fa0000 x43f10000 x3e5a368e} {x42ee0000 x43f00000 x3e5e378e} {x42e20000 x43ed8000 x3e7e3f90} {x42d60000 x43ec0000 x3e8b22c9} {x42c80000 x43e98000 x3e98260a} {x42bc0000 x43e70000 x3ea1a86a} {x42a60000 x43e20000 x3eb02c0b} {x42b60000 x43e78000 x3e25294a}}} {tx x41b00000 x42d5c71c x43eb8000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush31 512 catmullrom {cc {f 2080} {px x41b00000 {x433b0000 x43ff8000 1} {x43360000 x43ff8000 x3e64390e} {x432f0000 x43ff0000 x3e842108} {x432a0000 x43fe0000 x3e8e2389} {x43260000 x43fc0000 x3e9725c9} {x43200000 x43f90000 x3e9da76a} {x431a0000 x43f58000 x3e9ea7aa} {x43120000 x43f20000 x3e9ea7aa} {x430b0000 x43ed8000 x3ea1a86a} {x42e40000 x43e10000 x3ea2a8aa} {x42d40000 x43dd0000 x3ea2a8aa} {x42b00000 x43d58000 x3ea3a8ea} {x42ac0000 x43d58000 x3ea2a8aa} {x42be0000 x43db8000 0}}} {tx x41b00000 x430c9249 x43ee76db} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush30 512 catmullrom {cc {f 2080} {px x41b00000 {x439c8000 x44030000 1} {x439c0000 x44030000 x3e773dcf} {x439b8000 x44030000 x3e7b3ed0} {x439b0000 x44030000 x3e8e2389} {x439a0000 x44030000 x3ea1284a} {x43998000 x44030000 x3ea1284a} {x43990000 x44028000 x3ea1284a} {x43980000 x44018000 x3ea1284a} {x43958000 x44008000 x3ea328ca} {x43920000 x43fe0000 x3ea5294a} {x438d0000 x43f98000 x3ea6a9aa} {x43800000 x43ef0000 x3eacab2b} {x43380000 x43d10000 x3eb12c4b} {x43240000 x43c90000 x3eb12c4b} {x42e60000 x43b10000 x3eaa2a8b} {x42ca0000 x43aa8000 x3ea2a8aa} {x42b00000 x43a40000 x3e95a569} {x42600000 x43950000 x3e86a1a8} {x42440000 x43920000 x3e862188} {x42280000 x438f0000 x3e5a368e} {x42280000 x43900000 x3cc0300c}}} {tx x41b00000 x435379e8 x43dacf3d} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush29 512 catmullrom {cc {f 2080} {px x41b00000 {x43a18000 x43e18000 1} {x43a80000 x43e60000 x3e0c2309} {x43ad8000 x43e98000 x3e0f23c9} {x43b18000 x43ec0000 x3e152549} {x43b50000 x43ee0000 x3e20280a} {x43b70000 x43f00000 x3e26298a} {x43b80000 x43f08000 x3e2d2b4b} {x43b80000 x43f10000 x3e42308c} {x43b38000 x43f00000 x3ea4290a} {x439c0000 x43e00000 x3eb4ad2b} {x43928000 x43d80000 x3eb5ad6b} {x433e0000 x43ae0000 x3eb92e4c} {x42b20000 x437b0000 x3eb6adab} {x42880000 x43650000 x3eaeabab} {x41980000 x432f0000 x3e9aa6aa} {x41000000 x43220000 x3e91a469} {0 x43180000 x3e8c2309} {xc1000000 x43080000 x3e5c370e}}} {tx x41b00000 x4366d555 x43b6d555} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush28 512 catmullrom {cc {f 2080} {px x41b00000 {x43ae8000 x43e60000 1} {x43b08000 x43e78000 x3e56358d} {x43b20000 x43e90000 x3e5a368e} {x43b50000 x43ea8000 x3e693a4f} {x43b68000 x43ea8000 x3e703c0f} {x43b60000 x43e70000 x3e93a4e9} {x43a50000 x43d50000 x3eab2acb} {x439e0000 x43cd0000 x3eb42d0b} {x43958000 x43c40000 x3eb9ae6c} {x43660000 x43a10000 x3ed2348d} {x42f20000 x434e0000 x3ee7b9ee} {x42c00000 x43320000 x3ee93a4f} {x41300000 x42980000 x3ed334cd} {xc1e80000 x41400000 x3e60380e} {xc1e80000 x40e00000 x3cb82e0c}}} {tx x41b00000 x4368eeef x43a0999a} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush27 512 catmullrom {cc {f 2080} {px x41b00000 {x43988000 x43e50000 1} {x43958000 x43e20000 x3e282a0b} {x438d8000 x43d90000 x3e693a4f} {x43818000 x43cb0000 x3e952549} {x434c0000 x43ad0000 x3eb82e0c} {x43350000 x43a10000 x3ebfafec} {x431d0000 x43940000 x3ec6318c} {x42aa0000 x43540000 x3ece338d} {x42780000 x43360000 x3ece338d} {xc1b80000 x429a0000 x3ebbaeec} {xc2800000 x41b00000 0}}} {tx x41b00000 x431ee8ba x4391c5d1} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush26 512 catmullrom {cc {f 2080} {px x41b00000 {x43a60000 x43f38000 x3e092249} {x43a48000 x43f30000 x3e3e2f8c} {x43a20000 x43f08000 x3e5d374e} {x439f0000 x43ee0000 x3e6d3b4f} {x439b0000 x43ea8000 x3e7b3ed0} {x43968000 x43e60000 x3e8721c8} {x43910000 x43e00000 x3e8a2289} {x438a8000 x43d90000 x3e8d2349} {x43750000 x43c70000 x3e90a429} {x43620000 x43bd0000 x3e90a429} {x43040000 x438a8000 x3e9e278a} {x42100000 x432a0000 x3eb0ac2b} {x41500000 x43110000 x3eb5ad6b} {xc2540000 x428c0000 x3eb42d0b} {xc2780000 x42440000 0}}} {tx x41b00000 x43493333 x43ae4444} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush25 512 catmullrom {cc {f 2080} {px x41b00000 {x42820000 x43a40000 1} {x42280000 x43958000 x3e802008} {x41e80000 x438d8000 x3e822088} {x41600000 x43850000 x3e8721c8} {xbf800000 x437a0000 x3e922489} {xc2300000 x434a0000 x3ea0280a} {xc2680000 x433a0000 x3e9c270a} {xc2aa0000 x43170000 0}}} {tx x41b00000 xc0980000 x4375a000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush24 512 catmullrom {cc {f 2080} {px x41b00000 {x42b60000 x439c0000 1} {x429e0000 x43940000 x3e2a2a8b} {x42840000 x438d0000 x3e2b2acb} {x42540000 x43860000 x3e3a2e8c} {x42200000 x437d0000 x3e44310c} {x41d00000 x43700000 x3e4731cc} {1 x43580000 x3e49324d} {xc1b00000 x43400000 x3e44310c} {xc1c80000 x433c0000 x3e40300c} {xc1d00000 x433a0000 x3e1725c9}}} {tx x41b00000 x41e26666 x43734ccd} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush23 512 catmullrom {cc {f 2080} {px x41b00000 {x433b0000 x43e80000 1} {x433e0000 x43ea8000 x3e1c270a} {x433e0000 x43ec0000 x3e5735cd} {x433a0000 x43ec0000 x3e7b3ed0} {x43330000 x43eb0000 x3e8e2389} {x43290000 x43e90000 x3e9aa6aa} {x43200000 x43e60000 x3e9ba6ea} {x43150000 x43e20000 x3e9e278a} {x42ec0000 x43d48000 x3ea4290a} {x42d60000 x43cf8000 x3ea8aa2b} {x42c20000 x43cb0000 x3eb0ac2b} {x42980000 x43bf8000 x3ec6318c} {x42a80000 x43bf8000 x3ec6318c} {x42bc0000 x43c30000 x3ebfafec} {x43100000 x43d78000 x3e87a1e8} {x43440000 x43ef0000 x3e8d2349} {x43500000 x43f40000 x3e8ea3a9} {x436c0000 x4400c000 x3e91a469} {x43720000 x44024000 x3e91a469} {x43760000 x44030000 x3e902409} {x437b0000 x44044000 x3e59364e} {x43710000 x44010000 x3e80a028} {x436b0000 x43fe8000 x3e842108} {x435d0000 x43f60000 x3e882209} {x434a0000 x43ec0000 x3e842108} {x433e0000 x43e50000 x3e6b3acf} {x43320000 x43de8000 x3e4330cc} {x43240000 x43d78000 x3dfc3f10} {x43180000 x43cf8000 x3c882209} {x42fa0000 x43bf0000 x3ce0380e} {x42dc0000 x43b68000 x3d98260a} {x42580000 x43980000 x3e52348d} {x422c0000 x43920000 x3e693a4f} {x41b80000 x43840000 x3e753d4f} {x41e00000 x43838000 0}}} {tx x41b00000 x431c6db7 x43d9715f} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush22 512 catmullrom {cc {f 2080} {px x41b00000 {x433f0000 x43e18000 1} {x43420000 x43e48000 x3e042108} {x43440000 x43e80000 x3e1d274a} {x43440000 x43e90000 x3e5f37ce} {x43410000 x43e98000 x3e8721c8} {x433f0000 x43ea0000 x3e98260a} {x43380000 x43e90000 x3eb62d8b} {x43220000 x43dd0000 x3eb9ae6c} {x431a0000 x43d88000 x3eb82e0c} {x43110000 x43d40000 x3eb5ad6b} {x42ec0000 x43c88000 x3eac2b0b} {x42e20000 x43c68000 x3eab2acb} {x42dc0000 x43c68000 x3e8d2349} {x42e60000 x43c88000 x3e6739ce} {x430f0000 x43d48000 0}}} {tx x41b00000 x43205555 x43daa222} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush21 512 catmullrom {cc {f 2080} {px x41b00000 {x43838000 x43eb0000 1} {x43818000 x43ea0000 x3e54350d} {x437e0000 x43e78000 x3e5f37ce} {x437a0000 x43e50000 x3e842108} {x436b0000 x43dd0000 x3e9ca72a} {x433a0000 x43c08000 x3eb5ad6b} {x42ec0000 x43998000 x3ebe2f8c} {x42c40000 x438f8000 x3ebd2f4c} {x41b80000 x43590000 x3eb6adab} {xc1c00000 x43380000 x3eb2acab} {xc1e00000 x43380000 x3ea8aa2b} {xc1e00000 x43400000 0}}} {tx x41b00000 x4305d555 x43a90aab} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush20 512 catmullrom {cc {f 2080} {px x41b00000 {x438b0000 x43f28000 x3e753d4f} {x438b0000 x43f20000 x3e7a3e90} {x43898000 x43f08000 x3e812048} {x43850000 x43ec0000 x3e9fa7ea} {x437b0000 x43e38000 x3eba2e8c} {x43530000 x43ce8000 x3ec8b22d} {x43400000 x43c58000 x3eca328d} {x432c0000 x43bc0000 x3ecc330d} {x42d40000 x439c0000 x3ecd334d} {x42a40000 x43910000 x3ecc330d} {x41800000 x436a0000 x3ec8b22d} {0 x435a0000 x3ec8b22d} {xc1500000 x434d0000 x3ec8b22d} {xc2000000 x43360000 x3eae2b8b} {xc2000000 x43340000 0}}} {tx x41b00000 x4308aaab x43acbbbc} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush19 512 catmullrom {cc {f 2080} {px x41b00000 {x437e0000 x44028000 1} {x438d8000 x44068000 1} {x43998000 x44098000 x3e44310c} {x43a48000 x440bc000 x3e7b3ed0} {x43ab8000 x440d4000 x3e882209} {x43b00000 x440e0000 x3e8a2289} {x43b10000 x440e0000 x3e8a2289} {x43b10000 x440cc000 x3e892249} {x43ad8000 x440b0000 x3e892249} {x43a80000 x44088000 x3e98260a} {x43a18000 x4405c000 x3ea2288a} {x43920000 x43ff0000 x3eaeabab} {x43898000 x43f88000 x3eb3aceb} {x43810000 x43f20000 x3eb3aceb} {x43710000 x43eb0000 x3eb3aceb} {x43620000 x43e38000 x3eb12c4b} {x43500000 x43dc0000 x3eb12c4b} {x43120000 x43bd0000 x3e6b3acf} {x43040000 x43b60000 x3e282a0b} {x42ce0000 x43a78000 0}}} {tx x41b00000 x43889333 x43fa1333} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush18 512 catmullrom {cc {f 2080} {px x41b00000 {x43000000 x43e98000 1} {x42ee0000 x43e48000 x3e87a1e8} {x42d80000 x43df0000 x3e8aa2a9} {x42ac0000 x43d30000 x3e9e278a} {x42980000 x43cc8000 x3ea328ca} {x42780000 x43c58000 x3ea729ca} {x42480000 x43be0000 x3eaa2a8b} {x42140000 x43b78000 x3eab2acb} {x41000000 x43a60000 x3ead2b4b} {x40800000 x43a18000 x3ead2b4b} {1 x439c0000 x3e902409} {x40800000 x439c0000 x3e352d4b}}} {tx x41b00000 x4263aaab x43c09555} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush17 512 catmullrom {cc {f 2080} {px x41b00000 {x42900000 x43fa0000 1} {x42920000 x43fa0000 x3e49324d} {x428c0000 x43f88000 x3e9c270a} {x42840000 x43f60000 x3ea5a96a} {x42740000 x43f30000 x3eab2acb} {x42580000 x43ef8000 x3eadab6b} {x423c0000 x43eb0000 x3eaeabab} {x41600000 x43db8000 x3eaeabab} {xc2280000 x43c40000 x3e9f27ca} {xc25c0000 x43bf0000 x3e98260a} {xc2900000 x43b80000 0}}} {tx x41b00000 x41d1745d x43e38000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush16 512 catmullrom {cc {f 2080} {px x41b00000 {x42e00000 x43f80000 1} {x42d80000 x43f68000 x3e60380e} {x42d00000 x43f58000 x3e85a168} {x42c80000 x43f38000 x3e8da369} {x42bc0000 x43f20000 x3e91a469} {x42920000 x43eb0000 x3e952549} {x42820000 x43e80000 x3e95a569} {x41c80000 x43dd8000 x3ea1a86a} {x41200000 x43da8000 x3e9725c9} {x41200000 x43db8000 x3e6d3b4f} {x41200000 x43dd8000 0}}} {tx x41b00000 x428145d1 x43e9f45d} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush15 512 catmullrom {cc {f 2080} {px x41b00000 {x42b80000 x43c68000 1} {x42c40000 x43cb0000 x3e743d0f} {x42d00000 x43cf0000 x3e773dcf} {x42e40000 x43d58000 x3e902409} {x42ec0000 x43d88000 x3e91a469} {x42f00000 x43db8000 x3e9324c9} {x42f00000 x43dc0000 x3e9324c9} {x42e60000 x43dc0000 x3ea2a8aa} {x42e00000 x43db0000 x3ea328ca} {x42d80000 x43da0000 x3ea3a8ea} {x42c40000 x43d60000 x3ea6298a} {x42c00000 x43d58000 x3e6338ce} {x42c00000 x43d60000 x3e092249} {x42c20000 x43d78000 0}}} {tx x41b00000 x42d49249 x43d5b6db} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush14 512 catmullrom {cc {f 2080} {px x41b00000 {x42b20000 x43a58000 1} {x42a80000 x43a40000 x3e64390e} {x429c0000 x43a18000 x3e8320c8} {x42840000 x439d0000 x3e9ca72a} {x42740000 x439b0000 x3ea4290a} {x42600000 x43990000 x3ea92a4b} {x42540000 x43970000 x3eaa2a8b} {x42440000 x43958000 x3eaaaaab} {x422c0000 x43930000 x3eab2acb} {x42180000 x43930000 x3e60380e} {x42180000 x43950000 x3de0380e}}} {tx x41b00000 x426e2e8c x439a8000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush13 512 catmullrom {cc {f 2080} {px x41b00000 {x42500000 x43a18000 x3e8e2389} {x42280000 x439c8000 1} {x42140000 x43998000 x3e9fa7ea} {x41f80000 x43950000 x3eaf2bcb} {x41f00000 x43930000 x3eb1ac6b} {x41f00000 x43920000 x3eb2acab} {x42280000 x43930000 x3e802008} {x42440000 x43950000 x3e5c370e} {x42600000 x43970000 x3e152549} {x42800000 x439a0000 0}}} {tx x41b00000 x422d3333 x43977333} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush12 512 catmullrom {cc {f 2080} {px x41b00000 {x42dc0000 x43cf0000 x3d18260a} {x42dc0000 x43ce0000 x3dba2e8c} {x42ca0000 x43c68000 x3e793e50} {x42c00000 x43c30000 x3e8320c8} {x42b60000 x43c00000 x3e842108} {x428e0000 x43b40000 x3e842108} {x42800000 x43b08000 x3e822088} {x42240000 x43a40000 x3e59364e} {x42080000 x43a00000 x3e46318c} {x41d00000 x439d0000 x3e362d8b} {x41880000 x43988000 x3d64390e}}} {tx x41b00000 x428a5d17 x43b4c5d1} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush11 512 catmullrom {cc {f 2080} {px x41b00000 {x422c0000 x43b80000 0} {x42600000 x43bc8000 1}}} {tx x41b00000 x42460000 x43ba4000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush10 512 catmullrom {cc {f 2080} {px x41b00000 {x431a0000 x43ea0000 1} {x43120000 x43e70000 x3e8320c8} {x43030000 x43e00000 x3e882209} {x42f40000 x43db0000 x3e8aa2a9} {x42e40000 x43d60000 x3e8b22c9} {x42880000 x43be0000 x3e98a62a} {x41500000 x43a58000 x3ea5294a} {1 x43a00000 x3ea5a96a} {xc1300000 x439b8000 x3ea6298a} {xc22c0000 x438f8000 x3ea6a9aa} {xc2680000 x438c8000 x3e98a62a} {xc2600000 x438e0000 x3e713c4f} {xc1f80000 x43988000 0}}} {tx x41b00000 x42293b14 x43b66c4f} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush9 512 catmullrom {cc {f 2080} {px x41b00000 {x42dc0000 x43e40000 1} {x42e00000 x43e50000 x3dd4350d} {x42e00000 x43e70000 x3de2388e} {x42d80000 x43e50000 x3e733ccf} {x42c80000 x43e08000 x3e8320c8} {x42be0000 x43dd0000 x3e85a168} {x42920000 x43d00000 x3e8c2309} {x42820000 x43cb8000 x3e8da369} {x42600000 x43c70000 x3e8ea3a9} {x41e80000 x43ba0000 x3e9324c9} {x40000000 x43af0000 x3e9324c9} {1 x43ae0000 x3e8da369} {0 x43ae0000 0}}} {tx x41b00000 x4284c4ec x43ce4ec5} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush8 512 catmullrom {cc {f 2080} {px x41b00000 {x41c80000 x43af0000 1} {x41980000 x43ad0000 x3d2c2b0b} {x41800000 x43ab8000 x3d18260a} {x41400000 x43aa8000 x3d18260a}}} {tx x41b00000 x41900000 x43ac8000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush7 512 catmullrom {cc {f 2080} {px x41b00000 {x42980000 x43c28000 1} {x42900000 x43c08000 x3d962589} {x42880000 x43bf0000 x3d58360e} {x42840000 x43bd0000 x3d1c270a}}} {tx x41b00000 x428d0000 x43bfc000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush6 512 catmullrom {cc {f 2080} {px x41b00000 {x429e0000 x43ce8000 1} {x42920000 x43cc0000 x3de4390e} {x42780000 x43c70000 x3dee3b8f} {x42580000 x43c28000 x3dec3b0f} {x42480000 x43be0000 0}}} {tx x41b00000 x427e6666 x43c6cccd} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush5 512 catmullrom {cc {f 2080} {px x41b00000 {x42ac0000 x43dd8000 1} {x42a40000 x43db0000 x3e2328ca} {x42880000 x43d40000 x3dc0300c}}} {tx x41b00000 x429d5555 x43d98000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush4 512 catmullrom {cc {f 2080} {px x41b00000 {x42d60000 x43ec0000 1} {x42da0000 x43ed0000 x3e312c4b} {x42dc0000 x43ee0000 x3e312c4b} {x42d80000 x43ed8000 x3e6d3b4f} {x42d40000 x43ec8000 x3e723c8f} {x42c40000 x43e98000 x3e80a028} {x429c0000 x43de8000 x3e862188} {x428e0000 x43db8000 x3e8721c8} {x42200000 x43cc8000 x3e8721c8} {x41600000 x43c00000 x3e723c8f} {x41300000 x43bd8000 x3e6d3b4f} {x41000000 x43bc8000 0}}} {tx x41b00000 x428f5555 x43db9555} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush3 512 catmullrom {cc {f 2080} {px x41b00000 {x42da0000 x43f08000 1} {x42da0000 x43f00000 x3e6b3acf} {x42da0000 x43ef8000 x3e7e3f90} {x42be0000 x43e78000 x3e8ea3a9} {x42740000 x43d78000 x3ea0280a} {x42480000 x43d28000 x3ea3a8ea} {x40c00000 x43c00000 x3ead2b4b} {xc1600000 x43b68000 x3eaaaaab} {xc0c00000 x43b90000 0}}} {tx x41b00000 x4266aaab x43d738e4} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush2 512 catmullrom {cc {f 2080} {px x41b00000 {x42a80000 x43e70000 1} {x429e0000 x43e48000 x3e1b26ca} {x42900000 x43e10000 x3e46318c} {x42820000 x43dd8000 x3e65394e} {x42600000 x43da0000 x3e812048} {x423c0000 x43d58000 x3e8ea3a9} {x41600000 x43c70000 x3ea3a8ea} {x40a00000 x43c08000 x3e7f3fd0}}} {tx x41b00000 x42530000 x43d82000} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {px x41b00000 {x42c20000 x43f00000 1} {x42c80000 x43f00000 x3e112449} {x42c00000 x43ee0000 x3e7b3ed0} {x42b80000 x43ec8000 x3e8aa2a9} {x42b00000 x43ea0000 x3e96a5a9} {x42700000 x43db0000 x3ebe2f8c} {x42000000 x43cc8000 x3ed1344d} {x41d00000 x43ca0000 x3ed1b46d} {x41b00000 x43c70000 x3ea8aa2b} {x42000000 x43cc0000 0}}} {tx x41b00000 x42810000 x43ddb333} {a ro 0 go 0 bo 0 ao 0 opc x3c23d70a bs x41700000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 ltn x41b00000 ltm x41b00000 tt x41880000}}}}}} toolbox {brush { { selectAll opc 0.01 bs 15 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush opc 0.01 bs 15 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 79 ltm 79 ltt 0 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_opacity 0.01 toolbar_brush_size 15 toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {640 360} colorOverlay {0 0 0 0} opacity 0.009999999776 lifetime_type "all frames" lifetime_start 79 lifetime_end 79 brush_size 15 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint2 xpos 162 ypos 3063 } Dot { name Dot32 xpos 196 ypos 3145 } push $N803f3800 RotoPaint { curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44200000 x43b40000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush284 512 catmullrom {cc {f 2080} {px 1 {x41600000 x42d00000 1} {xc0200000 x42ca0000 x3e392e4c} {xc1200000 x42c70000 x3e3d2f4c} {xc1c00000 x42c30000 x3e46318c} {xc1f40000 x42c20000 x3e4c330d} {xc2440000 x42c20000 x3e5a368e} {xc26c0000 x42c70000 x3e713c4f} {xc2780000 x42d20000 x3e703c0f} {xc26c0000 x42d70000 x3e723c8f} {xc24c0000 x42c70000 x3e82a0a8} {xc2460000 x42b50000 x3e892249} {xc2460000 x42a40000 x3e86a1a8} {xc2460000 x429f0000 0}}} {tx 1 xc2142762 x42c1c4ec} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush283 512 catmullrom {cc {f 2080} {px 1 {x43560000 x430d0000 1} {x43540000 x430c8000 x3e65394e} {x434f0000 x430a8000 x3e703c0f} {x43488000 x43090000 x3e862188} {x43340000 x43040000 x3e51344d} {x43240000 x43018000 0}}} {tx 1 x43444000 x43086aab} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush282 512 catmullrom {cc {f 2080} {px 1 {x43490000 x42d60000 1} {x43450000 x42db0000 x3eb02c0b} {x43410000 x42e00000 0}}} {tx 1 x43450000 x42db0000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush281 512 catmullrom {cc {f 2080} {px 1 {x43ac4000 x422a0000 1} {x43ab8000 x42280000 x3e8a2289} {x43aac000 x42280000 x3e282a0b} {x43a9c000 x42280000 0}}} {tx 1 x43ab1000 x42288000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush280 512 catmullrom {cc {f 2080} {px 1 {x43dcc000 x429a0000 1} {x43da4000 x42950000 x3ef7bdef} {x43d7c000 x428f0000 x3ef63d8f} {x43d20000 x42840000 x3ee7b9ee} {x43c30000 x42560000 x3ed2348d} {x43ba0000 x42420000 x3e3d2f4c} {x43b88000 x42400000 0}}} {tx 1 x43cc5249 x427adb6e} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush279 512 catmullrom {cc {f 2080} {px 1 {x44032000 x43be0000 1} {x44024000 x43be8000 x3e842108} {x4400e000 x43be8000 x3e842108} {x44002000 x43be8000 x3e892249} {x43fc8000 x43bdc000 x3e91a469} {x43ee4000 x43b98000 x3e9aa6aa} {x43ddc000 x43b48000 x3e97a5e9} {x43ce4000 x43afc000 0}}} {tx 1 x43f47000 x43baa000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush278 512 catmullrom {cc {f 2080} {px 1 {x43cb4000 x43f54000 1} {x43d24000 x43f54000 x3e99264a} {x43d8c000 x43f50000 x3e9ba6ea} {x43df4000 x43f50000 x3ea92a4b} {x43ed8000 x43f58000 x3e9b26ca} {x43f14000 x43f58000 1} {x44008000 x43f54000 x3e64390e} {x4406a000 x43f30000 x3e3e2f8c} {x440b8000 x43f08000 x3e102409} {x440d8000 x43ef8000 0}}} {tx 1 x43f20ccd x43f3f99a} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush277 512 catmullrom {cc {f 2080} {px 1 {x40b00000 x43f70000 1} {x41700000 x43f3c000 x3e8da369} {x41a40000 x43f24000 x3e9a268a} {x42160000 x43eec000 x3eacab2b} {x427c0000 x43ed0000 x3ea9aa6b} {x42bf0000 x43ef0000 x3e64390e} {x42ca0000 x43efc000 0}}} {tx 1 x42412492 x43f11249} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush276 512 catmullrom {cc {f 2080} {px 1 {x40b00000 x43fe0000 1} {x40000000 x43fd4000 x3e84a128} {0 x43fcc000 x3e80a028} {xc1080000 x43fb4000 x3e5a368e} {xc1880000 x43f9c000 x3dda368e} {xc19c0000 x43f9c000 x3e2c2b0b} {xc19c0000 x43fa4000 0}}} {tx 1 xc1024925 x43fb9249} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush275 512 catmullrom {cc {f 2080} {px 1 {x43170000 x43f28000 1} {x43078000 x43f30000 x3f04a128} {x43000000 x43f38000 x3ee7b9ee} {x42d20000 x43f48000 x3ea4290a} {x42980000 x43f5c000 x3e773dcf} {x42680000 x43f78000 0}}} {tx 1 x42d9d555 x43f47555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush274 512 catmullrom {cc {f 2080} {px 1 {x432e0000 x43ce0000 1} {x432c0000 x43cf4000 x3dc6318c} {x43298000 x43d08000 x3e22288a} {x43250000 x43d2c000 x3e7a3e90} {x43158000 x43d50000 x3eb0ac2b} {x43030000 x43d58000 x3eb9ae6c} {x42ee0000 x43d6c000 0}}} {tx 1 x431a4925 x43d28925} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush273 512 catmullrom {cc {f 2080} {px 1 {x437d8000 x43968000 1} {x43678000 x43950000 x3e59364e} {x43538000 x4393c000 x3e59364e} {x43310000 x43924000 x3e58360e} {x432a0000 x43924000 x3e392e4c} {x431d0000 x43958000 x3e2d2b4b} {x431c8000 x43988000 0}}} {tx 1 x4341db6e x4394d249} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush272 512 catmullrom {cc {f 2080} {px 1 {x439f0000 x43900000 1} {x43a10000 x43908000 x3ea6a9aa} {x43a34000 x43910000 x3ea6a9aa} {x43aec000 x43950000 x3e8d2349} {x43b7c000 x43994000 x3e892249} {x43bd8000 x439d0000 0}}} {tx 1 x43abe000 x4394caab} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush271 512 catmullrom {cc {f 2080} {px 1 {x438d0000 x438dc000 1} {x43900000 x438c8000 x3e352d4b} {x43910000 x438c0000 x3cc0300c}}} {tx 1 x438f5555 x438cc000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush270 512 catmullrom {cc {f 2080} {px 1 {x42a90000 x43a20000 1} {x42b50000 x43a1c000 x3d8e2389} {x42c00000 x43a14000 x3d942509} {x42cc0000 x43a0c000 x3d942509} {x42e60000 x439fc000 x3da2288a} {x430c8000 x439e4000 0}}} {tx 1 x42d18000 x43a0a000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush269 512 catmullrom {cc {f 2080} {px 1 {x422c0000 x43934000 1} {x42120000 x43960000 x3e8ca329} {x41f40000 x4399c000 x3e80a028} {x41b40000 x43a14000 x3dd4350d} {x41a00000 x43a28000 x3dd6358d} {x41480000 x43a5c000 x3dda368e} {x40a00000 x43a48000 x3e6e3b8f} {xc0400000 x439e8000 x3e882209} {xc1200000 x4399c000 x3e8b22c9} {xc1100000 x43984000 x3d882209}}} {tx 1 x416ccccd x439cf333} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush268 512 catmullrom {cc {f 2080} {px 1 {x42c50000 x43500000 1} {x42b90000 x434f0000 x3dcc330d} {x42af0000 x434e0000 x3e22288a} {x42a40000 x434c8000 x3e372dcb} {x42840000 x43480000 x3e8fa3e9} {x42360000 x43410000 x3eae2b8b} {x41d40000 x433f0000 x3e95a569} {x41980000 x43438000 x3dda368e} {x418c0000 x43470000 0}}} {tx 1 x426dc71c x434871c7} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush267 512 catmullrom {cc {f 2080} {px 1 {x43210000 x43528000 1} {x431e0000 x43510000 x3ea5294a} {x431b8000 x43500000 x3ea5294a} {x43188000 x434f0000 x3ea1a86a} {x43130000 x434e0000 x3e93a4e9} {x43068000 x434f0000 x3dba2e8c} {x42fb0000 x43508000 0}}} {tx 1 x4313b6db x43500000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush266 512 catmullrom {cc {f 2080} {px 1 {x4397c000 x43630000 1} {x4394c000 x43630000 x3e54350d} {x4391c000 x43630000 x3e7d3f50} {x43888000 x43600000 x3e783e10} {x43758000 x435b8000 x3e7d3f50} {x43518000 x43560000 x3e5d374e} {x43440000 x43548000 0}}} {tx 1 x4381c000 x435d9249} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush265 512 catmullrom {cc {f 2080} {px 1 {x43d70000 x436c0000 1} {x43d24000 x43698000 x3ec2308c} {x43cf8000 x43680000 x3ebdaf6c} {x43cc8000 x43668000 x3ebaaeac} {x43c58000 x43640000 x3ea8aa2b} {x43b6c000 x43608000 x3e6d3b4f} {x43b30000 x43608000 0}}} {tx 1 x43c78000 x4365db6e} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush264 512 catmullrom {cc {f 2080} {px 1 {x43e2c000 x43390000 1} {x43e38000 x433f8000 x3e2b2acb} {x43e3c000 x43420000 x3e2b2acb} {x43e40000 x43448000 x3e3c2f0c} {x43e3c000 x434d0000 x3e812048} {x43e08000 x43568000 x3e6b3acf} {x43dfc000 x43598000 0}}} {tx 1 x43e29249 x43489249} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush263 512 catmullrom {cc {f 2080} {px 1 {x42890000 x42fa0000 1} {x428d0000 x42fb0000 x3e713c4f} {x42920000 x42fd0000 x3e90a429} {x42a30000 x43000000 x3ea4290a} {x42b40000 x43018000 x3eadab6b} {x42cc0000 x43028000 x3eb12c4b} {x42ef0000 x43030000 x3eb8ae2c} {x43008000 x43000000 x3eb4ad2b} {x43050000 x42f40000 x3ebaaeac} {x43050000 x42e50000 x3ebcaf2c} {x43038000 x42d60000 x3eb8ae2c} {x42fc0000 x42ca0000 x3eb0ac2b} {x42f30000 x42c00000 x3e8fa3e9} {x42f20000 x42be0000 1} {x42f40000 x42b50000 x3e8da369} {x43018000 x42a90000 x3e9b26ca} {x43110000 x429b0000 x3e99264a} {x43230000 x42920000 x3e9a268a} {x433e8000 x42880000 x3e9aa6aa} {x43570000 x42810000 x3e99264a} {x43740000 x42660000 x3ea2a8aa} {x43838000 x424c0000 x3ea5294a} {x438c4000 x423a0000 x3ea0280a} {x43978000 x42320000 x3e9725c9} {x439c8000 x42300000 0}}} {tx 1 x431ab852 x42bce148} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x432d8000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush262 512 catmullrom {cc {f 2080} {px 1 {x42720000 x433c0000 1} {x42700000 x433d8000 x3e94a529} {x426e0000 x433f0000 x3e97a5e9} {x426c0000 x43420000 x3ea1a86a} {x426a0000 x43450000 x3ec7b1ec} {x42620000 x43458000 x3edfb7ee} {x42400000 x43450000 x3ee83a0f} {x421c0000 x43440000 x3eeebbaf} {x42020000 x43440000 x3ed1344d}}} {tx 1 x425271c7 x43420000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush261 512 catmullrom {cc {f 2080} {px 1 {x42890000 x431e0000 1} {x42850000 x431e0000 1} {x42830000 x431e0000 x3ead2b4b} {x42800000 x431e0000 x3eb92e4c} {x427a0000 x431e0000 x3eed3b4f} {x42740000 x43208000 x3f03a0e8} {x42760000 x43268000 x3f04e138} {x42870000 x43308000 x3ed735cd} {x428a0000 x43320000 0}}} {tx 1 x428238e4 x43238000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush260 512 catmullrom {cc {f 2080} {px 1 {x43e24000 x43160000 1} {x43e14000 x43160000 x3ea6298a} {x43dec000 x43148000 x3ea729ca} {x43ddc000 x43118000 x3ea2a8aa} {x43dd4000 x430d8000 x3ec1304c} {x43dbc000 x430a8000 x3e292a4b}}} {tx 1 x43ded555 x4311aaab} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush259 512 catmullrom {cc {f 2080} {px 1 {x43e14000 x43300000 1} {x43e0c000 x432e8000 x3eb0ac2b} {x43e0c000 x432c0000 x3ed6b5ad} {x43e18000 x432b0000 x3ed9364e} {x43e24000 x43290000 x3edb36ce} {x43e24000 x43260000 x3edcb72e} {x43e28000 x43238000 x3eddb76e} {x43e44000 x43228000 x3ec6318c} {x43e64000 x43218000 x3eba2e8c} {x43e68000 x431f0000 x3ea729ca} {x43e58000 x431d8000 0}}} {tx 1 x43e31174 x43269746} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush258 512 catmullrom {cc {f 2080} {px 1 {x43e78000 x43408000 1} {x43e70000 x43400000 x3e98260a} {x43e60000 x433f8000 x3e98260a} {x43e54000 x433f0000 x3e9b26ca} {x43e2c000 x433e0000 x3ea2288a} {x43de0000 x433b8000 x3e99264a} {x43db4000 x43398000 0}}} {tx 1 x43e31b6e x433e0000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush257 512 catmullrom {cc {f 2080} {px 1 {x43f08000 x43410000 1} {x43ef4000 x43408000 x3eb92e4c} {x43ee8000 x43400000 x3ec9324d} {x43ed0000 x433f8000 x3ef83e10} {x43ec0000 x433f0000 x3ed1344d}}} {tx 1 x43ee4000 x43400000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush256 512 catmullrom {cc {f 2080} {px 1 {x43fc4000 x43408000 1} {x43fc0000 x43418000 x3ec8b22d} {x43f90000 x43420000 x3f00e038} {x43f7c000 x43418000 x3f022088} {x43f58000 x43408000 x3f04e138} {x43f30000 x433f8000 x3ef9be70} {x43f24000 x43408000 x3e5735cd}}} {tx 1 x43f76492 x4340db6e} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush255 512 catmullrom {cc {f 2080} {px 1 {x43f7c000 x432b0000 1} {x43f90000 x432c8000 x3e1f27ca} {x43f98000 x432d8000 x3e1f27ca} {x43fb8000 x432f8000 x3de4390e} {x43fd0000 x43320000 0}}} {tx 1 x43fa2666 x432e199a} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush254 512 catmullrom {cc {f 2080} {px 1 {x43f04000 x43110000 1} {x43ef4000 x43118000 x3eda368e} {x43ee4000 x43120000 x3ee338ce} {x43edc000 x43128000 x3ef03c0f} {x43ee0000 x43178000 x3edbb6ee} {x43f08000 x431b8000 0}}} {tx 1 x43ef0000 x43145555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush253 512 catmullrom {cc {f 2080} {px 1 {x43fcc000 x42f80000 x3e882209} {x43fc4000 x42f80000 x3ef33ccf} {x43fb0000 x42fa0000 x3f1ce73a} {x43fa0000 x42fb0000 x3f20e83a} {x43f84000 x42fe0000 x3f19264a} {x43f84000 x43010000 x3eac2b0b} {x43f90000 x43030000 x3dec3b0f} {x43f70000 x43048000 x3e6739ce} {x43f3c000 x43060000 x3ea92a4b} {x43f1c000 x43090000 x3ea92a4b} {x43f18000 x430b8000 x3ea3a8ea} {x43f18000 x430c8000 0}}} {tx 1 x43f74000 x4302c000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush252 512 catmullrom {cc {f 2080} {px 1 {x43ac0000 x42ad0000 1} {x43ac4000 x42aa0000 x3ea1a86a} {x43ac8000 x42a70000 x3eaeabab} {x43ad4000 x42a10000 x3eb42d0b} {x43acc000 x42940000 x3eda368e} {x43ac0000 x42930000 x3ed0340d} {x43ac0000 x42910000 x3e59364e}}} {tx 1 x43ac6492 x429eb6db} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush251 512 catmullrom {cc {f 2080} {px 1 {x43aa8000 x42d10000 1} {x43aac000 x42cd0000 x3e9da76a} {x43aac000 x42cb0000 x3ea3a8ea} {x43aa0000 x42c80000 x3eb7adeb} {x43a80000 x42bf0000 x3ed5354d} {x43a54000 x42b60000 x3f006018} {x43a4c000 x42b30000 x3ef03c0f} {x43a68000 x42af0000 x3d042108}}} {tx 1 x43a85000 x42c10000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush250 512 catmullrom {cc {f 2080} {px 1 {x43a1c000 x42cb0000 1} {x43a30000 x42cb0000 x3e042108} {x43a38000 x42cb0000 x3e042108} {x43a48000 x42cb0000 x3e042108} {x43a64000 x42cc0000 x3da4290a} {x43a74000 x42cd0000 0}}} {tx 1 x43a46000 x42cb8000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush249 512 catmullrom {cc {f 2080} {px 1 {x438f0000 x42f70000 1} {x438e4000 x42f50000 x3ea6298a} {x43918000 x42f40000 x3e743d0f} {x43948000 x42f20000 x3d042108}}} {tx 1 x4390d000 x42f48000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush248 512 catmullrom {cc {f 2080} {px 1 {x43874000 x430d8000 1} {x43870000 x430c8000 x3e6e3b8f} {x43864000 x430c0000 x3eb42d0b} {x4383c000 x430a0000 x3ee739ce} {x4381c000 x43090000 x3ef2bcaf} {x43808000 x43070000 x3ec7b1ec} {x43808000 x43048000 x3e52348d}}} {tx 1 x4383db6e x4309c925} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush247 512 catmullrom {cc {f 2080} {px 1 {x43878000 x431b0000 1} {x4387c000 x431a0000 x3df03c0f} {x4387c000 x43190000 x3e8ca329} {x43870000 x43188000 x3eb82e0c} {x43868000 x43188000 x3eb3aceb}}} {tx 1 x43874ccd x43196666} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush246 512 catmullrom {cc {f 2080} {px 1 {x43810000 x432b8000 1} {x437f0000 x432b8000 x3e842108} {x437d8000 x432b8000 x3e9a268a} {x437c0000 x432c8000 x3eb9ae6c} {x437c0000 x432f0000 x3ebc2f0c} {x437c0000 x43320000 x3e9ba6ea} {x437b0000 x43340000 x3e8320c8} {x43780000 x43350000 x3e8d2349} {x43768000 x43360000 x3eacab2b} {x43770000 x43378000 x3eb12c4b} {x437a0000 x43388000 x3eb0ac2b} {x437b8000 x43398000 x3eb02c0b} {x437d8000 x433a8000 x3ea6298a} {x437f0000 x433b0000 x3e9f27ca} {x437f8000 x43398000 x3e94a529} {x43804000 x43368000 x3e8da369} {x43824000 x43340000 x3e19264a} {x43838000 x43328000 x3df03c0f} {x43834000 x432e8000 x3ea92a4b} {x43824000 x432b0000 x3edab6ae} {x43820000 x43280000 x3ee0b82e} {x43838000 x43258000 x3e7a3e90} {x43848000 x43240000 0}}} {tx 1 x437f4859 x43315e9c} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush245 512 catmullrom {cc {f 2080} {px 1 {x438dc000 x43238000 1} {x438cc000 x43238000 x3e0f23c9} {x438c0000 x43238000 x3e18260a} {x438b4000 x43240000 x3e362d8b} {x438a4000 x43240000 x3e50340d} {x43894000 x43258000 x3e95a569} {x4388c000 x43278000 x3ec9324d} {x43884000 x432a8000 x3edbb6ee} {x43884000 x432c8000 x3eca328d}}} {tx 1 x438a8000 x43260e39} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush244 512 catmullrom {cc {f 2080} {px 1 {x439d0000 x43208000 1} {x439c8000 x43208000 x3e713c4f} {x439bc000 x43200000 x3e86a1a8} {x439b4000 x43200000 x3ea0280a} {x439a0000 x431f0000 x3ebcaf2c} {x43978000 x431e0000 x3ed1b46d} {x43968000 x431e0000 x3e952549}}} {tx 1 x439a5b6e x431f6db7} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush243 512 catmullrom {cc {f 2080} {px 1 {x43adc000 x43140000 1} {x43ad4000 x43148000 x3e95a569} {x43acc000 x43150000 x3e98260a} {x43ab8000 x43168000 x3ecd334d} {x43ab4000 x43198000 x3ec0300c} {x43ab4000 x431c8000 x3e8ca329} {x43a90000 x431d0000 x3eb5ad6b} {x43a44000 x431d0000 x3f0a6299} {x43a1c000 x431d0000 x3f1725c9} {x439fc000 x431f8000 x3e9e278a} {x439f4000 x431f8000 0}}} {tx 1 x43a7fa2f x431a2e8c} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush242 512 catmullrom {cc {f 2080} {px 1 {x43afc000 x42fd0000 1} {x43af0000 x42fd0000 x3eb6adab} {x43ae8000 x42fd0000 x3ebc2f0c} {x43ae0000 x42fd0000 x3edab6ae} {x43ad4000 x42ff0000 x3eea3a8f} {x43ad0000 x43020000 x3eea3a8f} {x43ac8000 x43058000 x3ec6b1ac} {x43ac0000 x43068000 x3ec2b0ac}}} {tx 1 x43adc000 x4300f000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush241 512 catmullrom {cc {f 2080} {px 1 {x43c00000 x42c20000 1} {x43bf4000 x42c30000 x3ea4290a} {x43bec000 x42c30000 x3eb4ad2b} {x43bec000 x42c60000 x3ebbaeec} {x43c00000 x42cc0000 0}}} {tx 1 x43bf599a x42c53333} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush240 512 catmullrom {cc {f 2080} {px 1 {x43c9c000 x42b30000 1} {x43c80000 x42b20000 1} {x43c70000 x42b20000 x3ed2348d} {x43c68000 x42b20000 x3ee3b8ee} {x43c60000 x42b20000 x3eef3bcf} {x43c58000 x42b30000 x3ef3bcef} {x43c48000 x42ba0000 x3eba2e8c} {x43c38000 x42be0000 x3ea5294a} {x43c2c000 x42c00000 0}}} {tx 1 x43c5f1c7 x42b60000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush239 512 catmullrom {cc {f 2080} {px 1 {x43d60000 x42b60000 1} {x43d50000 x42b40000 x3eedbb6f} {x43d40000 x42b30000 x3eeebbaf} {x43d38000 x42b20000 x3ef8be30} {x43d28000 x42b20000 x3f022088} {x43d18000 x42b30000 x3eb2acab} {x43cf4000 x42b40000 x3c50340d}}} {tx 1 x43d31b6e x42b36db7} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush238 512 catmullrom {cc {f 2080} {px 1 {x43f24000 x42b50000 1} {x43f14000 x42b50000 x3e86a1a8} {x43f04000 x42b50000 x3e86a1a8} {x43ec4000 x42b40000 x3ed1b46d} {x43e60000 x42b30000 x3ee83a0f} {x43e28000 x42b60000 x3e59364e} {x43e20000 x42b70000 0}}} {tx 1 x43eaa492 x42b50000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush237 512 catmullrom {cc {f 2080} {px 1 {x43efc000 x42980000 1} {x43f0c000 x429a0000 x3eb82e0c} {x43f18000 x429b0000 x3ec2b0ac} {x43f40000 x429d0000 x3ef03c0f} {x43f74000 x429f0000 x3f14a529} {x43f94000 x42a60000 x3ef7bdef} {x43f9c000 x42a90000 0}}} {tx 1 x43f49b6e x429edb6e} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush236 512 catmullrom {cc {f 2080} {px 1 {x43ee4000 x42740000 1} {x43edc000 x42740000 x3eb4ad2b} {x43ed4000 x42760000 x3eb62d8b} {x43ec8000 x427c0000 x3ec0b02c} {x43ecc000 x42850000 x3eae2b8b} {x43edc000 x428b0000 x3df23c8f}}} {tx 1 x43ed6000 x427f0000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush235 512 catmullrom {cc {f 2080} {px 1 {x43f98000 x421c0000 1} {x43f94000 x42240000 x3e8e2389} {x43f94000 x42280000 x3e89a269} {x43fa4000 x42300000 x3e4c330d} {x43fbc000 x423a0000 x3e713c4f} {x43f90000 x423c0000 x3ed2b4ad} {x43f40000 x423a0000 x3ee8ba2f} {x43f24000 x423c0000 x3ec9324d} {x43f24000 x42460000 0}}} {tx 1 x43f78000 x4232e38e} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush234 512 catmullrom {cc {f 2080} {px 1 {x43f28000 x41900000 1} {x43f28000 x41880000 x3ea3a8ea} {x43f24000 x41800000 x3ed3b4ed} {x43f30000 x41800000 x3eb9ae6c} {x43f40000 x41880000 x3e842108} {x43f48000 x41900000 0}}} {tx 1 x43f32000 x41880000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush233 512 catmullrom {cc {f 2080} {px 1 {x43e5c000 x41400000 x3ea2a8aa} {x43e68000 x41400000 x3eb42d0b} {x43e70000 x41480000 x3eb42d0b} {x43e80000 x41500000 x3eb82e0c} {x43ec4000 x41700000 x3ea5294a} {x43ee4000 x41780000 x3e812048} {x43ef0000 x41800000 0}}} {tx 1 x43e9d249 x415b6db7} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush232 512 catmullrom {cc {f 2080} {px 1 {x43d64000 x41ac0000 1} {x43d64000 x41a40000 x3e0a2289} {x43d60000 x41940000 x3e96a5a9} {x43d5c000 x41800000 x3ec0300c} {x43d5c000 x41600000 x3ed6b5ad} {x43d84000 x41580000 x3ec1304c} {x43dbc000 x41480000 x3e892249} {x43dc8000 x41400000 0}}} {tx 1 x43d7d000 x41808000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush231 512 catmullrom {cc {f 2080} {px 1 {x43e98000 x42020000 1} {x43ea0000 x42000000 x3dda368e} {x43ea8000 x41fc0000 x3e122489} {x43ea8000 x41ec0000 x3eb0ac2b} {x43e9c000 x41e00000 x3eccb32d} {x43e74000 x41d00000 x3eceb3ad} {x43e40000 x41c80000 x3ec1304c} {x43e0c000 x41c40000 x3e8ea3a9} {x43dcc000 x41cc0000 x3e51344d} {x43da8000 x41d80000 x3e2328ca} {x43d7c000 x41d80000 x3e5a368e} {x43d68000 x41c40000 x3e59364e}}} {tx 1 x43e2faab x41de0000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush230 512 catmullrom {cc {f 2080} {px 1 {x43df4000 x424a0000 x3d64390e} {x43dfc000 x424a0000 x3d64390e}}} {tx 1 x43df8000 x424a0000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush229 512 catmullrom {cc {f 2080} {px 1 {x43da8000 x426a0000 1} {x43d9c000 x42660000 x3ec2b0ac} {x43d94000 x42640000 x3ec8b22d} {x43d90000 x425e0000 x3ee5394e} {x43da8000 x425c0000 x3eecbb2f} {x43de4000 x425c0000 x3ebcaf2c} {x43df8000 x425a0000 x3e96a5a9} {x43df8000 x42540000 x3e0c2309}}} {tx 1 x43dbc800 x425f0000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush228 512 catmullrom {cc {f 2080} {px 1 {x43ca8000 x42680000 1} {x43cb0000 x426c0000 x3e56358d} {x43cc8000 x42760000 x3e812048} {x43cf8000 x42810000 x3e82a0a8} {x43d20000 x42840000 x3e783e10} {x43d4c000 x42830000 x3ee93a4f} {x43d88000 x42820000 x3f05e178} {x43ddc000 x42820000 x3f0360d8} {x43e00000 x42840000 0}}} {tx 1 x43d3638e x427d8e39} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush227 512 catmullrom {cc {f 2080} {px 1 {x43cbc000 x42140000 1} {x43cac000 x42140000 x3eb42d0b} {x43c9c000 x42140000 x3eb8ae2c} {x43c74000 x42120000 x3ed2b4ad} {x43c5c000 x42180000 x3e0c2309}}} {tx 1 x43c90ccd x42146666} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush226 512 catmullrom {cc {f 2080} {px 1 {x43c9c000 x41b00000 1} {x43c94000 x41b40000 x3eb3aceb} {x43c90000 x41bc0000 x3ea3a8ea} {x43ca8000 x41d00000 x3e8da369} {x43cc4000 x41e00000 x3e6338ce} {x43cc4000 x41f00000 x3e743d0f} {x43cb0000 x41f80000 x3e7a3e90} {x43c98000 x42000000 x3e892249}}} {tx 1 x43ca7000 x41d70000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush225 512 catmullrom {cc {f 2080} {px 1 {x43c98000 x41300000 1} {x43ca4000 x41380000 x3eaf2bcb} {x43cb8000 x41500000 x3dd8360e}}} {tx 1 x43ca6aab x413d5555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush224 512 catmullrom {cc {f 2080} {px 1 {x43bc4000 x41380000 1} {x43bbc000 x41300000 x3e8aa2a9} {x43bbc000 x41200000 x3e842108} {x43be4000 x41200000 x3e5a368e} {x43bf8000 x41200000 0}}} {tx 1 x43bd199a x41280000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush223 512 catmullrom {cc {f 2080} {px 1 {x439ec000 x41680000 x3edfb7ee} {x439f8000 x41680000 x3ed4b52d} {x43a04000 x41680000 x3ed4b52d} {x43a60000 x41680000 x3e882209} {x43aa8000 x41600000 x3e20280a} {x43ab0000 x41580000 x3e25294a} {x43ad0000 x41480000 x3e2a2a8b} {x43ae8000 x41300000 x3e95a569} {x43af4000 x41280000 x3edfb7ee} {x43b14000 x41480000 x3ec4310c} {x43b3c000 x41700000 0}}} {tx 1 x43a99d17 x4155d174} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush222 512 catmullrom {cc {f 2080} {px 1 {x43768000 x41180000 1} {x43750000 x41100000 x3efb3ed0} {x43740000 x41000000 x3ef2bcaf} {x43730000 x40d00000 x3efabeb0} {x437a0000 x40d00000 x3eeb3acf} {x43850000 x40d00000 x3e8a2289} {x4386c000 x40d00000 0}}} {tx 1 x437c0000 x40f00000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush221 512 catmullrom {cc {f 2080} {px 1 {x439b4000 x41bc0000 1} {x439a8000 x41b80000 x3ebbaeec} {x4399c000 x41b40000 x3ebbaeec} {x43984000 x41a80000 x3eb82e0c} {x43964000 x41940000 x3ebeafac} {x43928000 x41840000 x3ebeafac} {x438f4000 x41840000 x3ec1304c} {x4389c000 x418c0000 x3ee6398e} {x43854000 x41900000 x3ee1384e} {x43824000 x41840000 0}}} {tx 1 x4391b333 x419acccd} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush220 512 catmullrom {cc {f 2080} {px 1 {x43a88000 x42280000 1} {x43a70000 x42220000 x3ed9b66e} {x43a34000 x42140000 x3ed5354d} {x43a10000 x420a0000 0}}} {tx 1 x43a4f000 x421a0000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush219 512 catmullrom {cc {f 2080} {px 1 {x43ab0000 x42800000 1} {x43aac000 x427c0000 x3eacab2b} {x43aa4000 x427a0000 x3eae2b8b} {x43a8c000 x426e0000 x3ee3b8ee} {x43a74000 x42600000 x3efdbf70} {x43a9c000 x425a0000 x3e693a4f}}} {tx 1 x43a9a000 x426faaab} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush218 512 catmullrom {cc {f 2080} {px 1 {x43930000 x42660000 1} {x43930000 x426c0000 x3e5d374e} {x43938000 x42740000 x3eac2b0b} {x43944000 x427c0000 x3ec7b1ec} {x43944000 x42800000 x3ef1bc6f} {x43948000 x42820000 x3ef3bcef} {x43958000 x42850000 x3ebe2f8c} {x43970000 x42860000 x3ea6a9aa} {x439a8000 x42870000 x3ea9aa6b} {x439c0000 x42870000 x3ec2b0ac} {x439c8000 x42860000 x3eefbbef} {x439c0000 x42870000 x3f0c6319} {x439bc000 x428b0000 x3f09a269} {x439bc000 x42920000 x3efbbef0} {x439e4000 x42990000 x3ea5294a} {x439f8000 x42990000 0}}} {tx 1 x43987400 x42858000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush217 512 catmullrom {cc {f 2080} {px 1 {x43848000 x42300000 1} {x4383c000 x42320000 x3eaeabab} {x43834000 x42320000 x3ebbaeec} {x4382c000 x42440000 x3f022088} {x43840000 x42480000 x3f042108} {x43884000 x424c0000 x3f09e279} {x438c0000 x424e0000 x3eee3b8f} {x438f8000 x42500000 x3e713c4f} {x43914000 x42520000 0}}} {tx 1 x4387eaab x42431c72} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush216 512 catmullrom {cc {f 2080} {px 1 {x41a40000 x431e0000 1} {x41940000 x431d8000 x3e5e378e} {x41840000 x431c8000 x3e5e378e} {x41700000 x431b8000 x3e282a0b}}} {tx 1 x418d0000 x431ce000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush215 512 catmullrom {cc {f 2080} {px 1 {x420c0000 x43180000 1} {x420c0000 x43190000 1} {x42100000 x431a0000 x3e60380e} {x420a0000 x431a8000 x3e80a028} {x41fc0000 x431a8000 x3e8d2349} {x41dc0000 x431b0000 x3e50340d} {x41d40000 x431b0000 0}}} {tx 1 x42012492 x431a0000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush214 512 catmullrom {cc {f 2080} {px 1 {x42830000 x43008000 1} {x42800000 x43010000 x3d44310c} {x42720000 x43038000 x3d60380e} {x425e0000 x43078000 x3e002008} {x424c0000 x430c0000 x3e9e278a} {x42440000 x430d0000 x3ed3b4ed} {x42380000 x430d8000 x3f13e4f9} {x42240000 x430e0000 x3f1725c9} {x42100000 x430f0000 x3efe3f90} {x42080000 x430f8000 0}}} {tx 1 x42490000 x43098ccd} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush213 512 catmullrom {cc {f 2080} {px 1 {x42ac0000 x42d30000 1} {x42a90000 x42d40000 x3ea328ca} {x42a60000 x42d60000 x3e8ca329} {x42a10000 x42dc0000 x3e60380e} {x42990000 x42e60000 x3e25294a} {x428e0000 x42f30000 x3eb2acab} {x42880000 x42fb0000 x3ec8320d} {x42840000 x42fe0000 x3e5e378e}}} {tx 1 x4299e000 x42e56000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush212 512 catmullrom {cc {f 2080} {px 1 {x42f60000 x42c00000 1} {x42f30000 x42c00000 x3ea1284a} {x42f00000 x42c00000 x3ea2a8aa} {x42e90000 x42c00000 x3ec2308c} {x42cf0000 x42bc0000 x3f086219} {x42c00000 x42bb0000 x3f0761d8} {x42bd0000 x42c30000 0}}} {tx 1 x42dd6db7 x42bf2492} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush211 512 catmullrom {cc {f 2080} {px 1 {x43180000 x42940000 x3eb3aceb} {x43190000 x42940000 x3ed0340d} {x431c0000 x42930000 x3ed1b46d} {x43210000 x42930000 x3ec8320d} {x43240000 x42950000 x3eaa2a8b} {x43220000 x42970000 x3ebc2f0c} {x43200000 x42980000 x3ebeafac} {x43190000 x42a00000 x3eacab2b} {x43148000 x42a80000 x3e84a128} {x43110000 x42af0000 x3e7f3fd0} {x430b0000 x42b30000 x3e89a269} {x43088000 x42b60000 0}}} {tx 1 x43188000 x429ed555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush210 512 catmullrom {cc {f 2080} {px 1 {x42dd0000 x42a30000 x3eb2acab} {x42e00000 x42a10000 x3edb36ce} {x42e60000 x42a30000 x3ec6318c} {x42f30000 x42a90000 x3e743d0f} {x42f70000 x42aa0000 x3e5334cd} {x42f90000 x42a60000 x3ee2b8ae} {x42fc0000 x42a30000 x3efc3f10} {x43000000 x429d0000 x3f0360d8} {x43020000 x42980000 x3f05a168} {x43050000 x42970000 x3ee6398e} {x430a8000 x42980000 x3e98a62a} {x430b0000 x42940000 x3e94a529} {x43068000 x428e0000 x3e51344d} {x42fe0000 x42840000 x3ec9324d} {x42fa0000 x427e0000 x3edf37ce} {x43000000 x427e0000 x3eb8ae2c} {x43048000 x427e0000 0}}} {tx 1 x42fcc3c4 x42972d2d} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush209 512 catmullrom {cc {f 2080} {px 1 {x42940000 x42bb0000 1} {x428f0000 x42b10000 x3eb82e0c} {x428e0000 x42ae0000 x3ec9b26d} {x428e0000 x42ab0000 x3ed334cd} {x428e0000 x42a40000 x3edb36ce} {x428e0000 x429d0000 x3ee3b8ee} {x42910000 x429a0000 x3eea3a8f} {x429b0000 x429a0000 x3e802008} {x42a20000 x429c0000 0}}} {tx 1 x4292c71c x42a60000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush208 512 catmullrom {cc {f 2080} {px 1 {x42620000 x42b80000 1} {x42660000 x42b80000 x3ea3a8ea} {x426c0000 x42b80000 x3ebcaf2c} {x427c0000 x42b80000 x3ef93e50} {x428a0000 x42ba0000 x3efebfb0} {x42960000 x42bf0000 x3ec4b12c} {x42990000 x42c20000 0}}} {tx 1 x42826db7 x42bab6db} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush207 512 catmullrom {cc {f 2080} {px 1 {x41a40000 x42a00000 1} {x419c0000 x42a60000 x3ebc2f0c} {x41a00000 x42aa0000 x3eb1ac6b} {x41c00000 x42b10000 x3e8e2389} {x41c80000 x42b40000 x3cc8320d} {x41c00000 x42b50000 x3dc8320d}}} {tx 1 x41b15555 x42ac5555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush206 512 catmullrom {cc {f 2080} {px 1 {x42080000 x42520000 1} {x42040000 x42560000 x3e9c270a} {x42020000 x425c0000 x3e9da76a} {x42020000 x426a0000 x3e922489} {x42020000 x42720000 x3e90a429} {x41d80000 x42760000 x3ee739ce} {x41c00000 x42760000 x3f04e138} {x41a00000 x427a0000 x3f19a66a} {x41a00000 x42820000 x3efa3e90} {x41a00000 x42850000 0}}} {tx 1 x41dc6666 x426ecccd} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush205 512 catmullrom {cc {f 2080} {px 1 {x41780000 x42060000 1} {x41840000 x42060000 x3ea2a8aa} {x418c0000 x42080000 x3eb6adab} {x41a80000 x420c0000 x3eb0ac2b} {x41bc0000 x420e0000 x3e9a268a} {x41d00000 x420a0000 x3d942509} {x41c00000 x42040000 x3eab2acb} {x41800000 x41fc0000 x3f13a4e9} {x41500000 x42040000 x3f0f63d9} {x419c0000 x421e0000 x3e2d2b4b}}} {tx 1 x419a0000 x42093333} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush204 512 catmullrom {cc {f 2080} {px 1 {x40e00000 x40e00000 1} {x40b00000 x40e00000 x3f002008} {x40800000 x40e00000 x3ef9be70} {0 x40d00000 x3efbbef0} {xc0200000 x40d00000 x3ef93e50} {xc0d00000 x41000000 x3ef4bd2f} {xc1580000 x41280000 x3ec6318c} {xc1700000 x41680000 x3e8320c8} {xc1300000 x41a40000 x3e3c2f0c} {xc1000000 x41b40000 x3e052148} {xc0a00000 x41c40000 0}}} {tx 1 xc082e8ba x4143a2e9} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush203 512 catmullrom {cc {f 2080} {px 1 {x42740000 x41b00000 1} {x42700000 x41ac0000 x3ea4290a} {x426c0000 x41a80000 x3ebd2f4c} {x42680000 x41a80000 x3f0d2349} {x42640000 x41a80000 x3f0ee3b9} {x425c0000 x41a80000 x3f106419} {x42460000 x41ac0000 x3f0fe3f9} {x42400000 x41b00000 x3f0aa2a9} {x422e0000 x41b80000 x3ed5354d} {x42220000 x41b40000 x3eb4ad2b} {x42100000 x41980000 x3ee93a4f} {x41f80000 x41780000 x3f162589} {x41c80000 x41400000 x3f1c270a} {x41b80000 x41380000 x3ee338ce}}} {tx 1 x4238b6db x419cdb6e} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush202 512 catmullrom {cc {f 2080} {px 1 {x43098000 x41e00000 1} {x43078000 x41dc0000 x3ec0b02c} {x43040000 x41d40000 x3ec9b26d} {x43020000 x41d40000 x3ed1344d} {x43000000 x41d40000 x3eb1ac6b} {x42f90000 x41e40000 x3e352d4b} {x42f00000 x41e80000 x3e95a569} {x42e00000 x41c00000 x3eef3bcf} {x42d70000 x41a40000 x3f00e038} {x42d50000 x419c0000 x3ef6bdaf} {x42da0000 x419c0000 x3eac2b0b} {x42e50000 x418c0000 x3c98260a} {x42e90000 x41500000 x3e8320c8} {x42e50000 x41280000 x3ec0300c} {x42d80000 x41300000 x3ecc330d} {x42c30000 x41380000 x3ebd2f4c} {x42a60000 x41400000 x3e98260a} {x429f0000 x41400000 x3d8c2309}}} {tx 1 x42e471c7 x41a18e39} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush201 512 catmullrom {cc {f 2080} {px 1 {x432f0000 x41780000 1} {x432d0000 x41700000 x3efb3ed0} {x432b8000 x41680000 x3ef6bdaf} {x432a0000 x41680000 x3ef6bdaf} {x43290000 x41680000 x3ef7bdef} {x43280000 x41880000 x3c50340d}}} {tx 1 x432b1555 x4172aaab} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush200 512 catmullrom {cc {f 2080} {px 1 {x43680000 x426e0000 1} {x43668000 x426a0000 x3eaf2bcb} {x43650000 x42640000 x3eb42d0b} {x43630000 x42600000 x3ed6b5ad} {x435d8000 x425a0000 x3db42d0b} {x435c0000 x425a0000 x3e0c2309} {x43590000 x42580000 x3e49324d} {x43558000 x42580000 x3e60380e} {x43520000 x42520000 x3ea2a8aa} {x43500000 x42460000 x3eb5ad6b} {x434d0000 x423a0000 x3ecdb36d} {x43498000 x42360000 x3ed7b5ed} {x43460000 x42360000 x3ed6b5ad} {x433f0000 x42400000 x3ed2348d} {x433b0000 x42420000 x3eceb3ad} {x43360000 x423a0000 x3ed6b5ad} {x43328000 x42360000 x3ed334cd} {x43308000 x42320000 x3ea7a9ea} {x432e0000 x42280000 x3ea7a9ea} {x432d0000 x421e0000 x3e9ca72a} {x432e8000 x42120000 x3e922489} {x43308000 x420a0000 x3eaf2bcb} {x43308000 x42000000 x3ed7b5ed} {x43308000 x41ec0000 x3eefbbef} {x43330000 x41e80000 x3ec7b1ec} {x433b0000 x41e80000 x3ebfafec} {x43448000 x41dc0000 x3e9a268a} {x43488000 x41c40000 x3e902409} {x43480000 x41b00000 x3eaf2bcb} {x43440000 x41a80000 x3ecdb36d} {x433d0000 x419c0000 x3ed735cd} {x43360000 x41940000 x3ea1284a}}} {tx 1 x43452800 x4225b000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush199 512 catmullrom {cc {f 2080} {px 1 {x437f0000 x429d0000 1} {x437d8000 x429d0000 x3d942509} {x437c0000 x429c0000 x3dec3b0f} {x43798000 x429c0000 x3e082209} {x43770000 x429c0000 x3dae2b8b}}} {tx 1 x437b6666 x429c6666} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush198 512 catmullrom {cc {f 2080} {px 1 {x43860000 x42a40000 1} {x43854000 x42a30000 x3e52348d} {x43848000 x42a20000 x3e52348d} {x4383c000 x42a20000 x3e52348d} {x43834000 x42a10000 x3e58360e} {x43824000 x42a00000 x3a802008}}} {tx 1 x43842aab x42a20000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush197 512 catmullrom {cc {f 2080} {px 1 {x438f4000 x42bf0000 1} {x438d8000 x42bb0000 x3e743d0f} {x438cc000 x42ba0000 x3e743d0f} {x438c0000 x42b80000 x3e773dcf} {x438b8000 x42b70000 x3e773dcf} {x438ac000 x42b50000 0}}} {tx 1 x438ca000 x42b95555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush196 512 catmullrom {cc {f 2080} {px 1 {x438bc000 x42df0000 1} {x438c0000 x42dc0000 x3e392e4c} {x438c0000 x42d90000 x3e802008} {x438b8000 x42d20000 x3ea9aa6b} {x438a8000 x42cb0000 x3ec4b12c} {x438b8000 x42c80000 x3eb02c0b} {x438ec000 x42c80000 x3e372dcb} {x438f8000 x42c70000 0}}} {tx 1 x438c7000 x42d10000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush195 512 catmullrom {cc {f 2080} {px 1 {x43844000 x42e80000 1} {x4383c000 x42e70000 x3e8320c8} {x43834000 x42e50000 x3e842108} {x43830000 x42e20000 x3e84a128} {x43854000 x42e20000 x3df23c8f} {x43874000 x42e20000 0}}} {tx 1 x43847555 x42e45555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush194 512 catmullrom {cc {f 2080} {px 1 {x438bc000 x42f50000 1} {x438b0000 x42f40000 x3e61384e} {x438a4000 x42f40000 x3e59364e} {x4388c000 x42f30000 x3db82e0c}}} {tx 1 x438a7000 x42f40000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush193 512 catmullrom {cc {f 2080} {px 1 {x439b4000 x42f90000 1} {x439ac000 x42f70000 x3e002008} {x439a4000 x42f60000 x3e0f23c9} {x43998000 x42f40000 x3e4330cc} {x4397c000 x42f00000 x3e9324c9} {x43944000 x42ea0000 x3ed334cd} {x43910000 x42e90000 x3ee7b9ee} {x438fc000 x42ef0000 x3eae2b8b} {x438fc000 x42f20000 0}}} {tx 1 x4396071c x42f18e39} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush192 512 catmullrom {cc {f 2080} {px 1 {x438d4000 x430a0000 1} {x438cc000 x430a0000 x3ed0340d} {x438fc000 x430a8000 x3ed5354d} {x4392c000 x43098000 x3ed4b52d} {x43944000 x43090000 x3ed4b52d} {x439b0000 x43078000 x3ed1b46d} {x43a10000 x43068000 x3eb8ae2c} {x43a44000 x43060000 x3e86a1a8} {x43a2c000 x43060000 x3e783e10} {x43a24000 x43058000 x3e4b32cd} {x43a10000 x43040000 x3e092249} {x439f8000 x43018000 0}}} {tx 1 x4399e000 x43072aab} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush191 512 catmullrom {cc {f 2080} {px 1 {x43418000 x43648000 1} {x433c8000 x43648000 x3e743d0f} {x433a0000 x43648000 x3ea1a86a} {x43338000 x43630000 x3ecdb36d} {x432d8000 x43608000 x3ecdb36d} {x432b8000 x435f8000 0}}} {tx 1 x43361555 x4362c000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush190 512 catmullrom {cc {f 2080} {px 1 {x434a0000 x43518000 1} {x43490000 x43520000 x3e9a268a} {x43480000 x43538000 x3ea5a96a} {x43480000 x435b0000 x3e912449} {x43480000 x435e0000 0}}} {tx 1 x4348999a x43566666} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush189 512 catmullrom {cc {f 2080} {px 1 {x4381c000 x435f8000 1} {x43808000 x435f8000 x3e22288a} {x437b8000 x43600000 x3e882209} {x43770000 x43600000 x3e9b26ca} {x43718000 x43600000 x3e9a268a} {x43690000 x435c8000 x3de0380e}}} {tx 1 x43784000 x435f4000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush188 512 catmullrom {cc {f 2080} {px 1 {x43858000 x43438000 1} {x43850000 x43438000 1} {x43848000 x43438000 x3ea9aa6b} {x43838000 x43438000 x3ec2b0ac} {x4381c000 x43440000 x3ec7b1ec} {x43804000 x43450000 x3ec6b1ac} {x437d8000 x434b0000 x3eb02c0b} {x437f0000 x43538000 x3ea0280a} {x4383c000 x435c0000 x3ea7a9ea} {x43844000 x435e0000 x3e58360e} {x43834000 x435e0000 0}}} {tx 1 x4382ba2f x434cdd17} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush187 512 catmullrom {cc {f 2080} {px 1 {x43408000 x439d4000 1} {x43408000 x439cc000 x3e51344d} {x43408000 x439c4000 x3e723c8f} {x43400000 x439b0000 x3ebaaeac} {x433d8000 x439a4000 x3ee338ce} {x433b0000 x43998000 x3edbb6ee} {x43390000 x43998000 x3c102409}}} {tx 1 x433e2492 x439b36db} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush186 512 catmullrom {cc {f 2080} {px 1 {x432e8000 x43a58000 1} {x432e8000 x43a4c000 x3e773dcf} {x432e8000 x43a40000 x3eacab2b} {x432d0000 x43a28000 x3ed0340d} {x432c8000 x43a14000 x3edc370e} {x432c8000 x43a00000 x3ed2b4ad} {x432c0000 x439f0000 x3ec6b1ac} {x432c8000 x439d8000 x3ec6318c} {x43318000 x439d4000 x3e8ca329} {x43348000 x439d4000 0}}} {tx 1 x432e6666 x43a0e666} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush185 512 catmullrom {cc {f 2080} {px 1 {x43330000 x43a80000 1} {x43310000 x43a7c000 x3dba2e8c} {x432f8000 x43a78000 x3dcc330d} {x432c0000 x43a74000 x3e49324d} {x432b0000 x43a74000 x3e042108}}} {tx 1 x432ee666 x43a78ccd} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush184 512 catmullrom {cc {f 2080} {px 1 {x438dc000 x43c34000 1} {x438cc000 x43c1c000 x3ea6a9aa} {x438c4000 x43c14000 x3eb12c4b} {x438ac000 x43bfc000 x3eb8ae2c} {x438b4000 x43bec000 x3ea7a9ea} {x438e4000 x43be0000 x3e18260a} {x43914000 x43bd8000 x3e693a4f} {x43958000 x43bd8000 x3e52348d} {x43990000 x43bd8000 0} {x43990000 x43bd0000 x3dde378e} {x43974000 x43bb0000 x3e773dcf} {x43960000 x43b90000 x3e8320c8} {x43948000 x43b6c000 x3ea7a9ea} {x4392c000 x43b50000 x3eb42d0b} {x438ec000 x43b24000 x3ea9aa6b} {x438b8000 x43b0c000 x3ea5294a} {x43890000 x43af8000 x3e9e278a} {x43850000 x43ae4000 x3ea328ca} {x43818000 x43ad4000 x3eb5ad6b} {x437d0000 x43ad0000 x3edcb72e} {x437a8000 x43ac8000 x3eeebbaf} {x43740000 x43ac8000 x3ee8ba2f} {x436d0000 x43ac8000 x3ee739ce} {x43670000 x43ac8000 x3eb9ae6c} {x43630000 x43ac4000 x3df63d8f} {x435e0000 x43aa8000 x3e292a4b} {x43540000 x43a8c000 x3e7d3f50} {x434c0000 x43a84000 x3e9b26ca} {x43440000 x43a98000 x3ea5a96a} {x433e0000 x43ac4000 x3e86a1a8} {x433a8000 x43ae4000 x3b802008}}} {tx 1 x438298c6 x43b4273a} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush183 512 catmullrom {cc {f 2080} {px 1 {x43824000 x43e58000 1} {x43828000 x43e50000 x3e8fa3e9} {x43830000 x43e4c000 x3ea1284a} {x43858000 x43e4c000 x3ea2288a} {x4389c000 x43e4c000 x3dec3b0f}}} {tx 1 x4384999a x43e4f333} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush182 512 catmullrom {cc {f 2080} {px 1 {x43550000 x43ee8000 1} {x43568000 x43ee8000 x3e6a3a8f} {x43580000 x43ee8000 x3e8320c8} {x435c8000 x43ee8000 x3e8ea3a9} {x43628000 x43ee8000 0}}} {tx 1 x435a199a x43ee8000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush181 512 catmullrom {cc {f 2080} {px 1 {x43288000 x43edc000 1} {x432a8000 x43edc000 x3e5334cd} {x432d0000 x43edc000 x3e842108} {x43318000 x43ee0000 x3ea6a9aa} {x433c8000 x43ef0000 x3eb4ad2b} {x43420000 x43efc000 x3e4330cc}}} {tx 1 x4332aaab x43ee5555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush180 512 catmullrom {cc {f 2080} {px 1 {x43398000 x43ddc000 1} {x43378000 x43ddc000 x3e6739ce} {x43330000 x43ddc000 x3eb62d8b} {x432d8000 x43de4000 x3ec2308c} {x43260000 x43de8000 x3ec2b0ac} {x43208000 x43df4000 x3eb2acab} {x431d0000 x43e0c000 x3e6a3a8f} {x431c0000 x43e14000 x3e54350d} {x431b8000 x43e34000 x3e2d2b4b} {x431b8000 x43e50000 x3e44310c} {x43188000 x43e5c000 x3ecd334d} {x43120000 x43e5c000 x3f07a1e8} {x430b0000 x43e5c000 x3f1324c9} {x43078000 x43e5c000 x3f0d2349} {x43068000 x43e60000 0}}} {tx 1 x431ea222 x43e1e666} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush179 512 catmullrom {cc {f 2080} {px 1 {x435c8000 x43dd0000 1} {x43598000 x43dc8000 x3e8320c8} {x43558000 x43dc0000 x3ecab2ad} {x43520000 x43db8000 x3f026098} {x43508000 x43db8000 x3eef3bcf} {x43500000 x43dc0000 0}}} {tx 1 x43550000 x43dc1555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush178 512 catmullrom {cc {f 2080} {px 1 {x436f0000 x43d84000 1} {x436e0000 x43d88000 x3ed0340d} {x436d8000 x43d90000 x3ef5bd6f} {x436d8000 x43d98000 x3effbff0} {x436d8000 x43dac000 x3f00a028} {x436e0000 x43dc4000 x3efc3f10} {x436e0000 x43dcc000 x3ef6bdaf} {x436e8000 x43dd8000 x3ee6398e} {x436a0000 x43ddc000 x3ec6318c} {x43670000 x43de0000 x3dd2348d}}} {tx 1 x436ce666 x43db399a} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush177 512 catmullrom {cc {f 2080} {px 1 {x43688000 x43cf4000 1} {x43670000 x43cf4000 x3ef1bc6f} {x43658000 x43cf4000 x3ef43d0f} {x43638000 x43cf4000 x3f122489} {x43628000 x43cfc000 x3f17a5e9} {x43638000 x43d20000 x3f006018} {x43660000 x43d48000 x3ed334cd} {x43678000 x43d54000 0}}} {tx 1 x43658000 x43d11000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush176 512 catmullrom {cc {f 2080} {px 1 {x43814000 x43864000 1} {x4380c000 x43864000 1} {x43804000 x43868000 x3e922489} {x437e0000 x4386c000 x3ec6318c} {x437d0000 x4387c000 x3ec6b1ac} {x437d0000 x43894000 x3eb0ac2b} {x437b8000 x438a4000 x3ebd2f4c} {x43748000 x438b4000 x3ee2388e} {x436c8000 x438bc000 x3f04a128} {x43690000 x438c8000 x3f066198} {x43680000 x438e4000 x3ee338ce} {x43678000 x438f0000 x3edfb7ee} {x43648000 x438fc000 x3ee6398e} {x43620000 x438fc000 x3ef5bd6f} {x435e0000 x43900000 x3f0320c8} {x435b0000 x4390c000 x3f05e178} {x43588000 x43920000 x3f046118} {x43580000 x43944000 x3f02e0b8} {x43578000 x4396c000 x3f00e038} {x43580000 x43984000 x3efebfb0} {x435b8000 x43998000 x3ed6b5ad} {x435d0000 x4399c000 x3ec4310c} {x43620000 x439ac000 x3e51344d} {x43630000 x439ac000 x3ba0280a}}} {tx 1 x4369f000 x438f8000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush175 512 catmullrom {cc {f 2080} {px 1 {x43830000 x43804000 1} {x43830000 x4380c000 x3e8da369} {x4382c000 x43818000 x3ea729ca} {x43820000 x43830000 x3ea8aa2b} {x43820000 x4383c000 0}}} {tx 1 x43828ccd x4381d99a} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush174 512 catmullrom {cc {f 2080} {px 1 {x43934000 x43720000 1} {x43930000 x43710000 x3eb2acab} {x4392c000 x43700000 x3ed6b5ad} {x43918000 x436d8000 x3f026098} {x438f8000 x436b0000 x3f0b22c9} {x438e0000 x436a0000 x3f06e1b8} {x438d0000 x436a0000 0}}} {tx 1 x4390b6db x436da492} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush173 512 catmullrom {cc {f 2080} {px 1 {x43b74000 x436e0000 1} {x43b6c000 x436e0000 x3e8aa2a9}}} {tx 1 x43b70000 x436e0000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush172 512 catmullrom {cc {f 2080} {px 1 {x43c10000 x436d8000 1} {x43c04000 x436d8000 x3e713c4f} {x43bf4000 x436d8000 x3e842108} {x43bdc000 x436e0000 x3e312c4b} {x43bd4000 x436e0000 x3ce0380e} {x43bc4000 x436e0000 x3e2c2b0b}}} {tx 1 x43bea000 x436dc000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush171 512 catmullrom {cc {f 2080} {px 1 {x43d20000 x43750000 1} {x43d20000 x43740000 x3e392e4c} {x43d20000 x43730000 x3e5735cd} {x43d1c000 x43720000 x3e84a128} {x43cec000 x436c0000 x3ed8360e} {x43c9c000 x43678000 x3f016058} {x43c70000 x43670000 x3ef83e10} {x43c64000 x43680000 0}}} {tx 1 x43cdb000 x436e1000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush170 512 catmullrom {cc {f 2080} {px 1 {x43bc4000 x43778000 1} {x43be8000 x43778000 x3e912449} {x43bfc000 x43778000 x3ea3a8ea} {x43c34000 x43778000 x3ec4310c} {x43c68000 x43778000 x3ec7b1ec} {x43c98000 x43770000 x3ed5b56d} {x43cc0000 x43758000 x3ed6b5ad} {x43ce4000 x43750000 x3ed735cd} {x43d04000 x43760000 x3eab2acb} {x43d0c000 x43768000 x3dc6318c}}} {tx 1 x43c74ccd x4376c000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush169 512 catmullrom {cc {f 2080} {px 1 {x43c5c000 x43468000 1} {x43c5c000 x43478000 x3e6d3b4f} {x43c64000 x43490000 x3e892249} {x43c80000 x43510000 x3ef03c0f} {x43c84000 x43520000 x3ef03c0f} {x43c8c000 x43540000 x3ee5394e} {x43c8c000 x43560000 x3ed7b5ed} {x43c7c000 x43588000 x3ed7b5ed} {x43c58000 x435a0000 x3ee4390e} {x43c18000 x435b8000 x3f04e138} {x43bac000 x435d8000 x3f1ae6ba} {x43b60000 x435f0000 x3f1ae6ba} {x43b50000 x435f8000 x3f1ae6ba} {x43b14000 x43618000 x3f1a669a} {x43ae8000 x43640000 x3f1a669a} {x43acc000 x43678000 x3f18a62a} {x43abc000 x43698000 x3f0721c8} {x43ab4000 x436c0000 x3e322c8b}}} {tx 1 x43bd1555 x4359ce39} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush168 512 catmullrom {cc {f 2080} {px 1 {x43cf0000 x43340000 1} {x43ce4000 x43340000 x3ea1284a} {x43cd8000 x43348000 x3ea5a96a} {x43cc8000 x43348000 x3eb62d8b} {x43ca8000 x43350000 x3ee739ce} {x43c8c000 x43380000 x3eefbbef} {x43c7c000 x433b8000 x3ed3b4ed} {x43c78000 x433f8000 x3ea7a9ea} {x43c74000 x43420000 x3d7c3f10}}} {tx 1 x43cac71c x43385555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush167 512 catmullrom {cc {f 2080} {px 1 {x43e18000 x43058000 x3ec1b06c} {x43e1c000 x43048000 x3ecab2ad} {x43e24000 x43038000 x3ecdb36d} {x43e4c000 x43010000 x3edc370e} {x43e68000 x42fe0000 x3ed2b4ad} {x43e6c000 x42f90000 x3eceb3ad} {x43e58000 x42f30000 x3eedbb6f} {x43e5c000 x42ee0000 x3ef23c8f} {x43e94000 x42ee0000 x3ec6318c} {x43ee0000 x42f00000 x3eaa2a8b} {x43ef4000 x42f10000 0}}} {tx 1 x43e6a8ba x42fa8ba3} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush166 512 catmullrom {cc {f 2080} {px 1 {x43d80000 x43130000 1} {x43d68000 x43120000 x3edb36ce} {x43d54000 x43110000 x3ee0b82e} {x43d40000 x43100000 x3f006018} {x43d18000 x430e0000 x3f13e4f9} {x43d0c000 x430d8000 x3f1b66da} {x43cfc000 x430c0000 x3f22e8ba} {x43d20000 x430b8000 x3f1c270a} {x43d54000 x430b0000 x3eba2e8c} {x43d60000 x430a8000 0}}} {tx 1 x43d3e666 x430e4000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush165 512 catmullrom {cc {f 2080} {px 1 {x43ce8000 x431d0000 1} {x43ce0000 x431c8000 x3ee739ce} {x43d00000 x431c0000 x3ef0bc2f} {x43d10000 x431c0000 x3ee0380e} {x43d34000 x431b8000 x3eb12c4b} {x43d64000 x431b0000 0}}} {tx 1 x43d12aab x431c0000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush164 512 catmullrom {cc {f 2080} {px 1 {x43bd0000 x431b8000 1} {x43bd8000 x431b0000 x3ea729ca} {x43be0000 x431a8000 x3ea8aa2b} {x43c08000 x431b0000 0}}} {tx 1 x43be4000 x431b0000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush163 512 catmullrom {cc {f 2080} {px 1 {x43b14000 x431e8000 1} {x43b0c000 x431e0000 x3ebbaeec} {x43b04000 x431d0000 x3edfb7ee} {x43b0c000 x431c8000 x3eecbb2f} {x43b14000 x431c8000 x3ede378e} {x43b1c000 x431c8000 x3ed5b56d} {x43b38000 x431c8000 x3eae2b8b} {x43b64000 x431c8000 x3e9324c9} {x43b84000 x431c8000 0}}} {tx 1 x43b2aaab x431cf1c7} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush162 512 catmullrom {cc {f 2080} {px 1 {x43b24000 x43360000 1} {x43b2c000 x43350000 x3e9ea7aa} {x43b2c000 x43330000 x3ec5314c} {x43b10000 x432d8000 x3f02e0b8} {x43b00000 x432a0000 x3f0d2349} {x43b14000 x43280000 x3f0ae2b9} {x43b30000 x43270000 x3ef8be30} {x43b44000 x43248000 x3eefbbef} {x43b44000 x43238000 x3ebfafec}}} {tx 1 x43b2638e x432c0e39} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush161 512 catmullrom {cc {f 2080} {px 1 {x439c4000 x432c0000 1} {x439b4000 x432b8000 x3ea92a4b} {x43998000 x432b0000 x3ed2348d} {x439a8000 x432c0000 x3f102409} {x439bc000 x432c0000 x3f126499} {x439f8000 x432d8000 x3f12e4b9} {x43a4c000 x43310000 x3ece338d} {x43a68000 x43328000 x3e5c370e} {x43a74000 x43338000 0}}} {tx 1 x439f4000 x432e1c72} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush160 512 catmullrom {cc {f 2080} {px 1 {x41a00000 x43680000 1} {x41980000 x43688000 x3ec1b06c} {x41900000 x43688000 x3ec4b12c} {x41780000 x436a0000 x3f01a068} {x41700000 x436d8000 x3f0aa2a9} {x41a40000 x43710000 0}}} {tx 1 x41900000 x436aeaab} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush159 512 catmullrom {cc {f 2080} {px 1 {x41840000 x434f0000 1} {x41800000 x43500000 x3ebeafac} {x41780000 x43518000 x3edf37ce} {x41780000 x43560000 x3ef0bc2f} {x41780000 x43590000 x3ee9ba6f} {x41500000 x435a8000 x3ee2388e} {x41280000 x435a8000 x3ec8b22d}}} {tx 1 x416a4925 x435536db} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush158 512 catmullrom {cc {f 2080} {px 1 {x41580000 x433d8000 1} {x41500000 x43400000 x3ebbaeec} {x41500000 x43420000 x3ebc2f0c} {x41580000 x43450000 x3ea1284a} {x41600000 x43468000 0}}} {tx 1 x41566666 x43423333} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush157 512 catmullrom {cc {f 2080} {px 1 {x41000000 x43268000 1} {x40b00000 x43268000 x3e9c270a} {x40600000 x43268000 x3ea3a8ea} {x40000000 x43268000 x3eaa2a8b} {0 x43268000 x3ee0b82e} {xbfc00000 x43290000 x3f0360d8} {xc0400000 x432b8000 x3efb3ed0} {xc0b00000 x432d0000 x3ee0b82e} {xc0b00000 x432f0000 x3e91a469} {xc0a00000 x43300000 x3e6e3b8f} {x40200000 x43330000 x3e783e10} {x40c00000 x43330000 x3e91a469} {x41400000 x43320000 x3eb12c4b} {x41700000 x43318000 x3eadab6b} {x41800000 x43318000 0}}} {tx 1 x40555555 x432c8889} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush156 512 catmullrom {cc {f 2080} {px 1 {x42e00000 x43258000 1} {x42d80000 x43268000 x3e93a4e9} {x42d60000 x43270000 x3e922489} {x42cf0000 x43290000 x3e9fa7ea} {x42c60000 x432a8000 x3ed5354d} {x42bc0000 x432d0000 x3eb42d0b} {x42b60000 x432e0000 0}}} {tx 1 x42cc2492 x43295b6e} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush155 512 catmullrom {cc {f 2080} {px 1 {x430f0000 x43160000 1} {x430e0000 x43160000 x3ec3b0ec} {x430d0000 x43160000 x3ec4310c} {x430b0000 x43188000 x3ee6398e} {x43098000 x431a8000 x3ee5394e} {x43060000 x431c8000 x3ec6318c} {x43038000 x431d8000 x3e9ea7aa} {x43028000 x431e8000 0}}} {tx 1 x43095000 x4319b000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush154 512 catmullrom {cc {f 2080} {px 1 {x43258000 x430c0000 1} {x43218000 x430b8000 x3ef5bd6f} {x43208000 x430b8000 x3f092249} {x431d8000 x430a8000 x3f18260a} {x431c8000 x430a8000 x3ef83e10} {x431b8000 x430c8000 0}}} {tx 1 x431f8000 x430b6aab} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush153 512 catmullrom {cc {f 2080} {px 1 {x43328000 x43018000 1} {x43310000 x43028000 x3e9324c9} {x432f8000 x43050000 x3e94a529} {x432e8000 x43060000 x3e94a529} {x432c0000 x43080000 x3e822088} {x432b0000 x43090000 0}}} {tx 1 x432ec000 x43055555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush152 512 catmullrom {cc {f 2080} {px 1 {x43450000 x42e70000 1} {x43438000 x42e70000 x3eca328d} {x43428000 x42e60000 x3ecd334d} {x43410000 x42e60000 x3eeebbaf} {x43400000 x42ec0000 x3ede378e} {x433f0000 x42f20000 x3e312c4b}}} {tx 1 x4341d555 x42e95555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush151 512 catmullrom {cc {f 2080} {px 1 {x436e8000 x42dc0000 1} {x436d0000 x42dc0000 x3e8a2289} {x436c0000 x42dc0000 x3e8c2309} {x436a8000 x42dc0000 x3ea8aa2b} {x43698000 x42dc0000 x3ecab2ad} {x43680000 x42dc0000 x3edb36ce} {x43670000 x42dc0000 x3ee0b82e} {x43660000 x42df0000 x3eb9ae6c} {x43660000 x42e20000 0}}} {tx 1 x43699c72 x42dd0000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush150 512 catmullrom {cc {f 2080} {px 1 {x43740000 x42ce0000 1} {x43740000 x42d00000 x3e7b3ed0} {x43730000 x42d30000 x3e7a3e90} {x43710000 x42d40000 x3e7a3e90} {x436e0000 x42d70000 x3e52348d}}} {tx 1 x43720000 x42d26666} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush149 512 catmullrom {cc {f 2080} {px 1 {x43620000 x42af0000 1} {x43638000 x42af0000 x3e6d3b4f} {x43648000 x42af0000 x3e6d3b4f} {x436b0000 x42b10000 x3e802008} {x43740000 x42b50000 x3e6d3b4f} {x43778000 x42b60000 0}}} {tx 1 x436ac000 x42b18000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush148 512 catmullrom {cc {f 2080} {px 1 {x43390000 x42a30000 1} {x433a0000 x42a10000 x3e2f2bcb} {x433b8000 x42a00000 x3e703c0f} {x433e8000 x42a00000 x3e723c8f} {x43450000 x42a00000 x3e322c8b} {x43498000 x429f0000 x3e902409} {x434a0000 x42a50000 x3eb7adeb} {x43498000 x42a90000 x3e7d3f50} {x43468000 x42ad0000 x3dde378e} {x43458000 x42ae0000 0}}} {tx 1 x4342b333 x42a46666} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush147 512 catmullrom {cc {f 2080} {px 1 {x432a0000 x42aa0000 x3dae2b8b} {x43298000 x42a80000 x3eb5ad6b} {x43290000 x42a60000 x3eba2e8c} {x432a8000 x42a40000 x3ebbaeec} {x432f8000 x42a30000 x3ea6a9aa} {x43350000 x42a30000 x3e733ccf} {x43370000 x42a30000 0}}} {tx 1 x432e1249 x42a54925} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush146 512 catmullrom {cc {f 2080} {px 1 {x43188000 x42b50000 1} {x43188000 x42b20000 x3e7f3fd0} {x43198000 x42b10000 x3e793e50} {x431d0000 x42af0000 0}}} {tx 1 x4319e000 x42b1c000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush145 512 catmullrom {cc {f 2080} {px 1 {x42870000 x42f90000 1} {x42890000 x42f90000 x3e6338ce} {x428b0000 x42f90000 x3e6338ce} {x42940000 x42f80000 x3e6338ce} {x42a30000 x42f70000 x3e6d3b4f} {x42b50000 x42f50000 x3ea5294a} {x42c20000 x42f80000 x3e842108} {x42cd0000 x42fb0000 x3d58360e} {x42d30000 x42fb0000 x3eba2e8c} {x42d90000 x42f80000 x3edbb6ee} {x42e60000 x42f00000 x3ee3b8ee} {x42ef0000 x42e60000 x3f04a128} {x42fd0000 x42e20000 x3f046118} {x43048000 x42e50000 x3da6298a}}} {tx 1 x42c21249 x42f39249} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush144 512 catmullrom {cc {f 2080} {px 1 {x42320000 x42f80000 1} {x422c0000 x42f60000 x3eaeabab} {x42260000 x42f40000 x3ed3b4ed} {x42380000 x42f30000 x3ee7b9ee} {x42440000 x42f30000 x3edcb72e} {x425a0000 x42f30000 x3ea6a9aa} {x42660000 x42f30000 0}}} {tx 1 x42400000 x42f44925} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush143 512 catmullrom {cc {f 2080} {px 1 {x42440000 x43070000 1} {x42400000 x43070000 x3e89a269} {x423a0000 x43070000 x3e8aa2a9} {x42340000 x43070000 x3e8ca329} {x42300000 x43060000 0}}} {tx 1 x423a0000 x4306cccd} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush142 512 catmullrom {cc {f 2080} {px 1 {x429d0000 x43188000 1} {x429e0000 x43178000 x3e372dcb} {x42ad0000 x43170000 x3e6739ce} {x42b40000 x43178000 x3e4d334d} {x42c20000 x43180000 x3e4731cc} {x42c60000 x43170000 x3e9324c9} {x42c10000 x43150000 x3eb7adeb} {x42b60000 x43110000 x3ed735cd} {x42ae0000 x430f0000 x3ed6b5ad} {x42a80000 x430e8000 x3ebfafec} {x429e0000 x430f0000 x3eb0ac2b} {x42950000 x43108000 x3e61384e} {x42930000 x43108000 0}}} {tx 1 x42ab9d8a x4313c4ec} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush141 512 catmullrom {cc {f 2080} {px 1 {x42c40000 x43338000 1} {x42c30000 x43328000 x3e773dcf} {x42c00000 x43308000 x3e8b22c9} {x42bb0000 x432d8000 x3e9ca72a} {x42b10000 x43298000 x3ea92a4b} {x42a50000 x43258000 x3e9a268a} {x42a10000 x43228000 0}}} {tx 1 x42b5db6e x432c36db} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush140 512 catmullrom {cc {f 2080} {px 1 {x42c00000 x43430000 1} {x42c00000 x43420000 x3ea92a4b} {x42bf0000 x43408000 x3ebe2f8c} {x42c00000 x433f0000 x3ef1bc6f} {x42ca0000 x433e0000 x3eeebbaf} {x42d40000 x433d8000 x3eccb32d} {x42d90000 x433d8000 x3e8fa3e9} {x42d80000 x433c8000 0}}} {tx 1 x42c9c000 x433f4000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush139 512 catmullrom {cc {f 2080} {px 1 {x42040000 x435e0000 1} {x41fc0000 x435d0000 x3e392e4c} {x41ec0000 x435c0000 x3e46318c} {x41c80000 x43590000 x3e9ca72a} {x41a00000 x43568000 x3eae2b8b} {x41900000 x43558000 x3e6d3b4f} {x41840000 x43558000 0}}} {tx 1 x41c64925 x43595b6e} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush138 512 catmullrom {cc {f 2080} {px 1 {x42420000 x43700000 1} {x423e0000 x43700000 x3eaa2a8b} {x42360000 x436f8000 x3eab2acb} {x42320000 x436e8000 x3ea7a9ea} {x42260000 x436b0000 x3ea5a96a} {x420e0000 x43670000 x3e753d4f} {x41f80000 x43648000 x3e4b32cd}}} {tx 1 x42280000 x436c1249} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush137 512 catmullrom {cc {f 2080} {px 1 {x428f0000 x43638000 1} {x428d0000 x43640000 x3e713c4f} {x428b0000 x43648000 x3e6e3b8f} {x42890000 x43648000 x3e6e3b8f} {x427c0000 x43660000 x3e98a62a} {x42660000 x43698000 x3e99264a} {x42600000 x436d0000 x3e122489}}} {tx 1 x42826db7 x43666db7} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush136 512 catmullrom {cc {f 2080} {px 1 {x42a10000 x43a64000 1} {x429f0000 x43a60000 x3ef2bcaf} {x42a10000 x43a5c000 x3efbbef0} {x42ae0000 x43a58000 x3f056158} {x42b50000 x43a50000 x3f00a028} {x42b50000 x43a30000 x3ee8ba2f} {x42b90000 x43a1c000 x3ee4390e} {x42c30000 x43a18000 x3e8721c8} {x42c90000 x43a1c000 0}}} {tx 1 x42b18e39 x43a40e39} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush135 512 catmullrom {cc {f 2080} {px 1 {x41ec0000 x43a30000 1} {x41e00000 x43a30000 x3e9c270a} {x41d40000 x43a2c000 x3e9da76a} {x41c80000 x43a2c000 x3ea5a96a} {x41c00000 x43a28000 x3eba2e8c} {x41c80000 x43a30000 x3b40300c}}} {tx 1 x41d2aaab x43a2d555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush134 512 catmullrom {cc {f 2080} {px 1 {x42040000 x4399c000 1} {x42000000 x439a0000 x3eacab2b} {x41f80000 x439ac000 x3eb0ac2b} {x41ec0000 x439bc000 x3eb4ad2b} {x41dc0000 x439c4000 x3eb7adeb} {x41c00000 x439d0000 x3ebc2f0c} {x41b00000 x439d4000 x3e082209}}} {tx 1 x41e36db7 x439b8925} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush133 512 catmullrom {cc {f 2080} {px 1 {x41e00000 x43910000 1} {x41d80000 x43910000 x3e783e10} {x41d00000 x43914000 x3e892249} {x41d00000 x4391c000 x3eaeabab} {x41d00000 x43930000 x3eb0ac2b} {x41e40000 x4394c000 x3eae2b8b} {x41f80000 x4395c000 x3e50340d}}} {tx 1 x41dc0000 x4392a492} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush132 512 catmullrom {cc {f 2080} {px 1 {x427c0000 x438a4000 1} {x426e0000 x4389c000 x3d9a268a} {x426a0000 x4389c000 x3dc6318c} {x42640000 x43898000 x3df63d8f} {x425a0000 x43898000 x3e51344d} {x424c0000 x43898000 x3ed1b46d} {x423e0000 x438a0000 x3ee6398e} {x42320000 x438b0000 x3ebd2f4c} {x42240000 x438b8000 x3ebc2f0c} {x42100000 x438b8000 x3ec2308c} {x42040000 x438c0000 x3eacab2b} {x42020000 x438cc000 0}}} {tx 1 x4240aaab x438a9555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush131 512 catmullrom {cc {f 2080} {px 1 {x42b40000 x438c0000 1} {x42b20000 x438b8000 x3e6e3b8f} {x42b00000 x438b4000 x3e812048} {x42aa0000 x438a4000 x3ea3a8ea} {x42a50000 x438a0000 x3eaf2bcb} {x42a00000 x438a4000 x3ea6298a} {x42970000 x438ac000 x3e95a569} {x428e0000 x438ac000 x3d44310c}}} {tx 1 x42a54000 x438ad800} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush130 512 catmullrom {cc {f 2080} {px 1 {x42da0000 x438f4000 1} {x42d80000 x438f4000 x3e8a2289} {x42d50000 x438f8000 x3e90a429} {x42d30000 x43904000 x3e94a529} {x42cf0000 x4390c000 x3ea9aa6b} {x42c80000 x43918000 x3e87a1e8}}} {tx 1 x42d2d555 x43901555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush129 512 catmullrom {cc {f 2080} {px 1 {x42ee0000 x438ec000 1} {x42ea0000 x438e8000 x3ea2a8aa} {x42e80000 x438e8000 x3ea2a8aa} {x42e60000 x438ec000 x3e062188}}} {tx 1 x42e98000 x438ea000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush128 512 catmullrom {cc {f 2080} {px 1 {x43230000 x4398c000 1} {x43218000 x43988000 x3eca328d} {x43208000 x43988000 x3ecbb2ed} {x431f8000 x43988000 x3ed1344d} {x431f0000 x43990000 x3e703c0f}}} {tx 1 x4320b333 x4398a666} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush127 512 catmullrom {cc {f 2080} {px 1 {x43530000 x43924000 x3eb02c0b} {x43520000 x43920000 x3eadab6b} {x43510000 x43920000 x3eb92e4c} {x434f8000 x43920000 x3ec1304c} {x434d8000 x43930000 x3ec1b06c} {x43488000 x43940000 x3ea4290a} {x433c8000 x43948000 x3eb7adeb} {x43338000 x43948000 x3ee2388e} {x432d8000 x43950000 x3ee4b92e} {x43280000 x43960000 x3ecab2ad} {x43270000 x4396c000 0}}} {tx 1 x4340ba2f x4393d174} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush126 512 catmullrom {cc {f 2080} {px 1 {x43ee4000 x43a08000 1} {x43edc000 x43a08000 x3eaf2bcb} {x43eb0000 x43a1c000 x3eb9ae6c} {x43e98000 x43a24000 x3ebcaf2c} {x43e7c000 x43a38000 x3ebaaeac} {x43e7c000 x43a48000 x3e912449} {x43e8c000 x43a50000 0}}} {tx 1 x43ea6492 x43a29249} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush125 512 catmullrom {cc {f 2080} {px 1 {x43dcc000 x43508000 1} {x43dc0000 x43500000 x3eaaaaab} {x43db8000 x434f8000 x3eaaaaab} {x43da0000 x434e8000 x3eab2acb} {x43d84000 x434c8000 x3ea328ca}}} {tx 1 x43dae666 x434f0000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush124 512 catmullrom {cc {f 2080} {px 1 {x43edc000 x43588000 1} {x43ec8000 x43578000 1} {x43ec0000 x43568000 x3ebd2f4c} {x43eb8000 x43550000 x3e783e10} {x43e9c000 x43540000 x3e5a368e} {x43e74000 x43538000 0}}} {tx 1 x43eb2000 x4355d555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush123 512 catmullrom {cc {f 2080} {px 1 {x43ef8000 x43630000 1} {x43ef0000 x43628000 1} {x43ee8000 x43618000 x3ec4310c} {x43ee4000 x435f8000 x3ec7b1ec} {x43eec000 x435e8000 x3ed9b66e} {x43f00000 x435e8000 x3d60380e}}} {tx 1 x43ef0000 x43609555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush122 512 catmullrom {cc {f 2080} {px 1 {x43f4c000 x43860000 1} {x43f44000 x43858000 x3eaf2bcb} {x43f38000 x43848000 x3ecc330d} {x43f30000 x4382c000 x3efb3ed0} {x43f30000 x43814000 x3efc3f10} {x43f24000 x43800000 x3ef8be30} {x43f18000 x437f0000 x3ef7bdef} {x43ef8000 x437d0000 x3ef7bdef} {x43ee8000 x437a8000 x3ef33ccf} {x43ee8000 x43790000 x3ef03c0f} {x43f00000 x43780000 x3ed334cd} {x43f08000 x43780000 x3ec8320d} {x43f2c000 x43778000 x3e922489} {x43f1c000 x43758000 x3ec6318c} {x43ed0000 x43710000 x3f142509} {x43eb4000 x436e0000 x3f1ea7aa} {x43ebc000 x436c0000 x3f1be6fa} {x43ec4000 x436b8000 x3f14e539} {x43eec000 x436b8000 x3e8c2309} {x43ef4000 x436b8000 0}}} {tx 1 x43f04ccd x4379b333} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush121 512 catmullrom {cc {f 2080} {px 1 {x43f6c000 x43914000 1} {x43f60000 x4390c000 x3ebeafac} {x43f58000 x43900000 x3ec8b22d} {x43f54000 x438f0000 x3efabeb0} {x43f70000 x438e0000 x3efabeb0} {x43f88000 x438c8000 x3ee0b82e} {x43f90000 x438bc000 x3e6b3acf}}} {tx 1 x43f6db6e x438ec000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush120 512 catmullrom {cc {f 2080} {px 1 {x43e54000 x4393c000 1} {x43e64000 x4393c000 x3e922489} {x43e8c000 x4393c000 x3e9a268a} {x43ebc000 x4393c000 x3eb9ae6c} {x43ee0000 x4393c000 x3ebeafac} {x43ef4000 x4393c000 x3e93a4e9} {x43f04000 x43928000 x3e902409} {x43f20000 x43924000 0}}} {tx 1 x43ebf000 x43936800} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush119 512 catmullrom {cc {f 2080} {px 1 {x43aac000 x4380c000 1} {x43ab8000 x43804000 x3e8ca329} {x43ad0000 x43804000 x3e99264a} {x43b04000 x43810000 x3e49324d} {x43b34000 x43814000 x3e1d274a} {x43b70000 x43818000 x3e693a4f} {x43b8c000 x4380c000 x3ebaaeac} {x43ba4000 x4380c000 x3ec9b26d} {x43bc8000 x43824000 x3eb5ad6b} {x43bf8000 x43838000 x3eac2b0b} {x43c18000 x43838000 x3eac2b0b} {x43c40000 x43838000 x3eab2acb} {x43c7c000 x43834000 x3e9a268a} {x43ca4000 x43828000 x3ea5a96a} {x43ce8000 x43830000 x3e733ccf} {x43cf8000 x43834000 0}}} {tx 1 x43bc2400 x4381f400} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush118 512 catmullrom {cc {f 2080} {px 1 {x43988000 x437f0000 x3e042108} {x43984000 x437e0000 0}}} {tx 1 x43986000 x437e8000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush117 512 catmullrom {cc {f 2080} {px 1 {x43a20000 x4389c000 1} {x43a20000 x43894000 x3ec7b1ec} {x43a2c000 x4389c000 x3eb82e0c} {x43a34000 x438a0000 x3ea3a8ea} {x43a44000 x438a0000 x3e46318c} {x43a5c000 x4389c000 x3d342d0b} {x43a5c000 x43884000 x3e3e2f8c} {x43a48000 x43878000 x3e51344d} {x43a1c000 x43864000 x3e6739ce} {x43a00000 x43854000 x3e6739ce} {x439e0000 x43848000 0}}} {tx 1 x43a2ba2f x4388345d} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush116 512 catmullrom {cc {f 2080} {px 1 {x43900000 x43920000 1} {x43904000 x43918000 x3e9ba6ea} {x4390c000 x43910000 x3e9725c9} {x43928000 x438fc000 x3eb02c0b} {x43930000 x438f8000 x3eb12c4b} {x4393c000 x438ec000 x3eb1ac6b} {x4395c000 x438e0000 x3eb4ad2b} {x4396c000 x438d4000 x3eb5ad6b} {x43970000 x438cc000 x3eb5ad6b} {x43968000 x438c4000 x3eb5ad6b} {x43968000 x438bc000 x3e912449} {x43974000 x438bc000 0}}} {tx 1 x43942aab x438e8555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush115 512 catmullrom {cc {f 2080} {px 1 {x43a28000 x43a30000 1} {x43a24000 x43a28000 x3e892249} {x43a3c000 x43a20000 x3e98260a} {x43a48000 x43a20000 x3e98a62a} {x43a58000 x43a18000 x3e99264a} {x43a60000 x43a08000 x3ea729ca} {x43a50000 x439f0000 x3ec6318c} {x43a44000 x439e0000 x3ec6b1ac} {x43a28000 x439c8000 x3ec7b1ec} {x439f8000 x439a8000 x3ec8b22d} {x439cc000 x43998000 x3ec9324d} {x4398c000 x43988000 x3ec8b22d} {x43954000 x43984000 x3ea9aa6b} {x43904000 x43980000 x3df03c0f}}} {tx 1 x439fe925 x439dd6db} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush114 512 catmullrom {cc {f 2080} {px 1 {x43af8000 x43a88000 1} {x43af0000 x43a80000 x3d3c2f0c} {x43adc000 x43a74000 x3dae2b8b} {x43aa0000 x43a5c000 x3e743d0f} {x43a88000 x43a54000 x3e042108}}} {tx 1 x43ac8ccd x43a6f333} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush113 512 catmullrom {cc {f 2080} {px 1 {x43c30000 x43b28000 1} {x43c24000 x43b28000 x3e693a4f} {x43c1c000 x43b28000 x3e693a4f} {x43c10000 x43b24000 x3e693a4f} {x43bec000 x43b10000 x3e94a529} {x43bc8000 x43b00000 x3e9aa6aa} {x43ba0000 x43af0000 x3e86a1a8} {x43b4c000 x43acc000 x3e65394e} {x43b1c000 x43ab4000 x3d8c2309}}} {tx 1 x43bcdc72 x43b031c7} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush112 512 catmullrom {cc {f 2080} {px 1 {x43d3c000 x43ae4000 1} {x43d34000 x43ae4000 x3e6d3b4f}}} {tx 1 x43d38000 x43ae4000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush111 512 catmullrom {cc {f 2080} {px 1 {x43e94000 x43b5c000 x3e5334cd} {x43e94000 x43b54000 x3e64390e} {x43e94000 x43b4c000 x3ea5a96a} {x43e70000 x43b3c000 x3eb3aceb} {x43e40000 x43b28000 x3ecd334d} {x43e34000 x43b24000 x3ebc2f0c}}} {tx 1 x43e70000 x43b40aab} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush110 512 catmullrom {cc {f 2080} {px 1 {x43ec0000 x43bcc000 1} {x43eac000 x43bc4000 x3ea328ca} {x43ea4000 x43bc4000 x3eb42d0b} {x43e98000 x43bbc000 x3ec4b12c} {x43e80000 x43bb0000 x3eba2e8c} {x43e4c000 x43b94000 x3ea729ca}}} {tx 1 x43e93555 x43bb8aab} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush109 512 catmullrom {cc {f 2080} {px 1 {x43f80000 x43c78000 1} {x43f80000 x43c70000 x3c302c0b} {x43f74000 x43c68000 x3e5735cd} {x43f58000 x43c58000 x3e9da76a} {x43f2c000 x43c44000 x3eb6adab} {x43f18000 x43c38000 x3eceb3ad}}} {tx 1 x43f58000 x43c5b555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush108 512 catmullrom {cc {f 2080} {px 1 {x43ea4000 x43ca4000 1} {x43eac000 x43ca4000 x3df83e10} {x43ec0000 x43ca4000 x3e54350d} {x43ef0000 x43ca8000 x3ea6a9aa} {x43f1c000 x43cb0000 x3ecbb2ed} {x43f34000 x43cb4000 x3edb36ce} {x43f54000 x43cbc000 x3ebcaf2c} {x43f6c000 x43cbc000 x3e4d334d}}} {tx 1 x43f02000 x43cae000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush107 512 catmullrom {cc {f 2080} {px 1 {x43e5c000 x43c58000 1} {x43e64000 x43c60000 x3e51344d} {x43e6c000 x43c70000 x3e6d3b4f} {x43e74000 x43c88000 x3e5c370e} {x43e88000 x43c98000 x3e1324c9} {x43e94000 x43ca0000 0}}} {tx 1 x43e74aab x43c7c000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush106 512 catmullrom {cc {f 2080} {px 1 {x43d40000 x43c40000 1} {x43d30000 x43c3c000 x3ed6b5ad} {x43d28000 x43c38000 x3ed7b5ed} {x43d18000 x43c30000 x3ef2bcaf} {x43d1c000 x43c28000 x3eeabaaf} {x43d40000 x43c28000 x3ead2b4b} {x43d68000 x43c2c000 0}}} {tx 1 x43d35249 x43c32492} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush105 512 catmullrom {cc {f 2080} {px 1 {x43abc000 x43c58000 1} {x43acc000 x43c54000 x3eb92e4c} {x43aec000 x43c54000 x3ec3b0ec} {x43b3c000 x43c54000 x3ec6b1ac} {x43b4c000 x43c54000 x3ec6318c} {x43b54000 x43c4c000 x3ed6b5ad} {x43ba0000 x43c54000 x3ed5b56d} {x43bec000 x43c64000 x3ed2b4ad} {x43c3c000 x43c78000 x3ed4b52d} {x43c60000 x43c80000 x3ed6b5ad} {x43c6c000 x43c7c000 x3ede378e} {x43c90000 x43c74000 x3ee0b82e} {x43cb4000 x43c68000 x3ece338d} {x43cc4000 x43c5c000 x3e80a028} {x43ccc000 x43c5c000 0}}} {tx 1 x43bd9111 x43c61555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush104 512 catmullrom {cc {f 2080} {px 1 {x43c74000 x43d08000 1} {x43c6c000 x43d0c000 x3ea0280a} {x43c64000 x43d0c000 x3ea4290a} {x43c5c000 x43d0c000 x3ea6a9aa} {x43c48000 x43d10000 x3f062188} {x43c40000 x43d10000 x3f0be2f9} {x43c38000 x43d10000 x3f09e279} {x43c38000 x43d1c000 x3ef93e50} {x43c18000 x43d24000 x3eefbbef} {x43bd8000 x43d28000 x3eefbbef} {x43b94000 x43d28000 x3ef2bcaf} {x43b44000 x43d24000 x3ef4bd2f} {x43b10000 x43d20000 x3ef5bd6f} {x43ac0000 x43d14000 x3f06a1a8} {x43a78000 x43cec000 x3f102409} {x43a44000 x43cbc000 x3f12e4b9} {x43a40000 x43ca4000 x3f0ea3a9} {x43a34000 x43c8c000 x3f0aa2a9} {x43a20000 x43c80000 x3edbb6ee}}} {tx 1 x43b80000 x43cfabca} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush103 512 catmullrom {cc {f 2080} {px 1 {x43b74000 x43ed4000 1} {x43b6c000 x43ecc000 x3cf83e10} {x43b58000 x43eb4000 x3d882209} {x43b48000 x43eac000 x3d783e10} {x43b1c000 x43e98000 x3e64390e} {x43b0c000 x43e94000 x3e332ccb}}} {tx 1 x43b46aab x43eb2000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush102 512 catmullrom {cc {f 2080} {px 1 {x43990000 x43f20000 1} {x43998000 x43f1c000 x3e902409} {x439b4000 x43f10000 x3eb3aceb} {x43a08000 x43f04000 x3eb5ad6b} {x43aa8000 x43efc000 x3ba0280a}}} {tx 1 x439e8ccd x43f0f333} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush101 512 catmullrom {cc {f 2080} {px 1 {x43718000 x43f4c000 1} {x43728000 x43f4c000 x3eb1ac6b} {x43748000 x43f48000 x3eb8ae2c} {x437b0000 x43f34000 x3ee5b96e} {x43838000 x43f38000 x3eea3a8f} {x43854000 x43f3c000 x3ed3b4ed} {x43860000 x43f38000 0}}} {tx 1 x437ddb6e x43f40000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush100 512 catmullrom {cc {f 2080} {px 1 {x438e8000 x43f00000 x3e122489} {x438f8000 x43f00000 x3e8d2349} {x43914000 x43f04000 x3e98a62a} {x43978000 x43f08000 x3e6739ce} {x4398c000 x43f08000 0}}} {tx 1 x4393199a x43f04000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush99 512 catmullrom {cc {f 2080} {px 1 {x42a20000 x43f18000 1} {x42a50000 x43f14000 x3e96a5a9} {x42a90000 x43f0c000 x3ec2b0ac} {x42b00000 x43f0c000 x3ec8b22d} {x42b60000 x43f10000 0}}} {tx 1 x42aacccd x43f10ccd} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush98 512 catmullrom {cc {f 2080} {px 1 {x423c0000 x43ec8000 1} {x42420000 x43ec0000 x3e773dcf} {x42460000 x43ebc000 x3e8a2289} {x424c0000 x43eb8000 x3e9e278a} {x42640000 x43eb8000 x3eba2e8c} {x42740000 x43ecc000 x3eb8ae2c} {x42840000 x43ee0000 x3e54350d} {x42870000 x43ee4000 x3e0a2289} {x428b0000 x43ee0000 x3e902409} {x428f0000 x43eec000 x3e822088} {x42920000 x43ef4000 0}}} {tx 1 x42708ba3 x43ed1d17} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush97 512 catmullrom {cc {f 2080} {px 1 {x41dc0000 x43ec8000 1} {x41ec0000 x43ec8000 x3e50340d} {x41fc0000 x43ec8000 x3e6b3acf} {x420c0000 x43ec4000 x3e90a429} {x42200000 x43ec4000 x3e8ca329} {x42340000 x43ed0000 x3e4d334d}}} {tx 1 x420b0000 x43ec8000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush96 512 catmullrom {cc {f 2080} {px 1 {x42440000 x43d48000 1} {x42400000 x43d48000 x3eb02c0b} {x42380000 x43d44000 x3ebeafac} {x42340000 x43d44000 x3ec3b0ec} {x42220000 x43d44000 x3ed6b5ad} {x42040000 x43d50000 x3ec8320d} {x41cc0000 x43d74000 x3e842108} {x41940000 x43da8000 x3d8c2309} {x41480000 x43dc8000 x3e26298a} {x41300000 x43dd4000 x3e90a429} {x41100000 x43dd8000 x3ec6318c} {x41000000 x43de4000 x3ecab2ad} {x40e00000 x43df0000 0}}} {tx 1 x41d93b14 x43d8b13b} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush95 512 catmullrom {cc {f 2080} {px 1 {x41280000 x43bf4000 1} {x41380000 x43bf4000 x3e60380e} {x41480000 x43bf4000 x3e753d4f} {x41880000 x43bf8000 x3e98a62a} {x41d00000 x43c04000 x3ea3a8ea} {x42100000 x43c1c000 x3e8b22c9} {x42220000 x43c28000 x3e112449} {x42340000 x43c34000 x3e162589} {x423a0000 x43c38000 0}}} {tx 1 x41da38e4 x43c0f1c7} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush94 512 catmullrom {cc {f 2080} {px 1 {x41a00000 x43bdc000 1} {x41980000 x43bdc000 x3ea92a4b} {x418c0000 x43bd8000 x3ec1b06c} {x41840000 x43bd8000 x3ed3b4ed} {x41400000 x43bd4000 x3eeebbaf} {x40c00000 x43bd8000 x3eeabaaf} {x3fc00000 x43bd4000 x3ec6318c} {xbfc00000 x43bc8000 x3ec3b0ec}}} {tx 1 x41360000 x43bd6000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush93 512 catmullrom {cc {f 2080} {px 1 {x42a90000 x43b48000 1} {x42950000 x43b44000 1} {x42920000 x43b44000 x3eb7adeb} {x42900000 x43b44000 x3e50340d}}} {tx 1 x42980000 x43b45000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush92 512 catmullrom {cc {f 2080} {px 1 {x43150000 x43af0000 1} {x43110000 x43ae4000 x3e902409} {x430f0000 x43ae0000 x3e9c270a} {x43090000 x43ad4000 x3eaf2bcb} {x42ff0000 x43ac8000 x3e773dcf} {x42f60000 x43ac8000 0}}} {tx 1 x43096aab x43ad9555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush91 512 catmullrom {cc {f 2080} {px 1 {x43210000 x43b38000 1} {x431f0000 x43b30000 x3e97a5e9} {x431d0000 x43b28000 x3e97a5e9} {x43180000 x43b18000 x3e91a469} {x43130000 x43afc000 x3e902409} {x430f8000 x43aec000 x3e80a028} {x43128000 x43aec000 0}}} {tx 1 x43184925 x43b11b6e} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush90 512 catmullrom {cc {f 2080} {px 1 {x433b8000 x43b68000 1} {x43390000 x43b64000 x3eab2acb} {x43378000 x43b64000 x3eab2acb} {x43368000 x43b60000 x3e9ca72a} {x43340000 x43b60000 x3ea0280a} {x43318000 x43b60000 x3e7a3e90}}} {tx 1 x4336aaab x43b62aab} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush89 512 catmullrom {cc {f 2080} {px 1 {x436a8000 x43b90000 1} {x43690000 x43b8c000 x3e8a2289} {x43678000 x43b88000 x3e8c2309} {x43660000 x43b84000 x3e8d2349} {x43648000 x43b80000 x3e98260a} {x43628000 x43b74000 x3ea328ca} {x43608000 x43b6c000 x3ea7a9ea} {x435e8000 x43b64000 x3eb0ac2b} {x435c8000 x43b5c000 x3eb42d0b} {x43590000 x43b58000 x3e82a0a8} {x43538000 x43b54000 x3e6d3b4f} {x43510000 x43b58000 0}}} {tx 1 x43601555 x43b71000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush88 512 catmullrom {cc {f 2080} {px 1 {x43450000 x43bc4000 1} {x43480000 x43bbc000 x3dec3b0f} {x43490000 x43bb8000 x3dd6358d} {x434a8000 x43bb4000 x3dec3b0f} {x434b0000 x43ba4000 x3e85a168} {x43510000 x43bac000 x3eba2e8c} {x43588000 x43bbc000 x3e8aa2a9} {x435f8000 x43bc0000 x3e61384e} {x43620000 x43bc0000 x3e5a368e} {x43620000 x43bb4000 x3e723c8f} {x43650000 x43bb0000 x3e8320c8} {x436b0000 x43bac000 x3e882209} {x436e8000 x43bac000 x3e703c0f} {x436f8000 x43bac000 0}}} {tx 1 x43599b6e x43bb4925} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush87 512 catmullrom {cc {f 2080} {px 1 {x43108000 x43bac000 1} {x43120000 x43ba8000 x3d042108}}} {tx 1 x43114000 x43baa000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush86 512 catmullrom {cc {f 2080} {px 1 {x42ba0000 x43cc0000 1} {x42ba0000 x43cb8000 x3ea9aa6b} {x42c50000 x43cac000 x3ec1304c} {x42ce0000 x43cac000 x3ec3b0ec} {x42e00000 x43ca8000 x3ec1304c} {x42f00000 x43ca4000 x3c40300c}}} {tx 1 x42ce8000 x43caf555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush85 512 catmullrom {cc {f 2080} {px 1 {x42c70000 x43d84000 1} {x42c50000 x43d7c000 x3e51344d} {x42c30000 x43d74000 x3e54350d} {x42c20000 x43d6c000 x3e7a3e90} {x42d20000 x43d78000 x3e862188} {x42e70000 x43d7c000 x3e44310c} {x42ed0000 x43d78000 0}}} {tx 1 x42d10000 x43d78925} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush84 512 catmullrom {cc {f 2080} {px 1 {x43048000 x43e50000 1} {x43030000 x43e48000 x3e0a2289} {x43020000 x43e44000 x3e162589} {x42fe0000 x43e34000 x3e4c330d} {x42fc0000 x43e30000 x3e5d374e} {x42fa0000 x43e34000 x3dfe3f90}}} {tx 1 x43009555 x43e3e000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush83 512 catmullrom {cc {f 2080} {px 1 {x43310000 x43ea0000 1} {x432f0000 x43ea0000 x3dac2b0b} {x43298000 x43e9c000 x3e25294a} {x43220000 x43e98000 x3e882209} {x431e8000 x43e98000 x3e46318c} {x431d8000 x43e98000 x3e1c270a} {x431c8000 x43e9c000 x3e092249}}} {tx 1 x43252492 x43e9b6db} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush82 512 catmullrom {cc {f 2080} {px 1 {x43608000 x43e84000 1} {x435b8000 x43e74000 x3ea6a9aa} {x43590000 x43e70000 x3eba2e8c} {x43538000 x43e68000 x3ef9be70} {x434e8000 x43e64000 x3f002008} {x434d8000 x43e88000 x3ea6a9aa} {x434d8000 x43e9c000 0}}} {tx 1 x4354db6e x43e7a492} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush81 512 catmullrom {cc {f 2080} {px 1 {x43e2c000 x43ee8000 1} {x43e0c000 x43ee8000 x3e783e10} {x43df4000 x43ee8000 x3e82a0a8} {x43dec000 x43eec000 x3d842108}}} {tx 1 x43e06000 x43ee9000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush80 512 catmullrom {cc {f 2080} {px 1 {x43ec8000 x43ed4000 1} {x43ec0000 x43ed4000 x3e842108} {x43e9c000 x43ed4000 x3ea8aa2b} {x43e80000 x43ed4000 x3eb62d8b} {x43e80000 x43ee4000 x3e112449}}} {tx 1 x43ea0ccd x43ed7333} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush79 512 catmullrom {cc {f 2080} {px 1 {x43f2c000 x43e98000 1} {x43f24000 x43ea4000 x3e60380e} {x43f18000 x43eb0000 x3e9c270a} {x43f08000 x43eb0000 x3ea5a96a} {x43eec000 x43eb4000 x3e9a268a} {x43ee4000 x43ec0000 x3df63d8f}}} {tx 1 x43f0aaab x43ead555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush78 512 catmullrom {cc {f 2080} {px 1 {x43ebc000 x43dfc000 1} {x43ebc000 x43e04000 x3e042108} {x43ebc000 x43e14000 x3ea5294a} {x43ebc000 x43e28000 x3eaf2bcb} {x43ec4000 x43e34000 x3ea328ca} {x43ef0000 x43e50000 x3de4390e}}} {tx 1 x43ec6000 x43e20000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush77 512 catmullrom {cc {f 2080} {px 1 {x43d50000 x43cbc000 1} {x43d40000 x43cbc000 x3e8c2309} {x43d34000 x43cbc000 x3e8c2309} {x43d18000 x43cbc000 x3e952549} {x43d18000 x43cc8000 x3eb02c0b} {x43d20000 x43cd8000 x3eb2acab} {x43d3c000 x43cec000 x3ebcaf2c} {x43d80000 x43d14000 x3ec6318c} {x43da8000 x43d2c000 x3ec7b1ec} {x43dc4000 x43d40000 x3ec9324d} {x43de0000 x43d48000 x3ed2348d} {x43e14000 x43d50000 x3ed735cd} {x43e4c000 x43d5c000 x3ed7b5ed} {x43e90000 x43d60000 x3ed7b5ed} {x43ea4000 x43d60000 x3ed9b66e} {x43ea8000 x43d4c000 x3ee6398e} {x43ea4000 x43d34000 x3efcbf30} {x43ea4000 x43d24000 x3f02a0a8} {x43ec4000 x43d18000 x3f026098} {x43ef0000 x43d18000 x3f012048} {x43f24000 x43d18000 x3efdbf70} {x43f4c000 x43d20000 x3efa3e90} {x43f6c000 x43d28000 x3efb3ed0} {x43f9c000 x43d2c000 x3efc3f10} {x43fd0000 x43d34000 x3efcbf30} {x4400e000 x43d38000 x3efcbf30} {x44034000 x43d40000 x3e89a269} {x44040000 x43d44000 0}}} {tx 1 x43e736db x43d1b6db} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush76 512 catmullrom {cc {f 2080} {px 1 {x43b6c000 x43b18000 1} {x43b88000 x43b2c000 x3ebaaeac} {x43bb0000 x43b44000 x3e812048} {x43bc0000 x43b48000 0}}} {tx 1 x43b99000 x43b34000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush75 512 catmullrom {cc {f 2080} {px 1 {x43a98000 x43adc000 1} {x43aa0000 x43ae0000 x3e922489} {x43aa8000 x43ae4000 x3e922489} {x43acc000 x43af8000 x3e8721c8} {x43b08000 x43b10000 0}}} {tx 1 x43abd99a x43aee666} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush74 512 catmullrom {cc {f 2080} {px 1 {x439b0000 x43aac000 1} {x439b0000 x43aa4000 x3e2d2b4b} {x439c8000 x43a9c000 x3d8a2289}}} {tx 1 x439b8000 x43aa4000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush73 512 catmullrom {cc {f 2080} {px 1 {x438dc000 x43abc000 x3d8e2389}}} {tx 1 x438dc000 x43abc000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush72 512 catmullrom {cc {f 2080} {px 1 {x4381c000 x43a30000 1} {x43818000 x43a38000 x3e2c2b0b} {x43818000 x43a40000 x3e4b32cd} {x43818000 x43a48000 x3e4c330d} {x43834000 x43a5c000 x3e322c8b} {x4383c000 x43a60000 x3e25294a} {x43868000 x43a70000 x3e1d274a} {x43894000 x43a84000 x3e2328ca} {x438ac000 x43a90000 x3da6298a}}} {tx 1 x43846aab x43a5aaab} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush71 512 catmullrom {cc {f 2080} {px 1 {x43880000 x439f4000 1} {x43878000 x439f8000 x3e60380e} {x43868000 x439fc000 x3e59364e} {x43854000 x43a00000 x3e5a368e} {x4382c000 x43a0c000 x3e65394e} {x4381c000 x43a18000 x3e5f37ce} {x4381c000 x43a28000 x3d342d0b}}} {tx 1 x4384c925 x43a076db} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush70 512 catmullrom {cc {f 2080} {px 1 {x43738000 x43954000 x3dc6318c} {x43738000 x4395c000 x3e952549} {x43748000 x43974000 x3ea5a96a} {x43778000 x43998000 x3eb4ad2b} {x437d8000 x439c0000 x3eb82e0c} {x43848000 x439e0000 x3e65394e} {x43868000 x439e8000 0}}} {tx 1 x437c5b6e x4399c000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush69 512 catmullrom {cc {f 2080} {px 1 {x43530000 x42fc0000 1} {x43518000 x42fa0000 x3e9e278a} {x43508000 x42f90000 x3e9fa7ea} {x434e8000 x42f50000 x3ea1284a} {x43500000 x42f30000 x3e56358d}}} {tx 1 x4350b333 x42f7cccd} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush68 512 catmullrom {cc {f 2080} {px 1 {x434e0000 x43098000 1}}} {tx 1 x434e0000 x43098000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush67 512 catmullrom {cc {f 2080} {px 1 {x436a0000 x43138000 1} {x43690000 x43120000 x3e062188} {x43680000 x43110000 x3e062188} {x43668000 x430e0000 x3e082209} {x43668000 x430c0000 x3e51344d} {x43658000 x430b0000 x3e6739ce} {x43638000 x430b0000 x3e5a368e} {x435e0000 x430b0000 x3e4c330d} {x435b0000 x430a8000 x3e3f2fcc} {x43590000 x430a0000 x3e1f27ca} {x43558000 x43090000 x3e40300c} {x43538000 x43088000 x3e50340d}}} {tx 1 x43610000 x430ca000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush66 512 catmullrom {cc {f 2080} {px 1 {x43230000 x43320000 1} {x43238000 x43310000 x3e6d3b4f} {x43258000 x432f8000 x3e6a3a8f} {x43288000 x432e8000 x3e733ccf} {x432c0000 x432d8000 x3e703c0f} {x432d0000 x432c0000 x3e5334cd} {x43300000 x432b0000 x3e0a2289} {x43348000 x432a8000 x3e112449} {x43398000 x432a0000 x3e6739ce} {x433d8000 x43298000 x3e6d3b4f} {x43430000 x43290000 x3e65394e} {x434c8000 x43290000 x3d24290a}}} {tx 1 x43320aab x432c7555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush65 512 catmullrom {cc {f 2080} {px 1 {x43108000 x43358000 1} {x43118000 x43358000 x3e49324d}}} {tx 1 x43110000 x43358000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush64 512 catmullrom {cc {f 2080} {px 1 {x42eb0000 x43420000 1} {x42ea0000 x43408000 x3e733ccf} {x42ea0000 x433c8000 x3e8ea3a9} {x42f00000 x433b0000 x3e7f3fd0} {x42f60000 x433a8000 x3d962589} {x42fb0000 x43388000 0}}} {tx 1 x42f00000 x433cd555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush63 512 catmullrom {cc {f 2080} {px 1 {x42a90000 x436d8000 1} {x42ab0000 x436c0000 x3e46318c} {x42ae0000 x436a8000 x3df23c8f} {x42b30000 x43698000 0}}} {tx 1 x42ad4000 x436b6000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush62 512 catmullrom {cc {f 2080} {px 1 {x42b00000 x43814000 1} {x42ac0000 x43814000 x3e5d374e} {x42a30000 x43814000 x3e8b22c9} {x42970000 x43810000 x3eadab6b} {x42950000 x43824000 x3e9aa6aa} {x42940000 x43840000 x3d683a0f} {x428e0000 x4383c000 x3de0380e} {x42780000 x43810000 x3e60380e} {x42680000 x437f0000 0}}} {tx 1 x42950000 x4381b1c7} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush61 512 catmullrom {cc {f 2080} {px 1 {x43080000 x43518000 1} {x43070000 x43518000 x3e292a4b} {x43050000 x43518000 x3e26298a} {x43000000 x43518000 x3e4731cc} {x42f70000 x43528000 x3e5334cd} {x42f40000 x43550000 0}}} {tx 1 x43019555 x43524000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush60 512 catmullrom {cc {f 2080} {px 1 {x436e0000 x43710000 1} {x43700000 x43700000 x3e912449} {x43720000 x436f0000 x3e93a4e9} {x43740000 x436d0000 x3e94a529} {x43730000 x436a8000 x3e99264a} {x436d8000 x43698000 x3ea1a86a} {x43650000 x43698000 x3d042108}}} {tx 1 x436f1249 x436cedb7} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush59 512 catmullrom {cc {f 2080} {px 1 {x434b8000 x436f0000 1} {x434e0000 x436f8000 x3dc6318c}}} {tx 1 x434cc000 x436f4000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush58 512 catmullrom {cc {f 2080} {px 1 {x42e40000 x437a0000 x3e5334cd} {x42e70000 x437b0000 x3e7e3f90} {x42ee0000 x437c0000 x3e802008} {x42fd0000 x437d8000 x3e7f3fd0} {x43028000 x437d8000 x3e723c8f} {x43038000 x437d8000 x3e6e3b8f} {x43048000 x437d8000 x3e6d3b4f} {x43070000 x437c0000 x3e51344d} {x430a8000 x43798000 x3e60380e} {x430e0000 x43768000 x3e703c0f} {x43118000 x43738000 x3e773dcf} {x43158000 x43708000 x3e82a0a8} {x431b0000 x436d0000 x3e80a028} {x431f8000 x436c0000 x3e54350d} {x43210000 x436c0000 0}}} {tx 1 x43090889 x43773333} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush57 512 catmullrom {cc {f 2080} {px 1 {x43138000 x439c8000 1} {x43120000 x439d8000 x3d282a0b} {x43108000 x439e0000 x3dbc2f0c} {x430f0000 x439e8000 x3dfa3e90} {x430c8000 x439f8000 x3df83e10} {x43090000 x43a00000 x3d64390e} {x43080000 x43a00000 0}}} {tx 1 x430e1249 x439e9249} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush56 512 catmullrom {cc {f 2080} {px 1 {x43150000 x43958000 1} {x43130000 x43958000 x3e7a3e90} {x43120000 x43958000 x3e8320c8} {x43118000 x43964000 x3e8da369} {x43128000 x43988000 x3e20280a} {x43138000 x43990000 0}}} {tx 1 x4312eaab x4396b555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush55 512 catmullrom {cc {f 2080} {px 1 {x432e8000 x438ac000 1} {x432d8000 x438b0000 x3e98a62a} {x432a8000 x438c4000 x3ea2288a} {x43280000 x438dc000 x3ea6298a} {x43260000 x438fc000 x3e9aa6aa} {x43250000 x43908000 x3e042108}}} {tx 1 x43299555 x438d5555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush54 512 catmullrom {cc {f 2080} {px 1 {x43b40000 x43950000 1} {x43b54000 x43964000 x3e6d3b4f} {x43b5c000 x4396c000 x3e723c8f} {x43b64000 x43970000 x3e733ccf} {x43b6c000 x43974000 x3e743d0f} {x43b94000 x4398c000 x3e842108} {x43bcc000 x439a4000 x3e8ca329} {x43bfc000 x439c0000 x3e902409} {x43c04000 x439cc000 x3e912449} {x43c04000 x439d4000 x3e93a4e9} {x43bf0000 x439dc000 x3e93a4e9} {x43be0000 x439e0000 x3e93a4e9} {x43bd8000 x439f4000 x3e93a4e9} {x43bd8000 x43a08000 x3e8e2389} {x43be8000 x43a18000 x3e8b22c9} {x43bf8000 x43a2c000 x3e8c2309} {x43c18000 x43a44000 x3e8ca329} {x43c30000 x43a54000 x3e8da369} {x43c4c000 x43a60000 x3e8e2389} {x43c64000 x43a70000 x3e8d2349} {x43c90000 x43a88000 x3e822088} {x43cb8000 x43a98000 x3e60380e} {x43ce4000 x43aac000 x3df03c0f} {x43cf0000 x43ab0000 0}}} {tx 1 x43bfbaab x439fa2ab} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush53 512 catmullrom {cc {f 2080} {px 1 {x43a10000 x43914000 x3e8fa3e9} {x43a28000 x43914000 x3e842108} {x43a4c000 x43914000 x3e8d2349} {x43a78000 x43910000 x3e94a529} {x43a90000 x43908000 x3e9725c9} {x43a98000 x43900000 x3e9c270a} {x43aac000 x43900000 x3e8e2389} {x43ac8000 x43908000 x3c902409}}} {tx 1 x43a73000 x4390b800} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush52 512 catmullrom {cc {f 2080} {px 1 {x43a50000 x43918000 1} {x43a64000 x43924000 x3e7b3ed0} {x43a70000 x4392c000 x3e65394e} {x43a84000 x43934000 0}}} {tx 1 x43a6a000 x43927000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush51 512 catmullrom {cc {f 2080} {px 1 {x43944000 x42f20000 1} {x4393c000 x42f20000 x3ebd2f4c} {x43944000 x42f00000 x3f062188} {x43950000 x42f00000 x3f0d6359} {x43984000 x42ed0000 x3f1e679a} {x439fc000 x42ed0000 x3f2ceb3b} {x43a60000 x42ec0000 x3f2fabeb} {x43ac8000 x42e60000 x3f30ac2b} {x43afc000 x42e20000 x3f30ec3b} {x43b40000 x42e00000 x3f30ec3b} {x43b6c000 x42df0000 x3f30ac2b} {x43b90000 x42de0000 x3f2e2b8b} {x43bb8000 x42e10000 x3f28aa2b} {x43be8000 x42e30000 x3f23a8ea} {x43c18000 x42e50000 x3f22689a} {x43c40000 x42e80000 x3f21685a} {x43c70000 x42f00000 x3f1da76a} {x43c74000 x42f50000 x3f1ce73a} {x43c3c000 x42fe0000 x3f1d675a} {x43c24000 x43038000 x3f1d675a} {x43c24000 x43058000 x3f1da76a} {x43c4c000 x43080000 x3f1da76a} {x43c94000 x430b8000 x3f1da76a} {x43ccc000 x430f0000 x3f1de77a} {x43ce0000 x43110000 x3f1e679a} {x43d0c000 x43138000 x3f1f27ca} {x43d38000 x43168000 x3f1f67da} {x43d74000 x431a8000 x3f1f67da} {x43d9c000 x431f0000 x3f1fa7ea} {x43dd0000 x43250000 x3f1fa7ea} {x43e30000 x432b0000 x3f1ea7aa} {x43eb8000 x43320000 x3e1324c9}}} {tx 1 x43bd7600 x43029c00} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush50 512 catmullrom {cc {f 2080} {px 1 {x42ad0000 x429b0000 1} {x42ab0000 x429c0000 x3e9b26ca} {x42a80000 x429c0000 x3eac2b0b} {x42a00000 x429d0000 x3ee1384e} {x42920000 x429e0000 x3f13e4f9} {x427c0000 x42a10000 x3f20e83a} {x424e0000 x42a30000 x3f2a2a8b} {x42320000 x42a50000 x3f31ac6b} {x42180000 x42a90000 x3f32ecbb} {x42080000 x42ad0000 x3f32ecbb} {x42040000 x42b20000 x3f32acab} {x42040000 x42b60000 x3f32acab} {x42080000 x42b80000 x3f32acab} {x420c0000 x42bc0000 x3f32acab} {x41e40000 x42c30000 x3f346d1b} {x41c80000 x42c50000 x3f35ad6b} {x41940000 x42c90000 x3f366d9b} {x41600000 x42d00000 x3f36adab} {x41600000 x42d50000 x3f36adab} {x41800000 x42d60000 x3f35ed7b} {x41940000 x42d80000 x3f35ed7b} {x41ac0000 x42dd0000 x3f35ed7b} {x41bc0000 x42e30000 x3f35ad6b} {x41d40000 x42e80000 x3f35ad6b} {x41ec0000 x42ed0000 x3f35ad6b} {x41f80000 x42f20000 x3f35ad6b} {x41ec0000 x42f70000 x3f35ad6b} {x41c40000 x42fb0000 x3f35ed7b} {x41a40000 x43020000 x3f2d6b5b} {x419c0000 x43070000 x3ef0bc2f} {x419c0000 x43098000 0}}} {tx 1 x42150842 x42c9a529} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush49 512 catmullrom {cc {f 2080} {px 1 {x42980000 x42760000 1}}} {tx 1 x42980000 x42760000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush48 512 catmullrom {cc {f 2080} {px 1 {x43278000 x41d40000 1} {x43260000 x41d40000 x3ebdaf6c} {x43248000 x41d40000 x3ed2348d} {x43230000 x41d80000 x3eee3b8f} {x431d0000 x41f00000 x3f0360d8} {x43178000 x420c0000 x3f056158} {x43138000 x42180000 x3f082209} {x430f0000 x421e0000 x3f16a5a9} {x430b0000 x421e0000 x3f1f67da} {x43030000 x421c0000 x3f24691a} {x42fa0000 x42160000 x3f2769da} {x42ea0000 x420e0000 x3f286a1b} {x42df0000 x420a0000 x3f292a4b} {x42d60000 x42060000 x3f29aa6b} {x42ce0000 x42040000 x3f29ea7b} {x42c90000 x42020000 x3f29aa6b} {x42c70000 x42020000 x3f26e9ba} {x42c50000 x42040000 x3f26e9ba} {x42c00000 x41fc0000 x3f27a9ea} {x42bd0000 x41f80000 x3f27e9fa} {x42b70000 x41ec0000 x3f29aa6b} {x42ab0000 x41cc0000 x3f2aeabb} {x429d0000 x41a80000 x3f2aaaab} {x42920000 x41880000 x3f2a2a8b} {x42890000 x41680000 x3f21685a} {x428b0000 x41680000 x3e7f3fd0} {x428e0000 x41780000 0}}} {tx 1 x42e71c72 x41ece38e} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush47 512 catmullrom {cc {f 2080} {px 1 {x434f0000 x41940000 1} {x434e0000 x41940000 x3ed1b46d} {x434f0000 x41980000 x3f00a028} {x43510000 x419c0000 x3f00e038} {x43580000 x41a40000 x3f022088} {x435d0000 x41900000 x3f0b62d9} {x43600000 x41800000 x3f166599} {x43648000 x41780000 x3f1765d9} {x436c0000 x41840000 x3f1aa6aa} {x43720000 x41900000 x3f1b66da} {x43788000 x41a00000 x3f1ae6ba} {x437d8000 x41bc0000 x3f1c270a} {x43800000 x41d40000 x3f1ce73a} {x43804000 x41f40000 x3f1da76a} {x43828000 x42080000 x3f1de77a} {x43858000 x420e0000 x3f1de77a} {x4388c000 x420e0000 x3f1e278a} {x438c8000 x41fc0000 x3f21a86a} {x438ec000 x41e00000 x3f23a8ea} {x43918000 x41b00000 x3f27a9ea} {x43930000 x41880000 x3f28ea3b} {x43950000 x41480000 x3f292a4b} {x43970000 x41280000 x3f28aa2b} {x439a4000 x41180000 x3f23a8ea} {x439dc000 x41180000 x3f022088} {x43a24000 x41080000 0}}} {tx 1 x43811627 x41a47627} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush46 512 catmullrom {cc {f 2080} {px 1 {x43f48000 x42820000 1} {x43f40000 x42820000 x3ed334cd} {x43f38000 x42830000 x3ed334cd} {x43f18000 x42840000 x3ee6398e} {x43efc000 x42880000 x3efa3e90} {x43ed0000 x428f0000 x3f0320c8} {x43ebc000 x42940000 x3f0360d8} {x43eb0000 x429a0000 x3f042108} {x43e9c000 x429e0000 x3f046118} {x43e88000 x42a00000 x3f04e138} {x43e6c000 x42a20000 x3f05e178} {x43e48000 x42a30000 x3f0c6319} {x43e14000 x42a30000 x3f122489} {x43dd0000 x42a10000 x3f166599} {x43d78000 x42990000 x3f21685a} {x43d44000 x42950000 x3f25695a} {x43d1c000 x42920000 x3f25e97a} {x43cd8000 x428b0000 x3f26699a} {x43c98000 x42870000 x3f26a9aa} {x43c5c000 x42840000 x3f26a9aa} {x43c1c000 x42810000 x3f26699a} {x43bf8000 x42820000 x3f21284a} {x43bf8000 x42840000 x3f1e679a} {x43be0000 x42840000 x3f1ce73a} {x43b9c000 x42800000 x3f1ce73a} {x43b58000 x42760000 x3f1f67da} {x43b0c000 x426a0000 x3f20a82a} {x43acc000 x425c0000 x3f20e83a} {x43ab8000 x42540000 x3f20e83a} {x43aa8000 x424e0000 x3f1b26ca} {x43a80000 x424a0000 0}}} {tx 1 x43d298c6 x4288a529} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush45 512 catmullrom {cc {f 2080} {px 1 {x43950000 x42620000 1} {x43944000 x42600000 x3e6b3acf} {x4393c000 x425e0000 x3e842108} {x43934000 x425c0000 x3ead2b4b} {x43934000 x42580000 x3ebc2f0c} {x43954000 x42560000 x3ec2308c} {x4398c000 x42580000 x3ec2b0ac} {x439e0000 x42600000 x3ec5314c} {x439f0000 x42620000 x3ec5314c} {x439f0000 x425a0000 x3ee6398e} {x43a00000 x424c0000 x3ef8be30} {x43a2c000 x42400000 x3efbbef0} {x43a5c000 x423a0000 x3efdbf70} {x43aa4000 x42380000 x3efe3f90} {x43b04000 x42360000 x3efebfb0} {x43b3c000 x42320000 x3f002008} {x43b58000 x421a0000 x3f056158} {x43b60000 x42060000 x3f0ca329} {x43b7c000 x41f00000 x3f0de379} {x43b88000 x41ec0000 x3f0de379} {x43bb0000 x41dc0000 x3f0ca329} {x43bc8000 x41cc0000 x3f096259} {x43bd0000 x41c80000 x3f092249} {x43bf0000 x41c00000 x3f086219} {x43c1c000 x41c00000 x3f03a0e8} {x43c40000 x41c40000 x3f02e0b8} {x43c70000 x41d40000 x3f02a0a8} {x43c9c000 x41e80000 x3f02a0a8} {x43cc0000 x41fc0000 x3f02a0a8} {x43cc8000 x42000000 x3f02a0a8} {x43cdc000 x42060000 x3f02a0a8} {x43cec000 x42100000 x3f02e0b8} {x43d00000 x42200000 x3f0320c8} {x43d0c000 x422e0000 x3f0360d8} {x43d28000 x42380000 x3f03a0e8} {x43d44000 x423a0000 x3f03a0e8} {x43d68000 x423a0000 x3f03a0e8} {x43d88000 x423a0000 x3f042108} {x43dbc000 x423c0000 x3f046118} {x43dd0000 x423c0000 x3f046118} {x43e24000 x423e0000 x3f042108} {x43e7c000 x423e0000 x3f046118} {x43ea4000 x42340000 x3f046118} {x43ebc000 x422a0000 x3f04e138} {x43ef0000 x422c0000 x3f016058} {x43f30000 x42340000 x3eddb76e} {x43f68000 x423a0000 0}}} {tx 1 x43bf7678 x4228cefb} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush44 512 catmullrom {cc {f 2080} {px 1 {x42ec0000 x43028000 1} {x42ec0000 x43038000 x3ebeafac} {x42f10000 x43048000 x3eca328d} {x43020000 x43040000 x3eedbb6f} {x430b0000 x43008000 x3efc3f10} {x43168000 x42f40000 x3f096259} {x43210000 x42e70000 x3f10e439} {x432e8000 x42d80000 x3f162589} {x43368000 x42ce0000 x3f17e5f9} {x43398000 x42c20000 x3f2328ca} {x43390000 x42b50000 x3f32acab} {x43398000 x42b10000 x3f34ed3b} {x433d8000 x42b00000 x3f31ec7b} {x433f0000 x42af0000 x3f2f6bdb} {x43410000 x42b10000 x3f2a2a8b} {x43468000 x42b90000 x3f26e9ba} {x434e8000 x42c30000 x3f20a82a} {x43550000 x42cd0000 x3f20280a} {x435c0000 x42d80000 x3f20280a} {x43658000 x42e70000 x3f20681a} {x436e0000 x42ee0000 x3f20280a} {x43788000 x42ef0000 x3f20681a} {x43810000 x42ea0000 x3f22689a} {x43858000 x42df0000 x3f22a8aa} {x43864000 x42dc0000 x3f22e8ba} {x43890000 x42cd0000 x3f25294a} {x438ac000 x42b90000 x3f27e9fa} {x438c0000 x42ad0000 x3f28aa2b} {x438d8000 x42a50000 x3f28aa2b} {x438f0000 x42a30000 x3f20e83a} {x438fc000 x42a70000 x3f142509} {x43920000 x42b10000 x3ecdb36d} {x43934000 x42b40000 0}}} {tx 1 x43558000 x42d0ba2f} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush43 512 catmullrom {cc {f 2080} {px 1 {x42620000 x43218000 x3e152549} {x42620000 x43228000 x3eb2acab} {x42640000 x43238000 x3f046118} {x42620000 x43248000 x3f0ca329} {x425c0000 x43268000 x3f102409} {x424a0000 x432a0000 x3f11e479} {x422a0000 x432d0000 x3f156559} {x42040000 x43308000 x3f19665a} {x41d80000 x43328000 x3f19a66a} {x41bc0000 x43368000 x3f19665a} {x41b40000 x433a8000 x3f18a62a} {x41b40000 x433f8000 x3f18260a} {x41bc0000 x43460000 x3f166599} {x41bc0000 x434b0000 x3f1765d9} {x41bc0000 x43510000 x3f18e63a} {x41c80000 x43560000 x3f19665a} {x41dc0000 x435c8000 x3f1a268a} {x41f40000 x43628000 x3f1ba6ea} {x420a0000 x43680000 x3f1be6fa} {x420e0000 x436b0000 x3f1c270a} {x420e0000 x436e0000 x3f1ce73a} {x420e0000 x43728000 x3f1ce73a} {x420e0000 x43758000 x3f1ce73a} {x420a0000 x43790000 x3f1ce73a} {x42060000 x437a8000 x3f1ce73a} {x42020000 x437c0000 x3f1c671a} {x41e40000 x437c8000 x3f1ce73a} {x41b00000 x437c8000 x3f1ce73a} {x41a80000 x437c8000 x3f1c671a} {x41a00000 x437c8000 x3f1725c9} {x41940000 x437c8000 x3f1725c9} {x41380000 x437c0000 x3f1765d9} {x40600000 x437a8000 x3ef1bc6f} {x40400000 x43798000 x3e6e3b8f}}} {tx 1 x41f9c3c4 x4356e969} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush42 512 catmullrom {cc {f 2080} {px 1 {x43824000 x43800000 1} {x4381c000 x43800000 x3e8320c8} {x43844000 x437d0000 x3ef9be70} {x43868000 x437b8000 x3f05e178} {x438c0000 x43788000 x3f0ca329} {x438d8000 x43780000 x3f0d6359} {x43924000 x43748000 x3f0e2389} {x43954000 x43708000 x3f0e6399} {x43974000 x436b0000 x3f0ee3b9} {x4398c000 x43680000 x3f0ee3b9} {x439c4000 x43668000 x3f0ea3a9} {x439f8000 x43668000 x3f0d6359} {x43a0c000 x43668000 x3f0b22c9} {x439fc000 x43640000 x3f0a6299} {x439c4000 x43608000 x3f0ae2b9} {x43974000 x435c0000 x3f0ba2e9} {x4394c000 x43590000 x3f0ca329} {x43938000 x43578000 x3f0d6359} {x43918000 x43578000 x3f0ee3b9} {x438e4000 x43588000 x3f112449} {x438a8000 x43598000 x3f12a4a9} {x43870000 x435b0000 x3f12e4b9} {x43824000 x435b8000 x3f126499} {x437c8000 x435a0000 x3f11e479} {x436f0000 x43558000 x3f11e479} {x43640000 x43510000 x3f10e439} {x435a8000 x434c0000 x3f106419} {x43550000 x43480000 x3f0f63d9} {x43510000 x43450000 x3f0be2f9} {x434e8000 x43428000 x3f0aa2a9} {x434e0000 x43410000 x3f06e1b8} {x434e0000 x433e8000 x3f05e178} {x434d8000 x433b0000 x3f062188} {x434b8000 x43378000 x3f05e178} {x434c8000 x43358000 x3f05e178} {x43520000 x43330000 x3f046118} {x43598000 x432f8000 x3f0360d8} {x43638000 x432c0000 x3f0320c8} {x43668000 x43298000 x3f0320c8} {x43670000 x43280000 x3f03a0e8} {x435e8000 x43250000 x3f056158} {x43520000 x43228000 x3f066198} {x433f0000 x431f8000 x3f0a6299} {x43338000 x431e8000 x3f0ca329} {x432a0000 x431e8000 x3f0d2349} {x43250000 x431f8000 x3f0d2349} {x43230000 x431f8000 x3f0ba2e9} {x43220000 x431f8000 x3f07a1e8} {x43208000 x431d0000 x3f06e1b8} {x431e0000 x43170000 x3f0761d8} {x431e0000 x43120000 x3f07e1f8} {x431b8000 x430b0000 x3f0761d8} {x43130000 x43060000 x3ed2b4ad} {x430f8000 x43050000 0}}} {tx 1 x436c871c x4346a84c} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush41 512 catmullrom {cc {f 2080} {px 1 {x43b34000 x43b54000 x3e25294a} {x43b2c000 x43b54000 x3ebc2f0c} {x43b2c000 x43b5c000 x3ec2308c} {x43b24000 x43b68000 x3ec4b12c} {x43b00000 x43b88000 x3ec9b26d} {x43aac000 x43bb4000 x3ece338d} {x43a4c000 x43bc4000 x3eed3b4f} {x439d8000 x43bc4000 x3f066198} {x439a0000 x43bc4000 x3f0a6299} {x4397c000 x43bc4000 x3f0c6319} {x4395c000 x43bc4000 x3f09a269} {x43958000 x43bd0000 x3f05a168} {x4394c000 x43bf0000 x3f05a168} {x43934000 x43c10000 x3f05a168} {x43918000 x43c40000 x3f05a168} {x43910000 x43c60000 x3f046118} {x43900000 x43c78000 x3ef5bd6f} {x438f4000 x43c88000 x3ed8360e} {x438e8000 x43c94000 x3edc370e} {x438d8000 x43cac000 x3eecbb2f} {x438d8000 x43ccc000 x3ef63d8f} {x438d8000 x43cd8000 x3efa3e90} {x438d8000 x43cf8000 x3f016058} {x438d4000 x43d18000 x3f0721c8} {x438d4000 x43d34000 x3f0aa2a9} {x438dc000 x43d3c000 x3f0b62d9} {x43918000 x43d48000 x3f0f63d9} {x43950000 x43d58000 x3f0fe3f9} {x43974000 x43d68000 x3f106419} {x4397c000 x43d8c000 x3f106419} {x43974000 x43db4000 x3f0ae2b9} {x43970000 x43de0000 x3f09e279} {x43980000 x43df8000 x3f09a269} {x439a8000 x43e18000 x3edcb72e} {x439c4000 x43e34000 0}}} {tx 1 x439915f1 x43c9057c} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush40 512 catmullrom {cc {f 2080} {px 1 {x43adc000 x43478000 1} {x43ad4000 x43478000 x3ea328ca} {x43adc000 x43478000 x3ea328ca} {x43ae4000 x43480000 x3ea3a8ea} {x43afc000 x43490000 x3ea328ca} {x43b30000 x434b0000 x3e8ca329} {x43b7c000 x434e0000 x3e5c370e} {x43ba8000 x434f0000 x3e54350d} {x43bc0000 x434f0000 x3e51344d} {x43bd8000 x434e8000 x3e753d4f} {x43bfc000 x434e0000 x3e882209} {x43c40000 x434e0000 x3e952549} {x43c74000 x434f0000 x3e94a529} {x43ca8000 x434f8000 x3e91a469} {x43cd0000 x43508000 x3e91a469} {x43d00000 x43528000 x3e922489} {x43d24000 x43540000 x3e8d2349} {x43d50000 x43568000 x3e882209} {x43d6c000 x43598000 x3e84a128} {x43d8c000 x435c0000 x3e85a168} {x43da8000 x435f0000 x3e85a168} {x43dc0000 x43618000 x3e882209} {x43dd8000 x43640000 x3e8e2389} {x43e04000 x43660000 x3ea2a8aa} {x43e4c000 x43690000 x3ea3a8ea} {x43e78000 x436b0000 x3ea3a8ea} {x43e84000 x436d8000 x3ea729ca} {x43e7c000 x43700000 x3eba2e8c} {x43e5c000 x43740000 x3ecab2ad} {x43e38000 x437a8000 x3ed5b56d} {x43e2c000 x437e0000 x3edab6ae} {x43e2c000 x4380c000 x3eddb76e} {x43e2c000 x43820000 x3edf37ce} {x43e24000 x4383c000 x3ee0380e} {x43e24000 x43854000 x3ee0b82e} {x43e28000 x43874000 x3ee0b82e} {x43e28000 x43888000 x3ee1384e} {x43e04000 x43898000 x3ee4b92e} {x43ddc000 x438b0000 x3eee3b8f} {x43dac000 x438c8000 x3eef3bcf} {x43d54000 x438e0000 x3ef6bdaf} {x43d28000 x438f0000 x3efbbef0} {x43d04000 x43908000 x3ef03c0f} {x43ce4000 x43914000 x3ed0b42d} {x43c80000 x43910000 x3ed2b4ad} {x43c04000 x438f8000 x3ee2b8ae} {x43ba4000 x438e4000 x3eef3bcf} {x43b88000 x438e0000 x3efe3f90} {x43b90000 x438e8000 x3efcbf30} {x43b98000 x438ec000 x3efdbf70} {x43bc8000 x43904000 x3efdbf70} {x43c04000 x43920000 x3ef93e50} {x43c40000 x43940000 x3eeb3acf} {x43c68000 x43958000 x3ee9ba6f} {x43c98000 x43970000 x3ee8ba2f} {x43cc0000 x4397c000 x3ee83a0f} {x43cf4000 x43988000 x3ee7b9ee} {x43d34000 x4399c000 x3ee7b9ee} {x43d4c000 x439a4000 x3ee3b8ee} {x43d5c000 x439ac000 x3ee1384e} {x43d7c000 x439c0000 x3ebcaf2c} {x43d8c000 x439d0000 0}}} {tx 1 x43ce77be x437cb18c} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40f00000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush39 512 catmullrom {cc {f 2080} {px 1 {x43afc000 x428a0000 1} {x43b04000 x428a0000 x3ead2b4b} {x43b20000 x428d0000 x3ebc2f0c} {x43b74000 x42960000 x3eceb3ad} {x43c00000 x42a10000 x3ecd334d} {x43c38000 x42a20000 x3ec6b1ac} {x43c6c000 x42a10000 x3ed6b5ad} {x43cac000 x42a10000 x3ef4bd2f} {x43d0c000 x42ac0000 x3ef83e10} {x43d40000 x42b90000 x3ef7bdef} {x43d70000 x42cc0000 x3ef6bdaf} {x43db0000 x42d80000 x3eef3bcf} {x43dfc000 x42de0000 x3eedbb6f} {x43e48000 x42e00000 x3eed3b4f} {x43e7c000 x42dc0000 x3eedbb6f} {x43e9c000 x42cf0000 x3ef3bcef} {x43ecc000 x42c80000 x3f00e038} {x43f24000 x42c00000 x3efcbf30} {x43f58000 x42bd0000 x3ed9364e} {x43f78000 x42bc0000 0}}} {tx 1 x43d45666 x42b58ccd} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40200000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush38 512 catmullrom {cc {f 2080} {px 1 {x42960000 x433a8000 1} {x42950000 x433b8000 x3e6b3acf} {x42920000 x433d0000 x3e85a168} {x42910000 x43400000 x3e9b26ca} {x42910000 x43428000 x3eadab6b} {x42930000 x43430000 x3ec0300c} {x429f0000 x43440000 x3ed4b52d} {x42a80000 x43460000 x3ed5b56d} {x42aa0000 x43478000 x3ed6b5ad} {x42a90000 x43498000 x3ed9b66e} {x42a70000 x434c8000 x3edcb72e} {x42a40000 x434e0000 x3edeb7ae} {x42a00000 x434e8000 x3ee5394e} {x429e0000 x434f0000 x3ee5b96e} {x429c0000 x434f0000 x3ed7b5ed}}} {tx 1 x429cddde x43460889} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40200000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush37 512 catmullrom {cc {f 2080} {px 1 {x42fc0000 x42660000 1} {x42f90000 x42660000 x3eb3aceb} {x42f20000 x42660000 x3ea1284a} {x42e90000 x42680000 x3eb82e0c} {x42de0000 x426e0000 x3ebfafec} {x42d30000 x42720000 x3ec1b06c} {x42be0000 x42740000 x3ed6b5ad} {x42aa0000 x426e0000 x3ef63d8f} {x42990000 x42640000 x3f002008} {x42910000 x425c0000 x3f00a028} {x428b0000 x42520000 x3f016058} {x42890000 x424c0000 x3f02a0a8} {x42840000 x42380000 x3f0ae2b9} {x42820000 x42220000 x3f0fa3e9} {x427a0000 x420a0000 x3f1324c9} {x426a0000 x41f80000 x3f142509} {x424e0000 x41e00000 x3f14e539} {x42240000 x41d00000 x3f142509} {x41f40000 x41c00000 x3e9da76a}}} {tx 1 x42a2ca1b x4240f287} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40200000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush36 512 catmullrom {cc {f 2080} {px 1 {x42660000 x42d60000 1} {x426c0000 x42d60000 x3eb3aceb} {x42700000 x42d60000 x3eb8ae2c} {x427c0000 x42d70000 x3ed0340d} {x42820000 x42d80000 1} {x428a0000 x42da0000 x3ed2b4ad} {x429b0000 x42df0000 x3eda368e} {x42a80000 x42df0000 x3edc370e} {x42aa0000 x42d60000 x3ee5b96e} {x42aa0000 x42cb0000 x3f00e038} {x42ab0000 x42c90000 x3f02a0a8} {x42b40000 x42c20000 x3f042108} {x42c40000 x42bb0000 x3f022088} {x42db0000 x42b40000 x3efdbf70} {x42ec0000 x42ac0000 x3efe3f90} {x42f90000 x42a30000 x3efebfb0} {x43020000 x429d0000 x3f02e0b8} {x430c0000 x42990000 x3f042108} {x43158000 x42960000 x3f03a0e8} {x431a8000 x42920000 x3f0360d8} {x431e0000 x428c0000 x3f0a6299} {x43208000 x42860000 x3f0f23c9} {x43220000 x427a0000 x3f16a5a9} {x43250000 x42700000 x3f19665a} {x432b8000 x42620000 x3f19a66a} {x43318000 x425a0000 x3f19e67a} {x433b0000 x424c0000 x3f1a268a} {x43420000 x423e0000 x3f1a669a} {x43470000 x422e0000 x3f1aa6aa} {x434a8000 x42260000 x3f1ae6ba} {x434f0000 x42200000 x3f1b26ca} {x43540000 x421e0000 x3f1ae6ba} {x43578000 x421c0000 x3f1ae6ba} {x435b0000 x421a0000 x3f12e4b9} {x435e8000 x421a0000 x3e91a469}}} {tx 1 x4307edb7 x42990750} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40200000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush35 512 catmullrom {cc {f 2080} {px 1 {xc0000000 x43a90000 1} {xc0400000 x43a90000 x3ea0280a} {xc0400000 x43a9c000 x3e9ba6ea} {xc0400000 x43aa4000 x3ea8aa2b} {0 x43ab4000 x3eb5ad6b} {x40f00000 x43ad0000 x3ec4310c} {x41a00000 x43ad8000 x3ed3b4ed} {x41e00000 x43ac4000 x3edb36ce} {x42000000 x43aa4000 x3ee83a0f} {x420e0000 x43a88000 x3ef33ccf} {x421e0000 x43a80000 x3ef5bd6f} {x42320000 x43a80000 x3ef4bd2f} {x42420000 x43a7c000 x3ef3bcef} {x42520000 x43a74000 x3ef2bcaf} {x42540000 x43a54000 x3ef43d0f} {x424a0000 x43a2c000 x3efe3f90} {x42460000 x43a10000 x3effbff0} {x423e0000 x439f4000 x3eff3fd0} {x42320000 x439d4000 x3eff3fd0} {x42260000 x439b4000 x3effbff0} {x421c0000 x43990000 x3f02a0a8} {x421a0000 x43978000 x3f05e178} {x421e0000 x43964000 x3f06a1a8} {x423a0000 x43954000 x3f05a168} {x425e0000 x43944000 x3ef63d8f} {x426e0000 x43938000 x3eb02c0b} {x42760000 x43934000 x3e312c4b} {x42760000 x43924000 x3d9a268a} {x427a0000 x4391c000 x3dc6318c} {x42840000 x43914000 x3dcc330d} {x428b0000 x4390c000 x3df23c8f} {x42900000 x438fc000 x3dd2348d} {x42920000 x438f4000 0}}} {tx 1 x4220f83e x439f3a2f} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40200000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush34 512 catmullrom {cc {f 2080} {px 1 {x43008000 x43b8c000 1} {x42fe0000 x43b90000 x3e96a5a9} {x42f80000 x43b9c000 x3ea4290a} {x42ed0000 x43ba4000 x3eceb3ad} {x42e00000 x43ba8000 x3ede378e} {x42d50000 x43bb8000 x3ede378e} {x42d20000 x43bdc000 x3ec7b1ec} {x42d20000 x43bf4000 x3ec2308c} {x42ce0000 x43c0c000 x3ebe2f8c} {x42c70000 x43c24000 x3ebd2f4c} {x42c30000 x43c38000 x3ebdaf6c} {x42be0000 x43c54000 x3ebdaf6c} {x42b80000 x43c64000 x3ebdaf6c} {x42af0000 x43c70000 x3ec4b12c} {x42970000 x43c7c000 x3ee9ba6f} {x426a0000 x43c78000 x3f05a168} {x424c0000 x43c74000 x3f09a269} {x42460000 x43c7c000 x3f016058} {x423e0000 x43ca0000 x3d7c3f10}}} {tx 1 x42bbaf28 x43c15e51} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40200000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush33 512 catmullrom {cc {f 2080} {px 1 {x431a8000 x43d68000 1} {x43198000 x43d64000 x3e5735cd} {x43178000 x43d5c000 x3e97a5e9} {x43138000 x43d50000 x3ec6318c} {x430f0000 x43d44000 x3ee83a0f} {x430c8000 x43d44000 x3eeebbaf} {x430a0000 x43d44000 x3eefbbef} {x43090000 x43d38000 x3edb36ce} {x43090000 x43d2c000 x3edb36ce} {x430a0000 x43d18000 x3edbb6ee} {x43128000 x43d0c000 x3edab6ae} {x43150000 x43d0c000 x3edab6ae} {x431a8000 x43cfc000 x3eda368e} {x431b8000 x43cd8000 x3eddb76e} {x431a0000 x43cbc000 x3ee83a0f} {x431a8000 x43cb0000 x3ef0bc2f} {x43230000 x43ca8000 x3ef5bd6f} {x43280000 x43c98000 x3ef53d4f} {x43288000 x43c84000 x3ef5bd6f} {x43280000 x43c70000 x3ef83e10} {x432c0000 x43c6c000 x3efabeb0} {x432f0000 x43c6c000 x3efdbf70} {x433d0000 x43c70000 x3efdbf70} {x43448000 x43c6c000 x3ef93e50} {x43450000 x43c58000 x3ef93e50} {x43450000 x43c48000 x3efa3e90} {x43468000 x43c40000 x3ef33ccf} {x43480000 x43c40000 x3ef23c8f} {x43488000 x43c38000 x3ef0bc2f} {x434a0000 x43c2c000 x3eee3b8f} {x434c8000 x43c1c000 x3eed3b4f} {x434d8000 x43c14000 x3eeb3acf} {x43518000 x43c00000 x3ee0b82e} {x43568000 x43be0000 x3eda368e} {x435a0000 x43bcc000 x3ec7b1ec} {x435d8000 x43bc0000 x3e1b26ca}}} {tx 1 x432cdc72 x43ca471c} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40200000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush32 512 catmullrom {cc {f 2080} {px 1 {x438a4000 x43e30000 1} {x43884000 x43e28000 x3ea6298a} {x4386c000 x43e20000 x3eb7adeb} {x4385c000 x43e1c000 x3ecc330d} {x43854000 x43e1c000 x3ed6b5ad} {x43848000 x43e18000 0}}} {tx 1 x4386caab x43e21555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40200000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush31 512 catmullrom {cc {f 2080} {px 1 {x43cdc000 x43e04000 1} {x43ce8000 x43e08000 x3e40300c} {x43cf0000 x43e0c000 x3e46318c} {x43d14000 x43e18000 x3e6739ce} {x43d54000 x43e2c000 x3e8b22c9} {x43d84000 x43e40000 x3e91a469} {x43d94000 x43e54000 x3e99264a} {x43d88000 x43e74000 x3ea328ca} {x43d70000 x43e84000 x3ec0b02c} {x43d48000 x43e8c000 x3ee4390e} {x43d2c000 x43e90000 x3ee8ba2f} {x43d08000 x43e94000 x3ee6398e} {x43cb0000 x43e98000 x3ec3b0ec} {x43c3c000 x43e8c000 x3e753d4f} {x43ba0000 x43e84000 x3e322c8b} {x43b5c000 x43e84000 x3e352d4b} {x43b54000 x43e84000 0}}} {tx 1 x43cd12d3 x43e5e969} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40200000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush30 512 catmullrom {cc {f 2080} {px 1 {x43c2c000 x43ce8000 1} {x43c38000 x43ce4000 1} {x43c44000 x43ce4000 x3dd6358d} {x43c14000 x43ce0000 x3eb92e4c} {x43c00000 x43cdc000 x3ec9324d} {x43bcc000 x43cdc000 x3ee6398e} {x43b74000 x43cd4000 x3f0721c8} {x43b28000 x43cd0000 x3f0de379} {x43b0c000 x43ccc000 x3f0de379} {x43aec000 x43cc8000 x3f0ba2e9} {x43ae0000 x43cc8000 1} {x43aa4000 x43cc0000 x3f09e279} {x43a6c000 x43cb8000 x3f07a1e8} {x43a30000 x43cb8000 x3f0320c8} {x43a0c000 x43cb8000 x3eff3fd0} {x439fc000 x43cd4000 x3eee3b8f} {x439fc000 x43cf8000 x3ed9b66e} {x43a08000 x43d18000 x3ed7b5ed} {x43a04000 x43d24000 x3ee338ce} {x439e4000 x43d24000 x3ef3bcef} {x439dc000 x43d24000 x3ef53d4f} {x439c4000 x43d24000 x3efb3ed0} {x439c0000 x43d2c000 x3efdbf70} {x439c0000 x43d48000 x3efabeb0} {x439d0000 x43d60000 x3ef8be30} {x439fc000 x43d74000 x3ef8be30} {x43a20000 x43d84000 x3ef8be30} {x43a50000 x43d90000 x3efa3e90} {x43a80000 x43d94000 x3efa3e90} {x43ac0000 x43da0000 x3efabeb0} {x43af4000 x43da8000 x3efa3e90} {x43b1c000 x43db4000 x3ef5bd6f} {x43b3c000 x43dc4000 x3ec2b0ac} {x43b68000 x43dd4000 x3e693a4f} {x43b78000 x43dd4000 0}}} {tx 1 x43abdf16 x43d24750} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40200000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush29 512 catmullrom {cc {f 2080} {px 1 {x43d54000 x43ae0000 1} {x43d54000 x43aec000 x3e1f27ca} {x43d54000 x43af4000 x3e1f27ca} {x43d54000 x43b00000 x3e162589} {x43d48000 x43b24000 x3e4330cc} {x43d30000 x43b30000 x3e7f3fd0} {x43d28000 x43b30000 0}}} {tx 1 x43d46db7 x43b09b6e} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40200000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush28 512 catmullrom {cc {f 2080} {px 1 {x43878000 x43924000 1} {x43878000 x43930000 x3e9fa7ea} {x4387c000 x43938000 x3ea3a8ea} {x4388c000 x43944000 x3ea729ca} {x438d0000 x4396c000 x3ea729ca} {x43934000 x43998000 x3e9da76a} {x4396c000 x439a8000 x3e9324c9} {x43990000 x439ac000 x3e9324c9} {x439ac000 x439a0000 x3eacab2b} {x439fc000 x43998000 x3ebd2f4c} {x43a64000 x4399c000 x3ec0300c} {x43ab8000 x439a0000 x3ec0300c} {x43afc000 x439ac000 x3ec0300c} {x43b18000 x439b8000 x3ebfafec} {x43b24000 x439c0000 x3ebdaf6c} {x43b38000 x439d4000 x3eb6adab} {x43b8c000 x439f8000 x3eb42d0b} {x43be0000 x43a18000 x3ea92a4b} {x43c04000 x43a28000 0}}} {tx 1 x43a15af3 x4399ef28} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40200000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush27 512 catmullrom {cc {f 2080} {px 1 {x432c8000 x43468000 1} {x432b8000 x43470000 x3d48320d} {x43278000 x43488000 x3d882209} {x431e8000 x434b0000 x3e64390e} {x43168000 x434d0000 x3e89a269} {x430f0000 x43500000 x3e8da369} {x430d8000 x43528000 x3e84a128} {x43120000 x43570000 x3e733ccf} {x43138000 x43578000 0}}} {tx 1 x431b638e x434e1c72} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40200000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush26 512 catmullrom {cc {f 2080} {px 1 {x43964000 x43348000 1} {x43954000 x43348000 x3eaf2bcb} {x43948000 x43350000 x3eb12c4b} {x4392c000 x43368000 x3ec2308c} {x43904000 x43398000 x3ed0340d} {x438e0000 x433b8000 x3ecd334d} {x438bc000 x433e0000 x3ecc330d} {x43898000 x43400000 x3ecd334d} {x43870000 x43418000 x3ec2b0ac} {x4383c000 x43438000 x3ebaaeac} {x43818000 x43440000 x3ebe2f8c} {x437e8000 x43440000 x3ecbb2ed} {x437b0000 x43430000 x3ecdb36d} {x43780000 x43420000 x3ed0340d} {x43750000 x43420000 x3ed1b46d} {x436f8000 x43440000 x3ed1b46d} {x43690000 x43450000 x3ecab2ad} {x435f8000 x43460000 x3eb3aceb} {x43518000 x43470000 x3ea6a9aa} {x43438000 x43468000 x3ea92a4b} {x43408000 x43460000 x3eaa2a8b} {x43378000 x43438000 x3eb5ad6b} {x43310000 x43418000 x3eb7adeb} {x43300000 x43418000 x3e93a4e9} {x43300000 x43428000 0}}} {tx 1 x43748a3d x434047ae} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40200000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush25 512 catmullrom {cc {f 2080} {px 1 {x437e0000 x43260000 1} {x43800000 x43260000 x3e49324d} {x43810000 x43260000 x3e64390e} {x4383c000 x43270000 x3e80a028} {x4385c000 x43280000 x3e86a1a8} {x43868000 x43280000 x3e8320c8} {x43880000 x43278000 x3e842108} {x43894000 x43270000 x3e86a1a8} {x438a4000 x43258000 x3e8ca329} {x438b4000 x43240000 x3e912449} {x438c4000 x43220000 x3e96a5a9} {x438c8000 x43208000 x3e99264a} {x438c8000 x431e8000 x3ea2288a} {x438d8000 x431c0000 x3ea92a4b} {x438fc000 x431b0000 x3eaa2a8b} {x4391c000 x431b0000 x3ea5a96a} {x43930000 x431b0000 x3ea6298a} {x43948000 x431a0000 x3eac2b0b} {x43958000 x43198000 x3eb42d0b} {x43964000 x43198000 x3ebeafac} {x4397c000 x43190000 x3ec6b1ac} {x43994000 x43178000 x3ece338d} {x439ac000 x43160000 x3ede378e} {x439c8000 x43158000 x3eedbb6f} {x439f0000 x43158000 x3ef0bc2f} {x43a00000 x43158000 x3ef23c8f} {x43a14000 x43150000 x3ef43d0f} {x43a3c000 x43140000 x3ef43d0f} {x43a9c000 x43128000 x3ef3bcef} {x43ae0000 x430f8000 x3ef1bc6f} {x43b0c000 x430d0000 x3ee338ce} {x43b24000 x430a0000 x3eceb3ad} {x43b2c000 x43080000 x3ecab2ad} {x43b40000 x43060000 x3ec0300c} {x43b64000 x43048000 x3eb62d8b} {x43ba4000 x43028000 x3eb82e0c} {x43bdc000 x43008000 x3eb92e4c} {x43c18000 x42fb0000 x3eb8ae2c} {x43c4c000 x42fa0000 x3eb6adab} {x43c8c000 x42fc0000 x3eb3aceb} {x43cd4000 x42ff0000 x3eb1ac6b} {x43cf8000 x43000000 x3ea729ca} {x43d1c000 x43008000 x3ea328ca} {x43d30000 x42ff0000 x3e91a469} {x43d54000 x42fd0000 x3e46318c} {x43d60000 x42fd0000 0}}} {tx 1 x43a342c8 x4313d0b2} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x40200000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush24 512 catmullrom {cc {f 2080} {px 1 {x43bdc000 x42040000 x3e46318c} {x43c08000 x42080000 x3e7a3e90} {x43c38000 x42080000 x3e86a1a8} {x43ca8000 x42080000 x3e902409} {x43d30000 x420a0000 x3e95a569} {x43da0000 x42100000 x3e8c2309} {x43e04000 x42140000 x3e5f37ce} {x43e38000 x42160000 x3e6338ce} {x43e84000 x421a0000 x3e753d4f} {x43ec4000 x42200000 x3e743d0f} {x43efc000 x42280000 x3e6739ce} {x43f3c000 x423a0000 x3e6d3b4f} {x43f84000 x42500000 x3e713c4f} {x43fe8000 x426c0000 x3e7d3f50} {x44010000 x42830000 x3e84a128} {x44022000 x42930000 x3e8c2309} {x44026000 x429e0000 x3e93a4e9} {x44026000 x42a50000 x3e95a569} {x44026000 x42a70000 x3e89a269} {x4402a000 x42a70000 0}}} {tx 1 x43e9e000 x424d199a} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x43240000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush23 512 catmullrom {cc {f 2080} {px 1 {x42ef0000 x42040000 1} {x42e90000 x42080000 x3e5e378e} {x42e40000 x420a0000 x3e5e378e} {x42d90000 x42120000 x3e56358d} {x42d00000 x421c0000 x3e8320c8} {x42c00000 x42220000 x3eaf2bcb} {x42b30000 x42240000 x3ebe2f8c} {x42a20000 x421e0000 x3ec2b0ac} {x42900000 x42160000 x3ec4310c} {x426e0000 x42080000 x3ec6318c} {x42460000 x41f80000 x3ec5314c} {x421e0000 x41d80000 x3ec4310c} {x41dc0000 x41ac0000 x3ec1b06c} {x41800000 x418c0000 x3ec1b06c} {x40600000 x41500000 x3eb5ad6b} {xc0400000 x41080000 0}}} {tx 1 x4288b000 x41f40000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x43240000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush22 512 catmullrom {cc {f 2080} {px 1 {x42680000 x42b70000 1} {x42760000 x42b50000 x3e6739ce} {x428c0000 x42b60000 x3e8ca329} {x42aa0000 x42ba0000 x3ea8aa2b} {x42ce0000 x42bb0000 x3eb5ad6b} {x42e20000 x42b60000 x3eb5ad6b} {x42f10000 x42ac0000 x3eb5ad6b} {x43000000 x429c0000 x3eb9ae6c} {x43058000 x428d0000 x3ebaaeac} {x43100000 x42780000 x3ebbaeec} {x43198000 x42600000 x3ebcaf2c} {x43260000 x42380000 x3ec2308c} {x43310000 x421c0000 x3eccb32d} {x43450000 x41fc0000 x3ed2348d} {x43558000 x41c80000 x3ed0b42d} {x43618000 x41900000 x3ecd334d} {x43678000 x41100000 x3ec5314c} {x43668000 x40000000 x3ecab2ad} {x43650000 xc0400000 x3eda368e} {x436b0000 xc0600000 x3ed4b52d} {x437a8000 xc0000000 x3ec0b02c} {x43838000 xc0400000 x3eb5ad6b} {x4389c000 xc0b00000 x3eae2b8b} {x438e8000 xc1000000 x3eaf2bcb} {x43954000 xc1180000 x3eacab2b} {x439fc000 xc1180000 x3e9a268a} {x43a3c000 xc1100000 0}}} {tx 1 x433caf68 x42172f68} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x43240000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush21 512 catmullrom {cc {f 2080} {px 1 {x43db0000 x43a0c000 1} {x43d9c000 x43a00000 x3e7f3fd0} {x43d88000 x439f0000 x3e80a028} {x43d60000 x439d8000 x3e82a0a8} {x43ce8000 x4399c000 x3e9ba6ea} {x43c58000 x43968000 x3ea4290a} {x43b48000 x43924000 x3ec5314c} {x43a84000 x43908000 x3ecdb36d} {x43a18000 x43904000 x3ed2348d} {x43a08000 x43904000 x3ed2b4ad} {x439f4000 x43904000 x3eca328d} {x439e8000 x438fc000 x3e91a469} {x439e0000 x438f4000 x3e9324c9} {x439c0000 x438d8000 x3e96a5a9} {x43998000 x4389c000 x3e9f27ca} {x43990000 x43870000 x3e9fa7ea} {x43994000 x4383c000 0}}} {tx 1 x43b270f1 x4392f0f1} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x43240000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush20 512 catmullrom {cc {f 2080} {px 1 {x43d5c000 x43e6c000 1} {x43d3c000 x43e68000 x3e862188} {x43d1c000 x43e64000 x3e8b22c9} {x43cd0000 x43e5c000 x3e9ea7aa} {x43c14000 x43e44000 x3eb7adeb} {x43b0c000 x43e14000 x3eb9ae6c} {x43a48000 x43dec000 x3eb42d0b} {x439b0000 x43dd4000 x3eb12c4b} {x43938000 x43db8000 x3ea5294a} {x43908000 x43dac000 x3e98a62a} {x438f8000 x43da8000 x3e8ea3a9} {x438cc000 x43d94000 x3e842108} {x43874000 x43d60000 x3e882209} {x4382c000 x43d34000 x3e8fa3e9} {x4381c000 x43d24000 x3e8320c8} {x43864000 x43d3c000 x3e64390e} {x438bc000 x43d6c000 x3e703c0f} {x438d4000 x43d78000 x3e7f3fd0} {x43928000 x43da0000 x3ea5a96a} {x439b8000 x43dd0000 x3ec2308c} {x43a68000 x43dfc000 x3ec6318c} {x43ac8000 x43df8000 x3eb9ae6c} {x43ae0000 x43dcc000 x3eb4ad2b} {x43aac000 x43d90000 x3eae2b8b} {x43a38000 x43d38000 x3e9f27ca} {x439d4000 x43cf8000 x3ea2a8aa} {x43978000 x43cbc000 x3eb0ac2b} {x43964000 x43c8c000 x3eb1ac6b} {x439c4000 x43c84000 x3eaaaaab} {x43a80000 x43c9c000 x3e9b26ca} {x43b20000 x43cbc000 x3e8fa3e9} {x43c18000 x43cf0000 x3e902409} {x43cd0000 x43d10000 x3e6e3b8f} {x43d6c000 x43d18000 x3e61384e} {x43dcc000 x43d1c000 x3e753d4f} {x43e10000 x43d1c000 x3e822088} {x43e3c000 x43d10000 0}}} {tx 1 x43aaa7c9 x43d79bad} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x43240000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush19 512 catmullrom {cc {f 2080} {px 1 {x4404c000 x43d40000 1} {x44040000 x43d44000 x3e9ba6ea} {x44020000 x43d48000 x3ea6a9aa} {x44000000 x43d5c000 x3ed5354d} {x43fdc000 x43d74000 x3ed6b5ad} {x43fac000 x43d8c000 x3ed9364e} {x43f58000 x43d8c000 x3ee739ce} {x43efc000 x43d78000 x3ee8ba2f} {x43ebc000 x43d74000 x3ee9ba6f} {x43ea8000 x43d80000 x3ee1384e} {x43e80000 x43dac000 x3ed9364e} {x43e34000 x43dc8000 x3ed6b5ad} {x43db0000 x43dc8000 x3edab6ae} {x43d30000 x43da8000 x3ec1304c} {x43cdc000 x43d90000 0}}} {tx 1 x43f00889 x43d81555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x43240000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush18 512 catmullrom {cc {f 2080} {px 1 {x43d9c000 x42f90000 1} {x43d84000 x42f80000 x3ed0340d} {x43d78000 x42f80000 x3ecc330d} {x43d64000 x42f80000 x3eccb32d} {x43d44000 x42f90000 x3ecc330d} {x43d00000 x42fa0000 x3ec6318c} {x43cb4000 x42f80000 x3ec4b12c} {x43c84000 x42f80000 x3ebc2f0c} {x43c58000 x42f80000 x3eb9ae6c} {x43c28000 x42f90000 x3eb5ad6b} {x43c08000 x42f90000 x3eb42d0b} {x43bd0000 x42fa0000 x3eb02c0b} {x43b98000 x42fd0000 x3eb02c0b} {x43b50000 x43000000 x3eb02c0b} {x43acc000 x43038000 x3eac2b0b} {x43a28000 x43078000 x3ea8aa2b} {x439ac000 x430b8000 x3eaa2a8b} {x43950000 x43118000 x3eae2b8b} {x43904000 x431b8000 x3eb1ac6b} {x438d4000 x43230000 x3eb3aceb} {x43888000 x432a8000 x3eb4ad2b} {x43834000 x432e0000 x3eb5ad6b} {x437d0000 x43308000 x3eb5ad6b} {x43748000 x43338000 x3eb7adeb} {x43718000 x43360000 x3eb82e0c} {x43710000 x43370000 x3eb8ae2c} {x43718000 x43348000 x3eb9ae6c} {x43748000 x432d8000 x3ebaaeac} {x437b0000 x43280000 x3ebc2f0c} {x43858000 x43230000 x3ebcaf2c} {x43910000 x43230000 x3ebc2f0c} {x439d4000 x43230000 x3ebcaf2c} {x43a9c000 x431e0000 x3e9b26ca} {x43af0000 x43180000 x3e693a4f} {x43b00000 x43168000 x3e6739ce} {x43b5c000 x43118000 x3e65394e} {x43bd8000 x430e0000 x3e4330cc} {x43c6c000 x430b0000 x3e312c4b} {x43cb8000 x43078000 x3e46318c} {x43ce8000 x43038000 x3e6739ce} {x43cf8000 x43018000 x3e5a368e} {x43d10000 x43018000 x3e2c2b0b} {x43d2c000 x43030000 x3cd0340d} {x43d60000 x43050000 0}}} {tx 1 x43ae0000 x4310c8ba} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x43240000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush17 512 catmullrom {cc {f 2080} {px 1 {x41600000 x43c58000 1} {x41600000 x43c60000 1} {x41700000 x43c70000 x3e6739ce} {x41840000 x43c70000 x3e80a028} {x41940000 x43c70000 x3e8fa3e9} {x41b00000 x43c70000 x3ea1a86a} {x41f40000 x43c6c000 x3ea3a8ea} {x42260000 x43c64000 x3ea4290a} {x42380000 x43c50000 x3e9fa7ea} {x42400000 x43c30000 x3e9e278a} {x42480000 x43c14000 x3e9e278a} {x424a0000 x43bfc000 x3e9e278a} {x42500000 x43bdc000 x3e9e278a} {x42500000 x43bc0000 x3e9ea7aa} {x424a0000 x43b98000 x3ea1284a} {x42380000 x43b74000 x3ea6298a} {x42260000 x43b40000 x3ea92a4b} {x421c0000 x43b18000 x3ea92a4b} {x421a0000 x43aec000 x3ea6a9aa} {x42220000 x43ad0000 x3ea2288a} {x42320000 x43ac0000 x3e9aa6aa} {x42440000 x43ab4000 x3e96a5a9} {x42580000 x43ab4000 x3e9a268a} {x42720000 x43ab4000 x3e9ba6ea} {x42820000 x43ac4000 x3ea1284a} {x42920000 x43adc000 x3ea92a4b} {x42a50000 x43afc000 x3eaaaaab} {x42c00000 x43b24000 x3eaa2a8b} {x42d20000 x43b34000 x3ea2288a} {x42e00000 x43b40000 x3e9e278a} {x42f00000 x43b50000 x3e9e278a} {x42fc0000 x43b60000 x3e9ea7aa} {x43010000 x43b68000 x3e95a569} {x43000000 x43b68000 x3ea1284a} {x42fe0000 x43b68000 x3ea4290a} {x42fa0000 x43b68000 x3ea92a4b} {x42f00000 x43b64000 x3eac2b0b} {x42d90000 x43b60000 x3eacab2b} {x42bd0000 x43b64000 x3eacab2b} {x42960000 x43b6c000 x3eadab6b} {x424c0000 x43b80000 x3ead2b4b} {x42000000 x43b98000 x3ead2b4b} {x41b00000 x43bb4000 x3eacab2b} {x41780000 x43bdc000 x3eaaaaab} {x41180000 x43c04000 x3ea9aa6b} {x40b00000 x43c28000 x3ea6a9aa} {x40200000 x43c50000 x3ea3a8ea} {x40000000 x43c70000 x3ea3a8ea} {x40200000 x43ca0000 x3ea6298a} {x40e00000 x43cd4000 x3ea92a4b} {x40f00000 x43cec000 x3eaa2a8b} {x40a00000 x43cfc000 x3ead2b4b} {x40000000 x43d0c000 x3ea1a86a} {xbf000000 x43d14000 0}}} {tx 1 x424e425f x43bc071c} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x42d50000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush16 512 catmullrom {cc {f 2080} {px 1 {x42540000 x43dfc000 1} {x42540000 x43df4000 x3e91a469} {x425a0000 x43ddc000 x3ea1a86a} {x425c0000 x43dc8000 x3ea6298a} {x425c0000 x43da4000 x3eab2acb} {x42600000 x43d78000 x3eb02c0b} {x42700000 x43d64000 x3ead2b4b} {x42850000 x43d50000 x3ea3a8ea} {x42910000 x43d44000 x3ea0280a} {x42a50000 x43d34000 x3e952549} {x42b50000 x43d30000 x3e8aa2a9} {x42bf0000 x43d2c000 x3e882209} {x42cb0000 x43d30000 x3e84a128} {x42d60000 x43d40000 x3e842108} {x42df0000 x43d50000 x3e842108} {x42e40000 x43d58000 x3e85a168} {x42e80000 x43d68000 x3e8e2389} {x42eb0000 x43d7c000 x3e8fa3e9} {x42ec0000 x43d8c000 x3e8e2389} {x42ed0000 x43da8000 x3e8ca329} {x42ef0000 x43dc8000 x3e87a1e8} {x42ef0000 x43df4000 x3e693a4f} {x42ef0000 x43e08000 x3e6338ce} {x42ef0000 x43e28000 x3e65394e} {x42f10000 x43e3c000 x3e65394e} {x42f30000 x43e54000 x3e703c0f} {x42f90000 x43e64000 x3e842108} {x43030000 x43e7c000 x3e8aa2a9} {x430b8000 x43e98000 x3e9324c9} {x43150000 x43eac000 x3ea729ca} {x431e0000 x43ebc000 x3ea7a9ea} {x43240000 x43ec0000 x3ea6a9aa} {x432c0000 x43ec0000 x3ea5a96a} {x43328000 x43ec0000 x3ea2a8aa} {x433a0000 x43ebc000 x3e98260a} {x433d0000 x43eb8000 x3e8c2309} {x433a8000 x43eb8000 x3e9aa6aa} {x43380000 x43ebc000 x3ea1284a} {x432e8000 x43ec0000 x3eae2b8b} {x43250000 x43ec0000 x3eb02c0b} {x431c0000 x43ec0000 x3eb0ac2b} {x43110000 x43ec0000 x3eb12c4b} {x43088000 x43ec4000 x3eb3aceb} {x42fd0000 x43ec4000 x3eb4ad2b} {x42f30000 x43ec8000 x3eb5ad6b} {x42e90000 x43ecc000 x3eb5ad6b} {x42e00000 x43ec4000 x3eb62d8b} {x42d60000 x43eb4000 x3eb92e4c} {x42cf0000 x43ea0000 x3eb9ae6c} {x42c80000 x43e8c000 x3eba2e8c} {x42c20000 x43e70000 x3eba2e8c} {x42c10000 x43e54000 x3ebaaeac} {x42c00000 x43e2c000 x3eb92e4c} {x42bf0000 x43e0c000 x3eb7adeb} {x42bf0000 x43dd8000 x3eb6adab} {x42bc0000 x43db8000 x3eb1ac6b} {x42b30000 x43d94000 x3eb1ac6b} {x42a60000 x43d74000 x3eb12c4b} {x42940000 x43d58000 x3eb12c4b} {x428f0000 x43d50000 1} {x427e0000 x43d3c000 x3eaf2bcb} {x42600000 x43d28000 x3ea6298a} {x42320000 x43d0c000 x3e9fa7ea} {x42080000 x43ce4000 x3e703c0f} {x41b40000 x43ca4000 0}}} {tx 1 x42d92372 x43dff820} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x42d50000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush15 512 catmullrom {cc {f 2080} {px 1 {x42960000 x43458000 1} {x42940000 x43450000 x3eb62d8b}}} {tx 1 x42950000 x43454000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x42d50000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush14 512 catmullrom {cc {f 2080} {px 1 {x42980000 x43460000 1} {x42960000 x43458000 x3ed0b42d} {x42940000 x43458000 x3ed8360e} {x42940000 x43468000 x3ec6318c} {x42940000 x43478000 x3ec4b12c} {x42940000 x43468000 x3ebeafac} {x42940000 x43478000 x3ec9324d} {x42920000 x43478000 x3ed0340d} {x42920000 x43468000 x3edb36ce} {x42920000 x43458000 x3edcb72e} {x42920000 x43448000 x3edeb7ae} {x42910000 x43458000 x3eddb76e}}} {tx 1 x42939555 x43463555} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x42d50000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush13 512 catmullrom {cc {f 2080} {px 1 {x428b0000 x43430000 x3e052148} {x428b0000 x43440000 x3e2d2b4b}}} {tx 1 x428b0000 x43438000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x42d50000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush12 512 catmullrom {cc {f 2080} {px 1 {x42f10000 x43780000 1} {x42ee0000 x43778000 x3d50340d} {x42e70000 x43768000 x3cb02c0b} {x42e10000 x43748000 x3db22c8b} {x42db0000 x43728000 x3e152549} {x42d70000 x436f0000 x3e0a2289} {x42d30000 x436c0000 0}}} {tx 1 x42e1b6db x43736db7} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x42d50000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush11 512 catmullrom {cc {f 2080} {px 1 {x430f0000 x43768000 1} {x43110000 x43760000 x3da4290a} {x43188000 x43758000 x3da0280a} {x43258000 x43770000 x3de0380e} {x432e8000 x43788000 x3dfc3f10} {x43350000 x43798000 x3dbc2f0c} {x43378000 x43790000 x3dca328d} {x433c0000 x43770000 x3df63d8f} {x43420000 x43758000 x3e2a2a8b} {x43498000 x43740000 x3e312c4b} {x43548000 x43710000 x3e2f2bcb} {x435e0000 x436e0000 x3e2f2bcb} {x436c0000 x436a0000 x3d1c270a}}} {tx 1 x433889d9 x4374bb14} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x42d50000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush10 512 catmullrom {cc {f 2080} {px 1 {x42cd0000 x4383c000 1} {x42d30000 x43830000 x3d842108}}} {tx 1 x42d00000 x43836000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x42d50000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush9 512 catmullrom {cc {f 2080} {px 1 {x42760000 x43924000 1} {x42500000 x43928000 x3dd0340d} {x42480000 x43928000 x3dd0340d} {x423c0000 x43928000 x3e22288a}}} {tx 1 x42528000 x43927000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x42d50000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush8 512 catmullrom {cc {f 2080} {px 1 {x436e8000 x43b04000 1} {x436d0000 x43afc000 x3e162589} {x436c0000 x43af4000 x3e162589} {x43690000 x43adc000 x3e2328ca} {x43650000 x43ab4000 x3e40300c} {x43618000 x43a98000 x3e5334cd} {x435f0000 x43a7c000 x3e5735cd} {x435d0000 x43a5c000 x3e58360e} {x435a0000 x43a40000 x3e56358d} {x43528000 x43a20000 x3e5e378e} {x434a0000 x43a10000 x3e5c370e} {x433f8000 x43a0c000 x3e46318c} {x433d0000 x43a0c000 x3e49324d} {x43360000 x43a18000 x3e46318c} {x432f0000 x43a20000 x3e5334cd} {x43290000 x43a1c000 x3e5f37ce} {x43228000 x43a14000 x3e6739ce} {x43198000 x43a10000 x3e723c8f} {x43128000 x43a08000 x3e6739ce} {x43088000 x439dc000 x3e5334cd} {x43010000 x439ac000 x3e46318c} {x42fc0000 x4398c000 x3e5735cd} {x42fc0000 x43984000 x3e5a368e} {x42fe0000 x4396c000 x3e4f33cd} {x43078000 x43960000 x3e22288a} {x43108000 x4395c000 x3dea3a8f} {x43188000 x43954000 x3d042108} {x431d0000 x4393c000 x3d50340d} {x431b0000 x43914000 x3e0d2349} {x43140000 x438e8000 x3e3a2e8c} {x430f0000 x438cc000 x3e4b32cd} {x430e0000 x438c4000 x3e3e2f8c} {x430d0000 x438c4000 x3e2d2b4b} {x430a8000 x438c4000 x3e51344d} {x43038000 x438cc000 x3e6b3acf} {x42ed0000 x438f0000 x3e64390e} {x42da0000 x43904000 0}}} {tx 1 x432a59f2 x439c9837} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x42d50000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush7 512 catmullrom {cc {f 2080} {px 1 {x43790000 x43c2c000 1} {x43778000 x43c30000 x3d40300c} {x43760000 x43c34000 x3da0280a}}} {tx 1 x43778000 x43c30000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x42d50000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush6 512 catmullrom {cc {f 2080} {px 1 {x437e8000 x43bf0000 1} {x437d8000 x43c04000 x3d3c2f0c} {x437d8000 x43c0c000 x3c802008} {x437d0000 x43c18000 0}}} {tx 1 x437da000 x43c06000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x42d50000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush5 512 catmullrom {cc {f 2080} {px 1 {x43210000 x43ac0000 1} {x43220000 x43ac0000 x3e282a0b} {x43230000 x43ac0000 x3e312c4b} {x43240000 x43abc000 x3e40300c} {x43288000 x43ab8000 x3e7f3fd0} {x432f0000 x43ab0000 x3e8e2389} {x43358000 x43aac000 x3e8fa3e9} {x43370000 x43aac000 x3e8fa3e9} {x433c8000 x43aa8000 x3e8d2349} {x43420000 x43aa0000 x3e862188} {x43480000 x43a94000 x3e822088} {x434c8000 x43a8c000 x3e822088} {x43528000 x43a84000 x3e7b3ed0} {x43578000 x43a7c000 x3e713c4f} {x435e0000 x43a74000 x3e6e3b8f} {x43630000 x43a74000 x3e6d3b4f} {x436a0000 x43a78000 x3e89a269} {x436c0000 x43a7c000 x3e8a2289} {x43748000 x43a8c000 x3e822088} {x437b8000 x43aa0000 x3e51344d} {x437d0000 x43aa8000 x3e392e4c} {x43808000 x43ac0000 x3dc0300c} {x43814000 x43adc000 x3c20280a} {x4381c000 x43afc000 x3d64390e} {x43820000 x43b04000 x3d703c0f} {x43828000 x43b30000 x3d802008} {x4382c000 x43b50000 0}}} {tx 1 x4356af68 x43ab38e4} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x42d50000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush4 512 catmullrom {cc {f 2080} {px 1 {x42a60000 x43998000 1} {x42a80000 x43998000 x3e1725c9} {x42b50000 x439a0000 x3e4b32cd} {x42db0000 x439d8000 x3e8a2289} {x42f00000 x439ec000 x3e9ca72a} {x42f50000 x439e0000 x3e9da76a} {x42f50000 x439c0000 x3eb62d8b} {x42f50000 x43994000 x3edcb72e} {x42f80000 x43970000 x3eedbb6f} {x43010000 x4394c000 x3eeebbaf} {x43028000 x43944000 x3eef3bcf} {x430a8000 x4391c000 x3eedbb6f} {x43128000 x438f4000 x3eecbb2f} {x431d0000 x438c8000 x3eed3b4f} {x43270000 x438bc000 x3eeebbaf} {x43300000 x438c0000 x3eedbb6f} {x43320000 x438c4000 x3eed3b4f} {x43388000 x438d4000 x3ed2b4ad} {x433b0000 x438d4000 x3ec6318c} {x433c8000 x438c4000 x3ed5354d} {x43408000 x438b8000 x3ed6b5ad} {x43420000 x438b4000 x3ed5b56d} {x43468000 x438a0000 x3ed334cd} {x434b0000 x43890000 x3ec8320d} {x434c0000 x43890000 x3eb2acab} {x434d8000 x4388c000 0}}} {tx 1 x43184000 x4391db14} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x41300000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush3 512 catmullrom {cc {f 2080} {px 1 {x42d80000 x43ba4000 1} {x42d60000 x43ba4000 x3e9a268a} {x42d40000 x43ba4000 x3ea0280a} {x42cb0000 x43b98000 x3ecc330d} {x42b90000 x43b74000 x3ee338ce} {x42a90000 x43b54000 x3ee5394e} {x429e0000 x43b3c000 x3ee338ce} {x429a0000 x43b30000 x3ee0b82e} {x42970000 x43b2c000 x3ede378e} {x42920000 x43b24000 x3edb36ce} {x42860000 x43b08000 x3edb36ce} {x42820000 x43b00000 x3edcb72e} {x426c0000 x43ae4000 x3ee5394e} {x42620000 x43ad8000 x3ee4b92e} {x42620000 x43ae0000 x3eda368e} {x42580000 x43ae4000 x3ee0b82e} {x424c0000 x43aec000 x3ee4b92e} {x424a0000 x43b08000 x3ee2b8ae} {x425a0000 x43b40000 x3edb36ce} {x427c0000 x43b80000 x3ed9364e} {x42890000 x43bac000 x3ed7b5ed} {x42850000 x43bb0000 x3edab6ae} {x42740000 x43bb0000 x3ee0b82e} {x42700000 x43bac000 x3ee2b8ae} {x42620000 x43ba4000 x3ee3b8ee} {x42620000 x43bb0000 x3ee0b82e} {x42640000 x43bb8000 x3ee0b82e} {x42640000 x43bcc000 x3ee1384e} {x42640000 x43bdc000 x3ee2388e} {x42640000 x43bec000 x3ee5394e} {x42640000 x43c04000 x3ee739ce} {x42620000 x43c18000 x3ee739ce} {x42580000 x43c2c000 x3ee8ba2f} {x42520000 x43c3c000 x3ee8ba2f} {x424c0000 x43c54000 x3ee93a4f} {x42420000 x43c64000 x3ee93a4f} {x42360000 x43c74000 x3eecbb2f} {x42320000 x43c78000 x3eee3b8f} {x421a0000 x43c88000 x3ef23c8f} {x41d80000 x43c98000 x3f00a028} {x41bc0000 x43c9c000 x3f022088} {x40e00000 x43cb0000 x3f0360d8} {xc1280000 x43cc8000 x3f022088} {xc1a40000 x43d00000 x3e1d274a}}} {tx 1 x42680ba3 x43bba000} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x41300000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush2 512 catmullrom {cc {f 2080} {px 1 {x43368000 x43e20000 1} {x43378000 x43e20000 x3e842108} {x43398000 x43e24000 x3e912449} {x43410000 x43e24000 x3eaa2a8b} {x434d0000 x43e28000 x3eac2b0b} {x434f8000 x43e28000 x3eab2acb} {x43568000 x43e30000 x3ea92a4b} {x43578000 x43e30000 x3ef03c0f} {x43588000 x43e2c000 x3ef03c0f} {x435b0000 x43e28000 x3ef03c0f} {x435e8000 x43e10000 x3ee83a0f} {x435c8000 x43df0000 x3ee4b92e} {x43560000 x43dcc000 x3ef33ccf} {x43550000 x43db8000 x3ef6bdaf} {x43550000 x43da4000 x3eedbb6f} {x43548000 x43d98000 x3eeb3acf} {x43530000 x43d94000 x3ef33ccf} {x43518000 x43d88000 x3ef4bd2f} {x43500000 x43d7c000 x3ef2bcaf} {x434f0000 x43d7c000 x3ef23c8f} {x434a8000 x43d6c000 x3ef23c8f} {x43438000 x43d5c000 x3ef2bcaf} {x43418000 x43d58000 x3ef2bcaf} {x433b0000 x43d50000 x3ef2bcaf} {x43370000 x43d44000 x3ef23c8f} {x43330000 x43d30000 x3ef03c0f} {x43310000 x43d20000 x3eefbbef} {x432f0000 x43d14000 x3eeebbaf} {x432e8000 x43cf4000 x3eee3b8f} {x432e8000 x43cdc000 x3eeabaaf} {x432f8000 x43cd4000 x3ee8ba2f} {x43328000 x43cc0000 x3ed7b5ed} {x43378000 x43ca8000 x3ecd334d} {x43390000 x43ca4000 x3ecd334d} {x433d8000 x43c88000 x3ece338d} {x43438000 x43c6c000 x3eceb3ad} {x434c8000 x43c48000 x3ed9364e} {x43580000 x43c38000 x3edfb7ee} {x43680000 x43c34000 x3ee0b82e} {x436c8000 x43c34000 x3ee0b82e} {x437b8000 x43c2c000 x3ee0b82e} {x43818000 x43c1c000 x3ede378e} {x4381c000 x43c14000 x3edbb6ee} {x4380c000 x43bf8000 x3edb36ce} {x437d8000 x43be4000 x3ee0b82e} {x437f8000 x43bd8000 x3ea4290a} {x437f8000 x43bc8000 x3ea2288a} {x437d0000 x43ba0000 x3ea6298a} {x43798000 x43b74000 x3eb3aceb} {x43790000 x43b68000 x3eb62d8b} {x43768000 x43b38000 x3ebcaf2c} {x43768000 x43b0c000 x3ebdaf6c} {x43760000 x43af0000 x3ebe2f8c} {x43758000 x43ae8000 x3ebeafac} {x43758000 x43ae0000 x3ebfafec} {x43740000 x43ac8000 x3ebfafec} {x43708000 x43aac000 x3ecc330d} {x436f0000 x43aa4000 x3ed1344d} {x43698000 x43a88000 x3ee5394e} {x43660000 x43a70000 x3ee83a0f} {x43620000 x43a60000 x3ee739ce} {x435f0000 x43a5c000 x3ee5394e} {x43580000 x43a58000 x3eeebbaf} {x434f8000 x43a5c000 x3ef8be30} {x43448000 x43a6c000 x3efe3f90} {x43420000 x43a70000 x3f006018} {x43388000 x43a7c000 x3f042108} {x43320000 x43a84000 x3f0360d8} {x43310000 x43a88000 x3f02a0a8} {x43300000 x43a94000 x3eccb32d} {x432f0000 x43a98000 x3e98a62a} {x432d0000 x43aa0000 0}}} {tx 1 x4354338e x43c51d55} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x41300000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {px 1 {x42640000 x43e44000 1} {x42600000 x43e40000 x3df23c8f} {x425c0000 x43e38000 x3e4731cc} {x42520000 x43e24000 x3ea5a96a} {x424c0000 x43e18000 x3eba2e8c} {x42460000 x43e04000 x3eccb32d} {x423e0000 x43df4000 x3edf37ce} {x423e0000 x43de4000 x3ee2388e} {x42400000 x43dd8000 x3ee2b8ae} {x42460000 x43dc8000 x3ee3b8ee} {x424a0000 x43db8000 x3ee5394e} {x424e0000 x43dac000 x3ee5394e} {x42560000 x43da4000 x3ee338ce} {x425e0000 x43da0000 x3ee3b8ee} {x42640000 x43d98000 x3ee4b92e} {x42680000 x43d94000 x3ee5394e} {x42700000 x43d94000 x3ee4b92e} {x42780000 x43d94000 x3ee4b92e} {x42800000 x43d8c000 x3ee5394e} {x42830000 x43d88000 x3ee5b96e} {x42860000 x43d80000 x3ee6398e} {x42890000 x43d7c000 x3ee6398e} {x428e0000 x43d78000 x3ee739ce} {x42920000 x43d74000 x3ee739ce} {x42960000 x43d70000 x3eea3a8f} {x429b0000 x43d68000 x3ef23c8f} {x42a10000 x43d60000 x3ef43d0f} {x42a80000 x43d5c000 x3ef4bd2f} {x42ae0000 x43d5c000 x3ef53d4f} {x42b00000 x43d5c000 x3ef4bd2f} {x42b60000 x43d60000 x3ef53d4f} {x42bb0000 x43d68000 x3ef43d0f} {x42c00000 x43d74000 x3ef43d0f} {x42c40000 x43d80000 x3ef43d0f} {x42c80000 x43d90000 x3ef33ccf} {x42cc0000 x43da4000 x3ef03c0f} {x42ce0000 x43db4000 x3ef0bc2f} {x42d10000 x43dc4000 x3ef0bc2f} {x42d30000 x43dd4000 x3ef1bc6f} {x42d50000 x43de4000 x3ef1bc6f} {x42d50000 x43dec000 x3ef53d4f} {x42d50000 x43df8000 x3ef7bdef} {x42d40000 x43e04000 x3efa3e90} {x42ce0000 x43e10000 x3f042108} {x42cc0000 x43e14000 x3f056158} {x42c50000 x43e20000 x3f06a1a8} {x42c00000 x43e34000 x3f06a1a8} {x42bf0000 x43e44000 x3f066198} {x42bf0000 x43e4c000 x3f066198} {x42be0000 x43e5c000 x3f066198} {x42be0000 x43e68000 x3f066198} {x42bc0000 x43e70000 x3f06e1b8} {x42b80000 x43e74000 x3f09a269} {x42b60000 x43e78000 x3f0aa2a9} {x42b40000 x43e7c000 x3f0aa2a9} {x42b30000 x43e84000 x3f0aa2a9} {x42b30000 x43e90000 x3f0ae2b9} {x42b30000 x43e98000 x3f0aa2a9} {x42b60000 x43ea4000 x3f0aa2a9} {x42b90000 x43eac000 x3f0a6299} {x42bd0000 x43eb8000 x3f09e279} {x42c00000 x43ec0000 x3f09e279} {x42c20000 x43ec4000 x3f09a269} {x42c50000 x43ed0000 x3f09a269} {x42c80000 x43edc000 x3f096259} {x42cb0000 x43ee8000 x3f096259} {x42ce0000 x43ef8000 x3f07e1f8} {x42d50000 x43f08000 x3f01a068} {x42dc0000 x43f14000 x3ef7bdef} {x42e50000 x43f20000 x3ee5394e} {x42f10000 x43f28000 x3ed6b5ad} {x43010000 x43f30000 x3ed0b42d} {x43038000 x43f30000 x3ed0340d} {x430d8000 x43f38000 x3ed6b5ad} {x43188000 x43f34000 x3ed6b5ad} {x431b0000 x43f30000 x3ed6b5ad} {x43250000 x43f24000 x3ec4310c} {x43298000 x43f1c000 0}}} {tx 1 x42b2a41a x43e26aab} {a ro 0 go 0 bo 0 ao 0 opc x3ca3d70a bs x41300000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}}}}}} toolbox {selectAll { { selectAll opc 0.02 bs 173.5 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush opc 0.02 bs 173.5 str 1 ssx 1 ssy 1 sf 1 sb 1 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_opacity 0.02 toolbar_brush_size 173.5 toolbar_brush_hardness 0.200000003 toolbar_lifetime_type single toolbar_source_transform_scale {1 1} toolbar_source_transform_center {640 360} colorOverlay {0 0 0 0} opacity 0.01999999955 lifetime_type "all frames" brush_size 2.5 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint1 xpos 32 ypos 3082 } FilterErode { channels all name FilterErode3 xpos 32 ypos 3108 } Switch { inputs 5 which {{parent.naturalNoisePicker}} name Switch3 xpos 32 ypos 3278 } Transform { scale {{"1 + parent.naturalNoiseSize"}} center {250 250} name Transform8 xpos 32 ypos 3312 } Grade { white {{"1 + parent.naturalNoiseGain"}} gamma {{"1 + parent.naturalNoiseGamma"}} name Grade10 xpos 32 ypos 3349 } Defocus { defocus {{parent.naturalNoiseSoftness}} name Defocus1 xpos 32 ypos 3387 } Reformat { type "to box" box_width {{"root.width * parent.bokehQuality"}} box_height {{"root.width * parent.bokehQuality"}} box_fixed true name Reformat4 xpos 32 ypos 3441 } Crop { inputs 0 box {0 0 {"root.width * parent.bokehQuality"} {"root.width * parent.bokehQuality"}} reformat true crop false name Crop4 xpos 309 ypos 2497 } set N80336000 [stack 0] Noise { size {{"(parent.noiseSize ) * parent.bokehQuality"}} center {640 360} name Noise3 xpos 309 ypos 2541 } Grade { blackpoint 0.26 name Grade5 xpos 309 ypos 2580 } Clamp { name Clamp4 xpos 309 ypos 2620 } Blur { size 0.5 name Blur5 xpos 309 ypos 2678 } push $N80336000 Noise { size {{"parent.noiseSize * parent.bokehQuality"}} gain {{parent.noiseGain}} gamma {{parent.noiseGamma}} center {256 256} name Noise1 xpos 33 ypos 2403 } Clamp { name Clamp3 xpos 33 ypos 2429 } push $N78b12000 Shuffle { alpha white name Shuffle1 xpos -78 ypos 1236 } Dot { name Dot5 xpos -44 ypos 1301 } set N79bdbc00 [stack 0] Dot { name Dot6 xpos -210 ypos 1301 } Dot { name Dot7 xpos -210 ypos 2202 } set N79bdb400 [stack 0] Dot { name Dot8 xpos -210 ypos 2251 } push $N79bdb400 push $N79bdbc00 Dot { name Dot10 xpos 166 ypos 1301 } Dot { name Dot9 xpos 166 ypos 1953 } push $N79bdbc00 Shuffle { alpha red name Shuffle2 xpos -78 ypos 1507 } set N79bda400 [stack 0] push $N79bda400 Transform { scale {{"1 - parent.ringsThickness"}} center {{"root.width/2 * parent.bokehQuality"} {"root.width/2 * parent.bokehQuality"}} black_outside false name Transform1 xpos 14 ypos 1534 } Merge2 { inputs 2 operation minus name Merge3 xpos -78 ypos 1572 } set N79bd9c00 [stack 0] push $N79bd9c00 Transform { scale {{"1 - (parent.ringsThickness * 2)"}} center {{"root.width/2 * parent.bokehQuality"} {"root.width/2 * parent.bokehQuality"}} black_outside false name Transform2 xpos 13 ypos 1603 } Merge2 { inputs 2 name Merge4 xpos -78 ypos 1634 } set N79bd9400 [stack 0] push $N79bd9400 Transform { scale {{"1 - (parent.ringsThickness * 3)"}} center {{"root.width/2 * parent.bokehQuality"} {"root.width/2 * parent.bokehQuality"}} black_outside false name Transform3 xpos 19 ypos 1647 } Grade { multiply 0.54 name Grade2 xpos 19 ypos 1673 } Merge2 { inputs 2 name Merge7 xpos -78 ypos 1690 } set N79bd8800 [stack 0] push $N79bd8800 Transform { scale {{"1 - (parent.ringsThickness * 6)"}} center {{"root.width/2 * parent.bokehQuality"} {"root.width/2 * parent.bokehQuality"}} black_outside false name Transform4 xpos 22 ypos 1703 } Merge2 { inputs 2 name Merge8 xpos -78 ypos 1735 } set N79b83c00 [stack 0] push $N79b83c00 Transform { scale {{"1 - (parent.ringsThickness * 12)"}} center {{"root.width/2 * parent.bokehQuality"} {"root.width/2 * parent.bokehQuality"}} black_outside false name Transform5 xpos 22 ypos 1746 } Grade { whitepoint 0.6 name Grade1 xpos 22 ypos 1772 } Merge2 { inputs 2 name Merge9 xpos -78 ypos 1778 } set N79b83000 [stack 0] push $N79b83000 Transform { scale {{"1 - (parent.ringsThickness * 21)"}} center {{"root.width/2 * parent.bokehQuality"} {"root.width/2 * parent.bokehQuality"}} black_outside false name Transform6 xpos 22 ypos 1829 } Merge2 { inputs 2 name Merge10 xpos -78 ypos 1861 } set N79b82800 [stack 0] push $N79b82800 Transform { scale {{"1 - (parent.ringsThickness * 32)"}} center {{"root.width/2 * parent.bokehQuality"} {"root.width/2 * parent.bokehQuality"}} black_outside false name Transform7 xpos 21 ypos 1861 } Merge2 { inputs 2 name Merge11 xpos -78 ypos 1898 } Merge2 { inputs 2 operation multiply name Merge12 xpos -78 ypos 1949 } Blur { size 7 name Blur2 xpos -78 ypos 1993 } Merge2 { inputs 2 mix {{"1 - parent.ringsStrength"}} name Merge5 xpos -78 ypos 2198 } Merge2 { inputs 2 name Merge6 xpos -78 ypos 2247 disable {{parent.ringsEnable}} } Shuffle { alpha red name Shuffle3 xpos -78 ypos 2298 } Dot { name Dot3 xpos -44 ypos 2386 } Merge2 { inputs 2 operation from mix {{parent.noiseMix}} name Merge2 xpos -78 ypos 2467 disable {{!parent.noiseEnable}} } set N79b80400 [stack 0] Dot { name Dot11 xpos 95 ypos 2534 } Grade { channels alpha blackpoint -0.015 whitepoint 1.25 name Grade3 xpos 165 ypos 2524 } Clamp { name Clamp2 xpos 165 ypos 2562 } Blur { size 13 name Blur3 xpos 165 ypos 2600 } set N79b13000 [stack 0] FilterErode { channels alpha size 3.5 name FilterErode1 xpos 165 ypos 2638 } Invert { channels alpha name Invert1 xpos 165 ypos 2688 } Grade { channels alpha blackpoint 0.88 white 1.3 name Grade4 xpos 165 ypos 2726 } Merge2 { inputs 2 operation mask name Merge16 xpos 309 ypos 2732 } Invert { name Invert2 xpos 309 ypos 2810 } push $N79b13000 push $N79b80400 Blur { size 5.6 name Blur4 xpos -13 ypos 2545 } push $N79b80400 Merge2 { inputs 2+1 name Merge15 xpos -78 ypos 2606 } Merge2 { inputs 2 operation mask mix {{parent.noiseMix}} name Merge14 xpos -78 ypos 2816 disable {{!parent.noiseEnable}} } Merge2 { inputs 2 operation overlay mix {{parent.naturalNoiseStrength}} name Merge20 xpos -78 ypos 3479 disable {{!parent.naturalNoiseEnable}} } Dot { name Dot13 xpos -44 ypos 3876 } set N79b10800 [stack 0] Grade { inputs 1+1 multiply {{parent.innerChromaTint.r} {parent.innerChromaTint.g} {parent.innerChromaTint.b} 1} white_clamp true mix {{parent.innerChromaStrength}} name Grade6 xpos -78 ypos 3940 disable {{!parent.chromaEnable}} } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy2 xpos -78 ypos 4031 } set N87c03c00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle5 xpos 26 ypos 4090 } FilterErode { channels all size 3.5 name FilterErode2 xpos 26 ypos 4131 } Blur { size 2.2 name Blur9 xpos 26 ypos 4169 } Grade { channels alpha whitepoint 0.035 name Grade13 xpos 26 ypos 4207 } Dot { name Dot18 xpos 60 ypos 4263 } push $N79b10800 Blur { size 10 name Blur7 xpos 160 ypos 3972 disable true } Grade { multiply {{parent.outerChromaTint.r} {parent.outerChromaTint.g} {parent.outerChromaTint.b} 1} multiply_panelDropped true name Grade7 xpos 160 ypos 4017 } Grade { multiply 2.4 name Grade8 xpos 160 ypos 4091 } Premult { name Premult1 xpos 160 ypos 4127 } Blur { size {{parent.outerChromaSize}} name Blur8 xpos 160 ypos 4185 } Merge2 { inputs 2 operation stencil name Merge17 xpos 160 ypos 4259 } Dot { name Dot17 xpos 194 ypos 4326 } Clamp { name Clamp6 xpos 57 ypos 4316 } push $N87c03c00 Clamp { name Clamp7 xpos -78 ypos 4257 } Merge2 { inputs 2 operation screen mix {{parent.outerChromaStrength}} name Merge13 xpos -78 ypos 4322 disable {{!parent.outerChromaEnable}} } Dot { name Dot48 xpos -44 ypos 4441 } set N87b8b800 [stack 0] Saturation { saturation 0 name Saturation1 xpos 84 ypos 4475 } push $N87b8b800 Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy3 xpos -78 ypos 4520 } Crop { box {0 0 {"root.width * parent.bokehQuality"} {"root.width * parent.bokehQuality"}} name Crop1 xpos -78 ypos 4587 } Grade { gamma {{"1 - parent.bokehGamma"}} name Grade11 xpos -78 ypos 4636 } Output { name Output1 xpos -78 ypos 4691 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_C44Kernel.gizmo ================================================ Group { name C44Kernel help "C44Kernel v1.0 by Adrian Pueyo\n\nMultiply the rgb or rgba colors by an arbitrary 4x4 Matrix. Useful for transforming a Position pass.\n\nYou can plug in an Axis or Camera node into the axis input, to also apply its transformations.\n\nadrianpueyo.com, 2017" tile_color 0xe88543ff lock_connections true addUserKnob {20 C44Kernel} addUserKnob {41 channels T MergeIn.Achannels} addUserKnob {41 matrix T Axis1.matrix} addUserKnob {6 invert -STARTLINE} addUserKnob {6 alpha_masking l "alpha masking" t "Apply only where rgba.alpha>0" +STARTLINE} addUserKnob {20 advanced l Advanced n 1} advanced 0 addUserKnob {6 transpose +STARTLINE} addUserKnob {6 w_divide +STARTLINE} addUserKnob {6 rgba_mode l "apply on Vector4" t "Usually you'll want to apply the matrix on the RGB only, which uses a white alpha. Enable this to use the full Vector4 (RGBA)." +STARTLINE} addUserKnob {20 endGroup n -1} addUserKnob {26 "" +STARTLINE} addUserKnob {41 mix T MergeOut.mix} addUserKnob {26 version_author l "" t "C44Kernel v1.0\n23 June, 2018" +STARTLINE T "
C44Kernel v1.0 - adrianpueyo.com, 2018
"} addUserKnob {20 GPU_Settings l "GPU Settings"} } Input { inputs 0 name Inputaxis xpos 133 ypos -181 number 1 } Axis2 { useMatrix true name Axis1 xpos 143 ypos -133 } Input { inputs 0 name Inputimg xpos -110 ypos -192 } set N961d0400 [stack 0] Dot { name Dot1 xpos -76 ypos -161 } set N96501eb0 [stack 0] Expression { expr3 a>0 name ExpressionA xpos -220 ypos -164 } Switch { which {{!parent.alpha_masking}} name SwitchMasking xpos -220 ypos -112 } push $N96501eb0 push $N961d0400 Remove { name RemoveAll xpos 34 ypos -196 } Merge2 { inputs 2 operation copy Bchannels none name MergeIn xpos 34 ypos -164 } Shuffle { alpha white name ShuffleWhiteA xpos 34 ypos -140 disable {{parent.rgba_mode}} } BlinkScript { recompileCount 147 ProgramGroup 1 KernelDescription "2 \"C44MatrixKernel\" iterate pixelWise 10f1841ce0aee43165aca4445fb9ce0126826eedd71da6339f12b8f8de8e52eb 2 \"src\" Read Point \"dst\" Write Point 4 \"m\" Float 16 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== \"invert\" Int 1 AAAAAA== \"transpose\" Int 1 AAAAAA== \"w_divide\" Int 1 AAAAAA== 4 \"m\" 16 1 \"invert\" 1 1 \"transpose\" 1 1 \"w_divide\" 1 1 0" kernelSource "kernel C44MatrixKernel : ImageComputationKernel\n\{\n Image src;\n Image dst;\n\n param:\n float4x4 m;\n int invert;\n int transpose;\n int w_divide;\n\n void process(int2 pos) \{\n SampleType(src) p = src();\n float4 result = 1.0f;\n float4x4 mi = m;\n mi = invert?mi.invert():mi;\n mi = transpose?mi.transpose():mi;\n for(int c = 0; cConcatenation is broken.\")\n\n elif nn\['cropP'].value() in \[\"No Crop\"]:\n nn\[\"growBbox\"].setVisible(False)\n nn\[\"text\"].setValue(\"No Crop applied, Concatenation preserved.\")" tile_color 0x7a4389ff note_font Verdana note_font_size 14 note_font_color 0x28565eff addUserKnob {20 User l CProject} addUserKnob {6 FreezeInput l "freeze input" t "freezing the input on the refrence frame, \nsame as putting the framehold before the node" +STARTLINE} addUserKnob {22 python_button l "set current as reference frame" T "\nn = nuke.thisNode()\nfor one in range(1,5):\n n\['from'+str(one)].setValue(n\['to'+str(one)].value()) \n\nframe = nuke.frame()\nn\['refFrame'].setValue(frame)\nn\['label'].setValue(str(frame))\n\nnuke.toNode(\"FHold\")\['first_frame'].setValue(frame)\n" +STARTLINE} addUserKnob {26 text_2 l "" -STARTLINE T or} addUserKnob {22 setRefFrame l "set reference frame" t "setting the reference frame,\nsame as the reference frame when you are doing projection with the camera on the card.\nyou should expect that the input will be unchenged on this frame." -STARTLINE T "\nn = nuke.thisNode()\nfor one in range(1,5):\n n\['from'+str(one)].setValue(n\['to'+str(one)].value()) \n\n\nframe = int(n\['refFrame'].value())\nn\['label'].setValue(str(frame))\n\nnuke.toNode(\"FHold\")\['first_frame'].setValue(frame)\n\n"} addUserKnob {3 refFrame l "" -STARTLINE} refFrame 69 addUserKnob {41 set_to_input l "Set to input" t "this will distort the input texture with the corner pin, it is the same as applying the texture on the card " T CornerPin2D2.set_to_input} addUserKnob {41 invert l stabilize t "stabilize the input on the reference frame" T CornerPin2D2.invert} addUserKnob {41 motionblur T CornerPin2D2.motionblur} addUserKnob {41 shutter T CornerPin2D2.shutter} addUserKnob {20 s l "" +STARTLINE n 1} s 0 addUserKnob {41 shutteroffset l "shutter offset" -STARTLINE T CornerPin2D2.shutteroffset} addUserKnob {41 shuttercustomoffset -STARTLINE T CornerPin2D2.shuttercustomoffset} addUserKnob {41 clamp T CornerPin2D2.clamp} addUserKnob {41 black_outside l "black outside" -STARTLINE T CornerPin2D2.black_outside} addUserKnob {41 filter_1 l filter T Reformat1.filter} addUserKnob {26 add l "" +STARTLINE T "source card, camera..."} addUserKnob {26 camera l camera: T Camera2} addUserKnob {13 translate} translate {0.1914808601 -0.1767024994 0.4249224663} addUserKnob {13 rotation} rotation {-20.90365344 -156.0216134 0} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 cropP l crop M {"Hard Crop" "Adjustable Crop" "No Crop"}} addUserKnob {7 growBbox l "grow Bbox" -STARTLINE +HIDDEN R 0 200} growBbox 50 addUserKnob {41 o l overscan +DISABLED +HIDDEN +INVISIBLE T Crop1.o} addUserKnob {26 text l tip T "Image is cropped to Input, Concatenation preserved."} addUserKnob {26 ""} addUserKnob {26 element l element: T elem} addUserKnob {20 fromto l From/To} addUserKnob {41 from4 -STARTLINE T CornerPin2D2.from4} addUserKnob {41 from3 -STARTLINE T CornerPin2D2.from3} addUserKnob {41 from1 T CornerPin2D2.from1} addUserKnob {41 from2 -STARTLINE T CornerPin2D2.from2} addUserKnob {26 ""} addUserKnob {41 to4 T CornerPin2D2.to4} addUserKnob {41 to3 -STARTLINE T CornerPin2D2.to3} addUserKnob {41 to1 T CornerPin2D2.to1} addUserKnob {41 to2 -STARTLINE T CornerPin2D2.to2} } Input { inputs 0 name Input1 xpos 112 ypos -259 } FrameHold { first_frame 59 name FHold xpos 112 ypos -207 disable {{!parent.FreezeInput}} } CornerPin2D { to1 {0 0} to2 {0 0} to3 {0 0} to4 {0 0} invert false shutteroffset centred from1 {0 0} from2 {0 0} from3 {0 0} from4 {0 0} name CornerPin2D2 xpos 112 ypos -171 addUserKnob {20 User} addUserKnob {22 "set reference frame" -STARTLINE T cornerPinZero()} } set N26348700 [stack 0] Dot { name Dot1 xpos 14 ypos -62 } push $N26348700 Crop { box {{curve-parent.growBbox} {curve-parent.growBbox} {width+parent.growBbox} {height+parent.growBbox}} name Crop1 xpos 112 ypos -62 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } push $N26348700 Reformat { type "to box" format "4096 2160 0 0 4096 2160 1 4K_DCP" box_width {{width}} box_height {{height}} box_pixel_aspect {{pixel_aspect}} resize none name Reformat1 selected true xpos 223 ypos -69 } Switch { inputs 3 which {{parent.cropP x1000 0}} name Switch1 label "\[value which]" xpos 112 ypos 10 } Output { name Output1 xpos 112 ypos 106 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_CProject2.gizmo ================================================ Group { name CProject help "it is just cornerpin tracked\nnothing fancy at all\nhave fun!" knobChanged "nn = nuke.thisNode()\nk = nuke.thisKnob()\nkn = k.name()\n\nif kn == \"cropP\":\n\n if nn\['cropP'].value() in \[\"Hard Crop\"]:\n nn\[\"growBbox\"].setVisible(False)\n nn\[\"text\"].setValue(\"Image is cropped to Input, Concatenation preserved.\")\n\n elif nn\['cropP'].value() in \[\"Adjustable Crop\"]:\n nn\[\"growBbox\"].setVisible(True)\n nn\[\"text\"].setValue(\"Adjust your Bbox , Downward Concatenation is broken.\")\n\n elif nn\['cropP'].value() in \[\"No Crop\"]:\n nn\[\"growBbox\"].setVisible(False)\n nn\[\"text\"].setValue(\"No Crop applied, Concatenation preserved.\")" tile_color 0x7a4389ff label "Matchmove\n34" note_font Verdana note_font_size 14 note_font_color 0x28565eff addUserKnob {20 User l CProject} addUserKnob {26 card_to_track l "" +STARTLINE T "card_to_track:cornerpin: box"} addUserKnob {26 ""} addUserKnob {6 FreezeInput l "freeze input" t "freezing the input on the refrence frame, \nsame as putting the framehold before the node" +STARTLINE} addUserKnob {22 mode_toggle l "

Matchmove" t "Toggle between Matchmove and Stabilize modes.\nPay attention to the reference frame - on this frame no transformation will be applied. You can see it as a projection frame if compare to camera project" T "import nuke\nntn = nuke.thisNode()\nntk = nuke.thisKnob()\nref_frame = str(int(ntn\['refFrame'].value()))\nlab = ntk.label()\nmm = \"

Matchmove\"\nstab = \"

Stabilize\"\nif lab == mm:\n ntk.setLabel(stab)\n ntn\['invert'].setValue(True)\n ntn\['tile_color'].setValue(1834205695)\n if ntn\['set_to_input_1'].label() == \"

Set To Input\":\n ntn\['label'].setValue(\"Stabilize\\ninput\")\n else:\n ntn\['label'].setValue(\"Stabilize\\n\"+ref_frame)\nelif lab == stab:\n ntk.setLabel(mm)\n ntn\['invert'].setValue(False)\n ntn\['tile_color'].setValue(2051246591)\n if ntn\['set_to_input_1'].label() == \"

Set To Input\":\n ntn\['label'].setValue(\"Matchmove\\ninput\")\n else:\n ntn\['label'].setValue(\"Matchmove\\n\"+ref_frame)\n# auto toggle input/output aspect according to upstream CProject\nstored = []\ndef _recurse_up_select(node):\n global stored\n if node is not None and node not in stored:\n for i in range(node.inputs()):\n _recurse_up_select(node.input(i))\n stored.append(node.input(i))\n return stored\nstored = []\nupstream_nodes = _recurse_up_select(ntn.input(0))\nfor one in upstream_nodes:\n if one and 'card_to_track' in one.knobs():\n image_aspect = one\['image_aspect'].value()\n image_aspect_out = one\['image_aspect_out'].value()\n if image_aspect_out:\n ntn\['image_aspect'].setValue(True)\n ntn\['image_aspect_out'].setValue(False)\n break\n elif image_aspect:\n ntn\['image_aspect_out'].setValue(True)\n ntn\['image_aspect'].setValue(False)\n break\n else:\n ntn\['image_aspect_out'].setValue(False)\n ntn\['image_aspect'].setValue(False)\n break\n else:\n ntn\['image_aspect_out'].setValue(False)\n ntn\['image_aspect'].setValue(False)" +STARTLINE} addUserKnob {22 set_to_input_1 l "Set to input" t "this will distort the input texture with the corner pin, it is the same as applying the texture on the card " -STARTLINE T "import nuke\nntn = nuke.thisNode()\nntk = ntn\['set_to_input_1']\nlab = ntk.label()\ninput_set = \"

Set To Input\"\nref_frame_set = \"Set To Input\"\nif lab == input_set:\n ntk.setLabel(ref_frame_set)\nelse:\n ntk.setLabel(input_set)\nwith ntn:\n nuke.toNode(\"CornerPin2D2\")\[\"set_to_input\"].execute()\n ntn\['label'].setValue(ntn\['mode_toggle'].label().rpartition(\"> \")[2]+\"\\ninput\")"} addUserKnob {22 setCurrenrAsRefFrame l "set current frame as reference frame" t "On this frame no transformation will be applied." T "import nuke\nntn = nuke.thisNode()\nframe = int(nuke.frame())\nntk = ntn\['set_to_input_1']\nntk.setLabel(\"Set To Input\")\nfor one in range(1,5):\n ntn\['from'+str(one)].setValue(ntn\['to'+str(one)].valueAt(frame))\nntn\['label'].setValue(ntn\['mode_toggle'].label().rpartition(\">\")[2]+\"\\n\"+str(frame))\nntn\['refFrame'].setValue(frame)\nwith ntn:\n nuke.toNode(\"FHold\")\['first_frame'].setValue(frame)" +STARTLINE} addUserKnob {22 setRefFrame l "set specific reference frame" t "Same as previous button except you can choose the reference frame manually" T "import nuke\nntn = nuke.thisNode()\nframe = int(nuke.thisNode()\['refFrame'].value())\nntk = ntn\['set_to_input_1']\nntk.setLabel(\"Set To Input\")\nfor one in range(1,5):\n ntn\['from'+str(one)].setValue(ntn\['to'+str(one)].valueAt(frame))\nntn\['label'].setValue(ntn\['mode_toggle'].label().rpartition(\">\")[2]+\"\\n\"+str(frame))\nntn\['refFrame'].setValue(frame)\nwith ntn:\n nuke.toNode(\"FHold\")\['first_frame'].setValue(frame)" +STARTLINE} addUserKnob {3 refFrame l "" -STARTLINE} refFrame 34 addUserKnob {6 image_aspect l "preserve input image aspect" t "Preserve image aspect ratio. If disabled input aspect is set to square which is usefull when stabilize and unwrap texture." +STARTLINE} addUserKnob {6 image_aspect_out l "preserve output image aspect" +STARTLINE} addUserKnob {41 invert l stabilize t "stabilize the input on the reference frame" +INVISIBLE T CornerPin2D2.invert} addUserKnob {26 ""} addUserKnob {41 motionblur T CornerPin2D2.motionblur} addUserKnob {41 shutter T CornerPin2D2.shutter} addUserKnob {41 shutteroffset l "shutter offset" T CornerPin2D2.shutteroffset} addUserKnob {41 shuttercustomoffset -STARTLINE T CornerPin2D2.shuttercustomoffset} addUserKnob {41 filter_1 l filter T Reformat1.filter} addUserKnob {41 clamp -STARTLINE T CornerPin2D2.clamp} addUserKnob {41 black_outside l "black outside" -STARTLINE T CornerPin2D2.black_outside} addUserKnob {26 ""} addUserKnob {4 cropP l crop M {"Hard Crop" "Adjustable Crop" "No Crop"}} addUserKnob {7 growBbox l "grow Bbox" -STARTLINE +HIDDEN R 0 200} growBbox 50 addUserKnob {41 o l overscan +DISABLED +HIDDEN +INVISIBLE T Crop1.o} addUserKnob {26 text l tip T "Image is cropped to Input, Concatenation preserved."} addUserKnob {26 ""} addUserKnob {6 use_output_format l use +STARTLINE} addUserKnob {41 format l "output format" -STARTLINE T Reformat2.format} addUserKnob {41 pbb l "preserve bounding box" T Reformat2.pbb} addUserKnob {41 black_outside_1 l "black outside" -STARTLINE T Reformat2.black_outside} addUserKnob {41 clamp_1 l clamp -STARTLINE T Reformat2.clamp} addUserKnob {20 fromto l From/To} addUserKnob {41 from4 -STARTLINE T CornerPin2D2.from4} addUserKnob {41 from3 -STARTLINE T CornerPin2D2.from3} addUserKnob {41 from1 T CornerPin2D2.from1} addUserKnob {41 from2 -STARTLINE T CornerPin2D2.from2} addUserKnob {26 ""} addUserKnob {41 to4 T CornerPin2D2.to4} addUserKnob {41 to3 -STARTLINE T CornerPin2D2.to3} addUserKnob {41 to1 T CornerPin2D2.to1} addUserKnob {41 to2 -STARTLINE T CornerPin2D2.to2} } Input { inputs 0 name Input1 xpos 112 ypos -341 } FrameHold { name FHold xpos 112 ypos -289 disable {{!parent.FreezeInput}} } Transform { scale {1 {1/width*height}} center {{width/2} {height/2}} name Transform1 xpos 112 ypos -227 disable {{!parent.image_aspect}} } CornerPin2D { to1 {0 0} to2 {1920 0} to3 {1920 1080} to4 {0 1080} invert false shutteroffset centred from1 {0 0} from2 {1920 0} from3 {1920 1080} from4 {0 1080} name CornerPin2D2 xpos 112 ypos -171 addUserKnob {20 User} addUserKnob {22 "set reference frame" -STARTLINE T cornerPinZero()} } set Ne757db70 [stack 0] Dot { name Dot1 xpos 14 ypos -62 } push $Ne757db70 Crop { box {{curve-parent.growBbox} {curve-parent.growBbox} {width+parent.growBbox} {height+parent.growBbox}} name Crop1 xpos 112 ypos -62 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } push $Ne757db70 Reformat { type "to box" format "4096 2160 0 0 4096 2160 1 4K_DCP" box_width {{width}} box_height {{height}} box_pixel_aspect {{pixel_aspect}} resize none name Reformat1 xpos 223 ypos -69 } Switch { inputs 3 which {{parent.cropP x1000 0}} name Switch1 label "\[value which]" xpos 112 ypos 10 } Transform { scale {1 {1/height*width}} center {{width/2} {height/2}} name Transform2 xpos 112 ypos 81 disable {{!parent.image_aspect_out}} } Reformat { resize none center false pbb true name Reformat2 xpos 112 ypos 151 disable {{!parent.use_output_format}} } Output { name Output1 xpos 112 ypos 187 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_CameraNormals.gizmo ================================================ add_layer {N N.red N.green N.blue N.alpha} add_layer {P P.red P.green P.blue P.alpha} Group { name CameraNormals knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"fix\":\n if int(k.value()) == False:\n n.knobs()\['pworld'].setVisible(False)\n else:\n n.knobs()\['pworld'].setVisible(True)\n \nif k.name() == \"output_mask\":\n if int(k.value()) == False:\n n.knobs()\['invert'].setVisible(False)\n n.knobs()\['math'].setVisible(False)\n n.knobs()\['bias'].setVisible(False)\n else:\n n.knobs()\['invert'].setVisible(True)\n n.knobs()\['math'].setVisible(True)\n if n.knobs()\['math'].value() == \"Biased\":\n n.knobs()\['bias'].setVisible(True)\n else:\n n.knobs()\['bias'].setVisible(False)\n \nif k.name() == \"math\":\n if n.knobs()\['math'].value() == \"Biased\":\n n.knobs()\['bias'].setVisible(True)\n else:\n n.knobs()\['bias'].setVisible(False)" tile_color 0x7f7f7fff selected true addUserKnob {20 User l CameraNormals} addUserKnob {41 nworld l "N channels" T Shuffle_N.in} addUserKnob {26 divider1 l "" +STARTLINE} addUserKnob {6 fix l "Fix Camera Facing Normals" t "This will fix the blue component of your Normals, making it a perfect facing ratio mask for your CG" +STARTLINE} fix true addUserKnob {41 pworld l "P channels" T Shuffle_P.in} addUserKnob {26 divider2 l "" +STARTLINE} addUserKnob {6 output_mask l "Output Facing Ratio Mask" t "Instead of writing the new normals to your existing N channel, directly output_mask the Facing Ratio Mask in the RGBA\n(Note: This operation requires an alpha channel on the input)" +STARTLINE} output_mask true addUserKnob {6 invert l Invert? +STARTLINE} invert true addUserKnob {4 math l Math M {Simple Biased "" "" "" ""}} math Biased addUserKnob {26 spacer1 l "" -STARTLINE T " "} addUserKnob {7 bias l Bias -STARTLINE R -1 1} addUserKnob {20 about l About} addUserKnob {26 description l "" +STARTLINE T "This Gizmo converts your world-normals to camera-normals.\n\nCameraNormalsv1.0 by Nikolai Wüstemann (inspired by Eyal Shirazi)\nDummyCamv1.1 by Adrian Pueyo"} } Input { inputs 0 name Input xpos 239 ypos -24 } Dot { name Dot1 xpos 273 ypos 146 } set N114f6ff0 [stack 0] Dot { name Dot2 xpos -128 ypos 146 } set N11522990 [stack 0] Dot { name Dot3 xpos -638 ypos 146 } Shuffle { in P name Shuffle_P xpos -672 ypos 229 } Add { value {{-DummyCam.world_matrix.3} {-DummyCam.world_matrix.7} {-DummyCam.world_matrix.11} {DummyCam.translate}} name Add_ZeroCamPos xpos -672 ypos 302 } Expression { temp_name0 t temp_expr0 1/sqrt(r*r+g*g+b*b) channel0 {rgba.red -rgba.green -rgba.blue rgba.alpha} expr0 r*t expr1 g*t expr2 b*t name Expression1 xpos -672 ypos 381 } push $N11522990 Shuffle { in N name Shuffle_N xpos -162 ypos 233 } Dot { name Dot6 xpos -128 ypos 375 } set N11443fe0 [stack 0] MergeExpression { inputs 2 channel0 rgb expr0 -(Ar*Br+Ag*Bg+Ab*Bb) name MergeExpression_DotProduct xpos -422 ypos 517 } Dot { name Dot7 xpos -388 ypos 1016 } push $N11443fe0 ColorMatrix { matrix { {{DummyCam.world_matrix.0} {DummyCam.world_matrix.1} {DummyCam.world_matrix.2}} {{DummyCam.world_matrix.4} {DummyCam.world_matrix.5} {DummyCam.world_matrix.6}} {{DummyCam.world_matrix.8} {DummyCam.world_matrix.9} {DummyCam.world_matrix.10}} } invert true name ColorMatrix_RotateNormals xpos -162 ypos 729 } Dot { name Dot10 xpos -128 ypos 915 } set N113c1420 [stack 0] Dot { name Dot11 xpos -260 ypos 915 } ShuffleCopy { inputs 2 blue blue alpha alpha2 name ShuffleCopy_FixFacingRatio xpos -294 ypos 1013 } Dot { name Dot12 xpos -260 ypos 1134 } push $N113c1420 Switch { inputs 2 which {{fix}} name Switch_FixFacingRatio label "\[value this.which]" xpos -162 ypos 1125 } Remove { operation keep channels rgba name Remove_KeepRGBA xpos -162 ypos 1341 } Dot { name Dot4 xpos -128 ypos 1525 } set N1144c690 [stack 0] push $N114f6ff0 ShuffleCopy { inputs 2 alpha alpha2 black red white green red2 blue green2 alpha out2 {{{Shuffle_N.in}}} name ShuffleCopy_CopyNormals xpos 239 ypos 1522 } Dot { name Dot8 xpos 273 ypos 1921 } set N114455d0 [stack 0] push $N1144c690 Shuffle { red blue green blue alpha blue name Shuffle_UseBlueChannel xpos -162 ypos 1655 } Expression { temp_name0 b temp_expr0 bias/2+0.5 temp_name1 i temp_expr1 invert temp_name2 m temp_expr2 math temp_name3 v temp_expr3 i==0?r:1-r channel0 rgba expr0 (m==0)?v:(b**10)**(1-v) name Expression_FacingRatioMath xpos -162 ypos 1779 } Clamp { name Clamp xpos -162 ypos 1827 } Merge2 { inputs 2 operation mask name Merge_MaskWithAlpha xpos -162 ypos 1918 } Dot { name Dot5 xpos -128 ypos 2079 } push $N114455d0 Switch { inputs 2 which {{output_mask}} name Switch_Output label "\[value this.which]" xpos 239 ypos 2070 } Output { name Output1 xpos 239 ypos 2192 } Input { inputs 0 name cam xpos 421 ypos -32 number 1 } Camera { projection_mode {{"\[expression \[value the_cam]projection_mode(\[value the_frame])]"}} focal {{"\[expression \[value the_cam]focal(\[value the_frame])]"}} haperture {{"\[expression \[value the_cam]haperture(\[value the_frame])]"}} vaperture {{"\[expression \[value the_cam]vaperture(\[value the_frame])]"}} near {{"\[expression \[value the_cam]near(\[value the_frame])]"}} far {10000} win_translate {{"\[expression \[value the_cam]win_translate.u(\[value the_frame])]"} {"\[expression \[value the_cam]win_translate.v(\[value the_frame])]"}} win_scale {{"\[expression \[value the_cam]win_scale.u(\[value the_frame])]"} {"\[expression \[value the_cam]win_scale.v(\[value the_frame])]"}} winroll {{"\[expression \[value the_cam]winroll(\[value the_frame])]"}} focal_point {{"\[expression \[value the_cam]focal_point(\[value the_frame])]"}} fstop {{"\[expression \[value the_cam]fstop(\[value the_frame])]"}} name DummyCam help "DummyCam by Adrian Pueyo\n\nCamera that apart from the matrices also grabs all the \"Projection\" values from the upstream camera that it's connected to. Turns into a default Camera if no Camera connected. Can also be used inside of groups and gizmos, as many levels deep as you want :D All using live and super fast TCL.\n\nUpdated v1.1: Now grabs the correct frame too (thanks Erwan Leroy for the idea).\n\nUpdated v1.3: Now accepts Nuke13's Camera3\n\nadrianpueyo.com, 2019-2021" onCreate "n = nuke.thisNode()\nfor k in \[\"projection_mode\",\"focal\",\"haperture\",\"vaperture\",\"near\",\"far\",\"win_translate\",\"win_scale\",\"winroll\",\"focal_point\",\"fstop\"]:\n n\[k].setFlag(0x0000000010000000)" xpos 431 ypos 36 addUserKnob {20 DummyCam l Defaults} addUserKnob {43 the_cam +INVISIBLE} the_cam "\[\n#DummyCam v1.3 - Updated 5 May 2021.\nset starting_point \"this.input0\"\nset default \"this.d_\"\n\n# If cam has no inputs, return the default.\nif \{\[exists \$starting_point]\} \{\n set x \[node \$starting_point]\n\} \{ \n return \$default\n\}\n\nset finished 0\nwhile \{\$finished != 1\} \{\n\n # First look for a Cam or Input or topnode.\n while \{\[class \$x] != \"Camera3\" && \[class \$x] != \"Camera2\" && \[class \$x] != \"Camera\" && \[class \$x] != \"Input\" && \$x != \[topnode \$x]\} \{\n set x \[node \$x.input0]\n \}\n\n # Then, check if node is a cam (and return), and otherwise, if it's an input, see if the parent exists and move to it.\n if \{\[class \$x]==\"Camera3\"||\[class \$x]==\"Camera2\"||\[class \$x]==\"Camera\"\} \{\n set x \[append x \".\"]\n return \$x\n \} \{ \n if \{ \[class \$x]==\"Input\" \} \{ \n set inp \"\$x.parent.input\"\n set inputNum \[value \$x.number]\n set inp \[append inp \$inputNum]\n if \{ \[exists \$inp] \} \{\n set x \[node \$inp]\n \} \{ \n set finished 1\n \}\n \} \{ \n set finished 1\n \}\n \}\n\}\nreturn \$default\n]" addUserKnob {43 the_frame +INVISIBLE} the_frame "\[\nset the_camera \[string trimright \[value the_cam] .]\nif \{\[exists \$the_camera]\} \{\n return \[value \$the_camera.frame]\n\} \{ \n return \[frame]\n\}\n]" addUserKnob {4 d_projection_mode l projection M {perspective orthographic uv spherical ""}} addUserKnob {7 d_focal l "focal length" R 0 100} d_focal 50 addUserKnob {7 d_haperture l "horiz aperture" R 0 50} d_haperture 24.576 addUserKnob {7 d_vaperture l "vert aperture" R 0 50} d_vaperture 18.672 addUserKnob {7 d_near l near R 0 10} d_near 0.1 addUserKnob {7 d_far l far R 0 10000} d_far 10000 addUserKnob {30 d_win_translate l "window translate"} addUserKnob {30 d_win_scale l "window scale"} d_win_scale {1 1} addUserKnob {7 d_winroll l "window roll" R 0 45} addUserKnob {7 d_focal_point l "focal distance" R 0 10} d_focal_point 2 addUserKnob {7 d_fstop l fstop R 0 30} d_fstop 16 addUserKnob {26 version l " " t "Updated 5 May 2021" T "
DummyCam v1.3 - adrianpueyo.com, 2019-2021
"} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_CardToTrack.gizmo ================================================ Group { name CardToTrack onCreate "#nuke.thisNode()\['picker'].setValue(\[nuke.toNode(\"root\")\['format'].value().width()/2,nuke.toNode(\"root\")\['format'].value().height()/2])" tile_color 0x5236ff gl_color 0xff0000ff note_font "DejaVu Sans" note_font_size 14 note_font_color 0xff selected true addUserKnob {20 User l CardToTrack} addUserKnob {26 ""} addUserKnob {26 extras l "" t "here you can choose the way you would like find your position\n\n1 I have a Camera and great Matchmove\n means you have only a tracked Camera - you will have to go normal way in finding position\n\n2 I have a Camera and Geometry\n see little input called \"Extra\"? this is your new friend, if you have by any chance a geometry of the Scene - can be a model, lidar scan or just a bunch Nuke objects, connect it to the \"Extra\" input and press \"Set\" button, congrats you found your 3D position and ready sdjust your perspective(no need to bother with \"Z\" and \"Happy\" button\n\n3 I have a Camera and Wpos pass\n if your nice 3D Artist rendered for you a Wpos pass, connect it to the \"Extra\" input and press \"Set\" button, congrats you found your 3D position and ready sdjust your perspective(no need to bother with \"Z\" and \"Happy\" button\n\n4 I have a Camera and Card\n Let say you have animated Card and you want to translate it's position to Screen space, connect the Card to the .... guess what and press \"GO\" button\n DONE!!!\n5 Axis \n In Case you have card which animation is driven by one ore more Axises you can use this option. Just connect the Extra pipe to the lowest Axis in the chain. the script will consolidate transformations for you!\n\n" +STARTLINE T "I have a Camera and"} addUserKnob {41 _1 l " " -STARTLINE T NoOp2.extraStuff} addUserKnob {41 extraHelper l "" -STARTLINE +INVISIBLE T NoOp2.extraHelper} addUserKnob {3 scene l " scene size" t "the tool does not know how big your scene is, if after adjusting \"Z\" slider you see that the card you generating is too big or too small - adjust the scene size.\n\nyou not going to see something changing till you will press \"Set\" button again\n\nif you do happy you can leave this knob alone there will be no need to touch it again\n\njust remember the value so you will be able to enter it when you will be work on the other shots from the same sequence\n\ncheers!" -STARTLINE} scene 10 addUserKnob {41 hue_rotation l "hue grid" -STARTLINE T HueShift1.hue_rotation} addUserKnob {7 op l " opacity grid" -STARTLINE} op 1 addUserKnob {26 ""} addUserKnob {20 setGroup l "set Reference" n 1} addUserKnob {26 ds l 1. t "first step in finding desired position.\n\nplease find some feature on the screen, feature you can see on the other frames as well.\nnot position the picker on this feature and press \"Set\" button\n\nthe reference frame is set, yo should see now the grid centering on the \"picker\"\n\nthere is a chance that \"grid\" will be very small or very big depends on the size of your scene, feel free to adjust it's size with the u_scale knob.\n\nnow you ready for the next step" T "Set reference frame."} addUserKnob {22 REF l Set t "first step in finding desired position.\n\nplease find some feature on the screen, feature you can see on the other frames as well.\nnot position the picker on this feature and press \"Set\" button\n\nthe reference frame is set, yo should see now the grid centering on the \"picker\"\n\nthere is a chance that \"grid\" will be very small or very big depends on the size of your scene, feel free to adjust it's size with the u_scale knob.\n\nnow you ready for the next step" T "import NST_cardToTrack\nNST_cardToTrack.setRefFrame()" +STARTLINE} addUserKnob {6 S l INVISIBLE -STARTLINE +INVISIBLE} addUserKnob {3 refFrame l " reference frame:" -STARTLINE +INVISIBLE} refFrame 1001 addUserKnob {41 picker l " " -STARTLINE T NoOp1.picker} addUserKnob {20 endGroup_3 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 findZ l "Find Z" n 1} findZ 0 addUserKnob {26 d l "2. " t "Second step help us to find exact position in 3d space\n\nstart advance few frames, you should see that a grid is not fixed anymore to your reference feature, from the moment you noticing it is happening adjust \"Z\" knob to bring the \"grid\" back to the place it was. already after first adjustment you will see that grid is sticking well to the feature. Now you can go to some other frame and refine the position again if needed\n\nTipp:\nit is possible that already after one or two frames of advancement your grid will disappear it can happen because of the size of your scene. just play with \"Z\" slider till you will bring the \"grid\" back to the screen. it is possible that you will have to go to negative values as well." T "go to some other frame and adjust Z. Use stabilize if needed."} addUserKnob {41 Stabilize -STARTLINE T NoOp2.Stabilize} addUserKnob {6 HighPass -STARTLINE +HIDDEN} addUserKnob {7 sharpen l "" -STARTLINE +HIDDEN R 1 10} sharpen 2 addUserKnob {7 Zfind l Z t "Second step help us to find exact position in 3d space\n\nstart advance few frames, you should see that a grid is not fixed anymore to your reference feature, from the moment you noticing it is happening adjust \"Z\" knob to bring the \"grid\" back to the place it was. already after first adjustment you will see that grid is sticking well to the feature. Now you can go to some other frame and refine the position again if needed.\nonce you happy with the result\npress \"Happy\" button!!!\n\nTipp:\nit is possible that already after one or two frames of advancement your grid will disappear it can happen because of the size of your scene. just play with \"Z\" slider till you will bring the \"grid\" back to the screen. it is possible that you will have to go to negative values as well." R -100 100} addUserKnob {26 s l 3. t "this will create an axis in exact 3D position you found\nplease adjust (if needed)\nrotation of the card to match exact perspective you want\n\nTipp :\nadjusting \"scale\" and \"u_scale\":\nbe carefull when scaling up the card!!! from the moment one of the corners of the \"grid\" is passing the origin of the Camera the calculation will fail. So as a good practice leave your \"grid\" not too big it will not matter for final calculation since it still will lay on the same plane.\n\n" T "Happy with Z? Press \"Happy\" button and adjust perspective."} addUserKnob {22 Adjust l Happy!!! t "this will create an axis in exact 3D position you found\nplease adjust (if needed)\nrotation of the card to match exact perspective you want\n\nTipp :\nadjusting \"scale\" and \"u_scale\":\nbe carefull when scaling up the card!!! from the moment one of the corners of the \"grid\" is passing the origin of the Camera the calculation will fail. So as a good practice leave your \"grid\" not too big it will not matter for final calculation since it still will lay on the same plane.\n\n" T "import NST_cardToTrack\nNST_cardToTrack.happy()" +STARTLINE} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {20 happyGroup l "Adjust TRS" n 1} happyGroup 0 addUserKnob {41 translate T Perspective.translate} addUserKnob {41 rotate l "rotate " T Perspective.rotate} addUserKnob {41 scaling l "scale " T Perspective.scaling} addUserKnob {41 uniform_scale l "u_scale " T Perspective.uniform_scale} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 goGroup l "Create Nodes" n 1} goGroup 0 addUserKnob {26 r l 4. t "this little fellow will create for you three nodes\n\n1. NST_CProject - basically it is a cornerPin node with steroids it allowes to you very easy set Reference point for your \"projection\", stabilize, crop. all in one\n2. CornerPin with a transformation baked in the \"matrix\" knob - usually i am using it to copy to GridWarp or SplineWarp\n3. Roto - the node i am using the most.\nthe transformation is baked into the root matrix.\nso just pick the frame create the rotoshape and enjoy!" T "Time to create our Nodes!"} addUserKnob {22 C2T l -----------------------GO!----------------------- t "this little fellow will create for you three nodes\n\n1. NST_CProject - basically it is a cornerPin node with steroids it allowes to you very easy set Reference point for your \"projection\", stabilize, crop. all in one\n2. CornerPin with a transformation baked in the \"matrix\" knob - usually i am using it to copy to GridWarp or SplineWarp\n3. Roto - the node i am using the most.\nthe transformation is baked into the root matrix.\nso just pick the frame create the rotoshape and enjoy!" T "import NST_cardToTrack\nNST_cardToTrack.go()" +STARTLINE} addUserKnob {26 w l "" -STARTLINE T or} addUserKnob {22 Card l "Create object only" t "create 3d object in extracted position\nwithout animation" -STARTLINE T "import NST_cardToTrack\nNST_cardToTrack.objectOnly()"} addUserKnob {6 Card_1 l Card t "Create a card based on 3D position" +STARTLINE} Card_1 true addUserKnob {6 CornerPin l "Corner Pin" t "Create a corner pin based on 3D position" +STARTLINE} CornerPin true addUserKnob {6 Roto t "Create a Roto node based on 3D position.\nTracking of the Roto will be saved on the Root leves of the node." +STARTLINE} Roto true addUserKnob {6 Transform t "Create a transform based on 3D position" +STARTLINE} addUserKnob {6 Matrix t "Create a Matrix representation of the transformatio in 3D space, can bre used later in various nodes such as RotoPaint, GridWarp, SplineWarp and so on.\n\nSide note - GridWarp is buggy when using matrix - better stabilize image with corner Pin, use grid warp and un- stabilize back with corner pin.\n(use uv/stmap to reduce quality hits)" +STARTLINE} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {26 ""} addUserKnob {26 credit l " ©" T "Helge Stang & Alexey Kuchinski"} addUserKnob {20 help_1 l Help} addUserKnob {26 hhelp l "" +STARTLINE T "---------------------------------------------------\nStep 1\n\nplease find some feature on the screen, feature you can see on the other frames as well.\nnow position the picker on this feature and press \"Set\" button\n\nthe reference frame is set, yo should see now the grid centering on the \"picker\"\n\nthere is a chance that \"grid\" will be very small or very big depends on the size of your scene, feel free to adjust it's size with the u_scale knob.\n\nnow you ready for the next step\n\n---------------------------------------------------\nStep 2\n\nLet's find exact position in 3d space\n\nstart advance few frames, you should see that a grid is not fixed anymore to your reference feature, from the moment you noticing it is happening adjust \"Z\" knob to bring the \"grid\" back to the place it was. already after first adjustment you will see that grid is sticking well to the feature. Now you can go to some other frame and refine the position again if needed\n\nTipp:\nit is possible that already after one or two frames of advancement your grid will disappear it can happen because of the size of your scene. just play with \"Z\" slider till you will bring the \"grid\" back to the screen. it is possible that you will have to go to negative \nvalues as well.\n\n---------------------------------------------------\nStep 3\n\nthis will create an axis in exact 3D position you found\nplease adjust (if needed)\nrotation of the card to match exact perspective you want\n\nTipp :\nadjusting \"scale\" and \"u_scale\":\nbe carefull when scaling up the card!!! from the moment one of the corners of the \"grid\" is passing the origin of the Camera the calculation will fail. So as a good practice leave your \"grid\" not too big it will not matter for final calculation since it still will lay on the same plane.\n\n\n---------------------------------------------------\nStep 4\n\nButton \"Go\" will create for you few nodes\n\n1. NST_CProject - basically it is a cornerPin node with steroids it allowes to you very easy set Reference point for your \"projection\", stabilize, crop. all in one\n2. CornerPin with a transformation baked in the \"matrix\" knob - usually i am using it to copy to GridWarp or SplineWarp\n3. Roto - the node i am using the most.\nthe transformation is baked into the root matrix.\nso just pick the frame create the rotoshape and enjoy!\n"} addUserKnob {26 credits l "" +STARTLINE T "CardToTrack v4.0 || by Alexey Kuchinski | lamakaha@gmail.com | 7/2017"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x546b3d01 note_font "Helvetica Bold" note_font_size 100 xpos -1719 ypos 977 bookmark false bdwidth 287 bdheight 334 } StickyNote { inputs 0 name StickyNote1 tile_color 0xffffffff label "Mark Joey Tang Deep2VP ." note_font "Helvetica Bold" note_font_size 20 xpos -1719 ypos 939 } Input { inputs 0 name Extra xpos -1449 ypos -791 number 2 } Dot { name Dot11 xpos -1415 ypos 566 } set Nd0813800 [stack 0] Dot { name Dot12 xpos -1415 ypos 673 } set Nd0813400 [stack 0] Dot { name Dot7 xpos -1415 ypos 726 } set Nd0813000 [stack 0] Dot { name Dot31 xpos -1675 ypos 726 } DeepExpression { chans0 rgb chans1 none rgba.red "( ( x/\[value input.width] ) - 0.5 ) * \[value hratio] * deep.front )" rgba.green "( ( y/\[value input.height] ) - 0.5 ) * ( ( \[value hratio]*deep.front ) / ( \[value input.width]/\[value input.height] ) )" rgba.blue -deep.front name DeepExpression6 label "initial setup" xpos -1709 ypos 1086 addUserKnob {20 User} addUserKnob {7 hratio} hratio {{"\[value cam_data.haperture] / \[value cam_data.focal]"}} } DeepExpression { chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "(r * \[value cam_data.world_matrix.0] + g * \[value cam_data.world_matrix.1] + b * \[value cam_data.world_matrix.2]) + \[value cam_data.world_matrix.3]" rgba.green "(r * \[value cam_data.world_matrix.4] + g * \[value cam_data.world_matrix.5] + b * \[value cam_data.world_matrix.6]) + \[value cam_data.world_matrix.7]" rgba.blue "(r * \[value cam_data.world_matrix.8] + g * \[value cam_data.world_matrix.9] + b * \[value cam_data.world_matrix.10]) + \[value cam_data.world_matrix.11]" name deepCT_00 label camera xpos -1709 ypos 1172 addUserKnob {20 User} } DeepToImage { name DeepToImage3 xpos -1709 ypos 1236 } Dot { name Dot26 xpos -1675 ypos 1840 } push $Nd0813000 Dot { name Dot9 xpos -1415 ypos 1731 } Input { inputs 0 name Camera xpos -624 ypos 760 number 1 } set Nd0810c00 [stack 0] push $Nd0813800 Axis { inputs 0 translate {{"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].translate.0]\}]" x1112 -519.8007202} {"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].translate.1]\}]" x1112 197.4966736} {"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].translate.2]\}]" x1112 -128.6857147}} rotate {{"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].rotate.0]\}]"} {"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].rotate.1]\}]"} {"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].rotate.2]\}]"}} name Axis1 xpos -805 ypos 40 } ColorBars { inputs 0 name ColorBars1 xpos -976 ypos -130 } Card2 { rows 4 columns 4 z 10 lens_in_focal {{"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].focal]\}]"}} lens_in_haperture {{"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].haperture]\}]"}} control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card2 xpos -976 ypos -3 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } TransformGeo { inputs 2 name TransformGeo2 xpos -976 ypos 60 } Switch { inputs 2 which {{parent.extraHelper==1?1:0}} name GeoInput xpos -976 ypos 563 } Input { inputs 0 name BG xpos 800 ypos -858 } Dot { name Dot4 xpos 834 ypos -788 } set Nd07e3000 [stack 0] Dot { name Dot5 xpos -1122 ypos -788 } Dot { name Dot6 xpos -1119 ypos 911 } ScanlineRender { inputs 3 motion_vectors_type distance output_shader_vectors true P_channel rgb name ScanlineRender2 xpos -976 ypos 907 } Switch { inputs 2 which {{parent.extraHelper==2?1:0}} name WpasRender xpos -976 ypos 1728 } Switch { inputs 2 which {{parent.extraHelper==5?1:0}} name deepInput note_font_size 14 xpos -976 ypos 1836 } NoOp { name NoOp1 tile_color 0xffff gl_color 0xffff xpos -976 ypos 2323 addUserKnob {20 User} addUserKnob {22 pick T "a=nuke.toNode(\"NoOp1\")\nr=nuke.sample(a,\"red\",a\['picker'].value(0),a\['picker'].value(1),1,1)\ng=nuke.sample(a,\"green\",a\['picker'].value(0),a\['picker'].value(1),1,1)\nb=nuke.sample(a,\"blue\",a\['picker'].value(0),a\['picker'].value(1),1,1)\n#nuke.tprint(r)\nnuke.toNode('look_at_Axis')\['translate'].setValue(\[r,g,b])" +STARTLINE} addUserKnob {12 picker} picker {10 10} } Clamp { channels rgba name Clamp1 xpos -125 ypos 2323 } push $Nd0810c00 FrameHold { first_frame 1058 name StabFrameHold xpos -624 ypos 1121 disable true } set Nd07a0800 [stack 0] push $Nd0810c00 Axis { name Axis3 xpos -500 ypos 817 } Dot { name Dot10 xpos -476 ypos 900 } Card2 { inputs 0 display wireframe render_mode off image_aspect false rows 1 columns 1 uniform_scale 600 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card3 tile_color 0xff00ff gl_color 0xff00ff xpos -375 ypos 819 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } TransformGeo { inputs 2 name TransformGeo3 tile_color 0xff00ff gl_color 0xff00ff xpos -375 ypos 896 } Dot { name Dot20 xpos -341 ypos 983 } push $Nd0813000 Constant { inputs 0 format "512 512 0 0 512 512 1 square_512" name Constant2 tile_color 0xff xpos -239 ypos -627 postage_stamp false } set Nd07e0400 [stack 0] Wireframe { operation "see through" line_width 1 line_color {1 0 0 1} name Wireframe4 xpos -642 ypos -416 } set Nd073fc00 [stack 0] Card2 { display wireframe image_aspect false rows 1 columns 1 translate {0.5 -0.5 0} uniform_scale 0.03 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card9 xpos -891 ypos -370 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } Dot { name Dot19 xpos -857 ypos -260 } push $Nd073fc00 Card2 { display wireframe image_aspect false rows 1 columns 1 translate {0.5 0.5 0} uniform_scale 0.03 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card8 xpos -806 ypos -367 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } Dot { name Dot18 xpos -772 ypos -286 } push $Nd073fc00 Card2 { display wireframe image_aspect false rows 1 columns 1 translate {-0.5 -0.5 0} uniform_scale 0.03 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card7 xpos -724 ypos -367 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } Dot { name Dot17 xpos -690 ypos -312 } push $Nd073fc00 Card2 { display wireframe image_aspect false rows 1 columns 1 translate {-0.5 0.5 0} uniform_scale 0.03 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card6 xpos -642 ypos -373 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } MergeGeo { inputs 2 selectable false name MergeGeo5 xpos -642 ypos -316 } MergeGeo { inputs 2 selectable false name MergeGeo6 xpos -642 ypos -290 } MergeGeo { inputs 2 selectable false name MergeGeo7 xpos -642 ypos -264 } Dot { name Dot16 xpos -608 ypos -187 } push $Nd07e0400 Wireframe { operation "see through" line_width 1 line_color {0 1 0 1} name Wireframe5 xpos -495 ypos -441 } Card2 { display wireframe cast_shadow false receive_shadow false image_aspect false rows 2 columns 2 uniform_scale 100 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card5 xpos -495 ypos -371 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } Dot { name Dot15 xpos -461 ypos -307 } push $Nd07e0400 Wireframe { operation "see through" line_width 1 line_color {1 0 1 1} name Wireframe3 xpos -352 ypos -421 } Card2 { display wireframe rows 2 columns 2 translate {0 0 -0.0001} uniform_scale 0.1 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card4 xpos -352 ypos -379 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } Dot { name Dot14 xpos -318 ypos -333 } push $Nd07e0400 Wireframe { operation "see through" line_width 0.1 name Wireframe2 xpos -239 ypos -425 } Card2 { display wireframe rows 4 columns 4 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card1 xpos -232 ypos -372 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } MergeGeo { inputs 2 selectable false name MergeGeo2 xpos -232 ypos -337 } MergeGeo { inputs 2 selectable false name MergeGeo3 xpos -232 ypos -311 } MergeGeo { inputs 2 selectable false name MergeGeo4 xpos -232 ypos -191 } set Nb88de000 [stack 0] TransformGeo { inputs 2 name TransformGeo5 xpos -715 ypos 722 } Wireframe { inputs 0 operation "see through" line_width 2 name Wireframe1 xpos -713 ypos 433 } set Nb88dd800 [stack 0] push $Nd0813400 ApplyMaterial { inputs 2 name ApplyMaterial2 xpos -585 ypos 669 } push $Nb88dd800 push $Nd0813400 ApplyMaterial { inputs 2 name ApplyMaterial1 xpos -808 ypos 519 } push 0 Switch { inputs 2 which {{parent.extraHelper==1?1:0}} name GeoInput1 xpos -470 ypos 640 } Axis { inputs 0 display off selectable false scaling {0 0 0} name Perspective selected true xpos -610 ypos 7 } Axis { inputs 0 translate {-23.31071663 15.68824577 -22.73529816} rotate {{"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return degrees(atan((\[topnode input1].translate.y(ref)-translate.y)/sqrt(pow2(sqrt(pow2(\[topnode input1].translate.x(ref)-translate.x)+pow2(\[topnode input1].translate.z(ref)-translate.z))))))\}] "} {"\[topnode input1].translate.x(ref)-translate.x >= 0 ? 270-degrees(atan((\[topnode input1].translate.z(ref)-translate.z)/(\[topnode input1].translate.x(ref)-translate.x))): -degrees(atan((\[topnode input1].translate.z(ref)-translate.z)/(\[topnode input1].translate.x(ref)-translate.x)))-270"} {"curve "}} name look_at_Axis xpos -500 ypos -146 addUserKnob {20 User} addUserKnob {3 ref} ref {{parent.refFrame}} } Axis2 { inputs 0 name Axis2 xpos -362 ypos -150 } Switch { inputs 2 which {{"\[exists parent.input1]"}} name Switch2 label "\[value which]" xpos -510 ypos -52 } Axis { display solid+wireframe translate {0 0 {parent.Zfind}} uniform_scale {{parent.Perspective.uniform_scale}} name Z_finder xpos -497 ypos 14 } Switch { inputs 2 which 1 name Switch label "\[value which]" xpos -507 ypos 126 } Dot { name Dot1 xpos -473 ypos 222 } set Nb8847400 [stack 0] push $Nb88de000 push 0 Switch { inputs 2 which 1 name Switch1 label "\[value which]" xpos -232 ypos 138 } TransformGeo { inputs 2 name TransformGeo1 xpos -231 ypos 218 } MergeGeo { inputs 2 selectable false name MergeGeo1 xpos -231 ypos 640 } Switch { inputs 3 which {{parent.extraHelper==3?1:parent.extraHelper==4?2:0}} name AnimCard xpos -231 ypos 722 } MergeGeo { inputs 2 selectable false name MergeGeo8 xpos -231 ypos 979 } push $Nd07a0800 push $Nb8847400 Dot { name Dot8 xpos -470 ypos 583 } push $Nd0810c00 push $Nd07e3000 Dot { name Dot21 xpos 834 ypos 764 } set Nb8846000 [stack 0] Project3D { inputs 2 crop false name Project3D1 xpos 550 ypos 760 } Card2 { display wireframe rows 4 columns 4 uniform_scale 100000 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card10 xpos 554 ypos 950 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } TransformGeo { inputs 2 name TransformGeo4 xpos 554 ypos 993 } push $Nb8846000 Dot { name Dot22 xpos 834 ypos 1035 } set Nb8845000 [stack 0] Remove { name Remove2 xpos 653 ypos 1025 } ScanlineRender { inputs 3 shutter 0 motion_vectors_type distance name ScanlineRender3 xpos 554 ypos 1127 } push $Nb8845000 Switch { inputs 2 which 1 name StabSwitch label "\[value which]" xpos 800 ypos 1121 disable true } Dot { name Dot2 xpos 834 ypos 1510 } Dot { name Dot3 xpos 834 ypos 1582 } set Nb87bfc00 [stack 0] Remove { name Remove1 xpos 154 ypos 1578 } ScanlineRender { inputs 3 shutter 0 motion_vectors_type distance name ScanlineRender1 xpos -235 ypos 1584 } HueShift { name HueShift1 xpos -235 ypos 1702 } Multiply { channels rgba value {{parent.op}} name Multiply1 xpos -235 ypos 1728 } push $Nb87bfc00 Merge2 { inputs 2 name Merge2 xpos 113 ypos 1808 disable {{HighPass}} } Merge2 { inputs 2 mix 0.001 name Merge1 xpos 113 ypos 2323 } Dot { name Dot29 xpos 144 ypos 2459 } set Nb87be000 [stack 0] Dot { name Dot13 xpos 21 ypos 2459 } Shuffle { alpha white name Shuffle1 tile_color 0xffffffff label "White Alpha" xpos -13 ypos 2511 } Dot { name Dot23 xpos 21 ypos 2562 } set Nb87bd400 [stack 0] Dot { name Dot27 xpos -123 ypos 2562 } Invert { channels rgba name Invert1 xpos -157 ypos 2593 } FrameHold { name StabRef xpos -157 ypos 2631 } Dot { name Dot28 xpos -123 ypos 2698 } push $Nb87bd400 Merge2 { inputs 2 bbox A name Merge3 xpos -13 ypos 2694 } Grade { add -1 black_clamp false name Grade1 xpos -13 ypos 2720 addUserKnob {20 User} addUserKnob {22 "keep luma" -STARTLINE T keepLuma()} addUserKnob {22 "keep luma_1" l "keep luma" -STARTLINE T keepLuma()} addUserKnob {22 "keep luma_2" l "keep luma" -STARTLINE T keepLuma()} addUserKnob {22 "keep luma_3" l "keep luma" -STARTLINE T keepLuma()} } Grade { multiply {{parent.sharpen}} add 0.5 name Grade2 xpos -13 ypos 2746 addUserKnob {20 User} addUserKnob {22 "keep luma" -STARTLINE T keepLuma()} addUserKnob {22 "keep luma_1" l "keep luma" -STARTLINE T keepLuma()} addUserKnob {22 "keep luma_2" l "keep luma" -STARTLINE T keepLuma()} addUserKnob {22 "keep luma_3" l "keep luma" -STARTLINE T keepLuma()} } Dot { name Dot30 xpos 21 ypos 2825 } push $Nb87be000 Switch { inputs 2 which {{HighPass}} name HighPass label "\[value which]" xpos 110 ypos 2815 } Output { name Output1 xpos 110 ypos 3021 } Camera { inputs 0 display off selectable false xform_order {{"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].cam_xform_order]\}]"}} rot_order {{"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].cam_rot_order]\}]"}} useMatrix true matrix { {{"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].world_matrix.0]\}]"} {"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].world_matrix.1]\}]"} {"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].world_matrix.2]\}]"} {"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].world_matrix.3]\}]"}} {{"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].world_matrix.4]\}]"} {"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].world_matrix.5]\}]"} {"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].world_matrix.6]\}]"} {"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].world_matrix.7]\}]"}} {{"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].world_matrix.8]\}]"} {"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].world_matrix.9]\}]"} {"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].world_matrix.10]\}]"} {"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].world_matrix.11]\}]"}} {{"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].world_matrix.12]\}]"} {"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].world_matrix.13]\}]"} {"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].world_matrix.14]\}]"} {"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].world_matrix.15]\}]"}} } focal {{"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].focal]\}]"}} haperture {{"\[if \{\[exists parent.input1] == 0\} \{return 0\} else \{return \[value \[topnode this.parent.input1].haperture]\}]"}} name cam_data xpos -1567 ypos 1072 } NoOp { inputs 0 name NoOp2 knobChanged "nn = nuke.thisGroup()\nk = nuke.thisKnob()\nkn = k.name()\n\nif kn == \"extraStuff\":\n if nn\['extraHelper'].value() in \[0,1,2,5]:\n nn\[\"setGroup\"].clearFlag(1)\n nn\['findZ'].setFlag(1)\n nn\[\"happyGroup\"].setFlag(1)\n nn\[\"goGroup\"].setFlag(1)\n nn\[\"Zfind\"].setValue(0)\n nn\['translate'].setValue(0)\n nn\['rotate'].setValue(0)\n nn\['scaling'].setValue(0)\n elif nn\['extraHelper'].value() in \[3,4]:\n nn\[\"setGroup\"].setFlag(1)\n nn\['findZ'].setFlag(1)\n nn\[\"happyGroup\"].setFlag(1)\n nn\[\"goGroup\"].clearFlag(1)\n nn\[\"Zfind\"].setValue(0)\nelif kn == \"Stabilize\":\n t = nn\['S']\n if t.value() == 0:\n nn\['HighPass'].setVisible(False)\n nn\['sharpen'].setVisible(False)\n else:\n nn\['HighPass'].setVisible(True)\n nn\['sharpen'].setVisible(True)\n " xpos 479 ypos -605 addUserKnob {20 User} addUserKnob {4 extraStuff t "here you can choose the way you would like find your position\n\n1 I have a Camera and great Matchmove\n means you have only a tracked Camera - you will have to go normal way in finding position\n\n2 I have a Camera and Geometry\n see little input called \"Extra\"? this is your new friend, if you have by any chance a geometry of the Scene - can be a model, lidar scan or just a bunch Nuke objects, connect it to the \"Extra\" input and press \"Set\" button, congrats you found your 3D position and ready sdjust your perspective(no need to bother with \"Z\" and \"Happy\" button\n\n3 I have a Camera and Wpos pass\n if your nice 3D Artist rendered for you a Wpos pass, connect it to the \"Extra\" input and press \"Set\" button, congrats you found your 3D position and ready sdjust your perspective(no need to bother with \"Z\" and \"Happy\" button\n\n4 I have a Camera and Card\n Let say you have animated Card and you want to translate it's position to Screen space,\n connect the Card to the .... \n Adjust rotation/position/scaling in the Card it self if needed\n and press \"GO\" button\n DONE!!!\n\n5 I have a Camera and an Axis\n In some cases you have to use multiple Axises to refine position of your card.\n This option will consolidate transformations stored in Axises.\n Adjust rotation/position/scaling in the Axis it self if needed\n Connect the last (lowest) axis to Extra pipe and press GO button\n\n6 Use this one in case you have deep image." M {"great match move!!!" Geometry "Wpos pass" Card Axis Deep ""}} addUserKnob {3 extraHelper} extraHelper {{"\[numvalue extraStuff]"}} addUserKnob {22 Stabilize T "import NST_cardToTrack\nNST_cardToTrack.stabilize()" +STARTLINE} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_CardToTrack2.gizmo ================================================ Group { name CardToTrack_v9_ inputs 3 help "This group helps to find position of 3d point in space, extract this position back to screen space and create Cornerpin or roto that is tracked to this position." tile_color 0x5236ff gl_color 0xff0000ff note_font "DejaVu Sans" note_font_size 14 note_font_color 0xff addUserKnob {20 card_to_track l "Card To Track"} addUserKnob {26 ""} addUserKnob {26 extras l "" t "tooltip is in next knob :)" +STARTLINE T "I have a Camera and"} addUserKnob {41 _1 l "" t "Here you can choose the way you would like to extract the positoin.\n(do not forget to undistort your input)\n\n> I have a Camera and great Matchmove\n Means you have only a tracked Camera:\n - Set a reference frame - move the 'picker' to area you want to extract position from, \n - pres 'Set' Button\n - Move to different frame and move 'z' knob value till grid is moving back to same location you had in a Reference frame\n - Use Stabilize and Highpass function to be presize\n - Press 'Happy' button\n - Adjust the Rotation, Position and Scale of your card if needed\n - Press 'Go'\n\n> I have a Camera and Geometry\n - connect geometry to the \"Extra\" input.\n - move the 'picker' to area you want to extract position from, pres 'Set'\n - Adjust the Rotation, Position and Scale of your card if needed\n - Press 'Go'\n\n> I have a Camera and Wpos pass\n If nice 3D Artist rendered for you a World position pass, connect it to the \"Extra\" input (world position should be shuffled to RGB)\n - move the 'picker' to area you want to extract position from, pres 'Set'\n - Adjust the Rotation, Position and Scale of your card if needed\n - Press 'Go'\n\n> I have a Camera ande a 3D Locator(card or axis)\n Let say you have animated Card, an Axis or an array of Axises\n - connect an Axis or Card to the \"Extra\" input.\n - Press 'Go'\n (you can add additional Axis between your animated Axis and card_to_track if you would like to refine your position or rotation)\n\n> I have a Camera and Deep\n If you do have a Deep render, connect it to the \"Extra\" input.\n - move the 'picker' to area you want to extract position from, pres 'Set'\n - Adjust the Rotation, Position and Scale of your card if needed\n - Press 'Go'\n \n DONE!!!" -STARTLINE T NoOp2.extraStuff} addUserKnob {41 extraHelper l "" -STARTLINE +INVISIBLE T NoOp2.extraHelper} addUserKnob {26 ""} addUserKnob {20 setGroup l "set Reference" n 1} addUserKnob {26 ds l 1. t "first step in finding desired position.\n\nplease find some feature on the screen, feature you can see on the other frames as well.\nnot position the picker on this feature and press \"Set\" button\n\nthe reference frame is set, yo should see now the grid centering on the \"picker\"\n\nthere is a chance that \"grid\" will be very small or very big depends on the size of your scene, feel free to adjust it's size with the u_scale knob.\n\nnow you ready for the next step" T "Set reference frame."} addUserKnob {22 REF l Set t "- Please find some feature on the screen, feature you can see on the other frames as well.\n- Move position the 'picker' to this feature and press \"Set\" button, \n you will see a grid is jumping to this location.\n We found 'XY' of the point, now lets find the 'Z' in a next step" T "import NST_cardToTrack_v9\nNST_cardToTrack_v9.set_ref_frame()" +STARTLINE} addUserKnob {6 S l INVISIBLE -STARTLINE +INVISIBLE} addUserKnob {3 refFrame l " reference frame:" -STARTLINE} refFrame 49 addUserKnob {41 picker l " " -STARTLINE T NoOp1.picker} addUserKnob {20 endGroup_3 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 findZ l "Find Z" n 1} findZ 0 addUserKnob {26 d l "2. " t "Second step help us to find exact position in 3d space\n\n - Start advance few frames, you should see that a grid is not fixed anymore to your reference feature \n - From the moment you noticing it is happening adjust \"Z\" knob to bring the \"grid\" back to the place it was. \n - Already after first adjustment you will see that grid is sticking well to the feature. \n - Now you can go to some other frame and refine the position again if needed\n - If camera move is a nodal pan - you will nail it from very beginning.\n\nTipp:\nit is possible that already after one or two frames of advancement your grid will disappear it can happen because of the size of your scene. just play with \"Z\" slider till you will bring the \"grid\" back to the screen. it is possible that you will have to go to negative values as well." T "go to some other frame and adjust Z. Use stabilize if needed."} addUserKnob {41 Stabilize -STARTLINE T NoOp2.Stabilize} addUserKnob {6 HighPass -STARTLINE +HIDDEN} addUserKnob {7 sharpen l "" -STARTLINE +HIDDEN R 1 10} sharpen 2 addUserKnob {7 Zfind l Z t "Second step help us to find exact position in 3d space\n\n - Start advance few frames, you should see that a grid is not fixed anymore to your reference feature \n - From the moment you noticing it is happening adjust \"Z\" knob to bring the \"grid\" back to the place it was. \n - Already after first adjustment you will see that grid is sticking well to the feature. \n - Now you can go to some other frame and refine the position again if needed\n - If camera move is a nodal pan - you will nail it from very beginning.\n\nTipp:\nit is possible that already after one or two frames of advancement your grid will disappear it can happen because of the size of your scene. just play with \"Z\" slider till you will bring the \"grid\" back to the screen. it is possible that you will have to go to negative values as well." R -100 100} Zfind -10.5 addUserKnob {26 s l 3. t "this will create an axis in exact 3D position you found\nplease adjust (if needed)\nrotation of the card to match exact perspective you want\n\nTipp :\nadjusting \"scale\" and \"u_scale\":\nbe carefull when scaling up the card!!! from the moment one of the corners of the \"grid\" is passing the origin of the Camera the calculation will fail. So as a good practice leave your \"grid\" not too big it will not matter for final calculation since it still will lay on the same plane.\n\n" T "Happy with Z? Press \"Happy\" button and adjust perspective."} addUserKnob {22 Adjust l Happy!!! t "This will position a Grid in exact 3D position you found\nplease adjust (if needed) Position, Scale and Rotation of the Grid to match exact perspective you want.\n\nTipp :\nAdjusting \"scale\" and \"u_scale\":\n - Be carefull when scaling up the card!!! From the moment one of the corners of the \"grid\" is passing the origin of the Camera the calculation will fail. \n So as a good practice leave your \"grid\" not too big.\n - You do not want your grid to be too small neither as it will introduce polsition error." T "import NST_cardToTrack_v9\nNST_cardToTrack_v9.happy()" +STARTLINE} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {20 happyGroup l "Adjust TRS" t "\nPlease adjust (if needed) Position, Scale and Rotation of the Grid to match exact perspective you want.\n\nTipp :\nAdjusting \"scale\" and \"u_scale\":\n - Be carefull when scaling up the card!!! From the moment one of the corners of the \"grid\" is passing the origin of the Camera the calculation will fail. \n So as a good practice leave your \"grid\" not too big.\n - You do not want your grid to be too small neither as it will introduce polsition error." n 1} happyGroup 0 addUserKnob {41 translate T Perspective.translate} addUserKnob {41 Stabilize_1 l Stabilize -STARTLINE T NoOp2.Stabilize} addUserKnob {6 HighPass_1 l HighPass -STARTLINE +HIDDEN} addUserKnob {41 rotate l "rotate " T Perspective.rotate} addUserKnob {22 show_axis l "show axis" t "show grid Axis if it is gone" -STARTLINE T "import NST_cardToTrack_v9\nNST_cardToTrack_v9.show_grid_axis()"} addUserKnob {41 scaling l "scale " T Perspective.scaling} addUserKnob {41 uniform_scale l "u_scale " T Perspective.uniform_scale} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 goGroup l GO!!! n 1} goGroup 0 addUserKnob {22 C2T l -----------------------GO!----------------------- t "This little fellow will create a new Tab with extracted information\n - panel will pop up prompting\n - name for extracted material\n - Reference Frame - will be a current frame by default, \n you easily can change it later on.\n - First and Last frame of the extraction. \n By default it will take first and last frame of Animation of Camera or animated Axis." T "import NST_cardToTrack_v9\nNST_cardToTrack_v9.go()" +STARTLINE} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 cameraExchange l "Camera Recalculate and Update Nodes" t "Sometimes camera is getting updated after you already\nextracted nodes and using them in the nodegraph.\nThis workflow will help you to recalculate camera information\nand update your nodes in the script.\nOne more case to use recalculate camera option is when you have few shots \nin the same matchmoved scene - you can set up a template for multiple\nareas in the scene and in every new shot just recalculate position." n 1} cameraExchange 0 addUserKnob {22 recalculate l "Recalculate Camera" t "First connect updated Camera please.\nPressing the button will update tracking information\nin all Tabs of the card_to_track\nNo baked nodes in the nodegraph will be updated.\nAll Linked nodes will update their position." T "import NST_cardToTrack_v9\nNST_cardToTrack_v9.recalculate_camera()" +STARTLINE} addUserKnob {22 selectBaked l "Select associated nodes" t "This will select all nodes associated with this card_to_track Gizmo.\nIf you have few Card To Track Gizmos in the script - only nodes created by this gizmo will be selected. Be sure you do not change the name of this node." T "import NST_cardToTrack_v9\nNST_cardToTrack_v9.select_associated_nodes()\n" +STARTLINE} addUserKnob {22 updateBaked l "Updated Selected Nodes" t "This will update all selected baked nodes in nodegraph to get animation from new camera.\n\nIf you do want some of the nodes to not get updated - deselect them before Pressing the button." T "import NST_cardToTrack_v9\nNST_cardToTrack_v9.update_baked()" +STARTLINE} addUserKnob {20 endGroup_4 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 scene_settings l "grid settings" n 1} scene_settings 0 addUserKnob {3 scene l " scene size" t "the tool does not know how big your scene is, if after adjusting \"Z\" slider you see that the card you generating is too big or too small - adjust the scene size.\n\nyou not going to see something changing till you will press \"Set\" button again\n\nif you do happy you can leave this knob alone there will be no need to touch it again\n\njust remember the value so you will be able to enter it when you will be work on the other shots from the same sequence\n\ncheers!"} scene 1 addUserKnob {41 hue_rotation l hue T HueShift1.hue_rotation} addUserKnob {41 line_width l thikness T Wireframe2.line_width} addUserKnob {7 op l opacity} op 1 addUserKnob {3 grid_sub l subdivisions} grid_sub 4 addUserKnob {20 endGroup_5 l endGroup n -1} addUserKnob {26 ""} addUserKnob {26 text l "" +STARTLINE T " © Alexey Kuchinski. 2025
Card To Track v9.6 - Help Videos
\n"} } BackdropNode { inputs 0 name Backdrop_Main_Setup tile_color 0x595947ff label "Main Setup - using look at frosen on reference\nframe in order to find 'z' position of the \npoint in space" note_font_size 40 xpos -1237 ypos -623 bdwidth 945 bdheight 776 z_order -29 } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x546b3d01 note_font "Helvetica Bold" note_font_size 100 xpos -3303 ypos 724 bookmark false bdwidth 287 bdheight 334 } BackdropNode { inputs 0 name Backdrop_Card_or_Axis_visualisation tile_color 0x59474dff label "Card or Axis visualisation" note_font_size 40 xpos 263 ypos -79 bdwidth 483 bdheight 699 z_order 3 } BackdropNode { inputs 0 name Backdrop_High_pass_setup tile_color 0x594753ff label "High pass setup" note_font_size 40 xpos 483 ypos 2776 bdwidth 447 bdheight 533 z_order 3 } BackdropNode { inputs 0 name Backdrop_INPUTS tile_color 0x59474aff label INPUTS note_font_size 40 xpos 1275 ypos -1329 bdwidth 677 bdheight 220 z_order 3 } BackdropNode { inputs 0 name Backdrop_NoOp_controller tile_color 0x475956ff label "NoOp controller" note_font_size 40 xpos 824 ypos -1329 bdwidth 340 bdheight 209 z_order 3 } BackdropNode { inputs 0 name Backdrop_Stabilization_setup tile_color 0x594750ff label "Stabilization setup" note_font_size 40 xpos 300 ypos 653 bdwidth 450 bdheight 566 z_order 3 } BackdropNode { inputs 0 name Backdrop_World_Position_from_Card tile_color 0x4a5947ff label "World Position from Card\nor Geometry." note_font_size 40 xpos -2697 ypos 253 bdwidth 481 bdheight 565 z_order 3 } BackdropNode { inputs 0 name Backdrop_World_Position_from_Render tile_color 0x475259ff label "World Position \nfrom Render" note_font_size 40 xpos -2150 ypos 792 bdwidth 319 bdheight 219 z_order 3 } BackdropNode { inputs 0 name Backdrop_main_GRID tile_color 0x594b47ff label "main GRID" note_font_size 40 xpos -941 ypos -1613 bdwidth 839 bdheight 664 z_order 3 } BackdropNode { inputs 0 name Backdrop_prepare_to_reconsile tile_color 0x594758ff label "this is a setup that serve as a base \nfor our reconcile process. we do 'reconcile3d' \nfrom four axices in bottom part\nof the backdrop" note_font_size 40 xpos 2037 ypos -1352 bdwidth 671 bdheight 643 z_order 3 } Input { inputs 0 name Extra xpos 1305 ypos -1230 number 2 } NoOp { name Anchor1 help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0xffffff01 note_font_size 20 xpos 1305 ypos -1186 addUserKnob {20 anchor_tab l "Anchor Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T anchor} addUserKnob {1 title l Title} title Extra addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T Extra} } set N2deb95d0 [stack 0] NoOp { name StampAboveDeep help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." onCreate "if nuke.GUI:\n try:\n nuke.thisNode().knob(\"toReconnect\").setValue(1)\n except:\n pass\n" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 xpos -3267 ypos 769 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} toReconnect true addUserKnob {1 title l Title} title Extra addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T Extra} addUserKnob {1 anchor l Anchor} anchor Anchor1 addUserKnob {26 anchorLabel l "Anchor Stamp"} } DeepExpression { chans0 rgb chans1 none rgba.red "( ( x/\[value input.width] ) - 0.5 ) * \[value hratio] * deep.front )" rgba.green "( ( y/\[value input.height] ) - 0.5 ) * ( ( \[value hratio]*deep.front ) / ( \[value input.width]/\[value input.height] ) )" rgba.blue -deep.front name DeepExpressionTopNode label "initial setup" xpos -3267 ypos 837 addUserKnob {20 User} addUserKnob {7 hratio} hratio {{"\[value DummyCam.haperture] / \[value DummyCam.focal]"}} } DeepExpression { chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "(r * \[value DummyCam.world_matrix.0] + g * \[value DummyCam.world_matrix.1] + b * \[value DummyCam.world_matrix.2]) + \[value DummyCam.world_matrix.3]" rgba.green "(r * \[value DummyCam.world_matrix.4] + g * \[value DummyCam.world_matrix.5] + b * \[value DummyCam.world_matrix.6]) + \[value DummyCam.world_matrix.7]" rgba.blue "(r * \[value DummyCam.world_matrix.8] + g * \[value DummyCam.world_matrix.9] + b * \[value DummyCam.world_matrix.10]) + \[value DummyCam.world_matrix.11]" name deepCT_00 label camera xpos -3267 ypos 923 addUserKnob {20 User} } DeepToImage { name DeepToImage3 xpos -3267 ypos 987 } Dot { name Dot26 xpos -3233 ypos 1119 } push $N2deb95d0 NoOp { name Stamp2 help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." onCreate "if nuke.GUI:\n try:\n nuke.thisNode().knob(\"toReconnect\").setValue(1)\n except:\n pass\n" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 xpos -2059 ypos 920 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} toReconnect true addUserKnob {1 title l Title} title Extra addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T Extra} addUserKnob {1 anchor l Anchor} anchor Anchor1 addUserKnob {26 anchorLabel l "Anchor Stamp"} } Dot { name Dot4 xpos -2025 ypos 1119 } Input { inputs 0 name Camera xpos 1542 ypos -1227 number 1 } set N33cd6dc0 [stack 0] NoOp { name Anchor3 help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0xffffff01 note_font_size 20 xpos 1542 ypos -1181 addUserKnob {20 anchor_tab l "Anchor Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T anchor} addUserKnob {1 title l Title} title Camera addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T Camera} } set N33cfd4c0 [stack 0] NoOp { name Stamp9 help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." onCreate "if nuke.GUI:\n try:\n nuke.thisNode().knob(\"toReconnect\").setValue(1)\n except:\n pass\n" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 xpos -2364 ypos 731 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} toReconnect true addUserKnob {1 title l Title} title Camera addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T Camera} addUserKnob {1 anchor l Anchor} anchor Anchor3 addUserKnob {26 anchorLabel l "Anchor Stamp"} } push $N2deb95d0 NoOp { name Stamp1 help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." onCreate "if nuke.GUI:\n try:\n nuke.thisNode().knob(\"toReconnect\").setValue(1)\n except:\n pass\n" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 xpos -2647 ypos 655 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} toReconnect true addUserKnob {1 title l Title} title Extra addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T Extra} addUserKnob {1 anchor l Anchor} anchor Anchor1 addUserKnob {26 anchorLabel l "Anchor Stamp"} } push $N33cfd4c0 NoOp { name Stamp10 help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." onCreate "if nuke.GUI:\n try:\n nuke.thisNode().knob(\"toReconnect\").setValue(1)\n except:\n pass\n" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 xpos -2650 ypos 529 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} toReconnect true addUserKnob {1 title l Title} title Camera addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T Camera} addUserKnob {1 anchor l Anchor} anchor Anchor3 addUserKnob {26 anchorLabel l "Anchor Stamp"} } Constant { inputs 0 color 1 format "512 512 0 0 512 512 1 square_512" name Constant1 tile_color 0xff xpos -2513 ypos 372 postage_stamp false } Card2 { display off selectable false image_aspect false rows 4 columns 4 z 10 lens_in_focal {{parent.DummyCam.focal}} lens_in_haperture {{parent.DummyCam.haperture}} control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card2 xpos -2513 ypos 431 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_2" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_2" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_2 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_3" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_3" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_3 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } TransformGeo { inputs 2 selectable false name TransformGeo2 xpos -2513 ypos 534 } Switch { inputs 2 which {{parent.extraHelper==2?1:0}} name GeoInput label "\[value which]\nswitch to pick up world\nposition from the internal card\nor from extra geometry if provided." xpos -2513 ypos 636 } Input { inputs 0 name BG xpos 1409 ypos -1231 } NoOp { name Anchor2 help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0xffffff01 note_font_size 20 xpos 1409 ypos -1183 addUserKnob {20 anchor_tab l "Anchor Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T anchor} addUserKnob {1 title l Title} title BG addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T BG} } set N33dafbb0 [stack 0] NoOp { name Stamp4 help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." onCreate "if nuke.GUI:\n try:\n nuke.thisNode().knob(\"toReconnect\").setValue(1)\n except:\n pass\n" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 xpos -2647 ypos 731 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} toReconnect true addUserKnob {1 title l Title} title BG addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T BG} addUserKnob {1 anchor l Anchor} anchor Anchor2 addUserKnob {26 anchorLabel l "Anchor Stamp"} } ScanlineRender { inputs 3 motion_vectors_type distance output_shader_vectors true P_channel rgb name ScanlineRender2 xpos -2513 ypos 736 } Switch { inputs 3 which {{parent.extraHelper==3?1:parent.extraHelper==4?2:0}} name WorldPositionSource label "\[value which]\nswitch is redirecting to pick up \nposition values depending on the \nchoicein the main dropdown" xpos -2513 ypos 1092 } NoOp { name NoOp1 tile_color 0xffff gl_color 0xffff label "Picking World Position" note_font_size 16 xpos -2513 ypos 1268 addUserKnob {20 User} addUserKnob {22 pick T "a=nuke.toNode(\"NoOp1\")\nr=nuke.sample(a,\"red\",a\['picker'].value(0),a\['picker'].value(1),1,1)\ng=nuke.sample(a,\"green\",a\['picker'].value(0),a\['picker'].value(1),1,1)\nb=nuke.sample(a,\"blue\",a\['picker'].value(0),a\['picker'].value(1),1,1)\n#nuke.tprint(r)\nnuke.toNode('look_at_Axis')\['translate'].setValue(\[r,g,b])\n#nuke.toNode('Perspective')\['translate'].setValue(\[r,g,b])" +STARTLINE} addUserKnob {12 picker} picker {928 500} } Clamp { channels rgba name Clamp1 xpos -2513 ypos 1378 } Dot { name Dot5 xpos -2479 ypos 2406 } push $N33cfd4c0 NoOp { name Stamp15 help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." onCreate "if nuke.GUI:\n try:\n nuke.thisNode().knob(\"toReconnect\").setValue(1)\n except:\n pass\n" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 xpos 322 ypos 1082 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} toReconnect true addUserKnob {1 title l Title} title Camera addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T Camera} addUserKnob {1 anchor l Anchor} anchor Anchor3 addUserKnob {26 anchorLabel l "Anchor Stamp"} } set N33ae9030 [stack 0] push $N33ae9030 FrameHold { firstFrame 49 name StabFrameHold xpos 225 ypos 1138 disable true } set C33af12b0 [stack 0] Switch { inputs 2 which {{parent.StabFrameHold.disable}} name Switch4 xpos 361 ypos 1147 } Axis { inputs 0 translate {-4.458946705 10.26000023 -5.941508293} uniform_scale 2 name Perspective tile_color 0xff0000ff label "this is the center\n of the Grid!!!" xpos -876 ypos -80 } push $N33cfd4c0 NoOp { name Stamp12 help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." onCreate "if nuke.GUI:\n try:\n nuke.thisNode().knob(\"toReconnect\").setValue(1)\n except:\n pass\n" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 xpos -707 ypos -411 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} toReconnect true addUserKnob {1 title l Title} title Camera addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T Camera} addUserKnob {1 anchor l Anchor} anchor Anchor3 addUserKnob {26 anchorLabel l "Anchor Stamp"} } FrameHold { firstFrame {{parent.refFrame}} name FrameHold2 xpos -707 ypos -360 } push 0 Axis2 { inputs 2 display off selectable false translate {1.563220501 11.32060719 1.955564976} name look_at_Axis tile_color 0xff0000ff xpos -697 ypos -268 } Axis { display off selectable false translate {0 0 {parent.Zfind}} uniform_scale {{parent.Perspective.uniform_scale}} name Z_finder tile_color 0xff0000ff xpos -697 ypos -177 } Switch { inputs 2 which 1 name Switch label "\[value which]\nwill switch to Perspective Axis\nafter 'Happy' button is pressed" xpos -708 ypos -77 } NoOp { name Anchor5 help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0xffffff01 note_font_size 20 xpos -708 ypos 48 addUserKnob {20 anchor_tab l "Anchor Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T anchor} addUserKnob {1 title l Title} title position_finder addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T position_finder} } set N33b628b0 [stack 0] NoOp { name Stamp13 help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." onCreate "if nuke.GUI:\n try:\n nuke.thisNode().knob(\"toReconnect\").setValue(1)\n except:\n pass\n" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 xpos 375 ypos 946 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} toReconnect true addUserKnob {1 title l Title} title position_finder addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T position_finder} addUserKnob {1 anchor l Anchor} anchor Anchor5 addUserKnob {26 anchorLabel l "Anchor Stamp"} } Dot { name Dot8 xpos 409 ypos 1038 } push $N33cfd4c0 NoOp { name Stamp6 help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." onCreate "if nuke.GUI:\n try:\n nuke.thisNode().knob(\"toReconnect\").setValue(1)\n except:\n pass\n" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 xpos 383 ypos 801 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} toReconnect true addUserKnob {1 title l Title} title Camera addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T Camera} addUserKnob {1 anchor l Anchor} anchor Anchor3 addUserKnob {26 anchorLabel l "Anchor Stamp"} } push $N33dafbb0 NoOp { name Stamp5 help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." onCreate "if nuke.GUI:\n try:\n nuke.thisNode().knob(\"toReconnect\").setValue(1)\n except:\n pass\n" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 xpos 502 ypos 751 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} toReconnect true addUserKnob {1 title l Title} title BG addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T BG} addUserKnob {1 anchor l Anchor} anchor Anchor2 addUserKnob {26 anchorLabel l "Anchor Stamp"} } Project3D { inputs 2 crop false name Project3D1 xpos 502 ypos 812 } Card2 { display wireframe selectable false rows 4 columns 4 uniform_scale 100000 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card10 xpos 502 ypos 914 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_2" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_2" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_2 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_3" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_3" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_3 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } TransformGeo { inputs 2 selectable false name TransformGeo4 xpos 502 ypos 1035 } push $N33dafbb0 NoOp { name Stamp16 help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." onCreate "if nuke.GUI:\n try:\n nuke.thisNode().knob(\"toReconnect\").setValue(1)\n except:\n pass\n" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 xpos 620 ypos 1023 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} toReconnect true addUserKnob {1 title l Title} title BG addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T BG} addUserKnob {1 anchor l Anchor} anchor Anchor2 addUserKnob {26 anchorLabel l "Anchor Stamp"} } Remove { name Remove2 xpos 620 ypos 1069 } ScanlineRender { inputs 3 shutter 0 motion_vectors_type distance name ScanlineRender3 xpos 502 ypos 1147 } Dot { name Dot1 xpos 536 ypos 1264 } push $N33dafbb0 NoOp { name Stamp3 help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." onCreate "if nuke.GUI:\n try:\n nuke.thisNode().knob(\"toReconnect\").setValue(1)\n except:\n pass\n" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 xpos 800 ypos 1150 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} toReconnect true addUserKnob {1 title l Title} title BG addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T BG} addUserKnob {1 anchor l Anchor} anchor Anchor2 addUserKnob {26 anchorLabel l "Anchor Stamp"} } Switch { inputs 2 which 1 name StabSwitch label "\[value which]" xpos 800 ypos 1257 disable true } Dot { name Dot3 xpos 834 ypos 1415 } set N33c3c710 [stack 0] push $N33cfd4c0 NoOp { name Stamp7 help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." onCreate "if nuke.GUI:\n try:\n nuke.thisNode().knob(\"toReconnect\").setValue(1)\n except:\n pass\n" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 xpos -383 ypos 1317 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} toReconnect true addUserKnob {1 title l Title} title Camera addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T Camera} addUserKnob {1 anchor l Anchor} anchor Anchor3 addUserKnob {26 anchorLabel l "Anchor Stamp"} } set N33c42d40 [stack 0] push $N33c42d40 clone $C33af12b0 { xpos -465 ypos 1372 selected false } Switch { inputs 2 which {{parent.StabFrameHold.disable}} name Switch3 xpos -383 ypos 1417 } push $N33b628b0 Constant { inputs 0 format "512 512 0 0 512 512 1 square_512" name Constant2 tile_color 0xff xpos -235 ypos -1538 postage_stamp false } Dot { name Dot9 xpos -201 ypos -1487 } set N33c6cb60 [stack 0] Wireframe { operation "see through" line_width 1 line_color {1 0 0 1} name Wireframe4 xpos -642 ypos -1300 } set N33e861f0 [stack 0] Card2 { display wireframe selectable false image_aspect false rows 1 columns 1 translate {0.5 -0.5 0} uniform_scale 0.03 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card9 xpos -891 ypos -1251 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_2" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_2" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_2 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_3" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_3" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_3 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } Dot { name Dot19 xpos -857 ypos -1140 } push $N33e861f0 Card2 { display wireframe selectable false image_aspect false rows 1 columns 1 translate {0.5 0.5 0} uniform_scale 0.03 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card8 xpos -806 ypos -1248 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_2" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_2" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_2 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_3" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_3" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_3 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } Dot { name Dot18 xpos -772 ypos -1166 } push $N33e861f0 Card2 { display wireframe selectable false image_aspect false rows 1 columns 1 translate {-0.5 -0.5 0} uniform_scale 0.03 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card7 xpos -724 ypos -1248 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_2" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_2" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_2 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_3" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_3" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_3 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } Dot { name Dot17 xpos -690 ypos -1192 } push $N33e861f0 Card2 { display wireframe selectable false image_aspect false rows 1 columns 1 translate {-0.5 0.5 0} uniform_scale 0.03 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card6 xpos -642 ypos -1254 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_2" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_2" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_2 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_3" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_3" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_3 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } MergeGeo { inputs 2 selectable false name MergeGeo5 xpos -642 ypos -1196 } MergeGeo { inputs 2 selectable false name MergeGeo6 xpos -642 ypos -1170 } MergeGeo { inputs 2 selectable false name MergeGeo7 xpos -642 ypos -1144 } Dot { name Dot16 xpos -608 ypos -1067 } push $N33c6cb60 Wireframe { operation "see through" line_width 1 line_color {0 1 0 1} name Wireframe5 xpos -495 ypos -1305 } Card2 { display wireframe selectable false cast_shadow false receive_shadow false image_aspect false rows 2 columns 2 uniform_scale 100 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card5 xpos -495 ypos -1253 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_2" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_2" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_2 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_3" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_3" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_3 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } Dot { name Dot15 xpos -461 ypos -1187 } push $N33c6cb60 Wireframe { operation "see through" line_width 1 line_color {1 0 1 1} name Wireframe3 xpos -352 ypos -1302 } Card2 { display wireframe selectable false image_aspect false rows 2 columns 2 translate {0 0 -0.0001} uniform_scale 0.1 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card4 xpos -352 ypos -1260 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_2" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_2" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_2 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_3" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_3" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_3 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } Dot { name Dot14 xpos -318 ypos -1213 } push $N33c6cb60 Wireframe { operation "see through" line_width 0.1 name Wireframe2 xpos -235 ypos -1306 } Card2 { display wireframe selectable false rows {{parent.grid_sub}} columns {{rows}} control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card1 xpos -232 ypos -1254 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_2" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_2" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_2 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_3" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_3" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_3 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } MergeGeo { inputs 2 selectable false name MergeGeo2 xpos -232 ypos -1217 } MergeGeo { inputs 2 selectable false name MergeGeo3 xpos -232 ypos -1191 } MergeGeo { inputs 2 selectable false name MergeGeo4 xpos -232 ypos -1070 } Switch { which {{parent.HighPass_1}} name killGrid label "this switch will kill the visibility \nof the grid when we are in \nhighpass mode" xpos -232 ypos -531 } TransformGeo { inputs 2 selectable false name TransformGeo1 xpos -231 ypos 52 } Dot { name Dot11 xpos -197 ypos 475 } set N3413ed80 [stack 0] Dot { name Dot12 xpos 100 ypos 473 } Wireframe { inputs 0 operation "see through" line_width 1 line_color {1 0 1 1} name Wireframe6 xpos 288 ypos 337 } push $N2deb95d0 NoOp { name Stamp17 help "Redone by Adrian Pueyo.\nUpdated 29 Mar 2019\n\nFull original concept and \"Postage Stamps\" created by Alexey Kuchinski." onCreate "if nuke.GUI:\n try:\n nuke.thisNode().knob(\"toReconnect\").setValue(1)\n except:\n pass\n" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 xpos 503 ypos 3 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} toReconnect true addUserKnob {1 title l Title} title Extra addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T Extra} addUserKnob {1 anchor l Anchor} anchor Anchor1 addUserKnob {26 anchorLabel l "Anchor Stamp"} } set N34158510 [stack 0] Card2 { inputs 0 image_aspect false rows 4 columns 4 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card11 xpos 349 ypos 20 addUserKnob {20 User} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_1" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_1" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_1 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_2" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_2" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_2 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot_3" l "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot_3" l "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected_3 l snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} addUserKnob {22 "floor Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[0,0.5,0])\nn\['pivot'].setValue(\[0,-0.5,0])"} addUserKnob {22 "corner Pivot" -STARTLINE T "n=nuke.thisNode()\nn\['translate'].setValue(\[-.5,.5,0])\nn\['pivot'].setValue(\[.5,-.5,0])"} addUserKnob {22 snapToSelected -STARTLINE T "b=nuke.selectedNode()\['translate'].value()\nn=nuke.thisNode()\nn\['translate'].setValue(b)"} } TransformGeo { inputs 2 name TransformGeo6 label "when we do use an axis as locator\nthis will help us to \nprevisualize the locator" xpos 349 ypos 94 } push $N34158510 Switch { inputs 2 which {{"\[exists input2.world_matrix]?1:0"}} name SwitchCardAxis label "will switch depending if Card or \nAxis is using as a locator." xpos 503 ypos 188 } ApplyMaterial { inputs 2 name ApplyMaterialVisualisation xpos 503 ypos 337 } Dot { name Dot2 xpos 537 ypos 558 } MergeGeo { inputs 2 selectable false name MergeGeo9 label "it will be enabled only when we are in \ngeometry mode in order to give us\ngrid overlay on top of geometry wireframe" xpos 66 ypos 537 disable {{parent.extraHelper==2?0:1}} } push $N3413ed80 Switch { inputs 2 which {{parent.extraHelper==1||parent.extraHelper==2?1:0}} name AnimCard label "switch to 1 when we in \nlocator mode or in geometry node.\nit will give us visual on locator position and scale \nor geometry wireframe" xpos -231 ypos 533 } push $N33c3c710 Remove { name Remove1 xpos 154 ypos 1411 } ScanlineRender { inputs 3 shutter 0 motion_vectors_type distance name ScanlineRender1 xpos -235 ypos 1417 } HueShift { name HueShift1 xpos -235 ypos 1537 } Multiply { channels rgba value {{parent.op}} name Multiply1 xpos -235 ypos 1563 } Dot { name Dot6 xpos -201 ypos 1891 } Multiply { channels rgba value {{!HighPass}} name Multiply2 label "turn off grid when in highpass mode" note_font_size 14 xpos 605 ypos 1873 } Merge2 { inputs 2 operation under name Merge4 xpos 804 ypos 2002 } Merge2 { inputs 2 mix 0.001 name Merge1 xpos 800 ypos 2403 } Dot { name Dot29 xpos 834 ypos 2874 } set N34282e70 [stack 0] Dot { name Dot13 xpos 711 ypos 2874 } Shuffle { alpha white name Shuffle1 tile_color 0xffffffff label "White Alpha" xpos 677 ypos 2915 } Dot { name Dot23 xpos 711 ypos 2977 } set N342a4380 [stack 0] Dot { name Dot27 xpos 567 ypos 2977 } Invert { channels rgba name Invert1 xpos 533 ypos 3013 } FrameHold { firstFrame 49 name StabRef xpos 533 ypos 3051 } Dot { name Dot28 xpos 567 ypos 3113 } push $N342a4380 Merge2 { inputs 2 bbox A name Merge3 xpos 677 ypos 3109 } Grade { add -1 black_clamp false name Grade1 xpos 677 ypos 3135 addUserKnob {20 User} addUserKnob {22 "keep luma" -STARTLINE T keepLuma()} addUserKnob {22 "keep luma_1" l "keep luma" -STARTLINE T keepLuma()} addUserKnob {22 "keep luma_2" l "keep luma" -STARTLINE T keepLuma()} addUserKnob {22 "keep luma_3" l "keep luma" -STARTLINE T keepLuma()} addUserKnob {22 "keep luma" -STARTLINE T keepLuma()} } Grade { multiply {{parent.sharpen}} add 0.5 name Grade2 xpos 677 ypos 3161 addUserKnob {20 User} addUserKnob {22 "keep luma" -STARTLINE T keepLuma()} addUserKnob {22 "keep luma_1" l "keep luma" -STARTLINE T keepLuma()} addUserKnob {22 "keep luma_2" l "keep luma" -STARTLINE T keepLuma()} addUserKnob {22 "keep luma_3" l "keep luma" -STARTLINE T keepLuma()} addUserKnob {22 "keep luma" -STARTLINE T keepLuma()} } Dot { name Dot30 xpos 711 ypos 3240 } push $N34282e70 Switch { inputs 2 which {{"HighPass==1 || HighPass_1 ==1?1:0"}} name HighPass label "\[value which]" xpos 800 ypos 3233 } Output { name Output1 xpos 800 ypos 3435 } Axis2 { inputs 0 rot_order XYZ useMatrix true matrix { {{DummyCam.world_matrix.0} {DummyCam.world_matrix.4} {DummyCam.world_matrix.8} {"-(matrix.0*DummyCam.world_matrix.3 + matrix.1*DummyCam.world_matrix.7 + matrix.2*DummyCam.world_matrix.11)"}} {{DummyCam.world_matrix.1} {DummyCam.world_matrix.5} {DummyCam.world_matrix.9} {"-(matrix.4*DummyCam.world_matrix.3 + matrix.5*DummyCam.world_matrix.7 + matrix.6*DummyCam.world_matrix.11)"}} {{DummyCam.world_matrix.2} {DummyCam.world_matrix.6} {DummyCam.world_matrix.10} {"-(matrix.8*DummyCam.world_matrix.3 + matrix.9*DummyCam.world_matrix.7 + matrix.10*DummyCam.world_matrix.11)"}} {0 0 0 1} } name Inverse1 label "reverse camera tracking" xpos 2340 ypos -1076 addUserKnob {20 User} addUserKnob {1 camera} camera Camera10 addUserKnob {26 t l "" +STARTLINE T eshirazi} } Axis2 { selectable false translate {{parent.Perspective.translate} {parent.Perspective.translate} {parent.Perspective.translate}} rotate {{parent.Perspective.rotate} {parent.Perspective.rotate} {parent.Perspective.rotate}} name aM gl_color 0xffff00ff label "main axis" xpos 2340 ypos -955 } set N34347730 [stack 0] Axis2 { selectable false xform_order STR translate {{-0.5*Perspective.uniform_scale*Perspective.scaling.x} {input0.pixel_aspect*0.5*Perspective.uniform_scale*Perspective.scaling.y} 0} name a4 xpos 2598 ypos -819 } push $N34347730 Axis2 { selectable false xform_order STR translate {{0.5*Perspective.uniform_scale*Perspective.scaling.x} {input0.pixel_aspect*0.5*Perspective.uniform_scale*Perspective.scaling.y} 0} name a3 xpos 2445 ypos -819 } push $N34347730 Axis2 { selectable false xform_order STR translate {{0.5*Perspective.uniform_scale*Perspective.scaling.x} {input0.pixel_aspect*-0.5*Perspective.uniform_scale*Perspective.scaling.y} 0} name a2 xpos 2272 ypos -819 } StickyNote { inputs 0 name StickyNote1 tile_color 0xffffffff label "Mark Joey Tang Deep2VP .\nDeep to World Position" note_font "Helvetica Bold" note_font_size 20 xpos -3302 ypos 657 } NoOp { inputs 0 name NoOp2 knobChanged "nn = nuke.thisGroup()\nk = nuke.thisKnob()\nkn = k.name()\n\nif kn == \"extraStuff\":\n if nn\['extraHelper'].value() in \[0,2,5]:\n nn\[\"setGroup\"].clearFlag(1)\n nn\['findZ'].setFlag(1)\n nn\[\"happyGroup\"].setFlag(1)\n nn\[\"goGroup\"].setFlag(1)\n nn\[\"Zfind\"].setValue(0)\n nn\['translate'].setValue(0)\n nn\['rotate'].setValue(0)\n nn\['scaling'].setValue(0)\n \n elif nn\['extraHelper'].value() in \[1]:\n nn\[\"setGroup\"].setFlag(1)\n nn\['findZ'].setFlag(1)\n nn\[\"happyGroup\"].setFlag(1)\n nn\[\"goGroup\"].clearFlag(1)\n nn\[\"Zfind\"].setValue(0)\n with nn:\n perspective_axis = nuke.toNode('Perspective')\n perspective_axis.setSelected(False) \n with nn:\n nuke.toNode('ApplyMaterialVisualisation').setInput(0,nuke.toNode('SwitchCardAxis'))\n nuke.toNode('DeepExpressionTopNode').setInput(0,nuke.toNode('StampAboveDeep'))\n \nelif kn == \"Stabilize\":\n t = nn\['S']\n if t.value() == 0:\n nn\['HighPass'].setVisible(False)\n nn\['HighPass_1'].setVisible(False)\n nn\['sharpen'].setVisible(False)\n else:\n nn\['HighPass'].setVisible(True)\n nn\['HighPass_1'].setVisible(True)\n nn\['sharpen'].setVisible(True)\n " label "this controler was created to eliminate\nknobChanged callbacks in the main card_to_track \ngroup." xpos 951 ypos -1216 addUserKnob {20 User} addUserKnob {4 extraStuff t "here you can choose the way you would like find your position\n\n1 I have a Camera and great Matchmove\n means you have only a tracked Camera - you will have to go normal way in finding position\n\n2 I have a Camera and Geometry\n see little input called \"Extra\"? this is your new friend, if you have by any chance a geometry of the Scene - can be a model, lidar scan or just a bunch Nuke objects, connect it to the \"Extra\" input and press \"Set\" button, congrats you found your 3D position and ready sdjust your perspective(no need to bother with \"Z\" and \"Happy\" button\n\n3 I have a Camera and Wpos pass\n if your nice 3D Artist rendered for you a Wpos pass, connect it to the \"Extra\" input and press \"Set\" button, congrats you found your 3D position and ready sdjust your perspective(no need to bother with \"Z\" and \"Happy\" button\n\n4 I have a Camera and Card\n Let say you have animated Card and you want to translate it's position to Screen space,\n connect the Card to the .... \n Adjust rotation/position/scaling in the Card it self if needed\n and press \"GO\" button\n DONE!!!\n\n5 I have a Camera and an Axis\n In some cases you have to use multiple Axises to refine position of your card.\n This option will consolidate transformations stored in Axises.\n Adjust rotation/position/scaling in the Axis it self if needed\n Connect the last (lowest) axis to Extra pipe and press GO button\n\n6 Use this one in case you have deep image." M {"great match move!!!" "3D Locator(card or axis)" Geometry "Wpos pass" Deep "" ""}} addUserKnob {3 extraHelper} extraHelper {{"\[numvalue extraStuff]"}} addUserKnob {22 Stabilize T "import NST_cardToTrack_v9\nNST_cardToTrack_v9.stabilize()" +STARTLINE} } push $N33cd6dc0 Camera { projection_mode {{"\[expression \[value the_cam]projection_mode(\[value the_frame])]"}} focal {{"\[expression \[value the_cam]focal(\[value the_frame])]" x1 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20}} haperture {{"\[expression \[value the_cam]haperture(\[value the_frame])]"}} vaperture {{"\[expression \[value the_cam]vaperture(\[value the_frame])]"}} near {{"\[expression \[value the_cam]near(\[value the_frame])]"}} far {{"\[expression \[value the_cam]far(\[value the_frame])]"}} win_translate {{"\[expression \[value the_cam]win_translate.u(\[value the_frame])]"} {"\[expression \[value the_cam]win_translate.v(\[value the_frame])]"}} win_scale {{"\[expression \[value the_cam]win_scale.u(\[value the_frame])]"} {"\[expression \[value the_cam]win_scale.v(\[value the_frame])]"}} winroll {{"\[expression \[value the_cam]winroll(\[value the_frame])]"}} focal_point {{"\[expression \[value the_cam]focal_point(\[value the_frame])]"}} fstop {{"\[expression \[value the_cam]fstop(\[value the_frame])]"}} name DummyCam help "DummyCam by Adrian Pueyo\n\nCamera that apart from the matrices also grabs all the \"Projection\" values from the upstream camera that it's connected to. Turns into a default Camera if no Camera connected. Can also be used inside of groups and gizmos, as many levels deep as you want :D All using live and super fast TCL.\n\nUpdated v1.1: Now grabs the correct frame too (thanks Erwan Leroy for the idea).\n\nUpdated v1.3: Now accepts Nuke13's Camera3\n\nadrianpueyo.com, 2019-2021" onCreate "n = nuke.thisNode()\nfor k in \[\"projection_mode\",\"focal\",\"haperture\",\"vaperture\",\"near\",\"far\",\"win_translate\",\"win_scale\",\"winroll\",\"focal_point\",\"fstop\"]:\n n\[k].setFlag(0x0000000010000000)" label "This is a Gizmo created by Adrian Pueyo.\nIt finds the camera connected upstream \nand collects all needed information from it." xpos 1804 ypos -1248 addUserKnob {20 DummyCam l Defaults} addUserKnob {43 the_cam +INVISIBLE} the_cam "\[\n#DummyCam v1.3 - Updated 5 May 2021.\nset starting_point \"this.input0\"\nset default \"this.d_\"\n\n# If cam has no inputs, return the default.\nif \{\[exists \$starting_point]\} \{\n set x \[node \$starting_point]\n\} \{ \n return \$default\n\}\n\nset finished 0\nwhile \{\$finished != 1\} \{\n\n # First look for a Cam or Input or topnode.\n while \{\[class \$x] != \"Camera3\" && \[class \$x] != \"Camera2\" && \[class \$x] != \"Camera\" && \[class \$x] != \"Input\" && \$x != \[topnode \$x]\} \{\n set x \[node \$x.input0]\n \}\n\n # Then, check if node is a cam (and return), and otherwise, if it's an input, see if the parent exists and move to it.\n if \{\[class \$x]==\"Camera3\"||\[class \$x]==\"Camera2\"||\[class \$x]==\"Camera\"\} \{\n set x \[append x \".\"]\n return \$x\n \} \{ \n if \{ \[class \$x]==\"Input\" \} \{ \n set inp \"\$x.parent.input\"\n set inputNum \[value \$x.number]\n set inp \[append inp \$inputNum]\n if \{ \[exists \$inp] \} \{\n set x \[node \$inp]\n \} \{ \n set finished 1\n \}\n \} \{ \n set finished 1\n \}\n \}\n\}\nreturn \$default\n]" addUserKnob {43 the_frame +INVISIBLE} the_frame "\[\nset the_camera \[string trimright \[value the_cam] .]\nif \{\[exists \$the_camera]\} \{\n return \[value \$the_camera.frame]\n\} \{ \n return \[frame]\n\}\n]" addUserKnob {4 d_projection_mode l projection M {perspective orthographic uv spherical ""}} addUserKnob {7 d_focal l "focal length" R 0 100} d_focal 50 addUserKnob {7 d_haperture l "horiz aperture" R 0 50} d_haperture 24.576 addUserKnob {7 d_vaperture l "vert aperture" R 0 50} d_vaperture 18.672 addUserKnob {7 d_near l near R 0 10} d_near 0.1 addUserKnob {7 d_far l far R 0 10000} d_far 10000 addUserKnob {30 d_win_translate l "window translate"} addUserKnob {30 d_win_scale l "window scale"} d_win_scale {1 1} addUserKnob {7 d_winroll l "window roll" R 0 45} addUserKnob {7 d_focal_point l "focal distance" R 0 10} d_focal_point 2 addUserKnob {7 d_fstop l fstop R 0 30} d_fstop 16 addUserKnob {26 version l " " t "Updated 5 May 2021" T "
DummyCam v1.3 - adrianpueyo.com, 2019-2021
"} } push $N34347730 Axis2 { selectable false xform_order STR translate {{-0.5*Perspective.uniform_scale*Perspective.scaling.x} {input0.pixel_aspect*-0.5*Perspective.uniform_scale*Perspective.scaling.y} 0} name a1 xpos 2087 ypos -819 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_CatsEyeDefocus.gizmo ================================================ Group { inputs 2 name CatsEyeDefocus tile_color 0xb16f43ff addUserKnob {20 CtrlTab l "Cat's Eye Defocus"} addUserKnob {4 show l output M {result preview bokeh highlights "" ""}} addUserKnob {7 size R 1 100} size 50 addUserKnob {41 useGPUIfAvailable l "Use GPU if available" T BlinkScript1.useGPUIfAvailable} addUserKnob {26 catseyeeffect l "@b;Cat's eye"} addUserKnob {7 effectAmount l "effect amount"} effectAmount 0.5 addUserKnob {7 edgeSoftness l "edge softness"} edgeSoftness 0.05 addUserKnob {6 interpolate +STARTLINE} interpolate true addUserKnob {26 Shape l "@b;Bokeh"} addUserKnob {3 blades l "blades count"} blades 6 addUserKnob {7 rounded} rounded 0.9 addUserKnob {7 sharpness_1 l sharpness} sharpness_1 0.8 addUserKnob {7 rotate R 0 360} rotate 12 addUserKnob {26 hr l " "} addUserKnob {7 innersize l "inner size"} innersize 0.8 addUserKnob {7 innerfalloff l "inner falloff"} innerfalloff 0.6 addUserKnob {7 innerBrightness l "inner brightness"} innerBrightness 0.5 addUserKnob {6 useimage l "use filter image" +STARTLINE} addUserKnob {6 linksize l "link size" -STARTLINE} linksize true addUserKnob {26 highlightsHr l "@b;Hightlights"} addUserKnob {7 boostHighlights l boost R 0 10} boostHighlights 6 addUserKnob {7 highlightsSaturation l saturation} highlightsSaturation 1 addUserKnob {7 highlightsStart l "range start"} highlightsStart 0.5 addUserKnob {7 highlightsEnd l "range end"} highlightsEnd 0.6 addUserKnob {20 Help} addUserKnob {26 ver l "" +STARTLINE T "CatsEyeDefocus is a manual convolution filter which simulates swirly bokeh.\n\n.kernel/gizmo ver 1.0/2.0\n\nAlexander Kulikov\ncoolikov.com\n"} } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x388e8e00 label SRC note_font_size 42 xpos -437 ypos -218 bdwidth 297 bdheight 357 } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x71bec6ff label "Bokeh Setup" note_font_size 42 xpos 238 ypos -192 bdwidth 298 bdheight 328 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x7171c600 label "Filter Image" note_font_size 42 xpos -68 ypos -69 bdwidth 237 bdheight 208 } Input { inputs 0 name src xpos -337 ypos -139 } set N39ddee20 [stack 0] Dot { name Dot3 xpos -303 ypos -79 } set N39ddf190 [stack 0] Dot { name Dot4 xpos -208 ypos -79 } Keyer { operation "luminance key" range {{parent.highlightsStart x232 0.06} {parent.highlightsEnd x232 0.7912925952} 1 1} name Keyer3 xpos -242 ypos -10 } Dot { name Dot7 xpos -208 ypos 85 } set N39ddfbe0 [stack 0] Shuffle { red alpha green alpha blue alpha name Highlights xpos -242 ypos 640 } Input { inputs 0 name filter xpos 15 ypos -1 number 1 } Shuffle { green red blue red alpha black name Shuffle1 xpos 15 ypos 38 } Reformat { type "to box" box_width {{int(parent.size)}} name Reformat2 xpos 15 ypos 91 disable {{!parent.linksize}} } Dot { name Dot14 xpos 49 ypos 209 } Constant { inputs 0 channels rgb format "255 255 0 0 255 255 1 256x256" name Constant1 label "512x512 Constant" xpos 276 ypos -97 postage_stamp false } Flare { position {{(width+1)/2} {(height+1)/2}} offset 3.55 radius {{(radius.2*0.96)*parent.innersize x60 0 x70 0 x71 108} 490 500} size_mult {{width/radius.2/2}} inner_color {{parent.innerBrightness}} outer_falloff 2 inner_falloff {{parent.innerfalloff*10}} vis_out 1 corners {{parent.blades}} flattening {{clamp(1-parent.rounded)}} sharpness {{parent.sharpness_1}} corners_angle {{parent.rotate}} asym_repeat 0 name Flare selected true xpos 276 ypos -35 } Shuffle { alpha black name Shuffle3 xpos 276 ypos 19 } Reformat { type "to box" box_width {{int(parent.size)}} name Reformat1 xpos 276 ypos 83 } Switch { inputs 2 which {{parent.useimage}} name SwitchFilter xpos 276 ypos 206 } Dot { name Dot22 xpos 310 ypos 309 } set N39f922d0 [stack 0] Transform { translate {{"src.width/2 - width/2"} {"src.height/2 - height/2"}} center {{width/2} {height/2}} name Transform1 xpos -584 ypos 306 } Dot { name Dot21 xpos -550 ypos 403 } push $N39ddee20 Dot { name Dot20 xpos -655 ypos -136 } Shuffle { red black green black blue black alpha black name Shuffle4 xpos -689 ypos 306 } Merge2 { inputs 2 bbox B name Merge5 xpos -689 ypos 400 } Shuffle { green red blue red name Bokeh xpos -689 ypos 635 } Dot { name Dot9 xpos -655 ypos 787 } push $N39f922d0 Dot { name Dot1 xpos 310 ypos 379 } set N39f93e50 [stack 0] Dot { name Dot15 xpos 310 ypos 444 } set N39f941c0 [stack 0] Dot { name Dot16 xpos 32 ypos 444 } push $N39ddfbe0 push $N39ddf190 Dot { name Dot5 xpos -393 ypos -79 } Multiply { channels rgb value {{parent.boostHighlights<0?0:parent.boostHighlights}} name Multiply1 xpos -427 ypos -18 } Saturation { saturation {{1+parent.highlightsSaturation*0.5}} mode Average name Saturation1 xpos -427 ypos 6 } Dot { name Dot6 xpos -393 ypos 85 } push $N39ddf190 Merge2 { inputs 2+1 operation screen Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge2 xpos -337 ypos 82 } Dot { name Dot2 xpos -303 ypos 524 } Dot { name Dot17 xpos -75 ypos 524 } set N3a047fa0 [stack 0] Dot { name Dot18 xpos -75 ypos 611 } Convolve2 { inputs 2 channels rgba useGPUIfAvailable {{parent.BlinkScript1.useGPUIfAvailable}} filter_channel rgba.red name Convolve1 xpos -2 ypos 608 } Dot { name Dot11 xpos 32 ypos 709 } push $N39f93e50 Radial { replace true area {0 0 {input.width} {input.height}} softness {{parent.edgeSoftness}} name LensEdge xpos 390 ypos 376 } Dot { name Dot8 xpos 424 ypos 524 } push $N39f941c0 push $N3a047fa0 BlinkScript { inputs 3 ProgramGroup 1 KernelDescription "1 \"CatsEyeConvolve\" iterate pixelWise d3f7f7268f50afeb0ffd385b019c65664a5775e0f4a8983e20044cb012fe17e8 4 \"src\" Read Ranged2D \"filter\" Read Random \"ext\" Read Random \"dst\" Write Point 3 \"Amount\" Float 1 AACAPw== \"Format\" Int 2 AAUAANACAAA= \"Interpolate\" Bool 1 AQ==" EncodedSource "1 2904 +vduhx3Y8JBmLeiWCjYc02Q9Odx8FJ5dqBe/uX9TgyhEk6K88rIuF+cFmQD78ej6LXg8cuU82LdC7ZdSjjaCt7bMKxSafnhAwKeJiaKUcp/+LiX8yNxidGrQQxLQOP7mJxzynvhLiZBi6jQNXkFsWw9tupyAWMf2qSD10fk3qTUWlMD6XFM/zII9/AmE5qDC2FkhswV5WQTY84O+twxw3U7UMVt3oTZoOTgDFqtGWTVvsk146amMUbTFV1L5euCqLBLp3wqtLoJISJzHd2ZAoqe7Wp2fvMcStAcjK+rH2teU1DYAWu3wiYPfNt4G6DEKr6EhLxyzXbKygpUQGi/bRIBfVwNdNSQAGLJaeVS87Brbg3ya/OJOhIISEsTpTiDj19joP31EUPvdS22/WnBmaa66RIqmbPwnvDbVQCL0r+luwbvaA5LFpEHjh3DOog200fCwwdSuc8Fb7HVmKE7I+9DauBHYIu5cO7AcA4EoVPnAEs89gjGLY8FVUPHpnwERocJRxhgYIxAo3xPT5Djh29RpCA+dupA1bnSQ6BR+yLIvprsdWE9xicWBmfJFuFc/8NcWzaR+JZJy1skX3ZpJm8JQvG8daMu/p3x03cxh+8iwMTePxPr3l4HZrg4gxd5GXhhztiVQ+XqYa21vFChqNo7QofCpFZAjEjKxP/E+9tDko54qg+JeVWXUZgvUR6vr6bwkq5Cr7NRfo2uWCNldENhZz/US7gm2sh52+zzoHNCVuBKeFVTojP1Nk23GH7y0zvv9+fK9BIrp5rBp7cl+di31vaUBLrONMQ14NRx3u//vxY7Uywj6qGC7CUJVJTJ1cw3rnQ0MXhcHpRF6L0Rdn4ibV2logTMVbMoM34m/os0oED2CFnX2W85jab/utQRRQoSXz2VPRMi/XqwbKlsswzLyWbBgSnmKKCHwgQNpeTQyLMkGISozK/247JdCzHyXFDasHp9l4VaRoATHOmsihJIW/PnpNyvKsm2BCkXqN7DrzD13z1SAOeV82KE/QBrxWIyLRDGsdNS9PaS/FUjANfOvVUn92njVkuc2pv/WPL08Z9os37rSrEBByUk5Mqfa4HXJMMYqF7BpSuP5B1pqxiGoQI1N7uDOR5QjsHttqGcTnSa8oZdZHZkcOGFyFv7zsm8hx1LkCwMCIkO8pnSDynoZqe0z7GfWx80RA3eAfEV4ejq0Cdva61MfNddLq77oynH5rYGW/Gf/ylF0YySMf1HKe4akObXLlpbpZxgMsUHAaa6u4xbRZpsL/qlsh4Imaxd7mBYULfj6DbAzYc8fHTAWnJJh1Dt8jQLKg9ESMKWWNNpxZhfRbb8CCsrpIhR5WdLMNlu9dAtJSvnzSpF4WVICjQgKpCn5mW+dSIZIftWKd2tZyRWixvgeuMug4XUQkivl3K8tyzr+o78zDY4axqC5hdyWuYtpht08t5LCrgBFSXF9fdyGdxWxL/e9eixxwbtVr1bfccHnoZOeSImPh9MwE9fYPqitiqR61rNd8JCbYrK2spn9sgN1m7ILSEVupS6JRJiRwWF6HWobjwuzquSXkvZ/EOYzPdIfjb1M0ynQNu1ppjJjTcQksQ3NZZnPLc3HjK48YLB8nZtSX9scvTC9pTji5qSiiIHABqJxIxcED1NIB3wm9DTPoxp3e2mgWEga1N61qGr8QSQy7Rk/aRpFbb3u1x+Kwns/EUErYh4UId2IfxFdLR/5cTiNPIMclEPz4Voj/4AAWBwZLNq1zVVEZRkj2fHNh5VT3L0UtClp0IazpGARc4OtuDhdnz8p7jRE8bzKkIGn1X43Ba5hk7Y7xRUp8ow0zrLDgG3hxtE+7bh4nA4J5ysFiaIgHPXpVHtPMu1bYx+itEvoai8SgF11RjWxsupBlH5vjpisajl11qyYs2zS++3QmbONIxfhsgmEWMNu3uFyX7iMg9uz/pb2hWBCceNvQvPpxODqTaZzdJzRKS9ajlHRktzmJGLimWCGLfFfvDnOOC1Ou2sCPHZ4nF1esuL6jgXkNOfRshYHBYMd4tTNx0zKqTrNAmdZY2XMPyaqkVIqtPi/ygcVCivFsUXtq1D5icJiHLOQHHzdbJGEgoORWVx+x//KKgb+eTqN2ln8sIqcmpv9nqNf9ZWOr54ktg9fKvw0Jl+HTucpd2XBLv3frDDjz3C9pfIBo6GZBiNyvnnv6xUfwsaxT+WG8X3abo8oU3U3OjI8+dztaLyTg1fmKbqyX2iTj46PJO5P2HwBw2otFO0v4zHgnchKc8goMw2WIjjzUGEr/eJtWt+iAeIK1gt9mTKjeBwAxeBO6Vpcri9G4LElTzlSZWENpPBiBXi6o9qkMxL+C+ztrL2q9/ajja+NUGphU/v9ecnh7DqLjZWq0xMWqQ8/NrEs3ldwKCmWETYC3YnxBfL/bhQS5JH3Lv0th7fAKWWO8qxxdBf+EuFi0PVRifBqIOK5fqfYeO82q+dg0HLMrLKhLjuWyKq96SbIke7uvULYwTDwBowzHYC29B91QPurz3Ot7+/GrScjzYf4cA9Bby22TjL2gb7CHMmqRz8JxsPGLmBHd+daGsreA4u4Wv+cZtR3wMRsg3mayzTdQEkulKC8qUpsLSLFMchaZkkjiMhwZe/2u9D5uzuIaqIoZnKHAzinBAIW2JjjyrIXA+UGTytAdiGYC1S3wGax2HawBoPqLphpLGswKYp0k+Baa1iR0PfwElsS6j4h0+MskQpPhEgXCKhJi0wwXAn6oa+hDEMs1BlOPBdv3c7GRV2wrSQqtAujGkRtVW+8D1U9D6ZbpMmrrPA4uukb5Uv4nK9kls2xqBnQuZti8WpskSTYtEYIfn0lT9Yh/yX51ky+4NNcj83NiiQiD2fa7ODTgo8SQ5oRF94/zhjERAohre0OfM5JkTG0uvj+IXXMHIPMMjfwCCxjEDDTx45pEct+iaN3Y+x6GVmh+sI29ZfoWM8RN9PoOfGpXFwgE4ij0MwR89YNIJijazteqm+D2fTrtYaCT+u/sswUfjN06z5NpZF6mJS0cO420s1rKIJbYcNcxz13BCgBAnnfntaeGMQAirZm9LnNu9NbMd9iudakKkYJ6jSz4Q4Ws+UXkInrs63RO2fdkv209RQqNu7u1E53xdh0kNJOFVXM62sihT45JWbxMgn+1MHb6U52vR4/2G6tq73rG0bf0f//hGXwoKAnhWCzda6ctZ14wB9ynCzlZAZ103HVEQ6VcYABgxBF/W4traDQJHx0UvlRFUkMYRqVGbpPBV9fEPNaD5Ke1Auhl7z9gyPIrgJRKBVC0agpEgMuhB3RNP36wvogd4W2xm2FRvdhJ0Od+Ut6WojCNWc7Malpr0s7FcNJJ0Xr55cHKFhfGbK0qgNKkaa8kWhwpEY/mX2xp1fyoXDpUh8ZRcY0QdLqUHdY7qeaqE+0g+aFEemRA1YKuICancWSa+6zPz5BF5JUcAQli5k6f4VG5Ex82infyZnjrVPL2pe1uuEmqrcvdiDxAaHw7xMpeIioqmkdXd+ie7BEXCm8u44ePxx3Bjc65wz9mFPqMjBBqlEcjVffk2ea3/xCBx0VmDjsAhbx2DoOVnsh0kMgt6x8Z4Tk5GwIFftPE/6FgKUkeHsn6CQZtwan2bWJ57aLEKOg9mL/xxkp6n3btOw2bAa7V/gNK8D5BEVIqthFg1ngUDEi7wekIlho+w+Cqvc+nQCQMCEcCJMJDa6N0n6l/hwvl5Q/vPdjcZ26m+sQXt5sPst3Xfw6tkADD/1V/IAxe+/KpYw+vvbG7ipiSgN+N+peoBLrQ9VwwAcku6wK0zMJWWIVtEZS9tExGc29P4JIjo5UAnkqLcVgs97AWnSS2atilRITMnhaqaT+6a2R8WEyaVu39yf75gGeVuM=" vectorize false rebuild "" CatsEyeConvolve_Amount {{parent.effectAmount}} CatsEyeConvolve_Format {{src.width} {src.height}} CatsEyeConvolve_Interpolate {{parent.interpolate}} protectKernelWhenPublishing true name BlinkScript1 xpos 276 ypos 515 } Dot { name Dot10 label result note_font_size 30 xpos 310 ypos 787 } Switch { inputs 4 which {{parent.show}} name ShowSwitch xpos -242 ypos 784 } Output { name Output1 xpos -242 ypos 902 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_CellNoise.gizmo ================================================ Group { name CellNoise onCreate "n = nuke.thisNode()\nif n is not None:\n w = n.format().width()/2\n h = n.format().height()/2\n center = \[w, h]\n center_knob = n.knob('center')\n create_knob = n.knob('create')\n if center_knob and (create_knob is None or not create_knob.value()):\n center_knob.setValue(center)\n if create_knob:\n create_knob.setValue(1)" knobChanged "\nknob = nuke.thisKnob()\nif knob.name() == 'skew_order':\n nuke.toNode('NoiseTransform')\['rot_order'].setValue('Z' + knob.value())\nif knob.name() == 'noise_type':\n if knob.value() in ['Voronoi', 'Manhattan', 'Chebyshev', 'Euclidian']:\n nuke.thisNode()['range'].clearFlag(0x00040000)\n else:\n nuke.thisNode()['range'].setFlag(0x00040000)\n" tile_color 0x5f5f5fff note_font "Bitstream Vera Sans Bold" note_font_color 0xffffffff selected true addUserKnob {20 cellnoise l "Cell Noise"} addUserKnob {41 format T WorleyNoise.format} addUserKnob {4 noise_type l "noise type" M {Worley "Worley Inverse" Voronoi Manhattan Euclidian Chebyshev ""}} addUserKnob {6 use_gpu l "use gpu" t "Faster calculations, may not work on all computers. Disable to switch to CPU." -STARTLINE} use_gpu true addUserKnob {7 range t "Changes how much of the noise effect applies.\nOnly applies to Manhattan, Chebyshev, Euclidian and Voronoi." +HIDDEN R 0 10} addUserKnob {6 replace +STARTLINE} addUserKnob {26 ""} addUserKnob {7 size R 1 1000} size 30 addUserKnob {7 z t "This knob must be animated if you want it to change over time."} addUserKnob {7 gain R 0 2} gain 1 addUserKnob {7 gamma R 0 2} gamma 1 addUserKnob {20 transform l Transform} addUserKnob {12 translate} addUserKnob {7 rotate R -180 180} addUserKnob {14 scale R 0 100} scale 1 addUserKnob {7 skewX l "skew X" R -1 1} addUserKnob {7 skewY l "skew Y" R -1 1} addUserKnob {4 skew_order l "skew order" t "Specifies which order the skew values should be applied in.\n" M {XY YX}} addUserKnob {12 center} center {1243 865} addUserKnob {22 setCenter l "Set Center" -STARTLINE T "n = nuke.thisNode()\nw= n.width()\nh=n.height()\nn['center'].setValue(\[w/2,h/2])"} addUserKnob {7 xrotate t "Rotation about X axis in 3D noise space." R 0 90} addUserKnob {7 yrotate t "Rotation about Y axis in 3D noise space." R 0 90} addUserKnob {20 colour l Colour} addUserKnob {19 colour0 l "colour 0"} colour0 {0 0 0 0} addUserKnob {6 colour0_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 colour0_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 colour0_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 colour0_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {19 colour1 l "colour 1"} colour1 1 addUserKnob {6 colour1_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 colour1_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 colour1_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 colour1_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } Axis2 { inputs 0 xform_order TRS translate {{parent.translate.x} {parent.translate.y} {parent.z}} rotate {{parent.xrotate} {parent.yrotate} {parent.rotate}} scaling {{parent.scale.w} {parent.scale.h} 1} uniform_scale {{parent.size}} skew {{"parent.skewX * 45"} {"parent.skewY * 45"} 0} pivot {{parent.center.x} {parent.center.y} 0} name NoiseTransform xpos 651 ypos -75 addUserKnob {20 "Ppos Locator"} addUserKnob {18 pointPosition l "Point Position"} pointPosition {0 0 0} addUserKnob {6 pointPosition_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 pointPosition_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 pointPosition_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 pointPosition_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } Input { inputs 0 name Inputmask xpos 221 ypos 381 number 1 } set N55edd600 [stack 0] BlinkScript { inputs 0 ProgramGroup 1 KernelDescription "1 \"ChebyshevNoise\" iterate pixelWise a3199759b15669186cdda7e034095d513217f6595a3ec9e87bbc46847c6731f5 1 \"dst\" Write Point 6 \"Range\" Float 1 AABAQA== \"Gain\" Float 1 AACAPw== \"Gamma\" Float 1 AACAPw== \"Dark Colour\" Float 4 AAAAAAAAAAAAAAAAAACAPw== \"Light Colour\" Float 4 AACAPwAAgD8AAIA/AACAPw== \"transform\" Float 16 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" kernelSource "// https://aftbit.com/cell-noise-2/\n\n# define MAX_DISTANCE_ARRAY 12\n\n// C++11 - use #define to avoid global variables (Blink compatibility)\n#define RAND_MULTIPLIER 48271\n#define RAND_INCREMENT 0\n#define RAND_MODULUS 2147483647\n\nstatic int lcgRandom(int seed)\n{\n int v = (seed * RAND_MULTIPLIER + RAND_INCREMENT) % RAND_MODULUS;\n return (v < 0) ? -v : v;\n}\n\n// FNV Hash\n#define OFFSET_BASIS 2166136261u\n#define FNV_PRIME 16777619u\n\nstatic uint hash(uint i, uint j, uint k)\n{\n return ((((((OFFSET_BASIS ^ i) * FNV_PRIME) ^ j) * FNV_PRIME) ^ k) * FNV_PRIME);\n}\n\n// Poisson Distribution\n#define POISSON_ONE 393325350u\n#define POISSON_TWO 1022645910u\n#define POISSON_THREE 1861739990u\n#define POISSON_FOUR 2700834071u\n#define POISSON_FIVE 3372109335u\n#define POISSON_SIX 3819626178u\n#define POISSON_SEVEN 4075350088u\n#define POISSON_EIGHT 4203212043u\n\nstatic uint probLookup(uint value)\n{\n if (value < POISSON_ONE) return 1;\n if (value < POISSON_TWO) return 2;\n if (value < POISSON_THREE) return 3;\n if (value < POISSON_FOUR) return 4;\n if (value < POISSON_FIVE) return 5;\n if (value < POISSON_SIX) return 6;\n if (value < POISSON_SEVEN) return 7;\n if (value < POISSON_EIGHT) return 8;\n return 9;\n}\n\n// Distance Function\nstatic float ChebyshevDistanceFunc(float3 p1, float3 p2)\n{\n float3 diff = p1 - p2;\n return max(max(fabs(diff.x), fabs(diff.y)), fabs(diff.z));\n}\n\n// Insertion Array\nstatic void insert(float arr[], float value)\n{\n float temp;\n for (int i = MAX_DISTANCE_ARRAY - 1; i >= 0; i--)\n {\n if (value > arr[i])\n break;\n temp = arr[i];\n arr[i] = value;\n if (i + 1 < MAX_DISTANCE_ARRAY)\n {\n arr[i + 1] = temp;\n }\n }\n}\n\n\n// Blink Kernel\nkernel ChebyshevNoise : ImageComputationKernel\n{\n Image dst;\n\n param:\n float range;\n float gain;\n float gamma;\n float4 dark_col;\n float4 light_col;\n float4x4 transform;\n\n local:\n float fRange;\n int iRange;\n float4x4 transform_inv;\n float z;\n\n void define()\n {\n defineParam(range, \"Range\", 3.0f);\n defineParam(gain, \"Gain\", 1.0f);\n defineParam(gamma, \"Gamma\", 1.0f);\n defineParam(dark_col, \"Dark Colour\", float4(0.0f, 0.0f, 0.0f, 1.0f));\n defineParam(light_col, \"Light Colour\", float4(1.0f, 1.0f, 1.0f, 1.0f));\n }\n\n void init()\n {\n fRange = clamp(range, 0.0f, float(MAX_DISTANCE_ARRAY - 2));\n iRange = int(fRange);\n transform_inv = transform.invert();\n z = transform_inv[2][3];\n }\n\n static float3 multVectMatrix(float3 vec, float4x4 M)\n {\n float3 out = float3(\n vec.x * M[0][0] + vec.y * M[0][1] + vec.z * M[0][2] + M[0][3],\n vec.x * M[1][0] + vec.y * M[1][1] + vec.z * M[1][2] + M[1][3],\n vec.x * M[2][0] + vec.y * M[2][1] + vec.z * M[2][2] + M[2][3]\n );\n\n return out;\n }\n\n float4 getColour(float a) {\n return dark_col * (1 - a) + light_col * a;\n }\n\n void process(int2 pos)\n {\n\n //Declare some values for later use\n int lastRandom, numberFeaturePoints;\n float3 randomDiff, featurePoint;\n int cubeX, cubeY, cubeZ;\n\n float distanceArray[MAX_DISTANCE_ARRAY];\n\n // Initialize values in distance array to large values\n for (int i = 0; i < MAX_DISTANCE_ARRAY; i++)\n distanceArray[i] = 6666;\n\n float3 input = float3(float(pos.x), float(pos.y), z);\n input = multVectMatrix(input, transform_inv);\n\n // Determine which cube the evaluation point is in\n int evalCubeX = floor(input.x);\n int evalCubeY = floor(input.y);\n int evalCubeZ = floor(input.z);\n\n for (int i = -1; i < 2; ++i)\n {\n for (int j = -1; j < 2; ++j)\n {\n for (int k = -1; k < 2; ++k)\n {\n cubeX = evalCubeX + i;\n cubeY = evalCubeY + j;\n cubeZ = evalCubeZ + k;\n\n // Generate a reproducible random number generator for the cube\n lastRandom = lcgRandom(hash(cubeX, cubeY, cubeZ));\n // Determine how many feature points are in the cube\n numberFeaturePoints = probLookup(lastRandom);\n // Check each feature point\n for (uint l = 0; l < numberFeaturePoints; ++l)\n {\n lastRandom = lcgRandom(lastRandom);\n randomDiff.x = float(lastRandom) / RAND_MODULUS;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.y = float(lastRandom) / RAND_MODULUS;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.z = float(lastRandom) / RAND_MODULUS;\n\n featurePoint = float3(randomDiff.x + float(cubeX), randomDiff.y + float(cubeY), randomDiff.z + float(cubeZ));\n\n insert(distanceArray, ChebyshevDistanceFunc(input, featurePoint));\n }\n }\n }\n }\n\n float color = (distanceArray[ iRange + 2 ] - distanceArray[ iRange + 1 ]) * fmod(fRange, 1.0f) + distanceArray[ iRange + 1] - distanceArray[0];\n color = pow( color * gain, gamma );\n dst() = getColour(clamp(color, 0.0f, 1.0f));\n\n }\n\n};" useGPUIfAvailable {{parent.use_gpu}} rebuild "" ChebyshevNoise_Range {{parent.range}} ChebyshevNoise_Gain {{parent.gain}} ChebyshevNoise_Gamma {{parent.gamma}} "ChebyshevNoise_Dark Colour" {{parent.colour0.r} {parent.colour0.g} {parent.colour0.b} {parent.colour0.a}} "ChebyshevNoise_Light Colour" {{parent.colour1.r} {parent.colour1.g} {parent.colour1.b} {parent.colour1.a}} ChebyshevNoise_transform { {{parent.NoiseTransform.world_matrix.0} {parent.NoiseTransform.world_matrix.1} {parent.NoiseTransform.world_matrix.2} {parent.NoiseTransform.world_matrix.3}} {{parent.NoiseTransform.world_matrix.4} {parent.NoiseTransform.world_matrix.5} {parent.NoiseTransform.world_matrix.6} {parent.NoiseTransform.world_matrix.7}} {{parent.NoiseTransform.world_matrix.8} {parent.NoiseTransform.world_matrix.9} {parent.NoiseTransform.world_matrix.10} {parent.NoiseTransform.world_matrix.11}} {{parent.NoiseTransform.world_matrix.12} {parent.NoiseTransform.world_matrix.13} {parent.NoiseTransform.world_matrix.14} {parent.NoiseTransform.world_matrix.15}} } format {{{WorleyNoise.format}}} rebuild_finalise "" name ChebyShevNoise xpos 645 ypos 243 } BlinkScript { inputs 0 ProgramGroup 1 KernelDescription "1 \"EuclidianNoise\" iterate pixelWise d1aadc298abbb75c06cdae49489c52619d77cd167b514ac77a000bdc98098443 1 \"dst\" Write Point 6 \"Range\" Float 1 AABAQA== \"Gain\" Float 1 AACAPw== \"Gamma\" Float 1 AACAPw== \"Dark Colour\" Float 4 AAAAAAAAAAAAAAAAAACAPw== \"Light Colour\" Float 4 AACAPwAAgD8AAIA/AACAPw== \"transform\" Float 16 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" kernelSource "// https://aftbit.com/cell-noise-2/\n\n# define MAX_DISTANCE_ARRAY 12\n\n// C++11 - use #define to avoid global variables (Blink compatibility)\n#define RAND_MULTIPLIER 48271\n#define RAND_INCREMENT 0\n#define RAND_MODULUS 2147483647\n\nstatic int lcgRandom(int seed)\n{\n int v = (seed * RAND_MULTIPLIER + RAND_INCREMENT) % RAND_MODULUS;\n return (v < 0) ? -v : v;\n}\n\n// FNV Hash\n#define OFFSET_BASIS 2166136261u\n#define FNV_PRIME 16777619u\n\nstatic uint hash(uint i, uint j, uint k)\n{\n return ((((((OFFSET_BASIS ^ i) * FNV_PRIME) ^ j) * FNV_PRIME) ^ k) * FNV_PRIME);\n}\n\n// Poisson Distribution\n#define POISSON_ONE 393325350u\n#define POISSON_TWO 1022645910u\n#define POISSON_THREE 1861739990u\n#define POISSON_FOUR 2700834071u\n#define POISSON_FIVE 3372109335u\n#define POISSON_SIX 3819626178u\n#define POISSON_SEVEN 4075350088u\n#define POISSON_EIGHT 4203212043u\n\nstatic uint probLookup(uint value)\n{\n if (value < POISSON_ONE) return 1;\n if (value < POISSON_TWO) return 2;\n if (value < POISSON_THREE) return 3;\n if (value < POISSON_FOUR) return 4;\n if (value < POISSON_FIVE) return 5;\n if (value < POISSON_SIX) return 6;\n if (value < POISSON_SEVEN) return 7;\n if (value < POISSON_EIGHT) return 8;\n return 9;\n}\n\n// Distance Functions\nstatic float EuclidianDistanceFunc(float3 p1, float3 p2)\n{\n return (p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y) + (p1.z - p2.z) * (p1.z - p2.z);\n}\n\n\n// Insertion Array\nstatic void insert(float arr[], float value)\n{\n float temp;\n for (int i = MAX_DISTANCE_ARRAY - 1; i >= 0; i--)\n {\n if (value > arr[i])\n break;\n temp = arr[i];\n arr[i] = value;\n if (i + 1 < MAX_DISTANCE_ARRAY)\n {\n arr[i + 1] = temp;\n }\n }\n}\n\n\n// Blink Kernel\nkernel EuclidianNoise : ImageComputationKernel\n{\n Image dst;\n\n param:\n float range;\n float gain;\n float gamma;\n float4 dark_col;\n float4 light_col;\n float4x4 transform;\n\n local:\n float fRange;\n int iRange;\n float4x4 transform_inv;\n float z;\n\n void define()\n {\n defineParam(range, \"Range\", 3.0f);\n defineParam(gain, \"Gain\", 1.0f);\n defineParam(gamma, \"Gamma\", 1.0f);\n defineParam(dark_col, \"Dark Colour\", float4(0.0f, 0.0f, 0.0f, 1.0f));\n defineParam(light_col, \"Light Colour\", float4(1.0f, 1.0f, 1.0f, 1.0f));\n }\n\n void init()\n {\n fRange = clamp(range, 0.0f, float(MAX_DISTANCE_ARRAY - 2));\n iRange = int(fRange);\n transform_inv = transform.invert();\n z = transform_inv[2][3];\n }\n\n static float3 multVectMatrix(float3 vec, float4x4 M)\n {\n float3 out = float3(\n vec.x * M[0][0] + vec.y * M[0][1] + vec.z * M[0][2] + M[0][3],\n vec.x * M[1][0] + vec.y * M[1][1] + vec.z * M[1][2] + M[1][3],\n vec.x * M[2][0] + vec.y * M[2][1] + vec.z * M[2][2] + M[2][3]\n );\n\n return out;\n }\n\n float4 getColour(float a) {\n return dark_col * (1 - a) + light_col * a;\n }\n\n void process(int2 pos)\n {\n\n //Declare some values for later use\n int lastRandom, numberFeaturePoints;\n float3 randomDiff, featurePoint;\n int cubeX, cubeY, cubeZ;\n\n float distanceArray[MAX_DISTANCE_ARRAY];\n\n // Initialize values in distance array to large values\n for (int i = 0; i < MAX_DISTANCE_ARRAY; i++)\n distanceArray[i] = 6666;\n\n float3 input = float3(float(pos.x), float(pos.y), z);\n input = multVectMatrix(input, transform_inv);\n\n // Determine which cube the evaluation point is in\n int evalCubeX = floor(input.x);\n int evalCubeY = floor(input.y);\n int evalCubeZ = floor(input.z);\n\n for (int i = -1; i < 2; ++i)\n {\n for (int j = -1; j < 2; ++j)\n {\n for (int k = -1; k < 2; ++k)\n {\n cubeX = evalCubeX + i;\n cubeY = evalCubeY + j;\n cubeZ = evalCubeZ + k;\n\n // Generate a reproducible random number generator for the cube\n lastRandom = lcgRandom(hash(cubeX, cubeY, cubeZ));\n // Determine how many feature points are in the cube\n numberFeaturePoints = probLookup(lastRandom);\n // Check each feature point\n for (uint l = 0; l < numberFeaturePoints; ++l)\n {\n lastRandom = lcgRandom(lastRandom);\n randomDiff.x = float(lastRandom) / RAND_MODULUS;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.y = float(lastRandom) / RAND_MODULUS;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.z = float(lastRandom) / RAND_MODULUS;\n\n featurePoint = float3(randomDiff.x + float(cubeX), randomDiff.y + float(cubeY), randomDiff.z + float(cubeZ));\n\n insert(distanceArray, EuclidianDistanceFunc(input, featurePoint));\n }\n }\n }\n }\n\n\n float color = (distanceArray[ iRange + 2 ] - distanceArray[ iRange + 1 ]) * fmod(fRange, 1.0f) + distanceArray[ iRange + 1] - distanceArray[0];\n color = pow( color * gain, gamma );\n dst() = getColour(clamp(color, 0.0f, 1.0f));\n\n }\n\n};" useGPUIfAvailable {{parent.use_gpu}} rebuild "" EuclidianNoise_Range {{parent.range}} EuclidianNoise_Gain {{parent.gain}} EuclidianNoise_Gamma {{parent.gamma}} "EuclidianNoise_Dark Colour" {{parent.colour0.r} {parent.colour0.g} {parent.colour0.b} {parent.colour0.a}} "EuclidianNoise_Light Colour" {{parent.colour1.r} {parent.colour1.g} {parent.colour1.b} {parent.colour1.a}} EuclidianNoise_transform { {{parent.NoiseTransform.world_matrix.0} {parent.NoiseTransform.world_matrix.1} {parent.NoiseTransform.world_matrix.2} {parent.NoiseTransform.world_matrix.3}} {{parent.NoiseTransform.world_matrix.4} {parent.NoiseTransform.world_matrix.5} {parent.NoiseTransform.world_matrix.6} {parent.NoiseTransform.world_matrix.7}} {{parent.NoiseTransform.world_matrix.8} {parent.NoiseTransform.world_matrix.9} {parent.NoiseTransform.world_matrix.10} {parent.NoiseTransform.world_matrix.11}} {{parent.NoiseTransform.world_matrix.12} {parent.NoiseTransform.world_matrix.13} {parent.NoiseTransform.world_matrix.14} {parent.NoiseTransform.world_matrix.15}} } format {{{WorleyNoise.format}}} rebuild_finalise "" name EuclidianNoise xpos 546 ypos 153 } BlinkScript { inputs 0 ProgramGroup 1 KernelDescription "1 \"ManhattanNoise\" iterate pixelWise 1d35c614c0525bae7a8ffa70d6c29b98748325506ab7e1dd613b42fef2bd1443 1 \"dst\" Write Point 6 \"Range\" Float 1 AABAQA== \"Gain\" Float 1 AACAPw== \"Gamma\" Float 1 AACAPw== \"Dark Colour\" Float 4 AAAAAAAAAAAAAAAAAACAPw== \"Light Colour\" Float 4 AACAPwAAgD8AAIA/AACAPw== \"transform\" Float 16 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" kernelSource "// https://aftbit.com/cell-noise-2/\n\n# define MAX_DISTANCE_ARRAY 12\n\n// C++11 - use #define to avoid global variables (Blink compatibility)\n#define RAND_MULTIPLIER 48271\n#define RAND_INCREMENT 0\n#define RAND_MODULUS 2147483647\n\nstatic int lcgRandom(int seed)\n{\n int v = (seed * RAND_MULTIPLIER + RAND_INCREMENT) % RAND_MODULUS;\n return (v < 0) ? -v : v;\n}\n\n// FNV Hash\n#define OFFSET_BASIS 2166136261u\n#define FNV_PRIME 16777619u\n\nstatic uint hash(uint i, uint j, uint k)\n{\n return ((((((OFFSET_BASIS ^ i) * FNV_PRIME) ^ j) * FNV_PRIME) ^ k) * FNV_PRIME);\n}\n\n// Poisson Distribution\n#define POISSON_ONE 393325350u\n#define POISSON_TWO 1022645910u\n#define POISSON_THREE 1861739990u\n#define POISSON_FOUR 2700834071u\n#define POISSON_FIVE 3372109335u\n#define POISSON_SIX 3819626178u\n#define POISSON_SEVEN 4075350088u\n#define POISSON_EIGHT 4203212043u\n\nstatic uint probLookup(uint value)\n{\n if (value < POISSON_ONE) return 1;\n if (value < POISSON_TWO) return 2;\n if (value < POISSON_THREE) return 3;\n if (value < POISSON_FOUR) return 4;\n if (value < POISSON_FIVE) return 5;\n if (value < POISSON_SIX) return 6;\n if (value < POISSON_SEVEN) return 7;\n if (value < POISSON_EIGHT) return 8;\n return 9;\n}\n\n// Distance Function\nstatic float ManhattanDistanceFunc(float3 p1, float3 p2)\n{\n return fabs(p1.x - p2.x) + fabs(p1.y - p2.y) + fabs(p1.z - p2.z);\n}\n\n// Insertion Array\nstatic void insert(float arr[], float value)\n{\n float temp;\n for (int i = MAX_DISTANCE_ARRAY - 1; i >= 0; i--)\n {\n if (value > arr[i])\n break;\n temp = arr[i];\n arr[i] = value;\n if (i + 1 < MAX_DISTANCE_ARRAY)\n {\n arr[i + 1] = temp;\n }\n }\n}\n\n\n// Blink Kernel\nkernel ManhattanNoise : ImageComputationKernel\n{\n Image dst;\n\n param:\n float range;\n float gain;\n float gamma;\n float4 dark_col;\n float4 light_col;\n float4x4 transform;\n\n local:\n float fRange;\n int iRange;\n float4x4 transform_inv;\n float z;\n\n void define()\n {\n defineParam(range, \"Range\", 3.0f);\n defineParam(gain, \"Gain\", 1.0f);\n defineParam(gamma, \"Gamma\", 1.0f);\n defineParam(dark_col, \"Dark Colour\", float4(0.0f, 0.0f, 0.0f, 1.0f));\n defineParam(light_col, \"Light Colour\", float4(1.0f, 1.0f, 1.0f, 1.0f));\n }\n\n void init()\n {\n fRange = clamp(range, 0.0f, float(MAX_DISTANCE_ARRAY - 2));\n iRange = int(fRange);\n transform_inv = transform.invert();\n z = transform_inv[2][3];\n }\n\n static float3 multVectMatrix(float3 vec, float4x4 M)\n {\n float3 out = float3(\n vec.x * M[0][0] + vec.y * M[0][1] + vec.z * M[0][2] + M[0][3],\n vec.x * M[1][0] + vec.y * M[1][1] + vec.z * M[1][2] + M[1][3],\n vec.x * M[2][0] + vec.y * M[2][1] + vec.z * M[2][2] + M[2][3]\n );\n\n return out;\n }\n\n float4 getColour(float a) {\n return dark_col * (1 - a) + light_col * a;\n }\n\n void process(int2 pos)\n {\n\n //Declare some values for later use\n int lastRandom, numberFeaturePoints;\n float3 randomDiff, featurePoint;\n int cubeX, cubeY, cubeZ;\n\n float distanceArray[MAX_DISTANCE_ARRAY];\n\n // Initialize values in distance array to large values\n for (int i = 0; i < MAX_DISTANCE_ARRAY; i++)\n distanceArray[i] = 6666;\n\n float3 input = float3(float(pos.x), float(pos.y), z);\n input = multVectMatrix(input, transform_inv);\n\n // Determine which cube the evaluation point is in\n int evalCubeX = floor(input.x);\n int evalCubeY = floor(input.y);\n int evalCubeZ = floor(input.z);\n\n for (int i = -1; i < 2; ++i)\n {\n for (int j = -1; j < 2; ++j)\n {\n for (int k = -1; k < 2; ++k)\n {\n cubeX = evalCubeX + i;\n cubeY = evalCubeY + j;\n cubeZ = evalCubeZ + k;\n\n // Generate a reproducible random number generator for the cube\n lastRandom = lcgRandom(hash(cubeX, cubeY, cubeZ));\n // Determine how many feature points are in the cube\n numberFeaturePoints = probLookup(lastRandom);\n // Check each feature point\n for (uint l = 0; l < numberFeaturePoints; ++l)\n {\n lastRandom = lcgRandom(lastRandom);\n randomDiff.x = float(lastRandom) / RAND_MODULUS;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.y = float(lastRandom) / RAND_MODULUS;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.z = float(lastRandom) / RAND_MODULUS;\n\n featurePoint = float3(randomDiff.x + float(cubeX), randomDiff.y + float(cubeY), randomDiff.z + float(cubeZ));\n\n insert(distanceArray, ManhattanDistanceFunc(input, featurePoint));\n }\n }\n }\n }\n\n float color = (distanceArray[ iRange + 2 ] - distanceArray[ iRange + 1 ]) * fmod(fRange, 1.0f) + distanceArray[ iRange + 1] - distanceArray[0];\n color = pow( color * gain, gamma );\n dst() = getColour(clamp(color, 0.0f, 1.0f));\n\n }\n\n};" useGPUIfAvailable {{parent.use_gpu}} rebuild "" ManhattanNoise_Range {{parent.range}} ManhattanNoise_Gain {{parent.gain}} ManhattanNoise_Gamma {{parent.gamma}} "ManhattanNoise_Dark Colour" {{parent.colour0.r} {parent.colour0.g} {parent.colour0.b} {parent.colour0.a}} "ManhattanNoise_Light Colour" {{parent.colour1.r} {parent.colour1.g} {parent.colour1.b} {parent.colour1.a}} ManhattanNoise_transform { {{parent.NoiseTransform.world_matrix.0} {parent.NoiseTransform.world_matrix.1} {parent.NoiseTransform.world_matrix.2} {parent.NoiseTransform.world_matrix.3}} {{parent.NoiseTransform.world_matrix.4} {parent.NoiseTransform.world_matrix.5} {parent.NoiseTransform.world_matrix.6} {parent.NoiseTransform.world_matrix.7}} {{parent.NoiseTransform.world_matrix.8} {parent.NoiseTransform.world_matrix.9} {parent.NoiseTransform.world_matrix.10} {parent.NoiseTransform.world_matrix.11}} {{parent.NoiseTransform.world_matrix.12} {parent.NoiseTransform.world_matrix.13} {parent.NoiseTransform.world_matrix.14} {parent.NoiseTransform.world_matrix.15}} } format {{{WorleyNoise.format}}} rebuild_finalise "" name ManhattanNoise xpos 459 ypos 63 } BlinkScript { inputs 0 ProgramGroup 1 KernelDescription "1 \"VoronoiNoise\" iterate pixelWise 1b53c166801ea17d0619d5f85ca955c827fd3c1e639128218c64fea2e471be9e 1 \"dst\" Write Point 6 \"Range\" Float 1 AABAQA== \"Gain\" Float 1 AACAPw== \"Gamma\" Float 1 AACAPw== \"Dark Colour\" Float 4 AAAAAAAAAAAAAAAAAACAPw== \"Light Colour\" Float 4 AACAPwAAgD8AAIA/AACAPw== \"transform\" Float 16 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" kernelSource "// https://aftbit.com/cell-noise-2/\n\n# define MAX_DISTANCE_ARRAY 12\n\n// C++11 - use #define to avoid global variables (Blink compatibility)\n#define RAND_MULTIPLIER 48271\n#define RAND_INCREMENT 0\n#define RAND_MODULUS 2147483647\n\nstatic int lcgRandom(int seed)\n{\n int v = (seed * RAND_MULTIPLIER + RAND_INCREMENT) % RAND_MODULUS;\n return (v < 0) ? -v : v;\n}\n\n// FNV Hash\n#define OFFSET_BASIS 2166136261u\n#define FNV_PRIME 16777619u\n\nstatic uint hash(uint i, uint j, uint k)\n{\n return ((((((OFFSET_BASIS ^ i) * FNV_PRIME) ^ j) * FNV_PRIME) ^ k) * FNV_PRIME);\n}\n\n// Poisson Distribution\n#define POISSON_ONE 393325350u\n#define POISSON_TWO 1022645910u\n#define POISSON_THREE 1861739990u\n#define POISSON_FOUR 2700834071u\n#define POISSON_FIVE 3372109335u\n#define POISSON_SIX 3819626178u\n#define POISSON_SEVEN 4075350088u\n#define POISSON_EIGHT 4203212043u\n\nstatic uint probLookup(uint value)\n{\n if (value < POISSON_ONE) return 1;\n if (value < POISSON_TWO) return 2;\n if (value < POISSON_THREE) return 3;\n if (value < POISSON_FOUR) return 4;\n if (value < POISSON_FIVE) return 5;\n if (value < POISSON_SIX) return 6;\n if (value < POISSON_SEVEN) return 7;\n if (value < POISSON_EIGHT) return 8;\n return 9;\n}\n\n// Insertion Array\nstatic void insert(float arr[], int idArr[], float value, int id)\n{\n float temp;\n int tempID;\n for (int i = MAX_DISTANCE_ARRAY - 1; i >= 0; i--)\n {\n if (value > arr[i])\n break;\n temp = arr[i];\n tempID = idArr[i];\n arr[i] = value;\n idArr[i] = id;\n if (i + 1 < MAX_DISTANCE_ARRAY)\n {\n arr[i + 1] = temp;\n idArr[i + 1] = tempID;\n }\n }\n}\n\n\n// Blink Kernel\nkernel VoronoiNoise : ImageComputationKernel\n{\n Image dst;\n\n param:\n float range;\n float gain;\n float gamma;\n float4 dark_col;\n float4 light_col;\n float4x4 transform;\n\n local:\n float fRange;\n int iRange;\n float4x4 transform_inv;\n float z;\n\n void define()\n {\n defineParam(range, \"Range\", 3.0f);\n defineParam(gain, \"Gain\", 1.0f);\n defineParam(gamma, \"Gamma\", 1.0f);\n defineParam(dark_col, \"Dark Colour\", float4(0.0f, 0.0f, 0.0f, 1.0f));\n defineParam(light_col, \"Light Colour\", float4(1.0f, 1.0f, 1.0f, 1.0f));\n }\n\n void init()\n {\n fRange = clamp(range, 0.0f, float(MAX_DISTANCE_ARRAY - 2));\n iRange = int(fRange);\n transform_inv = transform.invert();\n z = transform_inv[2][3];\n }\n\n static float3 multVectMatrix(float3 vec, float4x4 M)\n {\n float3 out = float3(\n vec.x * M[0][0] + vec.y * M[0][1] + vec.z * M[0][2] + M[0][3],\n vec.x * M[1][0] + vec.y * M[1][1] + vec.z * M[1][2] + M[1][3],\n vec.x * M[2][0] + vec.y * M[2][1] + vec.z * M[2][2] + M[2][3]\n );\n\n return out;\n }\n\n float4 getColour(float a) {\n return dark_col * (1 - a) + light_col * a;\n }\n\n void process(int2 pos)\n {\n\n //Declare some values for later use\n int lastRandom, id, numberFeaturePoints;\n float3 randomDiff, featurePoint;\n int cubeX, cubeY, cubeZ;\n\n float distanceArray[MAX_DISTANCE_ARRAY];\n int idArray[MAX_DISTANCE_ARRAY];\n\n // Initialize values in distance array to large values\n for (int i = 0; i < MAX_DISTANCE_ARRAY; i++)\n distanceArray[i] = 6666;\n\n float3 input = float3(float(pos.x), float(pos.y), z);\n input = multVectMatrix(input, transform_inv);\n\n // Determine which cube the evaluation point is in\n int evalCubeX = floor(input.x);\n int evalCubeY = floor(input.y);\n int evalCubeZ = floor(input.z);\n\n for (int i = -1; i < 2; ++i)\n {\n for (int j = -1; j < 2; ++j)\n {\n for (int k = -1; k < 2; ++k)\n {\n cubeX = evalCubeX + i;\n cubeY = evalCubeY + j;\n cubeZ = evalCubeZ + k;\n\n // Generate a reproducible random number generator for the cube\n lastRandom = lcgRandom(hash(cubeX, cubeY, cubeZ));\n id = lastRandom;\n // Determine how many feature points are in the cube\n numberFeaturePoints = probLookup(lastRandom);\n // Check each feature point\n for (uint l = 0; l < numberFeaturePoints; ++l)\n {\n lastRandom = lcgRandom(lastRandom);\n randomDiff.x = float(lastRandom) / RAND_MODULUS;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.y = float(lastRandom) / RAND_MODULUS;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.z = float(lastRandom) / RAND_MODULUS;\n\n featurePoint = float3(randomDiff.x + float(cubeX), randomDiff.y + float(cubeY), randomDiff.z + float(cubeZ));\n\n insert(distanceArray, idArray, length(input - featurePoint), id+l);\n }\n }\n }\n }\n\n float3 col = float3(float(idArray[iRange]) / RAND_MODULUS, 0.0f, 0.0f);\n lastRandom = lcgRandom(idArray[iRange]);\n col.y = float(lastRandom) / RAND_MODULUS;\n lastRandom = lcgRandom(lastRandom);\n col.z = float(lastRandom) / RAND_MODULUS;\n\n for(int component = 0; component < 3; component++)\n dst(component) = pow( col[component] * gain, gamma);\n dst(3) = 1.0f;\n }\n\n};" useGPUIfAvailable {{parent.use_gpu}} rebuild "" VoronoiNoise_Range {{parent.range}} VoronoiNoise_Gain {{parent.gain}} VoronoiNoise_Gamma {{parent.gamma}} "VoronoiNoise_Dark Colour" {{parent.colour0.r} {parent.colour0.g} {parent.colour0.b} {parent.colour0.a}} "VoronoiNoise_Light Colour" {{parent.colour1.r} {parent.colour1.g} {parent.colour1.b} {parent.colour1.a}} VoronoiNoise_transform { {{parent.NoiseTransform.world_matrix.0} {parent.NoiseTransform.world_matrix.1} {parent.NoiseTransform.world_matrix.2} {parent.NoiseTransform.world_matrix.3}} {{parent.NoiseTransform.world_matrix.4} {parent.NoiseTransform.world_matrix.5} {parent.NoiseTransform.world_matrix.6} {parent.NoiseTransform.world_matrix.7}} {{parent.NoiseTransform.world_matrix.8} {parent.NoiseTransform.world_matrix.9} {parent.NoiseTransform.world_matrix.10} {parent.NoiseTransform.world_matrix.11}} {{parent.NoiseTransform.world_matrix.12} {parent.NoiseTransform.world_matrix.13} {parent.NoiseTransform.world_matrix.14} {parent.NoiseTransform.world_matrix.15}} } format {{{WorleyNoise.format}}} rebuild_finalise "" name VoronoiNoise xpos 315 ypos -1 } BlinkScript { inputs 0 ProgramGroup 1 KernelDescription "1 \"Worley\" iterate pixelWise 92b94530192011feae18a63400ce40dd1c828de463a428e45921ce9da3f88e94 1 \"dst\" Write Point 6 \"Invert\" Bool 1 AA== \"Gain\" Float 1 AACAPw== \"Gamma\" Float 1 AACAPw== \"Dark Colour\" Float 4 AAAAAAAAAAAAAAAAAACAPw== \"Light Colour\" Float 4 AACAPwAAgD8AAIA/AACAPw== \"transform\" Float 16 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" kernelSource "// https://aftbit.com/cell-noise-2/\n\n// C++11 - use #define to avoid global variables (Blink compatibility)\n#define RAND_MULTIPLIER 48271\n#define RAND_INCREMENT 0\n#define RAND_MODULUS 2147483647\n\nstatic int lcgRandom(int seed)\n{\n int v = (seed * RAND_MULTIPLIER + RAND_INCREMENT) % RAND_MODULUS;\n return (v < 0) ? -v : v;\n}\n\n// FNV Hash\n#define OFFSET_BASIS 2166136261u\n#define FNV_PRIME 16777619u\n\nstatic uint hash(uint i, uint j, uint k)\n{\n return ((((((OFFSET_BASIS ^ i) * FNV_PRIME) ^ j) * FNV_PRIME) ^ k) * FNV_PRIME);\n}\n\n// Poisson Distribution\n#define POISSON_ONE 393325350u\n#define POISSON_TWO 1022645910u\n#define POISSON_THREE 1861739990u\n#define POISSON_FOUR 2700834071u\n#define POISSON_FIVE 3372109335u\n#define POISSON_SIX 3819626178u\n#define POISSON_SEVEN 4075350088u\n#define POISSON_EIGHT 4203212043u\n\nstatic uint probLookup(uint value)\n{\n if (value < POISSON_ONE) return 1;\n if (value < POISSON_TWO) return 2;\n if (value < POISSON_THREE) return 3;\n if (value < POISSON_FOUR) return 4;\n if (value < POISSON_FIVE) return 5;\n if (value < POISSON_SIX) return 6;\n if (value < POISSON_SEVEN) return 7;\n if (value < POISSON_EIGHT) return 8;\n return 9;\n}\n\n// Distance Functions\nstatic float EuclidianDistanceFunc(float3 p1, float3 p2)\n{\n return (p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y) + (p1.z - p2.z) * (p1.z - p2.z);\n}\n\nstatic float ManhattanDistanceFunc(float3 p1, float3 p2)\n{\n return fabs(p1.x - p2.x) + fabs(p1.y - p2.y) + fabs(p1.z - p2.z);\n}\n\nstatic float ChebyshevDistanceFunc(float3 p1, float3 p2)\n{\n float3 diff = p1 - p2;\n return max(max(fabs(diff.x), fabs(diff.y)), fabs(diff.z));\n}\n\n\n// Blink Kernel\nkernel Worley : ImageComputationKernel\n{\n Image dst;\n\n param:\n bool invert;\n float gain;\n float gamma;\n float4 dark_col;\n float4 light_col;\n float4x4 transform;\n\n local:\n float4x4 transform_inv;\n float z;\n\n void define()\n {\n defineParam(invert, \"Invert\", false);\n defineParam(gain, \"Gain\", 1.0f);\n defineParam(gamma, \"Gamma\", 1.0f);\n defineParam(dark_col, \"Dark Colour\", float4(0.0f, 0.0f, 0.0f, 1.0f));\n defineParam(light_col, \"Light Colour\", float4(1.0f, 1.0f, 1.0f, 1.0f));\n }\n\n void init()\n {\n transform_inv = transform.invert();\n z = transform_inv[2][3];\n }\n\n static float3 multVectMatrix(float3 vec, float4x4 M)\n {\n float3 out = float3(\n vec.x * M[0][0] + vec.y * M[0][1] + vec.z * M[0][2] + M[0][3],\n vec.x * M[1][0] + vec.y * M[1][1] + vec.z * M[1][2] + M[1][3],\n vec.x * M[2][0] + vec.y * M[2][1] + vec.z * M[2][2] + M[2][3]\n );\n\n return out;\n }\n\n float4 getColour(float a) {\n return dark_col * (1 - a) + light_col * a;\n }\n\n void process(int2 pos)\n {\n\n //Declare some values for later use\n int lastRandom, numberFeaturePoints;\n float distance = 6666.0f;\n float3 randomDiff, featurePoint;\n int cubeX, cubeY, cubeZ;\n\n float3 input = float3(float(pos.x), float(pos.y), z);\n input = multVectMatrix(input, transform_inv);\n\n // Determine which cube the evaluation point is in\n int evalCubeX = floor(input.x);\n int evalCubeY = floor(input.y);\n int evalCubeZ = floor(input.z);\n\n for (int i = -1; i < 2; ++i)\n {\n for (int j = -1; j < 2; ++j)\n {\n for (int k = -1; k < 2; ++k)\n {\n cubeX = evalCubeX + i;\n cubeY = evalCubeY + j;\n cubeZ = evalCubeZ + k;\n\n // Generate a reproducible random number generator for the cube\n lastRandom = lcgRandom(hash(cubeX, cubeY, cubeZ));\n // Determine how many feature points are in the cube\n numberFeaturePoints = probLookup(lastRandom);\n // Check each feature point\n for (uint l = 0; l < numberFeaturePoints; ++l)\n {\n lastRandom = lcgRandom(lastRandom);\n randomDiff.x = float(lastRandom) / RAND_MODULUS;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.y = float(lastRandom) / RAND_MODULUS;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.z = float(lastRandom) / RAND_MODULUS;\n\n featurePoint = float3(randomDiff.x + float(cubeX), randomDiff.y + float(cubeY), randomDiff.z + float(cubeZ));\n\n distance = min(distance, dot(input - featurePoint, input - featurePoint));\n }\n }\n }\n }\n\n distance = sqrt(distance);\n if (invert)\n distance = 1.0f - distance;\n distance = pow(distance * gain, gamma);\n dst() = getColour(clamp(distance, 0.0f, 1.0f));\n\n }\n\n};" useGPUIfAvailable {{parent.use_gpu}} rebuild "" Worley_Invert {{"parent.noise_type == 1"}} Worley_Gain {{parent.gain}} Worley_Gamma {{parent.gamma}} "Worley_Dark Colour" {{parent.colour0.r} {parent.colour0.g} {parent.colour0.b} {parent.colour0.a}} "Worley_Light Colour" {{parent.colour1.r} {parent.colour1.g} {parent.colour1.b} {parent.colour1.a}} Worley_transform { {{parent.NoiseTransform.world_matrix.0} {parent.NoiseTransform.world_matrix.1} {parent.NoiseTransform.world_matrix.2} {parent.NoiseTransform.world_matrix.3}} {{parent.NoiseTransform.world_matrix.4} {parent.NoiseTransform.world_matrix.5} {parent.NoiseTransform.world_matrix.6} {parent.NoiseTransform.world_matrix.7}} {{parent.NoiseTransform.world_matrix.8} {parent.NoiseTransform.world_matrix.9} {parent.NoiseTransform.world_matrix.10} {parent.NoiseTransform.world_matrix.11}} {{parent.NoiseTransform.world_matrix.12} {parent.NoiseTransform.world_matrix.13} {parent.NoiseTransform.world_matrix.14} {parent.NoiseTransform.world_matrix.15}} } rebuild_finalise "" name WorleyNoise selected true xpos 177 ypos -54 } Switch { inputs 5 which {{"max(parent.noise_type - 1,0)"}} name Switch1 xpos 177 ypos 249 } Dot { name Dot1 note_font_size 41 xpos 211 ypos 314 } set Nd287b900 [stack 0] push $N55edd600 push $Nd287b900 Input { inputs 0 name Input xpos 10 ypos -78 } Merge2 { inputs 2+1 name Merge1 label "\[ expr { [value mix] == 1 ? \" \" : \[concat Mix: [value mix]] }]" disable {{replace}} } Merge2 { inputs 2+1 operation copy name Merge2 label "\[ expr { [value mix] == 1 ? \" \" : \[concat Mix: [value mix]] }]" disable {{!replace}} } Output { name Output1 xpos 10 ypos 533 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ChannelCombiner.gizmo ================================================ Group { name ChannelCombiner tile_color 0x9e3c63ff note_font "Verdana Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" note_font_color 0xffffffff selected true addUserKnob {20 ChannelCombiner} addUserKnob {41 from0 l "Channel 1" T Cmask01.from0} addUserKnob {41 value T Mult_red.value} addUserKnob {41 operation_4 l Ch1-->Ch2 T MergeR_G.operation} addUserKnob {41 disable_1 l disable -STARTLINE T MergeR_G.disable} addUserKnob {41 from0_1 l "Channel 2" T Cmask02.from0} addUserKnob {41 value_1 l value T Mult_Green.value} addUserKnob {41 operation_1 l Ch2-->Ch3 T Merge_G_B.operation} addUserKnob {41 disable_2 l disable -STARTLINE T Merge_G_B.disable} addUserKnob {41 from0_2 l "Channel 3" T Cmask03.from0} addUserKnob {41 value_2 l value T Mult_blue1.value} addUserKnob {41 operation_2 l Ch3-->Ch4 T MergeB_A.operation} addUserKnob {41 disable_3 l disable -STARTLINE T MergeB_A.disable} addUserKnob {41 from0_3 l "Channel 4" T Cmask04.from0} addUserKnob {41 mix l value T Cmask04.mix} addUserKnob {26 ""} addUserKnob {6 clampCheck l "Clamp Values?" +STARTLINE} clampCheck true addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Choose channels and a mix of the channel, and the merge operation between the different channels.\n\nOption to clamp the output" T ChannelCombiner} addUserKnob {26 ver l Version: T v07} } Input { inputs 0 name Input xpos 83 ypos -657 } Dot { name Dot1 xpos 117 ypos -633 } set N9968abc0 [stack 0] push $N9968abc0 push $N9968abc0 push $N9968abc0 push $N9968abc0 Remove { name Remove1 xpos -371 ypos -643 } Copy { inputs 2 to0 rgba.red name Cmask01 xpos -371 ypos -519 } Copy { inputs 2 to0 rgba.green name Cmask02 xpos -203 ypos -519 } Copy { inputs 2 to0 rgba.blue name Cmask03 xpos -65 ypos -519 } Copy { inputs 2 to0 rgba.alpha name Cmask04 xpos 83 ypos -519 } Shuffle { name channel_selector label "\[value in]" xpos 83 ypos -356 } set N996b0460 [stack 0] Shuffle { red alpha green alpha blue alpha name Alpha xpos 83 ypos -193 } Multiply { name Mult_alpha xpos 83 ypos -134 } push $N996b0460 Shuffle { red blue green blue alpha blue name Blue xpos -65 ypos -192 } Multiply { name Mult_blue1 xpos -75 ypos -131 } push $N996b0460 Shuffle { red green blue green alpha green name Green xpos -190 ypos -193 } Multiply { name Mult_Green xpos -190 ypos -139 } push $N996b0460 Shuffle { green red blue red alpha red name Red xpos -303 ypos -194 } Multiply { name Mult_red xpos -303 ypos -139 } Merge2 { inputs 2 name MergeR_G xpos -249 ypos -53 } Merge2 { inputs 2 name Merge_G_B xpos -75 ypos -53 } Merge2 { inputs 2 name MergeB_A xpos 83 ypos -53 } Clamp { name Clamp1 xpos 83 ypos 104 disable {{!parent.clampCheck}} } Shuffle { red alpha green black blue black name Shuffle20 label "\[value in]" xpos 83 ypos 232 } set N9974e150 [stack 0] Output { name Output2 xpos 83 ypos 398 } push $N9974e150 end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ChannelControl.gizmo ================================================ Group { name ChannelControl help "Mix the ratio of Red, Green, Blue, Alpha Channels and choose a Merge operation.\nResult is a matte output to RGBA" tile_color 0x9e3c63ff note_font_color 0xffffffff selected true addUserKnob {20 ChannelControl} addUserKnob {41 channel l Channel T Shuffle6.in} addUserKnob {41 op l Operation T Merge1.operation} addUserKnob {6 clamp l "Clamp Output" -STARTLINE} clamp true addUserKnob {7 red l "Red"} red 1 addUserKnob {7 green l "Green"} green 1 addUserKnob {7 blue l "Blue"} blue 1 addUserKnob {7 alpha l "Alpha"} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge4.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge4.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge4.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge4.fringe} addUserKnob {41 mix T Merge4.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T " Tony Lyons"} addUserKnob {26 desc l Description: T ChannelControl} addUserKnob {26 ver l Version: T v07} } Input { inputs 0 name Inputmask xpos 354 ypos 238 number 1 } Input { inputs 0 name Input xpos 141 ypos -279 } AddChannels { channels rgba name AddChannels1 xpos 141 ypos -224 } Dot { name Dot1 note_font_size 41 xpos 175 ypos -181 } set N378a3fc0 [stack 0] Shuffle { name Shuffle6 note_font_color 0xffffffff xpos 258 ypos -188 } Multiply { channels rgba value {{parent.red} {parent.green} {parent.blue} {parent.alpha}} name Multiply1 label "\[value value]" xpos 258 ypos -131 } set N378884b0 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle5 tile_color 0xffffffff note_font_color 0xffffffff xpos 545 ypos -22 } push $N378884b0 Shuffle { red blue green blue alpha blue name Shuffle4 tile_color 0x3d3f8e00 note_font_color 0xffffffff xpos 447 ypos -23 } push $N378884b0 Shuffle { red green blue green alpha green name Shuffle2 tile_color 0x3f633800 note_font_color 0xffffffff xpos 350 ypos -24 } push $N378884b0 Shuffle { green red blue red alpha red name Shuffle3 tile_color 0x93000000 note_font_color 0xffffffff xpos 258 ypos -23 } Merge2 { inputs 2 operation plus name Merge1 xpos 258 ypos 28 } Merge2 { inputs 2 operation {{parent.Merge1.operation}} name Merge2 xpos 258 ypos 77 } Merge2 { inputs 2 operation {{parent.Merge1.operation}} name Merge3 xpos 258 ypos 128 } Clamp { channels rgba name Clamp1 xpos 258 ypos 177 disable {{!parent.clamp}} } push $N378a3fc0 Multiply { channels rgba value 0 name Multiply2 label "\[value value]" xpos 141 ypos -128 } Merge2 { inputs 2+1 operation copy name Merge4 selected true xpos 141 ypos 238 } Output { name Output1 xpos 141 ypos 296 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ChannelCreator.gizmo ================================================ Group { name ChannelCreator tile_color 0x9e3c63ff label "\n" note_font "Verdana Bold" note_font_color 0xffffffff selected true addUserKnob {20 User l ChannelCreator} addUserKnob {41 in l input T Shuffle1.in} addUserKnob {22 pop_list l "Populate List" T "channelName = nuke.thisNode()\[\"in\"].value()\n\nnewRed = str(channelName) + \".red\"\nnewGreen = str(channelName) + \".green\"\nnewBlue = str(channelName) + \".blue\"\nnewAlpha = str(channelName) + \".alpha\"\n\nnuke.thisNode()\[\"in_red\"].setValue(newRed)\nnuke.thisNode()\[\"in_green\"].setValue(newGreen)\nnuke.thisNode()\[\"in_blue\"].setValue(newBlue)\nnuke.thisNode()\[\"in_alpha\"].setValue(newAlpha)\n" +STARTLINE} addUserKnob {1 in_red l Red} in_red rgba.red addUserKnob {1 channel1 l Channel1 -STARTLINE} addUserKnob {1 in_green l Green} in_green rgba.green addUserKnob {1 channel2 l Channel2 -STARTLINE} addUserKnob {1 in_blue l Blue} in_blue rgba.blue addUserKnob {1 channel3 l Channel3 -STARTLINE} addUserKnob {1 in_alpha l Alpha} in_alpha rgba.alpha addUserKnob {1 channel4 l Channel4 -STARTLINE} addUserKnob {26 "" +STARTLINE} addUserKnob {22 generateCopy l "generate copy node" T "## Function Variables\nchannelDict = \{\} ## Dictionary for all channel variables\ncopyChannels = \{\} ## Dictionary for Copy node to place layer variable\ntoList = \['to0', 'to1', 'to2', 'to3'] ## List of Copy Node to variables\ngroupLayerName = \[ 'in_red', 'in_green', 'in_blue', 'in_alpha'] ## List of Channel knobs\ncopyLayerNames = \[ 'from0', 'from1', 'from2', 'from3'] ## List of Copy Node knobs\n\n## Grab group node name\t\ngroup = nuke.toNode('this')\ngroup.end()\n\n## Deselect all nodes\nnuke.selectAll()\nnuke.invertSelection()\n\n## List for channel variables\nchannelList = sorted (\[ each for each in group.knobs().keys() if 'channel' in each.lower()])\n\n## Set up channel dictionary with values\nfor each in channelList:\n\tvalue = group\[each].getValue()\n\tchannelDict\[each] = value\n\n## Creates new channel and sets up copyNode dictionary\nfor each, copy in zip(sorted(channelDict.keys()), toList):\n\tif channelDict\[each] == '':\n\t\t## Store name in copy Dictionary\n\t\tcopyChannels\[copy] = 'none'\n\t\n\tif channelDict\[each] != '':\n\t\tif ' ' in channelDict\[each]:\n\t\t\tchannelDict\[each] = channelDict\[each].replace( ' ', '_')\n\t\t\n\t\t## Construct channel name\n\t\tvalue = channelDict\[each]+'.red'\n\n\t\t## Store name in copy Dictionary\n\t\tcopyChannels\[copy] = value \n\t\t\n\t\t## Create layer from channel values\n\t\tnuke.Layer( channelDict\[each], \[ value] )\n\n## Create Copy Node\ncopyNode = nuke.createNode('Copy')\n\n## Grab layer names\nfor each, x in zip( groupLayerName, copyLayerNames):\n\tvalue = group\[each].getValue()\n\t\n\t## Set Copy node layer\n\tcopyNode\[x].setValue( value)\n\n## Set Copy Node channel\nfor key in sorted(copyChannels.keys()):\n\tcopyNode\[ key].setValue( copyChannels\[key])\n\n\nfor num, channel in enumerate( sorted( copyChannels.keys())):\n\tprint copyChannels\[ channel], channel\n\tif copyChannels\[channel] == 'none':\n\t\tcopyNode\[ copyLayerNames\[num]].setValue( 'none')" +STARTLINE} addUserKnob {26 help_2 l " " T "All new Channels will end in .red\n.red"} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator T "Tony Lyons"} addUserKnob {26 desc l Description: t "Add layer name descriptions to Channels 1,2,3,4\n\nPopulate list enters rgba.red, rgba.green, rgba.blue, rgba.alpha into input side\n\nCreates a copy node, that copies red, green, blue, alpha channels over to newly created channels with layernames\n\nThis creates layer.red only to minimize channels, Does Not create layer.red, layer.green, layer.blue, etc" T ChannelCreator} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 170 ypos -177 } Shuffle { name Shuffle1 xpos 170 ypos -136 } Output { name Output1 xpos 170 ypos -36 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ChromaSmear.gizmo ================================================ Group { name ChromaSmear tile_color 0xd26524ff note_font "Bitstream Vera Sans Bold" note_font_color 0xffffffff selected true addUserKnob {20 ChromaSmear} addUserKnob {26 note l "" +STARTLINE T "Area input = pre-mask (mult vectors)"} addUserKnob {26 note3 l " " -STARTLINE T "Vector input = custom vectors"} addUserKnob {26 note2 l "" +STARTLINE T "Mask input = post-mask (keymix)"} addUserKnob {26 ""} addUserKnob {7 abberation R -5 5} abberation 3 addUserKnob {7 saturation} saturation 1 addUserKnob {7 offset R -1 1} offset 0.5 addUserKnob {26 ""} addUserKnob {41 translate T Transform1.translate} addUserKnob {41 rotate T Transform1.rotate} addUserKnob {41 scale T Transform1.scale} addUserKnob {41 center T Transform1.center} addUserKnob {41 opacity l fade T Radial1.opacity} addUserKnob {26 ""} addUserKnob {7 overallAmount l "Overall Amount" R -2 3} overallAmount 1 addUserKnob {7 Mask_softness l "Radial Mask"} addUserKnob {6 exportAPchroma l "Export apChroma layer" +STARTLINE} exportAPchroma true addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge5.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge5.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge5.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge5.fringe} addUserKnob {41 mix T Merge5.mix} addUserKnob {26 ""} addUserKnob {26 credit l "" +STARTLINE T "Luc Julien 2010 | edited by Tony Lyons 2024"} } Input { inputs 0 name InputMask xpos -31 ypos 1074 number 1 } Input { inputs 0 name InputArea xpos 311 ypos 20 number 2 } AddChannels { channels rgba color 1 name AddChannels1 xpos 311 ypos 58 } Invert { name Invert2 xpos 311 ypos 97 } Input { inputs 0 name Inputvectors label "\[value number]" xpos 178 ypos 5 number 3 } Radial { inputs 0 cliptype none invert true opacity 0.25 area {{curve i} {curve i} {input.width i} {input.height i}} softness {{parent.Mask_softness*-1+1+.5 i x1 0.585}} plinear true name Radial1 xpos 145 ypos -108 } Input { inputs 0 name Inputimg xpos -210 ypos -402 } Dot { name Dot1 note_font_size 41 xpos -176 ypos -312 } set N1a4f5220 [stack 0] Remove { name Remove1 xpos 31 ypos -322 } AdjBBox { numpixels {{width/4} {width/4}} name AdjBBox1 xpos 31 ypos -237 } Expression { expr0 x expr1 y name Expression1 xpos 31 ypos -213 } set N61e77b00 [stack 0] Dot { name Dot2 xpos -79 ypos -210 } Transform { scale 1.1 center {{input.width/2} {input.height/2}} black_outside false name Transform1 xpos -113 ypos -189 } push $N61e77b00 Merge2 { inputs 2 operation minus name Merge1 xpos 31 ypos -189 } Invert { channels rgba name Invert1 xpos 31 ypos -165 } Merge2 { inputs 2 operation multiply name Merge2 xpos 31 ypos -54 } Switch { inputs 2 which {{"\[exists parent.input3]"}} name Switch1 xpos 31 ypos 17 } Multiply { inputs 1+1 value 0 name Multiply1 label "\[value value]" xpos 31 ypos 91 } Multiply { value {{parent.overallAmount}} name Multiply2 label "\[value value]" xpos 31 ypos 192 } Dot { name Dot5 note_font_size 41 xpos 65 ypos 312 } push $N1a4f5220 Copy { inputs 2 from0 rgba.red to0 forward.u from1 rgba.green to1 forward.v name Copy1 xpos -210 ypos 296 } set N1c2c5f10 [stack 0] Shuffle { red black green black name Shuffle3 xpos -119 ypos 374 } VectorBlur { channels {-rgba.red -rgba.green rgba.blue rgba.alpha} uv forward scale -1 offset {{(-.5*abberation*.8)+parent.offset}} name VectorBlur3 xpos -119 ypos 412 } set N646404e0 [stack 0] push $N1c2c5f10 Shuffle { red black blue black name Shuffle2 xpos -210 ypos 375 } VectorBlur { channels {-rgba.red rgba.green -rgba.blue rgba.alpha} uv forward scale -1 offset {{(-.5*abberation*.6)+parent.offset}} name VectorBlur2 xpos -210 ypos 413 } set N1c2622c0 [stack 0] push $N1c2c5f10 Shuffle { green black blue black name Shuffle1 xpos -297 ypos 375 } VectorBlur { channels {rgba.red -rgba.green -rgba.blue rgba.alpha} uv forward scale -1 offset {{(-.5*abberation*.4)+parent.offset}} name VectorBlur1 xpos -297 ypos 413 } set N1ca3d980 [stack 0] push $N646404e0 Expression { expr3 a*0.114 name Expression4 xpos -119 ypos 466 } push $N1c2622c0 Expression { expr3 a*0.587 name Expression3 xpos -210 ypos 468 } push $N1ca3d980 Expression { expr3 a*0.299 name Expression2 xpos -297 ypos 467 } Merge2 { inputs 2 operation plus name Merge3 xpos -248 ypos 509 } Merge2 { inputs 2 operation plus name Merge4 xpos -182 ypos 553 } add_layer {apChroma apChroma.red apChroma.green apChroma.blue apChroma.alpha} Copy { inputs 2 from0 rgba.alpha to0 apChroma.red name Copy2 xpos -182 ypos 603 disable {{!parent.exportAPchroma}} } Copy { inputs 2 from0 rgba.alpha to0 apChroma.green name Copy3 xpos -182 ypos 656 disable {{!parent.exportAPchroma}} } Copy { inputs 2 from0 rgba.alpha to0 apChroma.blue name Copy4 xpos -182 ypos 710 disable {{!parent.exportAPchroma}} } push $N1c2c5f10 VectorBlur { uv forward scale -1.6 name VectorBlur4 xpos 7 ypos 409 } AddChannels { channels rgba name AddChannels2 xpos 7 ypos 447 } set N66be8190 [stack 0] push $N66be8190 push $N66be8190 push $N66be8190 Copy { inputs 2 from0 rgba.alpha to0 apChroma.red name Copy7 xpos 77 ypos 499 disable {{!parent.exportAPchroma}} } Copy { inputs 2 from0 rgba.alpha to0 apChroma.green name Copy8 xpos 77 ypos 553 disable {{!parent.exportAPchroma}} } Copy { inputs 2 from0 rgba.alpha to0 apChroma.blue name Copy9 xpos 77 ypos 606 disable {{!parent.exportAPchroma}} } Merge2 { inputs 2 operation copy output rgb also_merge apChroma mix {{parent.saturation}} name Merge6 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -182 ypos 773 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "from csnuke_tools.trixter.snippets import convertMergeToAll as convertMergeToAll;convertMergeToAll.convToAll()"} } Dot { name Dot29 note_font_size 41 xpos -148 ypos 857 } set Nb70ea430 [stack 0] Shuffle { in apChroma name Shuffle4 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat → \[value out2]] \}]" xpos -58 ypos 841 } Saturation { saturation 0 name Saturation1 xpos -58 ypos 893 } set N1c30b770 [stack 0] push $N1c30b770 push $Nb70ea430 Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy5 xpos -182 ypos 887 } Copy { inputs 2 from0 rgba.red to0 apChroma.alpha name Copy6 xpos -182 ypos 925 disable {{!parent.exportAPchroma}} } Crop { box {{curve i} {curve i} {input.width i} {input.height i}} name Crop1 xpos -182 ypos 1016 } push $N1a4f5220 Dot { name Dot3 note_font_size 41 xpos -424 ypos -312 } Dot { name Dot4 note_font_size 41 xpos -424 ypos 1084 } Merge2 { inputs 2+1 operation copy also_merge apChroma name Merge5 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -182 ypos 1080 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "from csnuke_tools.trixter.snippets import convertMergeToAll as convertMergeToAll;convertMergeToAll.convToAll()"} } Output { name Output1 xpos -182 ypos 1185 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Chromatik.gizmo ================================================ Group { name Chromatik help "Chromatic aberration node using a real spectral gradient." addUserKnob {20 User l Chromatik} addUserKnob {41 center l "Center Point" T RadialVectorGenerator1.center} addUserKnob {41 ratio l "Aspect Ratio" T RadialVectorGenerator1.ratio} addUserKnob {26 ""} addUserKnob {41 Multiplier l Size T Vector_Chromatic.Multiplier} addUserKnob {26 ""} addUserKnob {41 protect l "Protect Center" T RadialVectorGenerator1.protect} addUserKnob {41 gamma l "Falloff Hardness" T RadialVectorGenerator1.gamma} addUserKnob {41 rotate l Swirl T RadialVectorGenerator1.rotate} addUserKnob {26 ""} addUserKnob {41 saturation l Saturation T Vector_Chromatic.saturation} addUserKnob {41 offset l Offset T Vector_Chromatic.offset} addUserKnob {26 ""} addUserKnob {41 min l "Min Samples" T Vector_Chromatic.min} addUserKnob {41 max l "Max Samples" -STARTLINE T Vector_Chromatic.max} addUserKnob {26 ""} addUserKnob {26 spin_copyright l "" t "© SPINVFX\nChromatik\nVersion 1.1\n2018" +STARTLINE T "SPINVFX - Version 1.1 - 2018 - Github Page"} } Input { inputs 0 name Input xpos 829 ypos -285 } Dot { name Dot52 tile_color 0xcccccc00 xpos 863 ypos -181 } set Nbfccea0 [stack 0] Group { name RadialVectorGenerator1 xpos 985 ypos -184 disable {{"!\[exists parent.input]"}} addUserKnob {20 genTab l Generator} addUserKnob {12 center l "Center Point" t "Center of the Radial vectors"} center {960 540} addUserKnob {7 ratio l "Aspect Ratio" t "Distort the circle to a different aspect ratio." R 0.5 2} ratio 1 addUserKnob {26 ""} addUserKnob {7 protect l "Protect Center" t "Create an area around your center that won't be affected by vectors. (0,0 vectors)\nOther vectors will be spread around that center so that there isn't a sharp transition.\n\nA value of 1 or above would protect the whole image, not producting any vectors."} addUserKnob {7 gamma l Gamma t "Gamma the magnitude of the vectors, to create a sharper or smoother transition between the center and the outskirt areas." R 0.1 2} gamma 1 addUserKnob {26 ""} addUserKnob {7 rotate l Rotate t "Rotating the vectors can create either a zoom type of vectors (0, 180 rotation), a spin (90, 270 rotation) or a swirl for any value in between." R 0 360} addUserKnob {7 multiply l Multiply t "Multpilies the overall value/length of the vectors." R 0 10} multiply 1 } Input { inputs 0 name Input1 xpos -908 ypos 131 } Expression { expr0 x/width expr1 y/height expr2 0 name Expression1 xpos -908 ypos 182 } BlinkScript { recompileCount 28 ProgramGroup 1 KernelDescription "2 \"RadialVectors\" iterate pixelWise 022dfefcb578cac450e99b3e9eaa966ae848c25352f9d35bd31e5f1e18b9e87e 2 \"src\" Read Point \"dst\" Write Point 7 \"Aspect Ratio\" Float 1 AACAPw== \"Center\" Float 2 AACAPwAAgD8= \"Protect Center\" Float 1 AAAAAA== \"Rotate Vectors\" Float 1 AAAAAA== \"Gamma\" Float 1 AACAPw== \"Multiply\" Float 1 AACAPw== \"size\" Float 2 AAAAAAAAAAA= 7 \"ratio\" 1 1 \"center\" 2 1 \"protect\" 1 1 \"rotate\" 1 1 \"gamma\" 1 1 \"multiply\" 1 1 \"size\" 2 1 1 \"_imgDiag\" Float 1 1 AAAAAA==" kernelSource "kernel RadialVectors : ImageComputationKernel\n\{\n Image src; //the input image\n Image dst; //the output image\n\n param:\n float ratio; //This parameter is made available to the user.\n float2 center;\n float protect;\n float rotate;\n float gamma;\n float multiply;\n float2 size;\n\n local:\n\n float _imgDiag; //Image diagonal\n\n //In define(), parameters can be given labels and default values.\n void define() \{\n defineParam(ratio, \"Aspect Ratio\", 1.0f);\n defineParam(center, \"Center\", float2(1.0f,1.0f));\n defineParam(protect, \"Protect Center\", 0.0f);\n defineParam(rotate, \"Rotate Vectors\", 0.0f);\n defineParam(gamma, \"Gamma\", 1.0f);\n defineParam(multiply, \"Multiply\", 1.0f);\n \}\n\n //The init() function is run before any calls to kernel().\n void init() \{\n _imgDiag = length(size);\n \}\n\n //The kernel function is run at every pixel to produce the output.\n void process(int2 pos) \{\n //float2 posf = float2(pos.x, pos.y);\n float2 posf = float2(src(0)*size.x, src(1)*size.y);\n float2 v = posf-center;\n v = v/(_imgDiag/2.0f);\n \n // Edit vector magnitude: Blackpoint+clamp for protecting center\n if (protect < (1.0f))\{ //If we protect the whole image then we don't need to output any vectors\n // Edit aspect Ratio\n v = float2(v.x, v.y * ratio);\n // Find vector Magnitude so that can be edited \n float magv = length(v);\n\n magv = max((magv - protect) / (1-protect),0.0f);\n magv = pow(magv, 1/gamma);\n float2 normv;\n if (magv>0)\{\n normv = normalize(v);\n \}\n else \{\n normv = float2(1.0f, 0.0f);\n \}\n v = normv * magv;\n // Rotate Normals\n if (rotate != 0.0f)\{\n float r = rotate * 3.141592653589793f / 180.0f;\n v = float2( v.x * cos(r) - v.y * sin(r), v.x * sin(r) + v.y * cos(r));\n \}\n // Multiply Output\n //v = v * (_imgDiag/4) * multiply;\n v = v * multiply;\n dst() = float4(v.x, v.y, 0.0f, 0.0f);\n //dst() = float4(magv, magv, magv, 0.0f);\n \}\n else\{\n dst() = float4(0.0f);\n \}\n\n \}\n\};\n\n" rebuild "" "RadialVectors_Aspect Ratio" {{parent.ratio}} RadialVectors_Center {{parent.center} {parent.center}} "RadialVectors_Protect Center" {{parent.protect}} "RadialVectors_Rotate Vectors" {{parent.rotate}} RadialVectors_Gamma {{parent.gamma}} RadialVectors_Multiply {{parent.multiply}} RadialVectors_size {{width} {height}} rebuild_finalise "" name BlinkScript8 xpos -908 ypos 271 } Output { name Output1 xpos -908 ypos 340 } StickyNote { inputs 0 name StickyNote1 label "We base the calculation on a modified STMAP instead of actual x/y because blinkscript doesn't handle proxy res very well" xpos -797 ypos 180 } end_group Dot { name Dot1 tile_color 0xcccccc00 xpos 1019 ypos -41 } push $Nbfccea0 Group { inputs 2 name Vector_Chromatic xpos 829 ypos -44 disable {{"!\[exists parent.input]"}} addUserKnob {20 Chromatik} addUserKnob {26 title l "Generate Gradient"} addUserKnob {41 lut l "" -STARTLINE T ColorLookup1.lut} addUserKnob {6 clampg l "Clamp Gradient" +STARTLINE} clampg true addUserKnob {7 saturation l Saturation R 0 2} saturation 1 addUserKnob {26 ""} addUserKnob {7 Multiplier R 0 250} Multiplier 50 addUserKnob {7 offset l Offset t "Negate Vectors (-1)\nCenter Vectors (0)\nRegular Vectors (1)" R -1 1} addUserKnob {26 ""} addUserKnob {3 min l "Min Samples" t "How many times the operation will be run.\nHigher Values = Smoother result = Slower render"} min 5 addUserKnob {3 max l "Max Samples" t "How many times the operation will be run.\nHigher Values = Smoother result = Slower render" -STARTLINE} max 150 addUserKnob {6 normalize l Normalize t "Conserves original color better" +STARTLINE} normalize true addUserKnob {6 XYZ_space t "Process in XYZ space." -STARTLINE} addUserKnob {6 bbox l "BBox Union" t "Union the BBox of the image and the vectormap rather than using the image's bbox" -STARTLINE} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x71c67100 label "Gradient Generator" note_font_size 42 xpos 368 ypos -422 bdheight 293 } Input { inputs 0 name Img xpos 206 ypos -530 } Dot { name Dot3 xpos 240 ypos -448 } set Nc02b6d0 [stack 0] Input { inputs 0 name Vector_Map xpos 587 ypos -533 number 1 } CopyBBox { inputs 2 name CopyBBox1 xpos 587 ypos -452 disable {{parent.bbox}} } Dot { name Dot1 tile_color 0x9e3c6300 xpos 621 ypos 18 } Reformat { inputs 0 type "to box" box_width 100 box_height 4 box_fixed true name Reformat2 xpos 378 ypos -342 } Ramp { p0 {0 0} p1 {99 0} name Ramp1 xpos 378 ypos -316 } ColorLookup { lut {master {} red {curve C x-0.05884177983 -0.004536509514 x0.01015070826 0 s0.1400000006 x0.1017729789 0.1076634228 x0.1737238914 0 x0.4376193285 0 x0.6908689141 0.9834897519 S x0.7745882273 0.8638155506 C x0.871829927 0.2472041845 S x1.006029606 0 C x1.015911102 0} green {curve x0.0120717017 0 x0.1647586226 0 x0.2049030662 0 x0.5025014281 0.9204615951 x0.6684435606 0.3995269537 x0.7975517511 0 x0.905554533 0 x1.027772069 0 x1.02872479 0} blue {curve x-0.06189316511 0 s0 x0.01178315841 0 x0.06641255319 0.1264923215 C x0.1299110055 0.6372379661 x0.3119857609 0.7685220838 S x0.360124141 0.3393670321 x0.5631426573 0 C x0.7848843336 0 S x0.9272136688 0 x1.066449285 0 x1.069784403 0} alpha {}} name ColorLookup1 xpos 378 ypos -290 } Clamp { minimum_enable {{parent.clampg}} maximum_enable false name Clamp4 xpos 378 ypos -264 } Saturation { saturation {{parent.saturation}} name Saturation1 xpos 378 ypos -226 } Expression { expr3 clamp(.2126*r+.7152*g+0.0722*b) name Luma_to_Alpha xpos 378 ypos -159 } Colorspace { colorspace_out CIE-XYZ name Colorspace2 label "input \[value colorspace_in]\noutput \[value colorspace_out]" xpos 378 ypos -91 disable {{1-parent.XYZ_space}} } push $Nc02b6d0 Colorspace { colorspace_out CIE-XYZ name Colorspace1 label "input \[value colorspace_in]\noutput \[value colorspace_out]" xpos 206 ypos -90 disable {{1-parent.XYZ_space}} } Dot { name Dot2 xpos 240 ypos 18 } BlinkScript { inputs 3 recompileCount 8 ProgramGroup 1 KernelDescription "2 \"Chromatic\" iterate pixelWise 6f453a157371752868a37327fbdb66c1856663f8af8ccd497d5f5f6edc9785cd 4 \"src\" Read Random \"gradient\" Read Random \"vector\" Read Point \"dst\" Write Point 6 \"Multiply\" Float 1 AACAPw== \"Min Samples\" Int 1 BAAAAA== \"Max Samples\" Int 1 UAAAAA== \"Offset\" Float 1 AAAAAA== \"Normalize\" Bool 1 AQ== \"proxy\" Float 1 AAAAAA== 6 \"multiply\" 1 1 \"min_samples\" 1 1 \"max_samples\" 1 1 \"offset\" 1 1 \"normalize\" 1 1 \"proxy\" 1 1 0" kernelSource "kernel Chromatic : ImageComputationKernel\n\{\n Image src; //the input image\n Image gradient; //color gradient\n Image vector; //VectorMap\n Image dst; //the output image\n\n param:\n float multiply; //This parameter is made available to the user.\n int min_samples;\n int max_samples;\n float offset;\n bool normalize;\n float proxy;\n\n local:\n\n\n //In define(), parameters can be given labels and default values.\n void define() \{\n defineParam(multiply, \"Multiply\", 1.0f);\n defineParam(min_samples, \"Min Samples\", 4); \n defineParam(max_samples, \"Max Samples\", 80); \n defineParam(offset, \"Offset\", 0.0f);\n defineParam(normalize, \"Normalize\", true);\n \}\n\n //The kernel function is run at every pixel to produce the output.\n void process(int2 pos) \{\n SampleType(src) valueSum(0);\n SampleType(src) curVal(0);\n float2 fpos = float2(pos.x,pos.y); \n float nSample;\n int l;\n\n\n //Read Vector value\n float2 v = float2(vector(0), vector(1));\n // Take into account the proxy scale\n v = v*proxy;\n //Vector Length int\n l = int(floor(length(v)*fabs(multiply)+0.5));\n \n\n //Define Adaptive Sampling\n int samples;\n if (l < min_samples)\{samples = min_samples;\}\n else if (l > max_samples)\{samples = max_samples;\}\n else \{samples = l;\}\n\n\n //Init value for normalization \n float4 normSum = float4(0.0f) ;\n\n // Loop through Samples\n for( int a = 0; a < samples; a ++ )\n \{\n // Define normalised index of this sample (0-1 range)\n nSample = float(a)/samples;\n\n // Define the vector value for this pass (depending on offset)\n float2 Ofs = ((v*nSample)-(v*(offset/2.0f+0.5f)))*multiply+fpos;\n\n curVal = bilinear(src,Ofs.x,Ofs.y); //This function does a bilinear sampling of the scr image\n int gIndex = int(99.0f*proxy*nSample+0.5f);\n float4 gradVal = gradient(gIndex,0);\n valueSum += curVal*gradVal;\n normSum += float4(gradVal);\n \}\n\n if (normalize)\{\n dst() = (valueSum/float(samples))/(normSum/float(samples));\n \}\n else \{\n dst() = (valueSum/float(samples));\n \}\n \}\n\};\n\n" rebuild "" Chromatic_Multiply {{parent.Multiplier}} "Chromatic_Min Samples" {{parent.min}} "Chromatic_Max Samples" {{parent.max}} Chromatic_Offset {{parent.offset}} Chromatic_Normalize {{parent.normalize x50 0}} Chromatic_proxy {{"proxy ? (proxy_type ? proxy_scale : \[lindex \[value proxy_format] 0] / \[lindex \[value format] 0]) : 1"}} rebuild_finalise "" name BlinkScript10 xpos 378 ypos 8 } Colorspace { colorspace_in CIE-XYZ name Colorspace3 label "input \[value colorspace_in]\noutput \[value colorspace_out]" xpos 378 ypos 116 disable {{1-parent.XYZ_space}} } Clamp { maximum_enable false name Clamp1 xpos 378 ypos 204 } Output { name Output1 xpos 378 ypos 272 } end_group Output { name Output1 xpos 829 ypos 56 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ColorCopy.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input push 0 Group { inputs 2 name ColorCopy knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"output\":\n method = n.knob('output').value()\n if method == 'HSV' or method == 'HSL':\n n.knob('colorMix').setVisible(False)\n n.knob('lumaMix').setVisible(True)\n n.knob('hue').setVisible(True)\n n.knob('sat').setVisible(True)\n \n else:\n n.knob('colorMix').setVisible(True)\n n.knob('lumaMix').setVisible(True)\n n.knob('hue').setVisible(False)\n n.knob('sat').setVisible(False)\n \n if method == 'HSV':\n n.knob('lumaMix').setLabel('Value Mix')\n \n else:\n n.knob('lumaMix').setLabel('Luminance Mix')\n\n " tile_color 0x4c7bd1ff note_font_color 0xffffffff selected true addUserKnob {20 ColorCopy} addUserKnob {41 channels T Merge5.also_merge} addUserKnob {4 output l method M {HSV HSL "Rec 709" "Ccir 601" Average Maximum ""}} addUserKnob {6 opInLog l "Operations in Log" -STARTLINE} addUserKnob {7 colorMix l "Color Mix" +HIDDEN} colorMix 1 addUserKnob {7 hue l "Hue Mix"} hue 1 addUserKnob {7 sat l "Saturation Mix"} sat 1 addUserKnob {7 lumaMix l "Value Mix"} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge5.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge5.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge5.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge5.fringe} addUserKnob {41 mix T Merge5.mix} } Input { inputs 0 name Inputmask xpos -12 ypos 1290 number 2 } Input { inputs 0 name InputA xpos 327 ypos -107 number 1 } Dot { name Dot2 label A note_font_size 41 xpos 361 ypos -41 } Clamp { maximum_enable false name Clamp2 xpos 327 ypos 145 disable {{!parent.opInLog}} } Log2Lin { channels all operation lin2log name Log2Lin1 xpos 327 ypos 208 disable {{!parent.opInLog}} } Dot { name Dot12 note_font_size 41 xpos 361 ypos 325 } set N42f8f030 [stack 0] Dot { name Dot13 note_font_size 41 xpos 1439 ypos 325 } Dot { name Dot25 note_font_size 41 xpos 1439 ypos 376 } set N42fa0000 [stack 0] Colorspace { channels all colorspace_out HSL name Colorspace5 xpos 1525 ypos 506 } push $N42fa0000 Colorspace { channels all colorspace_out HSV name Colorspace2 xpos 1405 ypos 503 } Switch { inputs 2 which {{"output == 1 ? 1 : 0"}} name Switch5 xpos 1405 ypos 587 } Dot { name Dot16 note_font_size 41 xpos 1439 ypos 749 } set N42fb3f10 [stack 0] Dot { name Dot17 note_font_size 41 xpos 1439 ypos 821 } set N42f3de80 [stack 0] Dot { name Dot18 note_font_size 41 xpos 1439 ypos 879 } Multiply { value {0 0 1 0} name Multiply3 label "\[value value]" xpos 1274 ypos 867 } Input { inputs 0 name InputB xpos -174 ypos -93 } Dot { name Dot1 label B note_font_size 41 xpos -140 ypos -32 } Dot { name Dot11 note_font_size 41 xpos -140 ypos 36 } set N43400220 [stack 0] Clamp { maximum_enable false name Clamp1 xpos -174 ypos 157 disable {{!parent.opInLog}} } Log2Lin { channels all operation lin2log name Log2Lin2 selected true xpos -174 ypos 213 disable {{!parent.opInLog}} } Dot { name Dot14 note_font_size 41 xpos -140 ypos 394 } set N4340edf0 [stack 0] Dot { name Dot15 note_font_size 41 xpos 778 ypos 394 } set N43412a20 [stack 0] Colorspace { channels all colorspace_out HSL name Colorspace4 xpos 862 ypos 504 } push $N43412a20 Colorspace { channels all colorspace_out HSV name Colorspace1 xpos 744 ypos 508 } Switch { inputs 2 which {{"output == 1 ? 1 : 0"}} name Switch2 xpos 744 ypos 564 } Dot { name Dot20 note_font_size 41 xpos 778 ypos 621 } set N42fca4d0 [stack 0] Dot { name Dot21 note_font_size 41 xpos 942 ypos 621 } set N42fc8ee0 [stack 0] Dot { name Dot22 note_font_size 41 xpos 1052 ypos 621 } set N42f03800 [stack 0] Dot { name Dot23 note_font_size 41 xpos 1162 ypos 621 } Multiply { value {0 0 1 0} name Multiply7 label "\[value value]" xpos 1128 ypos 676 } Merge2 { inputs 2 operation copy Achannels none Bchannels none output none also_merge all mix {{parent.lumaMix}} name Merge10 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 1128 ypos 867 } push $N42f3de80 Multiply { value {0 1 0 0} name Multiply2 label "\[value value]" xpos 1279 ypos 809 } push $N42f03800 Multiply { value {0 1 0 0} name Multiply6 label "\[value value]" xpos 1018 ypos 676 } Merge2 { inputs 2 operation copy Achannels none Bchannels none output none also_merge all mix {{parent.sat}} name Merge8 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 1018 ypos 814 } push $N42fb3f10 Multiply { value {1 0 0 0} name Multiply1 label "\[value value]" xpos 1276 ypos 737 } push $N42fc8ee0 Multiply { value {1 0 0 0} name Multiply4 label "\[value value]" xpos 908 ypos 676 } Merge2 { inputs 2 operation copy Achannels none Bchannels none output none also_merge all mix {{parent.hue}} name Merge6 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 908 ypos 742 } push $N42fca4d0 Multiply { value {0 0 0 1} name Multiply5 label "\[value value]" xpos 744 ypos 672 } Merge2 { inputs 2 operation plus Achannels none Bchannels none output none also_merge all name Merge7 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 744 ypos 742 } Merge2 { inputs 2 operation plus Achannels none Bchannels none output none also_merge all name Merge9 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 744 ypos 814 } Merge2 { inputs 2 operation plus Achannels none Bchannels none output none also_merge all name Merge11 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 744 ypos 872 } Dot { name Dot26 note_font_size 41 xpos 778 ypos 937 } set N43460e20 [stack 0] Colorspace { channels all colorspace_in HSL name Colorspace6 xpos 857 ypos 985 } push $N43460e20 Colorspace { channels all colorspace_in HSV name Colorspace3 xpos 744 ypos 983 } Switch { inputs 2 which {{"output == 1 ? 1 : 0"}} name Switch3 xpos 744 ypos 1040 } Dot { name Dot19 note_font_size 41 xpos 778 ypos 1088 } push $N42f8f030 Dot { name Dot3 note_font_size 41 xpos 361 ypos 545 } set N43492d80 [stack 0] Toe2 { channels all lift 0.0001 name Toe2 xpos 327 ypos 599 } push $N43492d80 Saturation { channels all saturation 0 mode {{"output == 0 || output == 1 ? 0 : parent.output - 2"}} name Saturation3 xpos 485 ypos 538 } Dot { name Dot24 note_font_size 41 xpos 519 ypos 753 } set N434aae90 [stack 0] Dot { name Dot8 note_font_size 41 xpos 519 ypos 834 } Merge2 { inputs 2 operation divide Achannels none Bchannels none output none also_merge all name Merge4 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 327 ypos 827 } Dot { name Dot7 note_font_size 41 xpos 361 ypos 885 } push $N4340edf0 Dot { name Dot4 note_font_size 41 xpos -140 ypos 542 } set N434c40a0 [stack 0] Dot { name Dot6 note_font_size 41 xpos 29 ypos 542 } Toe2 { channels all lift 0.0001 name Toe1 xpos -5 ypos 596 } push $N434c40a0 Saturation { channels all saturation 0 mode {{"output == 0 || output == 1 ? 0 : parent.output - 2" x1 0}} name Saturation2 xpos -174 ypos 666 } set N434d5c10 [stack 0] Merge2 { inputs 2 operation divide Achannels none Bchannels none output none also_merge all name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -5 ypos 666 } Dissolve { inputs 2 which {{parent.colorMix}} name Dissolve1 xpos -5 ypos 878 } Dot { name Dot5 note_font_size 41 xpos 29 ypos 957 } push $N434aae90 push $N434d5c10 Dissolve { inputs 2 which {{parent.lumaMix}} name Dissolve2 xpos -174 ypos 750 } Merge2 { inputs 2 operation multiply Achannels none Bchannels none output none also_merge all name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -174 ypos 950 } Switch { inputs 2 which {{"output == 0 || output == 1 ? 1 : 0"}} name Switch1 xpos -174 ypos 1085 } Log2Lin { channels all name Log2Lin4 xpos -174 ypos 1150 disable {{!parent.opInLog}} } push $N43400220 Dot { name Dot10 note_font_size 41 xpos -380 ypos 36 } Dot { name Dot9 note_font_size 41 xpos -380 ypos 1293 } Merge2 { inputs 2+1 operation copy bbox B Achannels none Bchannels none output none also_merge rgb maskChannelInput -rgba.alpha name Merge5 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -174 ypos 1286 } Output { name Output1 xpos -174 ypos 1386 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ColorSampler.gizmo ================================================ Group { name apColorSampler help "ColorSampler BETA v0.7 by Adrian Pueyo\n\nTool to calculate the average color of a target input (or the src image if there's no target input), weighted through the area input (or the whole frame if there's no area input). It can also calculate the maximum or minimum value over the area. Additionally, you can directly remove color flickering to an image, or apply it from a target.\n\nYou can think of ColorSampler as a live version of CurveTool with some additional features using the power of Blinkscript, where instead of being limited to a rectangle you can plug a roto to use for the sampling area... or a key... :)\n\nadrianpueyo.com, 2016-2018" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nom = n\[\"out_mode\"].getValue()\nn\[\"max_min_math\"].setVisible(om==1 or om==2)\nn\[\"calculate_alpha\"].setVisible(om!=1 and om!=2)\nn\[\"reference_frame\"].setEnabled(om>2)\nn\[\"set_to_current\"].setEnabled(om>2)\n\nif k.name() == \"out_mode\":\n kv = int(k.getValue())\n kb = n.knob(\"use_baked\")\n if kv == 1:\n ctname = \"CurveToolMax\"\n elif kv == 2:\n ctname = \"CurveToolMin\"\n else:\n ctname = \"CurveToolAvg\"\n if not nuke.toNode(ctname).knob(\"intensitydata\").isAnimated():\n kb.setValue(False)\n kb.setEnabled(False)\n else:\n kb.setEnabled(True)" tile_color 0x8b8b8bff selected true addUserKnob {20 ColorSampler} addUserKnob {4 out_mode l mode t "Note 1: \"target\" input will be sampled if there's something plugged. Otherwise, src will be sampled.\n\nNote 2: If there is an area input, the sampling will be limited and weighted to that area. If there is nothing plugged in, the whole frame will be sampled.\n\nNote 3: For max and min calculations, any value above 0 on the area input will be sampled." M {Average Maximum Minimum "Deflicker src (mult)" "Flicker src (mult)" "Deflicker src (add)" "Flicker src (add)"}} addUserKnob {6 calculate_alpha l "calculate alpha" t "Also apply the tool to the alpha channel. If disabled outputs the original alpha." -STARTLINE} addUserKnob {4 max_min_math l math +HIDDEN M {"Rec 709" "Ccir 601" Average Max/Min Per-Channel "" "" "" ""}} addUserKnob {3 reference_frame l "ref frame" t "Please specify the frame that will have no effect on the color match or stabilization." +DISABLED} reference_frame 1001 addUserKnob {22 set_to_current l "set to current frame" -STARTLINE +DISABLED T "nuke.thisNode()\[\"reference_frame\"].setValue(nuke.frame())"} addUserKnob {26 space l "" +STARTLINE T " "} addUserKnob {26 bake_title l "Bake "} addUserKnob {22 bake l Bake T "n = nuke.thisNode()\nnmode = int(n.knob(\"out_mode\").getValue())\ntry:\n if nmode == 1:\n nuke.toNode(\"CurveToolMax\").knob(\"go\").execute()\n elif nmode == 2:\n nuke.toNode(\"CurveToolMin\").knob(\"go\").execute()\n else:\n nuke.toNode(\"CurveToolAvg\").knob(\"go\").execute()\n n.knob(\"use_baked\").setValue(1)\n n.knob(\"use_baked\").setEnabled(True)\nexcept:\n nuke.message(\"Error sampling.\")" +STARTLINE} addUserKnob {22 resetBakes l " Reset Bakes " -STARTLINE T "n = nuke.thisNode()\nfor ctn in \[\"CurveToolAvg\",\"CurveToolMin\",\"CurveToolMax\"]:\n ck = nuke.toNode(ctn).knob(\"intensitydata\")\n ck.clearAnimated()\n ck.setValue(0)\nn.knob(\"use_baked\").setValue(0)\nn.knob(\"use_baked\").setEnabled(False)"} addUserKnob {26 h_sep l "" -STARTLINE T " "} addUserKnob {6 use_baked l "use baked" -STARTLINE} addUserKnob {26 export_title l "Export "} addUserKnob {4 exportOptions l " " M {Average Maximum Minimum "Deflicker src (mult) (Current frame)" "Deflicker src (mult) (Ref frame)" "Flicker src (mult) (Current frame)" "Flicker src (mult) (Ref frame)" "Deflicker src (add) (Current frame)" "Deflicker src (add) (Ref frame)" "Flicker src (add) (Current frame)" "Flicker src (add) (Ref frame)"}} addUserKnob {6 linked -STARTLINE} addUserKnob {22 createGrade l "create grade" T "n = nuke.thisNode()\nnm = n.name()\no = int(n.knob(\"exportOptions\").getValue())\nl = n.knob(\"linked\").value()\nif o in \[3,5,7,9]:\n t = nuke.frame()\nelse:\n t = int(n.knob(\"reference_frame\").value())\n\n# Check if baked\nif o == 1:\n ctname = \"CurveToolMax\"\n ctk = \"go_max\"\nelif o == 2:\n ctname = \"CurveToolMin\"\n ctk = \"go_min\"\nelse:\n ctname = \"CurveToolAvg\"\n ctk = \"go_avg\"\nabortExport = False\nif not nuke.toNode(ctname).knob(\"intensitydata\").isAnimated():\n if nuke.ask(\"Looks like the you need to analyze it first. Proceed?\"):\n nuke.knob(ctk).execute()\n else:\n if not nuke.ask(\"But still you want to export it???\\nWon't have any animation.\"):\n abortExport = True\n\nif not abortExport:\n multVal = \[0,0,0,0]\n offsetVal = \[0,0,0,0]\n multExp = \"\"\n offsetExp = \"\"\n reverse = 0\n label = \"\"\n \n pasteOn = \"\"\n copied = \"\"\n \n if o==0: # Average\n multVal = 0\n if l:\n offsetExp = nm + \".CurveToolAvg.intensitydata\"\n else:\n pasteOn = \"add\"\n copied = nuke.toNode(\"CurveToolAvg\")\[\"intensitydata\"].toScript()\n offsetExp = \"curve\"\n label = \"Average\"\n elif o==1: # Max\n multVal = 0\n if l:\n offsetExp = nm + \".CurveToolMax.intensitydata\"\n else:\n pasteOn = \"add\"\n copied = nuke.toNode(\"CurveToolMax\")\[\"intensitydata\"].toScript()\n offsetExp = \"curve\"\n label = \"Maximum\"\n elif o==2: # Min\n multVal = 0\n if l:\n offsetExp = nm + \".CurveToolMin.intensitydata\"\n else:\n pasteOn = \"add\"\n copied = nuke.toNode(\"CurveToolMin\")\[\"intensitydata\"].toScript()\n offsetExp = \"curve\"\n label = \"Minimum\"\n elif o in \[3,4,5,6]: # Mult de/flicker\n offsetVal = 0\n if l:\n multExp = nm + \".CurveToolAvg.intensitydata(\" + str(t) + \")/\"+nm+\".CurveToolAvg.intensitydata\"\n else:\n pasteOn = \"multiply\"\n copied = nuke.toNode(\"CurveToolAvg\")\[\"intensitydata\"].toScript()\n if not l or o in \[3,5,7,9]:\n multExp = \"curve(\" + str(t) + \")/curve\"\n else:\n multExp = \"curve(\" + nm + \".reference_frame)/curve\"\n if o in \[3,4]:\n label = \"Deflicker \"\n else:\n label = \"Flicker \"\n if not l or o in \[3,5,7,9]:\n label += \"(mult)(\"+str(t)+\")\"\n else:\n label += \"(mult)(\[value \"+ nm + \".reference_frame])\"\n elif o in \[7,8,9,10]: # Add de/flicker\n multVal = 1\n if l:\n offsetExp = nm + \".CurveToolAvg.intensitydata(\" + str(t) + \")/\"+nm+\".CurveToolAvg.intensitydata\"\n else:\n pasteOn = \"multiply\"\n copied = nuke.toNode(\"CurveToolAvg\")\[\"intensitydata\"].toScript()\n if not l or o in \[3,5,7,9]:\n offsetExp = \"curve(\" + str(t) + \")/curve\"\n else:\n offsetExp = \"curve(\" + nm + \".reference_frame)/curve\"\n if o in \[7,8]:\n label = \"Deflicker \"\n else:\n label = \"Flicker \"\n if not l or o in \[3,5,7,9]:\n label += \"(add)(\"+str(t)+\")\"\n else:\n label += \"(add)(\[value \"+ nm + \".reference_frame])\"\n \n if o in \[5,6,9,10]:\n reverse = 1\n \n with nuke.Root():\n gn = nuke.nodes.Grade()\n gn.setXYpos(n.xpos()+150,n.ypos()+50)\n gn\[\"multiply\"].setValue(multVal)\n gn\[\"add\"].setValue(offsetVal)\n if multExp != \"\":\n if not l:\n gn\[\"multiply\"].fromScript(copied)\n gn\[\"multiply\"].setExpression(multExp)\n \n if offsetExp != \"\":\n if not l:\n gn\[\"add\"].fromScript(copied)\n gn\[\"add\"].setExpression(offsetExp)\n gn\[\"reverse\"].setValue(reverse)\n gn\[\"label\"].setValue(label)\n gn\[\"channels\"].setValue(\"rgba\")\n for i in \[\"black_clamp\",\"white_clamp\"]:\n gn\[i].setValue(False)\n om = n.knob(\"exportOptions\")\n omv = int(om.getValue())\n if o==omv==1 or o==omv==2 or (o not in \[1,2] and omv not in \[1,2]):\n n.knob(\"use_baked\").setEnabled(True)\n " +STARTLINE} addUserKnob {22 createConstant l "create constant" -STARTLINE T "n = nuke.thisNode()\nnm = n.name()\no = int(n.knob(\"exportOptions\").getValue())\nl = n.knob(\"linked\").value()\nif o in \[3,5,7,9]:\n t = nuke.frame()\nelse:\n t = int(n.knob(\"reference_frame\").value())\n\n# Check if baked\nif o == 1:\n ctname = \"CurveToolMax\"\n ctk = \"go_max\"\nelif o == 2:\n ctname = \"CurveToolMin\"\n ctk = \"go_min\"\nelse:\n ctname = \"CurveToolAvg\"\n ctk = \"go_avg\"\nabortExport = False\nif not nuke.toNode(ctname).knob(\"intensitydata\").isAnimated():\n if nuke.ask(\"Looks like the you need to analyze it first. Proceed?\"):\n nuke.knob(ctk).execute()\n else:\n if not nuke.ask(\"But still you want to export it???\\nWon't have any animation.\"):\n abortExport = True\n\nif not abortExport:\n multVal = \[0,0,0,0]\n offsetVal = \[0,0,0,0]\n multExp = \"\"\n offsetExp = \"\"\n reverse = 0\n label = \"\"\n \n pasteOn = \"\"\n copied = \"\"\n \n if o==0: # Average\n multVal = 0\n if l:\n offsetExp = nm + \".CurveToolAvg.intensitydata\"\n else:\n pasteOn = \"add\"\n copied = nuke.toNode(\"CurveToolAvg\")\[\"intensitydata\"].toScript()\n offsetExp = \"curve\"\n label = \"Average\"\n elif o==1: # Max\n multVal = 0\n if l:\n offsetExp = nm + \".CurveToolMax.intensitydata\"\n else:\n pasteOn = \"add\"\n copied = nuke.toNode(\"CurveToolMax\")\[\"intensitydata\"].toScript()\n offsetExp = \"curve\"\n label = \"Maximum\"\n elif o==2: # Min\n multVal = 0\n if l:\n offsetExp = nm + \".CurveToolMin.intensitydata\"\n else:\n pasteOn = \"add\"\n copied = nuke.toNode(\"CurveToolMin\")\[\"intensitydata\"].toScript()\n offsetExp = \"curve\"\n label = \"Minimum\"\n elif o in \[3,4,5,6]: # Mult de/flicker\n offsetVal = 0\n if l:\n multExp = nm + \".CurveToolAvg.intensitydata(\" + str(t) + \")/\"+nm+\".CurveToolAvg.intensitydata\"\n else:\n pasteOn = \"multiply\"\n copied = nuke.toNode(\"CurveToolAvg\")\[\"intensitydata\"].toScript()\n if not l or o in \[3,5,7,9]:\n multExp = \"curve(\" + str(t) + \")/curve\"\n else:\n multExp = \"curve(\" + nm + \".reference_frame)/curve\"\n if o in \[3,4]:\n label = \"Deflicker \"\n else:\n label = \"Flicker \"\n if not l or o in \[3,5,7,9]:\n label += \"(mult)(\"+str(t)+\")\"\n else:\n label += \"(mult)(\[value \"+ nm + \".reference_frame])\"\n elif o in \[7,8,9,10]: # Add de/flicker\n multVal = 1\n if l:\n offsetExp = nm + \".CurveToolAvg.intensitydata(\" + str(t) + \")/\"+nm+\".CurveToolAvg.intensitydata\"\n else:\n pasteOn = \"multiply\"\n copied = nuke.toNode(\"CurveToolAvg\")\[\"intensitydata\"].toScript()\n if not l or o in \[3,5,7,9]:\n offsetExp = \"curve(\" + str(t) + \")/curve\"\n else:\n offsetExp = \"curve(\" + nm + \".reference_frame)/curve\"\n if o in \[7,8]:\n label = \"Deflicker \"\n else:\n label = \"Flicker \"\n if not l or o in \[3,5,7,9]:\n label += \"(add)(\"+str(t)+\")\"\n else:\n label += \"(add)(\[value \"+ nm + \".reference_frame])\"\n \n if o in \[5,6,9,10]:\n reverse = 1\n \n with nuke.Root():\n gn = nuke.nodes.Constant()\n gn.setXYpos(n.xpos()+150,n.ypos()+50)\n gn\[\"color\"].setValue(offsetVal)\n\n if offsetExp != \"\":\n if not l:\n gn\[\"color\"].fromScript(copied)\n gn\[\"color\"].setExpression(offsetExp)\n #gn\[\"reverse\"].setValue(reverse)\n gn\[\"label\"].setValue(label)\n gn\[\"channels\"].setValue(\"rgba\")\n gn\[\"color\"].clearAnimated(3)\n gn\[\"color\"].setValue(1,3)\n om = n.knob(\"exportOptions\")\n omv = int(om.getValue())\n if o==omv==1 or o==omv==2 or (o not in \[1,2] and omv not in \[1,2]):\n n.knob(\"use_baked\").setEnabled(True)\n "} addUserKnob {26 ""} addUserKnob {41 areaChannelMask l "area " -STARTLINE T ExpressionMask.maskChannelMask} addUserKnob {41 inject_area l inject -STARTLINE T ExpressionMask.inject} addUserKnob {41 invert_area l invert -STARTLINE T ExpressionMask.invert_mask} addUserKnob {41 area_fringe l fringe -STARTLINE T ExpressionMask.fringe} addUserKnob {41 maskChannelMask l mask T Merge.maskChannelMask} addUserKnob {41 invert_mask l invert -STARTLINE T Merge.invert_mask} addUserKnob {41 inject -STARTLINE T Merge.inject} addUserKnob {41 fringe -STARTLINE T Merge.fringe} addUserKnob {26 ""} addUserKnob {41 mix T Merge.mix} addUserKnob {26 version_author l " " t "ColorSampler BETA v0.7\n2016-2019" T "
ColorSampler BETA v0.7 - adrianpueyo.com, 2016-2019
"} } Input { inputs 0 name Inputmask xpos -230 ypos 705 number 3 } Input { inputs 0 name Inputarea xpos 656 ypos 70 number 1 } Shuffle { name ShuffleAreaRGBA xpos 656 ypos 94 } set Na14b6b00 [stack 0] Input { inputs 0 name Inputsrc xpos -103 ypos 2 } set Na14b6400 [stack 0] Dot { name Dot6 xpos -69 ypos 28 } set Na14b5d00 [stack 0] Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha mix 0 name CopyAreaUI xpos -103 ypos 91 } Dot { name Dot2 xpos -69 ypos 173 } set Na14b4f00 [stack 0] Dot { name Dot7 xpos 178 ypos 173 } set Na14b4800 [stack 0] Dot { name Dot9 xpos 732 ypos 173 } Grade { multiply 0 add {{CurveToolAvg.intensitydata} {CurveToolAvg.intensitydata} {CurveToolAvg.intensitydata} {CurveToolAvg.intensitydata}} black_clamp false name GradeBakedAvg xpos 698 ypos 462 disable {{parent.out_mode>=3}} } Grade { multiply {{(parent.out_mode==3||parent.out_mode==4)?CurveToolAvg.intensitydata(parent.reference_frame)/CurveToolAvg.intensitydata:1} {(parent.out_mode==3||parent.out_mode==4)?CurveToolAvg.intensitydata(parent.reference_frame)/CurveToolAvg.intensitydata:1} {(parent.out_mode==3||parent.out_mode==4)?CurveToolAvg.intensitydata(parent.reference_frame)/CurveToolAvg.intensitydata:1} {(parent.out_mode==3||parent.out_mode==4)?CurveToolAvg.intensitydata(parent.reference_frame)/CurveToolAvg.intensitydata:1}} add {{(parent.out_mode==5||parent.out_mode==6)?CurveToolAvg.intensitydata(parent.reference_frame)-CurveToolAvg.intensitydata:0} {(parent.out_mode==5||parent.out_mode==6)?CurveToolAvg.intensitydata(parent.reference_frame)-CurveToolAvg.intensitydata:0} {(parent.out_mode==5||parent.out_mode==6)?CurveToolAvg.intensitydata(parent.reference_frame)-CurveToolAvg.intensitydata:0} {(parent.out_mode==5||parent.out_mode==6)?CurveToolAvg.intensitydata(parent.reference_frame)-CurveToolAvg.intensitydata:0}} reverse {{parent.out_mode==4||parent.out_mode==6}} black_clamp false name GradeBakedMult xpos 698 ypos 488 disable {{!(parent.out_mode>=3)}} } Grade { multiply 0 add {{CurveToolMax.intensitydata} {CurveToolMax.intensitydata} {CurveToolMax.intensitydata} {CurveToolMax.intensitydata}} black_clamp false name GradeBakedMax xpos 698 ypos 514 disable {{parent.out_mode!=1}} } Grade { multiply 0 add {{CurveToolMin.intensitydata} {CurveToolMin.intensitydata} {CurveToolMin.intensitydata} {CurveToolMin.intensitydata}} black_clamp false name GradeBakedMin xpos 698 ypos 540 disable {{parent.out_mode!=2}} } Dot { name Dot11 label " Baked" note_font "Bitstream Vera Sans Bold" xpos 732 ypos 622 } push $Na14b6b00 Dot { name Dot1 xpos 690 ypos 121 } Input { inputs 0 name Inputtarget xpos 294 ypos -21 number 2 } push $Na14b5d00 Switch { inputs 2 which {{"\[exists parent.input2]"}} name SwitchTarget xpos 294 ypos 23 } set Na79d4100 [stack 0] Remove { name RemoveAll xpos 504 ypos 17 } Expression { inputs 1+1 channel0 rgba expr0 1 name ExpressionMask xpos 504 ypos 118 disable {{"!\[exists parent.input1]"}} } Shuffle { red white green white blue white alpha white name ShuffleWhite xpos 504 ypos 229 disable {{"\[exists parent.input1]"}} } set Na21deb00 [stack 0] Dot { name Dot4 xpos 538 ypos 327 } push $Na79d4100 Shuffle { name ShuffleImgRGBA xpos 294 ypos 71 } set Na21ddd00 [stack 0] Dot { name Dot3 xpos 435 ypos 74 } BlinkScript { inputs 2 recompileCount 19 ProgramGroup 1 KernelDescription "2 \"apMaxMinKernel\" iterate pixelWise 7e64c00f3b124d2af614668b30d0f630f4c316e304755f67345f11bb557d5feb 3 \"img\" Read Random \"area\" Read Random \"dst\" Write Point 2 \"useArea\" Int 1 AAAAAA== \"math\" Int 1 AAAAAA== 2 \"useArea\" 1 1 \"math\" 1 1 0" kernelSource "//---------------------------------------------------------\n// apMaxMinKernel v0.1 by Adrian Pueyo\n//\n// Calculates the maximum and minimum value of an input img,\n// through the positive values of an area.\n//\n// adrianpueyo.com, 2017\n// ---------------------------------------------------------\n\nstatic inline float y_convert_ccir601(const float4 in)\{\n return in.x * 0.299f + in.y * 0.587f + in.z * 0.114f;\n\}\nstatic inline float y_convert_rec709(const float4 in)\{\n return in.x * 0.2125f + in.y * 0.7154f + in.z * 0.0721f;\n\}\nstatic inline float y_convert_avg(const float4 in)\{\n return (in.x + in.y + in.z)/3.0f;\n\}\nstatic inline float y_convert_max(const float4 in)\{\n return max(max(in.x,in.y),in.z);\n\}\nstatic inline float y_convert_min(const float4 in)\{\n return min(min(in.x,in.y),in.z);\n\}\n\nkernel apMaxMinKernel : ImageComputationKernel\n\{\n Image img;\n Image area;\n Image dst;\n\n param:\n int useArea;\n int math; //0=Rec709,1=Ccir601,2=Avg,3=MaxMin,4=PerChannel\n\n void process(int2 pos) \{\n float4 theMax=-1000000000.0f, theMin=1000000000.0f;\n for(int j=img.bounds.y1; j0.0f)\{\n if(math==0)\{ //Rec709\n if(pos.x==0)\{ //Max\n if(y_convert_rec709(img(i,j))>y_convert_rec709(theMax))\{\n theMax = img(i,j);\n \}\n \}else\{//Min\n if(y_convert_rec709(img(i,j))y_convert_ccir601(theMax))\{\n theMax = img(i,j);\n \}\n \}else\{//Min\n if(y_convert_ccir601(img(i,j))y_convert_avg(theMax))\{\n theMax = img(i,j);\n \}\n \}else\{//Min\n if(y_convert_avg(img(i,j))y_convert_max(theMax))\{\n theMax = img(i,j);\n \}\n \}else\{//Min\n if(y_convert_min(img(i,j))theMax\[ch])\n theMax\[ch] = img(i,j,ch);\n \}\n \}else\{//Min\n for (int ch = 0; ch < dst.kComps; ch++)\{\n if(img(i,j,ch)\n\{\n Image img;\n Image area;\n Image dst;\n\n param:\n int useArea;\n\n void process(int2 pos) \{\n float vSum=0.0f, fSum=0.0f;\n for(int j=img.bounds.y1; j 0.0031308:\n s = 1.055 * (pow(lin, (1.0 / 2.4))) - 0.055\n else:\n s = 12.92 * lin\n return s\n \n if k.name() in \[\"hue\", \"saturation\", \"brightness\"]:\n alpha = n\[\"color\"].getValue(3)\n h = ((n\[\"hue\"].value())%360)/360\n r,g,b = colorsys.hsv_to_rgb(h,n\[\"saturation\"].value(),n\[\"brightness\"].value())\n rgb_color = \[r,g,b,alpha]\n n\[\"color\"].setValue(rgb_color)\n if r==0 and g==0 and b==0:\n n\[\"tile_color\"].setValue(255)\n else:\n rs,gs,bs = lin2srgb(r),lin2srgb(g),lin2srgb(b)\n n\[\"tile_color\"].setValue(int('%02x%02x%02x%02x' % (rs*255,gs*255,bs*255,1),16))\n \n if k.name() in \[\"color\"]:\n r,g,b = n.knob('color').getValue(0),n.knob('color').getValue(1),n.knob('color').getValue(2)\n h,s,v = colorsys.rgb_to_hsv(r,g,b)\n n\[\"hue\"].setValue(int(h*360))\n n\[\"saturation\"].setValue(s)\n n\[\"brightness\"].setValue(v)\n if r==0 and g==0 and b==0:\n n\[\"tile_color\"].setValue(255)\n else:\n rs,gs,bs = lin2srgb(r),lin2srgb(g),lin2srgb(b)\n n\[\"tile_color\"].setValue(int('%02x%02x%02x%02x' % (rs*255,gs*255,bs*255,1),16))" tile_color 0xff note_font "Bitstream Vera Sans Bold" note_font_size 12 selected true addUserKnob {20 ConstantPro} addUserKnob {41 channels T Constant2.channels} addUserKnob {41 format T Constant2.format} addUserKnob {26 ""} addUserKnob {26 text_1 l RGB T " "} addUserKnob {22 white l " < font size=4>..." -STARTLINE T "n = nuke.thisNode()\na = n\['color'].getValue()\[3]\nn\['color'].setValue(\[1,1,1,a])\n\nn\['tile_color'].setValue(4294967040)\n"} addUserKnob {22 red l " < font size=4>..." -STARTLINE T "n = nuke.thisNode()\na = n\['color'].getValue()\[3]\nn\['color'].setValue(\[1,0,0,a])\n\nn\['tile_color'].setValue(4278190335)\n"} addUserKnob {22 yellow l " < font size=4>..." -STARTLINE T "n = nuke.thisNode()\na = n\['color'].getValue()\[3]\nn\['color'].setValue(\[1,1,0,a])\n\nn\['tile_color'].setValue(4294902015)\n"} addUserKnob {22 green l " < font size=4>..." -STARTLINE T "n = nuke.thisNode()\na = n\['color'].getValue()\[3]\nn\['color'].setValue(\[0,1,0,a])\n\nn\['tile_color'].setValue(16711935)\n"} addUserKnob {22 gray l " < font size=4>..." -STARTLINE T "n = nuke.thisNode()\na = n\['color'].getValue()\[3]\nn\['color'].setValue(\[.5,.5,.5,a])\n\nn\['tile_color'].setValue(2139062271)\n"} addUserKnob {22 cyan l " < font size=4>..." -STARTLINE T "n = nuke.thisNode()\na = n\['color'].getValue()\[3]\nn\['color'].setValue(\[0,1,1,a])\n\nn\['tile_color'].setValue(16777215)\n"} addUserKnob {22 blue l " < font size=4>..." -STARTLINE T "n = nuke.thisNode()\na = n\['color'].getValue()\[3]\nn\['color'].setValue(\[0,0,1,a])\n\nn\['tile_color'].setValue(65535)\n"} addUserKnob {22 magenta l " < font size=4>..." -STARTLINE T "n = nuke.thisNode()\na = n\['color'].getValue()\[3]\nn\['color'].setValue(\[1,0,1,a])\n\nn\['tile_color'].setValue(4278255615)\n"} addUserKnob {22 greyEighteenPercent l " < font size=4>..." -STARTLINE T "n = nuke.thisNode()\na = n\['color'].getValue()\[3]\nn\['color'].setValue(\[.18,.18,.18,a])\n\nn\['tile_color'].setValue(774778623)"} addUserKnob {22 black l " < font size=4>..." -STARTLINE T "n = nuke.thisNode()\na = n\['color'].getValue()\[3]\nn\['color'].setValue(\[0,0,0,a])\n\nn\['tile_color'].setValue(255)\n"} addUserKnob {22 randomColor l "" -STARTLINE T "import random\nn = nuke.thisNode()\nrand = int(random.random()*360)\nn\[\"hue\"].setValue(rand)"} addUserKnob {26 text l Alpha: T " "} addUserKnob {22 whiteAlpha l " < font size=4>..." -STARTLINE T nuke.thisNode().knob('color').setValue(1,3)} addUserKnob {22 grayAlpha l " < font size=4>..." -STARTLINE T "nuke.thisNode()\['color'].setValue(0.5,3)"} addUserKnob {22 blackAlpha l " < font size=4>..." -STARTLINE T "nuke.thisNode()\['color'].setValue(0, 3)"} addUserKnob {6 color_rgba_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} color_rgba_panelDropped true addUserKnob {26 text_2 l " " T " "} addUserKnob {19 color l Color} color {0 0 0 0} addUserKnob {6 color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {7 hue l Hue R 0 360} addUserKnob {7 saturation l Saturation} addUserKnob {7 brightness l Value} addUserKnob {26 ""} addUserKnob {20 moreSettings l "More Settings" n 1} moreSettings 0 addUserKnob {41 first l "frame range" T Constant2.first} addUserKnob {41 last l "" -STARTLINE T Constant2.last} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {6 fillBBox l "Fill BBox" +STARTLINE} fillBBox true addUserKnob {6 combineBBox l "Combine with Input BBox" -STARTLINE} combineBBox true addUserKnob {41 overscanPercent l "Overscan Percent" T BBoxToFormat.overscanPercent} addUserKnob {26 "" +STARTLINE} addUserKnob {20 endGroup n -1} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T fillColor.maskChannelInput} addUserKnob {41 inject -STARTLINE T fillColor.inject} addUserKnob {41 invert_mask l invert -STARTLINE T fillColor.invert_mask} addUserKnob {41 fringe -STARTLINE T fillColor.fringe} addUserKnob {41 mix_1 l mix T fillColor.mix} } Input { inputs 0 name Inputmask xpos -403 ypos -17 number 1 } Constant { inputs 0 name Constant2 tile_color 0xff xpos -545 ypos -332 postage_stamp false } Input { inputs 0 name Input xpos -407 ypos -227 } Switch { inputs 2 which {{"!\[exists parent.input0]"}} name SwitchDefault xpos -545 ypos -227 } set N47dbc800 [stack 0] Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"overscanType\":\n if n.knob(\"overscanType\").getValue() == 1:\n n.knob(\"overscanPercent\").setVisible(True)\n n.knob(\"overscan\").setVisible(False)\n else:\n n.knob(\"overscanPercent\").setVisible(False)\n n.knob(\"overscan\").setVisible(True)" tile_color 0xa57aaaff note_font "Verdana Bold" note_font_color 0xffffffff xpos -545 ypos -179 disable {{!parent.fillBBox}} addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} overscanType Percentage addUserKnob {14 overscan l Overscan +HIDDEN R 0 400} addUserKnob {14 overscanPercent l "Overscan Percent" R 1 4} overscanPercent 1 addUserKnob {20 inputBbox l "BBox Data" n 1} inputBbox 0 addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set N764b7200 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set N764b6b00 [stack 0] push $N764b7200 Crop { box {{curve} {curve} {input.width} {input.height}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N764b6400 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set N764b5d00 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{input.bbox.r/2} {input.bbox.t/2}} shutteroffset centred name Transform1 xpos 120 ypos 555 } push $N764b5d00 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $N764b6b00 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $N764b6400 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N67b4c100 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $N67b4c100 NoOp { name OutputBBox1 xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group set N47dbc100 [stack 0] push $N47dbc800 Merge2 { inputs 2 name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -695 ypos -102 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "\nntn = nuke.thisNode()\nall = nuke.allNodes()\na = ntn.input(1)\nx = int(ntn\['xpos'].value())\nb = ntn.input(0)\ny = int(ntn\['ypos'].value())\nwith nuke.Root():\n ma = nuke.nodes.NST_MergeAll()\n ma.setXYpos(x,y)\n # copy all values\n ak = ntn.knobs()\n for knoB in ma.knobs():\n try:\n if knoB not in \[\"name\",\"tile_color\", \"also_merge\"]:\n ma\[knoB].setValue(ntn\[knoB].value())\n with ma:\n newMerge = nuke.toNode(\"MergeAllChannels\")\n if ntn\[\"mix\"].isAnimated():\n newMerge\[\"mix\"].copyAnimations(ntn\[\"mix\"].animations())\n else:\n newMerge\['mix'].setValue(ntn\['mix'].value())\n newMerge.knob('also_merge').setValue('all')\n\n except:\n pass\n \n # try to reconnect\n try:\n ma.setInput(0,b);ma.setInput(1,a)\n for one in all:\n for i in range(one.inputs()):\n if one.input(i) == ntn:\n one.setInput(i,ma)\n except:\n pass\n nuke.delete(ntn)\n"} } push $N47dbc100 CopyBBox { inputs 2 name CopyBBox1 xpos -545 ypos -102 disable {{!parent.combineBBox}} } Fill { inputs 1+1 output {{{parent.Constant2.channels}}} color {{parent.color} {parent.color} {parent.color} {parent.color}} name fillColor xpos -545 ypos -17 } BlackOutside { name BlackOutside1 xpos -545 ypos 33 disable {{!parent.blackOutside}} } Output { name Output1 xpos -545 ypos 94 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ContactSheetAuto.gizmo ================================================ ContactSheet { width {{input.width*columns*resMult}} height {{input.height*rows*resMult}} rows {{"\[expr \{int( (sqrt( \[numvalue inputs] ) ) )\} ] * \[expr \{int( ceil ( (\[numvalue inputs] /(sqrt( \[numvalue inputs] ) ) )) )\} ] < \[numvalue inputs] ? \[expr \{int( (sqrt( \[numvalue inputs] ) ) )\} ] +1 : \[expr \{int( (sqrt( \[numvalue inputs] ) ) )\} ]"}} columns {{"\[expr \{int( ceil ( (\[numvalue inputs] /(sqrt( \[numvalue inputs] )) )) )\} ]"}} center true roworder TopBottom name ContactSheetAuto tile_color 0xff69f7ff selected true addUserKnob {20 Settings} addUserKnob {7 resMult l "Resolution Multiplier" R 0.1 2} resMult 1 } ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Contrast.gizmo ================================================ Group { name Contrast tile_color 0x6a93ddff note_font "DejaVu LGC Sans Bold" note_font_color 0xffffffff selected true addUserKnob {20 Contrast} addUserKnob {6 unpremult1 l "unpremult input" +STARTLINE} addUserKnob {41 Amount l HighContrast T Multiply1.value} addUserKnob {41 lowContrast l "Low Contrast" T Multiply2.value} addUserKnob {41 overallContrast l "Overall Contrast" T Multiply3.value} addUserKnob {41 whitepoint l pivot T Grade12.whitepoint} addUserKnob {26 "" +STARTLINE} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge2.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge2.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge2.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge2.fringe} addUserKnob {41 mix T Merge2.mix} } Input { inputs 0 name InputMask xpos -246 ypos 60 number 1 } Input { inputs 0 name Input1 xpos -399 ypos -523 } Dot { name Dot2 note_font_size 41 xpos -365 ypos -452 } set N936a4a60 [stack 0] Unpremult { name Unpremult2 xpos -399 ypos -393 disable {{!unpremult1}} } Grade { whitepoint 0.18 black_clamp false name Grade12 xpos -399 ypos -367 } Add { channels rgb value -1 name Add1 xpos -399 ypos -341 } set N936af620 [stack 0] Grade { multiply -1 black_clamp false name Grade1 xpos -289 ypos -312 } Clamp { channels rgb maximum_enable false name Clamp2 xpos -289 ypos -286 } Multiply { channels rgb name Multiply2 xpos -289 ypos -260 } Grade { multiply -1 black_clamp false name Grade2 xpos -289 ypos -222 } push $N936af620 Clamp { channels rgb maximum_enable false name Clamp1 xpos -399 ypos -289 } Multiply { channels rgb name Multiply1 xpos -399 ypos -263 } Merge2 { inputs 2 operation plus output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge1 xpos -399 ypos -222 } Multiply { channels rgb name Multiply3 label "\[value value]" xpos -399 ypos -183 } Add { channels rgb value 1 name Add2 xpos -399 ypos -134 } Grade { whitepoint {{parent.Grade12.whitepoint} {parent.Grade12.whitepoint} {parent.Grade12.whitepoint} {parent.Grade12.whitepoint}} reverse true black_clamp false name Grade15 xpos -399 ypos -108 } Premult { name Premult3 xpos -399 ypos -82 disable {{!unpremult1}} } Dot { name Dot16 note_font_size 41 xpos -365 ypos -21 } push $N936a4a60 Dot { name Dot1 note_font_size 41 xpos -509 ypos -452 } Dot { name Dot17 note_font_size 41 xpos -509 ypos 63 } Merge2 { inputs 2+1 operation copy name Merge2 xpos -399 ypos 60 } Output { name Output1 xpos -399 ypos 152 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ConvertPNZ.gizmo ================================================ Group { name ConvertPNZ onCreate "\nthisGRP = nuke.thisGroup()\nif not thisGRP\['disable_error'].getValue() :\n import os\n import re\n\n fontpath = re.split( '/|\"\"' , nuke.EXE_PATH )\n fontpath.pop()\n fontpath += \['plugins','fonts']\n \n if os.path.isfile( '/'.join( fontpath + \['UtopiaBold.pfa'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['UtopiaBold.pfa'] ) )\n elif os.path.isfile( '/'.join( fontpath + \['CourierBold.pfa'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['CourierBold.pfa'] ) )\n elif os.path.isfile( '/'.join( fontpath + \['Courier10PitchBold.pfb'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['Courier10PitchBold.pfb'] ) )\n else :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['BitstreamCharterBold.pfb'] ) )\n" tile_color 0x7f0072ff addUserKnob {20 general l General} addUserKnob {41 data l "input data" T menu1.data} addUserKnob {26 spacer_1 l "" +STARTLINE T
} addUserKnob {6 invert_depth l "invert depth (1/z)" +HIDDEN +STARTLINE} invert_depth true addUserKnob {4 in_space l INPUT M {"world space" "camera space" "" "" "" ""}} addUserKnob {4 out_position l OUTPUT M {"world space" "camera space" "" "" ""}} out_position "camera space" addUserKnob {4 out_normal l OUTPUT +HIDDEN M {"world space" "camera space" fresnel ""}} out_normal "camera space" addUserKnob {26 spacer l "" +STARTLINE T
} addUserKnob {20 CamTabBegin l "" +STARTLINE n -2} addUserKnob {20 tab_cam_setup l "Camera Setup"} addUserKnob {22 set_link l "link to selected camera" t "Deep data is related to camera. So when convert deep data to anything, it required the camera data.\n\nhow to use :\nSelect the camera, which can be link to any axis nodes. This tool will get the focal, haperture and world matrix from selected camera to generate world space position data.\n\nYou can find the world space position pass store under 'deepPosition' channel after this node. The pass support volumatric deep data. If want to bring the position data to 2D in downstream. Please only use DVPToImage which comes along with this toolset.\n\nAdditional note:\nThis node will also create another channel called 'deepRawColor' . This channel stored the original of deep data from input for any dev purposes in downstream. User not necessary to use this channel but better to keep it if this toolset occur in downstream." T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\n\nmainKnobs = \['cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll','world_matrix']\ndefaultKnobs = \{\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll',\n\t\t\t'world matrix' : 'world_matrix'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tfor knob in mainKnobs :\n\t\t\t\tthisGRP\[knob].clearAnimated()\n\t\t\t\t\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.focal'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.haperture'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.win_translate'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.win_scale'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.winroll'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tfor knob in mainKnobs :\n\t\t\t\t\tthisGRP\[knob].clearAnimated()\n\t\t\t\t\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']))\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']))\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']))\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']))\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window roll']))\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data. So the position data still works if input doesn't contain any camera movement." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll','world_matrix']\n\nfor knob in thisGRP.knobs() :\n if mainKnobs.count(knob) != 0 :\n thisGRP\[knob].clearAnimated()"} addUserKnob {22 bake_link l "bake expression link" t "Baked out the existing expression link back to this node itself. After that, camera node is not required for this node anymore. Baked value is base on the frame range in project setting of the nuke script.\n\n* Nuke 11.2 has issue with expression link on this node. It will crash your nuke in some cases, but it will be fine when re-open the nuke script. Because of this issue, recommand to bake the value." T "thisGRP = nuke.thisGroup()\n\nframeST = nuke.root().firstFrame()\nframeED = nuke.root().lastFrame()\n\nallknobs = \['cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll','world_matrix']\nalldata = \{\}\n\nchknobs = 0\nfor knob in allknobs :\n\tif thisGRP\[knob].hasExpression() :\n\t\tchknobs = 1\n\nif chknobs :\n\tfor knob in allknobs :\n\t\tfor t in range( frameST, frameED+1, 1 ) :\n\t\t\ttry :\n\t\t\t\talldata\[knob].append( thisGRP\[knob].getValueAt(t) )\n\t\t\texcept :\n\t\t\t\talldata\[knob] = \[ thisGRP\[knob].getValueAt(t) ]\n\n\tfor knob in allknobs :\n\t\tthisGRP\[knob].clearAnimated()\n\t\tthisGRP\[knob].setAnimated()\n\n\tfor knob in allknobs :\n\t\tfor t in range( frameST, frameED+1, 1 ) :\n\t\t\tif type( alldata\[knob]\[t-frameST] ) is float :\n\t\t\t\tthisGRP\[knob].setValueAt( alldata\[knob]\[t-frameST] , t )\n\t\t\tif type( alldata\[knob]\[t-frameST] ) is list :\n\t\t\t\tfor i in range( len( alldata\[knob]\[t-frameST] ) ) :\n\t\t\t\t\tthisGRP\[knob].setValueAt( alldata\[knob]\[t-frameST]\[i] , t , i )\nelse :\n\tnuke.message('no expression link found.')" +STARTLINE} addUserKnob {22 copy_data l "copy from selected camera" t "Select the camera, then this will process 'link to selected camera' and 'bake expression link' in once.\n\n* Nuke 11.2 has issue with expression link on this node. It will crash your nuke in some cases, but it will be fine when re-open the nuke script. Because of this issue, recommand to bake the value." -STARTLINE T "thisGRP = nuke.thisGroup()\nthisGRP\['set_link'].execute()\nthisGRP\['bake_link'].execute()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 cam_focal l "focal length" R 5 100} cam_focal 50 addUserKnob {7 cam_haperture l "horiz aperture" R 0.1 50} cam_haperture 24.576 addUserKnob {30 cam_win_translate l "window translate"} addUserKnob {30 cam_win_scale l "window scale"} cam_win_scale {1 1} addUserKnob {7 cam_winroll l "window roll" R -45 45} addUserKnob {41 world_matrix l "world matrix" T cam_data.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 CamTabEnd l "" +STARTLINE n -3} addUserKnob {20 tab_misc l Misc} addUserKnob {2 font} font "C:/Program Files/Nuke12.0v3/plugins/fonts/UtopiaBold.pfa" addUserKnob {6 disable_error l "disable onscreen message" +STARTLINE} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.4} addUserKnob {26 l_DATE l "Date Modified" T 2020-01-21} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.4
- a package convert 3D tech passes
  included
  * P2Z ( Position To Depth )
  * P2N ( Position To Normal )
  * Z2P ( Depth To Position )
  * Z2N ( Depth To Normal )
  * ConvertPNZ ( self convertion )
- fixed camera window transformation issue

1.2
- changed camera input to expression link
- fix alpha check
- added support camera window roll

1.0
- Convert Position data to Normal\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -158 ypos -449 bdwidth 274 bdheight 144 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x388e8e00 label bin note_font_size 42 xpos -153 ypos -270 bdwidth 272 bdheight 503 } Reformat { inputs 0 type "to box" box_width {{global.res.x}} box_height {{global.res.y}} box_fixed true box_pixel_aspect {{global.pxa}} name Reformat1 xpos 755 ypos 1004 } Text { message "missing \[value parent.data] pass" font "\[value parent.font]" size {{global.res.x/15}} xjustify center yjustify center Transform 1 box {0 0 {global.res.x} {global.res.y}} center {640 360} name Text1 xpos 755 ypos 1086 disable {{parent.disable_error}} } Reformat { type "to box" box_width {{global.res.x}} box_height {{global.res.y}} box_fixed true box_pixel_aspect {{global.pxa}} black_outside true name Reformat2 xpos 755 ypos 1168 } Dot { name Dot5 xpos 789 ypos 1250 } Input { inputs 0 name position xpos 404 ypos -536 } Expression { temp_name0 detectA temp_expr0 "red == 0 && green == 0 && blue == 0 ? 0 : 1" expr3 detectA name Expression3 label "non-filtered alpha" xpos 404 ypos -405 } Dot { name Dot1 xpos 438 ypos -173 } set Nc9f69000 [stack 0] Dot { name Dot4 xpos 594 ypos -173 } set Nc9f68c00 [stack 0] Dot { name Dot2 xpos 740 ypos -173 } set Nc9f68800 [stack 0] Dot { name Dot8 xpos 1043 ypos -173 } set Nc9f68400 [stack 0] Dot { name Dot20 xpos 1165 ypos -173 } set Nc9f68000 [stack 0] Dot { name Dot9 xpos 1310 ypos -173 } set Nc9f83c00 [stack 0] Dot { name Dot14 xpos 1611 ypos -173 } set Nc9f83800 [stack 0] Dot { name Dot17 xpos 1904 ypos -173 } set Nc9f83400 [stack 0] Dot { name Dot18 xpos 2075 ypos -173 } Expression { expr0 "1 / red" expr1 "1 / red" expr2 "1 / red" name Expression2 xpos 2041 ypos -99 } Expression { expr0 "isnan(red) || isinf(red) ? 0 : red" expr1 "isnan(green) || isinf(green) ? 0 : green" expr2 "isnan(blue) || isinf(blue) ? 0 : blue" name Expression5 label "remove nan&inf" xpos 2041 ypos -17 } Dot { name Dot19 xpos 2075 ypos 367 } push $Nc9f83400 Switch { inputs 2 which {{invert_depth}} name Switch5 xpos 1870 ypos 449 } Dot { name Dot16 xpos 1904 ypos 531 } push $Nc9f83800 Shuffle { red blue green blue name Shuffle2 xpos 1577 ypos 38 } Invert { channels rgb name Invert2 xpos 1577 ypos 120 } Premult { name Premult2 xpos 1577 ypos 202 } Dot { name Dot15 xpos 1611 ypos 342 } push $Nc9f83c00 ColorMatrix { matrix { {{parent.world_matrix.0} {parent.world_matrix.1} {parent.world_matrix.2}} {{parent.world_matrix.4} {parent.world_matrix.5} {parent.world_matrix.6}} {{parent.world_matrix.8} {parent.world_matrix.9} {parent.world_matrix.10}} } invert true name ColorMatrix2 label "invert deformation" selected true xpos 1276 ypos -99 } Dot { name Dot12 xpos 1310 ypos -5 } set Nc9fa4400 [stack 0] Dot { name Dot11 xpos 1461 ypos -5 } Shuffle { red blue green blue name Shuffle1 xpos 1427 ypos 93 } Invert { channels rgb name Invert1 xpos 1427 ypos 175 } Premult { name Premult1 xpos 1427 ypos 257 } Dot { name Dot13 xpos 1461 ypos 339 } push $Nc9fa4400 Dot { name Dot10 xpos 1310 ypos 337 } push $Nc9f68000 ColorMatrix { matrix { {{parent.cam_data.world_matrix.0} {parent.cam_data.world_matrix.1} {parent.cam_data.world_matrix.2}} {{parent.cam_data.world_matrix.4} {parent.cam_data.world_matrix.5} {parent.cam_data.world_matrix.6}} {{parent.cam_data.world_matrix.8} {parent.cam_data.world_matrix.9} {parent.cam_data.world_matrix.10}} } name ColorMatrix4 label transformation xpos 1131 ypos -99 } Dot { name Dot21 xpos 1165 ypos 337 } push $Nc9f68400 Switch { inputs 5 which {{"in_space == out_normal ? 0 : \nin_space == 0 && out_normal == 1 ? 2 : \nin_space == 1 && out_normal == 0 ? 1 : \nin_space == 0 && out_normal == 2 ? 3 : \n4"}} name Switch4 xpos 1009 ypos 460 } Dot { name Dot7 xpos 1043 ypos 542 } push $Nc9f68800 Expression { expr2 -blue name Expression6 label "invert z" xpos 706 ypos -99 } ColorMatrix { matrix { {{parent.cam_data.world_matrix.0} {parent.cam_data.world_matrix.1} {parent.cam_data.world_matrix.2}} {{parent.cam_data.world_matrix.4} {parent.cam_data.world_matrix.5} {parent.cam_data.world_matrix.6}} {{parent.cam_data.world_matrix.8} {parent.cam_data.world_matrix.9} {parent.cam_data.world_matrix.10}} } name ColorMatrix3 label deformation xpos 706 ypos -5 } Add { channels rgb value {{parent.cam_data.world_matrix.3} {parent.cam_data.world_matrix.7} {parent.cam_data.world_matrix.11} {curve}} maskChannelInput rgba.alpha name Add3 label "invert translation" xpos 706 ypos 101 bookmark true } Dot { name Dot3 xpos 740 ypos 321 } push $Nc9f68c00 Add { channels rgb value {{-parent.cam_data.world_matrix.3} {-parent.cam_data.world_matrix.7} {-parent.cam_data.world_matrix.11} {curve}} name Add1 label "invert translation" xpos 560 ypos -99 bookmark true } ColorMatrix { matrix { {{parent.cam_data.world_matrix.0} {parent.cam_data.world_matrix.1} {parent.cam_data.world_matrix.2}} {{parent.cam_data.world_matrix.4} {parent.cam_data.world_matrix.5} {parent.cam_data.world_matrix.6}} {{parent.cam_data.world_matrix.8} {parent.cam_data.world_matrix.9} {parent.cam_data.world_matrix.10}} } invert true name ColorMatrix1 label "invert deformation" xpos 560 ypos -5 } Expression { expr2 -blue name Expression1 label "invert z" xpos 560 ypos 101 } Dot { name Dot6 xpos 594 ypos 317 } push $Nc9f69000 Switch { inputs 3 which {{"in_space == out_position ? 0 : ( in_space == 0 && out_position == 1 ? 1 : 2 )"}} name Switch2 xpos 404 ypos 453 } Switch { inputs 3 which {{parent.data}} name Switch1 xpos 404 ypos 806 } Expression { expr0 "red * alpha" expr1 "green * alpha" expr2 "blue * alpha" expr3 0 name Expression4 label "premult and cleanup" xpos 404 ypos 929 } Switch { inputs 2 which {{"!\[exists parent.input0]"}} name Switch3 xpos 404 ypos 1340 } Output { name Output1 xpos 404 ypos 1467 } Group { inputs 0 name inverseMatrix tile_color 0x337f4cff xpos -111 ypos 68 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path fb_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2011-11-28} addUserKnob {26 l_CHANGELOG l Changelog T "v1.0\n- reveal the calculate output of \n inverse matrix which is c44matrix\n and colormatrix doesn't show\n "} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group Axis { inputs 0 display off selectable false rotate {0 0 {parent.cam_winroll}} name fb_data xpos -97 ypos -47 } Camera { inputs 0 display off selectable false useMatrix true name cam_data xpos 6 ypos -48 } NoOp { inputs 0 name global xpos -114 ypos -148 addUserKnob {20 User} addUserKnob {12 res} res {{"\[exists parent.input0] ? parent.input0.width : width"} {"\[exists parent.input0] ? parent.input0.height : height"}} addUserKnob {7 pxa} pxa {{"\[exists parent.input0] ? parent.input0.pixel_aspect : pixel_aspect"}} addUserKnob {7 hratio} hratio {{"parent.cam_haperture / parent.cam_focal"}} } NoOp { inputs 0 name menu1 knobChanged "\nthisGRP = nuke.thisGroup()\ncamKnobs = \['set_link','remove_link','bake_link','copy_data','cam_data_grp','cam_winroll','world_matrix','endGroup_1']\nif thisGRP\['data'].value() == 'depth' :\n thisGRP\['in_space'].setVisible(False)\n thisGRP\['out_position'].setVisible(False)\n thisGRP\['out_normal'].setVisible(False)\n thisGRP\['invert_depth'].setVisible(True)\n for knob in camKnobs :\n thisGRP\[knob].setEnabled(False)\nelse :\n thisGRP\['in_space'].setVisible(True)\n if thisGRP\['data'].value() == 'position' :\n thisGRP\['out_position'].setVisible(True)\n thisGRP\['out_normal'].setVisible(False)\n else :\n thisGRP\['out_position'].setVisible(False)\n thisGRP\['out_normal'].setVisible(True)\n thisGRP\['invert_depth'].setVisible(False)\n for knob in camKnobs :\n thisGRP\[knob].setEnabled(True)\nwith thisGRP:\n for node in nuke.allNodes() :\n if node.Class() == 'Input' :\n node\['name'].setValue( thisGRP\['data'].value() )\n" xpos -61 ypos -352 addUserKnob {20 User} addUserKnob {83 data l "input data" M {position normal depth}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ConvolutionMatrix.gizmo ================================================ Group { name ConvolutionMatrix inputs 2 autolabel "nuke.thisNode().name() + \"\\n\" + '(' + str(nuke.thisNode()\['matrix_selection'].value()) + ')' " tile_color 0xfff600ff note_font "Verdana Bold" note_font_size 14 addUserKnob {20 matrix l Matrix} addUserKnob {26 message01 l "" +STARTLINE T "Select a matrix and see the result:"} addUserKnob {4 matrix_selection l "" +STARTLINE M {"01 - Identity" "02 - Smoothing - 3x3 convolution kernel" "03 - Gaussian Blur" "04 - Blur" "05 - Motion Blur" "06 - Average/Mean filter" "07 - Antialiasing filter (1)" "08 - Antialiasing filter (2)" "09 - Sharpen" "10 - Intensified sharpen" "11 - Edge detect" "12 - Edge enhance" "13 - Emboss" "14 - Outline" "15 - Top sobel" "16 - Bottom sobel" "17 - Right sobel" "18 - Left sobel" "19 - Roberts Cross Right Bottom" "20 - Roberts Cross Left Bottom" "21 - Roberts Cross Left Top" "22 - Roberts Cross Right Top" ""}} addUserKnob {26 ""} addUserKnob {41 matrix_1 l matrix T MatrixSUPER.matrix} addUserKnob {6 normalize t "When enabled, the matrix is divided by a constant so that it’s sum is 1 (where possible). This causes the output image to have the same brightness as the source image" -STARTLINE} normalize true addUserKnob {6 cineon l Lin/Log t "Turn on to get this operation in Log space\nIf the checkbox if off, then the operation will be done in the classic Lin space" +STARTLINE} addUserKnob {26 ""} addUserKnob {41 maskChannel l "mask channel" T Keymix1.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix1.invertMask} addUserKnob {26 "" +STARTLINE} addUserKnob {26 message02 l "" +STARTLINE T "Convolution Matrix v3.5
\nby Andrea Geremia
\n
\nandrea.geremia89@gmail.com
\nwww.andreageremia.it
"} } Dot { inputs 0 name Dot1 xpos -1665 ypos -76 } set N816802e0 [stack 0] Dot { name Dot16 xpos -1555 ypos -76 } set N81682740 [stack 0] Dot { name Dot15 xpos -1445 ypos -76 } set N81684ba0 [stack 0] Dot { name Dot14 xpos -1335 ypos -76 } set N81687000 [stack 0] Dot { name Dot13 xpos -1225 ypos -76 } set N81689460 [stack 0] Dot { name Dot12 xpos -1115 ypos -76 } set N8168b8c0 [stack 0] Dot { name Dot11 xpos -1005 ypos -76 } set N8168dd20 [stack 0] Dot { name Dot10 xpos -895 ypos -76 } set N81690180 [stack 0] Dot { name Dot9 xpos -785 ypos -76 } set N816925e0 [stack 0] Dot { name Dot19 xpos -656 ypos -76 } set N81694a40 [stack 0] Dot { name Dot21 xpos -546 ypos -76 } set N81696ea0 [stack 0] Dot { name Dot20 xpos -420 ypos -76 } set N81699300 [stack 0] Dot { name Dot22 xpos -293 ypos -76 } Matrix { channels rgba matrix { {0 0 0} {0 0 -1} {0 1 0} } name Matrix21 label "Robert Cross Right Top" xpos -327 ypos 33 } push $N81699300 Matrix { channels rgba matrix { {0 0 0} {0 -1 0} {0 0 1} } name Matrix20 label "Robert Cross Left Top" xpos -454 ypos 30 } push $N81696ea0 Matrix { channels rgba matrix { {0 0 0} {0 0 1} {0 -1 0} } name Matrix19 label "Robert Cross Left Down" xpos -580 ypos 29 } push $N81694a40 Matrix { channels rgba matrix { {0 0 0} {0 1 0} {0 0 -1} } name Matrix18 label "Robert Cross Right Down" xpos -690 ypos 30 } push $N816925e0 Matrix { channels rgba matrix { {-1 0 1} {-2 0 2} {-1 0 1} } name Matrix17 label "Right Sobel" xpos -819 ypos 30 } push $N81690180 Matrix { channels rgba matrix { {1 0 -1} {2 0 -2} {1 0 -1} } name Matrix16 label "Left Sobel" xpos -929 ypos 28 } push $N8168dd20 Matrix { channels rgba matrix { {-1 -2 -1} {0 0 0} {1 2 1} } name Matrix15 label "Bottom Sobel" xpos -1039 ypos 28 } push $N8168b8c0 Matrix { channels rgba matrix { {1 2 1} {0 0 0} {-1 -2 -1} } name Matrix14 label "Top Sobel" xpos -1149 ypos 28 } push $N81689460 Matrix { channels rgba matrix { {-1 -1 -1} {-1 8 -1} {-1 -1 -1} } name Matrix13 label Outline xpos -1259 ypos 28 } push $N81687000 Matrix { channels rgba matrix { {-2 -1 0} {-1 1 1} {0 1 2} } name Matrix12 label Emboss xpos -1369 ypos 28 } push $N81684ba0 Matrix { channels rgba matrix { {0 0 0} {-1 1 0} {0 0 0} } name Matrix11 label "Edge Enhance" xpos -1479 ypos 31 } push $N81682740 Matrix { channels rgba matrix { {0 1 0} {1 -4 1} {0 1 0} } name Matrix10 label "Edge detect" xpos -1589 ypos 28 } push $N816802e0 Matrix { channels rgba matrix { {-1 -1 -1} {-1 9 -1} {-1 -1 -1} } name Matrix9 label "Intensified sharpen" xpos -1699 ypos 28 } push $N816802e0 Dot { name Dot8 xpos -1759 ypos -76 } set N816f6230 [stack 0] Matrix { channels rgba matrix { {0 -1 0} {-1 5 -1} {0 -1 0} } normalize true name Matrix8 label Sharpen xpos -1793 ypos 28 } push $N816f6230 Dot { name Dot6 xpos -1854 ypos -76 } set N817024e0 [stack 0] Matrix { channels rgb matrix { {1 2 1} {2 4 2} {1 2 1} } normalize true name Matrix7 label "Antialiasing filter\nsize 2" xpos -1888 ypos 24 } push $N817024e0 Dot { name Dot5 xpos -1964 ypos -76 } set N8170a510 [stack 0] Matrix { channels rgb matrix { {0 1 0} {1 2 1} {0 1 0} } normalize true name Matrix6 label "Antialiasing filter\nsize 1" xpos -1998 ypos 28 } push $N8170a510 Dot { name Dot17 xpos -2082 ypos -76 } set N81712540 [stack 0] Matrix { channels rgba matrix { {0.1111111111 0.11111111 0.11111111} {0.11111111 0.11111111 0.11111111} {0.11111111 0.11111111 0.11111111} } normalize true name Matrix5 label "Average filter" xpos -2116 ypos 28 } push $N81712540 Dot { name Dot18 xpos -2207 ypos -76 } set N8171a570 [stack 0] Matrix { channels rgba matrix { {1 0 0} {0 1 0} {0 0 1} } normalize true name Matrix4 label "Motion Blur" xpos -2241 ypos 31 } push $N8171a570 Dot { name Dot7 xpos -2318 ypos -76 } set N817225a0 [stack 0] Matrix { channels rgba matrix { {0.0625 0.125 0.0625} {0.125 0.25 0.125} {0.0625 0.125 0.0625} } normalize true name Matrix3 label Blur xpos -2352 ypos 30 } push $N817225a0 Dot { name Dot4 xpos -2413 ypos -76 } set N8172a5d0 [stack 0] Matrix { channels rgba matrix { {0 1 0} {1 4 1} {0 1 0} } normalize true name Matrix2 label "Gaussian Blur" xpos -2447 ypos 28 } push $N8172a5d0 Dot { name Dot3 xpos -2530 ypos -76 } set N81732690 [stack 0] Matrix { channels rgba matrix { {1 1 1} {1 1 1} {1 1 1} } normalize true name Matrix1 label "Smoothing\n3x3 convolution kernel" xpos -2564 ypos 27 } push $N81732690 Dot { name Dot2 xpos -2645 ypos -76 } Matrix { channels rgba matrix { {0 0 0} {0 1 0} {0 0 0} } normalize {{parent.normalize}} name Matrix0 label Identity xpos -2679 ypos 29 } Switch { inputs 22 which {{parent.matrix_selection}} name Switch1 label "\[value which]" xpos -1634 ypos 420 } Reformat { inputs 0 type "to box" box_width 10 box_height 10 box_fixed true name Reformat1 xpos 762 ypos 229 } Shuffle { alpha white name Shuffle1 xpos 762 ypos 309 } Input { inputs 0 name mask xpos 610 ypos 82 number 1 } Switch { inputs 2 which {{"!\[exists parent.input1]"}} name Switch3 xpos 610 ypos 309 } Dot { name Dot23 xpos 643 ypos 701 } Input { inputs 0 name src selected true xpos -580 ypos 235 } set N81633080 [stack 0] Colorspace { colorspace_out Cineon name Colorspace1 xpos -580 ypos 301 disable {{!parent.cineon}} } Matrix { channels rgba matrix { {{"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(0,0)\\n]"} {"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(0,1)]"} {"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(0,2)]"}} {{"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(1,0)]"} {"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(1,1)]"} {"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(1,2)]"}} {{"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(2,0)]"} {"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(2,1)]"} {"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(2,2)]"}} } normalize {{"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('normalize').value()\\n]"}} name MatrixSUPER xpos -580 ypos 370 } Colorspace { colorspace_in Cineon name Colorspace2 xpos -580 ypos 455 disable {{!parent.cineon}} } Dot { name Dot24 xpos -547 ypos 701 } push $N81633080 Dot { name Dot25 xpos 321 ypos 237 } Keymix { inputs 3 name Keymix1 xpos 288 ypos 695 } Output { name Output1 xpos 288 ypos 841 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_CornerPin2D_Matrix.gizmo ================================================ Group { name CornerPin2D_Matrix tile_color 0xa57aaa00 selected true addUserKnob {20 CornerPin2D} addUserKnob {26 ""} addUserKnob {41 to1 T CornerPin2D1.to1} addUserKnob {41 enable1 -STARTLINE T CornerPin2D1.enable1} addUserKnob {41 to2 T CornerPin2D1.to2} addUserKnob {41 enable2 -STARTLINE T CornerPin2D1.enable2} addUserKnob {41 to3 T CornerPin2D1.to3} addUserKnob {41 enable3 -STARTLINE T CornerPin2D1.enable3} addUserKnob {41 to4 T CornerPin2D1.to4} addUserKnob {41 enable4 -STARTLINE T CornerPin2D1.enable4} addUserKnob {22 copy_from l "Copy 'from'" T "n = nuke.thisNode()\nknob_from1 = n\['from1'].getValue()\nknob_from2 = n\['from2'].getValue()\nknob_from3 = n\['from3'].getValue()\nknob_from4 = n\['from4'].getValue()\n\n\nn\['to1'].setValue(knob_from1)\nn\['to2'].setValue(knob_from2)\nn\['to3'].setValue(knob_from3)\nn\['to4'].setValue(knob_from4)" +STARTLINE} addUserKnob {20 "extra matrix" n 2} addUserKnob {41 transform_matrix l "" -STARTLINE T CornerPin2D1.transform_matrix} addUserKnob {20 "" n -1} addUserKnob {26 ""} addUserKnob {26 message l "" +STARTLINE T "This is just a visualization. Can't modify directly this matrix"} addUserKnob {41 matrix T Matrix1.matrix} addUserKnob {41 inverse -STARTLINE T CornerPin2D1.inverse} addUserKnob {20 from l From} addUserKnob {41 from1 T CornerPin2D1.from1} addUserKnob {41 from2 T CornerPin2D1.from2} addUserKnob {41 from3 T CornerPin2D1.from3} addUserKnob {41 from4 T CornerPin2D1.from4} addUserKnob {41 set_to_input l "Set to input" T CornerPin2D1.set_to_input} addUserKnob {41 copy_from_to l "Copy 'to'" -STARTLINE T CornerPin2D1.copy_from_to} addUserKnob {20 email l @} addUserKnob {22 tutorial l Tutorial t http://www.andreageremia.it/tutorial_matrix_transform.html T "nuke.tcl('start', 'http://www.andreageremia.it/tutorial_matrix_transform.html')\n" +STARTLINE} addUserKnob {26 tool l "" +STARTLINE T "Tool created by Andrea Geremia\n\nandrea.geremia89@gmail.com\nwww.andreageremia.it\n\nFrom the Julik's code: https://gist.github.com/julik/1164618"} } Input { inputs 0 name Input1 xpos 269 ypos -141 } CornerPin2D { to1 {0 0} to2 {2048 0} to3 {2048 1556} to4 {0 1556} invert false motionblur 1 from1 {0 0} from2 {2048 0} from3 {2048 1556} from4 {0 1556} name CornerPin2D1 knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\n\ndef getTheCornerpinAsMatrix():\n projectionMatrixTo = nuke.math.Matrix4()\n projectionMatrixFrom = nuke.math.Matrix4()\n \n theCornerpinNode = n\n imageWidth = float(theCornerpinNode.width())\n imageHeight = float(theCornerpinNode.height())\n \n \n to1x, to1y = theCornerpinNode\['to1'].value()\n to2x, to2y = theCornerpinNode\['to2'].value()\n to3x, to3y = theCornerpinNode\['to3'].value()\n to4x, to4y = theCornerpinNode\['to4'].value()\n \n from1x, from1y = theCornerpinNode\['from1'].value()\n from2x, from2y = theCornerpinNode\['from2'].value()\n from3x, from3y = theCornerpinNode\['from3'].value()\n from4x, from4y = theCornerpinNode\['from4'].value()\n \n \n projectionMatrixTo.mapUnitSquareToQuad(to1x,to1y,to2x,to2y,to3x,to3y,to4x,to4y)\n projectionMatrixFrom.mapUnitSquareToQuad(from1x,from1y,from2x,from2y,from3x,from3y,from4x,from4y)\n \n\n theCornerpinAsMatrix = projectionMatrixTo*projectionMatrixFrom.inverse()\n \n theCornerpinAsMatrix.transpose()\n \n \n if(n\['inverse'].getValue()==1):\n inv = theCornerpinAsMatrix.inverse()\n theCornerpinAsMatrix = inv\n\n \n return theCornerpinAsMatrix\n\nmatrix = getTheCornerpinAsMatrix()\n\nnuke.toNode(\"Matrix1\")\['matrix'].setValue(matrix)" selected true xpos 269 ypos -66 addUserKnob {20 User} addUserKnob {6 inverse +STARTLINE} addUserKnob {22 "set reference frame" -STARTLINE T cornerPinZero()} } Output { name Output1 xpos 269 ypos -1 } Matrix { inputs 0 matrix { {1 0 0 0} {0 1 0 0} {0 0 1 0} {0 0 0 1} } name Matrix1 xpos 442 ypos -93 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_CrossProductVector2.gizmo ================================================ Group { name CrossProductVector2_ help "Calculates the cross product of 2 Vector2 inputs." addUserKnob {20 main_tab l "Cross Product Vector2"} addUserKnob {41 in l "Vector B Layer" t "Layer containing the vector information for input B" T vector_layer.in} addUserKnob {41 in_1 l "Vector A Layer" t "Layer containing the vector information for input A" T vector_layer1.in} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vectorA xpos 457 ypos -6 number 1 } Shuffle { name vector_layer1 xpos 457 ypos 103 } Remove { operation keep channels rgba name Remove2 xpos 457 ypos 129 } Dot { name Dot3 tile_color 0x9e3c6300 xpos 491 ypos 210 } Input { inputs 0 name vectorB xpos 0 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 108 } set N71872f0 [stack 0] Shuffle { name vector_layer xpos 140 ypos 104 } Remove { operation keep channels rgba name Remove1 xpos 140 ypos 130 } MergeExpression { inputs 2 channel0 rgb expr0 "Br*Ag - Bg*Ar" name MergeExpression2 xpos 140 ypos 206 } Dot { name Dot2 tile_color 0x4b5ec600 xpos 174 ypos 364 } push $N71872f0 ShuffleCopy { inputs 2 in2 none red red green green blue blue out {{{parent.vector_layer.in}}} name ShuffleCopy1 xpos 0 ypos 360 } Output { name Output1 xpos 0 ypos 506 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_CrossProductVector3.gizmo ================================================ Group { name CrossProductVector3_ help "Calculates the cross product of 2 Vector3 inputs." addUserKnob {20 main_tab l "Cross Product Vector3"} addUserKnob {41 in l "Vector B Layer" t "Layer containing the vector information for input B" T vector_layer.in} addUserKnob {41 in_1 l "Vector A Layer" t "Layer containing the vector information for input A" T vector_layer1.in} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vectorA xpos 457 ypos -6 number 1 } Shuffle { name vector_layer1 xpos 457 ypos 103 } Remove { operation keep channels rgba name Remove2 xpos 457 ypos 129 } Dot { name Dot3 tile_color 0x9e3c6300 xpos 491 ypos 210 } Input { inputs 0 name vectorB xpos 0 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 108 } set N762f800 [stack 0] Shuffle { name vector_layer xpos 140 ypos 104 } Remove { operation keep channels rgba name Remove1 xpos 140 ypos 130 } MergeExpression { inputs 2 expr0 "Ag*Bb - Ab*Bg" expr1 "Ab*Br - Ar*Bb" expr2 "Ar*Bg - Ag*Br" name MergeExpression2 xpos 140 ypos 206 } Dot { name Dot2 tile_color 0x4b5ec600 xpos 174 ypos 364 } push $N762f800 ShuffleCopy { inputs 2 in2 none red red green green blue blue out {{{parent.vector_layer.in}}} name ShuffleCopy1 xpos 0 ypos 360 } Output { name Output1 xpos 0 ypos 506 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DVPColorCorrect.gizmo ================================================ Group { name DVPColorCorrect onCreate "\nthisGRP = nuke.thisGroup()\nfor knob in thisGRP.knobs() :\n try :\n if thisGRP\[knob].label()\[:19] == 'panel dropped state' :\n thisGRP.removeKnob( nuke.thisNode()\[knob] )\n except :\n pass\nfor knob in thisGRP.knobs() :\n if thisGRP\[knob].Class() == 'Color_Knob' :\n if thisGRP\[knob].getValue() == \[0,0,0] :\n if not thisGRP\[knob].isAnimated() :\n thisGRP\[knob].setSingleValue(True)\n" tile_color 0x5182ccff label "Deep Output" addUserKnob {20 tab_general l General} addUserKnob {4 channels M {rgb deepPosition deepNormal}} addUserKnob {6 red -STARTLINE} red true addUserKnob {6 green -STARTLINE} green true addUserKnob {6 blue -STARTLINE} blue true addUserKnob {20 title_master l master n 1} addUserKnob {18 saturation R 0 4} saturation {1} addUserKnob {18 contrast R 0 4} contrast {1} addUserKnob {18 gamma R 0.2 5} gamma {1} addUserKnob {18 gain R 0 4} gain {1} addUserKnob {18 offset R -1 1} offset {0} addUserKnob {20 endGroup n -1} addUserKnob {20 title_shadows l shadows n 1} title_shadows 0 addUserKnob {18 shadows_saturation l saturation R 0 4} shadows_saturation {1} addUserKnob {18 shadows_contrast l contrast R 0 4} shadows_contrast {1} addUserKnob {18 shadows_gamma l gamma R 0.2 5} shadows_gamma {1} addUserKnob {18 shadows_gain l gain R 0 4} shadows_gain {1} addUserKnob {18 shadows_offset l offset R -1 1} shadows_offset {0} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 title_midtones l midtones n 1} title_midtones 0 addUserKnob {18 midtones_saturation l saturation R 0 4} midtones_saturation {1} addUserKnob {18 midtones_contrast l contrast R 0 4} midtones_contrast {1} addUserKnob {18 midtones_gamma l gamma R 0.2 5} midtones_gamma {1} addUserKnob {18 midtones_gain l gain R 0 4} midtones_gain {1} addUserKnob {18 midtones_offset l offset R -1 1} midtones_offset {0} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {20 title_highlights l highlights n 1} title_highlights 0 addUserKnob {18 highlights_saturation l saturation R 0 4} highlights_saturation {1} addUserKnob {18 highlights_contrast l contrast R 0 4} highlights_contrast {1} addUserKnob {18 highlights_gamma l gamma R 0.2 5} highlights_gamma {1} addUserKnob {18 highlights_gain l gain R 0 4} highlights_gain {1} addUserKnob {18 highlights_offset l offset R -1 1} highlights_offset {0} addUserKnob {20 endGroup_3 l endGroup n -1} addUserKnob {20 tab_masking l Masking} addUserKnob {41 mix T DeepCC.mix} addUserKnob {26 "" l " "} addUserKnob {41 zmap T DeepCC.zmap} addUserKnob {41 limit_z -STARTLINE T DeepCC.limit_z} addUserKnob {20 tab_ranges l Ranges} addUserKnob {4 test M {none "test on full image" "test with matte" ""}} addUserKnob {41 lookup l "" +STARTLINE T DeepCC.lookup} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 4.0} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-13} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"Deep2VPosition (Deep2VP)
- added camera setting to metadata
- remove bake and copy buttons
- rename to Deep2VP
- generate/select/import deepNormal in this node
- added generate normal in deep, still keep the previous one.

DVPort (DVPortal)
- renamed to DVPortal

DVPmatte
- removed 'option' knob, 2D matte can use 'open matte' instead
- open matte can choose show matte or color

DVPattern
- internal setup same as DVPmatte
- added rotation knob
- support 'open matte'

DVProjection
- remove bake and copy buttons
- remove all metadata created from Deep2VP

DVPsetLight
- added shader setting and input shader
- not required link camera anymore
- removed deepNormal setup, moved to Deep2VP node

DVPscene
- added multiple output options
- remove all metadata created from DVP's lighting system

DVPrelight
- added specular setup
- added toon shade setup
- fix pointcloud preview with effects

DVPrelightPT
- split up point light from DVPrelight
- fix point light duplicated algorithm

DVPfresnel
- not required link camera anymore
- fix unpremult process, the result was too dark

DVPToImage
- remove all metadata created from Deep2VP
- same as Deep2VP node color

new nodes :
DVPColorCorrect

added shaders :
DVP Shader
DVP Toon Shader\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Input { inputs 0 name deep xpos -40 ypos 134 } DeepExpression { chans1 deep name spacer xpos -40 ypos 214 } Dot { name Dot3 xpos -6 ypos 294 } set N4c8e7c00 [stack 0] add_layer {deepRawColor deepRawColor.red deepRawColor.green deepRawColor.blue deepRawColor.alpha} DeepExpression { chans0 {deepRawColor.red deepRawColor.green deepRawColor.blue none} chans1 none deepRawColor.red red deepRawColor.green green deepRawColor.blue blue name DeepExpression5 label "get color from upstream" xpos 90 ypos 371 } push $N4c8e7c00 Switch { inputs 2 which {{"\[metadata DVPmatte]+0==2 ? 1 : 0"}} name Switch2 label "check from upstream" xpos -40 ypos 448 } DeepExpression { chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "\[value selChan] == 0 ? deepRawColor.red : \[value parent.channels].red" rgba.green "\[value selChan] == 0 ? deepRawColor.green : \[value parent.channels].green" rgba.blue "\[value selChan] == 0 ? deepRawColor.blue : \[value parent.channels].blue" name DeepExpression1 label "shuffle deepRawColor" xpos -40 ypos 545 addUserKnob {20 User} addUserKnob {3 selChan} selChan {{parent.channels}} } DeepColorCorrect2 { saturation {{parent.saturation.r} {parent.saturation.g} {parent.saturation.b} 0} contrast {{parent.contrast.r} {parent.contrast.g} {parent.contrast.b} 0} gamma {{parent.gamma.r} {parent.gamma.g} {parent.gamma.b} 0} gain {{parent.gain.r} {parent.gain.g} {parent.gain.b} 0} offset {{parent.offset.r} {parent.offset.g} {parent.offset.b} 0} shadows.saturation {{parent.shadows_saturation.r} {parent.shadows_saturation.g} {parent.shadows_saturation.b} 0} shadows.contrast {{parent.shadows_contrast.r} {parent.shadows_contrast.g} {parent.shadows_contrast.b} 0} shadows.gamma {{parent.shadows_gamma.r} {parent.shadows_gamma.g} {parent.shadows_gamma.b} 0} shadows.gain {{parent.shadows_gain.r} {parent.shadows_gain.g} {parent.shadows_gain.b} 0} shadows.offset {{parent.shadows_offset.r} {parent.shadows_offset.g} {parent.shadows_offset.b} 0} midtones.saturation {{parent.midtones_saturation.r} {parent.midtones_saturation.g} {parent.midtones_saturation.b} 0} midtones.contrast {{parent.midtones_contrast.r} {parent.midtones_contrast.g} {parent.midtones_contrast.b} 0} midtones.gamma {{parent.midtones_gamma.r} {parent.midtones_gamma.g} {parent.midtones_gamma.b} 0} midtones.gain {{parent.midtones_gain.r} {parent.midtones_gain.g} {parent.midtones_gain.b} 0} midtones.offset {{parent.midtones_offset.r} {parent.midtones_offset.g} {parent.midtones_offset.b} 0} highlights.saturation {{parent.highlights_saturation.r} {parent.highlights_saturation.g} {parent.highlights_saturation.b} 0} highlights.contrast {{parent.highlights_contrast.r} {parent.highlights_contrast.g} {parent.highlights_contrast.b} 0} highlights.gamma {{parent.highlights_gamma.r} {parent.highlights_gamma.g} {parent.highlights_gamma.b} 0} highlights.gain {{parent.highlights_gain.r} {parent.highlights_gain.g} {parent.highlights_gain.b} 0} highlights.offset {{parent.highlights_offset.r} {parent.highlights_offset.g} {parent.highlights_offset.b} 0} mix {1} zmap {0 1 1 1} test {{parent.test}} name DeepCC xpos -40 ypos 637 } Dot { name Dot1 xpos -6 ypos 693 } set N4c8e6800 [stack 0] Dot { name Dot4 xpos 291 ypos 693 } Dot { name Dot5 xpos 291 ypos 1013 } push $N4c8e6800 add_layer {deepNormal deepNormal.red deepNormal.green deepNormal.blue deepNormal.alpha} DeepExpression { chans0 rgb chans1 {deepNormal.red deepNormal.green deepNormal.blue none} rgba.red deepRawColor.red rgba.green deepRawColor.green rgba.blue deepRawColor.blue deepNormal.red "\[value cr] ? deepNormal.red * (1-deepRawColor.alpha) + red * deepRawColor.alpha : deepNormal.red" deepNormal.green "\[value cg] ? deepNormal.green * (1-deepRawColor.alpha) + green * deepRawColor.alpha : deepNormal.green" deepNormal.blue "\[value cb] ? deepNormal.blue * (1-deepRawColor.alpha) + blue * deepRawColor.alpha : deepNormal.blue" name DeepExpression2 label "apply matte\ndeepNormal" xpos 81 ypos 790 addUserKnob {20 User} addUserKnob {3 cr} cr {{parent.red}} addUserKnob {3 cg} cg {{parent.green}} addUserKnob {3 cb} cb {{parent.blue}} } push $N4c8e6800 add_layer {deepPosition deepPosition.red deepPosition.green deepPosition.blue deepPosition.alpha} DeepExpression { chans0 rgb chans1 {deepPosition.red deepPosition.green deepPosition.blue none} rgba.red deepRawColor.red rgba.green deepRawColor.green rgba.blue deepRawColor.blue deepPosition.red "\[value cr] ? deepPosition.red * (1-deepRawColor.alpha) + red * deepRawColor.alpha : deepPosition.red" deepPosition.green "\[value cg] ? deepPosition.green * (1-deepRawColor.alpha) + green * deepRawColor.alpha : deepPosition.green" deepPosition.blue "\[value cb] ? deepPosition.blue * (1-deepRawColor.alpha) + blue * deepRawColor.alpha : deepPosition.blue" name DeepExpression4 label "apply matte\ndeepPosition" xpos -40 ypos 788 addUserKnob {20 User} addUserKnob {3 cr} cr {{parent.red}} addUserKnob {3 cg} cg {{parent.green}} addUserKnob {3 cb} cb {{parent.blue}} } push $N4c8e6800 DeepExpression { chans0 rgb chans1 none rgba.red "\[value cr] ? deepRawColor.red * (1-deepRawColor.alpha) + red * deepRawColor.alpha : deepRawColor.red" rgba.green "\[value cg] ? deepRawColor.green * (1-deepRawColor.alpha) + green * deepRawColor.alpha : deepRawColor.green" rgba.blue "\[value cb] ? deepRawColor.blue * (1-deepRawColor.alpha) + blue * deepRawColor.alpha : deepRawColor.blue" name DeepExpression3 label "apply matte\nRGB" xpos -168 ypos 789 addUserKnob {20 User} addUserKnob {3 cr} cr {{parent.red}} addUserKnob {3 cg} cg {{parent.green}} addUserKnob {3 cb} cb {{parent.blue}} } Switch { inputs 3 which {{parent.channels}} name Switch1 xpos -40 ypos 924 } Switch { inputs 2 which {{"parent.test == 1 ? 1 : 0"}} name Switch3 label "test selection" xpos -40 ypos 1004 } ModifyMetaData { metadata { {set DVPmatte 2} } name DVPmd xpos -40 ypos 1090 } Output { name Output1 xpos -40 ypos 1170 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DVPToImage.gizmo ================================================ Group { name DVPToImage onCreate "\nnver = nuke.NUKE_VERSION_MAJOR\nthisGRP = nuke.thisGroup()\nif nver >= 11 :\n thisGRP\['nuke_version'].setValue(1)\nelse :\n thisGRP\['nuke_version'].setValue(0)\n" tile_color 0x2866ff label "2D image Output" addUserKnob {20 t_general l General} addUserKnob {4 nuke_version l "" +STARTLINE +INVISIBLE M {10 11 "" ""}} nuke_version 11 addUserKnob {6 keep_deepPosition l "keep deepPosition" t "keep 'deepPosition' channel to downstream." +STARTLINE} keep_deepPosition true addUserKnob {6 keep_deepNormal l "keep deepNormal" t "keep 'deepNormal' channel to downstream." +STARTLINE} keep_deepNormal true addUserKnob {26 spacer l "" +STARTLINE} addUserKnob {26 description l "description :" T "This node converts 'deepPosition' & 'deepNormal' data
generated by Deep2VP to 2D image in downstream."} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 4.0} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-13} addUserKnob {22 btn_CHANGELOG l Changlelog T "log = \"Deep2VPosition (Deep2VP)
- added camera setting to metadata
- remove bake and copy buttons
- rename to Deep2VP
- generate/select/import deepNormal in this node
- added generate normal in deep, still keep the previous one.

DVPort (DVPortal)
- renamed to DVPortal

DVPmatte
- removed 'option' knob, 2D matte can use 'open matte' instead
- open matte can choose show matte or color

DVPattern
- internal setup same as DVPmatte
- added rotation knob
- support 'open matte'

DVProjection
- remove bake and copy buttons
- remove all metadata created from Deep2VP

DVPsetLight
- added shader setting and input shader
- not required link camera anymore
- removed deepNormal setup, moved to Deep2VP node

DVPscene
- added multiple output options
- remove all metadata created from DVP's lighting system

DVPrelight
- added specular setup
- added toon shade setup
- fix pointcloud preview with effects

DVPrelightPT
- split up point light from DVPrelight
- fix point light duplicated algorithm

DVPfresnel
- not required link camera anymore
- fix unpremult process, the result was too dark

DVPToImage
- remove all metadata created from Deep2VP
- same as Deep2VP node color

new nodes :
DVPColorCorrect

added shaders :
DVP Shader
DVP Toon Shader\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Input { inputs 0 name deep xpos 508 ypos -123 } DeepExpression { chans1 deep name spacer xpos 508 ypos -43 } ModifyMetaData { metadata { {remove DVPmatte ""} {remove DVPcamMTX ""} {remove DVPcamAspect ""} {remove DVPcamWin ""} } name DVPmd label "kill metadata" xpos 508 ypos 37 } Dot { name Dot5 xpos 542 ypos 117 } set Nff515c00 [stack 0] Dot { name Dot2 xpos 704 ypos 117 } set Nff515800 [stack 0] Dot { name Dot1 xpos 973 ypos 117 } set Nff515400 [stack 0] DeepExpression { chans1 none rgba.red deepNormal.red rgba.green deepNormal.green rgba.blue deepNormal.blue rgba.alpha "alpha <= 0 ? 0 : 1" name DeepExpression2 xpos 1051 ypos 189 } push $Nff515400 DeepExpression { chans1 none rgba.red deepNormal.red rgba.green deepNormal.green rgba.blue deepNormal.blue rgba.alpha "alpha <= 0 ? 1 : 0" name DeepExpression3 xpos 939 ypos 191 } Switch { inputs 2 which {{parent.nuke_version}} name Switch2 label nuke_ver_switch xpos 939 ypos 273 } DeepToImage { name DeepToImage3 xpos 939 ypos 367 } Dot { name Dot3 xpos 973 ypos 531 } push $Nff515800 DeepExpression { chans1 none rgba.red deepPosition.red rgba.green deepPosition.green rgba.blue deepPosition.blue rgba.alpha "alpha <= 0 ? 0 : 1" name DeepExpression1 xpos 774 ypos 190 } push $Nff515800 DeepExpression { chans1 none rgba.red deepPosition.red rgba.green deepPosition.green rgba.blue deepPosition.blue rgba.alpha "alpha <= 0 ? 1 : 0" name DeepExpression15 xpos 670 ypos 191 } Switch { inputs 2 which {{parent.nuke_version}} name Switch1 label nuke_ver_switch xpos 670 ypos 273 } DeepToImage { name DeepToImage2 xpos 670 ypos 367 } Dot { name Dot6 xpos 704 ypos 449 } push $Nff515c00 DeepToImage { name DeepToImage1 xpos 508 ypos 191 } add_layer {deepPosition deepPosition.red deepPosition.green deepPosition.blue deepPosition.alpha} add_layer {deepNormal deepNormal.red deepNormal.green deepNormal.blue deepNormal.alpha} add_layer {deepRawColor deepRawColor.red deepRawColor.green deepRawColor.blue deepRawColor.alpha} Remove { channels deepPosition channels2 deepNormal channels3 deepRawColor name Remove1 xpos 508 ypos 351 } ShuffleCopy { inputs 2 red red green green blue blue alpha black out deepPosition name ShuffleCopy1 xpos 508 ypos 445 disable {{!parent.keep_deepPosition}} } ShuffleCopy { inputs 2 red red green green blue blue alpha black out deepNormal name ShuffleCopy2 xpos 508 ypos 527 disable {{!parent.keep_deepNormal}} } Output { name Output1 xpos 508 ypos 607 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DVP_Shader.gizmo ================================================ Group { inputs 0 name DVP_Shader onCreate "\nthisGRP = nuke.thisGroup()\nfor knob in thisGRP.knobs() :\n try :\n if thisGRP\[knob].label()\[:19] == 'panel dropped state' :\n thisGRP.removeKnob( nuke.thisNode()\[knob] )\n except :\n pass\n" tile_color 0x2333ff addUserKnob {20 tab_general l General} addUserKnob {18 diffuse} diffuse 0.18 addUserKnob {7 specular t "Define the intensity of specular."} specular 0.5 addUserKnob {7 glossiness t "Define the area of glossiness."} glossiness 0.1 addUserKnob {26 ""} addUserKnob {26 title_preview l "" +STARTLINE T Preview} addUserKnob {12 posXY l "light position"} posXY {360 360} addUserKnob {18 bgcolor l "bg color"} bgcolor {0.05 0.1 0.2} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 4.0} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-13} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"Deep2VPosition (Deep2VP)
- added camera setting to metadata
- remove bake and copy buttons
- rename to Deep2VP
- generate/select/import deepNormal in this node
- added generate normal in deep, still keep the previous one.

DVPort (DVPortal)
- renamed to DVPortal

DVPmatte
- removed 'option' knob, 2D matte can use 'open matte' instead
- open matte can choose show matte or color

DVPattern
- internal setup same as DVPmatte
- added rotation knob
- support 'open matte'

DVProjection
- remove bake and copy buttons
- remove all metadata created from Deep2VP

DVPsetLight
- added shader setting and input shader
- not required link camera anymore
- removed deepNormal setup, moved to Deep2VP node

DVPscene
- added multiple output options
- remove all metadata created from DVP's lighting system

DVPrelight
- added specular setup
- added toon shade setup
- fix pointcloud preview with effects

DVPrelightPT
- split up point light from DVPrelight
- fix point light duplicated algorithm

DVPfresnel
- not required link camera anymore
- fix unpremult process, the result was too dark

DVPToImage
- remove all metadata created from Deep2VP
- same as Deep2VP node color

new nodes :
DVPColorCorrect

added shaders :
DVP Shader
DVP Toon Shader\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } CheckerBoard2 { inputs 0 format "512 512 0 0 512 512 1 square_512" name CheckerBoard2 xpos 202 ypos 687 } Grade { white {{parent.bgcolor} {parent.bgcolor} {parent.bgcolor} {curve}} add 0.001 white_clamp true name bgcolor xpos 202 ypos 815 } Camera2 { inputs 0 display off selectable false translate {0 0 6} haperture 22 vaperture 22 name cam xpos -147 ypos -132 } Constant { inputs 0 color {0.18 0.18 0.18 1} name Constant1 xpos -25 ypos -354 } Sphere { display off selectable false name Sphere1 xpos -25 ypos -226 } Reformat { inputs 0 format "512 512 0 0 512 512 1 square_512" name res xpos 133 ypos -117 } add_layer {deepPosition deepPosition.red deepPosition.green deepPosition.blue deepPosition.alpha} add_layer {deepNormal deepNormal.red deepNormal.green deepNormal.blue deepNormal.alpha} ScanlineRender { inputs 3 conservative_shader_sampling false antialiasing low stochastic_samples 3 motion_vectors_type distance MB_channel none output_shader_vectors true P_channel deepPosition N_channel deepNormal name ScanlineRender1 xpos -25 ypos -111 } ModifyMetaData { metadata { {set DVPshader 1} {set sDiffuse "\[value diffuseRGB]"} {set sSpecular "\[value parent.specular]"} {set sGlossiness "\[value parent.glossiness]"} } name stShaderData xpos -25 ypos -11 addUserKnob {20 User} addUserKnob {13 diffuseRGB} diffuseRGB {{parent.diffuse.r} {parent.diffuse.g} {parent.diffuse.b}} } Unpremult { name Unpremult1 xpos -25 ypos 105 } set N4e993000 [stack 0] Dot { name Dot2 xpos 138 ypos 108 } Dot { name Dot1 xpos 138 ypos 656 } push $N4e993000 Dot { name Dot5 xpos -230 ypos 108 } Shuffle { in deepNormal in2 alpha alpha red2 name Shuffle1 xpos -264 ypos 182 } Dot { name Dot4 xpos -230 ypos 253 } set N4e991c00 [stack 0] Dot { name Dot3 xpos -394 ypos 253 } Expression { temp_name0 u temp_expr0 "r*invMTXSpec.invMatrix.0 + g*invMTXSpec.invMatrix.1 + b*invMTXSpec.invMatrix.2" temp_name1 v temp_expr1 "r*invMTXSpec.invMatrix.3 + g*invMTXSpec.invMatrix.4 + b*invMTXSpec.invMatrix.5" expr0 0 expr1 0 expr2 "clamp( 1-sqrt( pow2(u*1/blend.x) + pow2(v*1/blend.y) ) )" name Expression2 xpos -428 ypos 327 addUserKnob {20 User} addUserKnob {12 blend} blend {{"invMTXSpec.invMatrix.1<1 && invMTXSpec.invMatrix.1>-1 ? 1 : abs( invMTXSpec.invMatrix.1 )"} {"invMTXSpec.invMatrix.3<1 && invMTXSpec.invMatrix.3>-1 ? 1 : abs( invMTXSpec.invMatrix.3 )"}} } Expression { expr2 "( ( cos( (1-b) * (pi/2) ) ** (1/\[value gloss]) * 2 ) ** (1/(1-\[value spec])) ) * (1/2) * spec" name Expression14 xpos -428 ypos 407 addUserKnob {20 User} addUserKnob {7 spec} spec {{"clamp(\[metadata sSpecular]) * 0.99"}} addUserKnob {7 gloss} gloss {{"clamp(\[metadata sGlossiness])"}} } Shuffle { in2 alpha red blue green blue alpha red2 name Shuffle4 xpos -428 ypos 487 } Premult { name Premult4 xpos -428 ypos 567 } push $N4e991c00 ColorMatrix { matrix { {{ax.world_matrix.0} {ax.world_matrix.1} {ax.world_matrix.2}} {{ax.world_matrix.4} {ax.world_matrix.5} {ax.world_matrix.6}} {{ax.world_matrix.8} {ax.world_matrix.9} {ax.world_matrix.10}} } invert true name ColorMatrix1 xpos -264 ypos 327 } Shuffle { red blue green blue alpha blue name Shuffle2 xpos -264 ypos 407 } Expression { expr0 "r * \[value parent.diffuse.r]" expr1 "g * \[value parent.diffuse.g]" expr2 "b * \[value parent.diffuse.b]" expr3 1 name Expression1 xpos -264 ypos 487 } push $N4e993000 Merge2 { inputs 2 operation multiply name Merge1 xpos -25 ypos 487 } Merge2 { inputs 2 operation plus name Merge5 xpos -25 ypos 567 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos -25 ypos 647 } Premult { name Premult1 xpos -25 ypos 739 } Merge2 { inputs 2 operation under name Merge2 xpos -25 ypos 815 } Crop { box {0 0 {res.width} {res.height}} name Crop1 xpos -25 ypos 895 } Output { name Output1 xpos -25 ypos 975 } ColorMatrix { inputs 0 matrix { {{(1+ax.world_matrix.0)/2} {ax.world_matrix.1/2} {ax.world_matrix.2/2}} {{ax.world_matrix.4/2} {(1+ax.world_matrix.5)/2} {ax.world_matrix.6/2}} {{ax.world_matrix.8/2} {ax.world_matrix.9/2} {(1+ax.world_matrix.10)/2}} } name vecA xpos -426 ypos -188 } ColorMatrix { inputs 0 matrix { {{vecA.matrix.0/vecS.x} {vecA.matrix.1/vecS.y} {vecA.matrix.2/vecS.z}} {{vecA.matrix.3/vecS.x} {vecA.matrix.4/vecS.y} {vecA.matrix.5/vecS.z}} {{vecA.matrix.6/vecS.x} {vecA.matrix.7/vecS.y} {vecA.matrix.8/vecS.z}} } name vecR xpos -428 ypos -136 addUserKnob {20 User} addUserKnob {13 vecS} vecS {{"sqrt( pow2(vecA.matrix.0) + pow2(vecA.matrix.3) + pow2(vecA.matrix.6) )"} {"sqrt( pow2(vecA.matrix.1) + pow2(vecA.matrix.4) + pow2(vecA.matrix.7) )"} {"sqrt( pow2(vecA.matrix.2) + pow2(vecA.matrix.5) + pow2(vecA.matrix.8) )"}} } Group { inputs 0 name invMTXSpec tile_color 0x337f4cff xpos -427 ypos -83 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path vecR.matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2011-11-28} addUserKnob {26 l_CHANGELOG l Changelog T "v1.0\n- reveal the calculate output of \n inverse matrix which is c44matrix\n and colormatrix doesn't show\n "} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {3 4 5} {6 7 8} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output selected true xpos 186 ypos 33 } end_group Axis { inputs 0 display off selectable false rotate {{"clamp(parent.posXY.y/res.height) * -180 + 90"} {"clamp(parent.posXY.x/res.width) * 180 - 90"} 0} name ax xpos -419 ypos -304 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DVP_ToonShader.gizmo ================================================ Group { inputs 0 name DVP_ToonShader onCreate "\nthisGRP = nuke.thisGroup()\nfor knob in thisGRP.knobs() :\n try :\n if thisGRP\[knob].label()\[:19] == 'panel dropped state' :\n thisGRP.removeKnob( nuke.thisNode()\[knob] )\n except :\n pass\n" tile_color 0x2333ff addUserKnob {20 tab_general l General} addUserKnob {20 title_global l Global n 1} addUserKnob {7 tone_sharpness l "tone sharpness" t "This control the sharpness of the tone shading and specular defination."} tone_sharpness 0.99 addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {20 grp_diffuse l Diffuse n 1} addUserKnob {18 diffuse} diffuse 1 addUserKnob {4 toon_style l style t "The style setting will only apply on the interaction of 2 or more lights." M {average "color burn" "linear burn" difference exclusion geometric "soft light" "hard light" "vivid light" "pin light" max min multiply overlay plus screen color}} toon_style max addUserKnob {3 tone_shading l "tone shading" t "Tone shading numbers, which is how many shading layers project from the light."} tone_shading 2 addUserKnob {7 tone_ratio l "tone ratio" t "Adjust the ratio of the illuminate area and shading." R 0.1 10} tone_ratio 1 addUserKnob {20 endGroup n -1} addUserKnob {20 title_spec l Specular n 1} addUserKnob {7 specular t "The opacity of the specular projected on the surface."} addUserKnob {7 glossiness t "The size of specular area."} addUserKnob {41 replace_specColor l "replace specular color" t "Specular color is from the light by default. This checkbox provide user to define the custom specular color." T menu01.replace_specColor} addUserKnob {18 specular_color l "specular color" +DISABLED} specular_color 1 addUserKnob {20 grp_contour l Contour n 1} addUserKnob {7 contour_size l size t "Contour size. 0 is none, 1 is the max (fully cover the object)."} contour_size 0.2 addUserKnob {18 contour_color l color} contour_color {0 0 0} addUserKnob {20 endGroup_3 l endGroup n -1} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {26 title_preview l "" +STARTLINE T Preview} addUserKnob {12 posXY l "light position"} posXY {360 360} addUserKnob {18 bgcolor l "bg color"} bgcolor {0.05 0.1 0.2} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 4.0} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-13} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"Deep2VPosition (Deep2VP)
- added camera setting to metadata
- remove bake and copy buttons
- rename to Deep2VP
- generate/select/import deepNormal in this node
- added generate normal in deep, still keep the previous one.

DVPort (DVPortal)
- renamed to DVPortal

DVPmatte
- removed 'option' knob, 2D matte can use 'open matte' instead
- open matte can choose show matte or color

DVPattern
- internal setup same as DVPmatte
- added rotation knob
- support 'open matte'

DVProjection
- remove bake and copy buttons
- remove all metadata created from Deep2VP

DVPsetLight
- added shader setting and input shader
- not required link camera anymore
- removed deepNormal setup, moved to Deep2VP node

DVPscene
- added multiple output options
- remove all metadata created from DVP's lighting system

DVPrelight
- added specular setup
- added toon shade setup
- fix pointcloud preview with effects

DVPrelightPT
- split up point light from DVPrelight
- fix point light duplicated algorithm

DVPfresnel
- not required link camera anymore
- fix unpremult process, the result was too dark

DVPToImage
- remove all metadata created from Deep2VP
- same as Deep2VP node color

new nodes :
DVPColorCorrect

added shaders :
DVP Shader
DVP Toon Shader\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -845 ypos 13 bdwidth 244 bdheight 123 } CheckerBoard2 { inputs 0 format "512 512 0 0 512 512 1 square_512" name CheckerBoard2 xpos 202 ypos 983 } Grade { white {{parent.bgcolor} {parent.bgcolor} {parent.bgcolor} {curve}} add 0.001 white_clamp true name bgcolor xpos 202 ypos 1111 } Camera2 { inputs 0 display off selectable false translate {0 0 6} haperture 22 vaperture 22 name cam xpos -147 ypos 49 } Constant { inputs 0 color {0.18 0.18 0.18 1} name Constant1 xpos -25 ypos -173 } Sphere { display off selectable false name Sphere1 xpos -25 ypos -45 } Reformat { inputs 0 format "512 512 0 0 512 512 1 square_512" name res xpos 185 ypos 64 } add_layer {deepPosition deepPosition.red deepPosition.green deepPosition.blue deepPosition.alpha} add_layer {deepNormal deepNormal.red deepNormal.green deepNormal.blue deepNormal.alpha} ScanlineRender { inputs 3 conservative_shader_sampling false antialiasing low motion_vectors_type distance MB_channel none output_shader_vectors true P_channel deepPosition N_channel deepNormal name ScanlineRender1 xpos -25 ypos 70 } ModifyMetaData { metadata { {set DVPshader 2} {set sLayers "\[value parent.tone_shading]"} {set sSharpness "\[value parent.tone_sharpness]"} {set sRatio "\[value parent.tone_ratio]"} {set sStyle "\[value style]"} {set sStatus 0} {set sDiffuse "\[value diffuseRGB]"} {set sGlossiness "\[value parent.glossiness]"} {set sSpecular "\[value parent.specular]"} {set sSpecReplace "\[value reSColor]"} {set sSpecColor "\[value specRGB]"} {set sContourSize "\[value parent.contour_size]"} {set sContourColor "\[value contourRGB]"} } name stShaderData xpos -25 ypos 170 addUserKnob {20 User} addUserKnob {3 style} style {{parent.toon_style}} addUserKnob {13 diffuseRGB} diffuseRGB {{parent.diffuse.r} {parent.diffuse.g} {parent.diffuse.b}} addUserKnob {3 reSColor} reSColor {{parent.replace_specColor}} addUserKnob {13 specRGB} specRGB {{parent.specular_color.r} {parent.specular_color.g} {parent.specular_color.b}} addUserKnob {13 contourRGB} contourRGB {{parent.contour_color.r} {parent.contour_color.g} {parent.contour_color.b}} } Unpremult { name Unpremult1 xpos -25 ypos 250 } set N4ead8800 [stack 0] Dot { name Dot2 xpos 138 ypos 253 } Dot { name Dot1 xpos 138 ypos 952 } push $N4ead8800 Shuffle { in deepNormal in2 alpha alpha red2 name Shuffle1 xpos -135 ypos 250 } Dot { name Dot6 xpos -230 ypos 253 } set N4ea63400 [stack 0] Dot { name Dot5 xpos -619 ypos 253 } Expression { temp_name0 contourSize temp_expr0 "b < clamp(\[metadata sContourSize]+0) ? 1 : 1-clamp( (b-clamp(\[metadata sContourSize]+0)) * (1/0.01) )" expr0 "contourColor.x*contourSize * alpha" expr1 "contourColor.y*contourSize * alpha" expr2 "contourColor.z*contourSize * alpha" expr3 contourSize name Expression5 xpos -653 ypos 511 addUserKnob {20 User} addUserKnob {13 contourColor} contourColor {{"\[lrange \[split \[metadata sContourColor] \" \"] 0 0]+0"} {"\[lrange \[split \[metadata sContourColor] \" \"] 1 1]+0"} {"\[lrange \[split \[metadata sContourColor] \" \"] 2 2]+0"}} } Dot { name Dot7 xpos -619 ypos 831 } push $N4ea63400 ColorMatrix { matrix { {{ax.world_matrix.0} {ax.world_matrix.1} {ax.world_matrix.2}} {{ax.world_matrix.4} {ax.world_matrix.5} {ax.world_matrix.6}} {{ax.world_matrix.8} {ax.world_matrix.9} {ax.world_matrix.10}} } invert true name ColorMatrix1 xpos -264 ypos 330 } Dot { name Dot3 xpos -230 ypos 433 } set N4ea62000 [stack 0] Dot { name Dot4 xpos -423 ypos 433 } Expression { temp_name0 u temp_expr0 "r * blend.x" temp_name1 v temp_expr1 "g * blend.y" expr0 0 expr1 0 expr2 "clamp( ( 1 - sqrt( pow2(u) + pow2(v) ) ) * b )" name Expression3 xpos -457 ypos 507 addUserKnob {20 User} addUserKnob {12 blend} blend {{"( (90-abs( ax.rotate.x ) ) / 90 )"} {"( (90-abs( ax.rotate.y ) ) / 90)"}} } Expression { temp_name0 s01 temp_expr0 "( cos((1-b)*(pi/2)) ** (1/\[value gloss]) ) * 2" temp_name1 lgt temp_expr1 "int(s01) * clamp( (s01%1) * (1/(1-clamp(\[metadata sSharpness]))) ) * \[value spec]" expr0 "\[metadata sSpecReplace] ? lgt * \[value specColor.x] : lgt" expr1 "\[metadata sSpecReplace] ? lgt * \[value specColor.y] : lgt" expr2 "\[metadata sSpecReplace] ? lgt * \[value specColor.z] : lgt" name Expression2 xpos -457 ypos 587 addUserKnob {20 User} addUserKnob {7 spec} spec {{"clamp(\[metadata sSpecular])"}} addUserKnob {7 gloss} gloss {{"clamp(\[metadata sGlossiness])"}} addUserKnob {13 specColor} specColor {{"\[metadata sSpecReplace]+0 ? \[lrange \[split \[metadata sSpecColor] \" \"] 0 0]+0 : 1"} {"\[metadata sSpecReplace]+0 ? \[lrange \[split \[metadata sSpecColor] \" \"] 1 1]+0 : 1"} {"\[metadata sSpecReplace]+0 ? \[lrange \[split \[metadata sSpecColor] \" \"] 2 2]+0 : 1"}} } Premult { name Premult4 xpos -457 ypos 714 } push $N4ea62000 Shuffle { red blue green blue alpha blue name Shuffle2 xpos -264 ypos 525 } Expression { temp_name0 celShade temp_expr0 "clamp(red) ** \[metadata sRatio] * (\[value toonLayers]+1)" temp_name1 lgt temp_expr1 "( (int(celShade)-1)/\[value toonLayers]) + (clamp( (celShade%1) * (1/(1-clamp(\[metadata sSharpness]))) ) * (1/\[value toonLayers]) )" expr0 "lgt * \[value parent.diffuse.r]" expr1 "lgt * \[value parent.diffuse.g]" expr2 "lgt * \[value parent.diffuse.b]" name Expression1 xpos -264 ypos 605 addUserKnob {20 User} addUserKnob {3 toonLayers} toonLayers {{"\[metadata sLayers] <= 1 ? 1 : \[metadata sLayers]"}} } push $N4ead8800 Merge2 { inputs 2 operation multiply name Merge1 xpos -25 ypos 605 } Merge2 { inputs 2 operation max name Merge5 xpos -25 ypos 714 } Merge2 { inputs 2 name Merge3 xpos -25 ypos 828 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos -25 ypos 943 } Premult { name Premult1 xpos -25 ypos 1035 } Merge2 { inputs 2 operation under name Merge2 xpos -25 ypos 1111 } Crop { box {0 0 {res.width} {res.height}} name Crop1 xpos -25 ypos 1191 } Output { name Output1 xpos -25 ypos 1331 } Axis { inputs 0 display off selectable false rotate {{"clamp(parent.posXY.y/res.height) * -180 + 90"} {"clamp(parent.posXY.x/res.width) * 180 - 90"} 0} name ax xpos -452 ypos 52 } NoOp { inputs 0 name menu01 knobChanged "\nnuke.thisGroup()\['specular_color'].setEnabled(nuke.thisGroup()\['replace_specColor'].value())\n" xpos -762 ypos 95 addUserKnob {20 User} addUserKnob {6 replace_specColor l "replace specular color" +STARTLINE} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DVPattern.gizmo ================================================ Group { name DVPattern tile_color 0x597fff label "node type : \[value node_type]\noperation : \[value matte_op]\nDeep Output" addUserKnob {20 tab_general l General} addUserKnob {26 title_matte l "matte"} addUserKnob {41 pattern_type l "pattern type" t "Select parttern type on world space position.\n\nfBm : octaves, lacunarity, gain, gamma setting available.\nturbulence : octaves, lacunarity, gain, gamma setting available.\nnoise : gain, gamma setting available.\nrandom : gain, gamma setting available.\nstripes : xyz can be enable separate. gain, gamma setting available.\nripple : gain, gamma setting available.\nrays : gain, gamma, number of rays setting available." T menu01.pattern_type} addUserKnob {6 invert_pattern l "invert pattern" t "Invert the matte pattern." -STARTLINE} addUserKnob {41 node_type l "node type" t "final matte\nPremult all the mattes in the DVPmatte and DVPattern stack to get the final matte.\n\nopen matte\nKeep the matte and pass along to downstream for multi mattes and DVPColorCorrect purpose. It will only premult RGB for 2D preview." T menu02.node_type} addUserKnob {6 show_color l "show color" -STARTLINE +HIDDEN} show_color true addUserKnob {26 remarks l * T "first matte node should use 'union' operation."} addUserKnob {4 matte_op l operation t "a : this matte\nb : input matte\n\ndivide\ta/b\nfrom\tb-a\nin\tab\nmax\tmax(a,b)\nmin\tmin(a,b)\nminus\ta-b\nmultiply\ta*b\nout\ta(1-b)\nplus\ta+b\nstencil\tb(1-a)\nunion\ta+b-ab\nxor\ta+b-2ab" M {divide from in max min minus multiply out plus stencil union xor "" "" "" "" "" ""}} matte_op union addUserKnob {26 title_transform l "transform"} addUserKnob {41 pat_translate l translate T ax.translate} addUserKnob {41 snap_menu l @AxisIcon -STARTLINE T ax.snap_menu} addUserKnob {41 pat_rotate l rotate T ax.rotate} addUserKnob {41 pat_scaling l scale T ax.scaling} addUserKnob {41 pat_uniform_scale l "uniform scale" T ax.uniform_scale} addUserKnob {26 spacer_1 l "" +STARTLINE T
} addUserKnob {6 stripes_x l x +HIDDEN +STARTLINE} stripes_x true addUserKnob {6 stripes_y l y -STARTLINE +HIDDEN} stripes_y true addUserKnob {6 stripes_z l z -STARTLINE +HIDDEN} stripes_z true addUserKnob {3 octaves} octaves 4 addUserKnob {7 lacunarity R 1 10} lacunarity 2 addUserKnob {7 gain R 0.1 2} gain 1 addUserKnob {7 gamma R 0 2} gamma 1 addUserKnob {3 rays l "numbers of rays" +HIDDEN} rays 10 addUserKnob {26 ""} addUserKnob {7 mix} mix 1 addUserKnob {26 ""} addUserKnob {20 grp_3dpreview l "Pointcloud preview" n 1} grp_3dpreview 0 addUserKnob {4 display_ptc_type l "display type" t "When you open this node's panel, you can check the pointcloud under 3D view.\n\nnone\nwill not show the pointcloud in 3D\n\nraw pointcloud\nshow the pointcloud from input data, without any effects from this node\n\nwith pattern applied\nThis can show the instant result of the pattern. Since it feedback in real time, it might slow down the progress in 3D space." M {"no pointcloud preview" "raw pointcloud" "with pattern applied" "" "" ""}} display_ptc_type "raw pointcloud" addUserKnob {41 detail l "point detail" T deepPositionToPoints.detail} addUserKnob {41 pointSize l "point size" T deepPositionToPoints.pointSize} addUserKnob {20 endGroup n -1} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 4.0} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-13} addUserKnob {22 btn_CHANGELOG l Changlelog T "log = \"Deep2VPosition (Deep2VP)
- added camera setting to metadata
- remove bake and copy buttons
- rename to Deep2VP
- generate/select/import deepNormal in this node
- added generate normal in deep, still keep the previous one.

DVPort (DVPortal)
- renamed to DVPortal

DVPmatte
- removed 'option' knob, 2D matte can use 'open matte' instead
- open matte can choose show matte or color

DVPattern
- internal setup same as DVPmatte
- added rotation knob
- support 'open matte'

DVProjection
- remove bake and copy buttons
- remove all metadata created from Deep2VP

DVPsetLight
- added shader setting and input shader
- not required link camera anymore
- removed deepNormal setup, moved to Deep2VP node

DVPscene
- added multiple output options
- remove all metadata created from DVP's lighting system

DVPrelight
- added specular setup
- added toon shade setup
- fix pointcloud preview with effects

DVPrelightPT
- split up point light from DVPrelight
- fix point light duplicated algorithm

DVPfresnel
- not required link camera anymore
- fix unpremult process, the result was too dark

DVPToImage
- remove all metadata created from Deep2VP
- same as Deep2VP node color

new nodes :
DVPColorCorrect

added shaders :
DVP Shader
DVP Toon Shader\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "Dont touch" note_font_size 42 xpos -1637 ypos -208 bdwidth 368 bdheight 186 } BackdropNode { inputs 0 name BackdropNode2 xpos -1636 ypos 2 bdwidth 368 bdheight 248 } Input { inputs 0 name deep xpos -784 ypos -189 } Dot { name Dot4 xpos -750 ypos -109 } set N5d268c00 [stack 0] add_layer {deepRawColor deepRawColor.red deepRawColor.green deepRawColor.blue deepRawColor.alpha} DeepExpression { chans0 {deepRawColor.red deepRawColor.green deepRawColor.blue none} chans1 none deepRawColor.red "deepRawColor.red * (1/alpha)" deepRawColor.green "deepRawColor.green * (1/alpha)" deepRawColor.blue "deepRawColor.blue * (1/alpha)" name DeepExpression27 label "unpremult exisiting deepRawColor" xpos -590 ypos -35 } push $N5d268c00 DeepExpression { chans0 deepRawColor chans1 none deepRawColor.red "red * (1/alpha)" deepRawColor.green "green * (1/alpha)" deepRawColor.blue "blue * (1/alpha)" deepRawColor.alpha 0 name DeepExpression21 label "shuffle unpremult RGB to deepRawColor" xpos -784 ypos -35 } Switch { inputs 2 which {{"\[metadata DVPmatte]+0==0 || \[metadata DVPmatte]+0==2 ? 0 : 1"}} name Switch5 label "if upstream cc or open matte" xpos -784 ypos 44 } Dot { name Dot5 xpos -750 ypos 226 } set N5d17f800 [stack 0] DeepExpression { chans1 none rgba.red alpha rgba.green 0 rgba.blue 0 rgba.alpha 1 name DeepExpression29 label "shuffle alpha to red channel\nand unpremult the data with alpha 1" xpos -784 ypos 310 } Dot { name Dot2 xpos -750 ypos 435 } set N5d17f000 [stack 0] add_layer {deepPosition deepPosition.red deepPosition.green deepPosition.blue deepPosition.alpha} DeepExpression { chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 none deepPosition.alpha "clamp( ( ( sin( atan(\[value globalTCL.px], \[value globalTCL.pz]) * \[value parent.rays] + atan(\[value globalTCL.px], \[value globalTCL.py]) * \[value parent.rays] + atan(\[value globalTCL.py], \[value globalTCL.pz]) * \[value parent.rays] ) +1) /2 ) * \[value gain])" name DeepExpression12 label rays xpos -417 ypos 514 } push $N5d17f000 DeepExpression { chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 none deepPosition.alpha "clamp ( ( ( sin( sqrt( pow2(\[value globalTCL.px]) + pow2(\[value globalTCL.py]) + pow2(\[value globalTCL.pz]) ) ) +1) /2 ) * \[value gain] )" name DeepExpression11 label ripple xpos -540 ypos 520 } push $N5d17f000 DeepExpression { temp_name0 pnx temp_expr0 "\[value status_x] == 0 ? 0 : ( sin( \[value globalTCL.px] ) + 1 ) / 2" temp_name1 pny temp_expr1 "\[value status_y] == 0 ? 0 : ( sin( \[value globalTCL.py] ) + 1 ) / 2" temp_name2 pnz temp_expr2 "\[value status_z] == 0 ? 0 : ( sin( \[value globalTCL.pz] ) + 1 ) / 2" chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 none deepPosition.alpha "max( clamp( pnx * \[value gain] ), clamp( pny * \[value gain] ), clamp( pnz * \[value gain] ) )" name DeepExpression9 label strip xpos -662 ypos 517 addUserKnob {20 User} addUserKnob {7 status_x} status_x {{parent.stripes_x}} addUserKnob {7 status_y} status_y {{parent.stripes_y}} addUserKnob {7 status_z} status_z {{parent.stripes_z}} } push $N5d17f000 DeepExpression { chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 none deepPosition.alpha "clamp( random(\[value globalTCL.px], \[value globalTCL.py], \[value globalTCL.pz]) * \[value gain] )" name DeepExpression1 label random xpos -784 ypos 521 } push $N5d17f000 DeepExpression { chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 none deepPosition.alpha "clamp( (noise(\[value globalTCL.px], \[value globalTCL.py], \[value globalTCL.pz])+0.5) * \[value gain] )" name DeepExpression2 label noise xpos -902 ypos 524 } push $N5d17f000 DeepExpression { chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 none deepPosition.alpha "clamp( turbulence(\[value globalTCL.px], \[value globalTCL.py], \[value globalTCL.pz], \[value octaves], \[value lacunarity], \[value gain]/2) )" name DeepExpression6 label turbulence xpos -1026 ypos 522 } push $N5d17f000 DeepExpression { chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 none deepPosition.alpha "clamp( fBm(\[value globalTCL.px], \[value globalTCL.py], \[value globalTCL.pz], \[value octaves], \[value lacunarity], \[value gain]/2) )" name DeepExpression8 label fBm xpos -1176 ypos 523 } Switch { inputs 7 which {{pattern_type}} name Switch1 xpos -784 ypos 636 } DeepExpression { chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 none deepPosition.alpha "1 - deepPosition.alpha" name DeepExpression5 label invert xpos -784 ypos 716 disable {{!parent.invert_pattern}} } DeepExpression { chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 none deepPosition.alpha "pow( deepPosition.alpha , 1 / \[value parent.gamma] )" name DeepExpression13 label gamma xpos -784 ypos 808 } Dot { name Dot7 xpos -750 ypos 976 } set N5d17c400 [stack 0] DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "a + b - 2 * a * b" name DeepExpression16 label xor xpos -179 ypos 1111 } push $N5d17c400 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "\[value mdChk] ? a + b - a * b : a" name DeepExpression15 label union xpos -309 ypos 1115 addUserKnob {20 User} addUserKnob {3 mdChk} mdChk {{"\[metadata DVPmatte]+0"}} } push $N5d17c400 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "b * ( 1 - a )" name DeepExpression4 label stencil xpos -438 ypos 1115 } push $N5d17c400 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "a + b" name DeepExpression7 label plus xpos -551 ypos 1113 } push $N5d17c400 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "a * ( 1 - b )" name DeepExpression17 label out xpos -668 ypos 1118 } push $N5d17c400 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "a * b" name DeepExpression18 label multiply xpos -784 ypos 1120 } push $N5d17c400 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "a - b" name DeepExpression19 label minus xpos -895 ypos 1121 } push $N5d17c400 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "min( a , b )" name DeepExpression20 label min xpos -1010 ypos 1124 } push $N5d17c400 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "max( a , b )" name DeepExpression22 label max xpos -1107 ypos 1127 } push $N5d17c400 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "a * b" name DeepExpression23 label in xpos -1202 ypos 1124 } push $N5d17c400 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "b - a" name DeepExpression24 label from xpos -1298 ypos 1126 } push $N5d17c400 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "a / b" name DeepExpression25 label divide xpos -1399 ypos 1125 } Switch { inputs 12 which {{parent.matte_op}} name Switch2 label "select operations" xpos -784 ypos 1331 } DeepExpression { chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "clamp( deepRawColor.alpha)" name DeepExpression30 label "clamp the final matte" xpos -784 ypos 1423 } Dot { name Dot35 xpos -750 ypos 1565 } set N59544400 [stack 0] Dot { name Dot37 xpos -587 ypos 1565 } DeepExpression { chans1 {deepRawColor.red deepRawColor.green deepRawColor.blue none} rgba.red "\[value show_color] ? deepRawColor.red * red * deepRawColor.alpha : red * deepRawColor.alpha" rgba.green "\[value show_color] ? deepRawColor.green * red * deepRawColor.alpha : red * deepRawColor.alpha" rgba.blue "\[value show_color] ? deepRawColor.blue * red * deepRawColor.alpha : red * deepRawColor.alpha" rgba.alpha red deepRawColor.red "deepRawColor.red * red" deepRawColor.green "deepRawColor.green * red" deepRawColor.blue "deepRawColor.blue * red" name DeepExpression26 label "show matte or color\nnot alpha" xpos -621 ypos 1726 addUserKnob {20 User} addUserKnob {3 show_color} show_color {{parent.show_color}} } ModifyMetaData { metadata { {set DVPmatte 1} } name DVPmatteMD02 label open xpos -621 ypos 2013 } Dot { name Dot36 xpos -587 ypos 2142 } push $N59544400 DeepExpression { chans1 deepRawColor rgba.red "deepRawColor.red * deepRawColor.alpha * red" rgba.green "deepRawColor.green * deepRawColor.alpha * red" rgba.blue "deepRawColor.blue * deepRawColor.alpha * red" rgba.alpha "deepRawColor.alpha * red" deepRawColor.red "deepRawColor.red * deepRawColor.alpha * red" deepRawColor.green "deepRawColor.green * deepRawColor.alpha * red" deepRawColor.blue "deepRawColor.blue * deepRawColor.alpha * red" deepRawColor.alpha "deepRawColor.alpha * red" name DeepExpression28 label "premult color\nand alpha" xpos -784 ypos 1733 } DeepExpression { chans0 none chans1 deep deep.front "deepRawColor.alpha <= 0 ? -1 : deep.front" deep.back "deepRawColor.alpha <= 0 ? -1 : deep.back" name DeepExpression41 label "alpha check" xpos -784 ypos 1831 } DeepCrop { use_znear false zfar 0 outside_zrange true bbox {0 0 1 1} use_bbox false name DeepCrop3 label "sample cleanup" xpos -784 ypos 1923 } ModifyMetaData { metadata { {set DVPmatte 0} } name DVPmatteMD01 label close xpos -784 ypos 2015 } Switch { inputs 2 which {{parent.node_type}} name Switch14 label "node type" xpos -784 ypos 2240 } Dot { name Dot1 xpos -750 ypos 2482 } set N5f015800 [stack 0] push $N5d17f800 Dot { name Dot3 xpos 250 ypos 226 } Switch { inputs 2 which {{"parent.display_ptc_type == 1 ? 0 : parent.display_ptc_type == 2 ? 1 : 0"}} name Switch8 xpos 216 ypos 2479 } Group { name DeepPositionToImage3 tile_color 0x3d99ff label "Image Output" xpos 216 ypos 2561 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T n/a} addUserKnob {26 l_DATE l "Date Modified" T 2019-05-23} addUserKnob {26 l_CHANGELOG l Changelog T "for internal use"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Input { inputs 0 name deep xpos 508 ypos -26 } Dot { name Dot5 xpos 542 ypos 31 } set N5f014800 [stack 0] DeepExpression { chans1 none rgba.red deepPosition.red rgba.green deepPosition.green rgba.blue deepPosition.blue rgba.alpha "alpha == 0 ? 0 : 1" name DeepExpression15 xpos 656 ypos 28 } DeepToImage { name DeepToImage2 xpos 656 ypos 185 } push $N5f014800 DeepToImage { name DeepToImage1 xpos 508 ypos 80 } ShuffleCopy { inputs 2 red red green green blue blue alpha black out deepPosition name ShuffleCopy1 xpos 508 ypos 185 } Output { name Output1 xpos 508 ypos 265 } end_group PositionToPoints2 { display textured render_mode off cast_shadow false receive_shadow false P_channel deepPosition detail 0.1 name deepPositionToPoints xpos 216 ypos 2657 disable {{"parent.display_ptc_type == 0 ? 1 : 0"}} } push $N5f015800 Output { name Output1 xpos -784 ypos 2733 } NoOp { inputs 0 name menu01 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['pattern_type'].getValue() == 0 or thisGRP\['pattern_type'].getValue() == 1 :\n thisGRP\['octaves'].setVisible(True)\n thisGRP\['lacunarity'].setVisible(True)\nelse :\n thisGRP\['octaves'].setVisible(False)\n thisGRP\['lacunarity'].setVisible(False)\n\nif thisGRP\['pattern_type'].getValue() == 4 :\n thisGRP\['stripes_x'].setVisible(True)\n thisGRP\['stripes_y'].setVisible(True)\n thisGRP\['stripes_z'].setVisible(True)\nelse :\n thisGRP\['stripes_x'].setVisible(False)\n thisGRP\['stripes_y'].setVisible(False)\n thisGRP\['stripes_z'].setVisible(False)\n\nif thisGRP\['pattern_type'].getValue() == 6 :\n thisGRP\['rays'].setVisible(True)\nelse :\n thisGRP\['rays'].setVisible(False)\n" xpos -1556 ypos -107 addUserKnob {20 User} addUserKnob {4 pattern_type l "pattern type" M {fBm turbulence noise random stripes ripple rays "" "" ""}} } StickyNote { inputs 0 name StickyNote2 label "open matte" xpos -622 ypos 1662 } StickyNote { inputs 0 name StickyNote1 label "final matte" xpos -787 ypos 1661 } NoOp { inputs 0 name menu02 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['node_type'].getValue() :\n thisGRP\['show_color'].setVisible( True )\nelse :\n thisGRP\['show_color'].setVisible( False )\n" xpos -1439 ypos -108 addUserKnob {20 User} addUserKnob {4 node_type l "node type" M {"final matte" "open/cc matte" "" "" "" "" "" "" "" ""}} } Group { inputs 0 name inverseMatrix tile_color 0x337f4cff xpos -1438 ypos 98 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path ax.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2011-11-28} addUserKnob {26 l_CHANGELOG l Changelog T "v1.0\n- reveal the calculate output of \n inverse matrix which is c44matrix\n and colormatrix doesn't show\n "} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output selected true xpos 186 ypos 33 } end_group NoOp { inputs 0 name globalTCL xpos -1434 ypos 161 addUserKnob {20 User} addUserKnob {1 px} px "( deepPosition.red-ax.world_matrix.3) * inverseMatrix.invMatrix.0 + (deepPosition.green-ax.world_matrix.7) * inverseMatrix.invMatrix.1 + (deepPosition.blue-ax.world_matrix.11) * inverseMatrix.invMatrix.2" addUserKnob {1 py} py "( deepPosition.red-ax.world_matrix.3) * inverseMatrix.invMatrix.3 + (deepPosition.green-ax.world_matrix.7) * inverseMatrix.invMatrix.4 + (deepPosition.blue-ax.world_matrix.11) *inverseMatrix.invMatrix.5" addUserKnob {1 pz} pz "( deepPosition.red-ax.world_matrix.3) * inverseMatrix.invMatrix.6 + (deepPosition.green-ax.world_matrix.7) * inverseMatrix.invMatrix.7 + (deepPosition.blue-ax.world_matrix.11) * inverseMatrix.invMatrix.8" } Axis { inputs 0 display off name ax xpos -1571 ypos 94 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DVPfresnel.gizmo ================================================ Group { name DVPfresnel onCreate "\nthisGRP = nuke.thisGroup()\nfor knob in thisGRP.knobs() :\n try :\n if thisGRP\[knob].label()\[:19] == 'panel dropped state' :\n thisGRP.removeKnob( nuke.thisNode()\[knob] )\n except :\n pass\n" tile_color 0x7f65ff label "Deep Output" addUserKnob {20 tab_general l General} addUserKnob {41 multiply T menu01.multiply} addUserKnob {7 exp_in l "exponential in" t "Ease out falloff from the core by exponential math." R 0.1 10} exp_in 1 addUserKnob {7 exp_out l out t "Ease in falloff from the edge by exponential math." -STARTLINE R 0.1 10} exp_out 1 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 4.0} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-13} addUserKnob {22 btn_CHANGELOG l Changlelog T "log = \"Deep2VPosition (Deep2VP)
- added camera setting to metadata
- remove bake and copy buttons
- rename to Deep2VP
- generate/select/import deepNormal in this node
- added generate normal in deep, still keep the previous one.

DVPort (DVPortal)
- renamed to DVPortal

DVPmatte
- removed 'option' knob, 2D matte can use 'open matte' instead
- open matte can choose show matte or color

DVPattern
- internal setup same as DVPmatte
- added rotation knob
- support 'open matte'

DVProjection
- remove bake and copy buttons
- remove all metadata created from Deep2VP

DVPsetLight
- added shader setting and input shader
- not required link camera anymore
- removed deepNormal setup, moved to Deep2VP node

DVPscene
- added multiple output options
- remove all metadata created from DVP's lighting system

DVPrelight
- added specular setup
- added toon shade setup
- fix pointcloud preview with effects

DVPrelightPT
- split up point light from DVPrelight
- fix point light duplicated algorithm

DVPfresnel
- not required link camera anymore
- fix unpremult process, the result was too dark

DVPToImage
- remove all metadata created from Deep2VP
- same as Deep2VP node color

new nodes :
DVPColorCorrect

added shaders :
DVP Shader
DVP Toon Shader\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x7f7f7fff label bin note_font_size 42 xpos -608 ypos -200 bdwidth 411 bdheight 282 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0xff label "dont touch" note_font_size 42 xpos -611 ypos -435 bdwidth 416 bdheight 199 } NoOp { inputs 0 name menu01 knobChanged "\nthisN = nuke.thisNode()\nfor knob in thisN.knobs() :\n try :\n if knob.split('_')\[1] == 'panelDropped' :\n thisN.removeKnob( thisN\[knob] )\n except :\n pass\n" xpos -524 ypos -342 addUserKnob {20 User} addUserKnob {18 multiply t "Constant to multiply result by" R 0 4} multiply 1 addUserKnob {6 multiply_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Group { inputs 0 name inverseMatrix_cam tile_color 0x337f4cff xpos -540 ypos 9 addUserKnob {20 User} addUserKnob {1 knob_path} knob_path cam_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group Camera { inputs 0 display off selectable false rot_order XYZ useMatrix true matrix { {{getCam.cmr01.x} {getCam.cmr01.y} {getCam.cmr01.z} 0} {{getCam.cmr02.x} {getCam.cmr02.y} {getCam.cmr02.z} 0} {{getCam.cmr03.x} {getCam.cmr03.y} {getCam.cmr03.z} 0} {0 0 0 1} } name cam_data xpos -529 ypos -97 } Input { inputs 0 name deep xpos -4 ypos -235 } DeepExpression { chans1 deep name spacer xpos -4 ypos -155 } Dot { name Dot2 xpos 30 ypos -75 } set N4e88c00 [stack 0] add_layer {deepNormal deepNormal.red deepNormal.green deepNormal.blue deepNormal.alpha} DeepExpression { temp_name0 uMult temp_expr0 "abs( (x+0.5)/input.width-0.5 ) *2" temp_name1 vMult temp_expr1 "abs( (y+0.5)/input.height-0.5 ) *2" temp_name2 hHalfAOV temp_expr2 "degrees( atan( ( ( \[value getCam.aspect] ) * abs( deep.front ) /2 ) / abs( deep.front ) ) )" temp_name3 vHalfAOV temp_expr3 "degrees( atan( ( ( \[value getCam.aspect] ) * (input.height/input.width) * abs( deep.front ) /2 ) / abs( deep.front ) ) )" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "clamp( xinput.width/2 && y>input.height/2 ? \[value cx]*-cos(radians(-vHalfAOV*vMult))*sin(radians(hHalfAOV*uMult)) + \[value cy]*sin(radians(-vHalfAOV*vMult)) + \[value cz]*cos(radians(-vHalfAOV*vMult))*cos(radians(hHalfAOV*uMult)) : xinput.height/2 ? \[value cx]*-cos(radians(-vHalfAOV*vMult))*sin(radians(-hHalfAOV*uMult)) + \[value cy]*sin(radians(-vHalfAOV*vMult)) + \[value cz]*cos(radians(-vHalfAOV*vMult))*cos(radians(-hHalfAOV*uMult)) : \[value cx]*-cos(radians(vHalfAOV*vMult))*sin(radians(hHalfAOV*uMult)) + \[value cy]*sin(radians(vHalfAOV*vMult)) + \[value cz]*cos(radians(vHalfAOV*vMult))*cos(radians(hHalfAOV*uMult)) )" name DeepExpression3 label "screen space" xpos -4 ypos -1 addUserKnob {20 User} addUserKnob {1 cx} cx "(deepNormal.red*\[value inverseMatrix_cam.invMatrix.0] + deepNormal.green*\[value inverseMatrix_cam.invMatrix.1] + deepNormal.blue*\[value inverseMatrix_cam.invMatrix.2])" addUserKnob {1 cy} cy "(deepNormal.red*\[value inverseMatrix_cam.invMatrix.3] + deepNormal.green*\[value inverseMatrix_cam.invMatrix.4] + deepNormal.blue*\[value inverseMatrix_cam.invMatrix.5])" addUserKnob {1 cz} cz "(deepNormal.red*\[value inverseMatrix_cam.invMatrix.6] + deepNormal.green*\[value inverseMatrix_cam.invMatrix.7] + deepNormal.blue*\[value inverseMatrix_cam.invMatrix.8])" } DeepExpression { chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "1- deepNormal.alpha" name DeepExpression7 label invert xpos -4 ypos 79 } DeepExpression { chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "pow( 1 - pow( 1 - deepNormal.alpha , \[value parent.exp_in] ) , \[value parent.exp_out] ) )" name DeepExpression1 label exponential xpos -4 ypos 159 } Dot { name Dot1 xpos 30 ypos 301 } set Na337800 [stack 0] DeepExpression { temp_name0 celShade temp_expr0 "clamp(deepNormal.alpha) ** \[value toonRatio] * (\[value toonLayers]+1)" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "( (int(celShade)-1)/\[value toonLayers]) + (clamp( (celShade%1) * (1/(1-clamp(\[value toonSharpness]))) ) * (1/\[value toonLayers]) )" name DeepExpression40 label "toon shade" xpos 128 ypos 360 addUserKnob {20 User} addUserKnob {3 toonLayers} toonLayers {{"\[metadata sLayers]+0 <= 1 ? 1 : \[metadata sLayers]+0"}} addUserKnob {7 toonSharpness} toonSharpness {{"\[metadata sSharpness]+0"}} addUserKnob {7 toonRatio} toonRatio {{"\[metadata sRatio]+0"}} } push $Na337800 Switch { inputs 2 which {{"\[metadata DVPshader]+0==2 ? 1 : 0"}} name Switch1 xpos -4 ypos 417 } DeepExpression { chans0 {rgba.red rgba.green rgba.blue none} chans1 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} rgba.red "red + deepNormal.alpha * \[value parent.multiply.r]" rgba.green "green + deepNormal.alpha * \[value parent.multiply.g]" rgba.blue "blue + deepNormal.alpha * \[value parent.multiply.b]" deepNormal.alpha 0 name DeepExpression2 label "apply color" xpos -4 ypos 497 } Output { name Output1 xpos -4 ypos 577 } push $N4e88c00 NoOp { name getCam xpos -374 ypos -78 addUserKnob {20 User} addUserKnob {13 cmr01} cmr01 {{"\[lrange \[split \[metadata DVPcamMTX] \" \"] 0 0]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 1 1]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 2 2]+0"}} addUserKnob {13 cmr02} cmr02 {{"\[lrange \[split \[metadata DVPcamMTX] \" \"] 4 4]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 5 5]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 6 6]+0"}} addUserKnob {13 cmr03} cmr03 {{"\[lrange \[split \[metadata DVPcamMTX] \" \"] 8 8]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 9 9]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 10 10]+0"}} addUserKnob {7 aspect} aspect {{"\[metadata DVPcamAspect]+0"}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DVPmatte.gizmo ================================================ Group { name DVPmatte tile_color 0x597fff label "node type : \[value node_type]\noperation : \[value matte_op]\nDeep Output" addUserKnob {20 tab_general l General} addUserKnob {3 mode +INVISIBLE} addUserKnob {41 geo_select T geoCTRL.geo_select} addUserKnob {41 transform_1 l transform T geoCTRL.transform} addUserKnob {26 title_matte l "matte"} addUserKnob {41 mat_shape l shape t "Select the 3D shape of the matte. 3D shape can be preview under 3D view when the panel of this node is active.\n\nSphere : only support uniform falloff.\nCube : support separate 3-axis falloff.\nCylinder : only support uniform falloff." T menu01.mat_shape} addUserKnob {6 invert_matte l "invert matte" t "Invert the matte of the shape. Same as deepHoldout but with falloff support (soften matte)." -STARTLINE} addUserKnob {41 node_type l "node type" t "final matte\nPremult all the mattes in the DVPmatte and DVPattern stack to get the final matte.\n\nopen/cc matte\nKeep the matte and pass along to downstream for multi mattes and DVPColorCorrect purpose. It will only premult RGB for 2D preview." T menu02.node_type} addUserKnob {6 show_color l "show color" -STARTLINE +HIDDEN} show_color true addUserKnob {26 remarks l * T "first matte node should use 'union' operation."} addUserKnob {4 matte_op l operation t "a : this matte\nb : input matte\n\ndivide\ta/b\nfrom\tb-a\nin\tab\nmax\tmax(a,b)\nmin\tmin(a,b)\nminus\ta-b\nmultiply\ta*b\nout\ta(1-b)\nplus\ta+b\nstencil\tb(1-a)\nunion\ta+b-ab\nxor\ta+b-2ab" M {divide from in max min minus multiply out plus stencil union xor "" "" "" "" "" ""}} matte_op union addUserKnob {26 title_transform l "transform"} addUserKnob {22 toggle_2d_mode l "toggle 2D sample" t "When toggle to 2d mode, you can see the point named 'sample_point' in viewer. Move it to the spot for sampling and output the matte." T "thisGRP = nuke.thisGroup()\n\ndef cpmode() :\n\tthisGRP\['mode'].setValue(1)\n\tthisGRP\['sample_point'].setEnabled(True)\n\tthisGRP\['sample_2d_status'].setValue('\[ ON ]')\n\tthisGRP\['updateUI'].setValue(\"goStore = nuke.toNode(\\'store\\')\\ngoStore\[\\'fn\\'].execute()\\nsample2d()\")\n\nif thisGRP\['mode'].getValue() == 1 :\n\tthisGRP\['mode'].setValue(0)\n\tthisGRP\['sample_point'].setEnabled(False)\n\tthisGRP\['sample_2d_status'].setValue('\[ OFF ]')\n\tthisGRP\['updateUI'].setValue('')\nelse :\n\tif thisGRP\['mat_translate'].isAnimated() :\n\t\tif nuke.ask('Translate on this node has expression/animated.\\n\\nIf switch to colorpicker mode, animation or expression will be clear but keep the current value.\\n\\nDo you want to process?') :\n\t\t\tthisGRP\['remove_link'].execute()\n\t\t\tcpmode()\n\telse :\n\t\tcpmode()" +STARTLINE} addUserKnob {26 sample_2d_status l "" -STARTLINE T "\[ OFF ]"} addUserKnob {12 sample_point l "sample position" t "Select the matte spot in 2D space." +DISABLED} addUserKnob {41 mat_translate l translate T geoCTRL.translate} addUserKnob {41 snap_menu l @AxisIcon -STARTLINE T geoCTRL.snap_menu} addUserKnob {41 mat_rot_order l "rotation order" T geoCTRL.rot_order} addUserKnob {41 mat_rotate l rotate T geoCTRL.rotate} addUserKnob {41 mat_scaling l scale T geoCTRL.scaling} addUserKnob {41 mat_uniform_scale l "uniform scale" T geoCTRL.uniform_scale} addUserKnob {41 mat_skew l skew T geoCTRL.skew} addUserKnob {41 mat_pivot l pivot T geoCTRL.pivot} addUserKnob {22 set_link l "link to selected axis/geo" t "Select any 3D nodes and link the node with this button. It gives you a control in 3D for transformation." T "def getLevel() :\n ### level define ###\n if len(nuke.thisNode().fullName().split('.')) == 1 :\n ggLevel = nuke.root()\n else :\n nodePath = nuke.thisNode().fullName().split('.')\n nodePath.pop()\n ggLevel = nuke.toNode('.'.join(nodePath))\n return ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\nmainKnobs = \['mat_rot_order','mat_translate','mat_rotate','mat_scaling','mat_uniform_scale','mat_skew','mat_pivot']\n\naxWhiteList = \['Axis','Axis2','Cube','Sphere','Cylinder','Card','Card2','ReadGeo','ReadGeo2','TransformGeo']\n\ntry :\n with root :\n selNode = nuke.selectedNode()\n \n with thisGRP :\n if axWhiteList.count(selNode.Class()) != 0 :\n for knob in mainKnobs :\n thisGRP\[knob].clearAnimated()\n thisGRP\[mainKnobs\[0]].setExpression( '\{0\}.rot_order'.format(selNode.name()) )\n thisGRP\[mainKnobs\[1]].setExpression( '\{0\}.translate'.format(selNode.name()) )\n thisGRP\[mainKnobs\[2]].setExpression( '\{0\}.rotate'.format(selNode.name()) )\n thisGRP\[mainKnobs\[3]].setExpression( '\{0\}.scaling'.format(selNode.name()) )\n thisGRP\[mainKnobs\[4]].setExpression( '\{0\}.uniform_scale'.format(selNode.name()) )\n thisGRP\[mainKnobs\[5]].setExpression( '\{0\}.skew'.format(selNode.name()) )\n thisGRP\[mainKnobs\[6]].setExpression( '\{0\}.pivot'.format(selNode.name()) )\n else :\n nuke.message('No support node selected.')\nexcept :\n nuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the expression link but won't reset any data. So the transformation data still works if input doesn't contain any movement." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['mat_rot_order','mat_translate','mat_rotate','mat_scaling','mat_uniform_scale','mat_skew','mat_pivot']\n\nfor i in range (0, len(mainKnobs), 1) :\n thisGRP\[mainKnobs\[i]].clearAnimated()"} addUserKnob {26 title_falloff l "fall off"} addUserKnob {13 cube3d_falloff l "cube3D falloff" +DISABLED} cube3d_falloff {1 1 1} addUserKnob {7 uniform_falloff l "uniform falloff" t "This is a globel falloff value. Support for any shape of matte." R 0.001 1} uniform_falloff 0.5 addUserKnob {7 exp_in l "falloff in" t "Ease out falloff from the core by exponential math." R 0.1 10} exp_in 1 addUserKnob {7 exp_out l out t "Ease in falloff from the edge by exponential math." -STARTLINE R 0.1 10} exp_out 1 addUserKnob {26 ""} addUserKnob {20 grp_3dpreview l "Pointcloud preview" n 1} grp_3dpreview 0 addUserKnob {4 display_ptc_type l "display type" t "When you open this node's panel, you can check the pointcloud under 3D view.\n\nnone\nwill not show the pointcloud in 3D\n\nraw pointcloud\nshow the pointcloud from input data, without any effects from this node\n\nwith matte applied\nThis can show the instant result of the projection. Since it feedback in real time, it might slow down the progress in 3D space." M {"no pointcloud preview" "raw pointcloud" "with matte applied"}} display_ptc_type "raw pointcloud" addUserKnob {41 detail l "point detail" t "When you open this node's panel, you can check the pointcloud under 3D view.\n\nThis control the density of the pointcloud." T deepPositionToPoints.detail} addUserKnob {41 pointSize l "point size" t "When you open this node's panel, you can check the pointcloud under 3D view.\n\nThis control the point size of the pointcloud." T deepPositionToPoints.pointSize} addUserKnob {20 endGroup n -1} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 4.0} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-13} addUserKnob {22 btn_CHANGELOG l Changlelog T "log = \"Deep2VPosition (Deep2VP)
- added camera setting to metadata
- remove bake and copy buttons
- rename to Deep2VP
- generate/select/import deepNormal in this node
- added generate normal in deep, still keep the previous one.

DVPort (DVPortal)
- renamed to DVPortal

DVPmatte
- removed 'option' knob, 2D matte can use 'open matte' instead
- open matte can choose show matte or color

DVPattern
- internal setup same as DVPmatte
- added rotation knob
- support 'open matte'

DVProjection
- remove bake and copy buttons
- remove all metadata created from Deep2VP

DVPsetLight
- added shader setting and input shader
- not required link camera anymore
- removed deepNormal setup, moved to Deep2VP node

DVPscene
- added multiple output options
- remove all metadata created from DVP's lighting system

DVPrelight
- added specular setup
- added toon shade setup
- fix pointcloud preview with effects

DVPrelightPT
- split up point light from DVPrelight
- fix point light duplicated algorithm

DVPfresnel
- not required link camera anymore
- fix unpremult process, the result was too dark

DVPToImage
- remove all metadata created from Deep2VP
- same as Deep2VP node color

new nodes :
DVPColorCorrect

added shaders :
DVP Shader
DVP Toon Shader\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff gl_color 0xff label "dont touch" note_font_size 42 xpos -454 ypos -583 bdwidth 270 bdheight 167 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x8e8e8eff label bin note_font_size 42 xpos -453 ypos -399 bdwidth 272 bdheight 292 } Cylinder { inputs 0 display wireframe selectable false render_mode off rows 1 columns 10 name Cylinder1 xpos 1968 ypos 2362 } Cube { inputs 0 display wireframe selectable false render_mode off cast_shadow false receive_shadow false rows 1 columns 1 separate_faces false uniform_scale 2 name Cube1 xpos 1845 ypos 2368 } Sphere { inputs 0 display wireframe selectable false render_mode off cast_shadow false receive_shadow false rows 8 columns 8 name Sphere1 xpos 1725 ypos 2365 } Switch { inputs 3 which {{mat_shape}} name Switch4 xpos 1845 ypos 2438 } TransformGeo { name geoCTRL xpos 1845 ypos 2518 } Scene { name Scene1 xpos 1855 ypos 2598 } push 0 ScanlineRender { inputs 2 conservative_shader_sampling false motion_vectors_type off MB_channel none name ScanlineRender1 xpos 1845 ypos 2816 } Input { inputs 0 name deep xpos 188 ypos -608 } Dot { name Dot1 xpos 222 ypos -448 } set N595bd400 [stack 0] add_layer {deepRawColor deepRawColor.red deepRawColor.green deepRawColor.blue deepRawColor.alpha} DeepExpression { chans0 {deepRawColor.red deepRawColor.green deepRawColor.blue none} chans1 none deepRawColor.red "deepRawColor.red * (1/alpha)" deepRawColor.green "deepRawColor.green * (1/alpha)" deepRawColor.blue "deepRawColor.blue * (1/alpha)" name DeepExpression27 label "unpremult exisiting deepRawColor" xpos 369 ypos -374 } push $N595bd400 DeepExpression { chans0 deepRawColor chans1 none deepRawColor.red "red * (1/alpha)" deepRawColor.green "green * (1/alpha)" deepRawColor.blue "blue * (1/alpha)" deepRawColor.alpha 0 name DeepExpression21 label "shuffle unpremult RGB to deepRawColor" xpos 188 ypos -374 } Switch { inputs 2 which {{"\[metadata DVPmatte]+0==0 || \[metadata DVPmatte]+0==2 ? 0 : 1"}} name Switch5 label "if upstream cc or open matte" xpos 188 ypos -295 } Dot { name Dot19 xpos 222 ypos -172 } set N595bc400 [stack 0] DeepExpression { chans1 none rgba.red alpha rgba.green 0 rgba.blue 0 rgba.alpha 1 name DeepExpression29 label "shuffle alpha to red channel\nand unpremult the data with alpha 1" xpos 188 ypos -34 } Dot { name Dot9 xpos 222 ypos 70 } set N5d223800 [stack 0] add_layer {deepPosition deepPosition.red deepPosition.green deepPosition.blue deepPosition.alpha} DeepExpression { temp_name0 circle temp_expr0 "sqrt( pow2( \[value store.dx] ) + pow2( \[value store.dz] ) )" temp_name1 height temp_expr1 "abs( \[value store.dy] )" chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 none deepPosition.alpha "clamp( max( circle , height ) )" name DeepExpression20 label "cylinder matte" xpos 323 ypos 150 } push $N5d223800 DeepExpression { temp_name0 newR temp_expr0 "abs( \[value store.dx] ) > 1 ? 1 : clamp( sqrt( pow2( abs( \[value store.dx] ) * \[value parent.cube3d_falloff.x]) ) )" temp_name1 newG temp_expr1 "abs( \[value store.dy] ) > 1 ? 1 : clamp( sqrt( pow2( abs( \[value store.dy] ) * \[value parent.cube3d_falloff.y]) ) )" temp_name2 newB temp_expr2 "abs( \[value store.dz] ) > 1 ? 1 : clamp( sqrt( pow2( abs( \[value store.dz] ) * \[value parent.cube3d_falloff.z]) ) )" chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 none deepPosition.alpha clamp(max(abs(newR),abs(newG),abs(newB))) name DeepExpression18 label "cube matte" xpos 188 ypos 154 } push $N5d223800 DeepExpression { chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 none deepPosition.alpha "clamp( sqrt( pow2( \[value store.dx] )+pow2( \[value store.dy] )+pow2( \[value store.dz] ) ) )" name DeepExpression19 label "sphere matte" xpos 43 ypos 151 } Switch { inputs 3 which {{parent.mat_shape}} name Switch3 label "shape selection" xpos 188 ypos 246 } Dot { name Dot12 xpos 222 ypos 353 } set N5d222400 [stack 0] Dot { name Dot16 xpos 307 ypos 438 } DeepExpression { temp_name0 invfalloff temp_expr0 "\[value parent.uniform_falloff] == 0 ? 1- ( (1 - deepPosition.alpha)*(1/0.00001) ) : 1- ( (1 - deepPosition.alpha)*(1/\[value parent.uniform_falloff]) )" chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 none deepPosition.alpha "clamp( invfalloff )" name DeepExpression22 label "global falloff (invert)" xpos 273 ypos 512 } push $N5d222400 DeepExpression { chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 none deepPosition.alpha "1 - deepPosition.alpha" name DeepExpression17 label invert xpos 102 ypos 426 } DeepExpression { temp_name0 falloff temp_expr0 "\[value parent.uniform_falloff] == 0 ? deepPosition.alpha*(1/0.00001) : deepPosition.alpha * (1/\[value parent.uniform_falloff])" chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 none deepPosition.alpha "clamp( falloff )" name DeepExpression11 label "global falloff" xpos 102 ypos 511 } Switch { inputs 2 which {{invert_matte}} name Switch6 xpos 188 ypos 612 } DeepExpression { chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 none deepPosition.alpha "pow( 1 - pow( 1 - deepPosition.alpha , \[value parent.exp_in] ) , \[value parent.exp_out] ) * alpha" name DeepExpression23 label exponential xpos 188 ypos 692 } Dot { name Dot7 xpos 222 ypos 784 } set N5d220800 [stack 0] DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "a + b - 2 * a * b" name DeepExpression16 label xor xpos 793 ypos 919 } push $N5d220800 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "\[value mdChk] ? a + b - a * b : a" name DeepExpression15 label union xpos 663 ypos 923 addUserKnob {20 User} addUserKnob {3 mdChk} mdChk {{"\[metadata DVPmatte]+0"}} } push $N5d220800 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "b * ( 1 - a )" name DeepExpression14 label stencil xpos 534 ypos 923 } push $N5d220800 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "a + b" name DeepExpression13 label plus xpos 421 ypos 921 } push $N5d220800 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "a * ( 1 - b )" name DeepExpression12 label out xpos 304 ypos 926 } push $N5d220800 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "a * b" name DeepExpression10 label multiply xpos 188 ypos 928 } push $N5d220800 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "a - b" name DeepExpression9 label minus xpos 77 ypos 929 } push $N5d220800 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "min( a , b )" name DeepExpression8 label min xpos -38 ypos 932 } push $N5d220800 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "max( a , b )" name DeepExpression7 label max xpos -135 ypos 935 } push $N5d220800 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "a * b" name DeepExpression6 label in xpos -230 ypos 932 } push $N5d220800 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "b - a" name DeepExpression5 label from xpos -326 ypos 934 } push $N5d220800 DeepExpression { temp_name0 a temp_expr0 deepPosition.alpha temp_name1 b temp_expr1 deepRawColor.alpha chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "a / b" name DeepExpression4 label divide xpos -427 ypos 933 } Switch { inputs 12 which {{parent.matte_op}} name Switch2 label "select operations" xpos 188 ypos 1110 } DeepExpression { chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha "clamp( deepRawColor.alpha)" name DeepExpression30 label "clamp the final matte" xpos 188 ypos 1196 } Dot { name Dot35 xpos 222 ypos 1294 } set N5d1c4800 [stack 0] Dot { name Dot2 xpos 374 ypos 1294 } DeepExpression { chans1 {deepRawColor.red deepRawColor.green deepRawColor.blue none} rgba.red "\[value show_color] ? deepRawColor.red * red * deepRawColor.alpha : red * deepRawColor.alpha" rgba.green "\[value show_color] ? deepRawColor.green * red * deepRawColor.alpha : red * deepRawColor.alpha" rgba.blue "\[value show_color] ? deepRawColor.blue * red * deepRawColor.alpha : red * deepRawColor.alpha" rgba.alpha red deepRawColor.red "deepRawColor.red * red" deepRawColor.green "deepRawColor.green * red" deepRawColor.blue "deepRawColor.blue * red" name DeepExpression1 label "show matte or color\nnot alpha" xpos 340 ypos 1425 addUserKnob {20 User} addUserKnob {3 show_color} show_color {{parent.show_color}} } ModifyMetaData { metadata { {set DVPmatte 1} } name DVPmatteMD02 label open xpos 340 ypos 1779 } push $N5d1c4800 DeepExpression { chans1 deepRawColor rgba.red "deepRawColor.red * deepRawColor.alpha * red" rgba.green "deepRawColor.green * deepRawColor.alpha * red" rgba.blue "deepRawColor.blue * deepRawColor.alpha * red" rgba.alpha "deepRawColor.alpha * red" deepRawColor.red "deepRawColor.red * deepRawColor.alpha * red" deepRawColor.green "deepRawColor.green * deepRawColor.alpha * red" deepRawColor.blue "deepRawColor.blue * deepRawColor.alpha * red" deepRawColor.alpha "deepRawColor.alpha * red" name DeepExpression24 label "premult color\nand alpha" xpos 188 ypos 1432 } DeepExpression { chans0 none chans1 deep deep.front "deepRawColor.alpha <= 0 ? -1 : deep.front" deep.back "deepRawColor.alpha <= 0 ? -1 : deep.back" name DeepExpression41 label "alpha check" xpos 188 ypos 1530 } DeepCrop { use_znear false zfar 0 outside_zrange true bbox {0 0 1 1} use_bbox false name DeepCrop3 label "sample cleanup" xpos 188 ypos 1622 } ModifyMetaData { metadata { {set DVPmatte 0} } name DVPmatteMD01 label close xpos 188 ypos 1780 } Switch { inputs 2 which {{parent.node_type}} name Switch14 label "node type" xpos 188 ypos 1969 } DeepExpression { chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 none deepPosition.alpha 0 name DeepExpression32 label reset xpos 188 ypos 2136 } Dot { name Dot11 xpos 222 ypos 2256 } set N5e7f1c00 [stack 0] Switch { inputs 2 name preview_3D xpos 188 ypos 2816 } Output { name Output1 xpos 188 ypos 2941 } push $N5e7f1c00 push $N595bc400 Dot { name Dot10 xpos 1530 ypos -172 } set N5e7f1000 [stack 0] Switch { inputs 2 which {{"parent.display_ptc_type == 1 ? 0 : parent.display_ptc_type == 2 ? 1 : 0"}} name Switch8 xpos 1496 ypos 2253 } Group { name DeepPositionToImage3 tile_color 0x3d99ff label "Image Output" xpos 1496 ypos 2333 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T n/a} addUserKnob {26 l_DATE l "Date Modified" T 2019-05-23} addUserKnob {26 l_CHANGELOG l Changelog T "for internal use"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Input { inputs 0 name deep xpos 508 ypos -26 } Dot { name Dot5 xpos 542 ypos 31 } set N5e7f0400 [stack 0] DeepExpression { chans1 none rgba.red deepPosition.red rgba.green deepPosition.green rgba.blue deepPosition.blue rgba.alpha "alpha == 0 ? 0 : 1" name DeepExpression15 xpos 656 ypos 28 } DeepToImage { name DeepToImage2 xpos 656 ypos 185 } push $N5e7f0400 DeepToImage { name DeepToImage1 xpos 508 ypos 80 } ShuffleCopy { inputs 2 red red green green blue blue alpha black out deepPosition name ShuffleCopy1 xpos 508 ypos 185 } Remove { channels deepRawColor name Remove1 xpos 508 ypos 265 } Output { name Output1 xpos 508 ypos 353 } end_group PositionToPoints2 { display textured render_mode off cast_shadow false receive_shadow false P_channel deepPosition detail 0.1 name deepPositionToPoints xpos 1496 ypos 2431 disable {{"parent.display_ptc_type == 0 ? 1 : 0"}} } push $N5e7f1000 Dot { name Dot8 xpos 1722 ypos -172 } Group { name DeepPositionToImage1 tile_color 0x3d99ff label "Image Output" xpos 1688 ypos -93 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T n/a} addUserKnob {26 l_DATE l "Date Modified" T 2019-05-23} addUserKnob {26 l_CHANGELOG l Changelog T "for internal use"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Input { inputs 0 name deep xpos 508 ypos -26 } Dot { name Dot5 xpos 542 ypos 31 } set N5e7a9800 [stack 0] DeepExpression { chans1 none rgba.red deepPosition.red rgba.green deepPosition.green rgba.blue deepPosition.blue rgba.alpha "alpha == 0 ? 0 : 1" name DeepExpression15 xpos 656 ypos 28 } DeepToImage { name DeepToImage2 xpos 656 ypos 185 } push $N5e7a9800 DeepToImage { name DeepToImage1 xpos 508 ypos 80 } ShuffleCopy { inputs 2 red red green green blue blue alpha black out deepPosition name ShuffleCopy1 xpos 508 ypos 185 } Remove { channels deepRawColor name Remove1 xpos 508 ypos 265 } Output { name Output1 xpos 508 ypos 353 } end_group Shuffle { in deepPosition alpha white name sample_node xpos 1688 ypos 5 } Group { inputs 0 name inverseMatrix tile_color 0x337f4cff xpos -291 ypos -215 addUserKnob {20 User} addUserKnob {1 knob_path} knob_path ax_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group StickyNote { inputs 0 name StickyNote2 label "open matte" xpos 339 ypos 1362 } NoOp { inputs 0 name menu01 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['mat_shape'].getValue() == 1 :\n thisGRP\['cube3d_falloff'].setEnabled(True)\nelse :\n thisGRP\['cube3d_falloff'].setEnabled(False)\n" xpos -412 ypos -483 addUserKnob {20 User} addUserKnob {4 mat_shape l shape M {Sphere Cube Cylinder ""}} } Axis { inputs 0 display off rot_order {{parent.mat_rot_order}} translate {{parent.mat_translate} {parent.mat_translate} {parent.mat_translate}} rotate {{parent.mat_rotate} {parent.mat_rotate} {parent.mat_rotate}} scaling {{parent.mat_scaling} {parent.mat_scaling} {parent.mat_scaling}} uniform_scale {{parent.mat_uniform_scale}} skew {{parent.mat_skew} {parent.mat_skew} {parent.mat_skew}} pivot {{parent.mat_pivot} {parent.mat_pivot} {parent.mat_pivot}} name ax_data xpos -282 ypos -310 } StickyNote { inputs 0 name StickyNote1 label "final matte" xpos 185 ypos 1360 } NoOp { inputs 0 name store xpos -418 ypos -213 addUserKnob {20 User} addUserKnob {22 fn T "def sample2d() :\n\tthisGRP = nuke.thisGroup()\n\tif thisGRP\['mode'].getValue() == 1 :\n\t\tsampt = thisGRP\['sample_point'].getValue()\n\t\tsamNode = nuke.toNode('sample_node')\n\t\tdata = \[samNode.sample('red', sampt\[0], sampt\[1]), samNode.sample('green', sampt\[0], sampt\[1]), samNode.sample('blue', sampt\[0], sampt\[1])]\n\t\tthisGRP\['mat_translate'].setValue(data)" +STARTLINE} addUserKnob {1 dx} dx "( deepPosition.red - \[value ax_data.world_matrix.3] ) * \[value inverseMatrix.invMatrix.0] + ( deepPosition.green - \[value ax_data.world_matrix.7] ) * \[value inverseMatrix.invMatrix.1] + ( deepPosition.blue - \[value ax_data.world_matrix.11] ) * \[value inverseMatrix.invMatrix.2]" addUserKnob {1 dy} dy "( deepPosition.red - \[value ax_data.world_matrix.3] ) * \[value inverseMatrix.invMatrix.3] + ( deepPosition.green - \[value ax_data.world_matrix.7] ) * \[value inverseMatrix.invMatrix.4] + ( deepPosition.blue - \[value ax_data.world_matrix.11] ) * \[value inverseMatrix.invMatrix.5]" addUserKnob {1 dz} dz "( deepPosition.red - \[value ax_data.world_matrix.3] ) * \[value inverseMatrix.invMatrix.6] + ( deepPosition.green - \[value ax_data.world_matrix.7] ) * \[value inverseMatrix.invMatrix.7] + ( deepPosition.blue - \[value ax_data.world_matrix.11] ) * \[value inverseMatrix.invMatrix.8]" } NoOp { inputs 0 name menu02 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['node_type'].getValue() :\n thisGRP\['show_color'].setVisible( True )\nelse :\n thisGRP\['show_color'].setVisible( False )\n" xpos -303 ypos -483 addUserKnob {20 User} addUserKnob {4 node_type l "node type" M {"final matte" "open/cc matte" "" "" "" "" "" "" "" ""}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DVPortal.gizmo ================================================ Group { name DVPortal tile_color 0x4d00ccff label " info" note_font "MS Shell Dlg 2" addUserKnob {20 tab_general l General} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {4 xform_order l "transform order" +DISABLED M {SRT STR RST RTS TSR TRS}} xform_order {{"\[exists input] ? input.xform_order : 0"}} addUserKnob {4 rot_order l "rotation order" +DISABLED M {XYZ XZY YXZ YZX ZXY ZYX}} rot_order {{"\[exists input] ? input.rot_order : 0"}} addUserKnob {13 translate +DISABLED} translate {{"\[exists input] ? input.translate : 0"} {"\[exists input] ? input.translate : 0"} {"\[exists input] ? input.translate : 0"}} addUserKnob {13 rotate +DISABLED} rotate {{"\[exists input] ? input.rotate : 0"} {"\[exists input] ? input.rotate : 0"} {"\[exists input] ? input.rotate : 0"}} addUserKnob {13 scaling l scale +DISABLED} scaling {{"\[exists input] ? input.scaling : 0"} {"\[exists input] ? input.scaling : 0"} {"\[exists input] ? input.scaling : 0"}} addUserKnob {7 uniform_scale l "uniform scale" +DISABLED R 0.01 10} uniform_scale {{"\[exists input] ? input.uniform_scale : 0"}} addUserKnob {13 skew +DISABLED} skew {{"\[exists input] ? input.skew : 0"} {"\[exists input] ? input.skew : 0"} {"\[exists input] ? input.skew : 0"}} addUserKnob {13 pivot +DISABLED} pivot {{"\[exists input] ? input.pivot : 0"} {"\[exists input] ? input.pivot : 0"} {"\[exists input] ? input.pivot : 0"}} addUserKnob {41 world_matrix l "world matrix" T camhub.world_matrix} addUserKnob {7 focal +DISABLED R 5 100} focal {{"\[exists input] ? input.focal : 0"}} addUserKnob {7 haperture l "horiz aperture" +DISABLED R 0.1 50} haperture {{"\[exists input] ? input.haperture : 0"}} addUserKnob {7 near +DISABLED R 0.1 10} near {{"\[exists input] ? input.near : 0"}} addUserKnob {7 far +DISABLED R 11 10000} far {{"\[exists input] ? input.far : 0"}} addUserKnob {30 win_translate l "window translate" +DISABLED} win_translate {{"\[exists input] ? input.win_translate : 0"} {"\[exists input] ? input.win_translate : 0"}} addUserKnob {30 win_scale l "window scale" +DISABLED} win_scale {{"\[exists input] ? input.win_scale : 0"} {"\[exists input] ? input.win_scale : 0"}} addUserKnob {7 winroll l "window roll" +DISABLED R -45 45} winroll {{"\[exists input] ? input.winroll : 0"}} addUserKnob {20 endGroup n -1} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 4.0} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-13} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"Deep2VPosition (Deep2VP)
- added camera setting to metadata
- remove bake and copy buttons
- rename to Deep2VP
- generate/select/import deepNormal in this node
- added generate normal in deep, still keep the previous one.

DVPort (DVPortal)
- renamed to DVPortal

DVPmatte
- removed 'option' knob, 2D matte can use 'open matte' instead
- open matte can choose show matte or color

DVPattern
- internal setup same as DVPmatte
- added rotation knob
- support 'open matte'

DVProjection
- remove bake and copy buttons
- remove all metadata created from Deep2VP

DVPsetLight
- added shader setting and input shader
- not required link camera anymore
- removed deepNormal setup, moved to Deep2VP node

DVPscene
- added multiple output options
- remove all metadata created from DVP's lighting system

DVPrelight
- added specular setup
- added toon shade setup
- fix pointcloud preview with effects

DVPrelightPT
- split up point light from DVPrelight
- fix point light duplicated algorithm

DVPfresnel
- not required link camera anymore
- fix unpremult process, the result was too dark

DVPToImage
- remove all metadata created from Deep2VP
- same as Deep2VP node color

new nodes :
DVPColorCorrect

added shaders :
DVP Shader
DVP Toon Shader\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x4c4c4cff label bin note_font_size 42 xpos -405 ypos -576 bdheight 110 } Input { inputs 0 name cam xpos -197 ypos -591 } Camera { display off selectable false rot_order XYZ focal {{parent.focal}} haperture {{parent.haperture}} near {{parent.near}} far {{parent.far}} win_translate {{parent.win_translate} {parent.win_translate}} win_scale {{parent.win_scale} {parent.win_scale}} winroll {{parent.winroll}} name camhub xpos -187 ypos -538 } NoOp { inputs 0 name store xpos -396 ypos -496 addUserKnob {20 User} addUserKnob {22 dev T "thisGRP = nuke.thisGroup()\nallKnobs = \['xform_order','rot_order','translate','rotate','scaling','uniform_scale','skew','pivot','world_matrix','focal','haperture','near','far','win_translate','win_scale','winroll']\nfor knob in thisGRP.knobs() :\n if knob in allKnobs :\n thisGRP\[knob].setEnabled( False )" +STARTLINE} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DVPrelight.gizmo ================================================ Group { name DVPrelight onCreate "\nthisGRP = nuke.thisGroup()\nfor knob in thisGRP.knobs() :\n try :\n if thisGRP\[knob].label()\[:19] == 'panel dropped state' :\n thisGRP.removeKnob( nuke.thisNode()\[knob] )\n except :\n pass\n" tile_color 0x7f65ff label "\[value light_type]\nDeep Output" addUserKnob {20 tab_general l General} addUserKnob {26 title_light l "light"} addUserKnob {41 light_type l "light type" T menu01.light_type} addUserKnob {18 color t "This control the color and brightness of the light, but not the lighting area.\n\nSo use this value to balance with color's brightness to get a proper result."} color {1 1 1} addUserKnob {7 intensity t "This control the lighting area and brightness.\n\nSo use this value to balance with color's brightness to get a proper result." R 0 50} intensity 1 addUserKnob {4 world_unit l "world unit" t "This unit will only effective on the lighting area by intensity value. If the scene has larger scale, you can choose higher unit. It all reflect to real unit convert.\n\n1km == 1000m\n1m == 10dm\n1dm == 10cm\n1cm == 10mm" +HIDDEN M {"millimeter (mm)" "centimeter (cm)" "decimeter (dm)" "meter (m)" "kilometer (km)" "" "" ""}} world_unit "centimeter (cm)" addUserKnob {7 cone_angle l "cone angle" t "Spot light cone angle adjusted the spread of the light. Valid angles are from 0 to 180 degrees." +HIDDEN R 0 180} cone_angle 40 addUserKnob {7 cone_penumbra_angle l "cone penumbra angle" t "Spot light penumbra cone angle controls the softness along the edge of the area of illumination. A negative value will fade inward from the circle's edge. A positive value will fade outward from the circle's edge. The cone falloff should be set to zero or a low amount in order to see the softness. This feature is only visible in the rendered objects and not in the 3D ogl viewer." +HIDDEN R -60 60} addUserKnob {7 cone_falloff l "cone falloff" +INVISIBLE R 0 1000} addUserKnob {7 exp_in l "falloff in" t "Ease out falloff from the core by exponential math." +HIDDEN R 0.01 10} exp_in 1 addUserKnob {7 exp_out l out t "Ease in falloff from the edge by exponential math." -STARTLINE +HIDDEN R 0.01 10} exp_out 1 addUserKnob {26 title_transform l "transform"} addUserKnob {4 display_light l display M {off "show light control" "" ""}} display_light "show light control" addUserKnob {4 display_spot l display +HIDDEN M {off "cone angle" "cone penumbra angle" "cone angle + cone penumbra angle"}} display_spot "cone angle + cone penumbra angle" addUserKnob {41 file_menu l @FolderIcon T LGT.file_menu} addUserKnob {41 snap_menu l @AxisIcon -STARTLINE T LGT.snap_menu} addUserKnob {41 transform T showupTG.transform} addUserKnob {41 xform_order l "transform order" T LGT.xform_order} addUserKnob {41 rot_order l "rotation order" T LGT.rot_order} addUserKnob {41 translate T LGT.translate} addUserKnob {41 rotate T LGT.rotate} addUserKnob {7 uniform_scale l "uniform scale" R 0.01 10} uniform_scale 1 addUserKnob {26 ""} addUserKnob {20 grp_3dpreview l "Pointcloud preview" n 1} grp_3dpreview 0 addUserKnob {4 display_ptc_type l "display type" t "When you open this node's panel, you can check the pointcloud under 3D view.\n\nnone\nwill not show the pointcloud in 3D\n\nraw pointcloud\nshow the pointcloud from input data, without any effects from this node\n\nwith light applied\nThis can show the instant result of the light. Since it feedback in real time, it might slow down the progress in 3D space." M {"no pointcloud preview" "raw pointcloud" "with light applied (slow)" "" "" "" "" ""}} display_ptc_type "raw pointcloud" addUserKnob {41 detail l "point detail" T deepPositionToPoints.detail} addUserKnob {41 pointSize l "point size" T deepPositionToPoints.pointSize} addUserKnob {20 endGroup_1_1 l endGroup n -1} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 4.0} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-13} addUserKnob {22 btn_CHANGELOG l Changlelog T "log = \"Deep2VPosition (Deep2VP)
- added camera setting to metadata
- remove bake and copy buttons
- rename to Deep2VP
- generate/select/import deepNormal in this node
- added generate normal in deep, still keep the previous one.

DVPort (DVPortal)
- renamed to DVPortal

DVPmatte
- removed 'option' knob, 2D matte can use 'open matte' instead
- open matte can choose show matte or color

DVPattern
- internal setup same as DVPmatte
- added rotation knob
- support 'open matte'

DVProjection
- remove bake and copy buttons
- remove all metadata created from Deep2VP

DVPsetLight
- added shader setting and input shader
- not required link camera anymore
- removed deepNormal setup, moved to Deep2VP node

DVPscene
- added multiple output options
- remove all metadata created from DVP's lighting system

DVPrelight
- added specular setup
- added toon shade setup
- fix pointcloud preview with effects

DVPrelightPT
- split up point light from DVPrelight
- fix point light duplicated algorithm

DVPfresnel
- not required link camera anymore
- fix unpremult process, the result was too dark

DVPToImage
- remove all metadata created from Deep2VP
- same as Deep2VP node color

new nodes :
DVPColorCorrect

added shaders :
DVP Shader
DVP Toon Shader\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x7f7f7fff label bin note_font_size 42 xpos -1200 ypos -630 bdwidth 688 bdheight 1506 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x191919ff label "dont touch" note_font_size 42 xpos -1080 ypos -864 bdwidth 391 bdheight 187 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x4c4c4cff label "lighting matte" note_font_size 42 xpos -298 ypos -555 bdwidth 366 bdheight 20 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x4c4c4cff label "specular matte" note_font_size 42 xpos -303 ypos 794 bdwidth 366 bdheight 20 } BackdropNode { inputs 0 name BackdropNode5 tile_color 0x4c4c4cff label "assign color and luma" note_font_size 42 xpos -289 ypos 1281 bdwidth 366 bdheight 20 } BackdropNode { inputs 0 name BackdropNode6 tile_color 0x716240ff label "spec\naverge vector of light and camera.\nextract rotation only." note_font_size 24 xpos -1193 ypos 518 bdwidth 420 bdheight 228 } BackdropNode { inputs 0 name BackdropNode7 tile_color 0x716240ff label "spec\nblend value for toonShade" note_font_size 24 xpos -1191 ypos 82 bdwidth 416 bdheight 410 } Input { inputs 0 name deep xpos -268 ypos -825 } add_layer {deepPosition deepPosition.red deepPosition.green deepPosition.blue deepPosition.alpha} add_layer {deepNormal deepNormal.red deepNormal.green deepNormal.blue deepNormal.alpha} add_layer {DVPshader DVPshader.red DVPshader.green DVPshader.blue DVPshader.alpha} add_layer {deepRawColor deepRawColor.red deepRawColor.green deepRawColor.blue deepRawColor.alpha} DeepExpression { chans0 deepPosition chans1 deepNormal chans2 DVPshader chans3 deepRawColor name spacer1 xpos -268 ypos -747 } Dot { name Dot12 xpos -234 ypos -463 } set N52112400 [stack 0] Dot { name Dot3 xpos 15 ypos -463 } set N52112000 [stack 0] DeepExpression { temp_name0 circle temp_expr0 "sqrt( pow2( \[value globalTCL.lgtPX] ) + pow2( \[value globalTCL.lgtPY] ) ) * 2" temp_name1 ocone temp_expr1 "1 / ( tan( radians( \[value oradius] ) ) * abs( \[value globalTCL.lgtPZ] ) * 2 * smoothstep( 0, 1, ( 1 / ( \[value parent.cone_falloff] * 0.004 + 1 ) ) ) )" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "clamp( ( \[value globalTCL.lgtPZ] <= 0 ? 1 - circle * ocone : 0 ) * \[value mult] )" name DeepExpression9 label "normal cone" xpos -19 ypos -389 addUserKnob {20 User} addUserKnob {7 mult} mult {{"max( 1, clamp(parent.cone_angle , 0.1, 180) / abs( parent.cone_penumbra_angle ) )"}} addUserKnob {7 oradius R 0 180} oradius {{"parent.cone_penumbra_angle <= 0 ? parent.cone_angle / 2 : clamp( ( parent.cone_angle + parent.cone_penumbra_angle ) / 2, 0 ,90 )"}} } DeepExpression { chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "clamp( deepNormal.alpha * (1 / abs( \[value globalTCL.lgtPZ]) * \[value parent.intensity] * \[value globalTCL.unit] ) )" name DeepExpression5 label linear xpos -19 ypos -297 } DeepExpression { chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "1- pow( 1-pow( deepNormal.alpha , \[value expO] ) , \[value expI] )" name DeepExpression12 label exponential xpos -19 ypos -205 addUserKnob {20 User} addUserKnob {7 expI} expI {{"parent.exp_in < 0.01 ? 0.01 : parent.exp_in"}} addUserKnob {7 expO} expO {{"parent.exp_out < 0.01 ? 0.01 : parent.exp_out"}} } DeepExpression { chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "deepNormal.alpha * clamp( deepNormal.red * \[value LGT_inv.world_matrix.8] + deepNormal.green * \[value LGT_inv.world_matrix.9] + deepNormal.blue * \[value LGT_inv.world_matrix.10] )" name DeepExpression10 label "remove backface" xpos -19 ypos -113 } DeepExpression { temp_name0 pivot temp_expr0 0.5 temp_name1 lift temp_expr1 "(1/\[value globalTCL.unit])" temp_name2 soft temp_expr2 1 chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "( ( deepNormal.alpha < pivot ? deepNormal.alpha + ( lift * ( pow( ( 1 - ( deepNormal.alpha / pivot ) ) , ( ( ( ( pivot / lift ) - 1 ) * soft ) + 1 ) ) ) ) : deepNormal.alpha ) - lift ) * 1 / ( 1 - lift )" name DeepExpression11 label "ease out" xpos -19 ypos -21 } Dot { name Dot5 xpos 15 ypos 96 } push $N52112400 DeepExpression { chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "\[value globalTCL.lgtNZ]" name DeepExpression3 label "directional light" xpos -268 ypos -389 } Switch { inputs 2 which {{parent.light_type}} name Switch1 xpos -268 ypos 249 } Dot { name Dot2 xpos -234 ypos 896 } set N520cb800 [stack 0] DeepExpression { temp_name0 lgtR temp_expr0 "( deepNormal.red * LGT_inv.world_matrix.0 + deepNormal.green * LGT_inv.world_matrix.1 + deepNormal.blue * LGT_inv.world_matrix.2 ) * blend.x" temp_name1 lgtG temp_expr1 "( deepNormal.red * LGT_inv.world_matrix.4 + deepNormal.green * LGT_inv.world_matrix.5 + deepNormal.blue * LGT_inv.world_matrix.6 ) * blend.y" temp_name2 lgtB temp_expr2 "deepNormal.red * LGT_inv.world_matrix.8 + deepNormal.green * LGT_inv.world_matrix.9 + deepNormal.blue * LGT_inv.world_matrix.10" chans0 {-DVPshader.red -DVPshader.green -DVPshader.blue DVPshader.alpha} chans1 none DVPshader.alpha "( 1-sqrt( pow2( lgtR ) + pow2( lgtG ) ) ) * lgtB" name DeepExpression7 label "DVP_ToonShader spec" xpos -32 ypos 996 addUserKnob {20 User} addUserKnob {12 blend} blend {{"(pi-abs(asin(vecRT.matrix.7))) / pi"} {"(pi-abs(asin((vecRT.matrix.6)/-cos(asin(vecRT.matrix.7))))) / pi"}} } push $N520cb800 DeepExpression { temp_name0 u temp_expr0 "(deepNormal.red*invMTXSpec.invMatrix.0 + deepNormal.green*invMTXSpec.invMatrix.1 + deepNormal.blue*invMTXSpec.invMatrix.2) * (1/\[value blend.x])" temp_name1 v temp_expr1 "(deepNormal.red*invMTXSpec.invMatrix.3 + deepNormal.green*invMTXSpec.invMatrix.4 + deepNormal.blue*invMTXSpec.invMatrix.5) * (1/\[value blend.y])" chans0 {-DVPshader.red -DVPshader.green -DVPshader.blue DVPshader.alpha} chans1 none DVPshader.alpha "clamp( 1-sqrt( pow2(u*1/blend.x) + pow2(v*1/blend.y) ) )" name DeepExpression63 label "DVP_Shader spec" xpos -165 ypos 995 addUserKnob {20 User} addUserKnob {12 blend} blend {{"invMTXSpec.invMatrix.1<1 && invMTXSpec.invMatrix.1>-1 ? 1 : abs( invMTXSpec.invMatrix.1 )"} {"invMTXSpec.invMatrix.3<1 && invMTXSpec.invMatrix.3>-1 ? 1 : abs( invMTXSpec.invMatrix.3 )"}} } push $N520cb800 Switch { inputs 3 which {{"\[metadata DVPshader]+0"}} name Switch6 xpos -268 ypos 1096 } Dot { name Dot4 xpos -234 ypos 1390 } set N520ca800 [stack 0] Dot { name Dot8 xpos 343 ypos 1390 } DeepExpression { temp_name0 celShade temp_expr0 "clamp(deepNormal.alpha) ** \[value toonRatio] * (\[value toonLayers]+1)" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "( (int(celShade)-1)/\[value toonLayers]) + (clamp( (celShade%1) * (1/(1-clamp(\[value toonSharpness]))) ) * (1/\[value toonLayers]) )" name DeepExpression40 xpos 309 ypos 1526 addUserKnob {20 User} addUserKnob {3 toonLayers} toonLayers {{"\[metadata sLayers]+0 <= 1 ? 1 : \[metadata sLayers]+0"}} addUserKnob {7 toonSharpness} toonSharpness {{"\[metadata sSharpness]+0"}} addUserKnob {7 toonRatio} toonRatio {{"\[metadata sRatio]+0"}} } DeepExpression { chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha clamp(deepNormal.alpha) name DeepExpression49 label clamp xpos 309 ypos 1652 } Dot { name Dot10 xpos 343 ypos 1783 } set N520c9800 [stack 0] DeepExpression { temp_name0 lr temp_expr0 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.r]" temp_name1 lg temp_expr1 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.g]" temp_name2 lb temp_expr2 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.b]" chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "r * cs.matrix.0 + g * cs.matrix.1 + b * cs.matrix.2" rgba.green "lr * cs.matrix.3 + lg * cs.matrix.4 + lb * cs.matrix.5" rgba.blue "lr * cs.matrix.6 + lg * cs.matrix.7 + lb * cs.matrix.8" name DeepExpression59 label color xpos 2194 ypos 2099 } DeepExpression { chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "r * cs_inv.matrix.0 + g * cs_inv.matrix.1 + b * cs_inv.matrix.2" rgba.green "r * cs_inv.matrix.3 + g * cs_inv.matrix.4 + b * cs_inv.matrix.5" rgba.blue "r * cs_inv.matrix.6 + g * cs_inv.matrix.7 + b * cs_inv.matrix.8" name DeepExpression60 xpos 2194 ypos 2191 } push $N520c9800 DeepExpression { temp_name0 lr temp_expr0 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.r]" temp_name1 lg temp_expr1 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.g]" temp_name2 lb temp_expr2 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.b]" chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "lr<1 && r<1 ? (r+lr-r*lr) : lr(2*(lr-0.5)) ? r : (2*(lr-0.5)) )\n" rgba.green "lg<0.5 ? ( g<(2*lg) ? g : (2*lg) ) : ( g>(2*(lg-0.5)) ? g : (2*(lg-0.5)) )" rgba.blue "lb<0.5 ? ( b<(2*lb) ? b : (2*lb) ) : ( b>(2*(lb-0.5)) ? b : (2*(lb-0.5)) )" name DeepExpression56 label "pin light" xpos 1301 ypos 2102 } push $N520c9800 DeepExpression { temp_name0 lr temp_expr0 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.r]" temp_name1 lg temp_expr1 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.g]" temp_name2 lb temp_expr2 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.b]" chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "lr<0.5 ? ( (2*lr)==0 ? (2*lr) : (1-(1-r)/(2*lr))>0 ? (1-(1-r)/(2*lr)) : 0 ) : ( (2*(lr-0.5))==1 ? (2*(lr-0.5)) : (r/(1-(2*(lr-0.5))))<1 ? (r/(1-(2*(lr-0.5)))) : 1 )" rgba.green "lg<0.5 ? ( (2*lg)==0 ? (2*lg) : (1-(1-g)/(2*lg))>0 ? (1-(1-g)/(2*lg)) : 0 ) : ( (2*(lg-0.5))==1 ? (2*(lg-0.5)) : (g/(1-(2*(lg-0.5))))<1 ? (g/(1-(2*(lg-0.5)))) : 1 )" rgba.blue "lb<0.5 ? ( (2*lb)==0 ? (2*lb) : (1-(1-b)/(2*lb))>0 ? (1-(1-b)/(2*lb)) : 0 ) : ( (2*(lb-0.5))==1 ? (2*(lb-0.5)) : (b/(1-(2*(lb-0.5))))<1 ? (b/(1-(2*(lb-0.5)))) : 1 )" name DeepExpression55 label "vivid light" xpos 1206 ypos 2106 } push $N520c9800 DeepExpression { temp_name0 lr temp_expr0 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.r]" temp_name1 lg temp_expr1 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.g]" temp_name2 lb temp_expr2 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.b]" chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "lr<0.5 ? r*lr : lr<1 && r<1 ? (r+lr-r*lr) : lr 0.25 ? 1 : 0" chans0 {DVPshader.red DVPshader.green DVPshader.blue none} chans1 {-deepNormal.red -deepNormal.green -deepNormal.blue none} DVPshader.red "max( DVPshader.red , ( spec * \[value specColor.x] * \[value parent.intensity] * lightMat * alpha ) )" DVPshader.green "max( DVPshader.green , ( spec * \[value specColor.y] * \[value parent.intensity] * lightMat * alpha ) )" DVPshader.blue "max( DVPshader.blue , ( spec * \[value specColor.z] * \[value parent.intensity] * lightMat * alpha ) )" name DeepExpression4 label "toon spec color n luma" xpos 309 ypos 2567 addUserKnob {20 User} addUserKnob {7 spec} spec {{"clamp(\[metadata sSpecular]+0)"}} addUserKnob {7 gloss} gloss {{"clamp(\[metadata sGlossiness]+0)"}} addUserKnob {7 sharpness} sharpness {{"clamp(\[metadata sSharpness]+0)"}} addUserKnob {13 specColor} specColor {{"\[metadata sSpecReplace]+0 ? \[lrange \[split \[metadata sSpecColor] \" \"] 0 0]+0 : \[value parent.color.r]"} {"\[metadata sSpecReplace]+0 ? \[lrange \[split \[metadata sSpecColor] \" \"] 1 1]+0 : \[value parent.color.g]"} {"\[metadata sSpecReplace]+0 ? \[lrange \[split \[metadata sSpecColor]+0 \" \"] 2 2]+0 : \[value parent.color.b]"}} } Dot { name Dot6 xpos 343 ypos 2772 } push $N520ca800 DeepExpression { chans0 {rgba.red rgba.green rgba.blue none} chans1 {-deepNormal.red -deepNormal.green -deepNormal.blue none} rgba.red "red + clamp( deepNormal.alpha ) * ( \[value parent.intensity] * \[value globalTCL.iBias] ) * \[value parent.color.r] )" rgba.green "green + clamp( deepNormal.alpha ) * ( \[value parent.intensity] * \[value globalTCL.iBias] ) * \[value parent.color.g] )" rgba.blue "blue + clamp( deepNormal.alpha ) * ( \[value parent.intensity] * \[value globalTCL.iBias] ) * \[value parent.color.b] )" name DeepExpression31 xpos -268 ypos 1535 } Dot { name Dot9 xpos -234 ypos 2560 } set N5200f400 [stack 0] DeepExpression { temp_name0 spec temp_expr0 "( ( ( clamp( cos( (1-DVPshader.alpha) * (pi/2) ) ) ** (1/\[value gloss]) * 2 ) ** (1/(1-\[value spec])) ) * (1/2) * \[value spec] )" chans0 {DVPshader.red DVPshader.green DVPshader.blue none} chans1 {-deepNormal.red -deepNormal.green -deepNormal.blue none} DVPshader.red "DVPshader.red + ( spec * \[value parent.color.r] * deepNormal.alpha * alpha )" DVPshader.green "DVPshader.green + ( spec * \[value parent.color.g] * deepNormal.alpha * alpha )" DVPshader.blue "DVPshader.blue + ( spec * \[value parent.color.b] * deepNormal.alpha * alpha )" name DeepExpression62 label "DVP_Shader color n luma" xpos -39 ypos 2551 addUserKnob {20 User} addUserKnob {7 spec} spec {{"clamp(\[metadata sSpecular]+0) * 0.99"}} addUserKnob {7 gloss} gloss {{"clamp(\[metadata sGlossiness]+0)"}} } push $N5200f400 Switch { inputs 3 which {{"\[metadata DVPshader]+0"}} name Switch5 xpos -268 ypos 2829 } ModifyMetaData { metadata { {set sStatus 1} } name chShader xpos -268 ypos 2909 } DeepExpression { chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 {-DVPshader.red -DVPshader.green -DVPshader.blue DVPshader.alpha} deepNormal.alpha 0 DVPshader.alpha 0 name DeepExpression33 xpos -268 ypos 2989 } Dot { name Dot13 xpos -234 ypos 3350 } set N5200e000 [stack 0] Output { name Output1 xpos -268 ypos 3653 } push $N5200e000 DeepExpression { chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "deepRawColor.red * red + DVPshader.red" rgba.green "deepRawColor.green * green + DVPshader.green" rgba.blue "deepRawColor.blue * blue + DVPshader.blue" name DeepExpression32 xpos 2779 ypos 3347 } push $N52112000 Dot { name Dot1 xpos 2967 ypos -463 } DeepExpression { chans1 none rgba.red deepRawColor.red rgba.green deepRawColor.green rgba.blue deepRawColor.blue name DeepExpression1 xpos 2933 ypos 3129 } Switch { inputs 2 which {{"parent.display_ptc_type == 1 ? 0 : parent.display_ptc_type == 2 ? 1 : 0"}} name Switch3 xpos 2933 ypos 3347 } Group { name DeepPositionToImage3 tile_color 0x3d99ff label "Image Output" xpos 2933 ypos 3427 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T n/a} addUserKnob {26 l_DATE l "Date Modified" T 2019-05-23} addUserKnob {26 l_CHANGELOG l Changelog T "for internal use"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Input { inputs 0 name deep xpos 508 ypos -26 } Dot { name Dot5 xpos 542 ypos 31 } set N5200c400 [stack 0] DeepExpression { chans1 none rgba.red deepPosition.red rgba.green deepPosition.green rgba.blue deepPosition.blue rgba.alpha "alpha == 0 ? 0 : 1" name DeepExpression15 selected true xpos 656 ypos 28 } DeepToImage { name DeepToImage2 xpos 656 ypos 185 } push $N5200c400 DeepToImage { name DeepToImage1 xpos 508 ypos 80 } ShuffleCopy { inputs 2 red red green green blue blue alpha black out deepPosition name ShuffleCopy1 xpos 508 ypos 185 } Output { name Output1 xpos 508 ypos 265 } end_group PositionToPoints2 { display textured selectable false render_mode textured cast_shadow false receive_shadow false P_channel deepPosition detail 0.1 name deepPositionToPoints xpos 2933 ypos 3533 disable {{"parent.display_ptc_type == 0 ? 1 : 0"}} } Axis { inputs 0 name LGT xpos -994 ypos -176 } set N51fca400 [stack 0] Group { inputs 0 name spot xpos -744 ypos -316 } Cylinder { inputs 0 display wireframe selectable false render_mode off cast_shadow false receive_shadow false rows 1 columns 8 close_bottom true translate {0 1 0} rotate {-90 0 0} pivot {0 -1 0} name Cylinder1 xpos 215 ypos 295 } EditGeo { selectable false render_mode off keys {{0 1 2 3 4 5 6 7 8} } values {{0.001 0.001 -0.001 0.001 -0.9988563061 0.001 -0.7062979937 -0.7062979937 0.001 -0.9988563657 8.035581089e-08 -0.001 -0.7062979937 0.7062980533 -0.001 0.001 0.9988564253 -0.001 0.7062981725 0.7062979341 -0.001 0.9988564253 0.001 -0.001 0.7062978148 -0.7062982321 0.001} } scaling {0 0 0} name EditGeo2 xpos 215 ypos 375 } Dot { name Dot1 xpos 249 ypos 430 } set N51fc9800 [stack 0] TransformGeo { display wireframe selectable false render_mode off scaling {{"radians( parent.parent.cone_angle + parent.parent.cone_penumbra_angle )"} {scaling.x} 1} name TransformGeo1 xpos 332 ypos 491 } set N51fc9400 [stack 0] push $N51fc9800 TransformGeo { display wireframe selectable false render_mode off scaling {{"radians( parent.parent.cone_angle )"} {scaling.x} 1} name TransformGeo2 xpos 215 ypos 489 } set N51fc9000 [stack 0] MergeGeo { inputs 2 name MergeGeo1 xpos 332 ypos 571 } push $N51fc9400 push $N51fc9000 Dot { inputs 0 name Dot2 xpos 172 ypos 570 } Switch { inputs 4 which {{"parent.parent.display_spot == 0 ? 0 : parent.parent.display_spot == 1 ? 1 : parent.parent.display_spot == 2 ? 2 : 3"}} name Switch1 xpos 215 ypos 642 } Output { name Output1 xpos 215 ypos 722 } end_group Group { inputs 0 name directional xpos -848 ypos -315 } Cylinder { inputs 0 selectable false rows 1 columns 4 translate {0 1 0} rotate {-90 0 0} scaling {0.03 1 0.03} uniform_scale 0.5 pivot {0 -1 0} name Cylinder2 xpos 215 ypos 418 } set N51f57800 [stack 0] TransformGeo { selectable false translate {0.05 0.05 0} name TransformGeo4 xpos 537 ypos 534 } push $N51f57800 TransformGeo { selectable false translate {-0.05 0.05 0} name TransformGeo3 xpos 430 ypos 535 } push $N51f57800 TransformGeo { selectable false translate {-0.05 -0.05 0} name TransformGeo2 xpos 325 ypos 536 } push $N51f57800 TransformGeo { selectable false translate {0.05 -0.05 0} name TransformGeo1 xpos 215 ypos 538 } MergeGeo { inputs 4 display wireframe selectable false name MergeGeo1 xpos 215 ypos 618 } Dot { inputs 0 name Dot1 xpos 166 ypos 647 } Switch { inputs 2 which {{"parent.parent.display_light == 0 ? 0 : 1"}} name Switch1 xpos 215 ypos 698 } Output { name Output1 xpos 215 ypos 806 } end_group Switch { inputs 2 which {{parent.light_type}} name Switch2 xpos -848 ypos -235 } TransformGeo { inputs 2 selectable false uniform_scale {{parent.uniform_scale}} name showupTG gl_color 0x7f7f7fff xpos -848 ypos -155 } ColorMatrix { inputs 0 channels none matrix { {{vecAS.matrix.0/vecS.x} {vecAS.matrix.1/vecS.y} {vecAS.matrix.2/vecS.z}} {{vecAS.matrix.3/vecS.x} {vecAS.matrix.4/vecS.y} {vecAS.matrix.5/vecS.z}} {{vecAS.matrix.6/vecS.x} {vecAS.matrix.7/vecS.y} {vecAS.matrix.8/vecS.z}} } name vecRS xpos -924 ypos 672 addUserKnob {20 User} addUserKnob {13 vecS} vecS {{"sqrt( pow2(vecAS.matrix.0) + pow2(vecAS.matrix.3) + pow2(vecAS.matrix.6) )"} {"sqrt( pow2(vecAS.matrix.1) + pow2(vecAS.matrix.4) + pow2(vecAS.matrix.7) )"} {"sqrt( pow2(vecAS.matrix.2) + pow2(vecAS.matrix.5) + pow2(vecAS.matrix.8) )"}} } ColorMatrix { inputs 0 channels none matrix { {{(getCam.cmr01.x+LGT.world_matrix.0)/2} {(getCam.cmr01.y+LGT.world_matrix.1)/2} {(getCam.cmr01.z+LGT.world_matrix.2)/2}} {{(getCam.cmr02.x+LGT.world_matrix.4)/2} {(getCam.cmr02.y+LGT.world_matrix.5)/2} {(getCam.cmr02.z+LGT.world_matrix.6)/2}} {{(getCam.cmr03.x+LGT.world_matrix.8)/2} {(getCam.cmr03.y+LGT.world_matrix.9)/2} {(getCam.cmr03.z+LGT.world_matrix.10)/2}} } name vecAS xpos -1036 ypos 671 } push $N51fca400 Axis { useMatrix true matrix { {{getCam.cmr01.x} {getCam.cmr01.y} {getCam.cmr01.z} 0} {{getCam.cmr02.x} {getCam.cmr02.y} {getCam.cmr02.z} 0} {{getCam.cmr03.x} {getCam.cmr03.y} {getCam.cmr03.z} 0} {0 0 0 1} } name CAM xpos -994 ypos 207 } Axis { useMatrix true matrix { {{invMTXCam.invMatrix.0} {invMTXCam.invMatrix.1} {invMTXCam.invMatrix.2} 0} {{invMTXCam.invMatrix.3} {invMTXCam.invMatrix.4} {invMTXCam.invMatrix.5} 0} {{invMTXCam.invMatrix.6} {invMTXCam.invMatrix.7} {invMTXCam.invMatrix.8} 0} {0 0 0 1} } name CAM_inv xpos -994 ypos 298 } Axis { inputs 0 rot_order YXZ rotate {{-parent.rotate} {-parent.rotate} {-parent.rotate}} name LGT_inv xpos -1089 ypos -173 } Group { inputs 0 name invMTX tile_color 0x337f4cff xpos -1108 ypos 406 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path CAM_inv.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2011-11-28} addUserKnob {26 l_CHANGELOG l Changelog T "v1.0\n- reveal the calculate output of \n inverse matrix which is c44matrix\n and colormatrix doesn't show\n "} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output selected true xpos 186 ypos 33 } end_group Group { inputs 0 name invMTXSpec tile_color 0x337f4cff xpos -1144 ypos 678 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path vecRS.matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2011-11-28} addUserKnob {26 l_CHANGELOG l Changelog T "v1.0\n- reveal the calculate output of \n inverse matrix which is c44matrix\n and colormatrix doesn't show\n "} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {3 4 5} {6 7 8} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output selected true xpos 186 ypos 33 } end_group Matrix { inputs 0 matrix { {3.08022809 -1.537308455 -0.5429191589} {-0.9212164879 1.875966549 0.04525000602} {0.05288143829 -0.2040073872 1.151125908} } name cs_inv xpos 2318 ypos 2187 } Matrix { inputs 0 matrix { {0.4339115 0.37622687 0.1898616} {0.21264936 0.71516907 0.07218152} {0.01775321 0.10946182 0.87278491} } name cs xpos 2317 ypos 2099 } Group { inputs 0 name invMTXCam tile_color 0x337f4cff xpos -1108 ypos 320 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path CAM.matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2011-11-28} addUserKnob {26 l_CHANGELOG l Changelog T "v1.0\n- reveal the calculate output of \n inverse matrix which is c44matrix\n and colormatrix doesn't show\n "} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output selected true xpos 186 ypos 33 } end_group ColorMatrix { inputs 0 channels none matrix { {{"invMTX.invMatrix.0 / vecS.x"} {"invMTX.invMatrix.1 / vecS.y"} {"invMTX.invMatrix.2 / vecS.z"}} {{"invMTX.invMatrix.3 / vecS.x"} {"invMTX.invMatrix.4 / vecS.y"} {"invMTX.invMatrix.5 / vecS.z"}} {{"invMTX.invMatrix.6 / vecS.x"} {"invMTX.invMatrix.7 / vecS.y"} {"invMTX.invMatrix.8 / vecS.z"}} } name vecRT xpos -1000 ypos 400 addUserKnob {20 User} addUserKnob {13 vecS} vecS {{"sqrt( pow2(invMTX.invMatrix.0) + pow2(invMTX.invMatrix.3) + pow2(invMTX.invMatrix.6) )"} {"sqrt( pow2(invMTX.invMatrix.1) + pow2(invMTX.invMatrix.4) + pow2(invMTX.invMatrix.7) )"} {"sqrt( pow2(invMTX.invMatrix.2) + pow2(invMTX.invMatrix.5) + pow2(invMTX.invMatrix.8) )"}} } push $N52112400 NoOp { name getCam xpos -850 ypos -466 addUserKnob {20 User} addUserKnob {13 cmr01} cmr01 {{"\[lrange \[split \[metadata DVPcamMTX] \" \"] 0 0]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 1 1]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 2 2]+0"}} addUserKnob {13 cmr02} cmr02 {{"\[lrange \[split \[metadata DVPcamMTX] \" \"] 4 4]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 5 5]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 6 6]+0"}} addUserKnob {13 cmr03} cmr03 {{"\[lrange \[split \[metadata DVPcamMTX] \" \"] 8 8]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 9 9]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 10 10]+0"}} } NoOp { inputs 0 name globalTCL xpos -850 ypos -398 addUserKnob {20 User} addUserKnob {1 nodeNameLGT} nodeNameLGT LGT_inv.world_matrix addUserKnob {1 lgtPX} lgtPX "(deepPosition.red-\[value LGT.world_matrix.3])*\[value nodeNameLGT].0 + (deepPosition.green-\[value LGT.world_matrix.7])*\[value nodeNameLGT].1 + (deepPosition.blue-\[value LGT.world_matrix.11])*\[value nodeNameLGT].2" addUserKnob {1 lgtPY} lgtPY "(deepPosition.red-\[value LGT.world_matrix.3])*\[value nodeNameLGT].4 + (deepPosition.green-\[value LGT.world_matrix.7])*\[value nodeNameLGT].5 + (deepPosition.blue-\[value LGT.world_matrix.11])*\[value nodeNameLGT].6" addUserKnob {1 lgtPZ} lgtPZ "(deepPosition.red-\[value LGT.world_matrix.3])*\[value nodeNameLGT].8 + (deepPosition.green-\[value LGT.world_matrix.7])*\[value nodeNameLGT].9 + (deepPosition.blue-\[value LGT.world_matrix.11])*\[value nodeNameLGT].10" addUserKnob {1 lgtNZ} lgtNZ "deepNormal.red*\[value nodeNameLGT].8 + deepNormal.green*\[value nodeNameLGT].9 + deepNormal.blue*\[value nodeNameLGT].10" addUserKnob {26 ""} addUserKnob {7 unit} unit {{"parent.world_unit==4? 1000000 : pow( 10 , parent.world_unit )"}} addUserKnob {7 ptSize} ptSize {{1/(parent.intensity*unit)}} addUserKnob {26 ""} addUserKnob {7 iBias} iBias 5 } NoOp { inputs 0 name menu01 knobChanged "\nthisGRP = nuke.thisGroup()\nshareKnobs = \['exp_in','exp_out','world_unit']\nspKnobs = \['cone_angle','cone_penumbra_angle']\n\nif thisGRP\['light_type'].value() == 'directional' :\n for knob in shareKnobs :\n thisGRP\[knob].setVisible(False)\n for knob in spKnobs :\n thisGRP\[knob].setVisible(False)\n thisGRP\['display_spot'].setVisible(False)\n thisGRP\['display_light'].setVisible(True)\n\nelif thisGRP\['light_type'].value() == 'spot' :\n for knob in shareKnobs :\n thisGRP\[knob].setVisible(True)\n for knob in spKnobs :\n thisGRP\[knob].setVisible(True)\n thisGRP\['display_spot'].setVisible(True)\n thisGRP\['display_light'].setVisible(False)\n" xpos -986 ypos -758 addUserKnob {20 User} addUserKnob {4 light_type l "light type" M {directional spot "" ""}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DVPrelightPT.gizmo ================================================ Group { name DVPrelightPT onCreate "\nthisGRP = nuke.thisGroup()\nfor knob in thisGRP.knobs() :\n try :\n if thisGRP\[knob].label()\[:19] == 'panel dropped state' :\n thisGRP.removeKnob( nuke.thisNode()\[knob] )\n except :\n pass\n" tile_color 0x7f65ff label "Deep Output" addUserKnob {20 tab_general l General} addUserKnob {26 remarks l * T "specular doesn't work on this node."} addUserKnob {26 title_light l "light"} addUserKnob {18 color t "This control the color and brightness of the light, but not the lighting area.\n\nSo use this value to balance with color's brightness to get a proper result."} color {1 1 1} addUserKnob {7 intensity t "This control the lighting area and brightness.\n\nSo use this value to balance with color's brightness to get a proper result." R 0 50} intensity 1 addUserKnob {4 world_unit l "world unit" t "This unit will only effective on the lighting area by intensity value. If the scene has larger scale, you can choose higher unit. It all reflect to real unit convert.\n\n1km == 1000m\n1m == 10dm\n1dm == 10cm\n1cm == 10mm" M {"millimeter (mm)" "centimeter (cm)" "decimeter (dm)" "meter (m)" "kilometer (km)" ""}} world_unit "centimeter (cm)" addUserKnob {7 exp_in l "falloff in" t "Ease out falloff from the core by exponential math." R 0.01 10} exp_in 1 addUserKnob {7 exp_out l out t "Ease in falloff from the edge by exponential math." -STARTLINE R 0.01 10} exp_out 1 addUserKnob {26 title_transform l "transform"} addUserKnob {4 display_light l display M {off "show light control" "" ""}} display_light "show light control" addUserKnob {41 file_menu l @FolderIcon T LGT.file_menu} addUserKnob {41 snap_menu l @AxisIcon -STARTLINE T LGT.snap_menu} addUserKnob {41 transform T showupTG.transform} addUserKnob {41 xform_order l "transform order" T LGT.xform_order} addUserKnob {41 rot_order l "rotation order" T LGT.rot_order} addUserKnob {41 translate T LGT.translate} addUserKnob {41 rotate T LGT.rotate} addUserKnob {7 uniform_scale l "uniform scale" R 0.01 10} uniform_scale 1 addUserKnob {26 ""} addUserKnob {20 grp_3dpreview l "Pointcloud preview" n 1} grp_3dpreview 0 addUserKnob {4 display_ptc_type l "display type" M {"no pointcloud preview" "raw pointcloud" "with light applied (slow)" "" "" "" ""}} display_ptc_type "raw pointcloud" addUserKnob {41 detail l "point detail" T deepPositionToPoints.detail} addUserKnob {41 pointSize l "point size" T deepPositionToPoints.pointSize} addUserKnob {20 endGroup_1_1 l endGroup n -1} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 4.0} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-13} addUserKnob {22 btn_CHANGELOG l Changlelog T "log = \"Deep2VPosition (Deep2VP)
- added camera setting to metadata
- remove bake and copy buttons
- rename to Deep2VP
- generate/select/import deepNormal in this node
- added generate normal in deep, still keep the previous one.

DVPort (DVPortal)
- renamed to DVPortal

DVPmatte
- removed 'option' knob, 2D matte can use 'open matte' instead
- open matte can choose show matte or color

DVPattern
- internal setup same as DVPmatte
- added rotation knob
- support 'open matte'

DVProjection
- remove bake and copy buttons
- remove all metadata created from Deep2VP

DVPsetLight
- added shader setting and input shader
- not required link camera anymore
- removed deepNormal setup, moved to Deep2VP node

DVPscene
- added multiple output options
- remove all metadata created from DVP's lighting system

DVPrelight
- added specular setup
- added toon shade setup
- fix pointcloud preview with effects

DVPrelightPT
- split up point light from DVPrelight
- fix point light duplicated algorithm

DVPfresnel
- not required link camera anymore
- fix unpremult process, the result was too dark

DVPToImage
- remove all metadata created from Deep2VP
- same as Deep2VP node color

new nodes :
DVPColorCorrect

added shaders :
DVP Shader
DVP Toon Shader\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x7f7f7fff label bin note_font_size 42 xpos -6798 ypos -553 bdwidth 3294 bdheight 1937 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x191919ff label "dont touch" note_font_size 42 xpos -6802 ypos -864 bdwidth 2912 bdheight 192 } Input { inputs 0 name deep xpos -268 ypos -862 } add_layer {deepPosition deepPosition.red deepPosition.green deepPosition.blue deepPosition.alpha} add_layer {deepNormal deepNormal.red deepNormal.green deepNormal.blue deepNormal.alpha} add_layer {DVPshader DVPshader.red DVPshader.green DVPshader.blue DVPshader.alpha} add_layer {deepRawColor deepRawColor.red deepRawColor.green deepRawColor.blue deepRawColor.alpha} DeepExpression { chans0 deepPosition chans1 deepNormal chans2 DVPshader chans3 deepRawColor name spacer1 selected true xpos -268 ypos -782 } Dot { name Dot11 xpos -234 ypos -463 } set N4c88ec00 [stack 0] DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "\[value globalTCL.pt_nstack]" name DeepExpression42 xpos -268 ypos -232 addUserKnob {20 User} addUserKnob {1 nname} nname pt_n } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression65 xpos -268 ypos -152 addUserKnob {20 User} addUserKnob {1 nname} nname pt_nw } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression66 xpos -268 ypos -72 addUserKnob {20 User} addUserKnob {1 nname} nname pt_w } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression67 xpos -268 ypos 8 addUserKnob {20 User} addUserKnob {1 nname} nname pt_sw } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression68 xpos -268 ypos 88 addUserKnob {20 User} addUserKnob {1 nname} nname pt_s } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression69 xpos -268 ypos 168 addUserKnob {20 User} addUserKnob {1 nname} nname pt_se } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression70 xpos -268 ypos 248 addUserKnob {20 User} addUserKnob {1 nname} nname pt_e } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression71 xpos -268 ypos 328 addUserKnob {20 User} addUserKnob {1 nname} nname pt_ne } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression72 xpos -268 ypos 584 addUserKnob {20 User} addUserKnob {1 nname} nname pt_t_n } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression73 xpos -268 ypos 664 addUserKnob {20 User} addUserKnob {1 nname} nname pt_t_nw } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression74 xpos -268 ypos 744 addUserKnob {20 User} addUserKnob {1 nname} nname pt_t_w } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression75 xpos -268 ypos 824 addUserKnob {20 User} addUserKnob {1 nname} nname pt_t_sw } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression76 xpos -268 ypos 904 addUserKnob {20 User} addUserKnob {1 nname} nname pt_t_s } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression77 xpos -268 ypos 984 addUserKnob {20 User} addUserKnob {1 nname} nname pt_t_se } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression78 xpos -268 ypos 1064 addUserKnob {20 User} addUserKnob {1 nname} nname pt_t_e } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression79 xpos -268 ypos 1144 addUserKnob {20 User} addUserKnob {1 nname} nname pt_t_ne } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression80 xpos -268 ypos 1384 addUserKnob {20 User} addUserKnob {1 nname} nname pt_d_n } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression81 xpos -268 ypos 1464 addUserKnob {20 User} addUserKnob {1 nname} nname pt_d_nw } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression82 xpos -268 ypos 1544 addUserKnob {20 User} addUserKnob {1 nname} nname pt_d_w } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression83 xpos -268 ypos 1624 addUserKnob {20 User} addUserKnob {1 nname} nname pt_d_sw } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression84 xpos -268 ypos 1704 addUserKnob {20 User} addUserKnob {1 nname} nname pt_d_s } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression85 xpos -268 ypos 1784 addUserKnob {20 User} addUserKnob {1 nname} nname pt_d_se } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression86 xpos -268 ypos 1864 addUserKnob {20 User} addUserKnob {1 nname} nname pt_d_e } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression87 xpos -268 ypos 1944 addUserKnob {20 User} addUserKnob {1 nname} nname pt_d_ne } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression88 xpos -268 ypos 2206 addUserKnob {20 User} addUserKnob {1 nname} nname pt_d } DeepExpression { temp_name0 zpos temp_expr0 "( deepPosition.red - \[value \[value nname].world_matrix.3] ) * \[value \[value nname]_inv.world_matrix.8] + ( deepPosition.green - \[value \[value nname].world_matrix.7] ) * \[value \[value nname]_inv.world_matrix.9] + ( deepPosition.blue - \[value \[value nname].world_matrix.11] ) * \[value \[value nname]_inv.world_matrix.10]" temp_name1 znor temp_expr1 "deepNormal.red * \[value \[value nname]_inv.world_matrix.8] + deepNormal.green * \[value \[value nname]_inv.world_matrix.9] + deepNormal.blue * \[value \[value nname]_inv.world_matrix.10]" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "max( deepNormal.alpha, \[value globalTCL.pt_nstack] )" name DeepExpression89 xpos -268 ypos 2286 addUserKnob {20 User} addUserKnob {1 nname} nname pt_t } DeepExpression { chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "clamp( (1-deepNormal.alpha) * \[value globalTCL.sphereLinear] )" name DeepExpression30 label linear xpos -268 ypos 2863 } DeepExpression { chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "1- pow( 1-pow( deepNormal.alpha , \[value expO] ) , \[value expI] )" name DeepExpression35 label exponential xpos -268 ypos 3006 addUserKnob {20 User} addUserKnob {7 expI} expI {{"parent.exp_in < 0.01 ? 0.01 : parent.exp_in"}} addUserKnob {7 expO} expO {{"parent.exp_out < 0.01 ? 0.01 : parent.exp_out"}} } Dot { name Dot4 xpos -234 ypos 3344 } set N514cb000 [stack 0] Dot { name Dot8 xpos 343 ypos 3344 } DeepExpression { temp_name0 celShade temp_expr0 "clamp(deepNormal.alpha) ** \[value toonRatio] * (\[value toonLayers]+1)" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "( (int(celShade)-1)/\[value toonLayers]) + (clamp( (celShade%1) * (1/(1-clamp(\[value toonSharpness]))) ) * (1/\[value toonLayers]) )" name DeepExpression40 xpos 309 ypos 3517 addUserKnob {20 User} addUserKnob {3 toonLayers} toonLayers {{"\[metadata sLayers]+0 <= 1 ? 1 : \[metadata sLayers]+0"}} addUserKnob {7 toonSharpness} toonSharpness {{"\[metadata sSharpness]+0"}} addUserKnob {7 toonRatio} toonRatio {{"\[metadata sRatio]+0"}} } DeepExpression { chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha clamp(deepNormal.alpha) name DeepExpression49 label clamp xpos 309 ypos 3642 } Dot { name Dot10 xpos 343 ypos 3909 } set N514ca000 [stack 0] DeepExpression { temp_name0 lr temp_expr0 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.r]" temp_name1 lg temp_expr1 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.g]" temp_name2 lb temp_expr2 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.b]" chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "r * cs.matrix.0 + g * cs.matrix.1 + b * cs.matrix.2" rgba.green "lr * cs.matrix.3 + lg * cs.matrix.4 + lb * cs.matrix.5" rgba.blue "lr * cs.matrix.6 + lg * cs.matrix.7 + lb * cs.matrix.8" name DeepExpression59 label color xpos 2193 ypos 4218 } DeepExpression { chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "r * cs_inv.matrix.0 + g * cs_inv.matrix.1 + b * cs_inv.matrix.2" rgba.green "r * cs_inv.matrix.3 + g * cs_inv.matrix.4 + b * cs_inv.matrix.5" rgba.blue "r * cs_inv.matrix.6 + g * cs_inv.matrix.7 + b * cs_inv.matrix.8" name DeepExpression60 xpos 2193 ypos 4310 } push $N514ca000 DeepExpression { temp_name0 lr temp_expr0 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.r]" temp_name1 lg temp_expr1 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.g]" temp_name2 lb temp_expr2 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.b]" chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "lr<1 && r<1 ? (r+lr-r*lr) : lr(2*(lr-0.5)) ? r : (2*(lr-0.5)) )\n" rgba.green "lg<0.5 ? ( g<(2*lg) ? g : (2*lg) ) : ( g>(2*(lg-0.5)) ? g : (2*(lg-0.5)) )" rgba.blue "lb<0.5 ? ( b<(2*lb) ? b : (2*lb) ) : ( b>(2*(lb-0.5)) ? b : (2*(lb-0.5)) )" name DeepExpression56 label "pin light" xpos 1301 ypos 4228 } push $N514ca000 DeepExpression { temp_name0 lr temp_expr0 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.r]" temp_name1 lg temp_expr1 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.g]" temp_name2 lb temp_expr2 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.b]" chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "lr<0.5 ? ( (2*lr)==0 ? (2*lr) : (1-(1-r)/(2*lr))>0 ? (1-(1-r)/(2*lr)) : 0 ) : ( (2*(lr-0.5))==1 ? (2*(lr-0.5)) : (r/(1-(2*(lr-0.5))))<1 ? (r/(1-(2*(lr-0.5)))) : 1 )" rgba.green "lg<0.5 ? ( (2*lg)==0 ? (2*lg) : (1-(1-g)/(2*lg))>0 ? (1-(1-g)/(2*lg)) : 0 ) : ( (2*(lg-0.5))==1 ? (2*(lg-0.5)) : (g/(1-(2*(lg-0.5))))<1 ? (g/(1-(2*(lg-0.5)))) : 1 )" rgba.blue "lb<0.5 ? ( (2*lb)==0 ? (2*lb) : (1-(1-b)/(2*lb))>0 ? (1-(1-b)/(2*lb)) : 0 ) : ( (2*(lb-0.5))==1 ? (2*(lb-0.5)) : (b/(1-(2*(lb-0.5))))<1 ? (b/(1-(2*(lb-0.5)))) : 1 )" name DeepExpression55 label "vivid light" xpos 1206 ypos 4232 } push $N514ca000 DeepExpression { temp_name0 lr temp_expr0 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.r]" temp_name1 lg temp_expr1 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.g]" temp_name2 lb temp_expr2 "deepNormal.alpha * \[value parent.intensity] * \[value parent.color.b]" chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "lr<0.5 ? r*lr : lr<1 && r<1 ? (r+lr-r*lr) : lrImage Output
" xpos 3043 ypos 5174 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T n/a} addUserKnob {26 l_DATE l "Date Modified" T 2019-05-23} addUserKnob {26 l_CHANGELOG l Changelog T "for internal use"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Input { inputs 0 name deep xpos 508 ypos -26 } Dot { name Dot5 xpos 542 ypos 31 } set N2cdf5400 [stack 0] DeepExpression { chans1 none rgba.red deepPosition.red rgba.green deepPosition.green rgba.blue deepPosition.blue rgba.alpha "alpha == 0 ? 0 : 1" name DeepExpression15 xpos 656 ypos 28 } DeepToImage { name DeepToImage2 xpos 656 ypos 185 } push $N2cdf5400 DeepToImage { name DeepToImage1 xpos 508 ypos 80 } ShuffleCopy { inputs 2 red red green green blue blue alpha black out deepPosition name ShuffleCopy1 xpos 508 ypos 185 } Output { name Output1 xpos 508 ypos 265 } end_group PositionToPoints2 { display textured selectable false render_mode textured cast_shadow false receive_shadow false P_channel deepPosition detail 0.1 name deepPositionToPoints xpos 3043 ypos 5280 disable {{"parent.display_ptc_type == 0 ? 1 : 0"}} } Axis { inputs 0 display off selectable false translate {{parent.translate} {parent.translate} {parent.translate}} name translateOnly xpos -6689 ypos -53 } Dot { name Dot2 xpos -6665 ypos 93 } set N2cdaf000 [stack 0] Axis { display off selectable false rotate {0 180 0} name pt_s xpos -6209 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {0 135 0} name pt_sw xpos -6329 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {0 -45 0} name pt_ne xpos -5849 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {45 90 0} name pt_t_w xpos -5489 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {45 135 0} name pt_t_sw xpos -5369 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {45 180 0} name pt_t_s xpos -5249 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {45 -135 0} name pt_t_se xpos -5129 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {45 -90 0} name pt_t_e xpos -5009 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {45 -45 0} name pt_t_ne xpos -4889 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {-45 45 0} name pt_d_nw xpos -4649 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {-45 90 0} name pt_d_w xpos -4529 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {-45 135 0} name pt_d_sw xpos -4409 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {-45 -135 0} name pt_d_se xpos -4169 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {-45 -90 0} name pt_d_e xpos -4049 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {90 0 0} name pt_t xpos -3689 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {45 45 0} name pt_t_nw xpos -5609 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {-45 180 0} name pt_d_s xpos -4289 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {0 90 0} name pt_w xpos -6449 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {0 -135 0} name pt_se xpos -6089 ypos 1050 } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_w_inv xpos -6449 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_w } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_nw_inv xpos -6569 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_nw } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_s_inv xpos -6209 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_s } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_se_inv xpos -6089 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_se } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_e_inv xpos -5969 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_e } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_ne_inv xpos -5849 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_ne } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_t_n_inv xpos -5729 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_t_n } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_t_w_inv xpos -5489 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_t_w } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_t_se_inv xpos -5129 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_t_se } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_t_ne_inv xpos -4889 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_t_ne } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_d_n_inv xpos -4769 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_d_n } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_d_nw_inv xpos -4649 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_d_nw } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_d_w_inv xpos -4529 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_d_w } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_d_sw_inv xpos -4409 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_d_sw } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_d_s_inv xpos -4289 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_d_s } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_d_se_inv xpos -4169 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_d_se } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_d_ne_inv xpos -3929 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_d_ne } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_d_inv xpos -3809 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_d } push $N2cdaf000 Axis { display off selectable false rotate {-90 0 0} name pt_d xpos -3809 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {-45 -45 0} name pt_d_ne xpos -3929 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {45 0 0} name pt_t_n xpos -5729 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {-45 0 0} name pt_d_n xpos -4769 ypos 1050 } NoOp { inputs 0 name menu01 knobChanged "\nthisGRP = nuke.thisGroup()\nshareKnobs = \['exp_in','exp_out','world_unit']\nspKnobs = \['cone_angle','cone_penumbra_angle']\n\nif thisGRP\['light_type'].value() == 'point' :\n for knob in shareKnobs :\n thisGRP\[knob].setVisible(True)\n for knob in spKnobs :\n thisGRP\[knob].setVisible(False)\n thisGRP\['display_spot'].setVisible(False)\n thisGRP\['display_light'].setVisible(True)\n\nelif thisGRP\['light_type'].value() == 'directional' :\n for knob in shareKnobs :\n thisGRP\[knob].setVisible(False)\n for knob in spKnobs :\n thisGRP\[knob].setVisible(False)\n thisGRP\['display_spot'].setVisible(False)\n thisGRP\['display_light'].setVisible(True)\n\nelif thisGRP\['light_type'].value() == 'spot' :\n for knob in shareKnobs :\n thisGRP\[knob].setVisible(True)\n for knob in spKnobs :\n thisGRP\[knob].setVisible(True)\n thisGRP\['display_spot'].setVisible(True)\n thisGRP\['display_light'].setVisible(False)\n" xpos -6708 ypos -757 addUserKnob {20 User} addUserKnob {4 light_type l "light type" M {point directional spot ""}} } Matrix { inputs 0 matrix { {0.4339115 0.37622687 0.1898616} {0.21264936 0.71516907 0.07218152} {0.01775321 0.10946182 0.87278491} } name cs xpos 2315 ypos 4213 } Matrix { inputs 0 matrix { {3.08022809 -1.537308455 -0.5429191589} {-0.9212164879 1.875966549 0.04525000602} {0.05288143829 -0.2040073872 1.151125908} } name cs_inv xpos 2318 ypos 4300 } Axis { inputs 0 rot_order YXZ rotate {{-parent.rotate} {-parent.rotate} {-parent.rotate}} name LGT_inv xpos -6730 ypos -391 } Axis { inputs 0 name LGT xpos -6633 ypos -391 } Group { inputs 0 name point xpos -6499 ypos -464 } Sphere { inputs 0 display wireframe render_mode off cast_shadow false receive_shadow false rows 10 columns 10 uniform_scale 0.1 name Sphere24 xpos -497 ypos -420 } Output { name Output1 xpos -497 ypos -320 } end_group TransformGeo { inputs 2 selectable false uniform_scale {{parent.uniform_scale}} name showupTG gl_color 0x7f7f7fff xpos -6499 ypos -370 } push $N4c88ec00 NoOp { name getCam xpos -6271 ypos -466 addUserKnob {20 User} addUserKnob {13 cmr01} cmr01 {{"\[lrange \[split \[metadata DVPcamMTX] \" \"] 0 0]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 1 1]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 2 2]+0"}} addUserKnob {13 cmr02} cmr02 {{"\[lrange \[split \[metadata DVPcamMTX] \" \"] 4 4]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 5 5]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 6 6]+0"}} addUserKnob {13 cmr03} cmr03 {{"\[lrange \[split \[metadata DVPcamMTX] \" \"] 8 8]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 9 9]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 10 10]+0"}} } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_sw_inv xpos -6329 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_sw } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_t_nw_inv xpos -5609 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_t_nw } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_t_sw_inv xpos -5369 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_t_sw } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_t_s_inv xpos -5249 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_t_s } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_t_e_inv xpos -5009 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_t_e } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_d_e_inv xpos -4049 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_d_e } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_t_inv xpos -3689 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_t } push $N2cdaf000 Axis { display off selectable false name pt_n xpos -6689 ypos 1050 } Axis { inputs 0 rot_order YXZ rotate {{"-\[value mother].rotate.x"} {"-\[value mother].rotate.y"} 0} name pt_n_inv xpos -6689 ypos 1200 addUserKnob {20 User} addUserKnob {1 mother} mother pt_n } push $N2cdaf000 Axis { display off selectable false rotate {0 45 0} name pt_nw xpos -6569 ypos 1050 } push $N2cdaf000 Axis { display off selectable false rotate {0 -90 0} name pt_e xpos -5969 ypos 1050 } NoOp { inputs 0 name globalTCL xpos -6271 ypos -351 addUserKnob {20 User} addUserKnob {1 nodeNameLGT} nodeNameLGT LGT_inv.world_matrix addUserKnob {1 lgtPX} lgtPX "(deepPosition.red-\[value LGT.world_matrix.3])*\[value nodeNameLGT].0 + (deepPosition.green-\[value LGT.world_matrix.7])*\[value nodeNameLGT].1 + (deepPosition.blue-\[value LGT.world_matrix.11])*\[value nodeNameLGT].2" addUserKnob {1 lgtPY} lgtPY "(deepPosition.red-\[value LGT.world_matrix.3])*\[value nodeNameLGT].4 + (deepPosition.green-\[value LGT.world_matrix.7])*\[value nodeNameLGT].5 + (deepPosition.blue-\[value LGT.world_matrix.11])*\[value nodeNameLGT].6" addUserKnob {1 lgtPZ} lgtPZ "(deepPosition.red-\[value LGT.world_matrix.3])*\[value nodeNameLGT].8 + (deepPosition.green-\[value LGT.world_matrix.7])*\[value nodeNameLGT].9 + (deepPosition.blue-\[value LGT.world_matrix.11])*\[value nodeNameLGT].10" addUserKnob {26 ""} addUserKnob {1 sphereLinear} sphereLinear "1-clamp( sqrt( pow2(\[value globalTCL.lgtPX]) + pow2(\[value globalTCL.lgtPY]) + pow2(\[value globalTCL.lgtPZ]) ) * \[value globalTCL.ptSize] )" addUserKnob {26 ""} addUserKnob {7 unit} unit {{"parent.world_unit==4? 1000000 : pow( 10 , parent.world_unit )"}} addUserKnob {7 ptSize} ptSize {{1/(parent.intensity*unit)}} addUserKnob {1 pt_nstack} pt_nstack "clamp( (1-znor) * -zpos * \[value globalTCL.ptSize] )" addUserKnob {26 ""} addUserKnob {7 iBias} iBias 5 } NoOp { inputs 0 name menu02 knobChanged "\nthisN = nuke.thisNode()\nfor knob in thisN.knobs() :\n try :\n if knob.split('_')\[1] == 'panelDropped' :\n thisN.removeKnob( thisN\[knob] )\n except :\n pass\n" xpos -6585 ypos -756 addUserKnob {20 User} addUserKnob {18 color} color {1 1 1} addUserKnob {6 color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DVProjection.gizmo ================================================ Group { name DVProjection tile_color 0x597fff label "2D image Output" addUserKnob {20 tab_general l General} addUserKnob {41 transform_1 l transform T projCam.transform} addUserKnob {26 title_projcam l "projection camera"} addUserKnob {41 freeze_frame l "freeze frame" t "Check this box to enable framehold function for animated camera" T menu01.freeze_frame} addUserKnob {3 proj_framehold l framehold t "Input the frame number and freeze the projection camera's animation" +DISABLED} proj_framehold 1001 addUserKnob {22 setframe l "set current frame" t "Automatically set frame frame into framehold knob." -STARTLINE +DISABLED T "nuke.thisGroup()\['proj_framehold'].setValue( nuke.frame() )"} addUserKnob {26 ""} addUserKnob {41 proj_rot_order l "rotation order" t "Rotate order of the projection camera" T projCam.rot_order} addUserKnob {41 proj_translate l translate t "Translation of the projection camera" T projCam.translate} addUserKnob {41 proj_rotate l rotate t "Rotation of the projection camera" T projCam.rotate} addUserKnob {22 set_link l "link to selected camera" t "Selected any Camera nodes and this button will link the position to the projection camera." T "thisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('globalTCL')\ngoStore\['fn'].execute()\nroot = getLevel()\nmainKnobs = \['proj_world_matrix','proj_focal','proj_haperture','proj_win_translate','proj_win_scale','proj_winroll']\ndefaultKnobs = \{\n\t\t\t'world matrix' : 'world_matrix',\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\trefreshCamUI( 'link' , thisGRP )\n\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tfor knob in mainKnobs :\n\t\t\t\tthisGRP\[knob].clearAnimated()\n\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\['proj_useMatrix'].setValue(True)\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression( '\{0\}.world_matrix'.format(CAMnode) )\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression( '\{0\}.focal'.format(CAMnode) )\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression( '\{0\}.haperture'.format(CAMnode) )\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression( '\{0\}.win_translate'.format(CAMnode) )\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression( '\{0\}.win_scale'.format(CAMnode) )\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression( '\{0\}.winroll'.format(CAMnode) )\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tfor knob in mainKnobs :\n\t\t\t\t\tthisGRP\[knob].clearAnimated()\n\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\['proj_useMatrix'].setValue(True)\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression( '\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']) )\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression( '\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']) )\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression( '\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']) )\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression( '\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']) )\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression( '\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']) )\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression( '\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['winroll']) )\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data." -STARTLINE T "thisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('globalTCL')\ngoStore\['fn'].execute()\nrefreshCamUI( 'remove' , thisGRP )"} addUserKnob {20 grp_cam_settting l "Camera setting" n 1} grp_cam_settting 0 addUserKnob {41 proj_focal l "focal length" T projCam.focal} addUserKnob {41 proj_haperture l "horiz aperture" T projCam.haperture} addUserKnob {41 proj_win_translate l "window translate" T projCam.win_translate} addUserKnob {41 proj_win_scale l "window scale" T projCam.win_scale} addUserKnob {41 proj_winroll l "window roll" T projCam.winroll} addUserKnob {41 proj_useMatrix l useMatrix +INVISIBLE T projCam.useMatrix} addUserKnob {41 proj_world_matrix l "world matrix" T projCam.matrix} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {78 proj_zrange l "project z range" t "Projection falloff on the range of depth." n 4} proj_zrange {0 1 999999 1000000} addUserKnob {26 title_output l "output settting"} addUserKnob {4 output t "wrapped texture + source\nwhich is a projected texture composite with the input.\n\nwrapped texture\nwhich is only projected texture\n\nuv\nwhich is a uv map, can use this with STMap in downstream." M {"wrapped texture + source" "wrapped texture" uv "" ""}} addUserKnob {20 grp_stmap l "STMap setting" n 1} grp_stmap 0 addUserKnob {41 channels l "apply channels" t "Select channel to apply this projected texture." T DeepVP_STMap.channels} addUserKnob {41 filter t "pixel filter of projected texture." T DeepVP_STMap.filter} addUserKnob {6 black_outside l "black outside" +STARTLINE} black_outside true addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {20 grp_3dpreview l "Pointcloud preview" n 1} grp_3dpreview 0 addUserKnob {4 display_ptc_type l "display type" t "When you open this node's panel, you can check the pointcloud under 3D view.\n\nnone\nwill not show the pointcloud in 3D\n\nraw pointcloud\nshow the pointcloud from input data, without any effects from this node\n\nwith project image\nThis can show the instant result of the projection. Since it feedback in real time, it might slow down the progress in 3D space." M {"no pointcloud preview" "raw pointcloud" "with project image (slow)" "" "" "" "" ""}} display_ptc_type "raw pointcloud" addUserKnob {41 detail l "point detail" t "When you open this node's panel, you can check the pointcloud under 3D view.\n\nThis control the density of the pointcloud." T deepPositionToPoints.detail} addUserKnob {41 pointSize l "point size" t "When you open this node's panel, you can check the pointcloud under 3D view.\n\nThis control the point size of the pointcloud." T deepPositionToPoints.pointSize} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 tab_misc l Misc} addUserKnob {41 keep_deepPosition l "keep deepPosition" T DVPToImage.keep_deepPosition} addUserKnob {41 keep_deepNormal l "keep deepNormal" T DVPToImage.keep_deepNormal} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 4.0} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-13} addUserKnob {22 btn_CHANGELOG l Changlelog T "log = \"Deep2VPosition (Deep2VP)
- added camera setting to metadata
- remove bake and copy buttons
- rename to Deep2VP
- generate/select/import deepNormal in this node
- added generate normal in deep, still keep the previous one.

DVPort (DVPortal)
- renamed to DVPortal

DVPmatte
- removed 'option' knob, 2D matte can use 'open matte' instead
- open matte can choose show matte or color

DVPattern
- internal setup same as DVPmatte
- added rotation knob
- support 'open matte'

DVProjection
- remove bake and copy buttons
- remove all metadata created from Deep2VP

DVPsetLight
- added shader setting and input shader
- not required link camera anymore
- removed deepNormal setup, moved to Deep2VP node

DVPscene
- added multiple output options
- remove all metadata created from DVP's lighting system

DVPrelight
- added specular setup
- added toon shade setup
- fix pointcloud preview with effects

DVPrelightPT
- split up point light from DVPrelight
- fix point light duplicated algorithm

DVPfresnel
- not required link camera anymore
- fix unpremult process, the result was too dark

DVPToImage
- remove all metadata created from Deep2VP
- same as Deep2VP node color

new nodes :
DVPColorCorrect

added shaders :
DVP Shader
DVP Toon Shader\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "don't touch" note_font_size 42 xpos -356 ypos -364 bdwidth 390 bdheight 201 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x4f4f4fff label bin note_font_size 42 xpos -352 ypos -67 bdwidth 385 bdheight 274 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x35454cff label DeepPositionToImage note_font_size 42 xpos 34 ypos 688 bdwidth 1453 bdheight 350 } NoOp { inputs 0 name menu01 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['freeze_frame'].getValue() == 1 :\n thisGRP\['proj_framehold'].setEnabled(True)\n thisGRP\['setframe'].setEnabled(True)\nelse :\n thisGRP\['proj_framehold'].setEnabled(False)\n thisGRP\['setframe'].setEnabled(False)\n" xpos -322 ypos -289 addUserKnob {20 User} addUserKnob {6 freeze_frame l "freeze frame" +STARTLINE} } Camera { inputs 0 name projCam gl_color 0xb2ffff xpos 1813 ypos 2430 } FrameHold { first_frame {{parent.proj_framehold}} name FrameHold xpos 1803 ypos 2552 disable {{!parent.freeze_frame}} } Scene { name Scene1 xpos 1813 ypos 2644 } push 0 ScanlineRender { inputs 2 conservative_shader_sampling false motion_vectors_type off MB_channel none name ScanlineRender1 xpos 1803 ypos 2766 } Input { inputs 0 name deep xpos 494 ypos -427 } Dot { name Dot1 xpos 528 ypos -154 } set N54d80c00 [stack 0] Dot { name Dot18 xpos 1340 ypos -154 } Group { name DVPToImage tile_color 0x3d99ff label "2D image Output" selected true xpos 1306 ypos 835 addUserKnob {20 t_general l General} addUserKnob {4 nuke_version l "" +STARTLINE +INVISIBLE M {10 11 "" ""}} nuke_version 11 addUserKnob {6 keep_deepPosition l "keep deepPosition" +STARTLINE} keep_deepPosition true addUserKnob {6 keep_deepNormal l "keep deepNormal" +STARTLINE} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T n/a} addUserKnob {26 l_DATE l "Date Modified" T 2020-12-13} addUserKnob {22 btn_CHANGELOG l Changlelog T "log = \"for internal use\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Input { inputs 0 name deep xpos 508 ypos -26 } ModifyMetaData { metadata { {remove DVPmatte ""} } name DVPmatteMD xpos 508 ypos 35 } Dot { name Dot5 xpos 542 ypos 117 } set N54d27800 [stack 0] Dot { name Dot2 xpos 704 ypos 117 } set N54d27400 [stack 0] Dot { name Dot1 xpos 973 ypos 117 } DeepExpression { chans1 none rgba.red deepNormal.red rgba.green deepNormal.green rgba.blue deepNormal.blue rgba.alpha "alpha <= 0 ? 0 : 1" name DeepExpression2 selected true xpos 947 ypos 190 } DeepToImage { name DeepToImage3 xpos 939 ypos 367 } Dot { name Dot3 xpos 973 ypos 531 } push $N54d27400 DeepExpression { chans1 none rgba.red deepPosition.red rgba.green deepPosition.green rgba.blue deepPosition.blue rgba.alpha "alpha <= 0 ? 0 : 1" name DeepExpression1 selected true xpos 670 ypos 191 } DeepToImage { name DeepToImage2 xpos 670 ypos 367 } Dot { name Dot6 xpos 704 ypos 449 } push $N54d27800 DeepToImage { name DeepToImage1 xpos 508 ypos 191 } add_layer {deepPosition deepPosition.red deepPosition.green deepPosition.blue deepPosition.alpha} add_layer {deepNormal deepNormal.red deepNormal.green deepNormal.blue deepNormal.alpha} add_layer {deepRawColor deepRawColor.red deepRawColor.green deepRawColor.blue deepRawColor.alpha} Remove { channels deepPosition channels2 deepNormal channels3 deepRawColor name Remove1 xpos 508 ypos 351 } ShuffleCopy { inputs 2 red red green green blue blue alpha black out deepPosition name ShuffleCopy1 xpos 508 ypos 445 disable {{!parent.keep_deepPosition}} } ShuffleCopy { inputs 2 red red green green blue blue alpha black out deepNormal name ShuffleCopy2 xpos 508 ypos 527 disable {{!parent.keep_deepNormal}} } Output { name Output1 xpos 508 ypos 607 } end_group Dot { name Dot20 xpos 1339 ypos 1827 } set N54cdfc00 [stack 0] Dot { name Dot5 xpos 1588 ypos 1827 } set N54cdf800 [stack 0] Shuffle { in deepPosition name Shuffle2 xpos 1554 ypos 2645 } push $N54d80c00 DeepExpression { chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "( deepPosition.red - \[value projCam_data.world_matrix.3] ) * \[value inverseMatrix_cam.invMatrix.0] + ( deepPosition.green - \[value projCam_data.world_matrix.7] ) * \[value inverseMatrix_cam.invMatrix.1] + ( deepPosition.blue - \[value projCam_data.world_matrix.11] ) * \[value inverseMatrix_cam.invMatrix.2]" rgba.green "( ( deepPosition.red - \[value projCam_data.world_matrix.3] ) * \[value inverseMatrix_cam.invMatrix.3] + ( deepPosition.green - \[value projCam_data.world_matrix.7] ) * \[value inverseMatrix_cam.invMatrix.4] + ( deepPosition.blue - \[value projCam_data.world_matrix.11] ) * \[value inverseMatrix_cam.invMatrix.5] ) * \[value root.format.pixel_aspect]" rgba.blue "( deepPosition.red - \[value projCam_data.world_matrix.3] ) * \[value inverseMatrix_cam.invMatrix.6] + ( deepPosition.green - \[value projCam_data.world_matrix.7] ) * \[value inverseMatrix_cam.invMatrix.7] + ( deepPosition.blue - \[value projCam_data.world_matrix.11] ) * \[value inverseMatrix_cam.invMatrix.8]" name DeepExpression9 label "proj cam origin" xpos 494 ypos 45 } DeepExpression { temp_name0 newR temp_expr0 "( red - ( \[value globalTCL.camAspect] * abs( blue ) * \[value projCWin_data.win_translate.u] / 2 ) ) * 1 / \[value projCWin_data.win_scale.u]" temp_name1 newG temp_expr1 "( green - ( \[value globalTCL.camAspect] * abs( blue ) * \[value projCWin_data.win_translate.v] / 2 ) ) * 1 / \[value projCWin_data.win_scale.v]" chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "newR * \[value projCWin_data.world_matrix.0] + newG *\n\[value projCWin_data.world_matrix.1]" rgba.green "newR * \[value projCWin_data.world_matrix.4] + newG *\n\[value projCWin_data.world_matrix.5]" name DeepExpression6 label "revert cam window" xpos 494 ypos 132 } Dot { name Dot6 xpos 528 ypos 339 } set N54cde800 [stack 0] DeepExpression { chans0 alpha chans1 none rgba.alpha 1 name DeepExpression3 label "soild alpha" xpos 494 ypos 497 } DeepExpression { chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "( r / ( abs(b) * \[value globalTCL.camAspect] ) ) + 0.5" rgba.green "( g / ( ( abs(b) * \[value globalTCL.camAspect] ) / ( \[value tex_dot.width] / \[value tex_dot.height] ) ) ) + 0.5" rgba.blue 0 name DeepExpression10 label "create uv" xpos 494 ypos 576 } Group { name DVPToImage1 tile_color 0x3d99ff label "2D image Output" selected true xpos 494 ypos 842 addUserKnob {20 t_general l General} addUserKnob {4 nuke_version l "" +STARTLINE +INVISIBLE M {10 11 "" ""}} nuke_version 11 addUserKnob {6 keep_deepPosition l "keep deepPosition" +STARTLINE} keep_deepPosition {{parent.keep_deepPosition}} addUserKnob {6 keep_deepNormal l "keep deepNormal" +STARTLINE} keep_deepNormal {{parent.keep_deepNormal}} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T n/a} addUserKnob {26 l_DATE l "Date Modified" T 2020-12-13} addUserKnob {22 btn_CHANGELOG l Changlelog T "log = \"for internal use\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Input { inputs 0 name deep xpos 508 ypos -26 } ModifyMetaData { metadata { {remove DVPmatte ""} } name DVPmatteMD xpos 508 ypos 35 } Dot { name Dot5 xpos 542 ypos 117 } set N54cdd400 [stack 0] Dot { name Dot2 xpos 704 ypos 117 } set N54cdd000 [stack 0] Dot { name Dot1 xpos 973 ypos 117 } DeepExpression { chans1 none rgba.red deepNormal.red rgba.green deepNormal.green rgba.blue deepNormal.blue rgba.alpha "alpha <= 0 ? 0 : 1" name DeepExpression2 xpos 939 ypos 191 } DeepToImage { name DeepToImage3 xpos 939 ypos 367 } Dot { name Dot3 xpos 973 ypos 531 } push $N54cdd000 DeepExpression { chans1 none rgba.red deepPosition.red rgba.green deepPosition.green rgba.blue deepPosition.blue rgba.alpha "alpha <= 0 ? 0 : 1" name DeepExpression1 xpos 670 ypos 191 } DeepToImage { name DeepToImage2 xpos 670 ypos 367 } Dot { name Dot6 xpos 704 ypos 449 } push $N54cdd400 DeepToImage { name DeepToImage1 xpos 508 ypos 191 } Remove { channels deepPosition channels2 deepNormal channels3 deepRawColor name Remove1 xpos 508 ypos 351 } ShuffleCopy { inputs 2 red red green green blue blue alpha black out deepPosition name ShuffleCopy1 xpos 508 ypos 445 disable {{!parent.keep_deepPosition}} } ShuffleCopy { inputs 2 red red green green blue blue alpha black out deepNormal name ShuffleCopy2 xpos 508 ypos 527 disable {{!parent.keep_deepNormal}} } Output { name Output1 xpos 508 ypos 607 } end_group Dot { name Dot2 xpos 528 ypos 1359 } set N54c91800 [stack 0] Dot { name Dot3 xpos 808 ypos 1359 } set N54c91400 [stack 0] Dot { name Dot4 xpos 808 ypos 2237 } push $N54cde800 Dot { name Dot7 xpos 123 ypos 339 } DeepExpression { temp_name0 posb temp_expr0 "abs( blue )" chans0 {rgba.red rgba.green rgba.blue -rgba.alpha} chans1 none rgba.red "posb < \[value parent.proj_zrange.0] || posb > \[value parent.proj_zrange.3] ? 0 : posb < \[value parent.proj_zrange.1] ? clamp( ( posb - \[value parent.proj_zrange.0] ) / ( \[value parent.proj_zrange.1] - \[value parent.proj_zrange.0] ) ) * alpha : posb > \[value parent.proj_zrange.2] ? clamp( 1 - ( posb - \[value parent.proj_zrange.2] ) / ( \[value parent.proj_zrange.3] - \[value parent.proj_zrange.2] ) ) * alpha : alpha" rgba.green 0 rgba.blue 0 name DeepExpression5 label zfalloff xpos 89 ypos 493 } Group { name DVPToImage2 tile_color 0x3d99ff label "2D image Output" selected true xpos 89 ypos 837 addUserKnob {20 t_general l General} addUserKnob {4 nuke_version l "" +STARTLINE +INVISIBLE M {10 11 "" ""}} nuke_version 11 addUserKnob {6 keep_deepPosition l "keep deepPosition" +STARTLINE} keep_deepPosition {{parent.keep_deepPosition}} addUserKnob {6 keep_deepNormal l "keep deepNormal" +STARTLINE} keep_deepNormal {{parent.keep_deepNormal}} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T n/a} addUserKnob {26 l_DATE l "Date Modified" T 2020-12-13} addUserKnob {22 btn_CHANGELOG l Changlelog T "log = \"for internal use\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Input { inputs 0 name deep xpos 508 ypos -26 } ModifyMetaData { metadata { {remove DVPmatte ""} } name DVPmatteMD xpos 508 ypos 35 } Dot { name Dot5 xpos 542 ypos 117 } set N54c53800 [stack 0] Dot { name Dot2 xpos 704 ypos 117 } set N54c53400 [stack 0] Dot { name Dot1 xpos 973 ypos 117 } DeepExpression { chans1 none rgba.red deepNormal.red rgba.green deepNormal.green rgba.blue deepNormal.blue rgba.alpha "alpha <= 0 ? 0 : 1" name DeepExpression2 selected true xpos 939 ypos 191 } DeepToImage { name DeepToImage3 xpos 939 ypos 367 } Dot { name Dot3 xpos 973 ypos 531 } push $N54c53400 DeepExpression { chans1 none rgba.red deepPosition.red rgba.green deepPosition.green rgba.blue deepPosition.blue rgba.alpha "alpha <= 0 ? 0 : 1" name DeepExpression1 xpos 670 ypos 191 } DeepToImage { name DeepToImage2 xpos 670 ypos 367 } Dot { name Dot6 xpos 704 ypos 449 } push $N54c53800 DeepToImage { name DeepToImage1 xpos 508 ypos 191 } Remove { channels deepPosition channels2 deepNormal channels3 deepRawColor name Remove1 xpos 508 ypos 351 } ShuffleCopy { inputs 2 red red green green blue blue alpha black out deepPosition name ShuffleCopy1 xpos 508 ypos 445 disable {{!parent.keep_deepPosition}} } ShuffleCopy { inputs 2 red red green green blue blue alpha black out deepNormal name ShuffleCopy2 xpos 508 ypos 527 disable {{!parent.keep_deepNormal}} } Output { name Output1 xpos 508 ypos 607 } end_group Remove { operation keep channels {rgba.red -rgba.green -rgba.blue none} name Remove4 xpos 89 ypos 1121 } Shuffle { green red blue red alpha red name Shuffle1 xpos 89 ypos 1220 } Dot { name Dot8 xpos 123 ypos 1477 } push $N54c91800 Merge2 { inputs 2 operation mask name Merge1 xpos 494 ypos 1474 } push $N54c91400 Input { inputs 0 name tex xpos 1039 ypos -421 number 1 } Crop { box {0 0 {input.width} {input.height}} crop {{parent.black_outside}} name Crop1 xpos 1039 ypos -306 } Dot { name tex_dot xpos 1073 ypos -226 } STMap { inputs 2 channels rgba uv rgba maskChannel rgba.alpha name DeepVP_STMap xpos 1039 ypos 1356 } Merge2 { inputs 2 operation mask name Merge2 xpos 1039 ypos 1474 } Dot { name Dot24 xpos 1073 ypos 1697 } set N54c09800 [stack 0] Dot { name Dot19 xpos 1073 ypos 2225 } set N54c09400 [stack 0] push $N54c09400 push $N54cdfc00 Merge2 { inputs 2 name Merge3 xpos 1305 ypos 2222 } Switch { inputs 3 which {{output}} name Switch2 label "output selection" xpos 1305 ypos 2563 } ShuffleCopy { inputs 2 in deepPosition in2 none red red green green blue blue alpha black out deepPosition name ShuffleCopy1 xpos 1305 ypos 2645 } Switch { inputs 2 name Switch1 label "cam preview" xpos 1305 ypos 2760 } ModifyMetaData { metadata { {remove DVPmatte ""} {remove DVPcamMTX ""} {remove DVPcamAspect ""} {remove DVPcamWin ""} } name DVPmd xpos 1305 ypos 2864 } Output { name Output1 xpos 1305 ypos 3000 } NoOp { inputs 0 name menu02 knobChanged "\nthisGRP = nuke.thisGroup()\nif not thisGRP\['proj_zrange'].isAnimated() :\n thisGRP\['proj_zrange_buffer'].clearAnimated()\n thisGRP\['proj_zrange_buffer'].setValue( thisGRP\['proj_zrange'].getValue() )\nelse :\n thisGRP\['proj_zrange_buffer'].setAnimated()\n anizrange0 = thisGRP\['proj_zrange'].animation( 0 )\n anizrange1 = thisGRP\['proj_zrange'].animation( 1 )\n anizrange2 = thisGRP\['proj_zrange'].animation( 2 )\n anizrange3 = thisGRP\['proj_zrange'].animation( 3 )\n for key in anizrange0.keys() :\n thisGRP\['proj_zrange_buffer'].setValueAt( key.y, key.x, 0 )\n for key in anizrange1.keys() :\n thisGRP\['proj_zrange_buffer'].setValueAt( key.y, key.x, 1 )\n for key in anizrange2.keys() :\n thisGRP\['proj_zrange_buffer'].setValueAt( key.y, key.x, 2 )\n for key in anizrange3.keys() :\n thisGRP\['proj_zrange_buffer'].setValueAt( key.y, key.x, 3 )\n" xpos -196 ypos -290 addUserKnob {20 User} addUserKnob {78 proj_zrange l "distance range" n 4} } Camera { inputs 0 rot_order {{parent.proj_rot_order}} translate {{"parent.freeze_frame ? parent.proj_translate( parent.proj_framehold ) : parent.proj_translate"} {"parent.freeze_frame ? parent.proj_translate( parent.proj_framehold ) : parent.proj_translate"} {"parent.freeze_frame ? parent.proj_translate( parent.proj_framehold ) : parent.proj_translate"}} rotate {{"parent.freeze_frame == 0 ? parent.proj_rotate : parent.proj_rotate( parent.proj_framehold )"} {"parent.freeze_frame == 0 ? parent.proj_rotate : parent.proj_rotate( parent.proj_framehold )"} {"parent.freeze_frame == 0 ? parent.proj_rotate : parent.proj_rotate( parent.proj_framehold )"}} useMatrix {{parent.proj_useMatrix}} matrix { {{"parent.freeze_frame ? parent.proj_world_matrix(parent.proj_framehold) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix(parent.proj_framehold) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix(parent.proj_framehold) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix(parent.proj_framehold) : parent.proj_world_matrix"}} {{"parent.freeze_frame ? parent.proj_world_matrix(parent.proj_framehold) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix(parent.proj_framehold) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix(parent.proj_framehold) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix(parent.proj_framehold) : parent.proj_world_matrix"}} {{"parent.freeze_frame ? parent.proj_world_matrix(parent.proj_framehold) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix(parent.proj_framehold) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix(parent.proj_framehold) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix(parent.proj_framehold) : parent.proj_world_matrix"}} {{"parent.freeze_frame ? parent.proj_world_matrix(parent.proj_framehold) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix(parent.proj_framehold) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix(parent.proj_framehold) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix(parent.proj_framehold) : parent.proj_world_matrix"}} } focal {{parent.proj_focal}} haperture {{parent.proj_haperture}} name projCam_data xpos -174 ypos 19 } push $N54c09800 Dot { name Dot25 xpos 1854 ypos 1697 } push $N54cdf800 Merge2 { inputs 2 name Merge5 xpos 1820 ypos 1824 disable {{"parent.display_ptc_type == 1 ? 1 : parent.display_ptc_type == 2 ? 0 : 1"}} } PositionToPoints2 { display textured render_mode off cast_shadow false receive_shadow false P_channel deepPosition detail 0.1 name deepPositionToPoints xpos 1820 ypos 1887 disable {{"parent.display_ptc_type == 0 ? 1 : 0"}} } StickyNote { inputs 0 name StickyNote1 label "wrapped texture + source" xpos 1283 ypos 2145 } StickyNote { inputs 0 name StickyNote2 label "wrapped texture" xpos 1040 ypos 2147 } StickyNote { inputs 0 name StickyNote3 label uv xpos 771 ypos 2149 } Camera { inputs 0 rotate {0 0 {"parent.freeze_frame == 0 ? parent.proj_winroll :\nparent.proj_winroll( parent.proj_framehold )"}} win_translate {{"parent.freeze_frame == 0 ?\nparent.proj_win_translate : parent.proj_win_translate(\nparent.proj_framehold )"} {"parent.freeze_frame == 0 ?\nparent.proj_win_translate : parent.proj_win_translate(\nparent.proj_framehold )"}} win_scale {{"parent.freeze_frame == 0 ? parent.proj_win_scale :\nparent.proj_win_scale( parent.proj_framehold )"} {"parent.freeze_frame\n== 0 ? parent.proj_win_scale : parent.proj_win_scale(\nparent.proj_framehold )"}} name projCWin_data xpos -308 ypos 17 } Group { inputs 0 name inverseMatrix_cam tile_color 0x337f4cff xpos -187 ypos 135 addUserKnob {20 User} addUserKnob {1 knob_path} knob_path projCam_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group NoOp { inputs 0 name globalTCL xpos -316 ypos 133 addUserKnob {20 User} addUserKnob {22 fn T "import math\n\ndef getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\tggLevel = nuke.root()\n\telse :\n\t\tnodePath = nuke.thisNode().fullName().split('.')\n\t\tnodePath.pop()\n\t\tggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\n##########\n\ndef refreshCamUI( _met , _thisGRP ) :\n\tfh = nuke.toNode('FrameHold')\n\tpcam = nuke.toNode('projCam')\n\tif _thisGRP\['freeze_frame'].value() :\n\t\tgetFrame = int( _thisGRP\['proj_framehold'].getValue() )\n\telse :\n\t\tgetFrame = nuke.frame()\n\n\tpcamSetting = \[ pcam.name() , \n\t\t\t\t\tpcam\['gl_color'].getValue() , \n\t\t\t\t\tpcam\['focal'].getValueAt(getFrame) , \n\t\t\t\t\tpcam\['haperture'].getValueAt(getFrame) , \n\t\t\t\t\tpcam\['win_translate'].getValueAt(getFrame) , \n\t\t\t\t\tpcam\['win_scale'].getValueAt(getFrame) , \n\t\t\t\t\tpcam\['winroll'].getValueAt(getFrame)\n\t\t\t\t\t]\n\n\tif _met == 'link' :\n\t\tnuke.delete( pcam )\n\t\tnewpcam = nuke.nodes.Camera( name=pcamSetting\[0] , gl_color=pcamSetting\[1] , focal=pcamSetting\[2] , haperture=pcamSetting\[3] , winroll=pcamSetting\[6] )\n\t\tnewpcam\['win_translate'].setValue( pcamSetting \[4] )\n\t\tnewpcam\['win_scale'].setValue( pcamSetting \[5] )\n\n\tif _met == 'remove' :\n\t\tpcamMTX = nuke.math.Matrix4()\n\t\tfor i in range(0,16):\n\t\t\tpcamMTX\[i] = pcam\['world_matrix'].getValueAt(getFrame)\[i]\n\n\t\tnuke.delete( pcam )\n\t\tnewpcam = nuke.nodes.Camera( name=pcamSetting\[0] , gl_color=pcamSetting\[1] , focal=pcamSetting\[2] , haperture=pcamSetting\[3] , winroll=pcamSetting\[6] )\n\t\tnewpcam\['win_translate'].setValue( pcamSetting \[4] )\n\t\tnewpcam\['win_scale'].setValue( pcamSetting \[5] )\n\n\t\tpcamMTX.transpose()\n\t\tmTranslate = nuke.math.Matrix4(pcamMTX)\n\t\tmTranslate.translationOnly()\n\t\tmRotate = nuke.math.Matrix4(pcamMTX)\n\t\tmRotate.rotationOnly()\n\n\t\tnewpcam\['translate'].setValue( (mTranslate\[12], mTranslate\[13], mTranslate\[14]) )\n\t\trotateRad = mRotate.rotationsZXY()\n\t\tnewpcam\['rotate'].setValue( (math.degrees(rotateRad\[0]), math.degrees(rotateRad\[1]), math.degrees(rotateRad\[2])) )\n\n\tfh.setInput(0, newpcam)" +STARTLINE} addUserKnob {7 camAspect} camAspect {{"parent.freeze_frame == 0 ? parent.proj_haperture/parent.proj_focal : parent.proj_haperture( parent.proj_framehold )/parent.proj_focal( parent.proj_framehold )"}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DVPscene.gizmo ================================================ Group { name DVPscene onCreate "\nthisGRP = nuke.thisGroup()\nfor knob in thisGRP.knobs() :\n try :\n if thisGRP\[knob].label()\[:19] == 'panel dropped state' :\n thisGRP.removeKnob( nuke.thisNode()\[knob] )\n except :\n pass\n" tile_color 0x597fff label "Deep Output" addUserKnob {20 tab_general l General} addUserKnob {4 output t "composite\nWhich is a beauty of the render.\n\nrawlight pass\nA pass with only illuminated by light. Using multiply math.\n\nshader pass\nA pass with shader attribute. Using additive math.\n\nextra pass\nDepends on other features on the shader provided." M {composite "rawlight pass" "shader pass" "extra pass"}} addUserKnob {18 light_shading l "light shading" t "Combine the original color in diffuse."} light_shading 0.1 addUserKnob {41 ambient T menu01.ambient} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 4.0} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-13} addUserKnob {22 btn_CHANGELOG l Changlelog T "log = \"Deep2VPosition (Deep2VP)
- added camera setting to metadata
- remove bake and copy buttons
- rename to Deep2VP
- generate/select/import deepNormal in this node
- added generate normal in deep, still keep the previous one.

DVPort (DVPortal)
- renamed to DVPortal

DVPmatte
- removed 'option' knob, 2D matte can use 'open matte' instead
- open matte can choose show matte or color

DVPattern
- internal setup same as DVPmatte
- added rotation knob
- support 'open matte'

DVProjection
- remove bake and copy buttons
- remove all metadata created from Deep2VP

DVPsetLight
- added shader setting and input shader
- not required link camera anymore
- removed deepNormal setup, moved to Deep2VP node

DVPscene
- added multiple output options
- remove all metadata created from DVP's lighting system

DVPrelight
- added specular setup
- added toon shade setup
- fix pointcloud preview with effects

DVPrelightPT
- split up point light from DVPrelight
- fix point light duplicated algorithm

DVPfresnel
- not required link camera anymore
- fix unpremult process, the result was too dark

DVPToImage
- remove all metadata created from Deep2VP
- same as Deep2VP node color

new nodes :
DVPColorCorrect

added shaders :
DVP Shader
DVP Toon Shader\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x4c4c4cff label bin note_font_size 42 xpos -592 ypos -35 bdwidth 474 bdheight 385 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0xff label "dont touch" note_font_size 42 xpos -1027 ypos -21 bdwidth 316 bdheight 274 } Input { inputs 0 name deep xpos 62 ypos -70 } DeepExpression { chans1 deep name spacer xpos 62 ypos 10 } Dot { name Dot1 xpos 96 ypos 90 } set N51ae9c00 [stack 0] add_layer {deepRawColor deepRawColor.red deepRawColor.green deepRawColor.blue deepRawColor.alpha} DeepExpression { chans0 {deepRawColor.red deepRawColor.green deepRawColor.blue none} chans1 none deepRawColor.red "( deepRawColor.red * \[value diffuse.x] ) + \[value parent.ambient.r]" deepRawColor.green "( deepRawColor.green * \[value diffuse.y] ) + \[value parent.ambient.g]" deepRawColor.blue "( deepRawColor.blue * \[value diffuse.z] ) + \[value parent.ambient.b]" name DeepExpression4 xpos 62 ypos 164 addUserKnob {20 User} addUserKnob {13 diffuse} diffuse {{"\[lrange \[split \[metadata sDiffuse] \" \"] 0 0]+0"} {"\[lrange \[split \[metadata sDiffuse] \" \"] 1 1]+0"} {"\[lrange \[split \[metadata sDiffuse] \" \"] 2 2]+0"}} } Dot { name Dot6 xpos 96 ypos 363 } set N51ae9400 [stack 0] DeepExpression { chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "max( deepRawColor.red * red , DVPshader.red ) + deepRawColor.red * clamp( \[value parent.light_shading.r] )" rgba.green "max( deepRawColor.green * green , DVPshader.green ) + deepRawColor.green * clamp( \[value parent.light_shading.g] )" rgba.blue "max( deepRawColor.blue * blue , DVPshader.blue ) + deepRawColor.blue * clamp( \[value parent.light_shading.b] ) )" name DeepExpression1 xpos 218 ypos 360 } add_layer {deepNormal deepNormal.red deepNormal.green deepNormal.blue deepNormal.alpha} DeepExpression { temp_name0 uMult temp_expr0 "abs( (x+0.5)/input.width-0.5 ) *2" temp_name1 vMult temp_expr1 "abs( (y+0.5)/input.height-0.5 ) *2" temp_name2 hHalfAOV temp_expr2 "degrees( atan( ( ( \[value getCam.aspect] ) * abs( deep.front ) /2 ) / abs( deep.front ) ) )" temp_name3 vHalfAOV temp_expr3 "degrees( atan( ( ( \[value getCam.aspect] ) * (input.height/input.width) * abs( deep.front ) /2 ) / abs( deep.front ) ) )" chans0 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans1 none deepNormal.alpha "clamp( xinput.width/2 && y>input.height/2 ? \[value cx]*-cos(radians(-vHalfAOV*vMult))*sin(radians(hHalfAOV*uMult)) + \[value cy]*sin(radians(-vHalfAOV*vMult)) + \[value cz]*cos(radians(-vHalfAOV*vMult))*cos(radians(hHalfAOV*uMult)) : xinput.height/2 ? \[value cx]*-cos(radians(-vHalfAOV*vMult))*sin(radians(-hHalfAOV*uMult)) + \[value cy]*sin(radians(-vHalfAOV*vMult)) + \[value cz]*cos(radians(-vHalfAOV*vMult))*cos(radians(-hHalfAOV*uMult)) : \[value cx]*-cos(radians(vHalfAOV*vMult))*sin(radians(hHalfAOV*uMult)) + \[value cy]*sin(radians(vHalfAOV*vMult)) + \[value cz]*cos(radians(vHalfAOV*vMult))*cos(radians(hHalfAOV*uMult)) )" name DeepExpression6 xpos 218 ypos 430 addUserKnob {20 User} addUserKnob {1 cx} cx "(deepNormal.red*\[value inverseMatrix_cam.invMatrix.0] + deepNormal.green*\[value inverseMatrix_cam.invMatrix.1] + deepNormal.blue*\[value inverseMatrix_cam.invMatrix.2])" addUserKnob {1 cy} cy "(deepNormal.red*\[value inverseMatrix_cam.invMatrix.3] + deepNormal.green*\[value inverseMatrix_cam.invMatrix.4] + deepNormal.blue*\[value inverseMatrix_cam.invMatrix.5])" addUserKnob {1 cz} cz "(deepNormal.red*\[value inverseMatrix_cam.invMatrix.6] + deepNormal.green*\[value inverseMatrix_cam.invMatrix.7] + deepNormal.blue*\[value inverseMatrix_cam.invMatrix.8])" } Dot { name Dot9 xpos 252 ypos 510 } set N51ae8800 [stack 0] Dot { name Dot10 xpos 887 ypos 510 } set N51ae8400 [stack 0] Dot { name Dot11 xpos 1081 ypos 510 } DeepExpression { temp_name0 contourSize temp_expr0 "deepNormal.alpha < clamp(\[metadata sContourSize]+0) ? 1 : 1-clamp( (deepNormal.alpha-clamp(\[metadata sContourSize]+0)) * (1/0.01) )" chans1 none rgba.red "contourColor.x*contourSize * alpha" rgba.green "contourColor.y*contourSize * alpha" rgba.blue "contourColor.z*contourSize * alpha" rgba.alpha "contourSize * alpha" name DeepExpression8 xpos 1047 ypos 621 addUserKnob {20 User} addUserKnob {13 contourColor} contourColor {{"\[lrange \[split \[metadata sContourColor] \" \"] 0 0]+0"} {"\[lrange \[split \[metadata sContourColor] \" \"] 1 1]+0"} {"\[lrange \[split \[metadata sContourColor] \" \"] 2 2]+0"}} } DeepExpression { chans0 deep chans1 none deep.front "alpha<=0 ? -1 : deep.front" deep.back "alpha<=0 ? -1 : deep.back" name DeepExpression9 label "alpha check" xpos 1047 ypos 701 } DeepCrop { use_znear false zfar 1 outside_zrange true bbox {0 0 1 1} use_bbox false name DeepCrop1 label "sample cleanup" xpos 1047 ypos 793 } push $N51ae8400 DeepExpression { chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red 0 rgba.green 0 rgba.blue 0 name DeepExpression10 xpos 853 ypos 755 } Switch { inputs 2 which {{"\[metadata DVPshader]+0 == 2 ? 1 : 0"}} name Switch3 xpos 853 ypos 894 } Dot { name Dot8 xpos 887 ypos 1030 } push $N51ae9c00 Dot { name Dot2 xpos 493 ypos 90 } set N51a96000 [stack 0] Dot { name Dot3 xpos 643 ypos 90 } DeepExpression { chans0 rgb chans1 none rgba.red DVPshader.red rgba.green DVPshader.green rgba.blue DVPshader.blue name DeepExpression3 xpos 609 ypos 352 } Dot { name Dot4 xpos 643 ypos 1017 } push $N51a96000 DeepExpression { chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "red * alpha" rgba.green "green * alpha" rgba.blue "blue * alpha" name DeepExpression2 xpos 459 ypos 355 } Dot { name Dot5 xpos 493 ypos 1012 } push $N51ae8800 DeepExpression { temp_name0 contourSize temp_expr0 "deepNormal.alpha < clamp(\[metadata sContourSize]+0) ? 1 : 1-clamp( (deepNormal.alpha-clamp(\[metadata sContourSize]+0)) * (1/0.01) )" chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "r * (1-contourSize) + (contourColor.x*contourSize)" rgba.green "g * (1-contourSize) + (contourColor.y*contourSize)" rgba.blue "b * (1-contourSize) + (contourColor.z*contourSize)" name DeepExpression13 xpos 218 ypos 576 addUserKnob {20 User} addUserKnob {13 contourColor} contourColor {{"\[lrange \[split \[metadata sContourColor] \" \"] 0 0]+0"} {"\[lrange \[split \[metadata sContourColor] \" \"] 1 1]+0"} {"\[lrange \[split \[metadata sContourColor] \" \"] 2 2]+0"}} } Dot { name Dot12 xpos 252 ypos 868 } push $N51ae9400 DeepExpression { chans0 {rgba.red rgba.green rgba.blue none} chans1 none rgba.red "( deepRawColor.red * red + DVPshader.red ) + deepRawColor.red * clamp( \[value parent.light_shading.r] )" rgba.green "( deepRawColor.green * green + DVPshader.green ) + deepRawColor.green * clamp( \[value parent.light_shading.g] )" rgba.blue "( deepRawColor.blue * blue + DVPshader.blue ) + deepRawColor.blue * clamp( \[value parent.light_shading.b] )" name DeepExpression5 xpos 62 ypos 435 } Switch { inputs 2 which {{"\[metadata DVPshader]+0 == 2 ? 1 : 0"}} name Switch2 xpos 62 ypos 924 } Switch { inputs 4 which {{parent.output}} name Switch1 xpos 62 ypos 1181 } add_layer {deepPosition deepPosition.red deepPosition.green deepPosition.blue deepPosition.alpha} add_layer {DVPshader DVPshader.red DVPshader.green DVPshader.blue DVPshader.alpha} DeepExpression { chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans2 DVPshader deepPosition.alpha 0 deepNormal.alpha 0 DVPshader.red 0 DVPshader.green 0 DVPshader.blue 0 DVPshader.alpha 0 name DeepExpression7 label "reset all working channels" xpos 62 ypos 1261 } ModifyMetaData { metadata { {remove DVPshader ""} {remove sStatus ""} {remove sDiffuse ""} {remove sSpecular ""} {remove sGlossiness ""} {remove sStyle ""} {remove sLayers ""} {remove sSharpness ""} {remove sRatio ""} {remove sSpecReplace ""} {remove sSpecColor ""} {remove sContourSize ""} {remove sContourColor ""} } name rmShaderData xpos 62 ypos 1383 } Output { name Output1 xpos 62 ypos 1471 } Group { inputs 0 name inverseMatrix_cam tile_color 0x337f4cff xpos -566 ypos 265 addUserKnob {20 User} addUserKnob {1 knob_path} knob_path cam_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group push $N51ae9c00 Dot { name Dot7 xpos -366 ypos 90 } NoOp { name getCam xpos -400 ypos 180 addUserKnob {20 User} addUserKnob {13 cmr01} cmr01 {{"\[lrange \[split \[metadata DVPcamMTX] \" \"] 0 0]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 1 1]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 2 2]+0"}} addUserKnob {13 cmr02} cmr02 {{"\[lrange \[split \[metadata DVPcamMTX] \" \"] 4 4]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 5 5]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 6 6]+0"}} addUserKnob {13 cmr03} cmr03 {{"\[lrange \[split \[metadata DVPcamMTX] \" \"] 8 8]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 9 9]+0"} {"\[lrange \[split \[metadata DVPcamMTX] \" \"] 10 10]+0"}} addUserKnob {7 aspect} aspect {{"\[metadata DVPcamAspect]+0"}} } Camera { inputs 0 display off selectable false rot_order XYZ useMatrix true matrix { {{getCam.cmr01.x} {getCam.cmr01.y} {getCam.cmr01.z} 0} {{getCam.cmr02.x} {getCam.cmr02.y} {getCam.cmr02.z} 0} {{getCam.cmr03.x} {getCam.cmr03.y} {getCam.cmr03.z} 0} {0 0 0 1} } name cam_data xpos -555 ypos 159 } NoOp { inputs 0 name menu01 knobChanged "\nthisN = nuke.thisNode()\nfor knob in thisN.knobs() :\n try :\n if knob.split('_')\[1] == 'panelDropped' :\n thisN.removeKnob( thisN\[knob] )\n except :\n pass\n" xpos -991 ypos 165 addUserKnob {20 User} addUserKnob {18 ambient} ambient {0 0 0} addUserKnob {6 ambient_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } StickyNote { inputs 0 name StickyNote1 label DVP_shader xpos 56 ypos 294 } StickyNote { inputs 0 name StickyNote4 label "shader pass" xpos 609 ypos 293 } StickyNote { inputs 0 name StickyNote3 label "rawlight pass" xpos 456 ypos 293 } StickyNote { inputs 0 name StickyNote5 label "extra pass" xpos 852 ypos 291 } StickyNote { inputs 0 name StickyNote2 label DVP_ToonShader xpos 219 ypos 296 } StickyNote { inputs 0 name StickyNote6 label "DVP_ToonShader\ncontour" xpos 1043 ypos 548 } StickyNote { inputs 0 name StickyNote7 label nothing xpos 852 ypos 549 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DVPsetLight.gizmo ================================================ Group { name DVPsetLight tile_color 0x597fff label "Deep Output" addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 4.0} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-13} addUserKnob {22 btn_CHANGELOG l Changlelog T "log = \"Deep2VPosition (Deep2VP)
- added camera setting to metadata
- remove bake and copy buttons
- rename to Deep2VP
- generate/select/import deepNormal in this node
- added generate normal in deep, still keep the previous one.

DVPort (DVPortal)
- renamed to DVPortal

DVPmatte
- removed 'option' knob, 2D matte can use 'open matte' instead
- open matte can choose show matte or color

DVPattern
- internal setup same as DVPmatte
- added rotation knob
- support 'open matte'

DVProjection
- remove bake and copy buttons
- remove all metadata created from Deep2VP

DVPsetLight
- added shader setting and input shader
- not required link camera anymore
- removed deepNormal setup, moved to Deep2VP node

DVPscene
- added multiple output options
- remove all metadata created from DVP's lighting system

DVPrelight
- added specular setup
- added toon shade setup
- fix pointcloud preview with effects

DVPrelightPT
- split up point light from DVPrelight
- fix point light duplicated algorithm

DVPfresnel
- not required link camera anymore
- fix unpremult process, the result was too dark

DVPToImage
- remove all metadata created from Deep2VP
- same as Deep2VP node color

new nodes :
DVPColorCorrect

added shaders :
DVP Shader
DVP Toon Shader\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Input { inputs 0 name shader xpos -162 ypos 164 number 1 } add_layer {DVPshader DVPshader.red DVPshader.green DVPshader.blue DVPshader.alpha} AddChannels { inputs 0 channels DVPshader name AddChannels4 xpos -153 ypos -24 } add_layer {deepRawColor deepRawColor.red deepRawColor.green deepRawColor.blue deepRawColor.alpha} AddChannels { inputs 0 channels deepRawColor name AddChannels2 xpos -154 ypos -208 } Input { inputs 0 name deep xpos 0 ypos -290 } DeepRecolor { inputs 2 channels {{{parent.AddChannels2.channels}}} name DeepRecolor4 xpos 0 ypos -208 } DeepExpression { chans0 deepRawColor chans1 rgb rgba.red 0 rgba.green 0 rgba.blue 0 deepRawColor.red red deepRawColor.green green deepRawColor.blue blue deepRawColor.alpha alpha name DeepExpression6 label "store original color data" xpos 0 ypos -116 } DeepRecolor { inputs 2 channels {{{AddChannels4.channels}}} name DeepRecolor7 xpos 0 ypos -24 } ModifyMetaData { metadata { {set DVPshader 0} {set sStatus 0} {set sDiffuse "\[value diffuseRGB]"} } name stShaderData xpos 0 ypos 84 addUserKnob {20 User} addUserKnob {13 diffuseRGB} diffuseRGB {0.18 0.18 0.18} } CopyMetaData { inputs 2 name CopyMetaData1 xpos 0 ypos 164 } Output { name Output1 xpos 0 ypos 244 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DasGrain.gizmo ================================================ Group { name DasGrain help "DasGrain makes regraining as simple as clicking a few buttons.\n\nFollow the steps in the Help tab and you'll have a perfect regrain in no time!" onCreate "import random\n\ntestimonials = \[\n \"Such an elegant solution, love it!\",\n \"Your gizmo is beyond expectation\",\n \"Totally awesome!\",\n \"DasGrain is officially the best thing ever\",\n \"It's really working!\",\n \"Das bringt Tränen in meine Augen\",\n \"DasGrain is the salvation we waited for\",\n \"I save a lot of time, and definitely my nerves :)\",\n \"It's alright\",\n \"My new favourite node, thanks!
Having said that, ...\"\n ]\n\nnode = nuke.thisNode()\nnode\['testimonial'].setValue('


«%s»
— anonymous

' % random.choice(testimonials))\nnode\['box'].setFlag(nuke.NO_ANIMATION)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == 'box':\n this_frame = nuke.frame()\n n\['sample_frame'].setValue(this_frame)\n\nif k.name() == 'scatter':\n n\['divider04'].setVisible(k.value() == False)\n n\['divider05'].setVisible(k.value() == True)" tile_color 0x7f7f7fff selected true addUserKnob {20 DasGrain_tab l DasGrain} addUserKnob {41 output t "regrained comp it is what it sais\nplate grain plate minus degrained plate\nnormalised grain check if the normalization worked. It should be as even as possible. This is what you want to output if you want to prerender a grain plate. Later you can plug it into the external grain input of another DasGrain\nadapted grain check if the adaptation worked. Output this if you want to further manipulate the grain (who knows what the sup is gonna come up with...). After, simply plus it to your comp (at that point the comp has to be in the camera colorspace, as set in the Analyze tab).\ngrain QC check if voronoi seams are visible (→ edgeblend), or the scattered grain looks different to the original plate grain (→ maybe bad sample area or wrong luminance degrain amount)" T Output.output} addUserKnob {4 meta l "metadata from" t "Chances are you want to use the metadata from the plate, but who am I to assume :)" M {COMP PLATE}} addUserKnob {26 spacer01_1 l " " T " "} addUserKnob {20 GrainGroupBegin l "" +STARTLINE n -2} addUserKnob {20 Analyze_tab l Analyze} addUserKnob {26 text l Colorspace} addUserKnob {41 project_colorspace l project t "set this to the project color space" T OCIOColorSpace1.in_colorspace} addUserKnob {22 python_button l "What's this all about?" -STARTLINE T "nuke.message(\"Regraining in other color spaces than the camera native linear space can lead to unexpected behaviour.\\n\\nFor example converting Alexa plates to ACEScg might introduce negative values due to ACEScg's smaller gamut. In that case converting back to ARRI Linear ALEXA Wide Gamut will probably help.\\nJust set project to ACEScg and camera to ARRI Linear ALEXA Wide Gamut.\\n\\nThis might be transferable to other cameras, but I've only tested with Alexas.\\n---------\\nBypass by setting both knobs to the same value.\")"} addUserKnob {41 camera_colorspace l camera t "set this to the camera native linear space" T OCIOColorSpace1.out_colorspace} addUserKnob {26 text_2 l " " T " "} addUserKnob {26 level l "Degrain amount"} addUserKnob {78 luminance t "Leave this at 1 if you're working on a completely degrained plate.\n\nIn case you decided to leave some luminance grain in the degrained plate (use the DegrainHelper node for this!), set this to the same value as in the DegrainHelper in order to compensate.\n\nIf the luminance degrain amount was set to 0.8, this needs to be set to 0.8 as well.\n\nYou need to select a mask of all elements that cover the plate, otherwise the grain of whole comp will be too strong " n 1} luminance 1 addUserKnob {26 divider01 l " "} addUserKnob {41 degrain_amount_mask l "degrain amount mask" t "Use this channel from the mask input to specify in what area of the comp the missing luminance grain needs to be compensated." T Multiply1.maskChannelMask} addUserKnob {41 invert_mask l invert -STARTLINE T Multiply1.invert_mask} addUserKnob {26 spacer02 l " " T " "} addUserKnob {26 divider02 l Analyze} addUserKnob {3 number_of_frames l "number of frames" t "Set the number of sample frames to be spread across the input range.\n\nMore frames lead to higher accuracy.\n\nIf there are particularly bright or dark frames, set them manually in the knob below to make sure they are part of the analysis.\n\nIf you want to set all sample frames manually, set this to 0 and add the frames in the knob below."} number_of_frames 10 addUserKnob {1 additional_frames l "additional frames" t "Set additional frames like this:\n\n1001,1020,1053 (single frames)\n1020-1040 (frame ranges)\n1020-1040x4 (frame ranges with step)"} addUserKnob {3 sample_count l "sample count" t "The samples are spread across the sample range (which gets calculated automatically) based on the AlexaV3LogC curve. This results in more samples in the dark areas and less samples in the brights.\n\nMore samples lead to a more detailed response curve (while the accuracy is limited by the quality of the degrain)."} sample_count 20 addUserKnob {22 analyze l Analyze t "this is where the magic happens" T "import base64\nthis = nuke.thisNode()\n\n\ndef _sample_count(this):\n \"\"\"returns the sample count\"\"\"\n\n sample_count = int(this\['sample_count'].value())\n\n if sample_count <= 0:\n raise RuntimeError('Enter a sample count greater than 0')\n\n else:\n return sample_count\n\n\ndef _generate_frame_list(this):\n \"\"\"converts the frames submitted by the user into a list\"\"\"\n\n frame_list = \[]\n number_of_frames = int(this\['number_of_frames'].value())\n additional_frames = this\['additional_frames'].value()\n\n if number_of_frames < 1 and additional_frames is '':\n raise RuntimeError('Either set the number of frames > 0\\nor define additional frames')\n\n first_frame = max(this.input(1).firstFrame(), this.input(2).firstFrame())\n last_frame = min(this.input(1).lastFrame(), this.input(2).lastFrame())\n\n if number_of_frames > 0:\n distance = (last_frame - first_frame) / (number_of_frames)\n frame = first_frame + distance / 2\n\n for x in range(number_of_frames):\n int_frame = int(round(frame))\n if int_frame not in frame_list:\n frame_list.append(int_frame)\n\n frame += distance\n\n frange = nuke.FrameRanges(additional_frames.split(','))\n\n for r in frange:\n for f in r:\n if f >= first_frame and f <= last_frame:\n if f not in frame_list:\n frame_list.append(f)\n\n frame_list.sort()\n\n return frame_list\n\n\ndef _setup_for_multiframe(frame_list):\n \"\"\" arranges all sample frames next to each other, starting at frame 0\n and sets the frame number knob of the FrameBlend node\"\"\"\n\n time_warp = nuke.toNode('TimeWarp1')\n time_warp\['lookup'].clearAnimated()\n time_warp\['lookup'].setAnimated()\n anim_list = \[]\n\n for n, frame in enumerate(frame_list):\n anim_list.append(nuke.AnimationKey(n, frame))\n\n anim = time_warp\['lookup'].animation(0)\n anim.addKey(anim_list)\n\n frame_blend = nuke.toNode('FrameBlend1')\n frame_blend\['endframe'].setValue(len(frame_list)-1)\n\n\ndef _generate_sample_list(sample_count, sample_range, sample_radius):\n \"\"\"generate a list of sample values spread equally between the\n min and max values of the sample range\"\"\"\n\n sample_list = \[]\n\n for item in range(0, sample_count):\n sample_list.append(float(item) / sample_count * (sample_range\[1] - sample_range\[0]) + sample_range\[0] + sample_radius)\n\n return sample_list\n\n\ndef _get_sample_range(channel, channel_list, frame_list):\n \"\"\" samples the minimum and maximum values of the given frame range and\n sets the sample range to those values\"\"\"\n\n curve_tool = nuke.toNode('CurveTool_Range')\n min_knob = curve_tool\['minlumapixvalue']\n max_knob = curve_tool\['maxlumapixvalue']\n\n min_knob.setAnimated()\n max_knob.setAnimated()\n\n curve_tool\['channels'].setValue(channel)\n\n nuke.execute(curve_tool, nuke.FrameRanges(frame_list))\n\n index = channel_list.index(channel)\n min_list = \[key.y for key in min_knob.animation(index).keys()]\n max_list = \[key.y for key in max_knob.animation(index).keys()]\n\n min_value = min(min_list)\n max_value = max(max_list)\n\n min_knob.clearAnimated()\n max_knob.clearAnimated()\n curve_tool\['minlumapixdata'].clearAnimated()\n curve_tool\['maxlumapixdata'].clearAnimated()\n\n return \[min_value, max_value]\n\n\ndef _sample_it(keyer, curve_tool, sample, sample_radius):\n \"\"\"analyze the grain level per channel and sample value in the sample range\"\"\"\n\n keyer\['temp_expr0'].setValue(str(sample - sample_radius))\n keyer\['temp_expr1'].setValue(str(sample + sample_radius))\n\n intensity_knob = curve_tool\['intensitydata']\n intensity_knob.clearAnimated()\n intensity_knob.setAnimated()\n\n nuke.execute(curve_tool, nuke.frame(), nuke.frame())\n sample_values = intensity_knob.value()\n intensity_knob.clearAnimated()\n\n return sample_values\n\n\ndef check_inputs(this):\n if this.input(1) is None:\n raise RuntimeError('no plate connected')\n\n if this.input(2) is None:\n raise RuntimeError('no degrained plate connected')\n\n def format_tuple(node):\n return node.format().width(), node.format().height(), node.format().pixelAspect()\n\n if format_tuple(this.input(1)) != format_tuple(this.input(2)):\n raise RuntimeError(\"Format missmatch: Make sure the formats of plate and degrained plate match.\")\n\n\ndef start(this):\n \"\"\"let's do this!\"\"\"\n\n check_inputs(this)\n\n with this:\n frame_list = _generate_frame_list(this)\n _setup_for_multiframe(frame_list)\n sample_count = _sample_count(this)\n\n blank = base64.b64decode('cmVkIHtjdXJ2ZX0KZ3JlZW4ge2N1cnZlfQpibHVlIHtjdXJ2ZX0=').decode('ascii')\n\n lut = nuke.toNode('Sampler1')\['lut']\n lut.fromScript(blank)\n\n channel_list = \['red', 'green', 'blue']\n\n keyer = nuke.toNode('Expression2')\n copy = nuke.toNode('Copy2')\n\n curve_tool = nuke.toNode('CurveTool')\n pixel = curve_tool\['ROI'].value()\[2] * curve_tool\['ROI'].value()\[3]\n\n task = nuke.ProgressTask('Analysing...')\n step = 100.0 / 3 / sample_count\n progress = step\n\n time_warp = nuke.toNode('TimeWarp1')\n frame_blend = nuke.toNode('FrameBlend1')\n\n time_warp\['disable'].setValue(False)\n frame_blend\['disable'].setValue(False)\n\n for channel in channel_list:\n task.setMessage('\{\} range'.format(channel))\n\n copy\['from0'].setValue('rgba.\{\}'.format(channel))\n\n sample_range = _get_sample_range(channel, channel_list, frame_list)\n sample_radius = (sample_range\[1] - sample_range\[0]) / sample_count / 2\n sample_list = _generate_sample_list(sample_count, sample_range, sample_radius)\n\n for sample in sample_list:\n if task.isCancelled():\n return\n\n task.setProgress(int(progress))\n\n sample_values = _sample_it(keyer, curve_tool, sample, sample_radius)\n\n task.setMessage('\{\} channel at \{\}'.format(channel, round(sample, 2)))\n\n if sample_values\[3] * pixel >= 10:\n lut.setValueAt(sample_values\[0] / sample_values\[3], sample_values\[1] / sample_values\[3], channel_list.index(channel))\n\n progress += step\n\n time_warp\['lookup'].clearAnimated()\n time_warp\['disable'].setValue(True) # hopefully prevents slowing down the comp\n frame_blend\['disable'].setValue(True) # hopefully prevents slowing down the comp\n\n del task\n\n\nstart(this)\n" +STARTLINE} addUserKnob {26 divider03 l " "} addUserKnob {41 analysis_mask l "analysis mask" t "Use this channel from the mask input to control what area of the plate will be analyzed.\n\nUsefull if the degrain is obviously bad in some areas." T ChannelMerge1.A} addUserKnob {6 invert_1 l invert -STARTLINE} addUserKnob {20 Adjust_tab l Adjust} addUserKnob {22 whatsthis l "What am I looking at?" T "nuke.message(\"After the analysis you'll see the sampled grain response curves here. On the x-axis is the brightness of the image and on the y-axis the grain intensity. Grain increases with brightness, so the slope of the curves should always be positive (they should always go up ↗).

The quality of the curves depends entirely on the quality of the degrain. If the curves look wrong (for example they go up and down), try to improve the degrain first. If they still look wrong and the resulting regrain doesn't work well enough, you can try to improve the curves here by deleting/correcting all points that don't follow an upwards trend.

You can also extend the curves (again: with an upwards trend) if the comp has values that don't exist in the plate.

Note: The curve is used for both the normalization as well as the adaptation of the grain, so it doesn't give direct control of the grain intensity.\")" +STARTLINE} addUserKnob {41 lut l "" +STARTLINE T Sampler1.lut} addUserKnob {20 Replace_tab l Replace} addUserKnob {6 external_grain l "use external grain" t "Use external grain from a second DasGrain, with the output set to 'normalised grain', to replace masked area.\nConnect it to the 'external grain' input of this DasGrain (it's a bit hidden on the left side of the node)." +STARTLINE} addUserKnob {26 divider04 l Scatter} addUserKnob {26 divider05 l Scatter +HIDDEN T "Make sure you're sampling an area without any plate detail."} addUserKnob {6 scatter l activate t "Activates the scatter function. It generates a new grain based on the plate grain in the sample box using a Voronoi noise." +STARTLINE} addUserKnob {41 useGPUIfAvailable l "Use GPU if available" -STARTLINE T VoronoiScatter.useGPUIfAvailable} addUserKnob {15 box l "sample box" t "Define an area that is used as a source for the scatter function. The plate grain in this area should be as even as possible, without any visible detail."} box {100 100 500 300} addUserKnob {3 sample_frame l "sample frame" t "The frame at which the grain is being sampled. Is set automatically once the sample box is changed." +DISABLED} sample_frame 1 addUserKnob {4 stereo l "stereo behaviour" t "randomize offset per view: same voronoy pattern for all views, but different offset\n\nrandomize pattern per view: different voronoy pattern for every view" M {none "randomize offset per view" "randomize pattern per view" ""}} addUserKnob {26 spacer06 l "" +STARTLINE T " "} addUserKnob {6 overlay l "overlay cell pattern" t "Overlay the cell pattern of the voronoy noise. Useful to check where the seams are and if distortion or blending is necessary." +STARTLINE} addUserKnob {7 cell_size l "cell size" t "Cell size of the scatter. Shoudn't be too small, as lower grain frequencies might break.\nCan't be too big either, to prevent it from breaking the border of the samplebox (will error if it does)." R 5 100} cell_size 40 addUserKnob {26 spacer07 l "" +STARTLINE T " "} addUserKnob {20 concealer l "edge concealer" n 1} concealer 0 addUserKnob {26 concealer_help l " " T "If you can see the voronoi pattern in the grain QC output,\nincrease the edge blend size."} addUserKnob {3 edge_blend_size l "edge blend size" t "Set the output to grain QC. If you see the cell seams, increase the edge blend size to conceal them.\n\nThis is a bit hacky and slow."} addUserKnob {26 tip l "" -STARTLINE T "sloooow - keep this below 3 if possible"} addUserKnob {26 distortion_help l " " T "\nDistortion might help as well, if somehow the straight\nseams are visible (you might want to toggle the overlay\nwhile adjusting)."} addUserKnob {7 amplitude R 0 50} addUserKnob {7 frequency R 0 50} frequency 15 addUserKnob {20 endGroup n -1} addUserKnob {26 divider06 l "" +STARTLINE} addUserKnob {41 replace_mask l "replace mask" t "Use this channel from the mask input to specify where you want to use scattered grain instead of the adapted plate grain." -STARTLINE T Merge9.maskChannelMask} addUserKnob {41 invert_mask_1 l invert -STARTLINE T Merge9.invert_mask} addUserKnob {20 GrainGroupEnd l "" +STARTLINE n -3} addUserKnob {20 Help_tab l Help} addUserKnob {26 basic_setup l "" +STARTLINE T "Basic setup"} addUserKnob {26 ""} addUserKnob {26 explanation l "" +STARTLINE T "Bold steps are always necessary"} addUserKnob {26 steps l "" +STARTLINE T "
1. This should be the only regrain node in your comp.
2. Connect plate, degrained plate and comp.
    The comp should be done on the degrained plate!

3. Set the luminance degrain amount.
4. Press the Analyze button.
5. Correct the response curves in the Adjust tab.
6. Move the sample box to an area without any plate detail and activate scatter.
7. If necessary, activate edge blend and/or distortion to conceal seams."} addUserKnob {26 in_depth l "" +STARTLINE T "
For an in depth explanation of the steps, read the tooltips and check out this video:
https://vimeo.com/284820390"} addUserKnob {26 pushthebutton l "" +STARTLINE T "

If the result is not as expected and you don't know why, push this button:"} addUserKnob {22 troubleshoot l Troubleshoot t HEEEEEEELP T "import base64\n\nmessages = \[]\n\nthis = nuke.thisNode()\n\n#########################\n\nif this.input(0) is None or this.input(1) is None or this.input(2) is None:\n messages.append(\"ERROR Plate, degrained plate and comp need to be connected to the appropriate inputs.\")\n\n#########################\n\nelse:\n\n def format_to_tuple(g):\n \"\"\"returns (1024, 786, 2.0)\n \"\"\"\n return (g.format().width(), g.format().height(), g.format().pixelAspect())\n\n format_set = set(\[\n format_to_tuple(this.input(0)),\n format_to_tuple(this.input(1)),\n format_to_tuple(this.input(2)),\n ])\n if len(format_set) != 1:\n messages.append(\"WARNING Format missmatch: Make sure formats of plate, degrained plate and comp match.\")\n\n if (this.input(1).firstFrame() != this.input(2).firstFrame()) or (this.input(1).lastFrame() != this.input(2).lastFrame()):\n messages.append(\"WARNING The frame ranges of plate and degrained plate don't match. Double check that they belong together.\")\n\n#########################\n\nmessages.append(\"Double check that plate and degrained plate haven't been modified in any way (paint, despill, etc).\")\n\n#########################\n\nif this\['luminance'].getValue() == 1:\n messages.append(\"Are you working on a completely degrained plate? If not, you might have to set the luminance degrain amount.\")\n\n#########################\n\nblank = base64.b64decode('cmVkIHtjdXJ2ZX0KZ3JlZW4ge2N1cnZlfQpibHVlIHtjdXJ2ZX0=').decode('ascii')\n\nwith this:\n Sampler = nuke.toNode('Sampler1') \n if Sampler\['lut'].toScript() == blank:\n messages.append(\"ERROR You haven't pressed the Analyze button yet!\")\n\n#########################\n\nclass BadThings(Exception): pass\n\ndef thingy():\n with this:\n Sampler = nuke.toNode('Sampler1')\n list = this\['lut'].toScript().replace('\}','').split('\\n')\n for item in list:\n sample_value = 0\n for value in item.split(' '):\n try:\n value == float(value)\n if value < sample_value:\n raise BadThings(\"WARNING Check and fix the response curves. Their slopes should always be positive (the curves should always go up ↗).\")\n \n else:\n sample_value = value\n except ValueError:\n # Ignore non-numeric things like x-values of \"x5.46\" and channel names like \"red\{\" etc\n pass\ntry:\n thingy()\nexcept BadThings as e:\n messages.append(str(e))\n \n#########################\n\nif this\['scatter'].value() == True:\n if this\['box'].getValue() == \[100.0, 100.0, 500.0, 300.0]:\n messages.append(\"WARNING Scatter has been activated, but the sample box is still in its default position. Are you sure that's a good area to sample?\")\n\n#########################\n\nmessages.append(\"Did you copy/paste DasGrain from another script? Make sure to reanalyze and to reset the sample area if you are using scatter.\")\n\n#########################\n\nif len(messages) > 0:\n nuke.message(\"Things worth checking

\"\n \"%s


If any of this doesn't make sense to you, it might be worth checking out the video on vimeo.\" % (\n \"
\".join(\"%s: %s\" % (i+1, m) for i, m in enumerate(messages))))\n" +STARTLINE} addUserKnob {26 dont_despair l "" +STARTLINE T "
If it still doesn't work and you're about to flip the table, send me a mail.
I'm happy to help! :)"} addUserKnob {20 Info_tab l Info} addUserKnob {26 dasname l "" +STARTLINE T "DasGrain v1.8
"} addUserKnob {26 text_1 l "" +STARTLINE T "DasGrain makes regraining as simple as clicking a few buttons.
Follow the steps in the Help tab and you'll have a perfect\nregrain
in no time!"} addUserKnob {26 ""} addUserKnob {26 info l "" +STARTLINE T "Last change: 2021-03-07\n\n"} addUserKnob {26 name_1 l "" +STARTLINE T "Fabian Holtz"} addUserKnob {26 mail l "" +STARTLINE T "holtzf+nuke@gmail.com"} addUserKnob {26 testimonial l "" +STARTLINE T "


«Such an elegant solution, love it!»
— anonymous

"} addUserKnob {26 ""} addUserKnob {26 credit l "" +STARTLINE T "
VoronoiScatter based on Ivan Busquets' implementation of
libNoise's\nVoronoi generator"} addUserKnob {26 thanks l "" +STARTLINE T "
Special thanks to Ben Dickson for bearing with my questions and
problems and RSP comp for the valuable feedback."} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x7f7f7fff label "normalise grain" note_font_size 30 xpos 170 ypos 1662 bdwidth 320 bdheight 110 } BackdropNode { inputs 0 name BackdropNode11 tile_color 0x7f7f7fff label "add grain" note_font_size 30 xpos 830 ypos 2766 bdwidth 320 bdheight 110 } BackdropNode { inputs 0 name BackdropNode13 tile_color 0x7f7f7fff label scatter note_font_size 30 xpos -50 ypos 2022 bdwidth 320 bdheight 110 } BackdropNode { inputs 0 name BackdropNode14 tile_color 0x7f7f7fff label "analyze grain" note_font_size 30 xpos -159 ypos 606 bdwidth 319 bdheight 877 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x7f7f7fff label "grain response curve" note_font_size 30 xpos 610 ypos 2574 bdwidth 320 bdheight 110 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x7f7f7fff label QC note_font_size 30 xpos 1050 ypos 3222 bdwidth 320 bdheight 110 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x7f7f7fff label "grain response curve" note_font_size 30 xpos 610 ypos 1422 bdwidth 320 bdheight 110 } BackdropNode { inputs 0 name BackdropNode5 tile_color 0x7f7f7fff label "adapt grain" note_font_size 30 xpos 170 ypos 2574 bdwidth 320 bdheight 110 } BackdropNode { inputs 0 name BackdropNode6 tile_color 0x7f7f7fff label "sample range" note_font_size 30 xpos -490 ypos 606 bdwidth 320 bdheight 110 } BackdropNode { inputs 0 name BackdropNode7 tile_color 0x7f7f7fff label "luminance level" note_font_size 30 xpos 280 ypos -282 bdwidth 760 bdheight 685 } BackdropNode { inputs 0 name BackdropNode8 tile_color 0x7f7f7fff label "plate grain" note_font_size 30 xpos 170 ypos 606 bdwidth 320 bdheight 110 } BackdropNode { inputs 0 name BackdropNode9 tile_color 0x7f7f7fff label replace note_font_size 30 xpos 60 ypos 2191 bdwidth 540 bdheight 226 } Input { inputs 0 name DEGRAINED_PLATE label "\[value number]" note_font_size 30 xpos 730 ypos -896 number 2 } OCIOColorSpace { in_colorspace {{OCIOColorSpace1.in_colorspace}} out_colorspace {{OCIOColorSpace1.out_colorspace}} name OCIOColorSpace2 xpos 730 ypos -490 } Dot { name Dot9 xpos 764 ypos -390 } set N99766400 [stack 0] Dot { name Dot28 xpos 764 ypos -198 } set N99766000 [stack 0] Dot { name Dot32 xpos 764 ypos 234 } set N99765c00 [stack 0] push $N99766000 Dot { name Dot27 xpos 624 ypos -198 } Colorspace { colorspace_out YCbCr name Colorspace1 xpos 590 ypos -130 } Dot { name Dot7 xpos 624 ypos -54 } set N99765000 [stack 0] Input { inputs 0 name PLATE label "\[value number]" note_font_size 30 xpos 290 ypos -892 number 1 } Dot { name Dot50 xpos 324 ypos -726 } set N99764800 [stack 0] OCIOColorSpace { in_colorspace scene_linear out_colorspace scene_linear name OCIOColorSpace1 xpos 290 ypos -490 } Dot { name Dot29 xpos 324 ypos -198 } set Ne5d2fc00 [stack 0] Dot { name Dot6 xpos 464 ypos -198 } Colorspace { colorspace_out YCbCr name Colorspace2 xpos 430 ypos -130 } Merge2 { inputs 2 operation from bbox B Achannels rgb Bchannels rgb output rgb name Merge4 xpos 430 ypos -58 } Multiply { channels rgb value {{"1 / parent.luminance - 1"} 0 0 0} name Multiply6 xpos 430 ypos 14 } Dot { name Dot31 xpos 464 ypos 90 } push $N99765000 Merge2 { inputs 2 operation plus bbox B Achannels rgb Bchannels rgb output rgb name Merge5 xpos 590 ypos 86 } Colorspace { colorspace_in YCbCr name Colorspace3 xpos 590 ypos 158 } Merge2 { inputs 2 operation from bbox B Achannels rgb Bchannels rgb output rgb name Merge6 xpos 590 ypos 230 } Dot { name Dot35 xpos 624 ypos 306 } set Ne5d2d800 [stack 0] push $N99765c00 Merge2 { inputs 2 operation from bbox B Achannels rgb Bchannels rgb output rgb name Merge7 xpos 730 ypos 302 disable {{"Multiply6.value.r == 0"}} } Dot { name Dot2 xpos 764 ypos 522 } set Ne5d2d000 [stack 0] Dot { name Dot30 xpos 764 ypos 690 } set Ne5d2cc00 [stack 0] Dot { name Dot55 xpos 764 ypos 1170 } set Ne5d2c800 [stack 0] Input { inputs 0 name mask label "\[value number]" note_font_size 30 xpos 1170 ypos -896 number 3 } Dot { name Dot39 xpos 1204 ypos 258 } set N751abc00 [stack 0] Dot { name Dot26 xpos 1204 ypos 1074 } set N751ab800 [stack 0] Invert { name Invert2 xpos 180 ypos 1064 disable {{!parent.invert_1}} } push $Ne5d2cc00 push $Ne5d2fc00 Merge2 { inputs 2 operation from bbox B Achannels rgb Bchannels rgb output rgb name Merge27 xpos 290 ypos 686 } Dot { name Dot3 xpos 324 ypos 786 } set N751aac00 [stack 0] Dot { name Dot5 xpos 104 ypos 786 } set N751aa800 [stack 0] push $N751aa800 Copy { inputs 2 from0 {{{parent.Copy2.from0}}} to0 rgba.red name Copy3 xpos 70 ypos 848 } Expression { expr0 abs(r) channel1 {none none none rgba.alpha} expr1 "r == 0" channel2 none channel3 none name Expression4 xpos 70 ypos 926 } set N751aa000 [stack 0] push $Ne5d2d000 Colorspace { colorspace_out AlexaV3LogC name Colorspace5 xpos 70 ypos 518 } Clamp { maximum_enable false name Clamp2 xpos -40 ypos 512 } Dot { name Dot1 xpos -116 ypos 522 } set N751a9400 [stack 0] Dot { name Dot48 xpos -116 ypos 786 } set N751a9000 [stack 0] push $N751a9000 Copy { inputs 2 from0 rgba.blue to0 rgba.red name Copy2 xpos -150 ypos 848 } Expression { temp_name0 min temp_name1 max channel0 {none none none rgba.alpha} expr0 "r >= min && r <= max" channel1 none channel2 none channel3 none name Expression2 xpos -150 ypos 926 } Dot { name Dot4 xpos -116 ypos 1002 } ChannelMerge { inputs 2 operation stencil name ChannelMerge2 xpos -40 ypos 985 } push $N751aa000 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 70 ypos 992 } ChannelMerge { inputs 2 A -rgba.green operation multiply name ChannelMerge1 xpos 70 ypos 1057 disable {{!A}} } Copy { inputs 2 from0 {{{parent.Copy2.from0}}} to0 rgba.green name Copy4 xpos 70 ypos 1160 } Premult { channels {rgba.red rgba.green -rgba.blue none} name Premult1 xpos 70 ypos 1238 } TimeWarp { lookup 1081 time "" filter nearest name TimeWarp1 xpos 70 ypos 1286 disable true } FrameBlend { channels {rgba.red rgba.green -rgba.blue rgba.alpha} startframe 0 endframe 9 userange true name FrameBlend1 xpos 70 ypos 1352 disable true } CurveTool { avgframes 0 channels {rgba.red rgba.green -rgba.blue rgba.alpha} ROI {0 0 {width} {height}} name CurveTool xpos 70 ypos 1424 } push $N751a9400 Dot { name Dot16 xpos -336 ypos 522 } CurveTool { operation "Max Luma Pixel" channels {-rgba.red -rgba.green rgba.blue none} ROI {0 0 {width} {height}} name CurveTool_Range xpos -370 ypos 680 } Sampler { inputs 0 lut {red {curve} green {curve} blue {curve}} name Sampler1 onCreate "n = nuke.thisNode()\nn\['sampler'].setEnabled(False)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\np = nuke.thisParent()\n\nif k.name() == 'lut':\n with p:\n for c in \['ColorLookup1','ColorLookup2']:\n nuke.toNode(c)\['lut'].fromScript(k.toScript())" xpos 840 ypos 1502 } push $N99764800 Dot { name Dot51 xpos 115 ypos -726 } Input { inputs 0 name COMP label "\[value number]" note_font_size 30 xpos 950 ypos -896 } Dot { name Dot49 xpos 984 ypos -605 } set N748d4800 [stack 0] Switch { inputs 2 which {{parent.meta}} name Switch1 xpos 81 ypos -609 } Dot { name Dot54 xpos 115 ypos -486 } Dot { name Dot52 xpos -685 ypos -486 } Dot { name Dot53 xpos -685 ypos 3762 } push $N751abc00 Dot { name Dot40 xpos 874 ypos 258 } push $Ne5d2d800 Dot { name Dot34 xpos 624 ypos 378 } Multiply { inputs 1+1 channels rgb value 0 maskChannelMask -rgba.red name Multiply1 xpos 840 ypos 374 } push $N748d4800 OCIOColorSpace { in_colorspace {{OCIOColorSpace1.in_colorspace}} out_colorspace {{OCIOColorSpace1.out_colorspace}} name OCIOColorSpace3 xpos 950 ypos -490 } Dot { name Dot44 xpos 984 ypos -390 } set N7487e400 [stack 0] Merge2 { inputs 2 operation from bbox B Achannels rgb Bchannels rgb output rgb name Merge8 xpos 950 ypos 374 disable {{"Multiply6.value.r == 0"}} } Dot { name Dot18 xpos 984 ypos 2658 } set N7487dc00 [stack 0] ColorLookup { lut {master {} red {curve} green {curve} blue {curve} alpha {}} name ColorLookup2 xpos 730 ypos 2654 } push $N751ab800 Dot { name Dot38 xpos 1204 ypos 1842 } Dot { name Dot37 xpos 544 ypos 1842 } Dot { name Dot22 xpos 544 ypos 2271 } set N7487cc00 [stack 0] Dot { name Dot20 xpos 544 ypos 2391 } push $N7487cc00 Dot { name Dot17 xpos 434 ypos 2271 } set N7487c400 [stack 0] Dot { name Dot13 xpos 214 ypos 2271 } Input { inputs 0 name external_grain label "\[value number]" note_font_size 30 xpos -150 ypos 1716 number 4 } Dot { name Dot21 xpos -116 ypos 1938 } push $Ne5d2c800 ColorLookup { channels rgb lut {master {} red {curve} green {curve} blue {curve} alpha {}} name ColorLookup1 xpos 730 ypos 1502 } Dot { name Dot24 xpos 764 ypos 1746 } push $N751aac00 Dot { name Dot33 xpos 324 ypos 1386 } MergeExpression { inputs 2 temp_name0 target temp_expr0 .01 expr0 "Br * (target / Ar)" expr1 "Bg * (target / Ag)" expr2 "Bb * (target / Ab)" channel3 none name MergeExpression1 xpos 290 ypos 1742 } Dot { name Dot15 xpos 324 ypos 1842 } set N7c8be000 [stack 0] Dot { name Dot25 xpos 104 ypos 1842 } Switch { inputs 2 which {{parent.external_grain}} name Switch2 xpos 70 ypos 1934 } Group { name VoronoiScatter xpos 70 ypos 2102 disable {{!parent.scatter}} addUserKnob {20 User} addUserKnob {41 useGPUIfAvailable l "Use GPU if available" T VoroNoise.useGPUIfAvailable} addUserKnob {41 vectorize l "Vectorize on CPU" -STARTLINE T VoroNoise.vectorize} addUserKnob {15 box} box {{parent.box x1004 0 x1036 -75} {parent.box x1004 100 x1036 120} {parent.box x1004 496 x1036 325} {parent.box x1004 916 x1036 320}} addUserKnob {3 sample_frame l "sample frame"} sample_frame {{parent.sample_frame}} addUserKnob {7 cell_size l "cell size" R 0 100} cell_size {{parent.cell_size}} addUserKnob {6 overlay_pattern l "overlay pattern" -STARTLINE} overlay_pattern {{parent.overlay}} addUserKnob {3 edge_blend_size l "edge blend size"} edge_blend_size {{parent.edge_blend_size}} addUserKnob {7 amplitude R 0 100} amplitude {{parent.amplitude}} addUserKnob {7 frequency R 0 100} frequency {{parent.frequency}} addUserKnob {41 VoroNoise_Seed l Seed T VoroNoise.VoroNoise_Seed} } Input { inputs 0 name Input1 xpos 180 ypos -879 } Dot { name Dot14 xpos 214 ypos -750 } set N7c8bd400 [stack 0] Dot { name Dot16 xpos 434 ypos -750 } Remove { name Remove1 xpos 400 ypos -687 } Dot { name Dot6 xpos 434 ypos -606 } set N7c8bc800 [stack 0] Dot { name Dot15 xpos 654 ypos -606 } set N7c8bc400 [stack 0] Dot { name Dot7 xpos 874 ypos -606 } Noise { output {rgba.red -rgba.green -rgba.blue none} replace true size {{parent.frequency} {"parent.frequency * pixel_aspect"}} zoffset {{"x + 1000"}} gamma 1 name Noise1 xpos 840 ypos -514 } Noise { output {-rgba.red rgba.green -rgba.blue none} replace true size {{parent.Noise1.size} {parent.Noise1.size}} zoffset {{x}} gamma 1 name Noise2 xpos 840 ypos -466 } Clamp { name Clamp1 xpos 840 ypos -424 } Dot { name Dot11 xpos 874 ypos -366 } push $N7c8bc400 BlinkScript { ProgramGroup 1 KernelDescription "2 \"VoroNoise\" iterate pixelWise c117be128a07c11b6d82fd34148d66b3bcac41976ec9c2082affe38e890c2c0f 2 \"src\" Read Point \"dst\" Write Point 6 \"Frequency\" Float 1 AABIQg== \"Seed\" Int 1 AAAAAA== \"aspect ratio\" Float 1 AACAPw== \"width\" Int 1 AAAAAA== \"height\" Int 1 AAAAAA== \"Randomness\" Float 1 AAAAPw== 6 \"frequency\" 1 1 \"seed\" 1 1 \"aspect_ratio\" 1 1 \"width\" 1 1 \"height\" 1 1 \"randomness\" 1 1 0" kernelSource "// Voronoi.blink\n// A test implementation of libNoise's Voronoi generator using Blink\n// Ivan Busquets - August 2013\n// Modified for DasGrain by Fabian Holtz - April 2019\n\n#define X_NOISE_GEN 1619\n#define Y_NOISE_GEN 31337\n#define Z_NOISE_GEN 6971\n#define SEED_NOISE_GEN 1013\n#define SQRT_3 1.73205081\n\ninline int IntValueNoise3D (int x, int y, int z, int seed)\n\{\n // All constants are primes and must remain prime in order for this noise\n // function to work correctly.\n int n = (\n X_NOISE_GEN * x\n + Y_NOISE_GEN * y\n + Z_NOISE_GEN * z\n + SEED_NOISE_GEN * seed)\n & 0x7fffffff;\n n = (n >> 13) ^ n;\n return (n * (n * n * 60493 + 19990303) + 1376312589) & 0x7fffffff;\n\}\n\ninline float ValueNoise3D (int x, int y, int z, int seed)\n\{\n return 1.0 - ((float)IntValueNoise3D (x, y, z, seed) / 1073741824.0);\n\}\n\nkernel VoroNoise : ImageComputationKernel\n\{\n Image src;\n Image dst;\n\nparam:\n float frequency;\n int seed;\n float aspect_ratio;\n int width;\n int height;\n float randomness;\n\n\n void define() \{\n defineParam(frequency, \"Frequency\", 50.0f);\n defineParam(aspect_ratio, \"aspect ratio\", 1.0f);\n defineParam(seed, \"Seed\", 0);\n defineParam(randomness, \"Randomness\", 0.5f);\n \}\n\n\n\n\n void process(int2 pos) \{\n float x = pos.x * aspect_ratio * frequency / width;\n float y = pos.y * frequency / width;\n int xInt = (x > 0.0) ? x : x - 1;\n int yInt = (y > 0.0) ? y : y - 1;\n\n\n float minDist = 2147483647.0;\n float xCandidate = 0;\n float yCandidate = 0;\n\n float dist;\n\nfor (int yCur = yInt - 2; yCur <= yInt + 2; yCur++) \{\n for (int xCur = xInt - 2; xCur <= xInt + 2; xCur++) \{\n\n // Calculate the position and distance to the seed point inside of\n // this unit cube. Limited by the randomness value\n float xPos = xCur + (ValueNoise3D (xCur, yCur, 0, seed ) + 1 ) * randomness + (1-randomness) - 1;\n float yPos = yCur + (ValueNoise3D (xCur, yCur, 0, seed + 1) + 1 ) * randomness + (1-randomness) - 1;\n\n float xDist = xPos - x;\n float yDist = yPos - y;\n\n dist = pow(xDist, 2) + pow(yDist, 2);\n if (dist < minDist) \{\n // This seed point is closer to any others found so far, so record\n // this seed point.\n minDist = dist;\n xCandidate = xPos;\n yCandidate = yPos;\n\t\}\n \}\n\}\n\n SampleType(dst) sample(0.0f);\n\n sample.x = xCandidate / aspect_ratio / frequency;\n sample.y = yCandidate / height * width / frequency;\n sample.z = 0;\n\n dst() = sample;\n\}\n\};" rebuild "" VoroNoise_Frequency {{"width / parent.cell_size"}} VoroNoise_Seed {{"(x + (parent.parent.stereo == 2 ? \[lsearch \[value root.views] \[view]] / 2 : 0)) * 5"}} "VoroNoise_aspect ratio" {{pixel_aspect}} VoroNoise_width {{width}} VoroNoise_height {{height}} rebuild_finalise "" name VoroNoise xpos 620 ypos -520 } Copy { inputs 2 from0 rgba.red to0 forward.u from1 rgba.green to1 forward.v name Copy1 xpos 620 ypos -382 disable {{"parent.amplitude == 0"}} } IDistort { uv forward uv_offset 0.5 uv_scale {{parent.amplitude} {"uv_scale.w * pixel_aspect"}} filter impulse name IDistort1 xpos 620 ypos -280 disable {{"parent.amplitude == 0"}} } Dot { name Dot5 xpos 654 ypos -246 } NoTimeBlur { rounding floor name NoTimeBlur3 xpos 620 ypos -154 } Transform { translate {{"floor((x * size) % 1 * (size)) - int(size / 2)"} {"floor(x % 1 * (size)) - int(size/2)"}} filter impulse black_outside false name Transform1 xpos 620 ypos -58 disable {{"parent.edge_blend_size < 1"}} addUserKnob {20 User} addUserKnob {3 size} size {{"parent.edge_blend_size + 1"}} } Dot { name Dot9 xpos 654 ypos 42 } set N7c875000 [stack 0] push $N7c8bc800 Expression { expr0 "(x + .5) / width" expr1 "(y + .5) / height" expr2 0 name STMapGenerator xpos 400 ypos -514 } NoTimeBlur { rounding floor name NoTimeBlur2 xpos 400 ypos -154 } Merge2 { inputs 2 operation from Achannels {rgba.red rgba.green -rgba.blue none} Bchannels {rgba.red rgba.green -rgba.blue none} output {rgba.red rgba.green -rgba.blue none} name Merge2 xpos 400 ypos 38 } Dot { name Dot10 xpos 434 ypos 210 } push $N7c875000 Expression { temp_name0 view_index temp_expr0 "parent.parent.stereo == 1 ? \[lsearch \[value root.views] \[view]] / 2 : 0" expr0 "random((r + view_index) * 1000000, 0) * (maxx - minx) + minx" expr1 "random((g + view_index) * 1000000, 0) * (maxy - miny) + miny" channel2 none channel3 none name Expression3 xpos 620 ypos 110 addUserKnob {20 User} addUserKnob {7 frequency R 0 100} frequency {{parent.parent.cell_size}} addUserKnob {7 multiplier R 0 3} multiplier 0.5 addUserKnob {15 shrink} shrink {{"frequency * multiplier + ceil(parent.edge_blend_size / 2) + IDistort1.uv_scale.w / 2"} {"frequency * multiplier + ceil(parent.edge_blend_size / 2) + IDistort1.uv_scale.h / 2"} {"frequency * multiplier + floor(parent.edge_blend_size / 2) + IDistort1.uv_scale.w / 2"} {"frequency * multiplier + floor(parent.edge_blend_size / 2) + IDistort1.uv_scale.h / 2"}} addUserKnob {26 ""} addUserKnob {7 minx} minx {{"(parent.box.x + shrink.x + .5) / width"}} addUserKnob {7 maxx} maxx {{"(parent.box.r - shrink.r - .5) / width"}} addUserKnob {7 miny} miny {{"(parent.box.y + shrink.y + .5) / height"}} addUserKnob {7 maxy} maxy {{"(parent.box.t - shrink.t - .5) / height"}} } Merge2 { inputs 2 operation plus Achannels {rgba.red rgba.green -rgba.blue none} Bchannels {rgba.red rgba.green -rgba.blue none} output {rgba.red rgba.green -rgba.blue none} name Merge3 xpos 620 ypos 206 } Expression { expr0 "(r + (maxx - minx) - minx) % (maxx - minx) + minx" expr1 "(g + (maxy - miny) - miny) % (maxy - miny) + miny" channel2 none channel3 none name Expression7 xpos 620 ypos 278 addUserKnob {20 User} addUserKnob {7 minx} minx {{"(parent.box.x + rint(x % 1 * parent.edge_blend_size) + .5) / width"}} addUserKnob {7 maxx} maxx {{"(parent.box.r + rint(x % 1 * parent.edge_blend_size) - .5) / width"}} addUserKnob {7 miny} miny {{"(parent.box.y + rint(x % 1 * parent.edge_blend_size) + .5) / height"}} addUserKnob {7 maxy} maxy {{"(parent.box.t + rint(x % 1 * parent.edge_blend_size) - .5) / height"}} } Dot { name Dot3 xpos 654 ypos 354 } set N7b8a2c00 [stack 0] Dot { name Dot13 xpos 654 ypos 546 } push $N7b8a2c00 Dot { name Dot8 xpos 874 ypos 354 } Blur { channels rgb size {{pixel_aspect} 1} name Blur1 label "\[value size]" xpos 840 ypos 440 } Difference { inputs 2 name Difference2 xpos 840 ypos 536 } Expression { channel0 {none none none rgba.alpha} expr0 "a > 1e-9" channel1 none channel2 none channel3 none name Expression2 xpos 840 ypos 614 } Shuffle { red alpha green alpha blue alpha name Shuffle1 label "\[value in]:\[value out]" xpos 840 ypos 680 } Dot { name Dot4 xpos 874 ypos 762 } push $N7b8a2c00 push $N7c8bd400 FrameHold { first_frame {{parent.sample_frame}} name FrameHold1 xpos 180 ypos -256 } NoTimeBlur { rounding floor name NoTimeBlur1 xpos 180 ypos -154 } STMap { inputs 2 channels rgb uv rgb filter impulse name STMap1 xpos 180 ypos 350 } set N7b8a0800 [stack 0] TimeBlur { divisions {{"max(Transform1.size == 1 ? 2 : pow2(Transform1.size), 1)"}} shutter 1 shuttercustomoffset {{"1 / divisions / 2"}} name TimeBlur1 xpos 180 ypos 446 disable {{"parent.edge_blend_size < 1"}} } set N7b8a0400 [stack 0] push $N7b8a0800 Dot { name Dot1 xpos -6 ypos 354 } Difference { inputs 2 name Difference1 xpos -40 ypos 440 } Expression { channel0 {none none none rgba.alpha} expr0 "a > 1e-10" channel1 none channel2 none channel3 none name Expression1 xpos -40 ypos 494 } Blur { channels alpha size {{parent.parent.edge_blend_size}} name Blur2 xpos -40 ypos 536 } Grade { channels alpha blackpoint 0.5 white_clamp true name Grade2 xpos -40 ypos 584 } Dot { name Dot2 xpos -6 ypos 666 } push $N7b8a0400 Grade { inputs 1+1 white 1.4 black_clamp false name Grade1 xpos 180 ypos 662 disable {{"parent.edge_blend_size < 1"}} } Merge2 { inputs 2 Achannels rgb Bchannels rgb output rgb name Merge1 xpos 180 ypos 758 disable {{!parent.overlay_pattern}} } Assert { expression {{"Expression3.maxx > Expression3.minx && Expression3.maxy > Expression3.miny"}} message "increase sample box size or decrease cell size" name error xpos 180 ypos 854 } Output { name Output1 xpos 180 ypos 950 } end_group Multiply { inputs 1+1 channels rgb value 1.8 maskChannelMask {{{parent.Merge9.maskChannelMask}}} invert_mask {{!Merge9.invert_mask}} name Multiply7 xpos 70 ypos 2315 disable {{"!maskChannelMask || !\[exists parent.input3.name]"}} } Dot { name Dot23 xpos 104 ypos 2391 } push $N7487c400 push $N7c8be000 Multiply { inputs 1+1 channels rgb value 1.8 maskChannelMask {{{parent.Merge9.maskChannelMask}}} invert_mask {{parent.Merge9.invert_mask}} name Multiply2 xpos 290 ypos 2315 disable {{"!maskChannelMask || (!parent.scatter && !parent.external_grain)"}} } Merge2 { inputs 2+1 operation copy Achannels rgb Bchannels rgb output rgb maskChannelMask -rgba.alpha name Merge9 xpos 290 ypos 2387 disable {{"!(parent.scatter || parent.external_grain)"}} } Dot { name Dot11 xpos 324 ypos 2490 } set N7b9d0400 [stack 0] MergeExpression { inputs 2 temp_name0 reverse temp_expr0 "1 / MergeExpression1.temp_expr0" expr0 "Br * Ar * reverse" expr1 "Bg * Ag * reverse" expr2 "Bb * Ab * reverse" name MergeExpression2 xpos 290 ypos 2654 } Dot { name Dot8 xpos 324 ypos 2850 } push $N7487dc00 Merge2 { inputs 2 operation plus bbox B Achannels rgb Bchannels rgb output rgb name Merge3 xpos 950 ypos 2846 } Dot { name Dot42 xpos 984 ypos 3018 } set N7b96f000 [stack 0] OCIOColorSpace { in_colorspace {{OCIOColorSpace1.out_colorspace}} out_colorspace {{OCIOColorSpace1.in_colorspace}} name OCIOColorSpace4 xpos 950 ypos 3086 } Dot { name Dot19 xpos 984 ypos 3162 } set N7b96e800 [stack 0] Dot { name Dot41 xpos 1204 ypos 3162 } set N7b96e400 [stack 0] Dot { name Dot36 xpos 1314 ypos 3162 } Blur { channels rgb size 1 name Blur1 xpos 1280 ypos 3254 } push $N7b96e400 Merge2 { inputs 2 operation difference bbox B Achannels rgb Bchannels rgb output rgb name Merge10 xpos 1170 ypos 3254 } Multiply { channels rgb value 50 name Multiply3 xpos 1170 ypos 3302 } Dot { name Dot43 xpos 1204 ypos 3402 } push $N7487e400 Dot { name Dot45 xpos 1424 ypos -390 } push $N7b96f000 Merge2 { inputs 2 operation from Achannels rgb Bchannels rgb output rgb name Merge11 xpos 1390 ypos 3014 } Dot { name Dot46 xpos 1424 ypos 3522 } push $N7b9d0400 Dot { name Dot14 xpos 104 ypos 2490 } Dot { name Dot12 xpos 104 ypos 3402 } push $N99766400 Dot { name Dot47 xpos -556 ypos -390 } push $Ne5d2fc00 Merge2 { inputs 2 operation from Achannels rgb Bchannels rgb output rgb name Merge12 xpos -590 ypos -202 } Dot { name Dot10 xpos -556 ypos 3522 } push $N7b96e800 Switch { inputs 5 which {{output}} name Output xpos 950 ypos 3656 addUserKnob {20 User} addUserKnob {4 output M {"regrained comp" "plate grain" "normalised grain" "adapted grain" "grain QC"}} } CopyMetaData { inputs 2 mergeMode "Meta only" name CopyMetaData1 xpos 950 ypos 3758 } Output { name Output1 xpos 950 ypos 3854 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Deep2VP.gizmo ================================================ Group { name Deep2VP tile_color 0x2866ff label "Deep Output" addUserKnob {20 tab_general l General} addUserKnob {26 title_camera_link l "" +STARTLINE T "camera link (toolset required)"} addUserKnob {22 set_link l "link to selected camera" t "Deep data is related to camera. So when convert deep data to any datas, it required the camera data.\n\nhow to use :\nSelect the camera, which can be link to any axis nodes. This tool will get the focal, haperture and world matrix from selected camera and it will generate world space position data.\n\nYou can find the world space position pass store under 'deepPosition' channel. The pass support volumatric deep data. If want to bring the position data to 2D in downstream. Please only use DVPToImage which comes along with this toolset." T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\n\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\ndefaultKnobs = \{\n\t\t\t'world matrix' : 'world_matrix',\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tfor knob in mainKnobs :\n\t\t\t\tthisGRP\[knob].clearAnimated()\n\t\t\t\t\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.focal'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.haperture'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.win_translate'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.win_scale'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.winroll'.format(CAMnode))\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tfor knob in mainKnobs :\n\t\t\t\t\tthisGRP\[knob].clearAnimated()\n\t\t\t\t\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']))\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']))\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']))\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']))\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window roll']))\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data. So the position data still works if the camera is not animated." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\n\nfor knob in thisGRP.knobs() :\n if mainKnobs.count(knob) != 0 :\n thisGRP\[knob].clearAnimated()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 cam_focal l "focal length" R 5 100} cam_focal 50 addUserKnob {7 cam_haperture l "horiz aperture" R 0.1 50} cam_haperture 24.576 addUserKnob {30 cam_win_translate l "window translate"} addUserKnob {30 cam_win_scale l "window scale"} cam_win_scale {1 1} addUserKnob {7 cam_winroll l "window roll" R -45 45} addUserKnob {41 world_matrix l "world matrix" T cam_data.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 spacer l "" +STARTLINE T
} addUserKnob {26 title_deepNormal l "" +STARTLINE T "deepNormal (relight required)"} addUserKnob {41 normal_data l "output normal data" t "Choose which normal data to use for DVP lighting system.\n\ngenerated normal\nThis will generate world space normal from deepPosition data. It is imperfect, will get artifacts on object's edge, it works fine on object's core. Give user an option without normal data. Deep data from scanlineRender will missing tesselation process. Increase subdivision of the geo will get better result.\n\ninput 2D normal (world space)\nUse 2D normal from normal 2D input.\n\ninput 2D normal (camera space)\nUse 2D normal from normal 2D input.\n\ninput deep normal (camera space)\nIf deep contained normal data, type in the channel name and the tool will shuffle it for this tool." T menu01.normal_data} addUserKnob {6 useGPUIfAvailable l "use GPU if available" +HIDDEN +STARTLINE} useGPUIfAvailable true addUserKnob {7 deep_threshold l "Deep Threshold" t "Adjust this value for better edge result.\n\ndefault value is 0.1"} deep_threshold 0.5 addUserKnob {1 DN_channel l "input deep normal channel" +HIDDEN} DN_channel deepNormal addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 4.0} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-13} addUserKnob {22 btn_CHANGELOG l Changlelog T "log = \"Deep2VPosition (Deep2VP)
- added camera setting to metadata
- remove bake and copy buttons
- rename to Deep2VP
- generate/select/import deepNormal in this node
- added generate normal in deep, still keep the previous one.

DVPort (DVPortal)
- renamed to DVPortal

DVPmatte
- removed 'option' knob, 2D matte can use 'open matte' instead
- open matte can choose show matte or color

DVPattern
- internal setup same as DVPmatte
- added rotation knob
- support 'open matte'

DVProjection
- remove bake and copy buttons
- remove all metadata created from Deep2VP

DVPsetLight
- added shader setting and input shader
- not required link camera anymore
- removed deepNormal setup, moved to Deep2VP node

DVPscene
- added multiple output options
- remove all metadata created from DVP's lighting system

DVPrelight
- added specular setup
- added toon shade setup
- fix pointcloud preview with effects

DVPrelightPT
- split up point light from DVPrelight
- fix point light duplicated algorithm

DVPfresnel
- not required link camera anymore
- fix unpremult process, the result was too dark

DVPToImage
- remove all metadata created from Deep2VP
- same as Deep2VP node color

new nodes :
DVPColorCorrect

added shaders :
DVP Shader
DVP Toon Shader\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x7f7f7fff label bin note_font_size 42 xpos -764 ypos -11 bdwidth 249 bdheight 324 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0xff label "dont touch" note_font_size 42 xpos -767 ypos -330 bdwidth 252 bdheight 261 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x8e388e00 label "create deepPosition" note_font_size 42 xpos -143 ypos 67 bdwidth 368 bdheight 242 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x388e8e00 label "create deepNormal (deep)" note_font_size 42 xpos -147 ypos 541 bdwidth 1524 bdheight 2788 } BackdropNode { inputs 0 name BackdropNode5 tile_color 0x388e8e00 label "create deepNormal (2D)" note_font_size 42 xpos 1498 ypos 546 bdwidth 964 bdheight 2778 } BackdropNode { inputs 0 name BackdropNode6 tile_color 0x4c3535ff label "Another option, but I think not good as the previous hack result.\nYou can try it." note_font_size 12 xpos 130 ypos 2537 bdwidth 445 bdheight 155 z_order 1 } Group { inputs 0 name inverseMatrix_cam tile_color 0x337f4cff xpos -712 ypos 212 addUserKnob {20 User} addUserKnob {1 knob_path} knob_path cam_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group Camera { inputs 0 display off selectable false rot_order XYZ useMatrix true focal {{parent.cam_focal}} haperture {{parent.cam_haperture}} name cam_data xpos -704 ypos 112 } Camera { inputs 0 display off selectable false rotate {0 0 {-parent.cam_winroll}} win_translate {{parent.cam_win_translate} {parent.cam_win_translate}} win_scale {{parent.cam_win_scale} {parent.cam_win_scale}} name cwin_data xpos -604 ypos 110 } add_layer {deepNormal deepNormal.red deepNormal.green deepNormal.blue deepNormal.alpha} AddChannels { inputs 0 channels {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} name addDNAC xpos 3571 ypos 2150 } add_layer {deepRawColor deepRawColor.red deepRawColor.green deepRawColor.blue deepRawColor.alpha} AddChannels { inputs 0 channels deepRawColor name addDRC xpos -138 ypos -181 } AddChannels { inputs 0 channels deepNormal name addDNC xpos -143 ypos -289 } add_layer {deepPosition deepPosition.red deepPosition.green deepPosition.blue deepPosition.alpha} AddChannels { inputs 0 channels deepPosition name addDPC xpos -135 ypos -404 } Input { inputs 0 name deep xpos 0 ypos -553 } DeepRecolor { inputs 2 channels {{{addDPC.channels}}} name DeepRecolor8 xpos 0 ypos -404 } DeepRecolor { inputs 2 channels {{{addDNC.channels}}} name DeepRecolor10 xpos 0 ypos -289 disable {{"parent.normal_data==3 && \[string match \[value parent.DN_channel] \"deepNormal\"] ? 1 : 0"}} } DeepRecolor { inputs 2 channels {{{addDRC.channels}}} name DeepRecolor9 xpos 0 ypos -181 } ModifyMetaData { metadata { {set DVPmatte 0} {set DVPcamMTX "\[string range \[string map \{\"\\\{\" \"\" \"\\\}\" \"\"\} \[value parent.world_matrix]] 1 end-0]"} {set DVPcamAspect "\[value camAspect]"} {set DVPcamWin "\[value cam_win_translate] \[value cam_win_scale] \[value cam_winroll]"} } name DVPmd label "setup metadata" xpos 0 ypos -89 addUserKnob {20 User} addUserKnob {7 camAspect} camAspect {{parent.cam_haperture/parent.cam_focal}} } DeepExpression { chans1 deep name spacer xpos 0 ypos 3 } DeepExpression { temp_name0 xpos temp_expr0 "( ( x/\[value input.width] ) - 0.5 ) * \[value camAspect] * deep.front )" temp_name1 ypos temp_expr1 "( ( y/\[value input.height] ) - 0.5 ) * ( ( \[value camAspect]*deep.front ) / ( \[value input.width]/\[value input.height] ) ) * 1 / \[value root.format.pixel_aspect]" temp_name2 zpos temp_expr2 -deep.front chans0 {deepPosition.red deepPosition.green deepPosition.blue none} chans1 none deepPosition.red "( xpos * \[value cwin_data.world_matrix.0] + ypos * \[value cwin_data.world_matrix.1] ) * \[value cwin_data.win_scale.u] + ( \[value camAspect] * deep.front * \[value cwin_data.win_translate.u] / 2 )" deepPosition.green "( xpos * \[value cwin_data.world_matrix.4] + ypos * \[value cwin_data.world_matrix.5] ) * \[value cwin_data.win_scale.v] + ( \[value camAspect] * deep.front * \[value cwin_data.win_translate.v] / 2 )" deepPosition.blue zpos name DeepExpression1 label "apply cam window" xpos 0 ypos 175 addUserKnob {20 User} addUserKnob {7 camAspect} camAspect {{"\[metadata DVPcamAspect]+0"}} } Dot { name Dot3 xpos 34 ypos 404 } set N82ee3800 [stack 0] Dot { name Dot12 xpos 215 ypos 404 } set N82ee3400 [stack 0] Dot { name Dot33 xpos 1868 ypos 404 } set N82ee3000 [stack 0] Dot { name Dot14 xpos 2742 ypos 404 } DeepExpression { chans0 {deepPosition.red deepPosition.green deepPosition.blue none} chans1 none deepPosition.red "(deepPosition.red * \[value parent.world_matrix.0] + deepPosition.green * \[value parent.world_matrix.1] + deepPosition.blue * \[value parent.world_matrix.2]) + \[value parent.world_matrix.3]" deepPosition.green "(deepPosition.red * \[value parent.world_matrix.4] + deepPosition.green * \[value parent.world_matrix.5] + deepPosition.blue * \[value parent.world_matrix.6]) + \[value parent.world_matrix.7]" deepPosition.blue "(deepPosition.red * \[value parent.world_matrix.8] + deepPosition.green * \[value parent.world_matrix.9] + deepPosition.blue * \[value parent.world_matrix.10]) + \[value parent.world_matrix.11]" name DeepExpression3 label "world space position" xpos 2708 ypos 1539 } Dot { name Dot27 xpos 2742 ypos 1777 } set N82ee2400 [stack 0] Dot { name Dot28 xpos 3150 ypos 1777 } set N82ee2000 [stack 0] Dot { name Dot13 xpos 3732 ypos 1777 } DeepRecolor { inputs 2 channels {{{addDNAC.channels}}} name DeepRecolor1 xpos 3698 ypos 2150 } DeepExpression { chans0 {deepNormal.red deepNormal.green deepNormal.blue none} chans1 none deepNormal.red "\[value parent.DN_channel].red" deepNormal.green "\[value parent.DN_channel].green" deepNormal.blue "\[value parent.DN_channel].blue" name DeepExpression2 label "shuffle input deep normal channel" xpos 3698 ypos 2242 } Dot { name Dot2 xpos 3732 ypos 3317 } Input { inputs 0 name normal2D xpos 3306 ypos -189 number 1 } Dot { name Dot25 xpos 3340 ypos 1989 } set N82ee0800 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 3306 ypos 2084 } Shuffle { alpha black out deepNormal name Shuffle4 xpos 3306 ypos 2158 } push $N82ee2000 DeepRecolor { inputs 2 channels {deepNormal.red deepNormal.green deepNormal.blue none} name DeepRecolor5 xpos 3116 ypos 2152 } DeepExpression { chans0 {deepNormal.red deepNormal.green deepNormal.blue none} chans1 none deepNormal.red "deepNormal.red * (1/alpha)" deepNormal.green "deepNormal.green * (1/alpha)" deepNormal.blue "deepNormal.blue * (1/alpha)" name DeepExpression4 label "deep normal should unpremult normal by samples" xpos 3116 ypos 2244 } Dot { name Dot1 xpos 3150 ypos 3330 } push $N82ee0800 Remove { operation keep channels rgb name Remove3 xpos 2888 ypos 1986 } ColorMatrix { matrix { {{parent.world_matrix.0} {parent.world_matrix.1} {parent.world_matrix.2}} {{parent.world_matrix.4} {parent.world_matrix.5} {parent.world_matrix.6}} {{parent.world_matrix.8} {parent.world_matrix.9} {parent.world_matrix.10}} } name ColorMatrix1 label "convert camera space to world space" xpos 2888 ypos 2068 } Shuffle { alpha black out deepNormal name Shuffle5 xpos 2888 ypos 2144 } push $N82ee2400 DeepRecolor { inputs 2 channels {deepNormal.red deepNormal.green deepNormal.blue none} name DeepRecolor6 xpos 2708 ypos 2138 } DeepExpression { chans0 {deepNormal.red deepNormal.green deepNormal.blue none} chans1 none deepNormal.red "deepNormal.red * (1/alpha)" deepNormal.green "deepNormal.green * (1/alpha)" deepNormal.blue "deepNormal.blue * (1/alpha)" name DeepExpression7 label "deep normal should unpremult normal by samples" xpos 2708 ypos 2230 } Dot { name Dot31 xpos 2742 ypos 3338 } push $N82ee3000 Dot { name Dot22 xpos 1868 ypos 1064 } set N82ea5400 [stack 0] Group { name DeepPositionToImage1 tile_color 0x3d99ff label "Image Output" xpos 2181 ypos 1050 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T n/a} addUserKnob {26 l_DATE l "Date Modified" T 2019-05-23} addUserKnob {26 l_CHANGELOG l Changelog T "for internal use"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Input { inputs 0 name deep xpos 508 ypos -26 } Dot { name Dot5 xpos 542 ypos 31 } set N82ea4c00 [stack 0] DeepExpression { chans1 none rgba.red deepPosition.red rgba.green deepPosition.green rgba.blue deepPosition.blue rgba.alpha "alpha == 0 ? 0 : 1" name DeepExpression15 xpos 656 ypos 28 } DeepToImage { name DeepToImage2 xpos 656 ypos 185 } push $N82ea4c00 DeepToImage { name DeepToImage1 xpos 508 ypos 80 } ShuffleCopy { inputs 2 red red green green blue blue alpha black out deepPosition name ShuffleCopy1 xpos 508 ypos 185 } Output { name Output1 selected true xpos 508 ypos 265 } end_group Shuffle { in deepPosition in2 alpha alpha red2 name Shuffle12 xpos 2181 ypos 1154 } Remove { operation keep channels rgba name Remove1 xpos 2181 ypos 1236 } Dot { name Dot29 xpos 2215 ypos 1316 } set N8325e800 [stack 0] Dot { name Dot32 xpos 2080 ypos 1316 } Dot { name Dot30 xpos 2080 ypos 1670 } push $N8325e800 BlinkScript { recompileCount 382 ProgramGroup 1 KernelDescription "2 \"PosToNor\" iterate pixelWise cefc15fca60ad2728a271bbc156cbd773381d51a0d034d9c392d6485e9b47f03 2 \"src\" Read Random \"dst\" Write Point 1 \"deep threshold\" Float 1 zczMPQ== 1 \"dThreshold\" 1 1 0" kernelSource "//----- General function start\n\ninline float dCheck(float shiftD, float origD, float dt)\n\{\n return fabs(shiftD-origD) > dt ;\n\}\n\ninline float nCalXY(float nxya, float nxyb, float sxya, float sxyb)\n\{\n return atan( (sxyb-nxyb) / -(sxya-nxya) ) / (PI/2) ;\n\}\n\ninline float nCalZ( float nza ,float nzb , float nzc , float sza , float szb , float szc )\n\{\n float temp = (PI/2) - atan( sqrt( pow(sza-nza, 2) + pow(szb-nzb, 2) ) / -(szc-nzc) ) ;\n if ( temp > (PI/2) ) \{\n return 1 ;\n \}\n return 1 - temp / (PI/2) ;\n\}\n\n//----- General function end\n\nkernel PosToNor : ImageComputationKernel\n\{\n Image src;\n Image dst;\n\n param:\n float dThreshold;\n\n local:\n\n void define() \{\n defineParam( dThreshold , \"deep threshold\", 0.1f) ;\n \}\n\n void init() \{\n \}\n\n void process(int2 pos) \{\n\n // neighbor pixel\n float xM = float(pos.x-1) ;\n float yM = float(pos.y-1) ;\n float xP = float(pos.x+1) ;\n float yP = float(pos.y+1) ;\n\n // position setup\n SampleType(src) pN = src( pos.x , pos.y );\n\n SampleType(src) pDE = src(xP, pos.y) ;\n SampleType(src) pDS = src(pos.x, yM) ;\n SampleType(src) pDW = src(xM, pos.y) ;\n SampleType(src) pDN = src(pos.x, yP) ;\n\n SampleType(src) pDNE = src(xP, yP) ;\n SampleType(src) pDSE = src(xP, yM) ;\n SampleType(src) pDSW = src(xM, yM) ;\n SampleType(src) pDNW = src(xM, yP) ;\n\n // normal\n\n float norPX;\n float norPY;\n float norPZ;\n\n // X\n if ( dCheck(pDW.z, pN.z, dThreshold) ) \{\n norPX = nCalXY(pN.x, pN.z, pDE.x, pDE.z) ;\n \}\n else \{\n norPX = nCalXY(pN.x, pN.z, pDW.x, pDW.z) ;\n \}\n\n // Y\n if ( dCheck(pDS.z, pN.z, dThreshold) ) \{\n norPY = nCalXY(pN.y, pN.z, pDN.y, pDN.z) ;\n \}\n else \{\n norPY = nCalXY(pN.y, pN.z, pDS.y, pDS.z) ;\n \}\n\n // Z\n norPZ = min( 1-fabs(norPX) , 1-fabs(norPY) ) ;\n\n if ( dCheck(pDSW.z, pN.z, dThreshold) ) \{\n norPZ = min( norPZ, nCalZ(pN.x, pN.y, pN.z, pDNE.x, pDNE.y, pDNE.z) ) ;\n \}\n else \{\n norPZ = min( norPZ, nCalZ(pN.x, pN.y, pN.z, pDSW.x, pDSW.y, pDSW.z) ) ;\n \}\n\n if ( dCheck(pDSE.z, pN.z, dThreshold) ) \{\n norPZ = min( norPZ, nCalZ(pN.x, pN.y, pN.z, pDNW.x, pDNW.y, pDNW.z) ) ;\n \}\n else \{\n norPZ = min( norPZ, nCalZ(pN.x, pN.y, pN.z, pDSE.x, pDSE.y, pDSE.z) ) ;\n \}\n\n//----- write out\n dst() = float4( norPX , norPY , norPZ , 0 ) ;\n \}\n\};" useGPUIfAvailable {{parent.useGPUIfAvailable}} rebuild "" "PosToNor_deep threshold" {{parent.deep_threshold}} protectKernelWhenPublishing true rebuild_finalise "" name BlinkScript5 xpos 2181 ypos 1423 } Expression { expr0 "atan( atan(red) ) * 1.5" expr2 "smoothstep( 0, 1, blue )" name Expression2 xpos 2181 ypos 1544 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy2 xpos 2181 ypos 1661 } Premult { name Premult2 xpos 2181 ypos 1754 } Unpremult { name Unpremult2 xpos 2181 ypos 1834 } Shuffle { in rgb alpha black out deepNormal name Shuffle13 xpos 2181 ypos 1914 } Dot { name Dot23 xpos 2215 ypos 2276 } push $N82ea5400 DeepExpression { chans0 {deepPosition.red deepPosition.green deepPosition.blue none} chans1 none deepPosition.red "(deepPosition.red * \[value parent.world_matrix.0] + deepPosition.green * \[value parent.world_matrix.1] + deepPosition.blue * \[value parent.world_matrix.2]) + \[value parent.world_matrix.3]" deepPosition.green "(deepPosition.red * \[value parent.world_matrix.4] + deepPosition.green * \[value parent.world_matrix.5] + deepPosition.blue * \[value parent.world_matrix.6]) + \[value parent.world_matrix.7]" deepPosition.blue "(deepPosition.red * \[value parent.world_matrix.8] + deepPosition.green * \[value parent.world_matrix.9] + deepPosition.blue * \[value parent.world_matrix.10]) + \[value parent.world_matrix.11]" name DeepExpression19 label "world space position" xpos 1834 ypos 1892 } DeepRecolor { inputs 2 channels {deepNormal.red deepNormal.green deepNormal.blue none} name DeepRecolor15 xpos 1834 ypos 2266 } DeepExpression { chans0 {deepNormal.red deepNormal.green deepNormal.blue none} chans1 none deepNormal.red "deepNormal.red * (1/alpha)" deepNormal.green "deepNormal.green * (1/alpha)" deepNormal.blue "deepNormal.blue * (1/alpha)" name DeepExpression21 label "deep normal should unpremult normal by samples" xpos 1834 ypos 2358 } DeepExpression { chans0 {deepNormal.red deepNormal.green deepNormal.blue none} chans1 none deepNormal.red "\[value dx]" deepNormal.green "\[value dy]" deepNormal.blue "\[value dz]" name DeepExpression22 label "world space normal" xpos 1834 ypos 2450 addUserKnob {20 User} addUserKnob {1 dx} dx "deepNormal.red * \[value parent.world_matrix.0] + deepNormal.green * \[value parent.world_matrix.1] + deepNormal.blue * \[value parent.world_matrix.2]" addUserKnob {1 dy} dy "deepNormal.red * \[value parent.world_matrix.4] + deepNormal.green * \[value parent.world_matrix.5] + deepNormal.blue * \[value parent.world_matrix.6]" addUserKnob {1 dz} dz "deepNormal.red * \[value parent.world_matrix.8] + deepNormal.green * \[value parent.world_matrix.9] + deepNormal.blue * \[value parent.world_matrix.10]" } Dot { name Dot26 xpos 1868 ypos 3354 } push $N82ee3400 Group { name DeepPositionToImage2 tile_color 0x3d99ff label "Image Output" xpos 181 ypos 639 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T n/a} addUserKnob {26 l_DATE l "Date Modified" T 2019-05-23} addUserKnob {26 l_CHANGELOG l Changelog T "for internal use"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Input { inputs 0 name deep xpos 508 ypos -26 } Dot { name Dot5 xpos 542 ypos 31 } set N83212400 [stack 0] DeepExpression { chans1 none rgba.red deepPosition.red rgba.green deepPosition.green rgba.blue deepPosition.blue rgba.alpha "alpha == 0 ? 0 : 1" name DeepExpression15 xpos 656 ypos 28 } DeepToImage { name DeepToImage2 xpos 656 ypos 185 } push $N83212400 DeepToImage { name DeepToImage1 xpos 508 ypos 80 } ShuffleCopy { inputs 2 red red green green blue blue alpha black out deepPosition name ShuffleCopy1 xpos 508 ypos 185 } Output { name Output1 selected true xpos 508 ypos 265 } end_group Shuffle { in deepPosition alpha black name Shuffle3 xpos 181 ypos 770 } Dot { name Dot4 xpos 215 ypos 850 } set N83210800 [stack 0] Dot { name Dot5 xpos 342 ypos 850 } set N83210400 [stack 0] Dot { name Dot7 xpos 465 ypos 850 } set N831bfc00 [stack 0] Dot { name Dot8 xpos 592 ypos 850 } set N831bf800 [stack 0] Dot { name Dot11 xpos 722 ypos 850 } set N831bf400 [stack 0] Dot { name Dot16 xpos 848 ypos 850 } set N831bf000 [stack 0] Dot { name Dot18 xpos 994 ypos 850 } set N831bec00 [stack 0] Dot { name Dot20 xpos 1120 ypos 850 } Transform { translate {-1 1} name Transform8 label nw xpos 1086 ypos 924 } Shuffle { alpha black out rgb name Shuffle11 xpos 1086 ypos 1189 } Dot { name Dot21 xpos 1120 ypos 2404 } push $N831bec00 Transform { translate {-1 1} name Transform7 label se xpos 960 ypos 924 } Shuffle { alpha black out deepRawColor name Shuffle7 xpos 960 ypos 1189 } Dot { name Dot19 xpos 994 ypos 2318 } push $N831bf000 Transform { translate {1 1} name Transform6 label ne xpos 814 ypos 924 } Shuffle { alpha black out rgb name Shuffle6 xpos 814 ypos 1189 } Dot { name Dot17 xpos 848 ypos 2140 } push $N831bf400 Transform { translate {-1 -1} name Transform5 label sw xpos 688 ypos 924 } Shuffle { alpha black out deepRawColor name Shuffle1 xpos 688 ypos 1189 } Dot { name Dot15 xpos 722 ypos 2054 } push $N831bf800 Transform { translate {0 -1} name Transform3 label s xpos 558 ypos 924 } Shuffle { red black green black blue green alpha blue out deepRawColor name Shuffle9 xpos 558 ypos 1189 } Dot { name Dot10 xpos 592 ypos 1686 } push $N831bfc00 Transform { translate {0 1} name Transform4 label n xpos 431 ypos 924 } Shuffle { red green green blue blue black alpha black out deepRawColor name Shuffle10 xpos 431 ypos 1189 } Dot { name Dot9 xpos 465 ypos 1573 } push $N83210400 Transform { translate {-1 0} name Transform2 label w xpos 308 ypos 924 } Shuffle { red black green black blue red alpha blue out deepRawColor name Shuffle8 xpos 308 ypos 1189 } Dot { name Dot6 xpos 342 ypos 1382 } push $N83210800 Transform { translate {1 0} name Transform1 label e xpos 181 ypos 924 } Shuffle { green blue blue black alpha black out deepRawColor name Shuffle2 xpos 181 ypos 1189 } Dot { name Dot24 xpos 215 ypos 1269 } push $N82ee3800 DeepExpression { chans0 {deepPosition.red deepPosition.green deepPosition.blue none} chans1 none deepPosition.red "deepPosition.red * alpha" deepPosition.green "deepPosition.green * alpha" deepPosition.blue "deepPosition.blue * alpha" name DeepExpression15 label "premult position" xpos 0 ypos 886 } DeepRecolor { inputs 2 channels {deepRawColor.red deepRawColor.green -deepRawColor.blue none} name DeepRecolor2 xpos 0 ypos 1260 } DeepRecolor { inputs 2 channels {-deepRawColor.red -deepRawColor.green deepRawColor.blue deepRawColor.alpha} name DeepRecolor4 xpos 0 ypos 1373 } DeepExpression { temp_expr0 "atan( (deepRawColor.green-deepPosition.blue)/-(deepRawColor.red-deepPosition.red) ) / (pi/2)" temp_expr1 (deepRawColor.green-deepPosition.blue) temp_expr2 "atan( (deepRawColor.alpha-deepPosition.blue)/-(deepRawColor.blue-deepPosition.red) ) / (pi/2)" chans0 {deepNormal.red -deepNormal.green -deepNormal.blue none} chans1 none deepNormal.red "(deepRawColor.green-deepPosition.blue)<\[value dt] ? atan( (deepRawColor.green-deepPosition.blue)/-(deepRawColor.red-deepPosition.red) ) / (pi/2) : atan( (deepRawColor.alpha-deepPosition.blue)/-(deepRawColor.blue-deepPosition.red) ) / (pi/2)" name DeepExpression14 tile_color 0xff0000ff label "find normal.red" xpos 0 ypos 1472 addUserKnob {20 User} addUserKnob {7 dt} dt {{deep_threshold}} } DeepRecolor { inputs 2 channels {deepRawColor.red deepRawColor.green -deepRawColor.blue none} name DeepRecolor7 xpos 0 ypos 1564 } DeepRecolor { inputs 2 channels {-deepRawColor.red -deepRawColor.green deepRawColor.blue deepRawColor.alpha} name DeepRecolor11 xpos 0 ypos 1677 } DeepExpression { temp_expr0 "atan( (deepRawColor.green-deepPosition.blue)/-(deepRawColor.red-deepPosition.green) ) / (pi/2)" temp_expr1 (deepRawColor.green-deepPosition.blue) temp_expr2 "atan( (deepRawColor.alpha-deepPosition.blue)/-(deepRawColor.blue-deepPosition.green) ) / (pi/2)" chans0 {-deepNormal.red deepNormal.green -deepNormal.blue none} chans1 none deepNormal.green "(deepRawColor.green-deepPosition.blue)<\[value dt] ? atan( (deepRawColor.green-deepPosition.blue)/-(deepRawColor.red-deepPosition.green) ) / (pi/2) : atan( (deepRawColor.alpha-deepPosition.blue)/-(deepRawColor.blue-deepPosition.green) ) / (pi/2)" name DeepExpression5 tile_color 0xff00ff label "find normal.green" xpos 0 ypos 1769 addUserKnob {20 User} addUserKnob {7 dt} dt {{deep_threshold}} } DeepExpression { chans0 {-deepPosition.red -deepPosition.green -deepPosition.blue deepPosition.alpha} chans1 {-deepNormal.red -deepNormal.green -deepNormal.blue deepNormal.alpha} chans2 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} deepPosition.alpha red deepNormal.alpha green deepRawColor.alpha blue name DeepExpression17 label "shuffle channels for math" xpos 0 ypos 1861 } DeepExpression { chans0 {-deepNormal.red -deepNormal.green deepNormal.blue none} chans1 none deepNormal.blue "min( 1-abs(deepNormal.red) , 1-abs(deepNormal.green) )" name DeepExpression6 tile_color 0xffff label "get normal.blue step1" xpos 0 ypos 1953 } DeepRecolor { inputs 2 channels {deepRawColor.red deepRawColor.green deepRawColor.blue none} name DeepRecolor3 xpos 0 ypos 2045 } DeepRecolor { inputs 2 name DeepRecolor12 xpos 0 ypos 2137 } DeepExpression { temp_name0 dir1 temp_expr0 "\[value tempA]>(pi/2) ? 1 : 1-(\[value tempA])/(pi/2) )" temp_name1 dir2 temp_expr1 "\[value tempB]>(pi/2) ? 1 : 1-(\[value tempB])/(pi/2) )" chans0 {-deepNormal.red -deepNormal.green deepNormal.blue none} chans1 none deepNormal.blue "(deepRawColor.blue-deepPosition.blue)>\[value dt] ? (deepNormal.blue(pi/2) ? 1 : 1-(\[value tempA])/(pi/2) )" temp_name1 dir2 temp_expr1 "\[value tempB]>(pi/2) ? 1 : 1-(\[value tempB])/(pi/2) )" chans0 {-deepNormal.red -deepNormal.green deepNormal.blue none} chans1 none deepNormal.blue "(deepRawColor.blue-deepPosition.blue)>\[value dt] ? (deepNormal.blueDeep Output
" addUserKnob {20 tab_general l General} addUserKnob {22 set_link l "link to selected camera" t "Deep data is related to camera. So when convert deep data to anything, it required the camera data.\n\nhow to use :\nSelect the camera, which can be link to any axis nodes. This tool will get the focal, haperture and world matrix from selected camera to generate world space position data.\n\nYou can find the world space position pass store under 'deepPosition' channel after this node. The pass support volumatric deep data. If want to bring the position data to 2D in downstream. Please only use DVPToImage which comes along with this toolset.\n\nAdditional note:\nThis node will also create another channel called 'deepRawColor' . This channel stored the original of deep data from input for any dev purposes in downstream. User not necessary to use this channel but better to keep it if this toolset occur in downstream." T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\n\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\ndefaultKnobs = \{\n\t\t\t'world matrix' : 'world_matrix',\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tfor knob in mainKnobs :\n\t\t\t\tthisGRP\[knob].clearAnimated()\n\t\t\t\t\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.focal'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.haperture'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.win_translate'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.win_scale'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.winroll'.format(CAMnode))\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tfor knob in mainKnobs :\n\t\t\t\t\tthisGRP\[knob].clearAnimated()\n\t\t\t\t\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']))\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']))\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']))\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']))\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window roll']))\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data. So the position data still works if input doesn't contain any camera movement." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\n\nfor knob in thisGRP.knobs() :\n if mainKnobs.count(knob) != 0 :\n thisGRP\[knob].clearAnimated()"} addUserKnob {22 bake_link l "bake expression link" t "Baked out the existing expression link back to this node itself. After that, camera node is not required for this node anymore. Baked value is base on the frame range in project setting of the nuke script.\n\n* Nuke 11.2 has issue with expression link on this node. It will crash your nuke in some cases, but it will be fine when re-open the nuke script. Because of this issue, recommand to bake the value." T "thisGRP = nuke.thisGroup()\n\nframeST = nuke.root().firstFrame()\nframeED = nuke.root().lastFrame()\n\nallknobs = \['cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll','world_matrix']\nalldata = \{\}\n\nchknobs = 0\nfor knob in allknobs :\n\tif thisGRP\[knob].hasExpression() :\n\t\tchknobs = 1\n\nif chknobs :\n\tfor knob in allknobs :\n\t\tfor t in range( frameST, frameED+1, 1 ) :\n\t\t\ttry :\n\t\t\t\talldata\[knob].append( thisGRP\[knob].getValueAt(t) )\n\t\t\texcept :\n\t\t\t\talldata\[knob] = \[ thisGRP\[knob].getValueAt(t) ]\n\n\tfor knob in allknobs :\n\t\tthisGRP\[knob].clearAnimated()\n\t\tthisGRP\[knob].setAnimated()\n\n\tfor knob in allknobs :\n\t\tfor t in range( frameST, frameED+1, 1 ) :\n\t\t\tif type( alldata\[knob]\[t-frameST] ) is float :\n\t\t\t\tthisGRP\[knob].setValueAt( alldata\[knob]\[t-frameST] , t )\n\t\t\tif type( alldata\[knob]\[t-frameST] ) is list :\n\t\t\t\tfor i in range( len( alldata\[knob]\[t-frameST] ) ) :\n\t\t\t\t\tthisGRP\[knob].setValueAt( alldata\[knob]\[t-frameST]\[i] , t , i )\nelse :\n\tnuke.message('no expression link found.')" +STARTLINE} addUserKnob {22 copy_data l "copy from selected camera" t "Select the camera, then this will process 'link to selected camera' and 'bake expression link' in once.\n\n* Nuke 11.2 has issue with expression link on this node. It will crash your nuke in some cases, but it will be fine when re-open the nuke script. Because of this issue, recommand to bake the value." -STARTLINE T "thisGRP = nuke.thisGroup()\nthisGRP\['set_link'].execute()\nthisGRP\['bake_link'].execute()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 cam_focal l "focal length" R 5 100} cam_focal 50 addUserKnob {7 cam_haperture l "horiz aperture" R 0.1 50} cam_haperture 24.576 addUserKnob {30 cam_win_translate l "window translate"} addUserKnob {30 cam_win_scale l "window scale"} cam_win_scale {1 1} addUserKnob {7 cam_winroll l "window roll" R -45 45} addUserKnob {41 world_matrix l "world matrix" T cam_data.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 3.8} addUserKnob {26 l_DATE l "Date Modified" T 2020-02-13} addUserKnob {22 btn_CHANGELOG l Changlelog T "log = \"3.8
'DVPMatte'
  - fixed cube matte shape result when pivot changed. Sphere and Cylinder were fine in the past versions.
'DVProjection'
  - link camera replaced transformation by world matrix, so it works with camera stack with axis.
  - removed preview projection camera in 3D view.

3.7
Toolset update :
  'DVPort'
    - added 'near' & 'far knobs
    - capable with 'DeepBoolean' v1.4
  'DVPmatte'
    - fixed missing premult original alpha process
    - capable with 'DeepBoolean' v1.4
    - revert uniform_scale default value back to 1.0

3.6
'DVPsetLight'
- improved 'generated normal (estimate from position)' and changed to blink script. Get better edges on deepNormal.\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x7f7f7fff label bin note_font_size 42 xpos -770 ypos -291 bdwidth 528 bdheight 265 } Group { inputs 0 name inverseMatrix_cam tile_color 0x337f4cff xpos -712 ypos -149 addUserKnob {20 User} addUserKnob {1 knob_path} knob_path cam_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group Camera { inputs 0 display off selectable false rotate {0 0 {-parent.cam_winroll}} win_translate {{parent.cam_win_translate} {parent.cam_win_translate}} win_scale {{parent.cam_win_scale} {parent.cam_win_scale}} name fb_data xpos -546 ypos -169 } Camera { inputs 0 display off selectable false rot_order XYZ useMatrix true focal {{parent.cam_focal}} haperture {{parent.cam_haperture}} name cam_data xpos -412 ypos -170 } add_layer {deepRawColor deepRawColor.red deepRawColor.green deepRawColor.blue deepRawColor.alpha} AddChannels { inputs 0 channels deepRawColor name AddChannels2 xpos -138 ypos -15 } add_layer {deepPosition deepPosition.red deepPosition.green deepPosition.blue deepPosition.alpha} AddChannels { inputs 0 channels deepPosition name AddChannels3 xpos -137 ypos -291 } Input { inputs 0 name deep xpos 0 ypos -373 } DeepRecolor { inputs 2 channels {{{parent.AddChannels3.channels}}} name DeepRecolor2 xpos 0 ypos -291 } DeepExpression { temp_name0 xpos temp_expr0 "( ( x/\[value input.width] ) - 0.5 ) * \[value hratio] * deep.front )" temp_name1 ypos temp_expr1 "( ( y/\[value input.height] ) - 0.5 ) * ( ( \[value hratio]*deep.front ) / ( \[value input.width]/\[value input.height] ) ) * 1 / \[value root.format.pixel_aspect]" temp_name2 zpos temp_expr2 -deep.front chans0 {deepPosition.red deepPosition.green deepPosition.blue none} chans1 none deepPosition.red "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value hratio] * deep.front * \[value fb_data.win_translate.u] / 2 )" deepPosition.green "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value hratio] * deep.front * \[value fb_data.win_translate.v] / 2 )" deepPosition.blue zpos name DeepExpression3 label "apply cam window" xpos 0 ypos -197 addUserKnob {20 User} addUserKnob {7 hratio} hratio {{"\[value cam_data.haperture] / \[value cam_data.focal]"}} } DeepExpression { chans0 {deepPosition.red deepPosition.green deepPosition.blue none} chans1 none deepPosition.red "(deepPosition.red * \[value cam_data.world_matrix.0] + deepPosition.green * \[value cam_data.world_matrix.1] + deepPosition.blue * \[value cam_data.world_matrix.2]) + \[value cam_data.world_matrix.3]" deepPosition.green "(deepPosition.red * \[value cam_data.world_matrix.4] + deepPosition.green * \[value cam_data.world_matrix.5] + deepPosition.blue * \[value cam_data.world_matrix.6]) + \[value cam_data.world_matrix.7]" deepPosition.blue "(deepPosition.red * \[value cam_data.world_matrix.8] + deepPosition.green * \[value cam_data.world_matrix.9] + deepPosition.blue * \[value cam_data.world_matrix.10]) + \[value cam_data.world_matrix.11]" name DeepExpression5 label "back to camera position" xpos 0 ypos -103 } DeepRecolor { inputs 2 channels {{{parent.AddChannels2.channels}}} name DeepRecolor4 xpos 0 ypos -15 } DeepExpression { chans0 {deepRawColor.red deepRawColor.green deepRawColor.blue deepPosition.alpha} chans1 none deepRawColor.red red deepRawColor.green green deepRawColor.blue blue deepPosition.alpha alpha name DeepExpression1 label "keep input color" xpos 0 ypos 79 } Output { name Output1 xpos 0 ypos 173 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DeepBoolean.gizmo ================================================ Group { name DeepBoolean tile_color 0x597fff label "mode : \[value mode]\nDeep Output" addUserKnob {20 tab_general l General} addUserKnob {22 set_link l "link to selected camera" t "Deep data is all related to camera, so the tool required camera data as well. Select the camera and click this button, the tool will gather all the information that it needs from camera node.\n\nIt is fine if the camera connected some axis with transformation on it's upstream. It is because this button will collect world matrix for transformation.\n\nRequired data can be find under 'Camera Data'" T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\n\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_near','cam_far','cam_win_translate','cam_win_scale','cam_winroll']\ndefaultKnobs = \{\n\t\t\t'world matrix' : 'world_matrix',\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'near' : 'near',\n\t\t\t'far' : 'far',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tfor knob in mainKnobs :\n\t\t\t\tthisGRP\[knob].clearAnimated()\n\t\t\t\t\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.focal'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.haperture'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.near'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.far'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.win_translate'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[6]].setExpression('\{0\}.win_scale'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[7]].setExpression('\{0\}.winroll'.format(CAMnode))\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tfor knob in mainKnobs :\n\t\t\t\t\tthisGRP\[knob].clearAnimated()\n\t\t\t\t\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']))\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']))\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['near']))\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['far']))\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']))\n\t\t\t\tthisGRP\[mainKnobs\[6]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']))\n\t\t\t\tthisGRP\[mainKnobs\[7]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window roll']))\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the camera expression with this button. It will remain the current camera data in this node but not with animation." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_near','cam_far','cam_win_translate','cam_win_scale','cam_winroll']\n\nfor knob in thisGRP.knobs() :\n if mainKnobs.count(knob) != 0 :\n thisGRP\[knob].clearAnimated()"} addUserKnob {22 bake_link l "bake expression link" T "thisGRP = nuke.thisGroup()\n\nframeST = nuke.root().firstFrame()\nframeED = nuke.root().lastFrame()\n\nallknobs = \['cam_focal','cam_haperture','cam_near','cam_far','cam_win_translate','cam_win_scale','cam_winroll','world_matrix']\nalldata = \{\}\n\nchknobs = 0\nfor knob in allknobs :\n\tif thisGRP\[knob].hasExpression() :\n\t\tchknobs = 1\n\nif chknobs :\n\tfor knob in allknobs :\n\t\tfor t in range( frameST, frameED+1, 1 ) :\n\t\t\ttry :\n\t\t\t\talldata\[knob].append( thisGRP\[knob].getValueAt(t) )\n\t\t\texcept :\n\t\t\t\talldata\[knob] = \[ thisGRP\[knob].getValueAt(t) ]\n\n\tfor knob in allknobs :\n\t\tthisGRP\[knob].clearAnimated()\n\t\tthisGRP\[knob].setAnimated()\n\n\tfor knob in allknobs :\n\t\tfor t in range( frameST, frameED+1, 1 ) :\n\t\t\tif type( alldata\[knob]\[t-frameST] ) is float :\n\t\t\t\tthisGRP\[knob].setValueAt( alldata\[knob]\[t-frameST] , t )\n\t\t\tif type( alldata\[knob]\[t-frameST] ) is list :\n\t\t\t\tfor i in range( len( alldata\[knob]\[t-frameST] ) ) :\n\t\t\t\t\tthisGRP\[knob].setValueAt( alldata\[knob]\[t-frameST]\[i] , t , i )\nelse :\n\tnuke.message('no expression link found.')" +STARTLINE} addUserKnob {22 copy_data l "copy from selected camera" -STARTLINE T "thisGRP = nuke.thisGroup()\nthisGRP\['set_link'].execute()\nthisGRP\['bake_link'].execute()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 cam_focal l "focal length" t "focal length of the camera" R 5 100} cam_focal 50 addUserKnob {7 cam_haperture l "horiz aperture" t "horiz aperture of the camera" R 0.1 50} cam_haperture 24.576 addUserKnob {7 cam_near l near t "near clip value of the camera" R 0.1 10} cam_near 0.1 addUserKnob {7 cam_far l far t "far clip value of the camera" R 11 10000} cam_far 10000 addUserKnob {30 cam_win_translate l "window translate"} addUserKnob {30 cam_win_scale l "window scale"} cam_win_scale {1 1} addUserKnob {7 cam_winroll l "window roll" R -45 45} addUserKnob {41 world_matrix l "world matrix" t "world matrix of the camera" T cam_data.matrix} addUserKnob {20 endGroup n -1} addUserKnob {26 title_geomatte l "GEO MATTE"} addUserKnob {4 mode t "intersect\nkeep the data overlap with the geo matte.\n\nsubtract\nremove the data overlap with the geo matte.\n\nRemarks:\nsubtract is alike deepholdout function but support with geo matte extrude/erode in z and falloff." M {intersect subtract}} addUserKnob {6 uv_fix l "create new UV for holdout geo" t "If the geo has no UV, extrude the holdout will break the setup. This option to fix a geo without UV." +STARTLINE} addUserKnob {7 extrude t "extrude the geo faces by normal" R -4 4} addUserKnob {78 erode_front l "deep erode front" t "erode the deep data clipped by geo matte in front data (closer from the camera)" n 1} addUserKnob {78 erode_back l back t "erode the deep data clipped by geo matte in back data (further from the camera)" -STARTLINE n 1} addUserKnob {7 falloff t "create a linear falloff matte from the geo."} addUserKnob {7 falloff_scale l "falloff scale" R 0.01 1000} falloff_scale 100 addUserKnob {78 bias t "This value for dev purposes. default value is 1.0" +INVISIBLE n 1} bias 1 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.4} addUserKnob {26 l_DATE l "Date Modified" T 2020-01-09} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.4
- support camera window transformation (re-rack)
- removed vert aperture (unnecessary)
- linked/bake/copy camera data has the same function as Deep2VP
  support non 'Camera'/'Camera2' node class
- capable with Deep2VP 3.7+ (able to combine with DVPmatte)

1.3
- download tool with demo script
- change label of the knob to
  'deep erode front/back'
  ( function & knob name doesn't change )

1.2
- optimize the setup, get less
  calculation
- added falloff scale\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Camera { inputs 0 display off selectable false useMatrix true focal {{parent.cam_focal}} haperture {{parent.cam_haperture}} near {{parent.cam_near}} far {{parent.cam_far}} win_translate {{parent.cam_win_translate} {parent.cam_win_translate}} win_scale {{parent.cam_win_scale} {parent.cam_win_scale}} winroll {{parent.cam_winroll}} name cam_data xpos -140 ypos -350 } Dot { name Dot13 xpos -6 ypos -326 } set Nb8eb800 [stack 0] Dot { name Dot14 xpos -6 ypos -166 } push $Nb8eb800 Reformat { inputs 0 type "to box" box_width 1 box_height 1 box_fixed true resize none filter Impulse name Reformat1 xpos -40 ypos -569 } Expression { expr0 1 channel1 none channel2 none channel3 none name Expression1 xpos -40 ypos -489 } CheckerBoard2 { inputs 0 name CheckerBoard1 xpos 180 ypos -673 } Multiply { channels alpha value 0.5 name tranparency xpos 180 ypos -573 } Displacement { inputs 2 displacement_channel red scale {{parent.extrude}} filter_size 0 filter Impulse displacement_max_tessellation 0 displacement_mode uniform name Displacement1 xpos 180 ypos -489 } Input { inputs 0 name geoMat xpos 290 ypos -809 } Dot { name Dot1 xpos 324 ypos -406 } ApplyMaterial { inputs 2 display off name ApplyMaterial1 xpos 180 ypos -409 } UVProject { inputs 2 selectable false projection planar name UVProject1 label "save the geo without uv" xpos 180 ypos -333 disable {{!parent.uv_fix}} } Input { inputs 0 name deep xpos 840 ypos -809 number 1 } Dot { name Dot4 xpos 874 ypos -246 } set N2008b000 [stack 0] DeepToImage { name DeepToImage2 xpos 290 ypos -249 } Remove { name Remove1 xpos 290 ypos -173 } ScanlineRender { inputs 3 conservative_shader_sampling false filter Impulse motion_vectors_type off MB_channel none output_shader_vectors true N_channel rgba name ScanlineRender1 xpos 180 ypos -169 } DeepExpression { chans0 alpha chans1 none rgba.alpha "alpha * 1/0.5" name DeepExpression1 label "revert alpha" xpos 180 ypos -98 } DeepExpression { temp_name0 nx temp_expr0 red temp_name1 ny temp_expr1 green temp_name2 nz temp_expr2 blue chans0 rgb chans1 none rgba.red 0 rgba.green 0 rgba.blue "nx * \[value inverseMatrix.invMatrix.6] + ny * \[value inverseMatrix.invMatrix.7] + nz * \[value inverseMatrix.invMatrix.8]" name DeepExpression3 label "cam normal z" xpos 180 ypos 67 } Dot { name Dot12 xpos 214 ypos 154 } set N200bd800 [stack 0] Dot { name Dot3 xpos 214 ypos 314 } set N200bd400 [stack 0] Dot { name Dot8 xpos -6 ypos 314 } set N200bd000 [stack 0] Dot { name Dot10 xpos -163 ypos 314 } DeepToImage { name DeepToImage6 xpos -197 ypos 764 } Dot { name Dot11 xpos -163 ypos 1274 } push $N200bd000 DeepExpression { chans0 {-rgba.red rgba.green -rgba.blue none} chans1 none rgba.green "blue < \[value bias] ? deep.front : 0" name DeepExpression6 label farD xpos -40 ypos 387 } DeepExpression { chans0 none chans1 deep deep.front "green == 0 ? -1 : deep.front" deep.back "green == 0 ? -1 : deep.back" name DeepExpression7 label "throw data" xpos -40 ypos 481 } DeepCrop { use_znear false zfar 0 outside_zrange true bbox {0 0 {input.width} {input.height}} name DeepCrop2 label "clean trash" xpos -40 ypos 575 } DeepExpression { chans1 deep deep.front -deep.front deep.back -deep.back name DeepExpression14 label "swap the furthest deep value" xpos -40 ypos 669 } DeepToImage { name DeepToImage4 xpos -40 ypos 763 } Add { channels {-rgba.red rgba.green -rgba.blue none} value {{parent.erode_back}} name Add1 label "back erode" xpos -40 ypos 881 } Dot { name Dot7 xpos -6 ypos 1149 } push $N200bd400 DeepExpression { chans0 {rgba.red -rgba.green -rgba.blue none} chans1 none rgba.red "blue > -\[value parent.bias] ? deep.front : 0" name DeepExpression4 label nearD xpos 180 ypos 388 } DeepExpression { chans0 none chans1 deep deep.front "red == 0 ? -1 : deep.front" deep.back "red == 0 ? -1 : deep.back" name DeepExpression5 label "throw data" xpos 180 ypos 482 } DeepCrop { use_znear false zfar 0 outside_zrange true bbox {0 0 {input.width} {input.height}} name DeepCrop1 label "clean trash" xpos 180 ypos 562 } DeepToImage { name DeepToImage3 xpos 180 ypos 763 } Add { channels {rgba.red -rgba.green -rgba.blue none} value {{-parent.erode_front}} name Add2 label "front erode" xpos 180 ypos 882 } Dot { name Dot6 xpos 214 ypos 1034 } push $N200bd800 DeepExpression { chans1 none rgba.red 0 rgba.green 0 rgba.blue 0 rgba.alpha 0 name DeepExpression13 xpos 400 ypos 151 } push $N2008b000 DeepMerge { inputs 2 name DeepMerge1 xpos 840 ypos 151 } Dot { name Dot5 xpos 874 ypos 554 } set N20102400 [stack 0] Dot { name Dot17 xpos 434 ypos 554 } DeepToImage { name DeepToImage5 xpos 400 ypos 769 } Remove { name Remove2 xpos 400 ypos 885 } add_layer {deepGeoMat deepGeoMat.red deepGeoMat.green deepGeoMat.blue deepGeoMat.alpha} ShuffleCopy { inputs 2 in2 none red red green black blue black alpha alpha2 out deepGeoMat name ShuffleCopy2 label "copy red" xpos 400 ypos 1027 } ShuffleCopy { inputs 2 in2 deepGeoMat green green blue black alpha black out deepGeoMat name ShuffleCopy3 label "copy green" xpos 400 ypos 1142 } ShuffleCopy { inputs 2 in2 deepGeoMat blue blue alpha black out deepGeoMat name ShuffleCopy1 label "copy blue" xpos 400 ypos 1267 } Dot { name Dot9 xpos 434 ypos 1354 } add_layer {deepRawColor deepRawColor.red deepRawColor.green deepRawColor.blue deepRawColor.alpha} AddChannels { inputs 0 channels deepRawColor name AddChannels1 xpos 697 ypos 707 } push $N20102400 DeepRecolor { inputs 2 channels {{{parent.AddChannels1.channels}}} name DeepRecolor1 xpos 840 ypos 707 } DeepExpression { chans0 deepRawColor chans1 none deepRawColor.red red deepRawColor.green green deepRawColor.blue blue deepRawColor.alpha alpha name DeepExpression2 label "store color to deepRawColor" xpos 840 ypos 867 } DeepExpression { chans0 alpha chans1 none rgba.alpha 1 name DeepExpression11 label "solid the alpha for data pass calculation" xpos 840 ypos 947 } DeepRecolor { inputs 2 channels deepGeoMat name DeepRecolor2 xpos 840 ypos 1347 } DeepExpression { chans0 {-deepGeoMat.red -deepGeoMat.green -deepGeoMat.blue deepGeoMat.alpha} chans1 none deepGeoMat.alpha "deep.front - deepGeoMat.red < \[value globalValue.falloff] ? clamp( ( deep.front - deepGeoMat.red ) / \[value globalValue.falloff] ) : 1" name DeepExpression9 label "front falloff" xpos 840 ypos 1435 } DeepExpression { chans0 {-deepGeoMat.red -deepGeoMat.green -deepGeoMat.blue deepGeoMat.alpha} chans1 none deepGeoMat.alpha "( deep.front - ( deepGeoMat.green - \[value globalValue.falloff] ) ) < \[value globalValue.falloff] ? ( 1 - clamp( ( deep.front - ( deepGeoMat.green - \[value globalValue.falloff] ) ) / \[value globalValue.falloff] ) ) * deepGeoMat.alpha : 0" name DeepExpression16 label "back falloff" xpos 840 ypos 1523 } DeepExpression { temp_name0 norSide temp_expr0 "1- clamp( ( 1- clamp( deepGeoMat.blue ) ) * ( \[value globalValue.falloff] / 100 ) )" chans0 {-deepGeoMat.red -deepGeoMat.green -deepGeoMat.blue deepGeoMat.alpha} chans1 none deepGeoMat.alpha "deepGeoMat.alpha * norSide" name DeepExpression12 label "facing ratio" xpos 840 ypos 1611 } DeepExpression { chans1 none rgba.red "deepGeoMat.alpha * deepRawColor.red" rgba.green "deepGeoMat.alpha * deepRawColor.green" rgba.blue "deepGeoMat.alpha * deepRawColor.blue" rgba.alpha "deepGeoMat.alpha * deepRawColor.alpha" name DeepExpression15 label "premult color" xpos 840 ypos 1699 } Dot { name Dot16 xpos 874 ypos 1774 } set N201f4000 [stack 0] DeepExpression { chans1 none rgba.red "deepRawColor.red - red" rgba.green "deepRawColor.green - green" rgba.blue "deepRawColor.blue - blue" rgba.alpha "deepRawColor.alpha - alpha" name DeepExpression23 label subtract xpos 950 ypos 1844 } push $N201f4000 Switch { inputs 2 which {{parent.mode}} name Switch1 xpos 840 ypos 1848 } DeepExpression { chans0 {-deepRawColor.red -deepRawColor.green -deepRawColor.blue deepRawColor.alpha} chans1 none deepRawColor.alpha 0 name DeepExpression8 xpos 840 ypos 1954 } DeepExpression { chans0 deep chans1 none deep.front "alpha <= 0 ? -1 : deep.front" deep.back "alpha <= 0 ? -1 : deep.back" name DeepExpression10 label "throw data from alpha" xpos 840 ypos 2036 } DeepCrop { use_znear false zfar 0 outside_zrange true bbox {0 0 {input.width} {input.height}} name DeepCrop3 label "clean trash data" xpos 840 ypos 2116 } Output { name Output1 xpos 840 ypos 2201 } Group { inputs 0 name inverseMatrix tile_color 0x337f4cff xpos -81 ypos 67 addUserKnob {20 User} addUserKnob {1 knob_path} knob_path cam_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output selected true xpos 186 ypos 33 } end_group NoOp { inputs 0 name globalValue xpos 561 ypos 1493 addUserKnob {20 User} addUserKnob {7 falloff} falloff {{"parent.falloff * parent.falloff_scale"}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DeepCopyBBox.gizmo ================================================ Group { name DeepCopyBBox tile_color 0x5fff addUserKnob {20 D_DeepCopyBBox} addUserKnob {26 "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "D_DeepCopyBBox v1.0 - (c) 2013 - Denis Scolan"} } Input { inputs 0 name Ext_BBox xpos -630 ypos 402 number 1 } Input { inputs 0 name deep xpos -821 ypos 403 } DeepCrop { use_znear false use_zfar false bbox {{input1.bbox.x} {input1.bbox.y} {input1.bbox.r} {input1.bbox.t}} name DeepBbox xpos -821 ypos 506 } Output { name Output1 xpos -821 ypos 623 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DeepCropSoft.gizmo ================================================ Group { name DeepCropSoft tile_color 0x6000 selected true addUserKnob {20 deepCropSoftTab l DeepCropSoft} addUserKnob {41 use_znear l znear T Controller1.use_znear} addUserKnob {7 znear l "" -STARTLINE R 0 200} addUserKnob {26 text l " " T " "} addUserKnob {7 falloffNear l " falloff" -STARTLINE R 0 10} addUserKnob {41 use_zfar l zfar T Controller1.use_zfar} addUserKnob {7 zfar l "" -STARTLINE R 0 200} zfar 1 addUserKnob {26 text_1 l " " T " "} addUserKnob {7 falloffFar l " falloff" -STARTLINE R 0 10} addUserKnob {6 outsideRange l "keep outside zrange" +STARTLINE} addUserKnob {1 output l INVISIBLE +INVISIBLE} output "\[ expr \{ \[value use_znear] ? \[value znear]: \"\" \}] \[ expr \{ \[value use_znear] ? \"-\": \"\" \}] \[ expr \{ \[value use_zfar] ? \[value zfar]: \"\" \}]" addUserKnob {26 WouterGilsing l "" +STARTLINE +INVISIBLE} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x3cff label near note_font_size 42 xpos -1157 ypos -509 bdwidth 701 bdheight 733 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x3cff label far note_font_size 42 xpos -1156 ypos 397 bdwidth 714 bdheight 748 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x3cff label near note_font_size 42 xpos 864 ypos -502 bdwidth 729 bdheight 733 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x3cff label far note_font_size 42 xpos 36 ypos -501 bdwidth 701 bdheight 733 } Input { inputs 0 name Input label "\[value number]" xpos -588 ypos -1763 } Dot { name Dot29 xpos -554 ypos -895 } set Nc19076c0 [stack 0] Dot { name Dot30 xpos 1407 ypos -895 } set Nc1909c30 [stack 0] Dot { name Dot16 xpos 1407 ypos -382 } set Nc190c2e0 [stack 0] Dot { name Dot18 xpos 1059 ypos -382 } set Nc190e990 [stack 0] Dot { name Dot11 xpos 576 ypos -382 } set Nc19110f0 [stack 0] Dot { name Dot25 xpos 182 ypos -382 } DeepCrop { znear {{parent.zfar}} zfar {{"parent.zfar + parent.falloffFar"}} bbox {431.6000061 242.8000031 1726.400024 971.2000122} use_bbox false name DeepCrop10 label "\[ expr \{ \[value use_znear] ? \[value znear]: \"\" \}] \[ expr \{ \[value use_znear] ? \"-\": \"\" \}] \[ expr \{ \[value use_zfar] ? \[value zfar]: \"\" \}]" xpos 148 ypos -305 } DeepExpression { chans1 rgba rgba.red "rgba.red / rgba.alpha" rgba.green "rgba.green / rgba.alpha" rgba.blue "rgba.blue / rgba.alpha" name DeepUnpremult4 xpos 148 ypos -197 } DeepExpression { temp_name0 near temp_expr0 "\[value parent.zfar]" temp_name1 far temp_expr1 "\[value parent.zfar] + \[value parent.falloffFar]" chans0 alpha chans1 none rgba.alpha "alpha * ((deep.front - near) / (far - near))" name DeepExpression4 xpos 148 ypos -158 } DeepExpression { chans1 rgba rgba.red "rgba.red * rgba.alpha" rgba.green "rgba.green * rgba.alpha" rgba.blue "rgba.blue * rgba.alpha" name DeepPremult4 xpos 148 ypos -114 } Dot { name Dot26 xpos 182 ypos 28 } push $Nc19110f0 DeepCrop { znear {{"parent.zfar + parent.falloffFar"}} zfar 1 use_zfar false bbox {431.6000061 242.8000031 1726.400024 971.2000122} use_bbox false name DeepCrop3 label "\[ expr \{ \[value use_znear] ? \[value znear]: \"\" \}] \[ expr \{ \[value use_znear] ? \"-\": \"\" \}] \[ expr \{ \[value use_zfar] ? \[value zfar]: \"\" \}]" xpos 542 ypos -293 } DeepMerge { inputs 2 name DeepMerge4 xpos 542 ypos 24 disable {{"parent.falloffFar == 0"}} } Dot { name Dot23 xpos 576 ypos 417 } set Nc181fe90 [stack 0] Dot { name Dot17 xpos 576 ypos 713 } push $Nc181fe90 Dot { name Dot22 xpos 1059 ypos 417 } Dot { name Dot27 xpos 1059 ypos 510 } push $Nc190e990 DeepCrop { znear {{"parent.znear - parent.falloffNear"}} zfar {{parent.znear}} bbox {431.6000061 242.8000031 1726.400024 971.2000122} use_bbox false name DeepCrop7 label "\[ expr \{ \[value use_znear] ? \[value znear]: \"\" \}] \[ expr \{ \[value use_znear] ? \"-\": \"\" \}] \[ expr \{ \[value use_zfar] ? \[value zfar]: \"\" \}]" xpos 1025 ypos -305 } DeepExpression { chans1 rgba rgba.red "rgba.red / rgba.alpha" rgba.green "rgba.green / rgba.alpha" rgba.blue "rgba.blue / rgba.alpha" name DeepUnpremult3 xpos 1025 ypos -174 } DeepExpression { temp_name0 near temp_expr0 "\[value parent.znear] - \[value parent.falloffNear]" temp_name1 far temp_expr1 "\[value parent.znear]" chans0 alpha chans1 none rgba.alpha "alpha * (1 - ((deep.front - near) / (far - near)))" name DeepExpression3 xpos 1025 ypos -133 } DeepExpression { chans1 rgba rgba.red "rgba.red * rgba.alpha" rgba.green "rgba.green * rgba.alpha" rgba.blue "rgba.blue * rgba.alpha" name DeepPremult3 xpos 1025 ypos -90 } Dot { name Dot19 xpos 1059 ypos 31 } push $Nc190c2e0 DeepCrop { znear 0 use_znear false zfar {{"parent.znear - parent.falloffNear"}} bbox {431.6000061 242.8000031 1726.400024 971.2000122} use_bbox false name DeepCrop9 label "\[ expr \{ \[value use_znear] ? \[value znear]: \"\" \}] \[ expr \{ \[value use_znear] ? \"-\": \"\" \}] \[ expr \{ \[value use_zfar] ? \[value zfar]: \"\" \}]" xpos 1373 ypos -306 } DeepMerge { inputs 2 name DeepMerge3 xpos 1373 ypos 27 disable {{"parent.falloffNear == 0"}} } Dot { name Dot15 xpos 1407 ypos 417 } set Nc1863f70 [stack 0] Dot { name Dot13 xpos 1219 ypos 417 } DeepMerge { inputs 2 name DeepMerge5 xpos 1185 ypos 506 } Dot { name Dot21 xpos 1219 ypos 608 } push $Nc1863f70 Switch { inputs 2 which {{parent.use_zfar}} name Switch3 label "\[value which]" xpos 1373 ypos 598 } Switch { inputs 2 which {{!parent.use_znear}} name Switch6 label "\[value which]" xpos 1373 ypos 703 } push $Nc1909c30 Dot { name Dot20 xpos 1995 ypos -895 } Dot { name Dot4 xpos 1995 ypos 835 } Switch { inputs 2 which {{"clamp(parent.use_znear + parent.use_zfar)"}} name Switch2 label "\[value which]" xpos 1373 ypos 825 } Dot { name Dot31 xpos 1407 ypos 1359 } push $Nc19076c0 Dot { name Dot9 xpos -554 ypos -389 } set Nc19181e0 [stack 0] Dot { name Dot8 xpos -727.6666667 ypos -389 } set Nc191bc90 [stack 0] Dot { name Dot2 xpos -1075 ypos -389 } DeepCrop { znear {{"parent.znear - parent.falloffNear"}} zfar {{parent.znear}} bbox {431.6000061 242.8000031 1726.400024 971.2000122} use_bbox false name DeepCrop2 label "\[ expr \{ \[value use_znear] ? \[value znear]: \"\" \}] \[ expr \{ \[value use_znear] ? \"-\": \"\" \}] \[ expr \{ \[value use_zfar] ? \[value zfar]: \"\" \}]" xpos -1109 ypos -311 } DeepExpression { chans1 rgba rgba.red "rgba.red / rgba.alpha" rgba.green "rgba.green / rgba.alpha" rgba.blue "rgba.blue / rgba.alpha" name DeepUnpremult2 xpos -1109 ypos -181 } DeepExpression { temp_name0 near temp_expr0 "\[value parent.znear] - \[value parent.falloffNear]" temp_name1 far temp_expr1 "\[value parent.znear]" chans0 alpha chans1 none rgba.alpha "alpha * ((deep.front - near) / (far - near))" name DeepExpression1 xpos -1109 ypos -140 } DeepExpression { chans1 rgba rgba.red "rgba.red * rgba.alpha" rgba.green "rgba.green * rgba.alpha" rgba.blue "rgba.blue * rgba.alpha" name DeepPremult1 xpos -1109 ypos -97 } Dot { name Dot1 xpos -1075 ypos -13 } push $Nc191bc90 DeepCrop { znear {{parent.znear}} zfar 200 use_zfar false bbox {431.6000061 242.8000031 1726.400024 971.2000122} use_bbox false name DeepCrop5 label "\[ expr \{ \[value use_znear] ? \[value znear]: \"\" \}] \[ expr \{ \[value use_znear] ? \"-\": \"\" \}] \[ expr \{ \[value use_zfar] ? \[value zfar]: \"\" \}]" xpos -761 ypos -310 } DeepMerge { inputs 2 name DeepMerge1 xpos -761 ypos -17 disable {{"parent.falloffNear == 0"}} } Dot { name Dot7 xpos -727.6666667 ypos 152 } push $Nc19181e0 Switch { inputs 2 which {{parent.use_znear}} name Switch1 label "\[value which]" xpos -588 ypos 142 } Dot { name Dot3 xpos -554 ypos 517 } set Nc19655b0 [stack 0] Dot { name Dot5 xpos -727 ypos 517 } set Nc19694f0 [stack 0] Dot { name Dot6 xpos -1075 ypos 517 } DeepCrop { znear {{parent.zfar}} zfar {{"parent.zfar + parent.falloffFar"}} bbox {431.6000061 242.8000031 1726.400024 971.2000122} use_bbox false name DeepCrop1 label "\[ expr \{ \[value use_znear] ? \[value znear]: \"\" \}] \[ expr \{ \[value use_znear] ? \"-\": \"\" \}] \[ expr \{ \[value use_zfar] ? \[value zfar]: \"\" \}]" xpos -1109 ypos 594 } DeepExpression { chans1 rgba rgba.red "rgba.red / rgba.alpha" rgba.green "rgba.green / rgba.alpha" rgba.blue "rgba.blue / rgba.alpha" name DeepUnpremult1 xpos -1109 ypos 702 } DeepExpression { temp_name0 near temp_expr0 "\[value parent.zfar]" temp_name1 far temp_expr1 "\[value parent.zfar] + \[value parent.falloffFar]" chans0 alpha chans1 none rgba.alpha "alpha * (1 - ((deep.front - near) / (far - near)))" name DeepExpression2 xpos -1109 ypos 742 } DeepExpression { chans1 rgba rgba.red "rgba.red * rgba.alpha" rgba.green "rgba.green * rgba.alpha" rgba.blue "rgba.blue * rgba.alpha" name DeepPremult2 xpos -1109 ypos 785 } Dot { name Dot12 xpos -1075 ypos 893 } push $Nc19694f0 DeepCrop { znear {{parent.zfar}} zfar 0 use_zfar false outside_zrange true bbox {431.6000061 242.8000031 1726.400024 971.2000122} use_bbox false name DeepCrop4 label "\[ expr \{ \[value use_znear] ? \[value znear]: \"\" \}] \[ expr \{ \[value use_znear] ? \"-\": \"\" \}] \[ expr \{ \[value use_zfar] ? \[value zfar]: \"\" \}]" xpos -761 ypos 593 } DeepMerge { inputs 2 name DeepMerge2 xpos -761 ypos 889 disable {{"parent.falloffFar == 0"}} } Dot { name Dot14 xpos -727 ypos 1058 } push $Nc19655b0 Switch { inputs 2 which {{parent.use_zfar}} name Switch4 label "\[value which]" xpos -588 ypos 1048 } Switch { inputs 2 which {{parent.outsideRange}} name Switch9 label "\[value which]" xpos -588 ypos 1349 } Output { name Output1 xpos -588 ypos 2052 } StickyNote { inputs 0 name StickyNote1 tile_color 0x3cff label " INVERSE " note_font_size 100 xpos 549 ypos -700 } NoOp { inputs 0 name Controller1 onCreate "node = nuke.thisGroup()\nfor mode in \['near', 'far']:\n state = node.knob('use_z\{\}'.format(mode)).value()\n for knobName in \['falloff\{\}'.format(mode.title()), 'z\{\}'.format(mode)]:\n node.knob(knobName).setEnabled(state)\n node.knob('z\{\}'.format(mode)).setRange(0,200)" knobChanged "node = nuke.thisGroup()\nfor mode in \['near', 'far']:\n state = node.knob('use_z\{\}'.format(mode)).value()\n for knobName in \['falloff\{\}'.format(mode.title()), 'z\{\}'.format(mode)]:\n node.knob(knobName).setEnabled(state)" label "\[ expr \{ \[value use_znear] ? \[value znear]: \"\" \}] \[ expr \{ \[value use_znear] ? \"-\": \"\" \}] \[ expr \{ \[value use_zfar] ? \[value zfar]: \"\" \}]" xpos -431 ypos -1098 addUserKnob {20 User} addUserKnob {6 use_znear l use +STARTLINE} use_znear true addUserKnob {6 use_zfar l use +STARTLINE} use_zfar true } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DeepFromDepth.gizmo ================================================ Group { name DeepFromDepth tile_color 0x66ff selected true addUserKnob {20 User} addUserKnob {41 in l z T Shuffle21.in} addUserKnob {41 in2 l alpha T Shuffle21.in2} addUserKnob {41 premult l premultiplied T DeepFromImage2.premult} addUserKnob {1 FS_PROPERTY +HIDDEN} } Input { inputs 0 name Input1 xpos -896 ypos 390 } Shuffle { in depth in2 alpha red blue green blue alpha alpha2 name Shuffle21 xpos -896 ypos 439 } Shuffle { red blue green blue out deep name Shuffle28 xpos -896 ypos 499 } DeepFromImage { premult true name DeepFromImage2 xpos -896 ypos 583 } DeepExpression { chans1 deep rgba.alpha a deep.front r==0?inf:r deep.back g==0?inf:g name DeepExpression1 selected true xpos -896 ypos 643 } Output { name Output1 xpos -896 ypos 718 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DeepFromPosition.gizmo ================================================ Group { name DeepFromPosition tile_color 0x145bff label "Deep Output" selected true addUserKnob {20 tab_general l General} addUserKnob {41 position l "position channel" T Shuffle_pos.in} addUserKnob {4 space -STARTLINE M {world camera ""}} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2019-12-21} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.0
- convert position to deep\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Input { inputs 0 name img xpos 0 ypos 169 } Dot { name Dot2 xpos 34 ypos 251 } set N8630940 [stack 0] Dot { name Dot4 xpos 134 ypos 251 } set N8634570 [stack 0] Dot { name Dot3 xpos 134 ypos 661 } push $N8634570 Dot { name Dot1 xpos 235 ypos 251 } Unpremult { channels all name Unpremult1 xpos 201 ypos 341 } Shuffle { in rgb in2 alpha alpha red2 name Shuffle_pos xpos 201 ypos 421 } Add { channels {rgba.red rgba.green rgba.blue none} value {{"\[exists parent.input1] == 0 ? 0 : -parent.input1.world_matrix.3"} {"\[exists parent.input1] == 0 ? 0 : -parent.input1.world_matrix.7"} {"\[exists parent.input1] == 0 ? 0 : -parent.input1.world_matrix.11"} 0} name Add1 xpos 201 ypos 503 } ColorMatrix { matrix { {{"\[exists parent.input1] == 0 ? 1 : parent.input1.world_matrix.0"} {"\[exists parent.input1] == 0 ? 0 : parent.input1.world_matrix.1"} {"\[exists parent.input1] == 0 ? 0 : parent.input1.world_matrix.2"}} {{"\[exists parent.input1] == 0 ? 0 : parent.input1.world_matrix.4"} {"\[exists parent.input1] == 0 ? 1 : parent.input1.world_matrix.5"} {"\[exists parent.input1] == 0 ? 0 : parent.input1.world_matrix.6"}} {{"\[exists parent.input1] == 0 ? 0 : parent.input1.world_matrix.8"} {"\[exists parent.input1] == 0 ? 0 : parent.input1.world_matrix.9"} {"\[exists parent.input1] == 0 ? 1 : parent.input1.world_matrix.10"}} } invert true name ColorMatrix1 xpos 201 ypos 585 } Expression { expr2 "alpha <= 0 ? 0 : 1 / -blue" name Expression1 xpos 201 ypos 667 } Switch { inputs 2 which {{space}} name Switch1 selected true xpos 201 ypos 749 } push $N8630940 ShuffleCopy { inputs 2 red blue out depth name ShuffleCopy1 xpos 0 ypos 749 } DeepFromImage { name DeepFromImage1 xpos 0 ypos 831 } Output { name Output1 xpos 0 ypos 913 } Input { inputs 0 name cam xpos 377 ypos 172 number 1 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DeepHoldoutSmoother.gizmo ================================================ Group { name DeepHoldoutSmoother help "DeepAntialias creates an antialiased Deep edge by adding adjacent slices of the object to the original Deep image. You control the number of samples to incress softness (click Update any time you change this value) and the spread of those samples. The opacity knob makes the samples more or less transparent. Depth offset slides the overall slice in z." tile_color 0x5fff addUserKnob {20 User l D_DeepHoldoutSmoother} addUserKnob {3 samples l "number of samples" t "Number of samples, the more, the softer it gets but longer to render. Click Update any time you change this value."} samples 6 addUserKnob {22 btUpdate l " Update " -STARTLINE T "n = nuke.thisNode()\n\nwith n:\n samples = n\['samples'].getValue()\n opacity = n\['opacity'].getValue()\n depth_spread = n\['depth_spread'].getValue()\n\n deepOpacityNode = nuke.toNode('DeepExpressionOpacity')\n deepMergeImageNode = nuke.toNode('DeepMergeImage')\n inputDeepNode = nuke.toNode('deep')\n deepExpressionHVNode = nuke.toNode('DeepExpressionHV')\n deepExpressionDiagNode = nuke.toNode('DeepExpressionDiag')\n deepHoldoutHVNode = nuke.toNode('DeepHoldoutDiag')\n deepHoldoutDiagNode = nuke.toNode('DeepHoldoutHV')\n deepMergeAllSamplesNode = nuke.toNode('DeepMergeAllSamples')\n\n for i in nuke.allNodes():\n if i.name().startswith('_Deep'):\n nuke.delete(i)\n\n deepMergeGlobalNode = nuke.nodes.DeepMerge()\n deepMergeGlobalNode\['name'].setValue('_DeepMergeGlobal')\n deepMergeGlobalNode\['operation'].setValue(0)\n deepExpressionHVNode.setInput(0, deepOpacityNode)\n deepExpressionDiagNode.setInput(0, deepOpacityNode)\n deepHoldoutHVNode.setInput(0, deepMergeGlobalNode)\n deepHoldoutDiagNode.setInput(0, deepMergeGlobalNode)\n deepHoldoutDiagNode.setInput(0, deepMergeGlobalNode)\n deepMergeAllSamplesNode.setInput(1, deepMergeGlobalNode)\n\n for i in range(int(samples)):\n index = i+1\n\n deepTransformNode = nuke.nodes.DeepTransform()\n deepTransformNode\['name'].setValue('_DeepTransform'+str(index))\n if index == 1:\n connectTo = inputDeepNode\n else:\n connectTo = nuke.toNode('_DeepTransform'+str(index-1))\n deepTransformNode.setInput(0, connectTo)\n deepTransformNode\['translate'].setExpression('-parent.depth_spread/parent.samples', 2)\n\n deepHoldoutNode = nuke.nodes.DeepMerge()\n deepHoldoutNode\['name'].setValue('_DeepHoldout'+str(index))\n deepHoldoutNode\['operation'].setValue(1)\n deepHoldoutNode.setInput(0, deepTransformNode)\n deepHoldoutNode.setInput(1, deepOpacityNode)\n\n deepMergeGlobalNode.setInput(i, deepHoldoutNode)"} addUserKnob {7 depth_spread l "depth spread" t "Spread of the samples. All samples will fit into this z distance."} depth_spread 1 addUserKnob {7 opacity t "Opacity of the samples."} opacity 0.5 addUserKnob {7 depth_offset l "depth offset" t "Use this to move the origin of the samples and get more or less of the original object." R 0 10} depth_offset -1 addUserKnob {26 "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "D_DeepHoldoutSmoother v1.0 - (c) 2013 - Denis Scolan/Jesús Diez-Pérez"} } Input { inputs 0 name deep xpos 527 ypos -2360 } set N154ed6a0 [stack 0] Input { inputs 0 name bbox xpos 1090 ypos -2379 number 1 } Dot { name Dot1 xpos 1124 ypos -2257 } Constant { inputs 0 color 1 format "2048 932 0 0 2048 932 1 wwd" name Constant7 xpos 1580 ypos -2392 } Reformat { format "2088 932 0 0 2088 932 1 wwd_Overscan" resize none pbb true name Reformat5 xpos 1580 ypos -2302 } CopyBBox { inputs 2 name CopyBBox1 xpos 1580 ypos -2261 } DeepFromImage { set_z true name DeepFromImage xpos 1756 ypos -2220 } DeepExpression { temp_name0 FirstOpacity chans1 deep rgba.alpha "1-\[value parent.opacity]" name DeepExpressionOpacity xpos 1756 ypos -2167 } set N154e6830 [stack 0] push $N154ed6a0 DeepTransform { translate {0 0 {-parent.depth_spread/parent.samples}} name _DeepTransform1 xpos 738 ypos -2130 } set N1ae0dd30 [stack 0] DeepTransform { translate {0 0 {-parent.depth_spread/parent.samples}} name _DeepTransform2 xpos 738 ypos -2104 } set N1ae16130 [stack 0] DeepTransform { translate {0 0 {-parent.depth_spread/parent.samples}} name _DeepTransform3 xpos 738 ypos -2078 } set N1ae1c180 [stack 0] DeepTransform { translate {0 0 {-parent.depth_spread/parent.samples}} name _DeepTransform4 xpos 738 ypos -2052 } set N1ae228b0 [stack 0] DeepTransform { translate {0 0 {-parent.depth_spread/parent.samples}} name _DeepTransform5 xpos 738 ypos -2026 } set N1ae29030 [stack 0] DeepTransform { translate {0 0 {-parent.depth_spread/parent.samples}} name _DeepTransform6 xpos 738 ypos -2000 } DeepMerge { inputs 2 operation holdout name _DeepHoldout6 xpos 1580 ypos -2000 } push $N154e6830 push $N1ae29030 DeepMerge { inputs 2 operation holdout name _DeepHoldout5 xpos 1580 ypos -2026 } push $N154e6830 push $N1ae228b0 DeepMerge { inputs 2 operation holdout name _DeepHoldout4 xpos 1580 ypos -2052 } push $N154e6830 push $N1ae1c180 DeepMerge { inputs 2 operation holdout name _DeepHoldout3 xpos 1580 ypos -2078 } push $N154e6830 push $N1ae16130 DeepMerge { inputs 2 operation holdout name _DeepHoldout2 xpos 1580 ypos -2104 } push $N154e6830 push $N1ae0dd30 DeepMerge { inputs 2 operation holdout name _DeepHoldout1 xpos 1580 ypos -2130 } DeepMerge { inputs 6 name _DeepMergeGlobal xpos 1861 ypos -1861 } set N154a72a0 [stack 0] push $N154e6830 DeepExpression { chans1 deep rgba.alpha 0.75 name DeepExpressionDiag xpos 2953 ypos -1955 } push $N154a72a0 DeepMerge { inputs 2 operation holdout name DeepHoldoutDiag xpos 2953 ypos -1720 } set N154a0240 [stack 0] DeepTransform { translate {1 -1 0} mask_channel -rgba.alpha name DeepTransform14 xpos 3080 ypos -1568 } push $N154a0240 DeepTransform { translate {1 1 0} mask_channel -rgba.alpha name DeepTransform1 xpos 2986 ypos -1567 } push $N154a0240 DeepTransform { translate {-1 -1 0} mask_channel -rgba.alpha name DeepTransform13 xpos 2891 ypos -1568 } push $N154a0240 DeepTransform { translate {-1 1 0} mask_channel -rgba.alpha name DeepTransform10 xpos 2790 ypos -1567 } DeepMerge { inputs 4 name DeepMergeDiag xpos 2943 ypos -1440 } push $N154e6830 DeepExpression { chans1 deep rgba.alpha 0.5 name DeepExpressionHV xpos 2367 ypos -1970 } push $N154a72a0 DeepMerge { inputs 2 operation holdout name DeepHoldoutHV xpos 2367 ypos -1730 } set N15459590 [stack 0] DeepTransform { translate {1 0 0} mask_channel -rgba.alpha name DeepTransform12 xpos 2500 ypos -1576 } push $N15459590 DeepTransform { translate {0 -1 0} mask_channel -rgba.alpha name DeepTransform15 xpos 2408 ypos -1575 } push $N15459590 DeepTransform { translate {0 1 0} mask_channel -rgba.alpha name DeepTransform9 xpos 2315 ypos -1574 } push $N15459590 DeepTransform { translate {-1 0 0} mask_channel -rgba.alpha name DeepTransform11 xpos 2224 ypos -1572 } DeepMerge { inputs 4 name DeepMergeHV xpos 2365 ypos -1434 } DeepMerge { inputs 2 name DeepMergeAll xpos 2642 ypos -1267 } DeepMerge { inputs 2 name DeepMergeAllSamples xpos 2642 ypos -1042 } DeepTransform { translate {0 0 {-parent.depth_offset}} name DeepTransform2 xpos 2642 ypos -899 } DeepMerge { inputs 2 name DeepMergeAll2 xpos 738 ypos -899 } Output { name Output1 xpos 738 ypos -381 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DeepKeyMix.gizmo ================================================ Group { inputs 2 name DeepKeyMix tile_color 0x59ff addUserKnob {20 User l DeepKeyMix} addUserKnob {26 ""} addUserKnob {41 matte_channel l matte T Controller.matte_channel} addUserKnob {41 Invert_Mask l invert T Controller.Invert_Mask} addUserKnob {26 ""} addUserKnob {26 text l "" -STARTLINE T " DeepKeyMix 1.00 © "} addUserKnob {22 Luc_Julien l "Luc Julien" -STARTLINE T "import os\nimport sys\n\ntry:\n import subprocess\n def _run(cmd, shell, wait):\n opener = subprocess.Popen(cmd, shell=shell)\n if wait:\n opener.wait()\n return opener.pid\nexcept ImportError:\n import popen2\n def _run(cmd, shell, wait):\n opener = popen2.Popen3(cmd)\n if wait:\n opener.wait()\n return opener.pid\n\ndef _open(url, wait=0):\n if sys.platform == \"darwin\":\n cmd = \[\"open\", url]\n elif hasattr(os, \"startfile\"):\n return os.startfile(url)\n elif \"KDE_FULL_SESSION\" in os.environ or \"KDE_MULTIHEAD\" in os.environ or \\\n \"GNOME_DESKTOP_SESSION_ID\" in os.environ or \"GNOME_KEYRING_SOCKET\" in os.environ:\n cmd = \[\"xdg-open\", url]\n else:\n raise OSError(\"Desktop not supported.\")\n\n return _run(cmd, 0, wait)\n\n_open('http://www.linkedin.com/in/lucjulien')"} } NoOp { inputs 0 name Controller xpos 728 ypos 164 addUserKnob {20 User} addUserKnob {4 matte_channel l matte M {alpha luma}} addUserKnob {6 Invert_Mask l invert +STARTLINE} } Input { inputs 0 name mask xpos 553 ypos -43 number 2 } set Ndc1eca0 [stack 0] Keyer { operation "max keyer" name Keyer1 xpos 499 ypos 93 } Shuffle { red alpha green alpha blue alpha name Shuffle4 xpos 499 ypos 127 } push $Ndc1eca0 Shuffle { red alpha green alpha blue alpha name Shuffle2 xpos 602 ypos 102 } Switch { inputs 2 which {{parent.Controller.matte_channel}} name Switch1 xpos 549 ypos 187 } Invert { channels alpha clamp true name Invert2 xpos 549 ypos 262 disable {{parent.Controller.Invert_Mask*-1+1}} } Dot { name Dot3 xpos 583 ypos 355 } set Ndea6440 [stack 0] Shuffle { red alpha black white out depth out2 alpha name Shuffle1 xpos 549 ypos 631 } set Ndeb8ed0 [stack 0] DeepFromImage { z 1 name DeepFromImage3 xpos 549 ypos 738 } Input { inputs 0 name B xpos 1104 ypos 130 } Dot { name Dot4 xpos 1138 ypos 172 } set Ndf4ad70 [stack 0] DeepMerge { inputs 2 operation holdout name DeepMerge2 xpos 1104 ypos 738 } push $Ndeb8ed0 Invert { channels depth clamp true name Invert1 xpos 644 ypos 626 } DeepFromImage { z 1 name DeepFromImage4 xpos 644 ypos 681 } Input { inputs 0 name A xpos 1197 ypos 131 number 1 } Dot { name Dot1 xpos 1231 ypos 219 } set Ndf12880 [stack 0] DeepMerge { inputs 2 operation holdout name DeepMerge3 xpos 1197 ypos 681 } DeepMerge { inputs 2 drop_hidden true name DeepMerge4 xpos 1197 ypos 792 } push $Ndea6440 Dot { name Dot2 xpos 782 ypos 355 } set Ndf4ea90 [stack 0] push $Ndf4ea90 Merge2 { inputs 2 operation xor name Merge2 xpos 748 ypos 408 } Shuffle { green red blue red alpha red name Shuffle3 xpos 748 ypos 432 } Grade { channels all whitepoint 0.13 black_clamp false name Grade2 xpos 748 ypos 456 } push $Ndf4ea90 push $Ndf12880 Dot { name Dot6 xpos 1008 ypos 219 } DeepToImage { name DeepToImage2 xpos 974 ypos 273 } push $Ndf4ad70 Dot { name Dot5 xpos 884 ypos 172 } DeepToImage { name DeepToImage1 xpos 850 ypos 277 } Keymix { inputs 3 channels rgba name Keymix2 xpos 909 ypos 352 } Merge2 { inputs 2 operation mask name Merge1 xpos 909 ypos 461 } DeepFromImage { premult true name DeepFromImage5 xpos 909 ypos 491 } DeepMerge { inputs 2 drop_hidden true name DeepMerge5 xpos 909 ypos 792 } Output { name Output1 xpos 909 ypos 860 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DeepMerge_Advanced.gizmo ================================================ Group { name DeepMergeAdvanced help "- Merges all channels from A and B in deep. - Fixes issue with DeepMerge's holdout operation which exists in Nuke 11." tile_color 0x60ff selected true addUserKnob {20 DeepMerge_Advanced} addUserKnob {26 ""} addUserKnob {4 operation M {combine holdout "" ""}} addUserKnob {26 ""} addUserKnob {7 blurAmt l Blur R 0 100} blurAmt 1 addUserKnob {26 ""} addUserKnob {4 output_data l "Output Data" M {Deep 2D ""}} addUserKnob {26 ""} addUserKnob {20 Info} addUserKnob {26 version_info l "" +STARTLINE T "\nCreated by Ben McEwan\nwww.benmcewan.com\n\nVersion 0.2.0\nLast Updated: September 10th, 2019\n"} addUserKnob {1 Scriplet_Info +DISABLED +INVISIBLE} Scriplet_Info central } Input { inputs 0 name A xpos 242 ypos -499 number 1 } DeepExpression { temp_name0 blur temp_expr0 "\[value blurAmt]/2" chans1 deep rgba.alpha "alpha * 0.999999" deep.back "deep.back + blur" name DeepExpression2 xpos 393 ypos -499 } set N4282660 [stack 0] Dot { name Dot1 label " " note_font "Arial Black" note_font_size 16 xpos 427 ypos -434 } Input { inputs 0 name B xpos 551 ypos -654 } DeepExpression { temp_name0 blur temp_expr0 "\[value blurAmt]/2" chans1 deep rgba.alpha "alpha * 0.999999" deep.back "deep.back + blur" name DeepExpression1 xpos 551 ypos -585 } set N5a8fac0 [stack 0] Dot { name Dot2 label " " note_font "Arial Black" note_font_size 16 xpos 788 ypos -581 } set N4ce1390 [stack 0] DeepHoldout2 { inputs 2 name DeepHoldout2 xpos 754 ypos -438 } push $N4ce1390 Dot { name Dot3 label " " note_font "Arial Black" note_font_size 16 xpos 895 ypos -532 } Dot { name Dot4 label " " note_font "Arial Black" note_font_size 16 xpos 895 ypos -395 } DeepRecolor { inputs 2 channels all targetInputAlpha true name DeepRecolor2 xpos 754 ypos -361 } push $N4282660 push $N5a8fac0 DeepMerge { inputs 2 drop_hidden true name DeepMerge2 xpos 551 ypos -499 } Switch { inputs 2 which {{operation}} name Switch1 xpos 551 ypos -356 } DeepToImage { name DeepToImage1 selected true xpos 551 ypos -279 disable {{!output_data}} } Output { name Output1 xpos 551 ypos -199 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DeepRecolorMatte.gizmo ================================================ Group { inputs 2 name DeepRecolorMatte help "this node creates a new single channel\n.red and injects it into the stream before a deep recolor.\n\nThis workflow is to create single channel mattes for your elements in your deep combine tree. which you can later pull out with a shuffle node after you have pre-rendered.\n\nThe benifit: you know what your elements look like deep combined, as a sanity check reference, and the pre-render itself has all the matte channels needed to recreate the deep render.\n\nWhen replacing your alpha, remember to unpremult(all), copy the holdout alpha, and premult(all)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == 'addPrefix':\n if n.knob('addPrefix').value() == 1:\n n.knob('prefix').setVisible(True)\n else:\n n.knob('prefix').setVisible(False)\n\nif k.name() == 'addPostfix':\n if n.knob('addPostfix').value() == 1:\n n.knob('postfix').setVisible(True)\n else:\n n.knob('postfix').setVisible(False)" tile_color 0x60ff note_font_color 0xffffffff selected true xpos 23 ypos -130 addUserKnob {20 DeepRecolorMatte} addUserKnob {26 text_1 l " " T " "} addUserKnob {41 channels T Remove41.channels} addUserKnob {22 grabTitle l "Grab Title" t "grabs title from either a stamp or a read node from the 'color' stream and fills in the 'new channel name' field" T "from stamps_config import defaultTitle\n\nn = nuke.thisNode()\nncn = n.knob('newChannelName')\n\niNode = nuke.thisNode()\n\ndef upstream(iNode):\n found = False\n name = ''\n while found == False:\n \n if iNode.input(0) != None:\n\n if iNode.input(0).Class() in \['Read']:\n found = True\n name = defaultTitle(iNode.input(0))\n \n \n elif iNode.input(0).Class() in \['NoOp']: \n \n try: \n found = True \n name = iNode.input(0)\['title'].value() \n \n except:\n iNode = iNode.input(0)\n \n \n else:\n iNode = iNode.input(0)\n else:\n nuke.message('please connect a read node or a stamp')\n found = True\n \n return name\n \nname = upstream(iNode)\nncn.setValue(name)" +STARTLINE} addUserKnob {22 injectNewChannel l "Inject New Channel" t "Copies the alpha from the color stream into a new channel .red into the stream to that it exists in your deep tree to be used as a holdout matte when pulled out later." -STARTLINE T "n = nuke.thisNode()\nncn = n.knob('newChannelName').getValue()\ncd = n.knob('channelDisplay')\n\nif n.knob('addPrefix').value() == 1 and n.knob('prefix').getValue() != '':\n prefix = n.knob('prefix').value() + '_'\nelse:\n prefix = ''\n \nif n.knob('addPostfix').value() == 1 and n.knob('postfix').getValue() != '':\n postfix = '_' + n.knob('postfix').value()\nelse:\n postfix = ''\n\nchannelName = prefix+ncn+postfix\n\nwith n:\n nodeName = n.name()\n copy = nuke.toNode('CopyInjector')\n if channelName != '':\n channelName = ''.join(channelName.split('.'))\n channelName = '_'.join(channelName.split(' '))\n fullChannelName = channelName + '.red'\n nuke.Layer('\{\}'.format(channelName), \[fullChannelName])\n copy.knob('to0').setValue(fullChannelName)\n copy.knob('tile_color').setValue(437918463)\n copy.knob('note_font_color').setValue(4280090879)\n \ncd.setValue(fullChannelName)\ncd.setVisible(True)\nn.knob('note_font_color').setValue(4280090879)\nn.knob('label').setValue('--> \[value channelDisplay]')"} addUserKnob {22 reset l "Reset" t "resets the node to default values" -STARTLINE T "n = nuke.thisNode()\nncn = n.knob('newChannelName')\ncd = n.knob('channelDisplay')\n\nwith n:\n copy = nuke.toNode('CopyInjector')\n copy.knob('to0').setValue('rgba.alpha')\n copy.knob('tile_color').setValue(2654757632)\n copy.knob('note_font_color').setValue(235802367)\ncd.setValue('')\ncd.setVisible(False)\nncn.setValue('')\nn.knob('note_font_color').setValue(4294967295)\nn.knob('label').setValue('')\nn.knob('addPrefix').setValue(0)\nn.knob('addPostfix').setValue(0)\nn.knob('prefix').setValue('ID')\nn.knob('postfix').setValue('')"} addUserKnob {1 newChannelName l "New Channel Name"} addUserKnob {41 bbox l "set bbox to " T DeepRecolor22.bbox} addUserKnob {41 targetInputAlpha l "target input alpha" -STARTLINE T DeepRecolor22.targetInputAlpha} addUserKnob {6 addPrefix l "Add Prefix" +STARTLINE} addUserKnob {6 addPostfix l "Add Postfix" -STARTLINE} addUserKnob {1 channelDisplay l ---> +HIDDEN +INVISIBLE} addUserKnob {1 prefix +HIDDEN} prefix ID addUserKnob {1 postfix +HIDDEN} addUserKnob {26 text l " " T " "} addUserKnob {26 info l " " t "DeepRecolorMatte v3.1\nTony Lyons" T "DeepRecolorMatte v3.1 | Tony Lyons 2020"} } Input { inputs 0 name Inputcolor xpos 378 ypos 255 } AddChannels { channels rgba name AddChannels1 xpos 378 ypos 304 } Remove { operation keep channels rgba name Remove41 xpos 378 ypos 345 } set N481a6b00 [stack 0] push $N481a6b00 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name CopyInjector tile_color 0x9e3c6300 note_font_color 0xe0e0eff xpos 378 ypos 371 } set N481a6400 [stack 0] push $N481a6400 Input { inputs 0 name Inputdeep xpos 115 ypos 456 number 1 } DeepRecolor { inputs 2 name DeepRecolor1 xpos 250 ypos 456 } DeepRecolor { inputs 2 channels all bbox intersection name DeepRecolor22 selected true xpos 378 ypos 450 } Output { name Output1 xpos 378 ypos 641 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DeepSampleCount.gizmo ================================================ Group { name DeepSampleCount onCreate "\nthisGRP = nuke.thisGroup()\nfor knob in thisGRP.knobs() :\n if knob\[0:6] == 'sCount' :\n if int(knob.split('sCount')\[1]) %3 == 1 :\n thisGRP\[knob].setFlag(0x0000000000001000)\n" tile_color 0x2866ff label "2D image Output" addUserKnob {20 tab_general l General} addUserKnob {41 max_count l "max count" T menu1.max_count} addUserKnob {6 show_colormap l "show colormap" +STARTLINE} show_colormap true addUserKnob {20 grp_count_colormap l "samples count colormap" n 1} grp_count_colormap 0 addUserKnob {40 sCount1 l "1 sample"} sCount1 0x7f2626ff addUserKnob {40 sCount2 l "2 samples" -STARTLINE} sCount2 0x7f4126ff addUserKnob {40 sCount3 l "3 samples" -STARTLINE} sCount3 0x7f5b26ff addUserKnob {40 sCount4 l "4 samples"} sCount4 0x7f7626ff addUserKnob {40 sCount5 l "5 samples" -STARTLINE} sCount5 0x6d7f26ff addUserKnob {40 sCount6 l "6 samples" -STARTLINE} sCount6 0x527f26ff addUserKnob {40 sCount7 l "7 samples"} sCount7 0x377f26ff addUserKnob {40 sCount8 l "8 samples" -STARTLINE} sCount8 0x267f2eff addUserKnob {40 sCount9 l "9 samples" -STARTLINE} sCount9 0x267f49ff addUserKnob {40 sCount10 l "10 samples"} sCount10 0x267f64ff addUserKnob {40 sCount11 l "11 samples" -STARTLINE} sCount11 0x267f7fff addUserKnob {40 sCount12 l "12 samples" -STARTLINE} sCount12 0x26647fff addUserKnob {40 sCount13 l "13 samples"} sCount13 0x26497fff addUserKnob {40 sCount14 l "14 samples" -STARTLINE} sCount14 0x262e7fff addUserKnob {40 sCount15 l "15 samples" -STARTLINE} sCount15 0x37267fff addUserKnob {40 sCount16 l "16 samples"} sCount16 0x52267fff addUserKnob {40 sCount17 l "17 samples" -STARTLINE} sCount17 0x6d267fff addUserKnob {40 sCount18 l "18 samples" -STARTLINE} sCount18 0x7f2676ff addUserKnob {40 sCount19 l "19 samples"} sCount19 0x7f265bff addUserKnob {40 sCount20 l "20 samples" -STARTLINE} sCount20 0x7f2640ff addUserKnob {40 sCount21 l "21 samples" -STARTLINE +HIDDEN} sCount21 0xff0000ff addUserKnob {40 sCount22 l "22 samples" +HIDDEN} sCount22 0xff4c00ff addUserKnob {40 sCount23 l "23 samples" -STARTLINE +HIDDEN} sCount23 0xff9900ff addUserKnob {40 sCount24 l "24 samples" -STARTLINE +HIDDEN} sCount24 0xffe500ff addUserKnob {40 sCount25 l "25 samples" +HIDDEN} sCount25 0xcbff00ff addUserKnob {40 sCount26 l "26 samples" -STARTLINE +HIDDEN} sCount26 0x7fff00ff addUserKnob {40 sCount27 l "27 samples" -STARTLINE +HIDDEN} sCount27 0x32ff00ff addUserKnob {40 sCount28 l "28 samples" +HIDDEN} sCount28 0xff19ff addUserKnob {40 sCount29 l "29 samples" -STARTLINE +HIDDEN} sCount29 0xff66ff addUserKnob {40 sCount30 l "30 samples" -STARTLINE +HIDDEN} sCount30 0xffb2ff addUserKnob {40 sCount31 l "31 samples" +HIDDEN} sCount31 0xffffff addUserKnob {40 sCount32 l "32 samples" -STARTLINE +HIDDEN} sCount32 0xb2ffff addUserKnob {40 sCount33 l "33 samples" -STARTLINE +HIDDEN} sCount33 0x65ffff addUserKnob {40 sCount34 l "34 samples" +HIDDEN} sCount34 0x19ffff addUserKnob {40 sCount35 l "35 samples" -STARTLINE +HIDDEN} sCount35 0x3200ffff addUserKnob {40 sCount36 l "36 samples" -STARTLINE +HIDDEN} sCount36 0x7f00ffff addUserKnob {40 sCount37 l "37 samples" +HIDDEN} sCount37 0xcc00ffff addUserKnob {40 sCount38 l "38 samples" -STARTLINE +HIDDEN} sCount38 0xff00e5ff addUserKnob {40 sCount39 l "39 samples" -STARTLINE +HIDDEN} sCount39 0xff0099ff addUserKnob {40 sCount40 l "40 samples" +HIDDEN} sCount40 0xff004cff addUserKnob {40 sCount41 l "41 samples" -STARTLINE +HIDDEN} sCount41 0x191919ff addUserKnob {40 sCount42 l "42 samples" -STARTLINE +HIDDEN} sCount42 0x191919ff addUserKnob {40 sCount43 l "43 samples" +HIDDEN} sCount43 0x333333ff addUserKnob {40 sCount44 l "44 samples" -STARTLINE +HIDDEN} sCount44 0x4c4c4cff addUserKnob {40 sCount45 l "45 samples" -STARTLINE +HIDDEN} sCount45 0x666666ff addUserKnob {40 sCount46 l "46 samples" +HIDDEN} sCount46 0x7f7f7fff addUserKnob {40 sCount47 l "47 samples" -STARTLINE +HIDDEN} sCount47 0x999999ff addUserKnob {40 sCount48 l "48 + samples" -STARTLINE +HIDDEN} sCount48 0xb2b2b2ff addUserKnob {20 endGroup n -1} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "don't touch" note_font_size 42 xpos -640 ypos -438 bdwidth 223 bdheight 210 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0xaaaaaa00 note_font_size 42 xpos -133 ypos 18 bdwidth 574 bdheight 4283 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x666666ff label bin note_font_size 42 xpos -638 ypos -189 bdwidth 218 bdheight 227 } BackdropNode { inputs 0 name BackdropNode4 label "Version\n1.3\n\nDate Modified\n2019-09-14\n\nChangelog\n1.3\n- clear UI\n- '48 samples' change label to '48+ samples'\n- set default 'max count' to 20\n\n1.2\n- fix algorithm, break the 24 samples limit.\n The tool support 48 samples now.\n\n1.1\n- change max count to pulldown menu\n- set max limited to 23 samples, if more than 23 samples will assigned '24+ samples colormap'\n- no more remove knobs, the color setting will be keep\n\n1.0\n- using math + TCL to create deepSamplesCount colormap\n\nDeveloped by\nMark Joey Tang\nhttps://facebook.com/MJTLab" xpos -1148 ypos -437 bdwidth 474 bdheight 475 } Input { inputs 0 name deep xpos 116 ypos -508 } Dot { name Dot2 xpos 150 ypos -428 } set N7984e730 [stack 0] Dot { name Dot3 xpos 915 ypos -428 } DeepToImage { name DeepToImage2 xpos 881 ypos 4557 } push $N7984e730 DeepExpression { chans0 alpha chans1 none rgba.alpha "\[value globalm.base]" name DeepExpression1 xpos 116 ypos -330 } DeepToImage { name DeepToImage1 xpos 116 ypos -250 } add_layer {deepSample deepSample.count} AddChannels { channels deepSample name AddChannels2 xpos 116 ypos -170 } Dot { name start_count tile_color 0xff7f00ff xpos 150 ypos 53 addUserKnob {20 User} addUserKnob {7 sum} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression1 addUserKnob {20 User} addUserKnob {78 id n 1} id 1 addUserKnob {78 sum n 1} sum {{globalm.base}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount1] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount1] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount1] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression2 addUserKnob {20 User} addUserKnob {78 id n 1} id 2 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount2] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount2] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount2] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression3 addUserKnob {20 User} addUserKnob {78 id n 1} id 3 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount3] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount3] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount3] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression4 addUserKnob {20 User} addUserKnob {78 id n 1} id 4 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount4] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount4] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount4] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression5 addUserKnob {20 User} addUserKnob {78 id n 1} id 5 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount5] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount5] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount5] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression6 addUserKnob {20 User} addUserKnob {78 id n 1} id 6 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount6] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount6] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount6] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression7 addUserKnob {20 User} addUserKnob {78 id n 1} id 7 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount7] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount7] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount7] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression8 addUserKnob {20 User} addUserKnob {78 id n 1} id 8 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount8] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount8] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount8] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression9 addUserKnob {20 User} addUserKnob {78 id n 1} id 9 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount9] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount9] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount9] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression10 addUserKnob {20 User} addUserKnob {78 id n 1} id 10 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount10] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount10] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount10] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression11 addUserKnob {20 User} addUserKnob {78 id n 1} id 11 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount11] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount11] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount11] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression12 addUserKnob {20 User} addUserKnob {78 id n 1} id 12 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount12] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount12] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount12] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression13 addUserKnob {20 User} addUserKnob {78 id n 1} id 13 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount13] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount13] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount13] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression14 addUserKnob {20 User} addUserKnob {78 id n 1} id 14 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount14] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount14] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount14] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression15 addUserKnob {20 User} addUserKnob {78 id n 1} id 15 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount15] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount15] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount15] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression16 addUserKnob {20 User} addUserKnob {78 id n 1} id 16 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount16] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount16] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount16] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression17 addUserKnob {20 User} addUserKnob {78 id n 1} id 17 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount17] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount17] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount17] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression18 addUserKnob {20 User} addUserKnob {78 id n 1} id 18 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount18] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount18] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount18] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression19 addUserKnob {20 User} addUserKnob {78 id n 1} id 19 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount19] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount19] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount19] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Expression { channel3 deepSample expr3 "\[value globalm.eCount]" name Expression20 addUserKnob {20 User} addUserKnob {78 id n 1} id 20 addUserKnob {78 sum n 1} sum {{"input.sum + globalm.base - input.sum * globalm.base"}} addUserKnob {18 assignColor} assignColor {{"\[expr 0x\[string range \[value parent.sCount20] 2 3]] / 255"} {"\[expr 0x\[string range \[value parent.sCount20] 4 5]] / 255"} {"\[expr 0x\[string range \[value parent.sCount20] 6 7]] / 255"}} addUserKnob {6 assignColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Dot { name end_count tile_color 0xff7f00ff xpos 148 ypos 4113 } ShuffleCopy { inputs 2 red red green green blue blue name ShuffleCopy2 xpos 114 ypos 4557 } Dot { name Dot1 xpos 148 ypos 4833 } set N798bc250 [stack 0] Dot { name start_colormap tile_color 0xffffff xpos 349 ypos 4833 } Expression { expr0 "deepSample.count == 1 ? Expression1.assignColor.r : deepSample.count == 2 ? Expression2.assignColor.r : deepSample.count == 3 ? Expression3.assignColor.r : deepSample.count == 4 ? Expression4.assignColor.r : deepSample.count == 5 ? Expression5.assignColor.r : deepSample.count == 6 ? Expression6.assignColor.r : deepSample.count == 7 ? Expression7.assignColor.r : deepSample.count == 8 ? Expression8.assignColor.r : deepSample.count == 9 ? Expression9.assignColor.r : deepSample.count == 10 ? Expression10.assignColor.r : deepSample.count == 11 ? Expression11.assignColor.r : deepSample.count == 12 ? Expression12.assignColor.r : deepSample.count == 13 ? Expression13.assignColor.r : deepSample.count == 14 ? Expression14.assignColor.r : deepSample.count == 15 ? Expression15.assignColor.r : deepSample.count == 16 ? Expression16.assignColor.r : deepSample.count == 17 ? Expression17.assignColor.r : deepSample.count == 18 ? Expression18.assignColor.r : deepSample.count == 19 ? Expression19.assignColor.r : deepSample.count == 20 ? Expression20.assignColor.r : 0" expr1 "deepSample.count == 1 ? Expression1.assignColor.g : deepSample.count == 2 ? Expression2.assignColor.g : deepSample.count == 3 ? Expression3.assignColor.g : deepSample.count == 4 ? Expression4.assignColor.g : deepSample.count == 5 ? Expression5.assignColor.g : deepSample.count == 6 ? Expression6.assignColor.g : deepSample.count == 7 ? Expression7.assignColor.g : deepSample.count == 8 ? Expression8.assignColor.g : deepSample.count == 9 ? Expression9.assignColor.g : deepSample.count == 10 ? Expression10.assignColor.g : deepSample.count == 11 ? Expression11.assignColor.g : deepSample.count == 12 ? Expression12.assignColor.g : deepSample.count == 13 ? Expression13.assignColor.g : deepSample.count == 14 ? Expression14.assignColor.g : deepSample.count == 15 ? Expression15.assignColor.g : deepSample.count == 16 ? Expression16.assignColor.g : deepSample.count == 17 ? Expression17.assignColor.g : deepSample.count == 18 ? Expression18.assignColor.g : deepSample.count == 19 ? Expression19.assignColor.g : deepSample.count == 20 ? Expression20.assignColor.g : 0" expr2 "deepSample.count == 1 ? Expression1.assignColor.b : deepSample.count == 2 ? Expression2.assignColor.b : deepSample.count == 3 ? Expression3.assignColor.b : deepSample.count == 4 ? Expression4.assignColor.b : deepSample.count == 5 ? Expression5.assignColor.b : deepSample.count == 6 ? Expression6.assignColor.b : deepSample.count == 7 ? Expression7.assignColor.b : deepSample.count == 8 ? Expression8.assignColor.b : deepSample.count == 9 ? Expression9.assignColor.b : deepSample.count == 10 ? Expression10.assignColor.b : deepSample.count == 11 ? Expression11.assignColor.b : deepSample.count == 12 ? Expression12.assignColor.b : deepSample.count == 13 ? Expression13.assignColor.b : deepSample.count == 14 ? Expression14.assignColor.b : deepSample.count == 15 ? Expression15.assignColor.b : deepSample.count == 16 ? Expression16.assignColor.b : deepSample.count == 17 ? Expression17.assignColor.b : deepSample.count == 18 ? Expression18.assignColor.b : deepSample.count == 19 ? Expression19.assignColor.b : deepSample.count == 20 ? Expression20.assignColor.b : 0" name Expression21 } Dot { name end_colormap tile_color 0xffffff xpos 349 ypos 5136 } push $N798bc250 Switch { inputs 2 which {{parent.show_colormap}} name Switch1 xpos 114 ypos 5300 } Output { name Output1 xpos 114 ypos 5405 } NoOp { inputs 0 name menu1 knobChanged "\nthisGRP = nuke.thisGroup()\nstCount = nuke.toNode('start_count')\nenCount = nuke.toNode('end_count')\nstColormap = nuke.toNode('start_colormap')\nenColormap = nuke.toNode('end_colormap')\n\nfor node in nuke.allNodes() :\n if node.Class() == 'Expression' :\n if not node.name()\[0:7] == 'filter_' :\n nuke.delete( node )\n\nfor knob in thisGRP.knobs() :\n if knob\[0:6] == 'sCount' :\n thisGRP\[knob].setVisible(False)\n try :\n if knob.split('_')\[1] == 'panelDropped' :\n thisGRP.removeKnob( thisGRP\[knob] )\n except :\n pass\n\nlastNode = stCount\ncolormapString = \[]\n\nfor i in range( int( thisGRP\['max_count'].value() ) ) :\n n = nuke.nodes.Expression()\n idKnob = nuke.Array_Knob( 'id', 'id' )\n sumKnob = nuke.Array_Knob( 'sum', 'sum' )\n colorKnob = nuke.Color_Knob( 'assignColor', 'assignColor')\n n.addKnob( idKnob )\n n.addKnob( sumKnob )\n n.addKnob( colorKnob )\n n\['id'].setValue( i+1 )\n if i == 0 :\n n\['sum'].setExpression( 'globalm.base' )\n else :\n n\['sum'].setExpression( 'input.sum + globalm.base - input.sum * globalm.base' )\n n\['assignColor'].setExpression( '\[expr 0x\[string range \[value parent.sCount\{0\}] 2 3]] / 255'.format(i+1) , 0 )\n n\['assignColor'].setExpression( '\[expr 0x\[string range \[value parent.sCount\{0\}] 4 5]] / 255'.format(i+1) , 1 )\n n\['assignColor'].setExpression( '\[expr 0x\[string range \[value parent.sCount\{0\}] 6 7]] / 255'.format(i+1) , 2 )\n n\['channel3'].setValue( 'deepSample.count' )\n if i < 47 :\n n\['expr3'].setValue( '\[value globalm.eCount]' )\n else :\n n\['expr3'].setValue( '\[value globalm.overCount]' )\n\n n.setInput( 0, lastNode )\n lastNode = n\n\n thisGRP\['sCount' + str( i+1 ) ].setVisible(True)\n\n colormapString.append( 'deepSample.count == \{0\} ? \{1\}.assignColor.'.format(i+1, n.name()) )\n\nenCount.setInput( 0, lastNode )\n\nn = nuke.nodes.Expression()\nn\['channel0'].setValue( 'rgb.red' )\nn\['channel1'].setValue( 'rgb.green' )\nn\['channel2'].setValue( 'rgb.blue' )\nn\['expr0'].setValue( 'r : '.join( colormapString ) + 'r : 0' )\nn\['expr1'].setValue( 'g : '.join( colormapString ) + 'g : 0' )\nn\['expr2'].setValue( 'b : '.join( colormapString ) + 'b : 0' )\nn.setInput(0, stColormap)\nenColormap.setInput(0, n)\n" xpos -568 ypos -302 addUserKnob {20 User} addUserKnob {4 max_count l "max count" M {5 10 15 20 25 30 35 40 45 48 "" "" "" "" "" "" "" ""}} max_count 20 } NoOp { inputs 0 name globalm xpos -566 ypos -65 addUserKnob {20 User} addUserKnob {7 base} base 0.1 addUserKnob {7 bias} bias 1e-07 addUserKnob {1 channel} channel alpha addUserKnob {1 eCount} eCount "\[value globalm.channel] > sum - \[value globalm.bias] && \[value globalm.channel] < sum + \[value globalm.bias] ? id : deepSample.count" addUserKnob {1 overCount} overCount "\[value globalm.channel] > sum - \[value globalm.bias] ? id : deepSample.count" } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DeepSer.gizmo ================================================ Group { name DeepSer onCreate "\nnver = nuke.NUKE_VERSION_MAJOR\nthisGRP = nuke.thisGroup()\nif nver >= 11 :\n\t thisGRP\['nuke_version'].setValue(1)\nelse :\n\t thisGRP\['nuke_version'].setValue(0)\n" tile_color 0x2866ff label "Deep Output" addUserKnob {20 tab_general l General} addUserKnob {4 nuke_version l INVISIBLE +INVISIBLE M {10 11 "" "" "" "" "" "" ""}} nuke_version 11 addUserKnob {6 remove_invalid l "remove samples with nan/inf value (Required Nuke 11+)" +STARTLINE} addUserKnob {41 remove_alpha_filter l "remove samples when alpha under :" T menu02.remove_alpha_filter} addUserKnob {7 alpha_value l "" -STARTLINE +DISABLED} addUserKnob {26 spacer_2 l "" +STARTLINE T
} addUserKnob {20 FSL_TabBegin l "" +STARTLINE n -2} addUserKnob {20 tab_force_sample_layers l "force sample layers"} addUserKnob {41 selection l "" +STARTLINE T menu01.selection} addUserKnob {26 spacer_3 l "" +STARTLINE T
} addUserKnob {7 filter +HIDDEN R 0.0001 1} filter 1 addUserKnob {22 remove_10_layers l -10 +HIDDEN T "thisGRP = nuke.thisGroup()\ncurrentCount = thisGRP\['keep_layers'].value()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\nstep = 10\n\nif not currentCount == 'not set' :\n\tif int(currentCount) - step < 1 :\n\t\tprocCount = 'not set'\n\t\treset()\n\t\tthisGRP\['keep_layers'].setValue( str(procCount) )\n\telse :\n\t\tprocCount = int( currentCount ) - step\n\t\treset()\n\t\tgenlayer( procCount )\n\t\tthisGRP\['keep_layers'].setValue( str(procCount) )" +STARTLINE} addUserKnob {22 remove_1_layer l - -STARTLINE +HIDDEN T "thisGRP = nuke.thisGroup()\ncurrentCount = thisGRP\['keep_layers'].value()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\nstep = 1\n\nif not currentCount == 'not set' :\n\tif int(currentCount) - step < 1 :\n\t\tprocCount = 'not set'\n\t\treset()\n\t\tthisGRP\['keep_layers'].setValue( str(procCount) )\n\telse :\n\t\tprocCount = int( currentCount ) - step\n\t\treset()\n\t\tgenlayer( procCount )\n\t\tthisGRP\['keep_layers'].setValue( str(procCount) )"} addUserKnob {26 spacer l "" -STARTLINE +HIDDEN T " \t"} addUserKnob {26 keep_layers l "" -STARTLINE +HIDDEN T "not set"} addUserKnob {26 spacer_1 l "" -STARTLINE +HIDDEN T " \t"} addUserKnob {22 add_1_layer l + -STARTLINE +HIDDEN T "thisGRP = nuke.thisGroup()\ncurrentCount = thisGRP\['keep_layers'].value()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\nstep = 1\n\nif currentCount == 'not set' :\n\tprocCount = step\nelse :\n\tprocCount = int( currentCount ) + step\n\nreset()\ngenlayer( procCount )\n\nthisGRP\['keep_layers'].setValue( str(procCount) )"} addUserKnob {22 add_10_layers l +10 -STARTLINE +HIDDEN T "thisGRP = nuke.thisGroup()\ncurrentCount = thisGRP\['keep_layers'].value()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\nstep = 10\n\nif currentCount == 'not set' :\n\tprocCount = step\nelse :\n\tprocCount = int( currentCount ) + step\n\nreset()\ngenlayer( procCount )\n\nthisGRP\['keep_layers'].setValue( str(procCount) )"} addUserKnob {6 drop_hidden l "drop hidden samples" +HIDDEN +STARTLINE} addUserKnob {20 FSL_TabEnd l "" +STARTLINE n -3} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2019-09-21} addUserKnob {26 l_CHANGELOG l Changelog T "1.0\n- create various setup to\n manage deep sample"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "Dont touch" note_font_size 42 xpos 211 ypos -649 bdwidth 250 bdheight 429 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x7f7f7fff label bin note_font_size 42 xpos 216 ypos -172 bdwidth 243 bdheight 902 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x5669ff label "start loop" note_font_size 24 xpos 1382 ypos 484 bdwidth 382 bdheight 616 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x5669ff label "end loop" note_font_size 24 xpos 2489 ypos 3530 bdwidth 429 bdheight 620 } Input { inputs 0 name deep xpos 1062 ypos -579 } Dot { name Dot3 xpos 1096 ypos -413 } set Ndda96d20 [stack 0] Dot { name Dot6 xpos 1270 ypos -413 } set Nddd16350 [stack 0] DeepExpression { chans0 none chans1 deep deep.front "isnan(r) || isnan(g) || isnan(b) || isnan(a) || isnan(deep.front) || isnan(deep.back) || isinf(r) || isinf(g) || isinf(b) || isinf(a) || isinf(deep.front) || isinf(deep.back) ? -1 : deep.front" deep.back "isnan(r) || isnan(g) || isnan(b) || isnan(a) || isnan(deep.front) || isnan(deep.back) || isinf(r) || isinf(g) || isinf(b) || isinf(a) || isinf(deep.front) || isinf(deep.back) ? -1 : deep.back" name DeepExpression4 xpos 1349 ypos -365 } push $Nddd16350 Switch { inputs 2 which {{parent.nuke_version}} name Switch4 label "nuke version switch" xpos 1236 ypos -302 } push $Ndda96d20 Switch { inputs 2 which {{parent.remove_invalid}} name Switch3 xpos 1062 ypos -296 } Dot { name Dot1 xpos 1096 ypos -129 } set Nddd25dd0 [stack 0] Dot { name Dot4 xpos 1264 ypos -129 } set Nddd28290 [stack 0] DeepExpression { temp_name0 avalue temp_expr0 "\[value parent.alpha_value]" chans0 deep chans1 none deep.front "alpha <= avalue ? -1 : deep.front" deep.back "alpha <= avalue ? -1 : deep.back" name DeepExpression2 xpos 1299 ypos -67 } push $Nddd28290 DeepExpression { temp_name0 avalue temp_expr0 "\[value parent.alpha_value]" chans0 deep chans1 none deep.front "alpha <= avalue ? deep.front : -1" deep.back "alpha <= avalue ? deep.back : -1" name DeepExpression5 xpos 1154 ypos -64 } Switch { inputs 2 which {{parent.nuke_version}} name Switch2 label "nuke version switch" xpos 1231 ypos 6 } push $Nddd25dd0 Switch { inputs 2 which {{parent.remove_alpha_filter}} name Switch1 xpos 1062 ypos 12 } DeepCrop { use_znear false zfar 0 outside_zrange true bbox {204.6000061 107.8000031 818.4000244 431.2000122} use_bbox false name DeepCrop2 xpos 1062 ypos 158 } Dot { name Dot10 xpos 1096 ypos 346 } set Ndda9bd10 [stack 0] Dot { name Dot11 xpos 1658 ypos 346 } Dot { name Dot2 xpos 1658 ypos 661 } set Nddaa0550 [stack 0] DeepToImage { name DeepToImage1 xpos 1442 ypos 658 } add_layer {deepRawColor deepRawColor.red deepRawColor.green deepRawColor.blue deepRawColor.alpha} AddChannels { channels deepRawColor name AddChannels1 xpos 1442 ypos 738 } push $Nddaa0550 DeepRecolor { inputs 2 channels {{{parent.AddChannels1.channels}}} name DeepRecolor1 xpos 1624 ypos 738 } DeepExpression { chans0 deepRawColor chans1 none deepRawColor.red red deepRawColor.green green deepRawColor.blue blue deepRawColor.alpha alpha name DeepExpression8 label "store original color" xpos 1624 ypos 851 } Dot { name Dot8 xpos 1658 ypos 1230 } set Nd5fad910 [stack 0] Dot { name Dot9 xpos 2771 ypos 1230 } DeepExpression { chans0 alpha chans1 none rgba.alpha 1 name DeepExpression3 label "store original color" xpos 2737 ypos 1329 } Dot { name start_loop tile_color 0xff9900ff xpos 2771 ypos 1417 } DeepExpression { chans1 deep rgba.red deepRawColor.red rgba.green deepRawColor.green rgba.blue deepRawColor.blue rgba.alpha deepRawColor.alpha name DSM_reset xpos 2737 ypos 1491 } DeepMerge { drop_hidden {{parent.drop_hidden}} name final_merge xpos 2737 ypos 3869 } push $Nd5fad910 DeepExpression { chans0 {rgba.red -rgba.green -rgba.blue rgba.alpha} chans1 none rgba.red "alpha > \[value store.achk] || alpha == \[value store.achk] ? 1 : 0" rgba.alpha 1 name DeepExpression1 xpos 1408 ypos 1227 } DeepToImage { name DeepToImage3 xpos 1408 ypos 1307 } Shuffle { green black blue black alpha white name Shuffle1 xpos 1408 ypos 1387 } push $Nd5fad910 DeepRecolor { inputs 2 name DeepRecolor2 xpos 1624 ypos 1387 } Dot { name Dot12 xpos 1658 ypos 1443 } set Nd5fd9740 [stack 0] Dot { name Dot13 xpos 1832 ypos 1443 } DeepExpression { chans1 deep deep.front "red > 1 - \[value parent.filter] + \[value store.bias] ? -1 : deep.front" deep.back "red > 1 - \[value parent.filter] + \[value store.bias] ? -1 : deep.back" name DeepExpression9 xpos 1798 ypos 1517 } DeepCrop { use_znear false zfar 0 outside_zrange true bbox {204.6000061 107.8000031 818.4000244 431.2000122} use_bbox false name DeepCrop3 xpos 1798 ypos 1597 } DeepExpression { chans1 none rgba.red deepRawColor.red rgba.green deepRawColor.green rgba.blue deepRawColor.blue rgba.alpha deepRawColor.alpha name DeepExpression10 xpos 1798 ypos 1677 } Dot { name Dot14 xpos 1832 ypos 2080 } push $Nd5fd9740 DeepExpression { chans0 deep chans1 none deep.front "red > \[value parent.filter] - \[value store.bias] ? deep.front : -1" deep.back "red > \[value parent.filter] - \[value store.bias] ? deep.back : -1" name DeepExpression6 selected true xpos 1624 ypos 1517 } DeepCrop { use_znear false zfar 0 outside_zrange true bbox {204.6000061 107.8000031 818.4000244 431.2000122} use_bbox false name DeepCrop1 xpos 1624 ypos 1597 } DeepToImage { name DeepToImage4 xpos 1624 ypos 1672 } Shuffle { in deep green black blue black alpha black out rgb name Shuffle2 xpos 1624 ypos 1752 } DeepFromImage { name DeepFromImage1 xpos 1624 ypos 1832 } DeepExpression { chans0 none chans1 deep deep.front red deep.back red name DeepExpression11 xpos 1624 ypos 1892 } DeepExpression { chans1 none rgba.red deepRawColor.red rgba.green deepRawColor.green rgba.blue deepRawColor.blue rgba.alpha deepRawColor.alpha name DeepExpression7 xpos 1624 ypos 1960 } DeepMerge { inputs 2 name DeepMerge2 xpos 1624 ypos 2077 } Dot { name Dot5 xpos 1658 ypos 3920 } push $Ndda9bd10 Switch { inputs 3 which {{parent.selection}} name Switch5 xpos 1062 ypos 4551 } Output { name Output1 xpos 1062 ypos 4725 } NoOp { inputs 0 name menu02 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['remove_alpha_filter'].getValue() == 1 :\n\t thisGRP\['alpha_value'].setEnabled(True)\nelse :\n\t thisGRP\['alpha_value'].setEnabled(False)\n" xpos 295 ypos -445 addUserKnob {20 User} addUserKnob {6 remove_alpha_filter l "remove samples when alpha under :" +STARTLINE} } NoOp { inputs 0 name menu01 knobChanged "\nthisGRP = nuke.thisGroup()\nadvknobs = \['remove_10_layers','remove_1_layer','spacer','keep_layers','spacer_1','add_1_layer','add_10_layers','drop_hidden']\nif thisGRP\['selection'].getValue() == 0 :\n thisGRP\['filter'].setVisible(False)\n for knob in advknobs :\n thisGRP\[knob].setVisible(False)\nelif thisGRP\['selection'].getValue() == 1 :\n thisGRP\['filter'].setVisible(True)\n for knob in advknobs :\n thisGRP\[knob].setVisible(False)\nelse :\n thisGRP\['filter'].setVisible(False)\n for knob in advknobs :\n thisGRP\[knob].setVisible(True)\n" xpos 295 ypos -539 addUserKnob {20 User} addUserKnob {83 selection l "" +STARTLINE M {none "balance (quick)" "advance (slow)"}} } NoOp { inputs 0 name store xpos 295 ypos -81 addUserKnob {20 User} addUserKnob {22 fn T "def reset() :\n\tstartloop = nuke.toNode('start_loop')\n\tfor node in nuke.allNodes() :\n\t\tif node.name()\[0:4] == 'DSM_' :\n\t\t\tnuke.delete( node )\n\n\tstartloop = nuke.toNode('start_loop')\n\tfmerge = nuke.toNode('final_merge')\n\tfor i in range( fmerge.inputs() ) :\n\t\tfmerge.setInput(i, None)\n\tdreset = nuke.nodes.DeepExpression( name='DSM_reset' )\n\tdreset\['rgba.red'].setValue('deepRawColor.red')\n\tdreset\['rgba.green'].setValue('deepRawColor.green')\n\tdreset\['rgba.blue'].setValue('deepRawColor.blue')\n\tdreset\['rgba.alpha'].setValue('deepRawColor.alpha')\n\tdreset.setInput(0, startloop)\n\n\tfmerge.setInput(0, dreset)\n\n################################\n\ndef genlayer(currentcount) :\n\tstartloop = nuke.toNode('start_loop')\n\tfmerge = nuke.toNode('final_merge')\n\n\tacheck = nuke.nodes.DeepExpression( name='DSM_acheck' , chans0='rgba.blue' , chans1='none' , inputs=\[startloop] )\n\tacheck\['rgba.blue'].setValue( '\[value parent.nuke_version] == 0 ? ( deepRawColor.alpha <= \[value store.achk] ? 1 : 0 ) : (deepRawColor.alpha <= \[value store.achk] ? 0 : 1 )' )\n\n\tlastnode = acheck\n\n\tfor i in range( currentcount ) :\n\t\tlayerid = i + 1\n\n\t\tstartdot = nuke.nodes.Dot( name='DSM_start_'+str(layerid) , inputs=\[lastnode] )\n\n\t\td2img = nuke.nodes.DeepToImage( name='DSM_d2img_'+str(layerid) )\n\n\t\tif layerid == 1 :\n\t\t\td2r = nuke.nodes.DeepExpression( name='DSM_d2r_'+str(layerid) , chans0='rgba.red' , chans1='none' , inputs=\[startdot] )\n\t\t\td2r\['rgba.red'].setValue( 'deep.front' )\n\n\t\t\td2img.setInput(0, d2r)\n\t\t\t\n\t\t\tr2all = nuke.nodes.DeepRecolor( name='DSM_r2all_'+str(layerid) , channels='rgb.red' , inputs=\[startdot, d2img] )\n\t\t\t\n\t\t\tlastnode = r2all\n\t\telse :\n\t\t\tdmvb4 = nuke.nodes.DeepExpression( name='DSM_dmvb4_'+str(layerid) , chans0='rgba.red' , chans1='deep' , inputs=\[startdot] )\n\t\t\tdmvb4\['rgba.red'].setValue( 'deep.front' )\n\t\t\tdmvb4\['deep.front'].setValue( 'deep.front == red || deep.front < red ? -1 : deep.front' )\n\t\t\tdmvb4\['deep.back'].setValue( 'deep.back == red || deep.back < red? -1 : deep.back' )\n\n\t\t\tdrmb4 = nuke.nodes.DeepCrop( name='DSM_drmb4_'+str(layerid) , inputs=\[dmvb4] )\n\t\t\tdrmb4\['use_znear'].setValue(0)\n\t\t\tdrmb4\['zfar'].setValue(0)\n\t\t\tdrmb4\['use_zfar'].setValue(1)\n\t\t\tdrmb4\['outside_zrange'].setValue(1)\n\t\t\tdrmb4\['use_bbox'].setValue(0)\n\t\t\t\n\t\t\td2img.setInput(0, drmb4)\n\n\t\t\tr2all = nuke.nodes.DeepRecolor( name='DSM_r2all_'+str(layerid) , channels='rgb.red' , inputs=\[startdot, d2img] )\n\n\t\t\tetypx = nuke.nodes.DeepExpression( name='DSM_etypx_'+str(layerid) , chans0='none' , inputs=\[r2all] )\n\t\t\tetypx\['deep.front'].setValue( 'red == 0 || red < 0 ? -1 : deep.front' )\n\t\t\tetypx\['deep.back'].setValue( 'red == 0 || red < 0 ? -1 : deep.back' )\n\n\t\t\takeepb4 = nuke.nodes.DeepExpression( name='DSM_akeepb4_'+str(layerid) , inputs=\[startdot] )\n\t\t\takeepb4\['rgba.green'].setValue( 'blue' )\n\t\t\takeepb4\['rgba.alpha'].setValue( 'blue' )\n\t\t\takeepb4\['deep.front'].setValue( '\[value parent.nuke_version] == 0 ? ( deep.front >= red ? deep.front : -1 ) : ( deep.front > red ? -1 : deep.front )' )\n\t\t\takeepb4\['deep.back'].setValue( '\[value parent.nuke_version] == 0 ? ( deep.back >= red ? deep.back : -1 ) : ( deep.back > red ? -1 : deep.back )' )\n\n\t\t\tarmb4 = nuke.nodes.DeepCrop( name='DSM_armb4_'+str(layerid) , inputs=\[akeepb4] )\n\t\t\tarmb4\['use_znear'].setValue(0)\n\t\t\tarmb4\['zfar'].setValue(0)\n\t\t\tarmb4\['use_zfar'].setValue(1)\n\t\t\tarmb4\['outside_zrange'].setValue(1)\n\t\t\tarmb4\['use_bbox'].setValue(0)\n\n\t\t\tad2img = nuke.nodes.DeepToImage( name='DSM_ad2img_'+str(layerid) , inputs=\[armb4] )\n\n\t\t\tg2all = nuke.nodes.DeepRecolor( name='DSM_g2all_'+str(layerid) , channels='rgb.green' , inputs=\[etypx, ad2img] )\n\n\t\t\tlastnode = g2all\n\n\t\tdfilter = nuke.nodes.DeepExpression( name='DSM_dfilter_'+str(layerid) , chans0='none' )\n\t\tif layerid == 1 :\n\t\t\tdfilter\['deep.front'].setValue( 'deep.front != red ? -1 : deep.front')\n\t\t\tdfilter\['deep.back'].setValue( 'deep.back != red ? -1 : deep.back')\n\t\t\tdfilter.setInput(0, r2all)\n\t\telse :\n\t\t\tdfilter\['deep.front'].setValue( 'deep.front != red || green == 1 ? -1 : deep.front')\n\t\t\tdfilter\['deep.back'].setValue( 'deep.back != red || green == 1 ? -1 : deep.back')\n\t\t\tdfilter.setInput(0, g2all)\n\n\t\tdthrow = nuke.nodes.DeepCrop( name='DSM_throw_'+str(layerid) , inputs=\[dfilter] )\n\t\tdthrow\['use_znear'].setValue(0)\n\t\tdthrow\['zfar'].setValue(0)\n\t\tdthrow\['use_zfar'].setValue(1)\n\t\tdthrow\['outside_zrange'].setValue(1)\n\t\tdthrow\['use_bbox'].setValue(0)\n\n\t\tdrevert = nuke.nodes.DeepExpression( name='DSM_revert_'+str(layerid) , chans1='none' , inputs=\[dthrow] )\n\t\tdrevert\['rgba.red'].setValue('deepRawColor.red')\n\t\tdrevert\['rgba.green'].setValue('deepRawColor.green')\n\t\tdrevert\['rgba.blue'].setValue('deepRawColor.blue')\n\t\tdrevert\['rgba.alpha'].setValue('deepRawColor.alpha')\n\n\t\tfmerge.setInput(i, drevert)" +STARTLINE} addUserKnob {7 bias} bias 1e-05 addUserKnob {7 achk} achk 0.9999 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DeflickerVelocity.gizmo ================================================ Group { name DeflickerVelocity tile_color 0x7f00ffff note_font Verdana selected true mapsize {0.15 0.15} addUserKnob {20 User l Controls} addUserKnob {4 velocity_type l "Velocity Type" M {" 0 > 1 - 3DS Max " "-1 > 1 - Maya\\Nuke " "" "" "" "" "" "" ""}} addUserKnob {6 noVelocity l "No Velocity" t "Wether or not the node should try to realign the footage based on vector information" -STARTLINE} addUserKnob {6 protect_alpha l "Protect Alpha" -STARTLINE} protect_alpha true addUserKnob {7 velocity_multiplier l "Velocity Multiplier" t "How much the Velocity will be multiplied o align the previous and next frame to the middle frame. Based on Vray Velocity Pass \"max velocity\" parameter." R 0 100} velocity_multiplier 1 addUserKnob {26 ""} addUserKnob {6 Maskbyvelocity l "Mask by Velocity" +STARTLINE} addUserKnob {7 MaskVelocityThreshold l Threshold R 0 100} MaskVelocityThreshold 0.1 addUserKnob {7 MaskVelocitySoftness l Softness R 0 10} MaskVelocitySoftness 0.1 addUserKnob {7 ConservativeMasking l Conservative} ConservativeMasking 1 addUserKnob {7 VelocityBlurMask l Blur R 0 200} VelocityBlurMask 1 addUserKnob {7 VelocityErodeMask l Erode R -20 20} addUserKnob {26 ""} addUserKnob {6 Difference_mask l "Mask by Difference" +STARTLINE} addUserKnob {7 difference_mask_preblur l "Pre Blur" R 0 200} difference_mask_preblur 5 addUserKnob {7 difference_mask_threshold l Threshold} difference_mask_threshold 0.1 addUserKnob {7 difference_mask_softness l Softness} difference_mask_softness 0.1 addUserKnob {7 difference_mask_blur l "Post Blur" R 0 200} difference_mask_blur 5 addUserKnob {7 difference_mask_erode l Erode R -20 20} difference_mask_erode 1 addUserKnob {26 ""} addUserKnob {6 input_mask l "Mask by Input " -STARTLINE} addUserKnob {4 input_mask_channel l " Channel " -STARTLINE M {rgba.red rgba.green rgba.blue rgba.alpha}} input_mask_channel rgba.alpha addUserKnob {6 input_mask_invert l Invert -STARTLINE} addUserKnob {7 input_mask_conservative l Conservative} input_mask_conservative 1 addUserKnob {7 Input_mask_blur l Blur R 0 200} Input_mask_blur 5 addUserKnob {7 Input_mask_erode l Erode R -20 20} addUserKnob {26 ""} addUserKnob {6 CheckMask l "Display Masks" +STARTLINE} addUserKnob {7 Opacity} Opacity 1 addUserKnob {26 ""} addUserKnob {26 Info l "" +STARTLINE T "Velocity Deflicker 1.1 by Ju / the Post Bangkok\nwww.juvano.com\nwww.the-post-bangkok.com"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x8e8e3800 label "Velocity Shift\n" note_font_size 42 xpos -330 ypos -651 bdwidth 317 bdheight 450 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x8e8e3800 label "Velocity\nConversion" note_font_size 42 xpos 185 ypos -1205 bdwidth 245 bdheight 204 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x7171c600 label "MASK VELOCITY" note_font_size 42 xpos 69 ypos -946 bdwidth 375 bdheight 813 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x7171c600 label "MASK INPUT" note_font_size 42 xpos 544 ypos -1017 bdwidth 404 bdheight 1156 } BackdropNode { inputs 0 name BackdropNode5 tile_color 0x7171c600 label "MASK\nDIFFERENCE" note_font_size 42 xpos -897 ypos -1102 bdwidth 341 bdheight 1019 } BackdropNode { inputs 0 name BackdropNode6 tile_color 0x7171c600 label WARNINGS note_font_size 42 xpos -89 ypos 367 bdwidth 639 bdheight 332 } Blur { inputs 0 name Blur2 xpos -680 ypos -796 } Dilate { inputs 0 size -1 name Dilate4 xpos -884 ypos -469 disable true } Dilate { size 2 name Dilate5 xpos -884 ypos -433 disable true } Constant { inputs 0 channels rgb color {0.5 0.5 0.5 1} name Constant1 xpos 366 ypos -1383 } Reformat { type "to box" box_width {{img.width i}} box_height {{img.height i}} box_fixed true filter impulse name Reformat1 xpos 366 ypos -1301 } set Nfc13700 [stack 0] Input { inputs 0 name velocity xpos 621 ypos -1347 number 1 } push $Nfc13700 Switch { inputs 2 which {{"\[python -execlocal ret\\ =\\ min\\ (\\ len(nuke.toNode(\\\"velocity\\\").channels())\\ ,\\ 1\\ )]" i}} name Switch_MissingVelocity xpos 547 ypos -1251 } Switch { inputs 2 which {{parent.noVelocity i}} name Switch_NoVelocity xpos 547 ypos -1198 } Grade { multiply {1 1 0 1} black_clamp false name REMOVE_BLUE xpos 547 ypos -1047 disable true } Grade { multiply 2 add -1 black_clamp false name Max_2_Maya_Conv xpos 253 ypos -1047 disable {{parent.velocity_type i}} } set Nfe3a800 [stack 0] Input { inputs 0 name img xpos -41 ypos -1377 } Constant { inputs 0 name Constant4 xpos 110 ypos -1402 } Switch { inputs 2 which {{"\[python -execlocal ret\\ =\\ min\\ (\\ len(nuke.toNode(\\\"img\\\").channels())\\ ,\\ 1\\ )]" i}} name Switch_MissingImage xpos -41 ypos -1276 } set Ndc53de00 [stack 0] Copy { inputs 2 from0 rgba.red to0 forward.u from1 rgba.green to1 forward.v name Velocity xpos -41 ypos -1059 } Dot { name Dot6 xpos 3 ypos -990 } set Nfe3e800 [stack 0] Dot { name Dot5 xpos -166 ypos -990 } set Nfe3ed00 [stack 0] Dot { name Dot9 xpos -231 ypos -990 } Dot { name Dot15 xpos -231 ypos -571 } set Nfe3f700 [stack 0] TimeOffset { time_offset -1 time "" name TimeOffset2 xpos -319 ypos -510 } set Cf7725c00 [stack 0] Crop { box {0 0 {img.width i} {img.height i}} crop false name Crop2 xpos -319 ypos -486 } set Cfe4c000 [stack 0] IDistort { uv forward uv_scale {{parent.velocity_multiplier i}} maskChannel rgba.alpha name IDistort1 xpos -319 ypos -462 disable {{parent.noVelocity i}} } set Nfe4c500 [stack 0] Dot { name Dot22 xpos -526 ypos -453 } Dot { name Dot19 xpos -526 ypos -924 } Blur { size {{parent.difference_mask_preblur i}} name Blur4 xpos -863 ypos -933 } set Cfe4d400 [stack 0] push $Ndc53de00 Dot { name Dot4 xpos -397 ypos -1273 } set Nfe4d900 [stack 0] Dot { name Dot11 xpos -464 ypos -1273 } Dot { name Dot24 xpos -464 ypos -962 } set Nfe4e300 [stack 0] Crop { box {0 0 {img.width i} {img.height i}} name Crop1 xpos -665 ypos -965 } clone $Cfe4d400 { xpos -775 ypos -971 selected false } Dot { name Dot12 xpos -731 ypos -861 } set Nfe4f200 [stack 0] Merge2 { inputs 2 operation difference name Merge13 xpos -863 ypos -544 } push $Nfe3f700 TimeOffset { time_offset 1 time "" name TimeOffset3 xpos -320 ypos -351 } set Cf7725500 [stack 0] clone $Cfe4c000 { xpos -320 ypos -327 selected false } IDistort { uv forward uv_scale {{-parent.velocity_multiplier i}} maskChannel rgba.alpha name IDistort2 xpos -320 ypos -303 disable {{parent.noVelocity i}} } set Nfe6c500 [stack 0] Dot { name Dot21 xpos -539 ypos -294 } Dot { name Dot20 xpos -539 ypos -886 } clone $Cfe4d400 { xpos -886 ypos -895 selected false } push $Nfe4f200 Merge2 { inputs 2 operation difference name Merge3 xpos -886 ypos -687 } Merge2 { inputs 2 operation plus name Merge14 xpos -750 ypos -626 } Grade { blackpoint {{"clamp(parent.difference_mask_threshold - parent.difference_mask_softness)" i}} whitepoint {{"clamp(parent.difference_mask_threshold + parent.difference_mask_softness)" i}} white_clamp true name Grade14 xpos -750 ypos -391 } Invert { name Invert2 xpos -750 ypos -367 disable true } HueShift { saturation 0 name HueShift1 xpos -750 ypos -331 } Shuffle { alpha red name Shuffle2 xpos -750 ypos -307 } Blur { size {{parent.difference_mask_blur i}} name Blur3 xpos -750 ypos -242 } Dilate { size {{parent.difference_mask_erode i}} name Dilate6 xpos -750 ypos -206 } Dot { name Dot27 xpos -706 ypos -120 } push $Nfe3a800 Dot { name Dot18 xpos 297 ypos -997 } set Nfe90000 [stack 0] Grade { multiply -1 black_clamp false name FLIP_plus1_to_min1 xpos 190 ypos -866 } Grade { name CLAMP_BLACK1 xpos 190 ypos -759 } push $Nfe90000 Grade { name CLAMP_BLACK2 xpos 330 ypos -797 } Merge2 { inputs 2 operation plus name ADD xpos 330 ypos -759 } Saturation { saturation 0 name Saturation1 xpos 330 ypos -735 } Grade { blackpoint {{clamp(parent.MaskVelocityThreshold-parent.MaskVelocitySoftness,0,100000000) i}} whitepoint {{clamp(parent.MaskVelocityThreshold+parent.MaskVelocitySoftness,0,10000000000) i}} name Grade1 xpos 330 ypos -711 } Shuffle { alpha red name Shuffle1 xpos 330 ypos -687 } Dot { name Dot17 xpos 374 ypos -650 } set Nfeac000 [stack 0] push $Nfeac000 clone $Cf7725500 { xpos 86 ypos -426 selected false } push $Nfeac000 clone $Cf7725c00 { xpos 79 ypos -579 selected false } push $Nfeac000 Merge2 { inputs 2 operation plus name Merge4 xpos 222 ypos -512 } Grade { channels rgba white_clamp true name Grade12 xpos 222 ypos -488 } Merge2 { inputs 2 operation plus name Merge10 xpos 222 ypos -378 } Grade { channels rgba white_clamp true name Grade13 xpos 222 ypos -354 } Dilate { size 1 name Dilate2 xpos 222 ypos -325 } Merge2 { inputs 2 operation copy mix {{abs(parent.ConservativeMasking-1) i}} name Merge11 xpos 330 ypos -267 } Grade { channels rgba white_clamp true name Grade8 xpos 330 ypos -243 } Blur { size {{parent.VelocityBlurMask i}} name Blur5 xpos 330 ypos -219 } Dilate { size {{parent.VelocityErodeMask i}} name Dilate7 xpos 330 ypos -183 } Constant { inputs 0 name Constant3 xpos 604 ypos -744 } Reformat { type "to box" box_width {{img.width i}} box_height {{img.height i}} box_fixed true filter impulse name Reformat2 xpos 604 ypos -662 } Invert { name Invert3 xpos 604 ypos -623 disable {{parent.input_mask_invert i}} } set Cfecf200 [stack 0] Input { inputs 0 name mask xpos 792 ypos -929 number 2 } set Nfecf700 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle6 xpos 837 ypos -841 } push $Nfecf700 Shuffle { red blue green blue alpha blue name Shuffle5 xpos 769 ypos -816 } push $Nfecf700 Shuffle { red green blue green alpha green name Shuffle4 xpos 691 ypos -844 } push $Nfecf700 Shuffle { green red blue red alpha red name Shuffle3 xpos 579 ypos -829 } Switch { inputs 4 which {{parent.input_mask_channel i}} name Switch3 xpos 792 ypos -757 } Grade { channels rgba white_clamp true name Grade5 xpos 792 ypos -641 } Merge2 { inputs 2 operation copy name Merge9 xpos 792 ypos -617 disable {{parent.input_mask i}} } Dot { name Dot14 xpos 836 ypos -565 } set Nfef0500 [stack 0] push $Nfef0500 clone $Cf7725500 { xpos 561 ypos -459 selected false } push $Nfef0500 clone $Cf7725c00 { xpos 562 ypos -568 selected false } push $Nfef0500 Merge2 { inputs 2 operation plus name Merge1 xpos 697 ypos -500 } Grade { channels rgba white_clamp true name Grade10 xpos 697 ypos -476 } Merge2 { inputs 2 operation plus name Merge2 xpos 697 ypos -430 } Grade { channels rgba white_clamp true name Grade11 xpos 697 ypos -406 } Dilate { size 1 name Dilate1 xpos 697 ypos -375 } Merge2 { inputs 2 operation copy mix {{abs(parent.input_mask_conservative-1)}} name Merge8 xpos 792 ypos -318 } Grade { channels rgba white_clamp true name Grade9 xpos 792 ypos -294 } clone $Cfecf200 { xpos 792 ypos -265 selected false } Blur { size {{parent.Input_mask_blur i}} name Blur1 xpos 792 ypos -229 } Dilate { size {{parent.Input_mask_erode i}} name Dilate3 xpos 792 ypos -193 } Merge2 { inputs 2 operation plus name MASK_VEL xpos 792 ypos -157 disable {{abs(parent.Maskbyvelocity-1) i}} } Merge2 { inputs 2 operation plus name MASK_DIFF xpos 792 ypos -123 disable {{abs(parent.Difference_mask-1) i}} } Grade { channels rgba white_clamp true name Grade6 xpos 792 ypos -92 } Grade { channels rgba white_clamp true name Grade7 xpos 792 ypos -58 } Dot { name Dot16 xpos 836 ypos 59 } Dot { name Dot7 xpos 726 ypos 59 } set Nff31400 [stack 0] Invert { name Invert1 xpos 165 ypos 284 } push $Nfe4e300 Dot { name Dot13 xpos -464 ypos 193 } push $Nff31400 push $Nfe4d900 Dot { name Dot10 xpos -397 ypos 59 } push $Nfe3e800 Dot { name Dot2 xpos 3 ypos -460 } set Nff32800 [stack 0] Constant { inputs 0 color 1 name Constant2 xpos -119 ypos -548 } Reformat { type "to box" box_width {{img.width i}} box_height {{img.height i}} box_fixed true filter impulse name Reformat3 xpos -119 ypos -466 } push $Nff32800 Switch { inputs 2 which {{abs(parent.protect_alpha-1) i}} name Switch2 xpos -119 ypos -431 } set Ndc4f5200 [stack 0] push $Nfe6c500 Dot { name Dot3 xpos -210 ypos -308 } push $Ndc4f5200 push $Nfe4c500 Dot { name Dot1 xpos -221 ypos -466 } push $Nfe3ed00 Merge2 { inputs 2+1 operation copy maskChannelInput -rgba.alpha mix 0.5 name Merge5 xpos -210 ypos -500 } Merge2 { inputs 2+1 operation copy maskChannelInput -rgba.alpha mix {{1/3 i}} name Merge6 xpos -210 ypos -352 } ShuffleCopy { inputs 2 name ShuffleCopy1 xpos -79 ypos -289 disable {{abs(parent.protect_alpha-1) i}} } Dot { name Dot8 xpos -35 ypos -223 } Merge2 { inputs 2+1 operation copy name Merge7 xpos -79 ypos 56 } Merge2 { inputs 2 operation copy maskChannelMask rgba.green mix {{abs(parent.Opacity-1) i}} name Mix1 xpos -79 ypos 190 } Merge2 { inputs 2 operation copy name Merge12 xpos -79 ypos 290 disable {{abs(parent.CheckMask-1) i}} } Text2 { font_size_toolbar 50 font_width_toolbar 100 font_height_toolbar 100 message "Velocity input missing" old_message { {86 101 108 111 99 105 116 121 32 105 110 112 117 116 32 109 105 115 115 105 110 103} } box {10 5 1000 65} transforms { {0 2} } font_size_values { {0 50 1 50 2 50 3 50 4 50 5 50 6 50 7 50 8 50 9 50 10 50 11 50 12 50 13 50 14 50 15 50 16 50 17 50 18 50 19 50 20 50 21 50} } cursor_position 19 font_size 50 center {960 540} cursor_initialised true autofit_bbox false initial_cursor_position { {0 1080} } group_animations { {0} imported: 0 selected: items: "root transform/" } animation_layers { {1 11 960 540 0 0 1 1 0 0 0 0} } color {1 0 0 1} name Warning_Velocity xpos -79 ypos 464 disable {{"\[python min\\ (\\ (len(nuke.toNode(\\\"velocity\\\").channels())\\ +\\ nuke.toNode(\\\"Switch_NoVelocity\\\")\\\['which'\\].value())\\ ,\\ 1\\ )]"}} } Text2 { font_size_toolbar 50 font_width_toolbar 100 font_height_toolbar 100 message "Img input missing" old_message { {73 109 103 32 105 110 112 117 116 32 109 105 115 115 105 110 103} } box {10 73 1000 133} transforms { {0 2} } font_size_values { {0 50 1 50 2 50 3 50 4 50 5 50 6 50 7 50 8 50 9 50 10 50 11 50 12 50 13 50 14 50 15 50 16 50} } cursor_position 17 font_size 50 center {960 540} cursor_initialised true autofit_bbox false initial_cursor_position { {0 1080} } group_animations { {0} imported: 0 selected: items: "root transform/" } animation_layers { {1 11 960 540 0 0 1 1 0 0 0 0} } color {1 0 0 1} name Warning_Img xpos -79 ypos 507 disable {{"\[python min\\ (\\ len(nuke.toNode(\\\"img\\\").channels())\\ ,\\ 1\\ )]"}} } Output { name Output1 xpos -79 ypos 766 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DefocusSwirlyBokeh.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { name DefocusSwirlyBokeh tile_color 0xb16f43ff selected true addUserKnob {20 DefocusSwirlyBokeh} addUserKnob {6 usegpu l "use gpu" t "You REALLY need a good GPU to use this node effectively. With CPU it will be excruciatingly slow." +STARTLINE} usegpu true addUserKnob {7 size l "bokeh size" t "The size of your defocus." R 2 100} size 25 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.25 1.5} aspect_ratio 1 addUserKnob {7 swirl_amount l "swirly amount" t "How much to increase the cat's eye effect on the edges of frame."} swirl_amount 1 addUserKnob {26 spacer2 l " " T ""} addUserKnob {7 bokeh_contrast l "bokeh contrast" t "adjust contrast of bokeh up or down: 0 is grey. 1 is no change. 4 is high contrast.\n" R 0 2} bokeh_contrast 1 addUserKnob {7 bokeh_blur l "bokeh blur" t "Blur the bokeh to soften out the edges. (percent of input resolution)." R 0 0.5} addUserKnob {26 spacer l " " T ""} addUserKnob {6 enable_bokeh_masking l "enable bokeh masking" t "false: \nuse the input filter for the whole frame. \n\ntrue: \nthe outward facing edges of the bokeh get increasingly masked by a radial towards the edge of frame." +STARTLINE} addUserKnob {7 bokeh_radial_softness l "radial softness" t "How soft is the radial that masks the edge bokeh if enable bokeh masking is true."} bokeh_radial_softness 0.5 addUserKnob {15 mattebox} addUserKnob {7 mattebox_softness l "mattebox softness" R 0 25} addUserKnob {20 About} addUserKnob {26 about_label l " " T "
\nBased on Alexander Kulikov's CatsEyeDefocus.
\nwww.nukepedia.com/blink/filter/catseyedefocus\n

\nSimplifying the node. The blink convolution node is the same.\n

\ngist.github.com/jedypod\n"} } Input { inputs 0 name Inputfilter label "\[value number]" xpos -370 ypos -568 number 1 } Reformat { inputs 0 type "to box" box_width 128 box_height {{box_width}} box_fixed true name ReformatBox xpos -590 ypos -562 } Flare { position {{width/2} {height/2}} radius {{position.x-(position.x*0.15)} {radius.0+(radius.0*0.02)} {radius.0+(radius.0*0.05)}} inner_color 0.145 outer_falloff 0.54 inner_falloff 0.88 name Flare1 xpos -590 ypos -514 } Keyer { operation "luminance key" range {0 0.404087018 1 1} name Keyer1 xpos -590 ypos -472 } Switch { inputs 2 which {{"\[exists parent.input1]"}} name Switch1 xpos -370 ypos -466 } Dot { name Dot2 label " " note_font "Helvetica Bold Bold" note_font_size 24 note_font_color 0xa5a5a501 xpos -336 ypos -366 } set Nced61ee0 [stack 0] Radial { replace true area {0 0 {input.width} {input.height}} softness {{parent.bokeh_radial_softness}} name LensEdgeBokehSoften xpos -370 ypos -346 } Reformat { type "to box" box_width {{parent.size}} box_height {{box_width}} box_fixed true name SCALE_FILTER1 xpos -370 ypos -298 } Reformat { type scale box_fixed true scale {{parent.aspect_ratio} 1} resize distort name ASPECT_RATIO2 xpos -370 ypos -250 } Crop { box {{parent.mattebox+(parent.mattebox*input.width)} {parent.mattebox+(parent.mattebox*input.height)} {input.width-(parent.mattebox*input.width)} {input.height-(parent.mattebox*input.height)}} softness {{parent.mattebox_softness}} name MATTEBOX xpos -370 ypos -202 } Mirror2 { flip true flop true name Mirror2_1 xpos -370 ypos -154 } Reformat { type "to box" box_width {{"\[exists input] ? input.width : root.width"}} box_height {{"\[exists input] ? input.height : root.height"}} box_fixed true box_pixel_aspect {{"\[exists input] ? input.pixel_aspect : root.pixel_aspect"}} resize none black_outside true name BboxRemove xpos -370 ypos -34 } Dot { name Dot3 label " " note_font "Helvetica Bold Bold" note_font_size 24 note_font_color 0xa5a5a501 xpos -336 ypos 138 } push $Nced61ee0 Dot { name Dot1 label " " note_font "Helvetica Bold Bold" note_font_size 24 note_font_color 0xa5a5a501 xpos -116 ypos -366 } Reformat { type "to box" box_width {{parent.size}} box_height {{box_width}} box_fixed true name SCALE_FILTER xpos -150 ypos -298 } Reformat { type scale box_fixed true scale {{parent.aspect_ratio} 1} resize distort name ASPECT_RATIO selected true xpos -150 ypos -250 } Crop { box {{parent.mattebox+(parent.mattebox*input.width)} {parent.mattebox+(parent.mattebox*input.height)} {input.width-(parent.mattebox*input.width)} {input.height-(parent.mattebox*input.height)}} softness {{parent.mattebox_softness}} name MATTEBOX1 xpos -150 ypos -202 } CCorrect { channels rgb contrast {{parent.bokeh_contrast}} name BokehContrast xpos -150 ypos -154 } Clamp { channels rgba maximum_enable false name ClampMin xpos -150 ypos -118 } Group { name BlurPercent tile_color 0xc4814dff xpos -150 ypos -82 addUserKnob {20 percentBlur l "Percent Blur"} addUserKnob {41 channels T _BLUR_.channels} addUserKnob {14 percent R 0 100} percent {{parent.bokeh_blur*100}} addUserKnob {41 filter T _BLUR_.filter} addUserKnob {41 quality l "" -STARTLINE T _BLUR_.quality} addUserKnob {41 crop l "crop to format" -STARTLINE T _BLUR_.crop} addUserKnob {41 mix T _BLUR_.mix} } Input { inputs 0 name Input xpos 440 ypos -225 } Blur { channels rgba size {{width/3*(percent/100) x1001 6.826666667e+10} {width/3*(percent/100)*(1/pixel_aspect)}} crop false name _BLUR_ xpos 440 ypos -153 addUserKnob {20 User} addUserKnob {7 xpercent l xPercent R 0 100} xpercent 25.5 addUserKnob {7 ypercent l yPercent R 0 100} ypercent {{xpercent}} } Output { name Output1 xpos 440 ypos -81 } end_group Reformat { type "to box" box_width {{"\[exists input] ? input.width : root.width"}} box_height {{"\[exists input] ? input.height : root.height"}} box_fixed true box_pixel_aspect {{"\[exists input] ? input.pixel_aspect : root.pixel_aspect"}} resize none black_outside true name BboxRemove1 xpos -150 ypos -10 } Dot { name Dot4 label " " note_font "Helvetica Bold Bold" note_font_size 24 note_font_color 0xa5a5a501 xpos -116 ypos 66 } set Ncee42110 [stack 0] Switch { inputs 2 which {{parent.enable_bokeh_masking}} name SoftEdgeBokeh xpos -150 ypos 134 } push $Ncee42110 Dot { name Dot5 label " " note_font "Helvetica Bold Bold" note_font_size 24 note_font_color 0xa5a5a501 xpos -6 ypos 66 } Input { inputs 0 name Input label "\[value number]" xpos 70 ypos -568 } Constant { inputs 0 name Constant1 xpos 290 ypos -442 postage_stamp false } Switch { inputs 2 which {{"\[exists parent.input0]"}} name Switch2 xpos 70 ypos -442 } BlinkScript { inputs 3 ProgramGroup 1 KernelDescription "2 \"CatsEyeConvolve\" iterate pixelWise d3f7f7268f50afeb0ffd385b019c65664a5775e0f4a8983e20044cb012fe17e8 4 \"src\" Read Ranged2D \"filter\" Read Random \"ext\" Read Random \"dst\" Write Point 3 \"Amount\" Float 1 AACAPw== \"Format\" Int 2 AAUAANACAAA= \"Interpolate\" Bool 1 AQ== 3 \"amount\" 1 1 \"_format\" 2 1 \"interpolate\" 1 1 7 \"srcrangeMin\" Int 2 1 AAAAAAAAAAA= \"srcrangeMax\" Int 2 1 AAAAAAAAAAA= \"extconstEdgeColor\" Float 4 1 AAAAAAAAAAAAAAAAAAAAAA== \"_filterOffset\" Int 2 1 AAAAAAAAAAA= \"halfWidth\" Int 1 1 AAAAAA== \"halfHeight\" Int 1 1 AAAAAA== \"step\" Float 1 1 AAAAAA==" EncodedSource "1 2904 +vduhx3Y8JBmLeiWCjYc02Q9Odx8FJ5dqBe/uX9TgyhEk6K88rIuF+cFmQD78ej6LXg8cuU82LdC7ZdSjjaCt7bMKxSafnhAwKeJiaKUcp/+LiX8yNxidGrQQxLQOP7mJxzynvhLiZBi6jQNXkFsWw9tupyAWMf2qSD10fk3qTUWlMD6XFM/zII9/AmE5qDC2FkhswV5WQTY84O+twxw3U7UMVt3oTZoOTgDFqtGWTVvsk146amMUbTFV1L5euCqLBLp3wqtLoJISJzHd2ZAoqe7Wp2fvMcStAcjK+rH2teU1DYAWu3wiYPfNt4G6DEKr6EhLxyzXbKygpUQGi/bRIBfVwNdNSQAGLJaeVS87Brbg3ya/OJOhIISEsTpTiDj19joP31EUPvdS22/WnBmaa66RIqmbPwnvDbVQCL0r+luwbvaA5LFpEHjh3DOog200fCwwdSuc8Fb7HVmKE7I+9DauBHYIu5cO7AcA4EoVPnAEs89gjGLY8FVUPHpnwERocJRxhgYIxAo3xPT5Djh29RpCA+dupA1bnSQ6BR+yLIvprsdWE9xicWBmfJFuFc/8NcWzaR+JZJy1skX3ZpJm8JQvG8daMu/p3x03cxh+8iwMTePxPr3l4HZrg4gxd5GXhhztiVQ+XqYa21vFChqNo7QofCpFZAjEjKxP/E+9tDko54qg+JeVWXUZgvUR6vr6bwkq5Cr7NRfo2uWCNldENhZz/US7gm2sh52+zzoHNCVuBKeFVTojP1Nk23GH7y0zvv9+fK9BIrp5rBp7cl+di31vaUBLrONMQ14NRx3u//vxY7Uywj6qGC7CUJVJTJ1cw3rnQ0MXhcHpRF6L0Rdn4ibV2logTMVbMoM34m/os0oED2CFnX2W85jab/utQRRQoSXz2VPRMi/XqwbKlsswzLyWbBgSnmKKCHwgQNpeTQyLMkGISozK/247JdCzHyXFDasHp9l4VaRoATHOmsihJIW/PnpNyvKsm2BCkXqN7DrzD13z1SAOeV82KE/QBrxWIyLRDGsdNS9PaS/FUjANfOvVUn92njVkuc2pv/WPL08Z9os37rSrEBByUk5Mqfa4HXJMMYqF7BpSuP5B1pqxiGoQI1N7uDOR5QjsHttqGcTnSa8oZdZHZkcOGFyFv7zsm8hx1LkCwMCIkO8pnSDynoZqe0z7GfWx80RA3eAfEV4ejq0Cdva61MfNddLq77oynH5rYGW/Gf/ylF0YySMf1HKe4akObXLlpbpZxgMsUHAaa6u4xbRZpsL/qlsh4Imaxd7mBYULfj6DbAzYc8fHTAWnJJh1Dt8jQLKg9ESMKWWNNpxZhfRbb8CCsrpIhR5WdLMNlu9dAtJSvnzSpF4WVICjQgKpCn5mW+dSIZIftWKd2tZyRWixvgeuMug4XUQkivl3K8tyzr+o78zDY4axqC5hdyWuYtpht08t5LCrgBFSXF9fdyGdxWxL/e9eixxwbtVr1bfccHnoZOeSImPh9MwE9fYPqitiqR61rNd8JCbYrK2spn9sgN1m7ILSEVupS6JRJiRwWF6HWobjwuzquSXkvZ/EOYzPdIfjb1M0ynQNu1ppjJjTcQksQ3NZZnPLc3HjK48YLB8nZtSX9scvTC9pTji5qSiiIHABqJxIxcED1NIB3wm9DTPoxp3e2mgWEga1N61qGr8QSQy7Rk/aRpFbb3u1x+Kwns/EUErYh4UId2IfxFdLR/5cTiNPIMclEPz4Voj/4AAWBwZLNq1zVVEZRkj2fHNh5VT3L0UtClp0IazpGARc4OtuDhdnz8p7jRE8bzKkIGn1X43Ba5hk7Y7xRUp8ow0zrLDgG3hxtE+7bh4nA4J5ysFiaIgHPXpVHtPMu1bYx+itEvoai8SgF11RjWxsupBlH5vjpisajl11qyYs2zS++3QmbONIxfhsgmEWMNu3uFyX7iMg9uz/pb2hWBCceNvQvPpxODqTaZzdJzRKS9ajlHRktzmJGLimWCGLfFfvDnOOC1Ou2sCPHZ4nF1esuL6jgXkNOfRshYHBYMd4tTNx0zKqTrNAmdZY2XMPyaqkVIqtPi/ygcVCivFsUXtq1D5icJiHLOQHHzdbJGEgoORWVx+x//KKgb+eTqN2ln8sIqcmpv9nqNf9ZWOr54ktg9fKvw0Jl+HTucpd2XBLv3frDDjz3C9pfIBo6GZBiNyvnnv6xUfwsaxT+WG8X3abo8oU3U3OjI8+dztaLyTg1fmKbqyX2iTj46PJO5P2HwBw2otFO0v4zHgnchKc8goMw2WIjjzUGEr/eJtWt+iAeIK1gt9mTKjeBwAxeBO6Vpcri9G4LElTzlSZWENpPBiBXi6o9qkMxL+C+ztrL2q9/ajja+NUGphU/v9ecnh7DqLjZWq0xMWqQ8/NrEs3ldwKCmWETYC3YnxBfL/bhQS5JH3Lv0th7fAKWWO8qxxdBf+EuFi0PVRifBqIOK5fqfYeO82q+dg0HLMrLKhLjuWyKq96SbIke7uvULYwTDwBowzHYC29B91QPurz3Ot7+/GrScjzYf4cA9Bby22TjL2gb7CHMmqRz8JxsPGLmBHd+daGsreA4u4Wv+cZtR3wMRsg3mayzTdQEkulKC8qUpsLSLFMchaZkkjiMhwZe/2u9D5uzuIaqIoZnKHAzinBAIW2JjjyrIXA+UGTytAdiGYC1S3wGax2HawBoPqLphpLGswKYp0k+Baa1iR0PfwElsS6j4h0+MskQpPhEgXCKhJi0wwXAn6oa+hDEMs1BlOPBdv3c7GRV2wrSQqtAujGkRtVW+8D1U9D6ZbpMmrrPA4uukb5Uv4nK9kls2xqBnQuZti8WpskSTYtEYIfn0lT9Yh/yX51ky+4NNcj83NiiQiD2fa7ODTgo8SQ5oRF94/zhjERAohre0OfM5JkTG0uvj+IXXMHIPMMjfwCCxjEDDTx45pEct+iaN3Y+x6GVmh+sI29ZfoWM8RN9PoOfGpXFwgE4ij0MwR89YNIJijazteqm+D2fTrtYaCT+u/sswUfjN06z5NpZF6mJS0cO420s1rKIJbYcNcxz13BCgBAnnfntaeGMQAirZm9LnNu9NbMd9iudakKkYJ6jSz4Q4Ws+UXkInrs63RO2fdkv209RQqNu7u1E53xdh0kNJOFVXM62sihT45JWbxMgn+1MHb6U52vR4/2G6tq73rG0bf0f//hGXwoKAnhWCzda6ctZ14wB9ynCzlZAZ103HVEQ6VcYABgxBF/W4traDQJHx0UvlRFUkMYRqVGbpPBV9fEPNaD5Ke1Auhl7z9gyPIrgJRKBVC0agpEgMuhB3RNP36wvogd4W2xm2FRvdhJ0Od+Ut6WojCNWc7Malpr0s7FcNJJ0Xr55cHKFhfGbK0qgNKkaa8kWhwpEY/mX2xp1fyoXDpUh8ZRcY0QdLqUHdY7qeaqE+0g+aFEemRA1YKuICancWSa+6zPz5BF5JUcAQli5k6f4VG5Ex82infyZnjrVPL2pe1uuEmqrcvdiDxAaHw7xMpeIioqmkdXd+ie7BEXCm8u44ePxx3Bjc65wz9mFPqMjBBqlEcjVffk2ea3/xCBx0VmDjsAhbx2DoOVnsh0kMgt6x8Z4Tk5GwIFftPE/6FgKUkeHsn6CQZtwan2bWJ57aLEKOg9mL/xxkp6n3btOw2bAa7V/gNK8D5BEVIqthFg1ngUDEi7wekIlho+w+Cqvc+nQCQMCEcCJMJDa6N0n6l/hwvl5Q/vPdjcZ26m+sQXt5sPst3Xfw6tkADD/1V/IAxe+/KpYw+vvbG7ipiSgN+N+peoBLrQ9VwwAcku6wK0zMJWWIVtEZS9tExGc29P4JIjo5UAnkqLcVgs97AWnSS2atilRITMnhaqaT+6a2R8WEyaVu39yf75gGeVuM=" rebuild "" CatsEyeConvolve_Amount {{parent.swirl_amount}} CatsEyeConvolve_Format {{input.width} {input.height}} protectKernelWhenPublishing true rebuild_finalise "" name BlinkScript2 xpos 70 ypos 128 } Output { name Output xpos 70 ypos 254 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DespillToColor.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { name DespillToColor tile_color 0x475247ff note_font "Bitstream Vera Sans Bold Bold Bold" note_font_color 0xffffffff selected true addUserKnob {20 User l main} addUserKnob {68 sto l "screen type" t "- auto - The screen type will be controlled by \n the screen color:\n\n g>b : green despill\n b>g : blue despill\n\n- 'blue' and 'green' act as an override so you can pick a blue-ish screen color but still despill green tones and vice versa.\n" M {auto green blue "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""}} addUserKnob {18 sc l "screen color"} sc {0.11 0.11 0.1} addUserKnob {6 sc_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sc_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sc_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 tc l "target color"} tc {0.11 0.11 0.1} addUserKnob {6 tc_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 tc_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 tc_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 balance t "- determines which colors get affected more by the despill operation. \nlower : red\nhigher : green / blue" R 0 2} balance 1 addUserKnob {7 gain t "Increasing gain will affect a wider range of colors." R 0.5 3.5} gain 1 addUserKnob {26 ""} addUserKnob {6 enableErode l "enable erode" +STARTLINE} addUserKnob {6 spillmatte l "spillmatte output" t "- spillmatte output to alpha channel.\nThis channel is normalised, so the picked color has an alpha value of 1. \nIn ordner not to clamp values above 1 you might choose to grade this mask down a bit." -STARTLINE} addUserKnob {7 erode t "For blurry edges, eroding the despill matte is an alternative to increasing the gain." R 0.1 50} erode 1 addUserKnob {7 erodeMix l mix} erodeMix 1 addUserKnob {26 ""} addUserKnob {7 falloff t "- controls the gamma on the despill matte." R 0.5 1.5} falloff 1 addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask -STARTLINE T Merge1.maskChannelMask} addUserKnob {41 inject -STARTLINE T Merge1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge1.fringe} addUserKnob {41 unpremult l "(un)premult by" T despillGreen.unpremult} addUserKnob {7 mix} mix 1 addUserKnob {26 ""} addUserKnob {20 info l "info / advanced" n 1} info 0 addUserKnob {26 jm l "" +STARTLINE T "Despill to Color by Johannes Masanz\nVersion: 4.1"} addUserKnob {26 ""} addUserKnob {7 ir l "increase range" t "compensates for screen values higher than 1" R 0 100} ir 50 addUserKnob {20 endGroup_1 l endGroup n -1} } Input { inputs 0 name mask xpos -234 ypos 479 number 1 } set N19c2ece0 [stack 0] Input { inputs 0 name source xpos -84 ypos 76 } set N19c32900 [stack 0] Expression { expr0 r expr1 g expr2 b channel3 alpha expr3 parent.gain<1?min((b-(r*parent.balance+g*(1-(parent.balance-1)))/2),(b*parent.gain-(r*parent.balance+g*(1-(parent.balance-1)))/2)):(b*parent.gain-(r*parent.balance+g*(1-(parent.balance-1)))/2) name ExpBlue xpos 516 ypos 76 } Grade { channels alpha whitepoint {{parent.NoOp1.avb}} name despillWhite1 xpos 516 ypos 102 } set N19c42b50 [stack 0] push $N19c32900 Expression { expr0 r expr1 g expr2 b channel3 alpha expr3 parent.gain<1?min((g*parent.gain-(r*parent.balance+b*(1-(parent.balance-1)))/2),(g-(r*parent.balance+b*(1-(parent.balance-1)))/2)):(g*parent.gain-(r*parent.balance+b*(1-(parent.balance-1)))/2) name ExpGreen xpos 402 ypos 76 } Grade { channels alpha whitepoint {{parent.NoOp1.avg}} name despillWhite xpos 402 ypos 102 } set N19c5b330 [stack 0] push $N19c5b330 push $N19c42b50 Switch { inputs 2 which {{parent.sc.b>parent.sc.g?0:1}} name Switch2 xpos 456 ypos 149 } Switch { inputs 3 which {{parent.sto}} name Switch3 xpos 456 ypos 175 } FilterErode { size {{-parent.erode}} filter gaussian mix {{parent.erodeMix}} name despillGaussian xpos 456 ypos 219 disable {{1-parent.enableErode}} } set N19c74f40 [stack 0] Grade { channels alpha gamma {{parent.falloff}} black_clamp false name falloff xpos 346 ypos 264 } set N19c7f520 [stack 0] push $N19c74f40 ChannelMerge { inputs 2 operation max name ChannelMerge1 xpos 456 ypos 257 } push $N19c7f520 push $N19c74f40 ChannelMerge { inputs 2 operation min name ChannelMerge2 xpos 563 ypos 257 disable {{parent.falloff==1?1:0}} } Switch { inputs 2 which {{parent.falloff>1?1:0}} name Switch1 xpos 456 ypos 307 } set N19ca11a0 [stack 0] push $N19c2ece0 push $N19ca11a0 Grade { channels alpha whitepoint {{parent.NoOp1.avb}} white {{parent.ir+1}} reverse true name Grade2 xpos 516 ypos 347 } push $N19c32900 Grade { inputs 1+1 channels rgba add {{parent.tc*(clamp(1/clamp(parent.NoOp1.avb/(parent.ir+1)),0,1000000))-parent.sc*(clamp(1/clamp(parent.NoOp1.avb/(parent.ir+1)),0,1000000))} {parent.tc*(clamp(1/clamp(parent.NoOp1.avb/(parent.ir+1)),0,1000000))-parent.sc*(clamp(1/clamp(parent.NoOp1.avb/(parent.ir+1)),0,1000000))} {parent.tc*(clamp(1/clamp(parent.NoOp1.avb/(parent.ir+1)),0,1000000))-parent.sc*(clamp(1/clamp(parent.NoOp1.avb/(parent.ir+1)),0,1000000))} {curve}} black_clamp false unpremult {{{parent.despillGreen.unpremult}}} name despillBlue xpos 516 ypos 383 } set N19cb43c0 [stack 0] push $N19ca11a0 Grade { channels alpha whitepoint {{parent.NoOp1.avg}} white {{parent.ir+1}} reverse true name Grade4 xpos 402 ypos 348 } push $N19c32900 Grade { inputs 1+1 channels rgba add {{parent.tc*(clamp(1/clamp(parent.NoOp1.avg/(parent.ir+1)),0,inf))-parent.sc*(clamp(1/clamp(parent.NoOp1.avg/(parent.ir+1)),0,inf))} {parent.tc*(clamp(1/clamp(parent.NoOp1.avg/(parent.ir+1)),0,inf))-parent.sc*(clamp(1/clamp(parent.NoOp1.avg/(parent.ir+1)),0,inf))} {parent.tc*(clamp(1/clamp(parent.NoOp1.avg/(parent.ir+1)),0,inf))-parent.sc*(clamp(1/clamp(parent.NoOp1.avg/(parent.ir+1)),0,inf))} {curve}} black_clamp false unpremult -rgba.alpha name despillGreen xpos 402 ypos 383 } set N19ccd5a0 [stack 0] push $N19ccd5a0 push $N19cb43c0 Switch { inputs 2 which {{parent.sc.b>parent.sc.g?0:1}} name Switch4 xpos 456 ypos 453 } Switch { inputs 3 which {{parent.sto}} name Switch5 xpos 456 ypos 479 } push $N19c32900 Merge2 { inputs 2+1 operation copy bbox B maskChannelInput -rgba.alpha mix {{parent.mix}} name Merge1 xpos -84 ypos 479 } Shuffle { alpha black name Shuffle1 xpos -84 ypos 505 disable {{1-spillmatte}} } Copy { inputs 2+1 from0 rgba.alpha to0 rgba.alpha bbox B name Copy2 xpos -84 ypos 545 disable {{1-spillmatte}} } Output { name Output1 xpos -84 ypos 599 } NoOp { inputs 0 name NoOp1 xpos 181 ypos 160 addUserKnob {20 User} addUserKnob {7 avg l alphavalueGreen} avg {{parent.sc.g*clamp(1,parent.gain,inf)-(parent.sc.b*(1-(parent.balance-1))+parent.sc.r*parent.balance)/2}} addUserKnob {7 avb l alphavalueBlue} avb {{parent.sc.b*clamp(1,parent.gain,inf)-(parent.sc.g*(1-(parent.balance-1))+parent.sc.r*parent.balance)/2}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Diffusion.gizmo ================================================ Group { name Diffusion onCreate "n = nuke.thisNode()\nn.knob('size').setRange(0, 300)" tile_color 0xcc804eff note_font "Bitstream Vera Sans Bold" note_font_color 0xffffffff selected true addUserKnob {20 Diffusion} addUserKnob {41 channels T Merge1.also_merge} addUserKnob {26 ""} addUserKnob {41 size T Blur33.size} addUserKnob {7 amount R 0 4} amount 1 addUserKnob {26 text l " " T " "} addUserKnob {7 min} min 1 addUserKnob {7 max} max 1 addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge1.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge1.fringe} addUserKnob {41 mix T Merge1.mix} } Input { inputs 0 name Inputmask xpos -297 ypos 634 number 1 } Input { inputs 0 name Input xpos -458 ypos 115 } Dot { name Dot43 xpos -424 ypos 250 } set Ne65091b0 [stack 0] Dot { name Dot6 note_font_size 41 xpos -424 ypos 334 } set Ne6522bb0 [stack 0] Dot { name Dot3 note_font_size 41 xpos -275 ypos 334 } set Ndf58cc90 [stack 0] Dot { name Dot77 xpos -165 ypos 334 } set Ne5fdeaa0 [stack 0] Dot { name Dot78 xpos -28 ypos 334 } Blur { size 100 name Blur33 label "\[value size]" xpos -62 ypos 366 } push $Ne5fdeaa0 Merge2 { inputs 2 operation minus Achannels none Bchannels none output none also_merge all name Merge36 selected true xpos -199 ypos 371 } Dot { name Dot79 xpos -165 ypos 446 } push $Ndf58cc90 Merge2 { inputs 2 operation plus Achannels none Bchannels none output none also_merge all mix {{parent.amount/13}} name Merge37 xpos -309 ypos 439 } Dot { name Dot4 note_font_size 41 xpos -275 ypos 512 } set Ne5e70760 [stack 0] Dot { name Dot5 note_font_size 41 xpos -275 ypos 572 } push $Ne5e70760 push $Ne6522bb0 Merge2 { inputs 2 operation min Achannels none Bchannels none output none also_merge all mix {{parent.min}} name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -458 ypos 505 } Merge2 { inputs 2 operation max Achannels none Bchannels none output none also_merge all mix {{parent.max}} name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -458 ypos 565 } push $Ne65091b0 Dot { name Dot1 note_font_size 41 xpos -624 ypos 250 } Dot { name Dot2 note_font_size 41 xpos -624 ypos 638 } Merge2 { inputs 2+1 operation copy output none also_merge rgb name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -458 ypos 631 } Output { name Output1 xpos -458 ypos 721 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DirectionalBlur.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { name DirectionalBlur tile_color 0xcc804eff note_font "Lucida Grande Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" note_font_color 0xffffffff selected true addUserKnob {20 DirectionalBlur} addUserKnob {41 channels T MergeKeymix.also_merge} addUserKnob {26 ""} addUserKnob {4 type l Type M {Blur Defocus}} type Defocus addUserKnob {4 filter -STARTLINE M {Impulse Cubic Keys Simon Rifman Mitchell Parzen Notch Lanczos4 Lancsos6 Sinc4 ""}} filter Cubic addUserKnob {6 clampNeg l "Clamp Negatives (if changing filters)" +STARTLINE} addUserKnob {6 blackOutsideBefore l "Black Outside Before Rotation" +STARTLINE} blackOutsideBefore true addUserKnob {7 rotate l Rotate R -180 180} addUserKnob {7 size l Size R 0 100} size 25 addUserKnob {7 additionalBlur l "Perpendicular Blur" R 0 100} addUserKnob {26 ""} addUserKnob {4 bbox l "Set BBox to" M {Union "Mask Intersect" B "Input Format" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""}} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {14 adjustBBox l "Adjust BBox" R 0 100} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Name: t "Add description and tooltip for gizmo" T DirectionalBlur} addUserKnob {26 ver l Version: T v04} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x535e5a00 label "BBox Management" note_font_size 30 note_font_color 0xffffffff xpos -930 ypos 381 bdwidth 538 bdheight 628 } Input { inputs 0 name Input xpos 0 ypos -515 } Dot { name Dot1 note_font_size 41 xpos 34 ypos -421 } set N1d135e0 [stack 0] Dot { name Dot20 note_font_size 41 xpos -135 ypos -421 } set N1d171a0 [stack 0] Dot { name Dot22 note_font_size 41 xpos -135 ypos 31 } set N1d1ae30 [stack 0] AdjBBox { numpixels {{ceil((parent.BBoxCalculator.widthResult*1.5)+(parent.BBoxCalculator.widthResult/4))} {ceil(parent.BBoxCalculator.heightResult*1.5)+(parent.BBoxCalculator.heightResult/4)}} name AdjBBoxSizeRotated xpos -169 ypos 87 } AdjBBox { numpixels {{ceil((parent.additionalBlurBBoxCalculator.widthResult*1.5)+(parent.additionalBlurBBoxCalculator.widthResult/4))} {ceil((parent.additionalBlurBBoxCalculator.heightResult*1.5)+(parent.additionalBlurBBoxCalculator.heightResult/4))}} name AdjBBoxAdditionalBlurRotated xpos -169 ypos 141 } AdjBBox { numpixels {{"ceil(max(input.format.w, input.format.h)*.0025)"}} name AdjBBoxExtra xpos -169 ypos 187 } Dot { name Dot21 note_font_size 41 xpos -135 ypos 254 } push $N1d1ae30 push $N1d135e0 Transform { rotate {{parent.rotate}} center {{input.width/2} {input.height/2}} filter {{parent.filter}} black_outside {{parent.blackOutsideBefore}} name Transform1 xpos 0 ypos -351 } Dot { name Dot125 xpos 34 ypos -293 } set N1d26e70 [stack 0] Dot { name Dot126 xpos 170 ypos -293 } Defocus { defocus {{parent.Blur28.size.w}} scale {1 1e-05} name Defocus6 xpos 136 ypos -256 } Dot { name Dot127 xpos 170 ypos -199 } push $N1d26e70 Blur { size {{parent.size} 0} crop false name Blur28 label "\[value size]" xpos 0 ypos -261 } Switch { inputs 2 which {{parent.type}} name BlurType xpos 0 ypos -202 } Blur { size {0 {parent.additionalBlur}} crop false name Blur1 label "\[value size]" xpos 0 ypos -161 } Transform { rotate {{-parent.Transform1.rotate}} center {{parent.Transform1.center} {parent.Transform1.center}} filter {{parent.filter}} black_outside false name Transform2 xpos 0 ypos -99 } Clamp { maximum_enable false name Clamp1 xpos 0 ypos -39 disable {{!clampNeg}} } Switch { inputs 2 which 1 name Switch1 xpos 0 ypos 28 disable {{"size == 0 && additionalBlur == 0 ? 0 : 1"}} } CopyBBox { inputs 2 name CopyBBox1 xpos 0 ypos 251 } Dot { name Dot17 label A note_font_size 41 xpos 34 ypos 344 } Dot { name Dot7 note_font_size 41 xpos 34 ypos 443 } set N1caf510 [stack 0] Dot { name Dot12 note_font_size 41 xpos -516 ypos 443 } Crop { box {{-adjustBBox.w} {-adjustBBox.h} {parent.width+adjustBBox.w} {parent.height+adjustBBox.h}} intersect true crop false name CopyBBoxFormat xpos -550 ypos 711 } Dot { name Dot16 note_font_size 41 xpos -516 ypos 759 } push $N1d171a0 Dot { name Dot2 note_font_size 41 xpos -768 ypos -421 } Dot { name Dot18 label B note_font_size 41 xpos -768 ypos 323 } Dot { name Dot11 note_font_size 41 xpos -768 ypos 512 } set N1d39c80 [stack 0] Dot { name Dot8 note_font_size 41 xpos -864 ypos 512 } Dot { name Dot15 note_font_size 41 xpos -864 ypos 711 } push $N1d39c80 Input { inputs 0 name Inputmask xpos 346 ypos 202 number 1 } Dot { name Dot5 label Mask note_font_size 41 xpos 380 ypos 332 } set N1d48d30 [stack 0] Dot { name Dot10 note_font_size 41 xpos 270 ypos 332 } push $N1caf510 Merge2 { inputs 2 bbox intersection Achannels {rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue rgba.alpha} output {rgba.red -rgba.green -rgba.blue rgba.alpha} name MergeIntersection xpos 236 ypos 436 disable {{"!\[exists parent.input1]"}} } Merge2 { inputs 2 Achannels {rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue rgba.alpha} output {rgba.red -rgba.green -rgba.blue rgba.alpha} name MergeUnion xpos 236 ypos 505 disable {{"!\[exists parent.input1]"}} } Dot { name Dot6 label "intersection\nof (Mask and A) + B" note_font_size 14 note_font_color 0xffffffff xpos 270 ypos 669 } push $N1d48d30 Dot { name Dot4 note_font_size 41 xpos 380 ypos 564 } push $N1caf510 push $N1d39c80 Dot { name Dot3 note_font_size 41 xpos -768 ypos 564 } set N1d650c0 [stack 0] Merge2 { inputs 2+1 operation copy Achannels none Bchannels none output none also_merge rgba name MergeKeymix xpos 0 ypos 557 } Dot { name Dot14 note_font_size 41 xpos 34 ypos 623 } set N1d75b30 [stack 0] push $N1d650c0 CopyBBox { inputs 2 name CopyBBoxUnion xpos -802 ypos 620 disable {{parent.bbox==0?0:1}} } CopyBBox { inputs 2 name CopyBBoxIntersection xpos -802 ypos 666 disable {{"parent.bbox==1 ? 0 : 1"}} } CopyBBox { inputs 2 name CopyBBoxB xpos -802 ypos 708 disable {{"parent.bbox==2 ? 0 : 1"}} } CopyBBox { inputs 2 name CopyBBoxFormatIntersect xpos -802 ypos 756 disable {{"parent.bbox==3 ? 0 : 1"}} } AdjBBox { numpixels {{parent.adjustBBox.w} {parent.adjustBBox.h}} name AdjBBox xpos -802 ypos 805 disable {{"parent.bbox==4 ? 1 : 0"}} } Dot { name Dot9 note_font_size 41 xpos -768 ypos 910 } push $N1d75b30 CopyBBox { inputs 2 name CopyBBox xpos 0 ypos 906 } BlackOutside { name BlackOutside1 xpos 0 ypos 930 disable {{!parent.blackOutside}} } Output { name Output1 xpos 0 ypos 1029 } NoOp { inputs 0 name BBoxCalculator xpos -310 ypos 85 addUserKnob {20 User} addUserKnob {7 angle l Angle R -180 180} angle {{parent.rotate}} addUserKnob {7 length l Length R 0 100} length {{parent.size}} addUserKnob {7 widthResult l "Width Result"} widthResult {{abs(cos(radians(angle))*length)}} addUserKnob {7 heightResult l "Height Result"} heightResult {{abs(sin(radians(angle))*length)}} } NoOp { inputs 0 name additionalBlurBBoxCalculator xpos -317 ypos 143 addUserKnob {20 User} addUserKnob {7 angle l Angle R -180 180} angle {{parent.rotate}} addUserKnob {7 length l Length R 0 100} length {{parent.additionalBlur}} addUserKnob {7 widthResult l "Width Result"} widthResult {{abs(sin(radians(angle))*length)}} addUserKnob {7 heightResult l "Height Result"} heightResult {{abs(cos(radians(angle))*length)}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Distance3D.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { name Distance3d selected true addUserKnob {20 distance3D} addUserKnob {7 distance} distance {{"sqrt(pow(\[value input0.translate.x]-\[value input1.translate.x], 2) + pow(\[value input0.translate.y]-\[value input1.translate.y], 2) + pow(\[value input0.translate.z]-\[value input1.translate.z], 2)) "}} addUserKnob {26 ""} addUserKnob {26 info l Info: T "This is a pretty handy gizmo to measure the\ndistance between two 3D objects whether its an axis,\ncamera or geometry.\n\nOriginally built to control focus plane in 2d DOF\nor the cameras focus point with an axis!\n\nenjoy. fp"} } Input { inputs 0 name InputPoint2 xpos 348 ypos -334 number 1 } Input { inputs 0 name InputPoint1 xpos 199 ypos -330 } MergeGeo { inputs 2 name MergeGeo1 xpos 285 ypos -241 addUserKnob {20 User} addUserKnob {7 test t "sqrt(pow(\[value input1.tranlate.x]-\[value input2.tranlate.x], 2) + pow(\[value input1.tranlate.y]-\[value input2.tranlate.y], 2) + pow(\[value input1.tranlate.z]-\[value input2.tranlate.z], 2)) "} test {{"sqrt(pow(\[value input0.translate.x]-\[value input1.translate.x], 2) + pow(\[value input0.translate.y]-\[value input1.translate.y], 2) + pow(\[value input0.translate.z]-\[value input1.translate.z], 2)) "}} } Output { name Output1 xpos 285 ypos -141 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DistanceBetween_CS.gizmo ================================================ Group { name DistanceBetween_CS tile_color 0x9c0000ff label "Distance2D: \[value Distance2D]\nDistance3D: \[value Distance3D]" selected true addUserKnob {20 CS_DistanceBetween} addUserKnob {41 ObjectAPosition l "Object A Position" T Reconcile3DA.output} addUserKnob {41 ObjectBPosition l "Object B Position" T Reconcile3DB.output} addUserKnob {7 Distance2D t "Distance between ObjectA and ObjectB in 2D space (X and Y)." R 0 100} Distance2D {{"sqrt( pow2( Reconcile3DB.output.x - Reconcile3DA.output.x ) + pow2( Reconcile3DB.output.y - Reconcile3DA.output.y ) )"}} addUserKnob {7 Distance3D t "Distance between ObjectA and ObjectB in 3D space (X, Y and Z)." R 0 100} Distance3D {{"sqrt( pow2( AxisB.world_matrix.3 - AxisA.world_matrix.3 ) + pow2( AxisB.world_matrix.7 - AxisA.world_matrix.7 ) + pow2( AxisB.world_matrix.11 - AxisA.world_matrix.11 ) )"}} addUserKnob {22 UpdateLabel t "Updates the label of this node in the Node Graph. This could be necessary when values are linked via expressions. The update is executed automatically on frame changes." T nuke.updateUI() +STARTLINE} addUserKnob {26 ""} addUserKnob {26 Creator l "" +STARTLINE T "CS_DistanceBetween v1.1 by Christian Schulze - www.christian-schulze.eu"} } Output { inputs 0 name Output1 xpos -40 ypos 302 } Input { inputs 0 name ObjectA xpos -260 ypos 86 number 1 } Axis2 { name AxisA xpos -250 ypos 162 } Input { inputs 0 name InputCam xpos -150 ypos 86 number 2 } set N4b027c30 [stack 0] Input { inputs 0 name InputFormat xpos 70 ypos 86 number 3 } set N4b05d300 [stack 0] Reconcile3D { inputs 3 calc_output true name Reconcile3DA xpos -150 ypos 176 } Input { inputs 0 name ObjectB xpos 180 ypos 86 } Axis2 { name AxisB xpos 190 ypos 162 } push $N4b027c30 push $N4b05d300 Reconcile3D { inputs 3 calc_output true name Reconcile3DB selected true xpos 70 ypos 176 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DotProductVector2.gizmo ================================================ Group { name DotProductVector2_ help "Calculates the dot product of 2 Vector2 inputs." addUserKnob {20 main_tab l "Dot Product Vector2"} addUserKnob {41 in l "Vector B Layer" t "Layer containing the vector information for input B" T vector_layer.in} addUserKnob {41 in_1 l "Vector A Layer" t "Layer containing the vector information for input A" T vector_layer1.in} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vectorA xpos 457 ypos -6 number 1 } Shuffle { name vector_layer1 xpos 457 ypos 103 } Remove { operation keep channels rgba name Remove2 xpos 457 ypos 129 } Dot { name Dot3 tile_color 0x9e3c6300 xpos 491 ypos 210 } Input { inputs 0 name vectorB xpos 0 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 108 } set N78454e0 [stack 0] Shuffle { name vector_layer xpos 140 ypos 104 } Remove { operation keep channels rgba name Remove1 xpos 140 ypos 130 } MergeExpression { inputs 2 channel0 rgb expr0 Br*Ar+Bg*Ag channel1 none channel2 none channel3 none name MergeExpression1 xpos 140 ypos 206 } Dot { name Dot2 tile_color 0x4b5ec600 xpos 174 ypos 364 } push $N78454e0 ShuffleCopy { inputs 2 in2 none red red green green blue blue out {{{parent.vector_layer.in}}} name ShuffleCopy1 xpos 0 ypos 360 } Output { name Output1 xpos 0 ypos 506 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DotProductVector3.gizmo ================================================ Group { name DotProductVector3_ help "Calculates the dot product of 2 Vector3 inputs." addUserKnob {20 main_tab l "Dot Product Vector3"} addUserKnob {41 in l "Vector B Layer" t "Layer containing the vector information for input B" T vector_layer.in} addUserKnob {41 in_1 l "Vector A Layer" t "Layer containing the vector information for input A" T vector_layer1.in} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vectorA xpos 457 ypos -6 number 1 } Shuffle { name vector_layer1 xpos 457 ypos 103 } Remove { operation keep channels rgba name Remove2 xpos 457 ypos 129 } Dot { name Dot3 tile_color 0x9e3c6300 xpos 491 ypos 210 } Input { inputs 0 name vectorB xpos 0 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 108 } set N79e48f0 [stack 0] Shuffle { name vector_layer xpos 140 ypos 104 } Remove { operation keep channels rgba name Remove1 xpos 140 ypos 130 } MergeExpression { inputs 2 channel0 rgb expr0 Br*Ar+Bg*Ag+Bb*Ab channel1 none channel2 none channel3 none name MergeExpression1 xpos 140 ypos 206 } Dot { name Dot2 tile_color 0x4b5ec600 xpos 174 ypos 364 } push $N79e48f0 ShuffleCopy { inputs 2 in2 none red red green green blue blue out {{{parent.vector_layer.in}}} name ShuffleCopy1 xpos 0 ypos 360 } Output { name Output1 xpos 0 ypos 506 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_DummyCam.gizmo ================================================ Camera { projection_mode {{"\[expression \[value the_cam]projection_mode(\[value the_frame])]"}} focal {{"\[expression \[value the_cam]focal(\[value the_frame])]"}} haperture {{"\[expression \[value the_cam]haperture(\[value the_frame])]"}} vaperture {{"\[expression \[value the_cam]vaperture(\[value the_frame])]"}} near {{"\[expression \[value the_cam]near(\[value the_frame])]"}} far {{"\[expression \[value the_cam]far(\[value the_frame])]"}} win_translate {{"\[expression \[value the_cam]win_translate.u(\[value the_frame])]"} {"\[expression \[value the_cam]win_translate.v(\[value the_frame])]"}} win_scale {{"\[expression \[value the_cam]win_scale.u(\[value the_frame])]"} {"\[expression \[value the_cam]win_scale.v(\[value the_frame])]"}} winroll {{"\[expression \[value the_cam]winroll(\[value the_frame])]"}} focal_point {{"\[expression \[value the_cam]focal_point(\[value the_frame])]"}} fstop {{"\[expression \[value the_cam]fstop(\[value the_frame])]"}} name DummyCam help "DummyCam by Adrian Pueyo\n\nCamera that apart from the matrices also grabs all the \"Projection\" values from the upstream camera that it's connected to. Turns into a default Camera if no Camera connected. Can also be used inside of groups and gizmos, as many levels deep as you want :D All using live and super fast TCL.\n\nUpdated v1.1: Now grabs the correct frame too (thanks Erwan Leroy for the idea).\n\nUpdated v1.3: Now accepts Nuke13's Camera3\n\nadrianpueyo.com, 2019-2021" onCreate "n = nuke.thisNode()\nfor k in \[\"projection_mode\",\"focal\",\"haperture\",\"vaperture\",\"near\",\"far\",\"win_translate\",\"win_scale\",\"winroll\",\"focal_point\",\"fstop\"]:\n n\[k].setFlag(0x0000000010000000)" addUserKnob {20 DummyCam l Defaults} addUserKnob {43 the_cam +INVISIBLE} the_cam "\[\n#DummyCam v1.3 - Updated 5 May 2021.\nset starting_point \"this.input0\"\nset default \"this.d_\"\n\n# If cam has no inputs, return the default.\nif \{\[exists \$starting_point]\} \{\n set x \[node \$starting_point]\n\} \{ \n return \$default\n\}\n\nset finished 0\nwhile \{\$finished != 1\} \{\n\n # First look for a Cam or Input or topnode.\n while \{\[class \$x] != \"Camera3\" && \[class \$x] != \"Camera2\" && \[class \$x] != \"Camera\" && \[class \$x] != \"Input\" && \$x != \[topnode \$x]\} \{\n set x \[node \$x.input0]\n \}\n\n # Then, check if node is a cam (and return), and otherwise, if it's an input, see if the parent exists and move to it.\n if \{\[class \$x]==\"Camera3\"||\[class \$x]==\"Camera2\"||\[class \$x]==\"Camera\"\} \{\n set x \[append x \".\"]\n return \$x\n \} \{ \n if \{ \[class \$x]==\"Input\" \} \{ \n set inp \"\$x.parent.input\"\n set inputNum \[value \$x.number]\n set inp \[append inp \$inputNum]\n if \{ \[exists \$inp] \} \{\n set x \[node \$inp]\n \} \{ \n set finished 1\n \}\n \} \{ \n set finished 1\n \}\n \}\n\}\nreturn \$default\n]" addUserKnob {43 the_frame +INVISIBLE} the_frame "\[\nset the_camera \[string trimright \[value the_cam] .]\nif \{\[exists \$the_camera]\} \{\n return \[value \$the_camera.frame]\n\} \{ \n return \[frame]\n\}\n]" addUserKnob {4 d_projection_mode l projection M {perspective orthographic uv spherical ""}} addUserKnob {7 d_focal l "focal length" R 0 100} d_focal 50 addUserKnob {7 d_haperture l "horiz aperture" R 0 50} d_haperture 24.576 addUserKnob {7 d_vaperture l "vert aperture" R 0 50} d_vaperture 18.672 addUserKnob {7 d_near l near R 0 10} d_near 0.1 addUserKnob {7 d_far l far R 0 10000} d_far 10000 addUserKnob {30 d_win_translate l "window translate"} addUserKnob {30 d_win_scale l "window scale"} d_win_scale {1 1} addUserKnob {7 d_winroll l "window roll" R 0 45} addUserKnob {7 d_focal_point l "focal distance" R 0 10} d_focal_point 2 addUserKnob {7 d_fstop l fstop R 0 30} d_fstop 16 addUserKnob {26 version l " " t "Updated 5 May 2021" T "
DummyCam v1.3 - adrianpueyo.com, 2019-2021
"} } ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Edge.gizmo ================================================ Group { name Edge help "Edge allows you to extend the proper color out over transparent edges or areas with a lot of motionblur without eroding away the nice detail. This edge extend has some more advanced features like splitting the core matte and final key which allows you to work on motion blur without effecting small details like hair or a swinging rope for example. There is also more control over how you blend the core detail to the extended edge color. This was shown to me years ago by an old comp sup I had and is the same as the edge extend by Frank Reuter. This is my version of it that has evolved a little bit over the years.\n\nInputs\nThere are multiple inputs to Edge but you can just plug in your FG with alpha if you want to use it simplified. Separating Core and Softer keys or using roto with and without motionblur has advantages in certain situations. ie: If you have a thin object this will help maintain solid alpha where you need it.\n\nFG – Foreground plate with Spill suppression applied\nCore – This is like a core matte, it helps identify the leading edge and where the edge tool should start from. It is important to add this core so that small details are not lost like a thin rope or hair.\nKey – This is your Key with fine hair details and transparent motion blurred edges. For Roto you want to have motion blur turned on.\nBG – This is where your Background goes if you are using the node as Final Result\nMask - Currently this only works if you are using Edge in Final result." tile_color 0x990000 label "\[value iterations]" selected true addUserKnob {20 User l Extend} addUserKnob {6 xxx_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {41 in l channels T Shuffle2.in} addUserKnob {4 operation t "Here you can choose if you want to use the Edge Tool to merge together your foreground and background giving you the Final Result or if you would like the Intermediate Result which is unpremultiplied and not merged over the background. The Intermediate Result can be helpful when tweaking parameters like the edgegrow start and edgegrow size." M {Final Intermediate "" ""}} operation Intermediate addUserKnob {6 previewedgematte l "preview edge matte" t "This allows you to preview your edge matte that you can use via the channels created in the edge node or by creating a shuffle using the button at the bottom." -STARTLINE} addUserKnob {6 extendChromaOnly l "extend chroma only" t "This selection will extend only Chroma information by swapping back in the original luminance information." +STARTLINE} addUserKnob {41 exp -STARTLINE T EdgeExpansion.exp} addUserKnob {6 premultiplied t "Select this if your footage is already premultiplied to remove dark edges in the extension." -STARTLINE} addUserKnob {6 clamped l "clamp alpha" t "Select this if your alpha has values below 0 or above 1." -STARTLINE} addUserKnob {26 ""} addUserKnob {14 edgeStart l "slice start" t "Determines where you would like to start bleeding out the color from the inside of your key. It does this with a series of unpremult, blur, premult operations instead of a standard erode." R 0 100} edgeStart 1 addUserKnob {41 iterations l "slice iterations" t "Sets how large the edge with the color bleeding will be from the edge grow start or core matte and how many times this will be duplicated." T EdgeExpansion.iterations} addUserKnob {41 sliceWidth l "slice width" t "The slice width is the amount of blur being applied per slice." T EdgeExpansion.sliceWidth} addUserKnob {41 sliceBlur l INVISIBLE +INVISIBLE T EdgeExpansion.sliceBlur} addUserKnob {26 ""} addUserKnob {7 blurEdgeBlend l "edge blend" t "Helps to soften the transition from the original to the new edge. It tends to erode the bleeding color back inwards if you use high values." R 0 10} addUserKnob {7 blurEdgeBlur l "edge blur" t "This helps soften the transition bringing back original detail. This can sometimes bring back some lighting information instead of having it completely replaced." R 0 10} addUserKnob {7 filterErodeEdgeSmooth l "edge smooth" t "This one will help with extremely large motionblur and completely takes away detail. This should not be used in most cases but if you do use it sparingly." R -10 10} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask -STARTLINE T Merge3.maskChannelMask} addUserKnob {41 inject -STARTLINE T Merge3.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge3.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge3.fringe} addUserKnob {26 ""} addUserKnob {22 edgeShuffleButton l "create edge matte" t "This will generate a shuffle node that isolates the areas of extension which you can use to regrain your edges." T "nuke.root().begin()\nEdgeShuffle = nuke.createNode('Shuffle', inpanel = False)\nEdgeShuffle\['label'].setValue( 'Regrain this edge' )\nEdgeShuffle\['in'].setValue( 'edge' )\nEdgeShuffle\['in2'].setValue( 'none' )\nEdgeShuffle\['red'].setValue('alpha')\nEdgeShuffle\['green'].setValue('alpha')\nEdgeShuffle\['blue'].setValue('alpha')\nEdgeShuffle\['alpha'].setValue('alpha')" +STARTLINE} addUserKnob {26 reminder l "" -STARTLINE T "*** use edge.matte to regrain your edges. ***"} addUserKnob {20 color l Blending} addUserKnob {6 enablecolor l enable t "This tab will help you blending your foreground edges with the background color. it is based off the edge extension in the first tab but you can modify the edge properties to get your desired look." +STARTLINE} addUserKnob {6 colorpreview l preview t "Preview the edge being used for blending with the BG. This helps if you want to modify it further." -STARTLINE} addUserKnob {41 operation_1 l operation t "This is the merge operation you want to use for blending. It is set to average by default but you can use anything you like ie: plus, max, min." T ColorMerge.operation} addUserKnob {7 erodeExpandEdge l "expand edge" t "You can expand or contract the edge created in the extend tab." R -100 100} addUserKnob {7 blurSoftenEdge l "soften edge" t "This blur will help soften the transition of the inside blending edge." R 0 100} addUserKnob {41 mix_1 l "mix fg luma" t "At a value of 1 this will only blend the chroma information but you can mix this back to include the luma info as well." T Copy5.mix} addUserKnob {7 mergeBlendingMix l mix t "Mix Edge Blending result"} mergeBlendingMix 1 addUserKnob {26 ""} addUserKnob {7 BlurBG l "blur bg" t "Blur the details in the background when you blend them so your foreground doesnt look transparent." R 0 100} addUserKnob {26 ""} addUserKnob {20 AdjustBGColor l "adjust bg color" t "Here you can modify the color and saturation of the bg being used for blending. This will anly affect the blending not the actual bg." n 1} AdjustBGColor 0 addUserKnob {41 white l gain T GradeEdgeColor.white} addUserKnob {41 gamma T GradeEdgeColor.gamma} addUserKnob {41 black l lift T GradeEdgeColor.black} addUserKnob {41 saturation T EdgeSat.saturation} addUserKnob {41 mix l INVISIBLE +INVISIBLE T ColorMerge.mix} addUserKnob {20 endGroup n -1} addUserKnob {20 MaskBGLuma l "mask bg luma" t "This section will allow you to preview and isolate the bright areas of the bg to wrap around your foreground. Think of this as a way to have lights wrap arpound your foreground in car comps." n 1} MaskBGLuma 0 addUserKnob {26 maskBgLuma l "mask bg luma"} addUserKnob {6 enableBGMask l "enable bg mask" +STARTLINE} addUserKnob {6 PreviewBG l "preview bg input" -STARTLINE} addUserKnob {41 range l INVISIBLE +INVISIBLE T Keyer1.range} addUserKnob {41 out l "Luma Range" T controler.out} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 info l Info} addUserKnob {26 ""} addUserKnob {26 info_1 l "" +STARTLINE T "\nEdge Version 6.9\nCreated by Rob Bannister\nwww.bannisterpost.com"} addUserKnob {26 help_1 l "" +STARTLINE T "HELP"} } Histogram { inputs 0 name controler xpos -982 ypos 561 } Input { inputs 0 name FG xpos 376 ypos -342 } Unpremult { name Unpremult3 xpos 376 ypos -288 disable {{!parent.premultiplied}} } Dot { name Dot14 xpos 410 ypos -224 } set N209dd000 [stack 0] Input { inputs 0 name Key xpos -215 ypos -318 number 1 } Clamp { name Clamp1 xpos -215 ypos -180 disable {{parent.clamped==0?1:0}} } Switch { inputs 2 which {{"!\[exists parent.input1]"}} name Switch1 xpos -215 ypos -61 } set N209dd800 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -215 ypos 237 } set N20a19000 [stack 0] Dot { name Dot6 xpos -181 ypos 477 } set N20a18c00 [stack 0] push $N209dd800 Input { inputs 0 name Core xpos 791 ypos -331 number 2 } Clamp { name Clamp2 xpos 787 ypos -157 disable {{parent.clamped==0?1:0}} } Switch { inputs 2 which {{"!\[exists parent.input2]"}} name Switch5 xpos 787 ypos -61 } Erode { size {{parent.edgeStart}} name Erode1 label "\[value size]" xpos 787 ypos 22 } Blur { channels alpha size {{parent.blurEdgeBlur}} name Blur_edgeBur label "\[value size]" xpos 787 ypos 126 } set N20a19800 [stack 0] Blur { channels alpha size {{parent.blurEdgeBlend}} name blue_edgeBlend label "\[value size]" xpos 591 ypos 126 } FilterErode { size {{parent.filterErodeEdgeSmooth}} filter gaussian name FilterErode_edgeSmooth label "\[value size]" xpos 591 ypos 224 } set N20a4b800 [stack 0] push $N20a19000 ChannelMerge { inputs 2 operation stencil name ChannelMerge1 xpos -64 ypos 224 } ChannelMerge { inputs 2 operation multiply name ChannelMerge2 xpos -64 ypos 460 } Dot { name Dot17 xpos -30 ypos 691 } set N20a4a800 [stack 0] Dot { name Dot11 xpos -30 ypos 1133 } Input { inputs 0 name BG xpos -1081 ypos -343 number 3 } Dot { name Dot5 xpos -1047 ypos 293 } set N20a4bc00 [stack 0] Dot { name Dot12 xpos -1047 ypos 644 } set N20a6bc00 [stack 0] Keyer { operation "luminance key" range {{parent.controler.out.0} {parent.controler.out.1} 1 1} name Keyer1 xpos -979 ypos 634 } Blur { channels rgba size {{parent.BlurBG}} name Blur2 label "\[value size]" xpos -717 ypos 634 } set N20a6b400 [stack 0] push $N20a4b800 Dot { name Dot7 xpos 625 ypos 344 } set N20a6b000 [stack 0] Dilate { channels alpha size {{parent.erodeExpandEdge}} name DilateColorEdge label "\[value size]" xpos -388 ypos 327 } Blur { channels alpha size {{parent.blurSoftenEdge}} name BlurColorEdge label "\[value size]" xpos -498 ypos 327 } push $N20a19800 push $N209dd000 Shuffle { name Shuffle2 xpos 376 ypos -174 } Remove { channels alpha name Remove1 xpos 376 ypos -113 } Dot { name Dot16 xpos 410 ypos 459 } set N32be1c00 [stack 0] Group { inputs 2 name EdgeExpansion knobChanged "\n\nn = nuke.thisNode()\nk = nuke.thisKnob()\n\nif 'iterations' in k.name(): \n #print int(k.value())\n k.setValue(int(k.value()))\n if k.value()<1:\n k.setValue(1)\n n.begin()\n\n for node in nuke.allNodes():\n if 'static' not in node\['label'].value():\n nuke.delete(node)\n\n slices = int(n\['iterations'].value())-1\n step = 1\n blur_count = 5\n merge_count = 2\n unpremult_count = 4\n num = 1\n for x in range(1,slices+step,step):\n \n a = nuke.createNode('Blur', inpanel=False)\n new_knob = nuke.Int_Knob('exp_value')\n a.addKnob(new_knob)\n a\['exp_value'].setValue(num)\n a.setInput(0, nuke.toNode('Unpremult' + str(unpremult_count)))\n a\['size'].setExpression('parent.sliceWidth*(parent.exp==0?1:exp_value)')\n a\['channels'].setValue('red green blue depth.Z')\n\n b = nuke.createNode('Shuffle', inpanel=False)\n b\['in'].setValue( 'rgba' )\n b\['in2'].setValue( 'depth' )\n b\['out2'].setValue( 'depth' )\n b\['alpha'].setValue('red2')\n\n c = nuke.createNode('Unpremult', inpanel=False)\n c\['channels'].setValue('red green blue alpha')\n c\['alpha'].setValue('depth.Z')\n\n d = nuke.createNode('Blur', inpanel=False)\n new_knob = nuke.Int_Knob('exp_value')\n d.addKnob(new_knob)\n d\['exp_value'].setValue(num)\n d\['size'].setExpression('parent.sliceWidth*(parent.exp==0?1:exp_value)')\n d\['channels'].setValue('rgba')\n\n e = nuke.createNode('Merge2', inpanel=False)\n e\['Achannels'].setValue('red green blue depth.Z')\n e.setInput(1, nuke.toNode('Merge' + str(merge_count)))\n e.setInput(0, nuke.toNode('Blur' + str(blur_count+2)))\n\n merge_count += 1\n blur_count += 2\n unpremult_count += 1\n\n f = nuke.createNode('Blur', inpanel=False)\n new_knob = nuke.Int_Knob('exp_value')\n f.addKnob(new_knob)\n f\['exp_value'].setValue(num)\n f.setInput(0, nuke.toNode('Unpremult' + str(unpremult_count)))\n f\['size'].setExpression('parent.sliceWidth*(parent.exp==0?1:exp_value)')\n f\['channels'].setValue('rgba')\n\n g = nuke.createNode('Shuffle', inpanel=False)\n g\['in'].setValue( 'rgba' )\n g\['in2'].setValue( 'depth' )\n g\['out2'].setValue( 'depth' )\n g\['black'].setValue('alpha')\n\n h = nuke.createNode('Unpremult', inpanel=False)\n h\['channels'].setValue('red green blue depth.Z')\n\n j = nuke.createNode('Blur', inpanel=False)\n new_knob = nuke.Int_Knob('exp_value')\n j.addKnob(new_knob)\n j\['exp_value'].setValue(num)\n j\['size'].setExpression('parent.sliceWidth*(parent.exp==0?1:exp_value)')\n j\['channels'].setValue('red green blue depth.Z')\n\n k = nuke.createNode('Merge2', inpanel=False)\n k.setInput(1, nuke.toNode('Merge' + str(merge_count)))\n k.setInput(0, nuke.toNode('Blur' + str(blur_count+2)))\n\n merge_count += 1\n blur_count += 2\n unpremult_count += 1\n num += 1\n nuke.toNode('Output1').setInput(0, k)\n\n try:\n nuke.toNode('Blur5').setInput(0, nuke.toNode('Unpremult4'))\n except:\n nuke.toNode('Output1').setInput(0, nuke.toNode('Merge2'))\n\n n.end()\n \n\n" note_font_size 25 xpos 787 ypos 449 addUserKnob {20 User} addUserKnob {6 firstrun l "Disable before input" +STARTLINE} firstrun {{"!\[exists parent.input0]"}} addUserKnob {6 exp t "The exponential check box will add a variable to the duplicated blurs that increases as they move outwards from the original edge. This might help if you have a large distance to extend." +STARTLINE} addUserKnob {7 iterations t "Sets how large the edge with the color bleeding will be from the edge grow start or core matte and how many times this will be duplicated. The smaller the width the more detail is preserved.This should be just big enough to reach the edge of the largest areas of motionblur." R 1 25} iterations 5 addUserKnob {7 sliceWidth l "slice width" t "The slice width is the amount of blur being applied per slice." R 1 10} sliceWidth 1 addUserKnob {7 sliceBlur l "slice blur" t "The slice width is the amount of blur being applied per slice." R 1 10} sliceBlur 1 } Input { inputs 0 name Alpha label static xpos -218 ypos -646 number 1 } Input { inputs 0 name RGB label static xpos -64 ypos -772 } Unpremult { name Unpremult1 label static xpos -64 ypos -689 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 label static xpos -64 ypos -653 disable {{parent.firstrun}} } Premult { name Premult1 label static xpos -64 ypos -599 } Shuffle { black alpha out2 depth name Shuffle1 label static xpos -64 ypos -561 } Unpremult { channels {rgba.red rgba.green rgba.blue depth.Z} name Unpremult2 label static xpos -64 ypos -523 } set N32be0000 [stack 0] Blur { channels {rgba.red rgba.green rgba.blue depth.Z} size {{parent.sliceWidth}} name Blur1 label static xpos -64 ypos -428 } Dot { name Dot2 label static xpos -30 ypos -336 } push $N32be0000 Blur { channels {rgba.red rgba.green rgba.blue depth.Z} size {{parent.sliceWidth}} name Blur2 label static xpos 46 ypos -523 } Shuffle { in2 depth alpha red2 out2 depth name Shuffle2 label static xpos 46 ypos -471 } Unpremult { channels rgba alpha depth.Z name Unpremult3 label static xpos 46 ypos -435 } set N32c06c00 [stack 0] Blur { channels rgba size {{parent.sliceWidth}} name Blur3 label static xpos 46 ypos -381 } Merge2 { inputs 2 Achannels {rgba.red rgba.green rgba.blue depth.Z} name Merge1 label static xpos 46 ypos -343 } Dot { name Dot3 label static xpos 80 ypos -237 } push $N32c06c00 Blur { channels rgba size {{parent.sliceWidth}} name Blur4 label static xpos 156 ypos -428 } Shuffle { in2 depth black alpha out2 depth name Shuffle3 label static xpos 156 ypos -390 } Unpremult { channels {rgba.red rgba.green rgba.blue depth.Z} name Unpremult4 label static xpos 156 ypos -350 } set N32c37400 [stack 0] Blur { channels {rgba.red rgba.green rgba.blue depth.Z} size {{parent.sliceWidth}} name Blur5 label static xpos 156 ypos -299 } Merge2 { inputs 2 name Merge2 label static xpos 156 ypos -247 } push $N32c37400 Blur { channels {rgba.red rgba.green rgba.blue depth.Z} size {{parent.sliceWidth*(parent.exp==0?1:exp_value)}} name Blur6 label "\[value size]" addUserKnob {20 User} addUserKnob {3 exp_value} exp_value 1 } Shuffle { in2 depth alpha red2 out2 depth name Shuffle4 } Unpremult { channels rgba alpha depth.Z name Unpremult5 } set N32c36000 [stack 0] Blur { channels rgba size {{parent.sliceWidth*(parent.exp==0?1:exp_value)}} name Blur7 label "\[value size]" addUserKnob {20 User} addUserKnob {3 exp_value} exp_value 1 } Merge2 { inputs 2 Achannels {rgba.red rgba.green rgba.blue depth.Z} name Merge3 } push $N32c36000 Blur { channels rgba size {{parent.sliceWidth*(parent.exp==0?1:exp_value)}} name Blur8 label "\[value size]" addUserKnob {20 User} addUserKnob {3 exp_value} exp_value 1 } Shuffle { in2 depth black alpha out2 depth name Shuffle5 } Unpremult { channels {rgba.red rgba.green rgba.blue depth.Z} name Unpremult6 } set N32c68c00 [stack 0] Blur { channels {rgba.red rgba.green rgba.blue depth.Z} size {{parent.sliceWidth*(parent.exp==0?1:exp_value)}} name Blur9 label "\[value size]" addUserKnob {20 User} addUserKnob {3 exp_value} exp_value 1 } Merge2 { inputs 2 name Merge4 } push $N32c68c00 Blur { channels {rgba.red rgba.green rgba.blue depth.Z} size {{parent.sliceWidth*(parent.exp==0?1:exp_value)}} name Blur10 label "\[value size]" addUserKnob {20 User} addUserKnob {3 exp_value} exp_value 2 } Shuffle { in2 depth alpha red2 out2 depth name Shuffle6 } Unpremult { channels rgba alpha depth.Z name Unpremult7 } set N32ca3800 [stack 0] Blur { channels rgba size {{parent.sliceWidth*(parent.exp==0?1:exp_value)}} name Blur11 label "\[value size]" addUserKnob {20 User} addUserKnob {3 exp_value} exp_value 2 } Merge2 { inputs 2 Achannels {rgba.red rgba.green rgba.blue depth.Z} name Merge5 } push $N32ca3800 Blur { channels rgba size {{parent.sliceWidth*(parent.exp==0?1:exp_value)}} name Blur12 label "\[value size]" addUserKnob {20 User} addUserKnob {3 exp_value} exp_value 2 } Shuffle { in2 depth black alpha out2 depth name Shuffle7 } Unpremult { channels {rgba.red rgba.green rgba.blue depth.Z} name Unpremult8 } set N32ca2400 [stack 0] Blur { channels {rgba.red rgba.green rgba.blue depth.Z} size {{parent.sliceWidth*(parent.exp==0?1:exp_value)}} name Blur13 label "\[value size]" addUserKnob {20 User} addUserKnob {3 exp_value} exp_value 2 } Merge2 { inputs 2 name Merge6 } push $N32ca2400 Blur { channels {rgba.red rgba.green rgba.blue depth.Z} size {{parent.sliceWidth*(parent.exp==0?1:exp_value)}} name Blur14 label "\[value size]" addUserKnob {20 User} addUserKnob {3 exp_value} exp_value 3 } Shuffle { in2 depth alpha red2 out2 depth name Shuffle8 } Unpremult { channels rgba alpha depth.Z name Unpremult9 } set N32cd7000 [stack 0] Blur { channels rgba size {{parent.sliceWidth*(parent.exp==0?1:exp_value)}} name Blur15 label "\[value size]" addUserKnob {20 User} addUserKnob {3 exp_value} exp_value 3 } Merge2 { inputs 2 Achannels {rgba.red rgba.green rgba.blue depth.Z} name Merge7 } push $N32cd7000 Blur { channels rgba size {{parent.sliceWidth*(parent.exp==0?1:exp_value)}} name Blur16 label "\[value size]" addUserKnob {20 User} addUserKnob {3 exp_value} exp_value 3 } Shuffle { in2 depth black alpha out2 depth name Shuffle9 } Unpremult { channels {rgba.red rgba.green rgba.blue depth.Z} name Unpremult10 } set N32d11c00 [stack 0] Blur { channels {rgba.red rgba.green rgba.blue depth.Z} size {{parent.sliceWidth*(parent.exp==0?1:exp_value)}} name Blur17 label "\[value size]" addUserKnob {20 User} addUserKnob {3 exp_value} exp_value 3 } Merge2 { inputs 2 name Merge8 } push $N32d11c00 Blur { channels {rgba.red rgba.green rgba.blue depth.Z} size {{parent.sliceWidth*(parent.exp==0?1:exp_value)}} name Blur18 label "\[value size]" addUserKnob {20 User} addUserKnob {3 exp_value} exp_value 4 } Shuffle { in2 depth alpha red2 out2 depth name Shuffle10 } Unpremult { channels rgba alpha depth.Z name Unpremult11 } set N32d10800 [stack 0] Blur { channels rgba size {{parent.sliceWidth*(parent.exp==0?1:exp_value)}} name Blur19 label "\[value size]" addUserKnob {20 User} addUserKnob {3 exp_value} exp_value 4 } Merge2 { inputs 2 Achannels {rgba.red rgba.green rgba.blue depth.Z} name Merge9 } push $N32d10800 Blur { channels rgba size {{parent.sliceWidth*(parent.exp==0?1:exp_value)}} name Blur20 label "\[value size]" addUserKnob {20 User} addUserKnob {3 exp_value} exp_value 4 } Shuffle { in2 depth black alpha out2 depth name Shuffle11 } Unpremult { channels {rgba.red rgba.green rgba.blue depth.Z} name Unpremult12 } Blur { channels {rgba.red rgba.green rgba.blue depth.Z} size {{parent.sliceWidth*(parent.exp==0?1:exp_value)}} name Blur21 label "\[value size]" addUserKnob {20 User} addUserKnob {3 exp_value} exp_value 4 } Merge2 { inputs 2 name Merge10 selected true } Output { name Output1 label static xpos 156 ypos 4217 } end_group set N209ee900 [stack 0] push $N20a19000 Switch { inputs 2 which {{parent.FinalSwitch.which}} name Switch2 xpos -418 ypos 237 } Dilate { size 50 name Dilate1 label "\[value size]" xpos -608 ypos 224 disable true } set N32d44000 [stack 0] ChannelMerge { inputs 2 operation stencil name ChannelMerge3 xpos -608 ypos 327 } ChannelMerge { inputs 2 operation multiply name ChannelMerge_colormask xpos -608 ypos 627 disable {{!parent.enableBGMask}} } Dot { name Dot4 xpos -574 ypos 702 } set N32d75400 [stack 0] Dot { name Dot10 xpos -573 ypos 1057 } push $N20a6b400 Dot { name Dot13 xpos -683 ypos 993 } Premult { name Premult1 xpos -971 ypos 990 } push $N32d75400 push $N20a18c00 push $N20a4a800 push $N32be1c00 Dot { name Dot1 xpos 410 ypos 565 } set N32d74400 [stack 0] Dot { name Dot18 xpos 190 ypos 565 } Colorspace { colorspace_out YCbCr name Colorspace2 xpos 156 ypos 596 } push $N20a6b000 Dot { name Dot8 xpos 625 ypos 602 } push $N32d74400 push $N209ee900 Dot { name Dot15 xpos 821 ypos 531 } Dot { name Dot3 xpos 821 ypos 733 } Keymix { inputs 3 name Keymix1 xpos 376 ypos 723 } Colorspace { colorspace_out YCbCr name Colorspace1 xpos 266 ypos 729 } Copy { inputs 2 from0 rgba.red to0 rgba.red name Copy1 xpos 156 ypos 723 disable {{!parent.extendChromaOnly}} } Colorspace { colorspace_in YCbCr name Colorspace3 xpos 46 ypos 729 } add_layer {edge edge.red edge.green edge.blue edge.alpha edge.matte} ShuffleCopy { inputs 2 red alpha green alpha blue alpha out edge name ShuffleCopy1 xpos -64 ypos 729 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy2 xpos -215 ypos 723 } Dot { name Dot9 xpos -472 ypos 733 } set N32dbf400 [stack 0] Colorspace { colorspace_out YCbCr name Colorspace4 xpos -506 ypos 434 } push $N20a4bc00 Colorspace { colorspace_out YCbCr name Colorspace6 xpos -791 ypos 289 } Blur { channels rgb size {{parent.BlurBG}} name Blur1 label "\[value size]" xpos -790 ypos 341 } Copy { inputs 2 from0 rgba.red to0 rgba.red from1 rgba.alpha to1 rgba.alpha name Copy5 xpos -790 ypos 421 } Colorspace { colorspace_in YCbCr name Colorspace5 xpos -790 ypos 487 } Grade { black_clamp false name GradeEdgeColor xpos -790 ypos 525 } Saturation { name EdgeSat xpos -790 ypos 563 } push $N32dbf400 Merge2 { inputs 2+1 operation average Achannels rgb output rgb mix {{parent.mergeBlendingMix}} name ColorMerge selected true xpos -791 ypos 730 disable {{!parent.enablecolor}} } set N32dfd400 [stack 0] Dot { name Dot2 xpos -757 ypos 911 } Input { inputs 0 name Mask xpos -1288 ypos 730 number 4 } push $N32dfd400 Premult { name Premult3 xpos -956 ypos 730 } push $N20a6bc00 Merge2 { inputs 2+1 also_merge edge name Merge3 xpos -1081 ypos 730 } Switch { inputs 2 which {{operation}} name FinalSwitch xpos -1081 ypos 908 } Switch { inputs 2 which {{parent.PreviewBG}} name BGPreview xpos -1081 ypos 990 } Copy { inputs 2 from0 rgba.alpha to0 rgba.red name Copy3 xpos -1081 ypos 1050 disable {{parent.colorpreview*-1+1}} } Copy { inputs 2 from0 rgba.alpha to0 rgba.red name Copy4 xpos -1081 ypos 1123 disable {{!parent.previewedgematte}} } Shuffle { out {{{parent.Shuffle2.in}}} name Shuffle3 xpos -1081 ypos 1239 } Output { name Output1 xpos -1081 ypos 1947 } push $N32d44000 push $N32dfd400 Viewer { inputs 2 frame 1 frame_range 100-100 colour_sample_bbox {-0.7646484375 -0.2055664063 -0.7197265625 -0.1782226563} input_process false name Viewer1 xpos -706 ypos 1852 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_EdgeDetectAlias.gizmo ================================================ Group { name EdgeDetectAlias tile_color 0xcc804eff note_font "Bitstream Vera Sans Bold Bold" note_font_color 0xffffffff selected true addUserKnob {20 EdgeAlias} addUserKnob {7 threshold l Threshold} threshold 0.9 addUserKnob {41 size l Blur T Blur1.size} addUserKnob {41 mult l Mult T Grade1.multiply} } Input { inputs 0 name Input1 xpos 278 ypos -386 } Dot { name Dot7 note_font_size 41 xpos 312 ypos -290 } set N29bdb570 [stack 0] Dot { name Dot2 note_font_size 41 xpos 451 ypos -290 } set N29bdf380 [stack 0] Dot { name Dot3 note_font_size 41 xpos 577 ypos -290 } Dilate { channels rgba size 1 name Dilate2 xpos 543 ypos -231 } push $N29bdf380 Invert { channels rgba name Invert1 xpos 417 ypos -257 } Merge2 { inputs 2 operation mask name Merge4 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 417 ypos -231 } Grade { channels rgba blackpoint {{parent.threshold}} name Grade3 xpos 417 ypos -199 } Dot { name Dot8 note_font_size 41 xpos 451 ypos -150 } push $N29bdb570 Dot { name Dot1 note_font_size 41 xpos 202 ypos -290 } Dilate { channels rgba size -1 name Dilate1 xpos 168 ypos -227 } push $N29bdb570 Merge2 { inputs 2 operation stencil name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 278 ypos -227 } Grade { channels rgba blackpoint {{parent.threshold}} name Grade2 xpos 278 ypos -201 } Merge2 { inputs 2 name Merge5 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 278 ypos -154 } Blur { channels rgba size 2 name Blur1 label "\[value size]" xpos 278 ypos -98 } Grade { channels rgba multiply 2 white_clamp true name Grade1 xpos 278 ypos -60 } Shuffle { red alpha green alpha blue alpha name Shuffle1 tile_color 0xffffffff xpos 278 ypos -34 } Output { name Output1 xpos 278 ypos 65 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_EdgeDetectPRO.gizmo ================================================ Group { name EdgeDetectPRO tile_color 0xcc804e00 addUserKnob {20 EdgeDetect} addUserKnob {41 channels T CTRL.channels} addUserKnob {26 IN l "" +STARTLINE T "IN"} addUserKnob {26 line l "" -STARTLINE} addUserKnob {7 in_erode l "IN erode" R -100 100} addUserKnob {7 in_blur l "IN blur" R 0 50} addUserKnob {26 OUT l "" +STARTLINE T "OUT"} addUserKnob {26 line2 l "" -STARTLINE} addUserKnob {7 out_erode l "OUT erode" R -100 100} addUserKnob {7 out_blur l "OUT blur" R 0 50} addUserKnob {26 OVERALL l "" +STARTLINE T "OVERALL"} addUserKnob {26 line03 l "" -STARTLINE} addUserKnob {41 size l Dilate T Dilate1.size} addUserKnob {41 size_1 l Blur T BlurOverall.size} addUserKnob {41 value l Gain T MultiplyOverall.value} addUserKnob {6 clamp -STARTLINE} clamp true addUserKnob {26 ""} addUserKnob {6 enableRotate l "" +STARTLINE +STARTLINE} addUserKnob {41 which l rotate -STARTLINE T Switch1.which} addUserKnob {26 ""} addUserKnob {20 filters l Filters n 1} filters 0 addUserKnob {41 filter l "filter erode" T FilterErodeIN.filter} addUserKnob {41 filter_1 l "filter blur" T BlurIN.filter} addUserKnob {20 endGroup n -1} addUserKnob {20 email l @} addUserKnob {26 email_1 l "" +STARTLINE T "EdgeDetect PRO v2.0
\nby Andrea Geremia
\n
\nandrea.geremia89@gmail.com
\nwww.andreageremia.it
"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x56705aff label rotate note_font_size 42 xpos -2496 ypos -223 bdwidth 2029 bdheight 509 } Input { inputs 0 name Input1 xpos 149 ypos -285 } Dilate { channels {{{parent.CTRL.channels}}} name Dilate1 label "\[value size]" xpos 147 ypos -234 } Dot { name Dot4 xpos 181 ypos -143 } set N46af5a00 [stack 0] Dot { name Dot21 xpos -176 ypos -143 } set N46af7ec0 [stack 0] Dot { name Dot16 xpos -525 ypos -143 } set N46afa460 [stack 0] Matrix { matrix { {0 1 1} {-1 0 1} {-1 -1 0} } name Matrix15 xpos -557 ypos -29 } push $N46afa460 Dot { name Dot5 xpos -658 ypos -143 } set N46a71040 [stack 0] Matrix { matrix { {1 1 1} {-1 0 1} {-1 -1 -1} } name Matrix14 xpos -690 ypos -31 } push $N46a71040 Dot { name Dot14 xpos -788 ypos -143 } set N46a5bb90 [stack 0] Matrix { matrix { {1 1 1} {0 0 0} {-1 -1 -1} } name Matrix13 xpos -820 ypos -29 } push $N46a5bb90 Dot { name Dot13 xpos -934 ypos -143 } set N46a63330 [stack 0] Matrix { matrix { {1 1 1} {1 0 -1} {-1 -1 -1} } name Matrix12 xpos -966 ypos -29 } push $N46a63330 Dot { name Dot12 xpos -1068 ypos -143 } set N46a6aad0 [stack 0] Matrix { matrix { {1 1 0} {1 0 -1} {0 -1 -1} } name Matrix11 xpos -1100 ypos -31 } push $N46a6aad0 Dot { name Dot11 xpos -1219 ypos -143 } set N46a50a40 [stack 0] Matrix { matrix { {1 1 -1} {0 0 0} {1 -1 -1} } name Matrix10 xpos -1251 ypos -32 } push $N46a50a40 Dot { name Dot10 xpos -1351 ypos -143 } set N46a49300 [stack 0] Matrix { matrix { {1 1 -1} {1 0 -1} {1 -1 -1} } name Matrix9 xpos -1385 ypos -34 } push $N46a49300 Dot { name Dot9 xpos -1500 ypos -143 } set N46a31fc0 [stack 0] Matrix { matrix { {1 0 -1} {1 0 -1} {1 0 -1} } name Matrix8 xpos -1534 ypos -31 } push $N46a31fc0 Dot { name Dot8 xpos -1640 ypos -143 } set N46a2fdd0 [stack 0] Matrix { matrix { {1 -1 -1} {1 0 -1} {1 1 -1} } name Matrix7 xpos -1674 ypos -31 } push $N46a2fdd0 Dot { name Dot15 xpos -1745 ypos -143 } set N46a10560 [stack 0] Matrix { matrix { {0 -1 -1} {1 0 -1} {1 1 0} } name Matrix6 xpos -1779 ypos -32 } push $N46a10560 Dot { name Dot7 xpos -1851 ypos -143 } set N46a17ca0 [stack 0] Matrix { matrix { {-1 -1 -1} {1 0 -1} {1 1 1} } name Matrix5 xpos -1885 ypos -31 } push $N46a17ca0 Dot { name Dot6 xpos -1961 ypos -143 } set N46a06770 [stack 0] Matrix { matrix { {-1 -1 -1} {0 0 0} {1 1 1} } name Matrix4 xpos -1995 ypos -32 } push $N46a06770 Dot { name Dot17 xpos -2082 ypos -143 } set N2a2039f0 [stack 0] Matrix { matrix { {-1 -1 -1} {-1 0 1} {1 1 1} } name Matrix3 xpos -2116 ypos -32 } push $N2a2039f0 Dot { name Dot18 xpos -2203 ypos -143 } set N2a20b040 [stack 0] Matrix { matrix { {-1 -1 0} {-1 0 1} {0 1 1} } name Matrix2 xpos -2237 ypos -31 } push $N2a20b040 Dot { name Dot19 xpos -2319 ypos -143 } set N2a212a00 [stack 0] Matrix { matrix { {-1 -1 1} {-1 0 1} {-1 1 1} } name Matrix1 xpos -2353 ypos -31 } push $N2a212a00 Dot { name Dot20 xpos -2452 ypos -143 } Matrix { matrix { {-1 0 1} {-1 0 1} {-1 0 1} } name Matrix0 xpos -2486 ypos -31 } Switch { inputs 16 name Switch1 xpos -1534 ypos 258 } push $N46af7ec0 Matrix { channels {{{parent.CTRL.channels}}} matrix { {{"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(0,0)]"} {"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(0,1)]"} {"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(0,2)]"}} {{"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(1,0)]"} {"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(1,1)]"} {"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(1,2)]"}} {{"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(2,0)]"} {"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(2,1)]"} {"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(2,2)]"}} } name MatrixSUPER xpos -208 ypos 68 } FilterErode { channels {{{parent.CTRL.channels}}} size {{(abs(parent.FilterErodeOUT.size)+abs(parent.FilterErodeIN.size)+parent.BlurOUT.size+parent.BlurIN.size+10)*-1}} name FilterErode1 label "\[value size]" xpos -208 ypos 215 } push $N46af5a00 Dot { name Dot2 label IN note_font_size 30 xpos 239 ypos -96 } FilterErode { channels {{{parent.CTRL.channels}}} size {{parent.in_erode}} name FilterErodeIN label "\[value size]" xpos 205 ypos -44 } Blur { channels {{{parent.CTRL.channels}}} size {{parent.in_blur}} name BlurIN label "\[value size]" selected true xpos 205 ypos 14 } Dot { name Dot3 xpos 239 ypos 169 } push $N46af5a00 Dot { name Dot1 label OUT note_font_size 30 xpos 106 ypos -93 } FilterErode { channels {{{parent.CTRL.channels}}} size {{parent.out_erode}} filter {{FilterErodeIN.filter}} name FilterErodeOUT label "\[value size]" xpos 72 ypos -39 } Blur { channels {{{parent.CTRL.channels}}} size {{parent.out_blur}} filter {{BlurIN.filter}} name BlurOUT label "\[value size]" xpos 72 ypos 15 } Merge2 { inputs 2 operation stencil name Merge1 xpos 72 ypos 166 } Merge2 { inputs 2 operation mask name Merge2 label ROTATE xpos 72 ypos 215 disable {{!parent.enableRotate}} } Blur { channels {{{parent.CTRL.channels}}} name BlurOverall label "\[value size]" xpos 72 ypos 286 } Multiply { channels {{{parent.CTRL.channels}}} name MultiplyOverall label "\[value value]" xpos 72 ypos 340 } Clamp { channels {{{parent.CTRL.channels}}} name Clamp1 xpos 72 ypos 383 disable {{!parent.clamp}} } Output { name Output1 xpos 72 ypos 432 } FilterErode { inputs 0 channels rgba size 0 name CTRL label "\[value size]" xpos 385 ypos -166 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_EdgeFromAlpha.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { name EdgeFromAlpha note_font Verdana selected true mapsize {0.15 0.15} addUserKnob {20 "" l Settings} addUserKnob {41 from0 l "control channel" T Copy2.from0} addUserKnob {41 output T ChannelMerge4.output} addUserKnob {41 blackpoint T Grade1.blackpoint} addUserKnob {41 whitepoint T Grade1.whitepoint} addUserKnob {26 "" l "edge size"} addUserKnob {41 size l inside T ErodeInside.size} addUserKnob {14 ErodeOutside_size l outside R 0 100} ErodeOutside_size 3 addUserKnob {26 "" l "edge blur"} addUserKnob {41 size_3 l inside T BlurInside.size} addUserKnob {41 size_1 l outside T BlurOutside.size} } Input { inputs 0 name Input1 xpos -448 ypos 2 } AddChannels { channels {rgba.red -rgba.green -rgba.blue rgba.alpha} name AddChannels1 xpos -448 ypos 30 } set N37967ad0 [stack 0] push $N37967ad0 Copy { inputs 2 from0 rgba.alpha to0 rgba.red name Copy2 xpos -193 ypos 30 } Clamp { channels {rgba.red -rgba.green -rgba.blue} name Clamp1 xpos -193 ypos 94 } Grade { channels {rgba.red -rgba.green -rgba.blue} black_clamp false name Grade1 xpos -193 ypos 146 } set N36ef2460 [stack 0] Erode { channels {none none none rgba.red} size 3 name ErodeInside xpos -126 ypos 198 } Blur { channels {rgba.red -rgba.green -rgba.blue} name BlurInside xpos -126 ypos 250 } push $N36ef2460 Erode { channels {none none none rgba.red} size {{-parent.ErodeOutside_size.w} {-parent.ErodeOutside_size.h}} name ErodeOutside xpos -264 ypos 199 } Blur { channels {rgba.red -rgba.green -rgba.blue} name BlurOutside xpos -264 ypos 251 } ChannelMerge { inputs 2 A rgba.red operation stencil B rgba.red name ChannelMerge4 xpos -191 ypos 308 } set N36eeda60 [stack 0] Dot { name Dot1 xpos -52 ypos 324 } Dot { name Dot2 xpos -52 ypos 465 } push $N37967ad0 Dot { name Dot3 xpos -414 ypos 416 } push $N36eeda60 Copy { inputs 2 from0 rgba.red to0 rgba.red name Copy1 xpos -191 ypos 407 } Switch { inputs 2 which {{"parent.output == 1" i}} name Switch1 xpos -191 ypos 463 } Output { name Output1 xpos -191 ypos 526 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Edge_Expand.gizmo ================================================ Group { name Edge_Expand inputs 2 help "Expand edges to fix fringing on keys.\nUse after a premult is preferred, but can also help on some other inputs." knobChanged "\nnode = nuke.thisNode()\nknob = nuke.thisKnob()\n\nif knob.name() in \['method']:\n if knob.value() == 'Dilate':\n node\['size_extend'].clearFlag(nuke.INVISIBLE)\n node\['samples'].clearFlag(nuke.INVISIBLE)\n node\['size_warp'].setFlag(nuke.INVISIBLE)\n node\['warp_amount'].setFlag(nuke.INVISIBLE)\n node\['warp_normal'].setFlag(nuke.INVISIBLE)\n node\['size_distort'].setFlag(nuke.INVISIBLE)\n node\['distort_amount'].setFlag(nuke.INVISIBLE)\n node\['blur'].clearFlag(nuke.INVISIBLE)\n elif knob.value() == 'Extend':\n node\['size_extend'].clearFlag(nuke.INVISIBLE)\n node\['samples'].clearFlag(nuke.INVISIBLE)\n node\['size_warp'].setFlag(nuke.INVISIBLE)\n node\['warp_amount'].setFlag(nuke.INVISIBLE)\n node\['warp_normal'].setFlag(nuke.INVISIBLE)\n node\['size_distort'].setFlag(nuke.INVISIBLE)\n node\['distort_amount'].setFlag(nuke.INVISIBLE)\n node\['blur'].clearFlag(nuke.INVISIBLE)\n elif knob.value() == 'Warp':\n node\['size_extend'].setFlag(nuke.INVISIBLE)\n node\['samples'].setFlag(nuke.INVISIBLE)\n node\['size_warp'].clearFlag(nuke.INVISIBLE)\n node\['warp_amount'].clearFlag(nuke.INVISIBLE)\n node\['warp_normal'].clearFlag(nuke.INVISIBLE)\n node\['size_distort'].setFlag(nuke.INVISIBLE)\n node\['distort_amount'].setFlag(nuke.INVISIBLE)\n node\['blur'].clearFlag(nuke.INVISIBLE)\n elif knob.value() == 'Distort':\n node\['size_extend'].setFlag(nuke.INVISIBLE)\n node\['samples'].setFlag(nuke.INVISIBLE)\n node\['size_warp'].setFlag(nuke.INVISIBLE)\n node\['warp_amount'].setFlag(nuke.INVISIBLE)\n node\['warp_normal'].setFlag(nuke.INVISIBLE)\n node\['size_distort'].clearFlag(nuke.INVISIBLE)\n node\['distort_amount'].clearFlag(nuke.INVISIBLE)\n node\['blur'].setFlag(nuke.INVISIBLE)\n\nelif knob.name() in \['samples']:\n if knob.value() > 10:\n knob.setValue(10)\n elif knob.value() < 1:\n knob.setValue(1)\n" tile_color 0xef7033ff label "(\[value method])" addUserKnob {20 User} addUserKnob {4 method l Method t "Dilate: Multiple iterations of Blur and Unpremult of the same input.\nExtend: Recursive iterations of Blur and Unpremult.\nWarp: A vector based method to stretch the edges.\nDistort: A wide distortion which \"grows\" the subject into its matte." M {Dilate Extend Warp Distort}} addUserKnob {6 in_premult l "Input is Premultiplied" -STARTLINE} in_premult true addUserKnob {26 ""} addUserKnob {7 erode t "Erodes the original alpha to get rid of edges." R 0 15} erode 5 addUserKnob {14 edgeblur l "edge blur" t "Use this to soften the transition between the extended area and the core." R 0 100} addUserKnob {26 ""} addUserKnob {14 size_extend l size t "Controls the size of the expansion." R 0 100} size_extend 15 addUserKnob {3 samples t "Controls the amount of samples for the Dilate or Extend Methods. (min:1 max:10)"} samples 10 addUserKnob {14 size_warp l size t "Controls the size of the Warp" +INVISIBLE R 0 100} size_warp 10 addUserKnob {7 warp_amount l "warp amount" +INVISIBLE R 0.5 1} warp_amount 1 addUserKnob {7 warp_normal l "warp normal" t "Rotates the angle of the vector extension." +INVISIBLE R -90 90} addUserKnob {14 size_distort l size t "Controls the size of the distort." +INVISIBLE R 0 100} size_distort 5 addUserKnob {7 distort_amount l "distort amount" +INVISIBLE R 0.5 1} distort_amount 1 addUserKnob {14 blur l "blur expansion" R 0 100} addUserKnob {26 ""} addUserKnob {7 mix_luma l "mix luma"} mix_luma 1 addUserKnob {7 mix_chroma l "mix chroma"} mix_chroma 1 addUserKnob {22 shuffle_edge l "shuffle edge matte" T "node = nuke.thisNode()\nfullName = 'root.' + node.fullName()\nparent_group = fullName.rsplit('.', 1)\[0]\nwith nuke.toNode(parent_group):\n shuffle = nuke.createNode(\"Shuffle\", 'in edge red alpha green alpha blue alpha label \"Edge Matte\"', inpanel=False)\n shuffle.setXpos(node.xpos() + 100)\n shuffle.setYpos(node.ypos())\n shuffle.setInput(0, node)\n\n" +STARTLINE} addUserKnob {6 premult l "premult output" t "Check this box to get the final result of the expension with the original matte.\nUncheck this box to see the result of the expension with a new expended alpha." -STARTLINE} premult true addUserKnob {26 spin_copyright_div l "" +STARTLINE} addUserKnob {26 spin_copyright l "" t "© SPINVFX\nEdge_Expand\nVersion 1.0\n2018" +STARTLINE T "SPINVFX - Version 1.0 - 2018 - Github Page"} } Input { inputs 0 name Inputmask xpos -33 ypos 1325 number 1 } Input { inputs 0 name Input xpos -175 ypos -347 } Dot { name Dot13 tile_color 0xcccccc00 xpos -141 ypos -279 } set N958b9a0 [stack 0] Unpremult { name Unpremult2 xpos -175 ypos -226 disable {{!parent.in_premult}} } set N95d29c0 [stack 0] Erode { size {{parent.erode}} name Erode1 xpos -175 ypos -137 } set N95ccab0 [stack 0] Dot { name Dot1 tile_color 0xcc804e00 xpos -259 ypos -127 } Erode { size {{parent.edgeblur} {parent.edgeblur}} blur 1 name Erode2 xpos -293 ypos -93 } push $N95ccab0 ChannelMerge { inputs 2 operation min name ChannelMerge1 xpos -175 ypos -99 } Dot { name Dot16 tile_color 0x4b5ec600 xpos -141 ypos -22 } set N95ae5d0 [stack 0] push $N958b9a0 Dot { name Dot15 tile_color 0xcccccc00 xpos -438 ypos -279 } set N1956f6a0 [stack 0] ChannelMerge { inputs 2 operation from name ChannelMerge2 xpos -472 ypos -38 } push $N1956f6a0 Dot { name Dot7 tile_color 0xcccccc00 xpos -605 ypos -279 } add_layer {edge edge.red edge.green edge.blue edge.alpha} Copy { inputs 2 from0 rgba.alpha to0 edge.alpha bbox B name Copy5 xpos -639 ypos -32 } Dot { name Dot20 tile_color 0x9e3c6300 xpos -605 ypos 641 } set Nceed720 [stack 0] Dot { name Dot23 tile_color 0x9e3c6300 xpos -612 ypos 1151 } set Nce99110 [stack 0] Dot { name Dot24 tile_color 0x9e3c6300 xpos -612 ypos 1329 } set Nc5922f0 [stack 0] push $Nce99110 push $N95ae5d0 Premult { name Premult2 xpos -175 ypos 51 } Dot { name Dot2 tile_color 0xcccccc00 xpos -141 ypos 108 } set N94727c0 [stack 0] Dot { name Dot11 tile_color 0xcccccc00 xpos -302 ypos 108 } Dot { name Dot12 tile_color 0xcccccc00 xpos -302 ypos 561 } push $N95ae5d0 Dot { name Dot14 tile_color 0x4b5ec600 xpos 253 ypos -22 } Dot { name Dot6 tile_color 0x4b5ec600 xpos 253 ypos 92 } set Nbc9a6530 [stack 0] push $N95d29c0 Dot { name Dot8 tile_color 0xcccccc00 xpos 121 ypos -222 } set Nb3b2ff0 [stack 0] Dot { name Dot5 tile_color 0xcccccc00 xpos 367 ypos -222 } Group { inputs 2 name Distort xpos 333 ypos 153 addUserKnob {20 User} addUserKnob {14 size R 0 100} size {{parent.size_distort} {parent.size_distort}} addUserKnob {7 distort} distort {{parent.distort_amount}} } Input { inputs 0 name Inputcontrol_mask xpos 236 ypos -303 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 label "in \[value in]-->out \[value out]" xpos 235 ypos -248 } set Na9d4d20 [stack 0] Blur { size {{parent.size*10} {parent.size*10}} quality {{int(parent.size*8)}} name Blur2 label "size \[value size]" xpos 360 ypos -121 } push $Na9d4d20 Blur { size {{parent.size} {parent.size}} quality 50 name Blur1 xpos 235 ypos -117 } Merge2 { inputs 2 operation multiply bbox B name Merge2 xpos 234 ypos 5 } Grade { gamma 0.415 name Grade5 xpos 234 ypos 57 } set Nbc8bebd0 [stack 0] Invert { name Invert1 xpos 61 ypos 51 } Multiply { value {{parent.size*2}} name Multiply1 xpos 61 ypos 178 } Dot { name Dot1 tile_color 0x7aa9ff00 xpos 95 ypos 441 } push $Nbc8bebd0 Dot { name Dot2 tile_color 0x7aa9ff00 xpos 269 ypos 123 } set Nbc9dd030 [stack 0] Matrix { matrix { {1 0 -1} {2 0 -2} {1 0 -1} } name Matrix1 xpos 235 ypos 204 } push $Nbc9dd030 Dot { name Dot3 tile_color 0x7aa9ff00 xpos 379 ypos 123 } Matrix { channels rgb matrix { {-1 -2 -1} {0 0 0} {1 2 1} } name Matrix2 xpos 345 ypos 205 } Dot { name Dot4 xpos 379 ypos 260 } ShuffleCopy { inputs 2 red red blue black alpha black name ShuffleCopy1 xpos 236 ypos 256 } Expression { temp_name0 mag temp_expr0 sqrt(pow(r,2)+pow(g,2)+pow(b,2)) expr0 mag!=0?r/mag:0 expr1 mag!=0?g/mag:0 expr2 mag!=0?b/mag:0 name Normalize xpos 236 ypos 321 } Multiply { value -1 name Multiply2 xpos 236 ypos 358 } Merge2 { inputs 2 operation multiply bbox B name Merge1 xpos 236 ypos 437 } Input { inputs 0 name Input xpos 536 ypos -112 } Copy { inputs 2 from0 rgba.red to0 forward.u from1 rgba.green to1 forward.v name Copy1 selected true xpos 536 ypos 425 } IDistort { uv forward uv_scale {{parent.distort}} name IDistort1 xpos 536 ypos 497 } Output { name Output1 xpos 536 ypos 566 } end_group Dot { name Dot4 tile_color 0xcccccc00 xpos 367 ypos 217 } push $Nbc9a6530 push $Nb3b2ff0 Group { inputs 2 name Warp xpos 87 ypos 154 addUserKnob {20 User} addUserKnob {14 size R 0 100} size {{parent.size_warp} {parent.size_warp}} addUserKnob {7 distort} distort {{parent.warp_amount}} addUserKnob {7 normal R -90 90} normal {{parent.warp_normal}} } Input { inputs 0 name Inputcontrol_mask xpos 235 ypos -176 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos 235 ypos -150 } Clamp { name Clamp1 xpos 235 ypos -78 } Blur { size {{parent.size/parent.distort} {parent.size/parent.distort}} quality 50 name Blur1 label "size \[value size]" xpos 235 ypos -27 } Grade { whitepoint 0.5 white_clamp true name Grade2 xpos 235 ypos 81 } set Na9c54a0 [stack 0] Invert { name Invert1 xpos 61 ypos 75 } Multiply { value {{parent.size}} name Multiply1 xpos 61 ypos 113 } Dot { name Dot1 tile_color 0x7aa9ff00 xpos 95 ypos 441 } push $Na9c54a0 Dot { name Dot2 tile_color 0x7aa9ff00 xpos 269 ypos 123 } set Ncebdc20 [stack 0] Matrix { matrix { {1 0 -1} {2 0 -2} {1 0 -1} } name Matrix1 xpos 235 ypos 206 } push $Ncebdc20 Dot { name Dot3 tile_color 0x7aa9ff00 xpos 379 ypos 123 } Matrix { matrix { {-1 -2 -1} {0 0 0} {1 2 1} } name Matrix2 xpos 345 ypos 205 } Dot { name Dot4 xpos 379 ypos 260 } ShuffleCopy { inputs 2 red red blue black alpha black name ShuffleCopy1 xpos 236 ypos 256 } Expression { temp_name0 mag temp_expr0 sqrt(pow(r,2)+pow(g,2)+pow(b,2)) expr0 mag!=0?r/mag:0 expr1 mag!=0?g/mag:0 expr2 mag!=0?b/mag:0 name Normalize xpos 236 ypos 301 } Multiply { value -1 name Multiply2 xpos 236 ypos 327 } Group { name Vectors_Rotation help "Edit the direction of motion vectors" xpos 236 ypos 380 addUserKnob {20 VecRot l "Vectors Rotation"} addUserKnob {7 rotation t "Rotates the vectors direction" R -90 90} rotation {{parent.normal}} } Input { inputs 0 name Input xpos -303 ypos 144 } Expression { temp_name0 angleRad temp_expr0 radians(parent.rotation) expr0 "r * cos(angleRad) - g * sin(angleRad)" expr1 "r * sin(angleRad) + g * cos(angleRad)" name Direction xpos -303 ypos 217 } Output { name Output1 xpos -303 ypos 291 } end_group Merge2 { inputs 2 operation multiply bbox B name Merge1 xpos 236 ypos 437 } Input { inputs 0 name Input xpos 536 ypos -176 } Copy { inputs 2 from0 rgba.red to0 forward.u from1 rgba.green to1 forward.v name Copy1 xpos 536 ypos 425 } IDistort { uv forward uv_scale {{parent.distort}} name IDistort1 selected true xpos 536 ypos 497 } Output { name Output1 xpos 536 ypos 607 } end_group Dot { name Dot9 tile_color 0xcccccc00 xpos 121 ypos 220 } push $N94727c0 Dot { name Dot3 tile_color 0xcccccc00 xpos -9 ypos 108 } Group { name Recursive_Extend xpos -43 ypos 153 addUserKnob {20 User} addUserKnob {14 size R 0 100} size {{parent.size_extend} {parent.size_extend}} addUserKnob {3 samples} samples {{parent.samples}} addUserKnob {26 ""} addUserKnob {7 threshold t "Used to eliminate ugly edges due to small precision error." R 0 0.001} threshold 0.0002 } Input { inputs 0 name Input1 xpos 185 ypos -5 } Clamp { channels alpha name Clamp1 xpos 185 ypos 46 } Dot { name Dot1 tile_color 0x7aa9ff00 xpos 219 ypos 123 } set Nd7b6820 [stack 0] Dot { name Dot2 tile_color 0x7aa9ff00 xpos 396 ypos 123 } Blur { size {{parent.size/parent.samples} {parent.size/parent.samples}} name Blur1 xpos 362 ypos 187 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult1 xpos 362 ypos 225 } push $Nd7b6820 Merge2 { inputs 2 operation under name Merge1 selected true xpos 185 ypos 225 } Dot { name Dot4 tile_color 0x4b5ec600 xpos 219 ypos 325 } set Nd7c9f60 [stack 0] Dot { name Dot5 tile_color 0x4b5ec600 xpos 396 ypos 325 } Blur { size {{parent.size/parent.samples} {parent.size/parent.samples}} name Blur2 xpos 362 ypos 384 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult2 xpos 362 ypos 422 } push $Nd7c9f60 Merge2 { inputs 2 operation under name Merge2 xpos 185 ypos 422 disable {{parent.samples<2}} } Dot { name Dot6 tile_color 0x4b5ec600 xpos 219 ypos 527 } set Nbca9b3d0 [stack 0] Dot { name Dot7 tile_color 0x4b5ec600 xpos 396 ypos 527 } Blur { size {{parent.size/parent.samples} {parent.size/parent.samples}} name Blur3 xpos 362 ypos 586 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult3 xpos 362 ypos 624 } push $Nbca9b3d0 Merge2 { inputs 2 operation under name Merge3 xpos 185 ypos 624 disable {{parent.samples<3}} } Dot { name Dot8 tile_color 0x4b5ec600 xpos 219 ypos 729 } set Nbc842010 [stack 0] Dot { name Dot9 tile_color 0x4b5ec600 xpos 396 ypos 729 } Blur { size {{parent.size/parent.samples} {parent.size/parent.samples}} name Blur4 xpos 362 ypos 788 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult4 xpos 362 ypos 826 } push $Nbc842010 Merge2 { inputs 2 operation under name Merge4 xpos 185 ypos 826 disable {{parent.samples<4}} } Dot { name Dot10 tile_color 0x4b5ec600 xpos 219 ypos 931 } set Naa83510 [stack 0] Dot { name Dot11 tile_color 0x4b5ec600 xpos 396 ypos 931 } Blur { size {{parent.size/parent.samples} {parent.size/parent.samples}} name Blur5 xpos 362 ypos 990 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult5 xpos 362 ypos 1028 } push $Naa83510 Merge2 { inputs 2 operation under name Merge5 xpos 185 ypos 1028 disable {{parent.samples<5}} } Dot { name Dot12 tile_color 0x4b5ec600 xpos 219 ypos 1133 } set N9596430 [stack 0] Dot { name Dot13 tile_color 0x4b5ec600 xpos 396 ypos 1133 } Blur { size {{parent.size/parent.samples} {parent.size/parent.samples}} name Blur6 xpos 362 ypos 1192 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult6 xpos 362 ypos 1230 } push $N9596430 Merge2 { inputs 2 operation under bbox B name Merge6 xpos 185 ypos 1230 disable {{parent.samples<6}} } Dot { name Dot14 tile_color 0x4b5ec600 xpos 219 ypos 1335 } set Nceef380 [stack 0] Dot { name Dot15 tile_color 0x4b5ec600 xpos 396 ypos 1335 } Blur { size {{parent.size/parent.samples} {parent.size/parent.samples}} name Blur7 xpos 362 ypos 1394 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult7 xpos 362 ypos 1432 } push $Nceef380 Merge2 { inputs 2 operation under name Merge7 xpos 185 ypos 1432 disable {{parent.samples<7}} } Dot { name Dot16 tile_color 0x4b5ec600 xpos 219 ypos 1537 } set Ne283e90 [stack 0] Dot { name Dot17 tile_color 0x4b5ec600 xpos 396 ypos 1537 } Blur { size {{parent.size/parent.samples} {parent.size/parent.samples}} name Blur8 xpos 362 ypos 1596 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult8 xpos 362 ypos 1634 } push $Ne283e90 Merge2 { inputs 2 operation under name Merge8 xpos 185 ypos 1634 disable {{parent.samples<8}} } Dot { name Dot18 tile_color 0x4b5ec600 xpos 219 ypos 1739 } set Nbca093e0 [stack 0] Dot { name Dot19 tile_color 0x4b5ec600 xpos 396 ypos 1739 } Blur { size {{parent.size/parent.samples} {parent.size/parent.samples}} name Blur9 xpos 362 ypos 1798 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult9 xpos 362 ypos 1836 } push $Nbca093e0 Merge2 { inputs 2 operation under name Merge9 xpos 185 ypos 1836 disable {{parent.samples<9}} } Dot { name Dot20 tile_color 0x4b5ec600 xpos 219 ypos 1941 } set N3c24b210 [stack 0] Dot { name Dot21 tile_color 0x4b5ec600 xpos 396 ypos 1943 } Blur { size {{parent.size/parent.samples} {parent.size/parent.samples}} name Blur10 xpos 362 ypos 2000 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult10 xpos 362 ypos 2038 } push $N3c24b210 Merge2 { inputs 2 operation under name Merge10 xpos 185 ypos 2038 disable {{parent.samples<10}} } Output { name Output1 xpos 185 ypos 2281 } end_group Dot { name Dot10 tile_color 0xcccccc00 xpos -9 ypos 216 } push $N94727c0 Group { name Dilate xpos -175 ypos 152 addUserKnob {20 User} addUserKnob {14 size R 0 100} size {{parent.size_extend} {parent.size_extend}} addUserKnob {3 samples} samples {{parent.samples}} addUserKnob {7 blending} blending 1 addUserKnob {26 ""} addUserKnob {7 threshold t "Used to eliminate ugly edges due to small precision error." R 0 0.001} threshold 0.0001 } Input { inputs 0 name Input1 xpos 0 ypos -3 } Clamp { channels alpha name Clamp1 xpos 0 ypos 48 } Dot { name Dot3 tile_color 0x7aa9ff00 xpos 34 ypos 123 } set Nbc9dec30 [stack 0] Dot { name Dot22 tile_color 0x7aa9ff00 xpos 34 ypos 323 } set Nbc9b8270 [stack 0] Dot { name Dot23 tile_color 0x7aa9ff00 xpos 34 ypos 525 } set Nbc746e00 [stack 0] Dot { name Dot24 tile_color 0x7aa9ff00 xpos 34 ypos 727 } set Ne2bd260 [stack 0] Dot { name Dot10 tile_color 0x7aa9ff00 xpos 34 ypos 931 } set Nbc84f950 [stack 0] Dot { name Dot12 tile_color 0x7aa9ff00 xpos 34 ypos 1133 } set Naa693c0 [stack 0] Dot { name Dot14 tile_color 0x7aa9ff00 xpos 34 ypos 1333 } set Nc5e8220 [stack 0] Dot { name Dot16 tile_color 0x7aa9ff00 xpos 34 ypos 1535 } set Nd7e8470 [stack 0] Dot { name Dot18 tile_color 0x7aa9ff00 xpos 34 ypos 1737 } set Nbc8e6bf0 [stack 0] Dot { name Dot20 tile_color 0x7aa9ff00 xpos 34 ypos 1941 } Dot { name Dot21 tile_color 0x7aa9ff00 xpos 243 ypos 1941 } Blur { size {{parent.size/parent.samples*10} {parent.size/parent.samples*10}} name Blur10 xpos 209 ypos 1998 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult10 xpos 209 ypos 2036 } push $Nbc8e6bf0 Dot { name Dot19 tile_color 0x7aa9ff00 xpos 243 ypos 1737 } Blur { size {{parent.size/parent.samples*9} {parent.size/parent.samples*9}} name Blur9 xpos 209 ypos 1796 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult9 xpos 209 ypos 1834 } FilterErode { size {{(parent.size/parent.samples)*parent.blending} {(parent.size/parent.samples)*parent.blending}} filter gaussian name FilterErode3 xpos 209 ypos 1860 } Premult { name Premult9 xpos 209 ypos 1898 } push $Nd7e8470 Dot { name Dot17 tile_color 0x7aa9ff00 xpos 243 ypos 1535 } Blur { size {{parent.size/parent.samples*8} {parent.size/parent.samples*8}} name Blur8 xpos 209 ypos 1594 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult8 xpos 209 ypos 1632 } FilterErode { size {{(parent.size/parent.samples)*parent.blending} {(parent.size/parent.samples)*parent.blending}} filter gaussian name FilterErode4 xpos 209 ypos 1658 } Premult { name Premult8 xpos 209 ypos 1696 } push $Nc5e8220 Dot { name Dot15 tile_color 0x7aa9ff00 xpos 243 ypos 1333 } Blur { size {{parent.size/parent.samples*7} {parent.size/parent.samples*7}} name Blur7 xpos 209 ypos 1392 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult7 xpos 209 ypos 1430 } FilterErode { size {{(parent.size/parent.samples)*parent.blending} {(parent.size/parent.samples)*parent.blending}} filter gaussian name FilterErode5 xpos 209 ypos 1456 } Premult { name Premult7 xpos 209 ypos 1494 } push $Naa693c0 Dot { name Dot13 tile_color 0x7aa9ff00 xpos 243 ypos 1133 } Blur { size {{parent.size/parent.samples*6} {parent.size/parent.samples*6}} name Blur6 xpos 209 ypos 1190 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult6 xpos 209 ypos 1228 } FilterErode { size {{(parent.size/parent.samples)*parent.blending} {(parent.size/parent.samples)*parent.blending}} filter gaussian name FilterErode6 xpos 209 ypos 1254 } Premult { name Premult6 xpos 209 ypos 1292 } push $Nbc84f950 Dot { name Dot11 tile_color 0x7aa9ff00 xpos 243 ypos 931 } Blur { size {{parent.size/parent.samples*5} {parent.size/parent.samples*5}} name Blur5 xpos 209 ypos 988 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult5 xpos 209 ypos 1026 } FilterErode { size {{(parent.size/parent.samples)*parent.blending} {(parent.size/parent.samples)*parent.blending}} filter gaussian name FilterErode7 xpos 209 ypos 1052 } Premult { name Premult5 xpos 209 ypos 1090 } push $Ne2bd260 Dot { name Dot9 tile_color 0x7aa9ff00 xpos 243 ypos 729 } Blur { size {{parent.size/parent.samples*4} {parent.size/parent.samples*4}} name Blur4 xpos 209 ypos 788 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult4 xpos 209 ypos 826 } FilterErode { size {{(parent.size/parent.samples)*parent.blending} {(parent.size/parent.samples)*parent.blending}} filter gaussian name FilterErode8 xpos 209 ypos 852 } Premult { name Premult4 xpos 209 ypos 890 } push $Nbc746e00 Dot { name Dot7 tile_color 0x7aa9ff00 xpos 243 ypos 527 } Blur { size {{parent.size/parent.samples*3} {parent.size/parent.samples*3}} name Blur3 xpos 209 ypos 586 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult3 xpos 209 ypos 624 } FilterErode { size {{(parent.size/parent.samples)*parent.blending} {(parent.size/parent.samples)*parent.blending}} filter gaussian name FilterErode9 xpos 209 ypos 650 } Premult { name Premult3 xpos 209 ypos 688 } push $Nbc9b8270 Dot { name Dot5 tile_color 0x7aa9ff00 xpos 243 ypos 325 } Blur { size {{parent.size/parent.samples*2} {parent.size/parent.samples*2}} name Blur2 xpos 209 ypos 384 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult2 xpos 209 ypos 422 } FilterErode { size {{(parent.size/parent.samples)*parent.blending} {(parent.size/parent.samples)*parent.blending}} filter gaussian name FilterErode10 xpos 209 ypos 448 } Premult { name Premult2 xpos 209 ypos 486 } push $Nbc9dec30 Dot { name Dot25 tile_color 0x7aa9ff00 xpos 243 ypos 123 } set Nc5f24c0 [stack 0] Blur { size {{parent.size/parent.samples} {parent.size/parent.samples}} name Blur1 xpos 209 ypos 187 } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult1 xpos 209 ypos 225 } FilterErode { size {{(parent.size/parent.samples)*parent.blending} {(parent.size/parent.samples)*parent.blending}} filter gaussian name FilterErode1 xpos 209 ypos 251 } Premult { name Premult1 xpos 209 ypos 289 } push $Nc5f24c0 Dot { name Dot1 tile_color 0x7aa9ff00 xpos 434 ypos 123 } Merge2 { inputs 2 operation under name Merge1 xpos 400 ypos 289 } Merge2 { inputs 2 operation under name Merge2 xpos 400 ypos 486 disable {{parent.samples<2}} } Merge2 { inputs 2 operation under name Merge3 xpos 400 ypos 688 disable {{parent.samples<3}} } Merge2 { inputs 2 operation under name Merge4 xpos 400 ypos 890 disable {{parent.samples<4}} } Merge2 { inputs 2 operation under name Merge5 xpos 400 ypos 1090 disable {{parent.samples<5}} } Merge2 { inputs 2 operation under name Merge6 xpos 400 ypos 1292 disable {{parent.samples<6}} } Merge2 { inputs 2 operation under name Merge7 xpos 400 ypos 1494 disable {{parent.samples<7}} } Merge2 { inputs 2 operation under name Merge8 xpos 400 ypos 1696 disable {{parent.samples<8}} } Merge2 { inputs 2 operation under name Merge9 xpos 400 ypos 1898 disable {{parent.samples<9}} } Merge2 { inputs 2 operation under name Merge10 xpos 400 ypos 2036 disable {{parent.samples<10}} } Expression { temp_name0 tres temp_expr0 parent.threshold expr0 a>tres?r/a:r expr1 a>tres?g/a:g expr2 a>tres?b/a:b expr3 a>tres?a/a:0 name All_unpremult11 selected true xpos 400 ypos 2062 } Output { name Output1 xpos 400 ypos 2120 } end_group Switch { inputs 4 which {{parent.method}} name Switch1 xpos -175 ypos 296 } Blur { size {{parent.blur} {parent.blur}} name Blur1 xpos -175 ypos 410 disable {{parent.method==3}} } Merge2 { inputs 2 bbox B name Merge1 xpos -175 ypos 557 disable {{parent.method==3}} } Dot { name Dot26 tile_color 0x4b5ec600 xpos -141 ypos 747 } set N175d7d90 [stack 0] push $Nceed720 Dot { name Dot19 tile_color 0x9e3c6300 xpos -489 ypos 641 } Unpremult { name Unpremult1 xpos -523 ypos 666 disable {{!parent.in_premult}} } CopyBBox { inputs 2 name CopyBBox1 xpos -523 ypos 743 } Colorspace { colorspace_out YCbCr name Colorspace1 label "input \[value colorspace_in]\noutput \[value colorspace_out]" xpos -523 ypos 820 } Dot { name Dot21 tile_color 0xcccccc00 xpos -489 ypos 884 } set N7ffeedc0 [stack 0] Dot { name Dot22 tile_color 0xcccccc00 xpos -489 ypos 953 } push $N7ffeedc0 push $N175d7d90 Colorspace { colorspace_out YCbCr name Colorspace3 label "input \[value colorspace_in]\noutput \[value colorspace_out]" xpos -175 ypos 796 } Copy { inputs 2 from0 rgba.red to0 rgba.red bbox B mix {{1-parent.mix_luma}} name Copy2 xpos -175 ypos 874 } Copy { inputs 2 from0 rgba.green to0 rgba.green from1 rgba.blue to1 rgba.blue bbox B mix {{1-parent.mix_chroma}} name Copy3 xpos -175 ypos 937 } Colorspace { colorspace_in YCbCr name Colorspace2 label "input \[value colorspace_in]\noutput \[value colorspace_out]" xpos -175 ypos 994 } Dot { name Dot17 tile_color 0xcccccc00 xpos -141 ypos 1151 } set N8d701ec0 [stack 0] Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha bbox A name Copy1 xpos -327 ypos 1141 } Premult { name Premult1 xpos -327 ypos 1179 } Dot { name Dot18 tile_color 0xcccccc00 xpos -293 ypos 1249 } push $N8d701ec0 Switch { inputs 2 which {{parent.premult}} name Switch2 xpos -175 ypos 1245 } Keymix { inputs 3 channels rgba invertMask true name Keymix1 xpos -175 ypos 1325 disable {{"!\[exists parent.input1] "}} } Dot { name Dot25 tile_color 0x4b5ec600 xpos -141 ypos 1421 } push $Nc5922f0 Copy { inputs 2 from0 rgba.red to0 rgba.red from1 rgba.green to1 rgba.green from2 rgba.blue to2 rgba.blue bbox A name Copy4 xpos -646 ypos 1393 disable {{"!\[exists parent.input0] "}} } set Nbc7870e0 [stack 0] Output { name Output1 xpos -646 ypos 1525 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Edge_RimLight.gizmo ================================================ Group { name Edge_RimLight autolabel nuke.thisNode().name() tile_color 0xff6e00ff note_font "Verdana Bold Bold" note_font_size 11 addUserKnob {20 RimLight} addUserKnob {41 channels T MatrixSUPER.channels} addUserKnob {41 which l rotate T Switch1.which} addUserKnob {26 ""} addUserKnob {20 matrix_1 l Matrix n 1} addUserKnob {41 matrix T MatrixSUPER.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 parameters l Parameters n 1} parameters 0 addUserKnob {41 size l innerEdgeErode T FilterErode_inner.size} addUserKnob {41 filter -STARTLINE T FilterErode_inner.filter} addUserKnob {41 size_1 l innerEdgeBlur T Blur_inner.size} addUserKnob {26 ""} addUserKnob {6 keep_alpha l "keep original alpha" +STARTLINE} addUserKnob {41 size_2 l "alpha Erode" T FilterErode_alpha.size} addUserKnob {41 filter_1 l filter -STARTLINE T FilterErode_alpha.filter} addUserKnob {20 endGroup n -1} addUserKnob {20 email l @} addUserKnob {26 created l "" +STARTLINE T "Tool created by Andrea Geremia"} addUserKnob {26 ""} addUserKnob {26 website l "" +STARTLINE T "andrea.geremia89@gmail.com\nwww.andreageremia.it/tutorial.html"} } Dot { inputs 0 name Dot16 xpos 303 ypos -114 } set N19b730 [stack 0] Matrix { matrix { {0 1 1} {-1 0 1} {-1 -1 0} } name Matrix15 xpos 269 ypos -1 } push $N19b730 Dot { name Dot1 xpos 170 ypos -114 } set N1a2700 [stack 0] Matrix { matrix { {1 1 1} {-1 0 1} {-1 -1 -1} } name Matrix14 xpos 136 ypos -2 } push $N1a2700 Dot { name Dot14 xpos 40 ypos -114 } set N1a9f80 [stack 0] Matrix { matrix { {1 1 1} {0 0 0} {-1 -1 -1} } name Matrix13 xpos 6 ypos -2 } push $N1a9f80 Dot { name Dot13 xpos -106 ypos -114 } set N1b1720 [stack 0] Matrix { matrix { {1 1 1} {1 0 -1} {-1 -1 -1} } name Matrix12 xpos -140 } push $N1b1720 Dot { name Dot12 xpos -240 ypos -114 } set N1b8ec0 [stack 0] Matrix { matrix { {1 1 0} {1 0 -1} {0 -1 -1} } name Matrix11 xpos -274 ypos -2 } push $N1b8ec0 Dot { name Dot11 xpos -391 ypos -114 } set N1c0660 [stack 0] Matrix { matrix { {1 1 -1} {0 0 0} {1 -1 -1} } name Matrix10 xpos -425 ypos -2 } push $N1c0660 Dot { name Dot10 xpos -523 ypos -114 } set N1c7e00 [stack 0] Matrix { matrix { {1 1 -1} {1 0 -1} {1 -1 -1} } name Matrix9 xpos -557 ypos -5 } push $N1c7e00 Dot { name Dot9 xpos -672 ypos -114 } set N184e00 [stack 0] Matrix { matrix { {1 0 -1} {1 0 -1} {1 0 -1} } name Matrix8 xpos -706 ypos -2 } push $N184e00 Dot { name Dot8 xpos -812 ypos -114 } set N177c70 [stack 0] Matrix { matrix { {1 -1 -1} {1 0 -1} {1 1 -1} } name Matrix7 xpos -846 ypos -2 } push $N177c70 Dot { name Dot15 xpos -917 ypos -114 } set N118830 [stack 0] Matrix { matrix { {0 -1 -1} {1 0 -1} {1 1 0} } name Matrix6 xpos -951 ypos -3 } push $N118830 Dot { name Dot7 xpos -1023 ypos -114 } set N1d0b80 [stack 0] Matrix { matrix { {-1 -1 -1} {1 0 -1} {1 1 1} } name Matrix5 xpos -1057 ypos -2 } push $N1d0b80 Dot { name Dot6 xpos -1133 ypos -114 } set N1d81e0 [stack 0] Matrix { matrix { {-1 -1 -1} {0 0 0} {1 1 1} } name Matrix4 xpos -1167 ypos -3 } push $N1d81e0 Dot { name Dot5 xpos -1254 ypos -114 } set N1dfc00 [stack 0] Matrix { matrix { {-1 -1 -1} {-1 0 1} {1 1 1} } name Matrix3 xpos -1288 ypos -3 } push $N1dfc00 Dot { name Dot4 xpos -1375 ypos -114 } set N1eb2e0 [stack 0] Matrix { matrix { {-1 -1 0} {-1 0 1} {0 1 1} } name Matrix2 xpos -1409 ypos -2 } push $N1eb2e0 Dot { name Dot3 xpos -1491 ypos -114 } set N1688b0 [stack 0] Matrix { matrix { {-1 -1 1} {-1 0 1} {-1 1 1} } name Matrix1 xpos -1525 ypos -2 } push $N1688b0 Dot { name Dot2 xpos -1624 ypos -114 } Matrix { matrix { {-1 0 1} {-1 0 1} {-1 0 1} } name Matrix0 xpos -1658 ypos -2 } Switch { inputs 16 name Switch1 xpos -706 ypos 288 } Input { inputs 0 name Input1 xpos 332 ypos 170 } Dot { name Dot18 xpos 366 ypos 217 } set N1f7bf0 [stack 0] Dot { name Dot19 xpos 539 ypos 217 } FilterErode { channels all size 0 name FilterErode_alpha xpos 505 ypos 363 } Dot { name Dot17 xpos 539 ypos 554 } push $N1f7bf0 Matrix { channels rgba matrix { {{"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(0,0)]"} {"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(0,1)]"} {"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(0,2)]"}} {{"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(1,0)]"} {"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(1,1)]"} {"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(1,2)]"}} {{"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(2,0)]"} {"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(2,1)]"} {"\[python nuke.toNode('Matrix'\\ +\\nstr(int(nuke.toNode('Switch1').knob('which').value()))).knob('matrix').value(2,2)]"}} } name MatrixSUPER selected true xpos 332 ypos 274 } FilterErode { channels {{{parent.MatrixSUPER.channels}}} size 0 name FilterErode_inner xpos 332 ypos 391 } Blur { channels {{{parent.MatrixSUPER.channels}}} quality 30 name Blur_inner xpos 332 ypos 478 } Merge2 { inputs 2 operation in name Merge2 xpos 332 ypos 551 disable {{!parent.keep_alpha}} } Output { name Output1 xpos 332 ypos 690 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Emission.gizmo ================================================ Group { name Emission knobChanged "def add_input(group, prefix):\n with group:\n fullname = group.fullName() + '.' + prefix\n if not nuke.exists(fullname):\n input = nuke.nodes.Input()\n input.setName(prefix)\n noop_input = nuke.toNode(prefix+'_input')\n noop_input.setInput(0, input)\n xpos = noop_input.xpos()\n ypos = noop_input.ypos()\n input.setXYpos(xpos, ypos-50)\n\ndef remove_input(group, prefix):\n fullname = group.fullName() + '.' + prefix\n if nuke.exists(fullname):\n nuke.delete(nuke.toNode(fullname))\n\n\ngroup = nuke.thisNode() #the node\nk = nuke.thisKnob() #the knob\nkn = k.name() #the knob name\n\nif kn == 'inputChange':\n if group.input(2):\n group.knob('maskChannelMask').setValue('rgba.alpha')\n else:\n group.knob('maskChannelMask').setValue('none')\n \nelif kn in \['env_method','light_method', 'showPanel']:\n env_method = group\['env_method'].getValue()\n light_method = group\['light_method'].getValue()\n \n #env method\n if env_method == 0: #P\n for knob in \['env_P_label', 'env_P', 'env_P_unpremult']:\n group\[knob].setEnabled(True)\n for knob in \['env_Z_label', 'env_Z', 'env_Z_invert', 'env_Z_unpremult']:\n group\[knob].setEnabled(False)\n \n \n elif env_method == 1: #Z and cam\n for knob in \['env_P_label', 'env_P', 'env_P_unpremult']:\n group\[knob].setEnabled(False)\n for knob in \['env_Z_label', 'env_Z', 'env_Z_invert', 'env_Z_unpremult']:\n group\[knob].setEnabled(True)\n \n \n #light method\n if light_method == 0: #P and Z\n for knob in \['light_P_label', 'light_P', 'light_P_unpremult', 'light_Z_label', 'light_Z', 'light_Z_invert', 'light_Z_unpremult', 'light_color_label', 'light_color', 'light_color_premult']:\n group\[knob].setEnabled(True)\n \n elif light_method == 1: #P and cam\n for knob in \['light_P_label', 'light_P', 'light_P_unpremult', 'light_color_label', 'light_color', 'light_color_premult']:\n group\[knob].setEnabled(True)\n for knob in \['light_Z_label', 'light_Z', 'light_Z_invert', 'light_Z_unpremult']:\n group\[knob].setEnabled(False)\n \n elif light_method == 2: #Z and cam\n for knob in \['light_P_label', 'light_P', 'light_P_unpremult']:\n group\[knob].setEnabled(False)\n for knob in \['light_Z_label', 'light_Z', 'light_Z_invert', 'light_Z_unpremult', 'light_color_label', 'light_color', 'light_color_premult']:\n group\[knob].setEnabled(True)\n \n if env_method == 1 or light_method == 1 or light_method == 2:\n add_input(group, 'cam')\n else:\n remove_input(group, 'cam') \n \n\n\n" tile_color 0xc0ffff label v1.2 selected true addUserKnob {20 User l Emission} addUserKnob {26 description l "" +STARTLINE T "Emission v1.2
\nby Nikolai Wüstemann

\n\nRelight the environment input with the light source input.
\nBoth inputs should be CG render elements.\n
\n"} addUserKnob {26 div1 l "Environment"} addUserKnob {26 env_method_label l "I have" T } addUserKnob {4 env_method l "" -STARTLINE M {PWorld "ZDepth and Camera" "" "" ""}} addUserKnob {26 env_P_label l PWorld T } addUserKnob {41 env_P l "" -STARTLINE T Shuffle_env_P.in} addUserKnob {6 env_P_unpremult l unpremult -STARTLINE} addUserKnob {26 env_Z_label l ZDepth +DISABLED T } addUserKnob {41 env_Z l "" -STARTLINE T DepthToPosition_env.depth} addUserKnob {6 env_Z_invert l 1/z t "The ZDepth must be converted to the distance from camera at some point. Check this, if your input comes from the Nuke ScanlineRenderer." -STARTLINE +DISABLED} env_Z_invert true addUserKnob {6 env_Z_unpremult l unpremult t "The ZDepth needs to be unpremultiplied at some point, if it comes premultiplied from the renderer." -STARTLINE +DISABLED} addUserKnob {26 spacer_01 l "" +STARTLINE T " "} addUserKnob {26 env_N_label l Normals T } addUserKnob {41 env_N l "" -STARTLINE T Shuffle_env_N.in} addUserKnob {6 env_N_unpremult l unpremult -STARTLINE} addUserKnob {6 env_bg l "replace background with black" +STARTLINE} env_bg true addUserKnob {26 spacer l " " T ""} addUserKnob {26 div2 l "Light Source"} addUserKnob {26 lightSource_method_label l "I have" T } addUserKnob {4 light_method l "" -STARTLINE M {"PWorld and ZDepth" "PWorld and Camera" "ZDepth and Camera"}} addUserKnob {26 light_P_label l PWorld T } addUserKnob {41 light_P l "" -STARTLINE T Shuffle_light_P.in} addUserKnob {6 light_P_unpremult l unpremult t "The PWorld needs to be unpremultiplied at some point, if it comes premultiplied from the renderer." -STARTLINE} addUserKnob {26 light_Z_label l ZDepth T } addUserKnob {41 light_Z l "" -STARTLINE T DepthToPosition_light.depth} addUserKnob {6 light_Z_invert l 1/z -STARTLINE} light_Z_invert true addUserKnob {6 light_Z_unpremult l unpremult -STARTLINE} addUserKnob {26 spacer_02 l "" +STARTLINE T " "} addUserKnob {26 light_color_label l Color T } addUserKnob {41 light_color l "" -STARTLINE T Shuffle_light_Color.in} addUserKnob {6 light_color_premult l "premult " t "The light source color must be premultiplied with its alpha at some point. As objects are moving away from the camera, they occupy less and less screen space and their appearance might be merely defined by anti-aliased and/or semi-transparent pixels. We need to preserve these values, because they give us crucial information about the light source intensity and can then be correctly interpreted in combination with the PWorld pass and the camera position." -STARTLINE} addUserKnob {26 divider_01 l " "} addUserKnob {3 maxSamples l "Max. Samples" t "More samples = longer rendering time"} maxSamples 1000 addUserKnob {6 useMaxSamples l use? -STARTLINE} useMaxSamples true addUserKnob {7 intensity l Intensity R 0 10} intensity 1 addUserKnob {4 falloff l Falloff M {Linear Quadratic Cubic}} falloff Quadratic addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelMask l "" -STARTLINE T Merge_MaskMix.maskChannelMask} addUserKnob {41 inject -STARTLINE T Merge_MaskMix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge_MaskMix.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge_MaskMix.fringe} addUserKnob {41 mix T Merge_MaskMix.mix} } Input { inputs 0 name mask xpos -1337 ypos -429 number 2 } Dot { name Dot32 xpos -1303 ypos 1975 } Input { inputs 0 name environment xpos -1086 ypos -428 } Dot { name Dot24 xpos -1052 ypos 202 } set N551e400 [stack 0] Dot { name Dot13 xpos -1052 ypos 662 } set N551e800 [stack 0] Dot { name Dot1 xpos -1052 ypos 1557 } set N551ec00 [stack 0] Shuffle2 { fromInput1 {{0} B} fromInput2 {{0} B} mappings "4 black -1 -1 rgba.red 0 0 black -1 -1 rgba.green 0 1 black -1 -1 rgba.blue 0 2 rgba.alpha 0 3 rgba.alpha 0 3" name Shuffle_BlackBG xpos -1086 ypos 1801 disable {{!parent.env_bg}} } set N551f000 [stack 0] push $N551ec00 NoOp { inputs 0 name cam_input xpos -203 ypos -313 } Camera { projection_mode {{"\[expression \[value the_cam]projection_mode(\[value the_frame])]"}} focal {{"\[expression \[value the_cam]focal(\[value the_frame])]"}} haperture {{"\[expression \[value the_cam]haperture(\[value the_frame])]"}} vaperture {{"\[expression \[value the_cam]vaperture(\[value the_frame])]"}} near {{"\[expression \[value the_cam]near(\[value the_frame])]"}} far {{"\[expression \[value the_cam]far(\[value the_frame])]"}} win_translate {{"\[expression \[value the_cam]win_translate.u(\[value the_frame])]"} {"\[expression \[value the_cam]win_translate.v(\[value the_frame])]"}} win_scale {{"\[expression \[value the_cam]win_scale.u(\[value the_frame])]"} {"\[expression \[value the_cam]win_scale.v(\[value the_frame])]"}} winroll {{"\[expression \[value the_cam]winroll(\[value the_frame])]"}} focal_point {{"\[expression \[value the_cam]focal_point(\[value the_frame])]"}} fstop {{"\[expression \[value the_cam]fstop(\[value the_frame])]"}} name DummyCam help "DummyCam by Adrian Pueyo\n\nCamera that apart from the matrices also grabs all the \"Projection\" values from the upstream camera that it's connected to. Turns into a default Camera if no Camera connected. Can also be used inside of groups and gizmos, as many levels deep as you want :D All using live and super fast TCL.\n\nUpdated v1.1: Now grabs the correct frame too (thanks Erwan Leroy for the idea).\n\nUpdated v1.3: Now accepts Nuke13's Camera3\n\nadrianpueyo.com, 2019-2021" onCreate "n = nuke.thisNode()\nfor k in \[\"projection_mode\",\"focal\",\"haperture\",\"vaperture\",\"near\",\"far\",\"win_translate\",\"win_scale\",\"winroll\",\"focal_point\",\"fstop\"]:\n n\[k].setFlag(0x0000000010000000)" label v1.3 xpos -193 ypos -138 addUserKnob {20 DummyCam l Defaults} addUserKnob {43 the_cam +INVISIBLE} the_cam "\[\n#DummyCam v1.3 - Updated 5 May 2021.\nset starting_point \"this.input0\"\nset default \"this.d_\"\n\n# If cam has no inputs, return the default.\nif \{\[exists \$starting_point]\} \{\n set x \[node \$starting_point]\n\} \{ \n return \$default\n\}\n\nset finished 0\nwhile \{\$finished != 1\} \{\n\n # First look for a Cam or Input or topnode.\n while \{\[class \$x] != \"Camera3\" && \[class \$x] != \"Camera2\" && \[class \$x] != \"Camera\" && \[class \$x] != \"Input\" && \$x != \[topnode \$x]\} \{\n set x \[node \$x.input0]\n \}\n\n # Then, check if node is a cam (and return), and otherwise, if it's an input, see if the parent exists and move to it.\n if \{\[class \$x]==\"Camera3\"||\[class \$x]==\"Camera2\"||\[class \$x]==\"Camera\"\} \{\n set x \[append x \".\"]\n return \$x\n \} \{ \n if \{ \[class \$x]==\"Input\" \} \{ \n set inp \"\$x.parent.input\"\n set inputNum \[value \$x.number]\n set inp \[append inp \$inputNum]\n if \{ \[exists \$inp] \} \{\n set x \[node \$inp]\n \} \{ \n set finished 1\n \}\n \} \{ \n set finished 1\n \}\n \}\n\}\nreturn \$default\n]" addUserKnob {43 the_frame +INVISIBLE} the_frame "\[\nset the_camera \[string trimright \[value the_cam] .]\nif \{\[exists \$the_camera]\} \{\n return \[value \$the_camera.frame]\n\} \{ \n return \[frame]\n\}\n]" addUserKnob {4 d_projection_mode l projection M {perspective orthographic uv spherical ""}} addUserKnob {7 d_focal l "focal length" R 0 100} d_focal 50 addUserKnob {7 d_haperture l "horiz aperture" R 0 50} d_haperture 24.576 addUserKnob {7 d_vaperture l "vert aperture" R 0 50} d_vaperture 18.672 addUserKnob {7 d_near l near R 0 10} d_near 0.1 addUserKnob {7 d_far l far R 0 10000} d_far 10000 addUserKnob {30 d_win_translate l "window translate"} addUserKnob {30 d_win_scale l "window scale"} d_win_scale {1 1} addUserKnob {7 d_winroll l "window roll" R 0 45} addUserKnob {7 d_focal_point l "focal distance" R 0 10} d_focal_point 2 addUserKnob {7 d_fstop l fstop R 0 30} d_fstop 16 addUserKnob {26 version l " " t "Updated 5 May 2021" T "
DummyCam v1.3 - adrianpueyo.com, 2019-2021
"} } Dot { name Dot12 xpos -169 ypos 355 } set N551fc00 [stack 0] Input { inputs 0 name light_source xpos 882 ypos -447 number 1 } Dot { name Dot5 xpos 916 ypos -334 } set N27a94400 [stack 0] Shuffle { in rgb in2 alpha alpha red2 name Shuffle_light_Color label "\[value in]" xpos 1021 ypos -343 } set C27a94800 [stack 0] Expression { expr0 0 expr1 0 expr2 0 channel3 alpha expr3 "r>0||g>0||b>0 ? 1 : 0" name Expression1 xpos 1021 ypos -239 } push $N27a94400 add_layer {PixelGatherMetadata PixelGatherMetadata.red PixelGatherMetadata.green PixelGatherMetadata.blue PixelGatherMetadata.alpha} add_layer {PixelGatherMask PixelGatherMask.alpha} Group { inputs 2 name PixelGather xpos 882 ypos -245 addUserKnob {20 User l PixelGather} addUserKnob {26 description l "" +STARTLINE T "PixelGather v1.1 by Nikolai Wüstemann

\n\nUtility to collect all input pixels next to each other.
\nUse the mask input to specify the pixels that should be gathered.
\n(Any pixel with alpha value > 0 in the mask input will be fully considered.)
"} addUserKnob {41 channels T STMap_PixelGather.channels} addUserKnob {3 maxPoints l "max points" t "Specify the maximum amount of points you want to have left. If this number is lower than the total amount of points, the input willl be downscaled accordingly. \nNote, that the specified number will not precisely match the final amount of points, because we don't know the exact number of the points that we are left with after the downsampling stage. There might even be scenarios, where downsampling introduces MORE points than before because of the cubic filtering in the scaling process."} maxPoints {{parent.maxSamples}} addUserKnob {6 useMaxPoints l use? -STARTLINE} useMaxPoints {{parent.useMaxSamples}} addUserKnob {4 outputFormat l arrangement t "Change the arrangement of the output.\n\nunchanged:\nDo not gather the pixels, but return original image (downscaled if applicable)\n\nin bbox:\nThe gathered pixels will be arranged in the bounding box, starting at the lower left.\n\nsquare:\nThe gathered pixels will be arranged in a way so that they approximate a square." M {unchanged "in bbox" square "" "" "" "" "" "" "" "" "" ""}} outputFormat "in bbox" addUserKnob {6 cropBBox l "crop to bbox" t "Side note: Unfortunately there is no (stable) way to crop the output to the actual CONTENT instead of just the bounding box, which would simplify a lot of things." -STARTLINE} addUserKnob {41 gatherMetadata l "output metadata" T ShuffleCopy3.out2} addUserKnob {6 writeMetadata l "write metadata layer" -STARTLINE} writeMetadata true addUserKnob {41 gatherMask l "output mask" T ShuffleCopy4.out2} addUserKnob {6 writeMask l "write mask layer" -STARTLINE} writeMask true addUserKnob {20 info l Info} addUserKnob {26 metadataInfo l "" +STARTLINE T "
\nThe RGBA channels of the PixelGatherMetadata-Layer contain the following information:
\nthe iteration space in x or width of content,
\nand the iteration space in y or height of content,
\nhow many pixels were found in total,
\nand how many pixels were gathered.
\n
\nThe Alpha channel of the PixelGatherMask-Layer contains the information
\nhow the downscaling (if max samples was used) affected the binary nature of the samples.
\nUse this channel, to unpremult any layer that came in unpremulted before and needs to stay that way."} } Input { inputs 0 name mask xpos 353 ypos -182 number 1 } Dot { name Dot11 xpos 387 ypos -45 } set N27a95400 [stack 0] Dot { name Dot7 xpos 387 ypos 132 } push $N27a95400 Input { inputs 0 name src xpos 0 ypos -181 } Crop { box {{bbox.x} {bbox.y} {"max(bbox.x+3, bbox.r)"} {bbox.t}} crop false name Crop3 xpos 0 ypos -108 } Copy { inputs 2 from0 rgba.alpha to0 PixelGatherMask.alpha name Copy1 xpos 0 ypos -54 } Dot { name Dot5 xpos 34 ypos 21 } set N2030c800 [stack 0] Remove { name Remove1 xpos 156 ypos 12 } Shuffle { red black green black blue black alpha white name Shuffle2 label "\[value in]" xpos 156 ypos 69 } Merge2 { inputs 2 operation copy name Merge1 xpos 156 ypos 129 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "import convertMergeToMergeAll;convertMergeToMergeAll.convertMergeToMergeAll()"} } Dot { name Dot9 xpos 190 ypos 187 } set N2030d800 [stack 0] push $N2030c800 BlinkScript { inputs 2 recompileCount 165 ProgramGroup 1 KernelDescription "2 \"CountKernel\" iterate pixelWise 7518f6cec91f8fe0a69225e2a35dcf97a15425f0bb8b87dc77592bc1138a794f 3 \"src\" Read Random \"mask\" Read Random \"dst\" Write Random 2 \"maxPoints\" Int 1 AAAAAA== \"useMaxPoints\" Int 1 AAAAAA== 2 \"maxPoints\" 1 1 \"useMaxPoints\" 1 1 2 \"srcconstEdgeColor\" Float 4 1 AAAAAAAAAAAAAAAAAAAAAA== \"maskconstEdgeColor\" Float 4 1 AAAAAAAAAAAAAAAAAAAAAA==" kernelSource "kernel CountKernel : public ImageComputationKernel\{\n Image src;\n Image mask;\n Image dst;\n\n param:\n int maxPoints;\n int useMaxPoints;\n\n void process(int2 pos)\{\n if(pos.x == src.bounds.x1 && pos.y == src.bounds.y1)\{\n int totalPoints = 0;\n \n for(int j = mask.bounds.y1; j < mask.bounds.y2; j++)\{\n for(int i = mask.bounds.x1; i < mask.bounds.x2; i++)\{\n if(mask(i,j,3) > 0)\{\n //Count total amount of samples\n totalPoints++;\n \}\n \}\n \}\n \n int actualPoints = totalPoints;\n if(useMaxPoints == 1)\{\n actualPoints = min(totalPoints, maxPoints);\n \}\n\n float ratio = sqrt((float) actualPoints / totalPoints);\n\n float s = 0.0f;\n float t = 0.0f;\n int x = 0;\n int y = 0;\n\n for(int j = 0; j < src.bounds.height(); j++)\{\n for(int i = 0; i < src.bounds.width(); i++)\{\n s = i / ratio + src.bounds.x1 + 0.5;\n t = j / ratio + src.bounds.y1 + 0.5;\n\n x = src.bounds.x1 + i;\n y = src.bounds.y1 + j;\n\n //Write STMap\n dst(x, y) = float4(s, t, 0, 0);\n \}\n \}\n\n dst(pos.x, pos.y, 2) = ceil(src.bounds.width() * ratio);\n dst(pos.x, pos.y, 3) = ceil(src.bounds.height() * ratio);\n dst(pos.x+1, pos.y, 2) = totalPoints;\n dst(pos.x+1, pos.y, 3) = actualPoints;\n \}\n \}\n\};" rebuild "" CountKernel_maxPoints {{parent.maxPoints}} CountKernel_useMaxPoints {{parent.useMaxPoints}} rebuild_finalise "" name BlinkScript_PixelCount xpos 0 ypos 178 disable {{"type == 2 ? 0 : 1"}} } set N2030dc00 [stack 0] Dot { name Dot18 xpos -290 ypos 187 } set N19090000 [stack 0] Dot { name Dot19 xpos -290 ypos 431 } push $N19090000 Dot { name Dot20 xpos -459 ypos 187 } set N19090800 [stack 0] Crop { box {{bbox.x+1} {bbox.y} {bbox.x+2} {bbox.y+1}} crop false name Crop5 xpos -427 ypos 272 } push $N19090800 Crop { box {{bbox.x} {bbox.y} {bbox.x+1} {bbox.y+1}} crop false name Crop6 xpos -544 ypos 274 } ShuffleCopy { inputs 2 red blue2 green alpha2 blue blue name ShuffleCopy5 xpos -490 ypos 352 } CopyBBox { inputs 2 name CopyBBox2 xpos -490 ypos 428 } Dot { name Dot21 xpos -456 ypos 819 } push $N2030dc00 Expression { expr0 r/width expr1 g/height expr2 b name Expression_Normalize xpos 0 ypos 256 } set Nc796000 [stack 0] push $N2030c800 Dot { name Dot10 xpos -168 ypos 21 } STMap { inputs 2 uv rgb name STMap_SuperSample xpos -202 ypos 343 } set Cc796800 [stack 0] Dot { name Dot16 xpos -168 ypos 600 } set Nc796c00 [stack 0] Dot { name Dot15 xpos -312 ypos 600 } ShuffleCopy { inputs 2 alpha alpha2 black red white green red2 blue green2 alpha out2 PixelGatherMetadata name ShuffleCopy6 xpos -346 ypos 816 disable {{!parent.writeMetadata}} } Dot { name Dot17 xpos -312 ypos 961 } push $Nc796000 push $N2030d800 clone $Cc796800 { inputs 2 xpos 156 ypos 343 selected false } Dot { name Dot3 xpos 190 ypos 404 } push $Nc796000 ShuffleCopy { inputs 2 red blue2 green alpha2 blue black name ShuffleCopy1 xpos 0 ypos 401 } BlinkScript { recompileCount 138 ProgramGroup 1 KernelDescription "2 \"GatherKernel\" iterate pixelWise 2f170194aaef057db556e8c9979f665898ec64fb6d93b0ffc18531dfcc44db25 2 \"src\" Read Random \"dst\" Write Random 3 \"maxPoints\" Int 1 AAAAAA== \"useMaxPoints\" Int 1 AAAAAA== \"outputFormat\" Int 1 AAAAAA== 3 \"maxPoints\" 1 1 \"useMaxPoints\" 1 1 \"outputFormat\" 1 1 0" kernelSource "kernel GatherKernel : public ImageComputationKernel\{\n Image src;\n Image dst;\n\n param:\n int maxPoints;\n int useMaxPoints;\n int outputFormat;\n\n void process(int2 pos)\{\n if(pos.x == src.bounds.x1 && pos.y == src.bounds.y1)\{\n int2 searchStart = int2(src.bounds.x1, src.bounds.y1);\n int2 searchEnd = int2(src.bounds.x1 + (int)src(src.bounds.x1, src.bounds.y1, 0), src.bounds.y1 + (int)src(src.bounds.x1, src.bounds.y1, 1));\n int2 plotStart = int2(src.bounds.x1, src.bounds.y1);\n int2 plotEnd = int2(src.bounds.x2, src.bounds.y2);\n\n if(outputFormat == 2)\{\n int squareLength = (int)ceil(sqrt(src(src.bounds.x1 + 1, src.bounds.y1, 1)));\n plotEnd = int2(src.bounds.x1 + squareLength, src.bounds.y1 + squareLength);\n \}\n\n int actualPoints = 0;\n int s = 0;\n int t = 0;\n int x = plotStart.x;\n int y = plotStart.y;\n\n for(int j = searchStart.y; j < searchEnd.y; j++)\{\n for(int i = searchStart.x; i < searchEnd.x; i++)\{\n if(src(i,j,3) > 0)\{\n actualPoints++;\n\n if(x > plotEnd.x)\{\n x = plotStart.x;\n y++;\n \}\n \n s = i + 0.5;\n t = j + 0.5;\n \n dst(x, y) = float4(s, t, 0, 0);\n x++;\n \}\n \}\n \}\n\n dst(pos.x, pos.y, 2) = plotEnd.x - plotStart.x;\n dst(pos.x, pos.y, 3) = y - plotStart.y + 1;\n dst(pos.x+1, pos.y, 2) = src(src.bounds.x1+1, src.bounds.y1, 0);\n dst(pos.x+1, pos.y, 3) = actualPoints;\n \}\n \}\n\};" rebuild "" GatherKernel_maxPoints {{parent.maxPoints}} GatherKernel_useMaxPoints {{parent.useMaxPoints}} GatherKernel_outputFormat {{parent.outputFormat}} rebuild_finalise "" name BlinkScript_PixelGather xpos 0 ypos 480 disable {{"type == 2 ? 0 : 1"}} } set N17ca800 [stack 0] Dot { name Dot6 xpos 190 ypos 489 } set N17cac00 [stack 0] Dot { name Dot8 xpos 190 ypos 733 } push $N17cac00 Dot { name Dot4 xpos 356 ypos 489 } set N17cb400 [stack 0] Crop { box {{bbox.x+1} {bbox.y} {bbox.x+2} {bbox.y+1}} crop false name Crop4 xpos 388 ypos 574 } push $N17cb400 Crop { box {{bbox.x} {bbox.y} {bbox.x+1} {bbox.y+1}} crop false name Crop1 xpos 271 ypos 576 } ShuffleCopy { inputs 2 red blue2 green alpha2 blue blue name ShuffleCopy2 xpos 325 ypos 654 } CopyBBox { inputs 2 name CopyBBox1 xpos 325 ypos 730 } Dot { name Dot2 xpos 359 ypos 818 } push $N17ca800 Expression { expr0 r/width expr1 g/height name Expression3 xpos 0 ypos 619 disable {{"parent.output == 1 ? 0 : 1"}} } Dot { name Dot1 xpos 34 ypos 728 } push $Nc796c00 STMap { inputs 2 uv rgb filter impulse name STMap_PixelGather xpos -202 ypos 719 } ShuffleCopy { inputs 2 alpha alpha2 black red white green red2 blue green2 alpha out2 PixelGatherMetadata name ShuffleCopy3 xpos -202 ypos 815 disable {{!parent.writeMetadata}} } Switch { inputs 2 which {{outputFormat==0?1:0}} name Switch1 xpos -202 ypos 958 } Dot { name Dot13 xpos -168 ypos 1133 } set N17094000 [stack 0] Dot { name Dot14 xpos -45 ypos 1133 } Dot { name Dot12 xpos -45 ypos 1251 } push $N17094000 Remove { channels PixelGatherMask name Remove2 xpos -202 ypos 1178 } ShuffleCopy { inputs 2 in PixelGatherMask alpha alpha2 black red white green red2 blue green2 alpha out2 PixelGatherMask name ShuffleCopy4 xpos -202 ypos 1248 disable {{!parent.writeMaskLayer}} } Crop { box {{bbox.x} {bbox.y} {bbox.r} {bbox.t}} reformat true crop false name Crop2 xpos -202 ypos 1361 disable {{!parent.cropBBox}} } Output { name Output1 xpos -202 ypos 1414 } end_group Dot { name Dot3 xpos 916 ypos -80 } set N17095c00 [stack 0] Dot { name Dot16 xpos 526 ypos -80 } set Nf1e1a000 [stack 0] Shuffle { in PixelGatherMask in2 alpha name Shuffle_light_Color3 label "\[value in]" xpos 492 ypos -20 } Dot { name Dot19 xpos 526 ypos 176 } set Nf1e1a800 [stack 0] push $N17095c00 Dot { name Dot6 xpos 916 ypos 112 } set Nf1e1ac00 [stack 0] Unpremult { channels all name Unpremult_light_Z xpos 756 ypos 103 disable {{!light_Z_unpremult}} } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy2 xpos 756 ypos 167 } Unpremult { channels all name Unpremult2 xpos 756 ypos 225 disable {{light_Z_unpremult}} } Dot { name Dot23 xpos 790 ypos 285 } set Nf1e1bc00 [stack 0] Dot { name Dot22 xpos 31 ypos 285 } DepthToPosition { inputs 2 invert {{parent.light_Z_invert}} name DepthToPosition_light xpos -3 ypos 352 } Dot { name Dot28 xpos 31 ypos 510 } push $Nf1e1a800 push $Nf1e1a000 Dot { name Dot18 xpos 199 ypos -80 } Shuffle { in P in2 alpha alpha red2 name Shuffle_light_P label "\[value in]" xpos 165 ypos -28 } Unpremult { name Unpremult_light_P xpos 165 ypos 107 disable {{!light_P_unpremult}} } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 165 ypos 167 } Unpremult { name Unpremult1 xpos 165 ypos 228 disable {{light_P_unpremult}} } Dot { name Dot9 xpos 199 ypos 361 } set N1f6ae000 [stack 0] Switch { inputs 2 which {{"light_method==0 || light_method==1 ? 0 : 1"}} name Switch_light_P_method label "\[value this.which]" xpos 165 ypos 501 } Dot { name Dot2 xpos 199 ypos 1186 } push $N17095c00 Dot { name Dot17 xpos 1290 ypos -80 } Shuffle { in PixelGatherMetadata in2 alpha name Shuffle_light_Color2 label "\[value in]" xpos 1256 ypos -4 } Dot { name Dot30 xpos 1290 ypos 1196 } push $Nf1e1a800 Dot { name Dot20 xpos 526 ypos 1014 } push $Nf1e1ac00 Dot { name Dot14 xpos 1029 ypos 112 } Dot { name Dot10 xpos 1029 ypos 862 } set N1ac96000 [stack 0] Dot { name Dot11 xpos 1029 ypos 918 } push $N1ac96000 push $N1f6ae000 Dot { name Dot29 xpos 391 ypos 361 } ColorMatrix { matrix { {{parent.DummyCam.world_matrix.0} {parent.DummyCam.world_matrix.1} {parent.DummyCam.world_matrix.2}} {{parent.DummyCam.world_matrix.4} {parent.DummyCam.world_matrix.5} {parent.DummyCam.world_matrix.6}} {{parent.DummyCam.world_matrix.8} {parent.DummyCam.world_matrix.9} {parent.DummyCam.world_matrix.10}} } invert true name ColorMatrix1 xpos 357 ypos 507 } Add { value {{-parent.DummyCam.world_matrix.3} {-parent.DummyCam.world_matrix.7} {-parent.DummyCam.world_matrix.11} 0} name Add2 xpos 357 ypos 557 } Expression { expr0 -b expr1 -b expr2 -b name Expression5 xpos 357 ypos 620 } push $Nf1e1bc00 Expression { expr0 "\[value DepthToPosition_light.depth]" expr1 "\[value DepthToPosition_light.depth]" expr2 "\[value DepthToPosition_light.depth]" name Expression_light_Z_get label "\[value DepthToPosition_light.depth]" xpos 756 ypos 438 } Expression { expr0 r>0?1/r:1 expr1 g>0?1/g:1 expr2 b>0?1/b:1 name Expression_light_Z_invert xpos 756 ypos 514 disable {{!parent.light_Z_invert}} } Switch { inputs 2 which {{"light_method==0 || light_method==2 ? 0 : 1"}} name Switch_light_Z_method label "\[value this.which]" xpos 756 ypos 614 } Dot { name Dot15 xpos 790 ypos 720 } push $Nf1e1ac00 clone $C27a94800 { xpos 882 ypos 370 selected false } Premult { name Premult2 xpos 882 ypos 448 disable {{!parent.light_color_premult}} } Merge2 { inputs 2 operation multiply name Merge1 xpos 882 ypos 717 } MergeExpression { inputs 2 expr0 "x==bbox.x && y==bbox.y ? A.b : B.r" expr1 "x==bbox.x && y==bbox.y ? A.b : B.g" expr2 "x==bbox.x && y==bbox.y ? A.b : B.b" channel3 alpha expr3 "x==bbox.x && y==bbox.y ? A.b : B.a" name MergeExpression2 xpos 882 ypos 859 } CopyBBox { inputs 2 name CopyBBox1 xpos 882 ypos 915 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy5 xpos 882 ypos 1005 } Dot { name Dot4 xpos 916 ypos 1169 } push $N551e400 Dot { name Dot21 xpos -781 ypos 202 } set N20d62400 [stack 0] Dot { name Dot26 xpos -603 ypos 202 } set N20d62800 [stack 0] Dot { name Dot25 xpos -425 ypos 202 } Shuffle { in N in2 alpha alpha red2 name Shuffle_env_N label "\[value in]" xpos -459 ypos 364 } Unpremult { name Unpremult_env_N xpos -459 ypos 450 disable {{!env_N_unpremult}} } Dot { name Dot8 xpos -425 ypos 1200 } push $N551e800 push $N551fc00 Dot { name Dot27 xpos -169 ypos 557 } push $N20d62800 Unpremult { channels all name Unpremult_env_Z xpos -637 ypos 429 disable {{!env_Z_unpremult}} } DepthToPosition { inputs 2 invert {{parent.env_Z_invert}} name DepthToPosition_env xpos -637 ypos 554 } push $N20d62400 Shuffle { in P in2 alpha alpha red2 name Shuffle_env_P label "\[value in]" xpos -815 ypos 365 } Unpremult { name Unpremult_env_P xpos -815 ypos 438 disable {{!env_P_unpremult}} } Switch { inputs 2 which {{"env_method==0 || env_method==1 ? 0 : 1"}} name Switch_env_P_method label "\[value this.which]" xpos -815 ypos 548 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy4 xpos -815 ypos 653 } Dot { name Dot7 xpos -781 ypos 1194 } BlinkScript { inputs 5 recompileCount 116 ProgramGroup 1 KernelDescription "2 \"EmissionKernel\" iterate pixelWise 5445ff44e6e21eb225990cf422d24f8e0ad674ae14f3be1c3d4fcacd6a881349 6 \"envP\" Read Point \"envN\" Read Point \"lightColor\" Read Random \"lightMetadata\" Read Point \"lightP\" Read Random \"dst\" Write Point 3 \"falloff\" Int 1 AAAAAA== \"formatWidth\" Int 1 AAAAAA== \"formatHeight\" Int 1 AAAAAA== 3 \"falloff\" 1 1 \"formatWidth\" 1 1 \"formatHeight\" 1 1 0" kernelSource "kernel EmissionKernel : public ImageComputationKernel\{\n Image envP;\n Image envN;\n Image lightColor;\n Image lightMetadata;\n Image lightP;\n Image dst;\n \n param:\n int falloff;\n int formatWidth;\n int formatHeight;\n\n void process()\{\n float4 rgb = 0.0f;\n\n //If env has an alpha\n if(envP(3) > 0)\{\n //Loop through all pixels in the light source. Each pixel will act as point light\n for(int j = lightColor.bounds.y1; j <= lightColor.bounds.y1 + lightMetadata(1); j++)\{\n for(int i = lightColor.bounds.x1; i <= lightColor.bounds.x1 + lightMetadata(0); i++)\{\n //Only calculate, if we meet a valid sample.\n //This should mainly be taken care of by the PixelGather group,\n //but still saves a bit of time if we do it here again\n if(lightColor(i,j,3) > 0)\{\n float3 lightVector = float3(lightP(i,j,0) - envP(0), lightP(i,j,1) - envP(1), lightP(i,j,2) - envP(2));\n float lightInfluence = clamp(dot(normalize(lightVector), float3(envN(0), envN(1), envN(2))), 0.0, 1.0);\n float distance = length(lightVector);\n float4 sourceIntensity = lightColor(i, j);\n float falloffIntensity = 1.0;\n\n //Linear falloff\n if(falloff == 0)\{\n falloffIntensity = 1 / distance;\n \}\n //Quadratic falloff\n else if(falloff == 1)\{\n falloffIntensity = 1 / pow(distance, 2);\n \}\n //Cubic falloff\n else if(falloff == 2)\{\n falloffIntensity = 1 / pow(distance, 3);\n \}\n\n //Calculate output intensity\n rgb += sourceIntensity * falloffIntensity * lightInfluence;\n \}\n \}\n \}\n \}\n\n //Prepare output\n float4 rgba = float4(rgb.x, rgb.y, rgb.z, 0);\n\n //Contering the downscaling for max samples\n rgba *= lightMetadata(2) / lightMetadata(3);\n\n //Countering the format\n rgba /= formatWidth * formatHeight;\n\n dst() = rgba;\n \}\n\};" rebuild "" EmissionKernel_falloff {{parent.falloff}} EmissionKernel_formatWidth {{width}} EmissionKernel_formatHeight {{height}} rebuild_finalise "" name BlinkScript_Emission xpos 165 ypos 1396 disable {{"type == 2 ? 0 : 1"}} } Multiply { channels rgba value {{parent.intensity}} name Multiply1 xpos 165 ypos 1473 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy3 xpos 165 ypos 1548 } Premult { name Premult1 xpos 165 ypos 1623 } Merge2 { inputs 2 operation plus output {rgba.red rgba.green rgba.blue -rgba.alpha} maskChannelInput rgba.alpha name Merge2 xpos 165 ypos 1795 } Dot { name Dot33 xpos 199 ypos 1975 } push $N551f000 Merge2 { inputs 2+1 operation copy bbox B Achannels none Bchannels none output none also_merge rgb maskChannelMask none maskChannelInput -rgba.alpha name Merge_MaskMix label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -1086 ypos 1966 } Output { name Output1 xpos -1086 ypos 2060 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_EnvReflect_BB.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { name EnvReflect_Bb_ help "Fake Env reflections using a normals pass only.\n\n\nFeed it with a normals pass through the \"image\" input, and select the right channel for it.\n\n- Antialias normals to get rid of flickering\n\n- Use Env Preview to preview the Envball with transformations\n(works better with cameraSpace Normals)\n\n\n\nHave fun !\n\nby bflat (Bastien Brenot)\nmail@bastienbrenot.com" tile_color 0xffffff selected true addUserKnob {20 User} addUserKnob {41 inNormals l normals T Shuffle24.in} addUserKnob {6 antiAlias l "antiAlias normals" -STARTLINE} antiAlias true addUserKnob {41 input l "Env Input Type" T SphericalTransform3.input} addUserKnob {26 ""} addUserKnob {6 envBlur l "IBL blur :" +STARTLINE} addUserKnob {7 envBlurSize l " " -STARTLINE R 0 500} envBlurSize 250 addUserKnob {26 ""} addUserKnob {20 envExposure l "Env exposure" n 1} addUserKnob {41 mode l "Adjust in" T Exposure3.mode} addUserKnob {41 exposure T Exposure3.red} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 rotateEnv l "rotate Env" n 1} addUserKnob {41 out_rx l rx T SphericalTransform3.out_rx} addUserKnob {41 out_ry l ry T SphericalTransform3.out_ry} addUserKnob {41 out_rz l rz T SphericalTransform3.out_rz} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {20 EnvPreview l "Env Preview" n 1} addUserKnob {6 previewEnv l "preview Env" +STARTLINE} addUserKnob {6 previewOnly l "preview only" -STARTLINE} addUserKnob {41 previewPos l position T previewPosition.translate} addUserKnob {7 previeScale l scale -STARTLINE R 0 3} previeScale 1 addUserKnob {20 endGroup_2 l endGroup n -1} } Input { inputs 0 name Env xpos -449 ypos 170 number 1 } EXPTool { mode Stops gang false green {{red x126 0.2777777924}} blue {{red x126 0.2777777924}} name Exposure3 xpos -449 ypos 213 } SphericalTransform { output "Mirror Ball" format "1024 1024 0 0 1024 1024 1 square_1K" fix true name SphericalTransform3 xpos -449 ypos 267 } set N698007f0 [stack 0] Dot { name Dot1 xpos -291 ypos 276 } SphericalTransform { ry 180 output "Mirror Ball" format "1024 1024 0 0 1024 1024 1 square_1K" fix true name SphericalTransform2 xpos -325 ypos 378 } Keyer { operation "luminance key" range {0 0 1 1} name Keyer1 xpos -325 ypos 440 } Blur { channels rgb size {{parent.envBlurSize}} name Blur2 label "\[value size]" xpos -325 ypos 488 disable {{!parent.envBlur}} } Transform { translate {{parent.previewPosition.translate.x-512.833333} {parent.previewPosition.translate.y-512.833333}} scale {{parent.previeScale/3}} center {512 512} name Transform1 xpos -325 ypos 646 } Input { inputs 0 name Normals xpos -599 ypos 395 } Shuffle { in rgb name Shuffle24 label "\[value in]" xpos -599 ypos 436 } Clamp { channels rgba minimum -1 minimum_enable false MinClampTo -1 name Clamp3 xpos -599 ypos 472 } Expression { expr0 (r+1)/2 expr1 (g+1)/2 expr2 (b+1)/2 name Expression9 label "\[value expr0]" xpos -599 ypos 496 } Matrix { channels rgb matrix { {1 2 1} {2 4 2} {1 2 1} } normalize true name antiAlias_Normals2 xpos -602 ypos 532 disable {{parent.antiAlias==0?1:0}} } push $N698007f0 SphericalTransform { format "1024 1024 0 0 1024 1024 1 square_1K" fix true name SphericalTransform1 xpos -447 ypos 327 } Blur { channels rgb size {{parent.envBlurSize}} name Blur1 label "\[value size]" xpos -447 ypos 472 disable {{!parent.envBlur}} } STMap { inputs 2 channels rgb uv rgb name STMap3 xpos -447 ypos 532 } Multiply { value 0 mix {{parent.previewEnv==1?parent.previewOnly:0}} name Multiply1 label "\[value value]" xpos -447 ypos 574 } Merge2 { inputs 2 mix {{parent.previewEnv}} name Merge1 xpos -447 ypos 646 } Output { name Output1 xpos -447 ypos 797 } Position { inputs 0 translate {171.5 171.5} name previewPosition xpos -216 ypos 573 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ErodeSmooth.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { name ErodeSmooth tile_color 0xcc804eff selected true addUserKnob {20 ErodeSmooth} addUserKnob {4 type l Type M {linear smooth smooth0 smooth1 "" "" "" ""}} addUserKnob {7 range l "Range" R 0.1 0.9} range 0.5 addUserKnob {41 size l Blur T Blur1.size} addUserKnob {7 tighten l Tighten R 0 2} tighten 1 addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge1.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge1.fringe} addUserKnob {41 mix T Merge1.mix} addUserKnob {20 info} addUserKnob {26 author l Author: T "Tony Lyons"} addUserKnob {26 Desc l Description: T ErodeSmooth} } Input { inputs 0 name Inputmask xpos 521 ypos 344 number 1 } Input { inputs 0 name Input xpos 380 ypos 199 } set Na91eae80 [stack 0] Blur { channels rgba size 5 name Blur1 label "\[value size]" xpos 229 ypos 193 } Grade { channels rgba blackpoint {{((.5*tighten)+.25)*range}} whitepoint {{1-((.5*tighten)+.25)*(1-range)}} white_clamp true name Grade9 xpos 229 ypos 231 } ColorLookup { lut {master {curve C k 0 s0 1 s0} red {} green {} blue {} alpha {}} name ColorLookupSmooth xpos 229 ypos 292 disable {{"type == 1 ? 0 : 1"}} } ColorLookup { lut {master {curve C k 0 s0 L 1} red {} green {} blue {} alpha {}} name ColorLookupSmooth0 xpos 229 ypos 318 disable {{"type == 2 ? 0 : 1"}} } ColorLookup { lut {master {curve L 0 C k 1 s0} red {} green {} blue {} alpha {}} name ColorLookupSmooth1 xpos 229 ypos 344 disable {{"type == 3 ? 0 : 1"}} } push $Na91eae80 Merge2 { inputs 2+1 operation copy name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 380 ypos 344 } Output { name Output1 xpos 380 ypos 409 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Erode_Fine.gizmo ================================================ Group { name Erode_Fine inputs 2 help "Erode an image with fine controls, as opposed to Nuke's default erode node." tile_color 0xef7033ff label "\[value size]" note_font "DejaVu Sans" addUserKnob {20 erode_fine l "Fine Erode"} addUserKnob {41 channels T NodeWrapper1.channels} addUserKnob {26 ""} addUserKnob {6 round_filter l "Round Filter" t "Erode the image with a round Filter (well, it's more of a dodecagon... but... you know..) instead of a square filter." +STARTLINE} round_filter false addUserKnob {7 size l Size t "Amount of erode/dilate. Positive values will grow the image, negative values will shrink it." R -10 10} size 0 addUserKnob {26 "" +STARTLINE} addUserKnob {41 maskChannelInput l mask T NodeWrapper1.maskChannelInput} addUserKnob {41 inject -STARTLINE T NodeWrapper1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T NodeWrapper1.invert_mask} addUserKnob {41 fringe -STARTLINE T NodeWrapper1.fringe} addUserKnob {41 mix T NodeWrapper1.mix} addUserKnob {26 spin_copyright_div l "" +STARTLINE} addUserKnob {26 spin_copyright l "" t "© SPINVFX\nErode_Fine\nVersion 1.0\n2018" +STARTLINE T "SPINVFX - Version 1.0 - 2018 - Github Page"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x75667fff label "round dilate trick" note_font_size 40 xpos 212 ypos -67 bdwidth 299 bdheight 618 } Input { inputs 0 name Inputmask xpos 251 ypos 1257 number 1 } Input { inputs 0 name Input xpos -11 ypos -243 } Dot { name Dot15 tile_color 0xcccccc00 xpos 22 ypos -160 } set N70a7ca0 [stack 0] Dot { name Dot3 tile_color 0xcccccc00 xpos 23 ypos 33 } set N70bb480 [stack 0] Dot { name Dot1 tile_color 0xcccccc00 xpos 296 ypos 33 } set N70bff60 [stack 0] Dot { name Dot2 tile_color 0xcccccc00 xpos 415 ypos 33 } AdjBBox { numpixels {{abs(ceil(parent.size)*1.4)+2}} name AdjBBox1 xpos 381 ypos 100 } Dot { name Dot4 tile_color 0xcccccc00 xpos 415 ypos 422 } push $N70bff60 Dilate { size {{"int(parent.size)//3 + (int(parent.size)%3 >= 1)"}} name Dilate1 label "size \[value size]" xpos 262 ypos 97 } Transform { rotate 30 shutteroffset centred name Transform1 label "\[if \{\[value translate.x] != 0 || \[value translate.y] != 0\} then \{return \"t \[value translate.x] \[value translate.y]\n\"\} else \{return \"\"\}]\[if \{\[value rotate] != 0\} then \{return \"r \[value rotate]\n\"\} else \{return \"\"\}] \[if \{\[value scale] != 1\} then \{return \"s \[value scale]\"\} else \{return \"\"\}]\[if \{\[value skewX] != 0 || \[value skewY] != 0\} then \{return \"sk \[value skewX] \[value skewY]\n\"\} else \{return \"\"\}]\[if \{\[value motionblur] != 0\} then \{return \"mb \[value motionblur] sh \[value shutter] \[value shutteroffset]\n\"\} else \{return \"\"\}]" xpos 262 ypos 147 } Dilate { size {{"int(parent.size)//3 + (int(parent.size)%3 == 2)"}} name Dilate2 label "size \[value size]" xpos 262 ypos 185 } Transform { rotate 30 shutteroffset centred name Transform2 label "\[if \{\[value translate.x] != 0 || \[value translate.y] != 0\} then \{return \"t \[value translate.x] \[value translate.y]\n\"\} else \{return \"\"\}]\[if \{\[value rotate] != 0\} then \{return \"r \[value rotate]\n\"\} else \{return \"\"\}] \[if \{\[value scale] != 1\} then \{return \"s \[value scale]\"\} else \{return \"\"\}]\[if \{\[value skewX] != 0 || \[value skewY] != 0\} then \{return \"sk \[value skewX] \[value skewY]\n\"\} else \{return \"\"\}]\[if \{\[value motionblur] != 0\} then \{return \"mb \[value motionblur] sh \[value shutter] \[value shutteroffset]\n\"\} else \{return \"\"\}]" xpos 262 ypos 235 } Dilate { size {{int(parent.size)//3}} name Dilate3 label "size \[value size]" xpos 262 ypos 273 } Transform { rotate -60 shutteroffset centred name Transform3 label "\[if \{\[value translate.x] != 0 || \[value translate.y] != 0\} then \{return \"t \[value translate.x] \[value translate.y]\n\"\} else \{return \"\"\}]\[if \{\[value rotate] != 0\} then \{return \"r \[value rotate]\n\"\} else \{return \"\"\}] \[if \{\[value scale] != 1\} then \{return \"s \[value scale]\"\} else \{return \"\"\}]\[if \{\[value skewX] != 0 || \[value skewY] != 0\} then \{return \"sk \[value skewX] \[value skewY]\n\"\} else \{return \"\"\}]\[if \{\[value motionblur] != 0\} then \{return \"mb \[value motionblur] sh \[value shutter] \[value shutteroffset]\n\"\} else \{return \"\"\}]" xpos 262 ypos 323 } CopyBBox { inputs 2 name CopyBBox1 xpos 262 ypos 418 } push $N70bb480 Dilate { size {{int(parent.size)}} name Dilate4 label "size \[value size]" xpos -11 ypos 97 } Dot { name Dot14 tile_color 0xcccccc00 xpos 23 ypos 491 } set N71345b0 [stack 0] Dissolve { inputs 2 which {{clamp(abs(parent.size))}} name Dissolve1 xpos 262 ypos 481 } Dot { name Dot5 tile_color 0xcccccc00 xpos 296 ypos 539 } push $N71345b0 Switch { inputs 2 which {{parent.round_filter}} name Switch1 xpos -11 ypos 535 } AdjBBox { numpixels 1 name AdjBBox2 xpos -11 ypos 609 } Dot { name Dot6 tile_color 0xcccccc00 xpos 23 ypos 678 } set N7159670 [stack 0] Dot { name Dot8 tile_color 0xcccccc00 xpos 175 ypos 678 } Transform { translate {{exp.expo(abs(parent.size-int(parent.size))*10)*-1} 0} center {320 240} black_outside false shutteroffset centred name Transform5 label "\[if \{\[value translate.x] != 0 || \[value translate.y] != 0\} then \{return \"t \[value translate.x] \[value translate.y]\n\"\} else \{return \"\"\}]\[if \{\[value rotate] != 0\} then \{return \"r \[value rotate]\n\"\} else \{return \"\"\}] \[if \{\[value scale] != 1\} then \{return \"s \[value scale]\"\} else \{return \"\"\}]\[if \{\[value skewX] != 0 || \[value skewY] != 0\} then \{return \"sk \[value skewX] \[value skewY]\n\"\} else \{return \"\"\}]\[if \{\[value motionblur] != 0\} then \{return \"mb \[value motionblur] sh \[value shutter] \[value shutteroffset]\n\"\} else \{return \"\"\}]" xpos 141 ypos 823 } push $N7159670 Dot { name Dot7 tile_color 0xcccccc00 xpos -127 ypos 678 } Transform { translate {{exp.expo(abs(parent.size-int(parent.size))*10) i} 0} center {320 240} black_outside false shutteroffset centred name Transform4 label "\[if \{\[value translate.x] != 0 || \[value translate.y] != 0\} then \{return \"t \[value translate.x] \[value translate.y]\n\"\} else \{return \"\"\}]\[if \{\[value rotate] != 0\} then \{return \"r \[value rotate]\n\"\} else \{return \"\"\}] \[if \{\[value scale] != 1\} then \{return \"s \[value scale]\"\} else \{return \"\"\}]\[if \{\[value skewX] != 0 || \[value skewY] != 0\} then \{return \"sk \[value skewX] \[value skewY]\n\"\} else \{return \"\"\}]\[if \{\[value motionblur] != 0\} then \{return \"mb \[value motionblur] sh \[value shutter] \[value shutteroffset]\n\"\} else \{return \"\"\}]" xpos -161 ypos 783 } push $N7159670 Merge2 { inputs 2 operation {{parent.size>0?17:18}} bbox B also_merge all name Merge2 xpos -11 ypos 789 } Merge2 { inputs 2 operation {{parent.size>0?17:18}} bbox B also_merge all name Merge1 xpos -11 ypos 829 } Dot { name Dot9 tile_color 0x4b5ec600 xpos 23 ypos 910 } set N71a23e0 [stack 0] Dot { name Dot10 tile_color 0x4b5ec600 xpos 175 ypos 910 } Transform { translate {0 {exp.expo(abs(parent.size-int(parent.size))*10)*-1}} center {320 240} black_outside false shutteroffset centred name Transform6 label "\[if \{\[value translate.x] != 0 || \[value translate.y] != 0\} then \{return \"t \[value translate.x] \[value translate.y]\n\"\} else \{return \"\"\}]\[if \{\[value rotate] != 0\} then \{return \"r \[value rotate]\n\"\} else \{return \"\"\}] \[if \{\[value scale] != 1\} then \{return \"s \[value scale]\"\} else \{return \"\"\}]\[if \{\[value skewX] != 0 || \[value skewY] != 0\} then \{return \"sk \[value skewX] \[value skewY]\n\"\} else \{return \"\"\}]\[if \{\[value motionblur] != 0\} then \{return \"mb \[value motionblur] sh \[value shutter] \[value shutteroffset]\n\"\} else \{return \"\"\}]" xpos 141 ypos 1061 } push $N71a23e0 Dot { name Dot11 tile_color 0x4b5ec600 xpos -127 ypos 910 } Transform { translate {0 {exp.expo(abs(parent.size-int(parent.size))*10)}} center {320 240} black_outside false shutteroffset centred name Transform7 label "\[if \{\[value translate.x] != 0 || \[value translate.y] != 0\} then \{return \"t \[value translate.x] \[value translate.y]\n\"\} else \{return \"\"\}]\[if \{\[value rotate] != 0\} then \{return \"r \[value rotate]\n\"\} else \{return \"\"\}] \[if \{\[value scale] != 1\} then \{return \"s \[value scale]\"\} else \{return \"\"\}]\[if \{\[value skewX] != 0 || \[value skewY] != 0\} then \{return \"sk \[value skewX] \[value skewY]\n\"\} else \{return \"\"\}]\[if \{\[value motionblur] != 0\} then \{return \"mb \[value motionblur] sh \[value shutter] \[value shutteroffset]\n\"\} else \{return \"\"\}]" xpos -161 ypos 1015 } push $N71a23e0 Merge2 { inputs 2 operation {{parent.size>0?17:18}} bbox B also_merge all name Merge3 xpos -11 ypos 1021 } Merge2 { inputs 2 operation {{parent.size>0?17:18}} bbox B also_merge all name Merge4 xpos -11 ypos 1061 } push $N70a7ca0 Dot { name Dot13 tile_color 0xcccccc00 xpos -290 ypos -160 } Dot { name Dot12 tile_color 0xcccccc00 xpos -290 ypos 1261 } NodeWrapper { inputs 2+1 channels rgba name NodeWrapper1 xpos -11 ypos 1257 } Output { name Output1 xpos -11 ypos 1389 } NoOp { inputs 0 name exp label "The growth doesn't look visually linear. \nUsing curves helps a little." xpos 396 ypos 766 addUserKnob {20 User} addUserKnob {7 expo l expo} expo {{parent.size>0?positive_curve:negative_curve i}} addUserKnob {7 positive_curve} positive_curve {{curve 0 0.1037476063 0.1683235168 0.2209408283 0.2831250429 0.3357424736 0.3954704404 0.4731256962 0.5778000951 0.762029767 1}} addUserKnob {7 negative_curve} negative_curve {{curve 0 0.2209040523 0.3736710192 0.4841623592 0.5752981992 0.6541623592 0.7271137492 0.8043368459 0.8681262732 0.9249737263 1}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ExponBlurSimple.gizmo ================================================ Group { name ExponBlurSimple onCreate "n = nuke.thisNode()\nn.knob('size').setRange(-100, 100)\nn.knob('adjustBBoxPixels').setRange(0, 400)\nn.knob('adjustBBoxPercent').setRange(1, 2)\nn.knob('safeBBoxPixels').setRange(0, 400)\nn.knob('safeBBoxPercent').setRange(1, 2)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"includeOriginal\":\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n \n else:\n merge.setInput(steps+1, None)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps)\n \nelif k.name() == \"steps\":\n \n s = int(k.value())\n if s<1:\n k.setValue(1)\n else:\n start = nuke.toNode(\"Start\")\n end = nuke.toNode(\"End\")\n b1 = nuke.toNode(\"Blur1\")\n merge = nuke.toNode(\"Merge1\")\n AvgMult = nuke.toNode(\"AverageMult\")\n \n b1x = b1.xpos()\n b1y = b1.ypos()\n b1n = b1.name()\n \n steps = int(n.knob('steps').getValue())\n size = n.knob('size').getValue()\n mult = n.knob('mult').getValue()\n \n #b1.setInput(0, start)\n for i in range(1,merge.inputs()):\n merge.setInput(i,None)\n merge.setInput(0, b1)\n \[nuke.delete(i) for i in nuke.allNodes() if i.xpos()>start.xpos()]\n for i in range(1,steps):\n # Blur\n b = nuke.nodes.Blur()\n b.setXYpos(b1x+i*100,b1y)\n b.setInput(0,start)\n b\[\"channels\"].setValue(\"all\")\n b\[\"crop\"].setValue(0)\n b\[\"size\"].setValue(0, 1)\n b\[\"size\"].setExpression(\"(Blur1.size)*(mult)**%s\"%(i))\n b\[\"label\"].setValue(\"\[value size]\")\n merge.setInput(i if i<2 else i+1, b)\n AvgMult\['whitepoint'].setValue(i if i<2 else i+1)\n \n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n \nelif k.name() == \"output2\":\n if n.knob(\"output2\").getValue() == 4:\n n.knob('AvgMaxOriginal').setVisible(True)\n else:\n n.knob('AvgMaxOriginal').setVisible(False)\n \nelif k.name() == \"safeBBox\":\n if n.knob(\"safeBBox\").getValue() == 0:\n n.knob('safeBBoxText').setVisible(False)\n n.knob('safetyBBoxMethod').setVisible(False)\n n.knob('safeBBoxPixels').setVisible(False)\n n.knob('safeBBoxPercent').setVisible(False)\n \n elif n.knob(\"safeBBox\").getValue() == 1:\n n.knob('safetyBBoxMethod').setVisible(True)\n n.knob('safeBBoxText').setVisible(True)\n if n.knob('safetyBBoxMethod').value() == \"pixels\":\n n.knob('safeBBoxPixels').setVisible(True)\n n.knob('safeBBoxPercent').setVisible(False)\n elif n.knob('safetyBBoxMethod').value() == \"percent\":\n n.knob('safeBBoxPixels').setVisible(False)\n n.knob('safeBBoxPercent').setVisible(True)\n \nelif k.name() == \"safetyBBoxMethod\":\n if n.knob(\"safetyBBoxMethod\").value() == \"pixels\":\n n.knob('safeBBoxPixels').setVisible(True)\n n.knob('safeBBoxPercent').setVisible(False)\n elif n.knob(\"safetyBBoxMethod\").value() == \"percent\":\n n.knob('safeBBoxPixels').setVisible(False)\n n.knob('safeBBoxPercent').setVisible(True)\n \nelif k.name() == \"adjustBBoxExtra\":\n if n.knob(\"adjustBBoxExtra\").value() == \"pixels\":\n n.knob('adjustBBoxPixels').setVisible(True)\n n.knob('adjustBBoxPercent').setVisible(False)\n elif n.knob(\"adjustBBoxExtra\").value() == \"percent\":\n n.knob('adjustBBoxPixels').setVisible(False)\n n.knob('adjustBBoxPercent').setVisible(True)\n" tile_color 0xcc804eff label "(\[value output2])" note_font "Verdana Bold" note_font_color 0xffffffff selected true addUserKnob {20 ExponBlurSimple} addUserKnob {41 channels T Remove1.channels} addUserKnob {41 maskChannelMask_1 l area T Multiply1.maskChannelMask} addUserKnob {41 inject_1 l inject -STARTLINE T Multiply1.inject} addUserKnob {41 invert_mask_1 l invert -STARTLINE T Multiply1.invert_mask} addUserKnob {41 fringe_1 l fringe -STARTLINE T Multiply1.fringe} addUserKnob {26 ""} addUserKnob {4 output2 l Operation: M {Screen Plus Over Hypot Average Max Min "" "" "" "" ""}} addUserKnob {3 steps l " Steps" -STARTLINE} steps 4 addUserKnob {26 text l " " -STARTLINE T " "} addUserKnob {6 includeOriginal l "Include Original?" -STARTLINE} includeOriginal true addUserKnob {6 AvgMaxOriginal l "Use Max of Average and Original" +HIDDEN +STARTLINE} addUserKnob {14 size l Size R -100 100} size 2 addUserKnob {7 mult l Multiplier R 1 5} mult 2 addUserKnob {6 clamp +STARTLINE} addUserKnob {14 postBlur l "Post Blur" R 0 100} addUserKnob {26 ""} addUserKnob {20 bboxControl l "BBox Control" n 1} bboxControl 0 addUserKnob {26 text_2 l " " T " "} addUserKnob {4 bbox l "BBox: " -STARTLINE M {union intersectionMask A B "input format" "" "" "" "" "" "" "" "" "" "" "" ""}} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {6 safeBBox l "Safe BBox" t "If the output BBox is larger than the input format and the input box combined. the result will be max of the input/format bbox plus a safety \"buffer\" in pixels or percent \n\nTurning off might make your BBox grow exponentially with high blur values" -STARTLINE} safeBBox true addUserKnob {26 safeBBoxText l "" +STARTLINE T " "} addUserKnob {4 safetyBBoxMethod l "Safe BBox Buffer " -STARTLINE M {pixels percent "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""}} safetyBBoxMethod percent addUserKnob {14 safeBBoxPixels l "" -STARTLINE +HIDDEN R 0 400} safeBBoxPixels 100 addUserKnob {14 safeBBoxPercent l "" -STARTLINE R 1 2} safeBBoxPercent 1.1 addUserKnob {26 text_3 l "" +STARTLINE T " "} addUserKnob {4 adjustBBoxExtra l "Extra BBox Adjust" -STARTLINE M {pixels percent "" "" "" "" "" "" "" "" "" "" "" "" ""}} addUserKnob {14 adjustBBoxPercent l "" -STARTLINE +HIDDEN R 1 2} adjustBBoxPercent 1 addUserKnob {14 adjustBBoxPixels l "" -STARTLINE R 0 400} addUserKnob {26 ""} addUserKnob {20 endGroup n -1} addUserKnob {41 maskChannelMask l mask T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: T ExponBlurSimple} addUserKnob {26 ver l Version: T v03} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x535e5a00 label "BBox Management" note_font_size 30 note_font_color 0xffffffff xpos -529 ypos 492 bdwidth 341 bdheight 525 } Input { inputs 0 name Inputimg xpos 0 ypos -969 } Dot { name Dot16 note_font_size 41 xpos 34 ypos -802 } set N49bc3bd0 [stack 0] Dot { name Dot2 note_font_size 41 xpos -367 ypos -802 } Dot { name Dot18 label B note_font_size 41 xpos -367 ypos 434 } Dot { name Dot11 note_font_size 41 xpos -367 ypos 623 } set N49bae130 [stack 0] Dot { name Dot3 note_font_size 41 xpos -367 ypos 675 } set N49ba7980 [stack 0] Dot { name Dot8 note_font_size 41 xpos -463 ypos 675 } Dot { name Dot15 note_font_size 41 xpos -463 ypos 831 } push $N49bc3bd0 Dot { name Dot1 note_font_size 41 xpos 461 ypos -802 } Remove { operation keep channels rgba name Remove1 xpos 427 ypos -718 } Dot { name Dot21 note_font_size 41 xpos 461 ypos -597 } set N6395bd30 [stack 0] Invert { name Invert1 xpos 695 ypos -604 disable {{"parent.size < 0 ? 0 : 1"}} } set N639559a0 [stack 0] Dot { name Dot4 note_font_size 41 xpos 540 ypos -543 } NoOp { name Original xpos 506 ypos -327 } set N6393e7e0 [stack 0] Dot { name Dot5 note_font_size 41 xpos 540 ypos 14 } Crop { inputs 0 box {{"!\[exists parent.input0] ? 0 : input.format.x"} {"!\[exists parent.input0] ? 0 : input.format.y"} {"!\[exists parent.input0] ? 0 : input.format.r"} {"!\[exists parent.input0] ? 0 : input.format.t"}} reformat true crop false name Crop1 xpos 210 ypos -750 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } AddChannels { channels rgba name AddChannels2 xpos 210 ypos -724 } push $N49bc3bd0 Merge2 { inputs 2 name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 83 ypos -671 } NoOp { name BBoxInput xpos 83 ypos -628 addUserKnob {20 User} addUserKnob {15 bbox} bbox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} } push $N6393e7e0 Input { inputs 0 name Inputarea xpos 289 ypos -638 number 2 } AddChannels { channels alpha color 1 name AddChannels1 xpos 289 ypos -580 } Invert { channels rgba name Invert3 xpos 289 ypos -503 } push $N639559a0 Multiply { inputs 1+1 value 0 name Multiply1 label "\[value value]" xpos 695 ypos -512 } NoOp { name Start xpos 695 ypos -450 } set N642a0c70 [stack 0] Blur { size {{(Blur1.size)*(mult)**3} {(Blur1.size)*(mult)**3}} crop false name Blur4 label "\[value size]" xpos 995 ypos -370 } push $N642a0c70 Blur { size {{(Blur1.size)*(mult)**2} {(Blur1.size)*(mult)**2}} crop false name Blur3 label "\[value size]" xpos 895 ypos -370 } push 0 push $N642a0c70 Blur { size {{(Blur1.size)*(mult)**1} {(Blur1.size)*(mult)**1}} crop false name Blur2 label "\[value size]" xpos 795 ypos -370 } push $N642a0c70 Blur { size {{parent.size.w} {parent.size.h}} name Blur1 label "\[value size]" xpos 695 ypos -370 } Merge2 { inputs 5+1 operation {{mergeNumber.mergeNumber}} also_merge all name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 695 ypos -273 } NoOp { name End xpos 695 ypos -230 } set N4966bdf0 [stack 0] CopyBBox { inputs 2 name CopyBBox1 xpos 585 ypos -175 } Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" tile_color 0xa57aaaff note_font "Verdana Bold Bold" note_font_color 0xffffffff xpos 585 ypos -151 addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} overscanType {{parent.safetyBBoxMethod}} addUserKnob {14 overscan l Overscan R 0 400} overscan {{parent.safeBBoxPixels} {parent.safeBBoxPixels}} addUserKnob {14 overscanPercent l "Overscan Percent" R 1 4} overscanPercent {{parent.safeBBoxPercent} {parent.safeBBoxPercent}} addUserKnob {20 inputBbox l "BBox Data" n 1} addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set N63b52530 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set N63b76330 [stack 0] push $N63b52530 Crop { box {{parent.inputBBox} {parent.inputBBox} {parent.inputBBox} {parent.inputBBox}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N63beb5e0 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set N63b72680 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{((input.bbox.r-input.bbox.x)/2)+input.bbox.x} {((input.bbox.t-input.bbox.y)/2)+input.bbox.y}} shutteroffset centred name Transform1 selected true xpos 120 ypos 553 } push $N63b72680 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $N63b76330 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $N63beb5e0 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N47981ba0 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $N47981ba0 NoOp { name OutputBBox1 xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group push $N4966bdf0 Merge2 { inputs 2 bbox intersection also_merge all name Merge4 xpos 585 ypos -127 } push $N4966bdf0 CopyBBox { inputs 2 name CopyBBox2 xpos 585 ypos -101 } push $N4966bdf0 Switch { inputs 2 which {{"parent.safeBBox && ((BBoxResult.bbox.x < BBoxInput.bbox.x || BBoxResult.bbox.y < BBoxInput.bbox.y || BBoxResult.bbox.r > BBoxInput.bbox.r || BBoxResult.bbox.t > BBoxInput.bbox.t))"}} name Switch2 label "\[value which]" xpos 695 ypos -106 } Grade { channels all whitepoint 5 black_clamp false name AverageMult xpos 695 ypos -37 disable {{"output2 == 4 ? 0 : 1"}} } Merge2 { inputs 2 operation max also_merge all name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 695 ypos 10 disable {{"output2 == 4 && includeOriginal == 1 && AvgMaxOriginal == 1 ? 0 : 1"}} } Clamp { name Clamp1 selected true xpos 695 ypos 50 disable {{!parent.clamp}} } Blur { size {{postBlur} {postBlur}} name BlurOriginal label "\[value size]" xpos 695 ypos 102 } Invert { name Invert2 xpos 695 ypos 144 disable {{"parent.size < 0 ? 0 : 1"}} } push $N6395bd30 Switch { inputs 2 which {{"parent.size == 0 ? 0 : 1"}} name Switch1 label "\[value which]" xpos 427 ypos 190 } Dot { name Dot17 label A note_font_size 41 xpos 34 ypos 455 } Dot { name Dot7 note_font_size 41 xpos 34 ypos 579 } set N49eed360 [stack 0] Dot { name Dot12 note_font_size 41 xpos -260 ypos 579 } Dot { name Dot13 note_font_size 41 xpos -260 ypos 799 } push $N49bae130 Input { inputs 0 name Inputmask xpos 512 ypos 322 number 1 } Dot { name Dot19 label Mask note_font_size 41 xpos 546 ypos 435 } set N49edb1b0 [stack 0] Dot { name Dot20 note_font_size 41 xpos 436 ypos 435 } push $N49eed360 Merge2 { inputs 2 bbox intersection Achannels {rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue rgba.alpha} output {rgba.red -rgba.green -rgba.blue rgba.alpha} name MergeIntersection xpos 402 ypos 572 disable {{"!\[exists parent.input1]"}} } Merge2 { inputs 2 Achannels {rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue rgba.alpha} output {rgba.red -rgba.green -rgba.blue rgba.alpha} name MergeUnion xpos 402 ypos 610 disable {{"!\[exists parent.input1]"}} } Dot { name Dot6 label "intersection\nof (Mask and A) + B" note_font_size 14 note_font_color 0xffffffff xpos 436 ypos 770 } push $N49edb1b0 Dot { name Dot10 note_font_size 41 xpos 546 ypos 672 } push $N49eed360 push $N49ba7980 Merge2 { inputs 2+1 operation copy Achannels none Bchannels none output none also_merge {{{parent.Remove1.channels}}} name MergeKeymix xpos 0 ypos 665 } Dot { name Dot14 note_font_size 41 xpos 34 ypos 747 } set N49e9e190 [stack 0] push $N49ba7980 CopyBBox { inputs 2 name CopyBBoxUnion xpos -401 ypos 743 disable {{parent.bbox==0?0:1}} } CopyBBox { inputs 2 name CopyBBoxIntersection xpos -401 ypos 769 disable {{"parent.bbox==1 ? 0 : 1"}} } CopyBBox { inputs 2 name CopyBBoxA xpos -401 ypos 795 disable {{"parent.bbox==2 ? 0 : 1"}} } CopyBBox { inputs 2 name CopyBBoxB xpos -401 ypos 827 disable {{"parent.bbox==3 ? 0 : 1"}} } Crop { box {0 0 {parent.width} {parent.height}} crop false name CopyBBoxFormat xpos -401 ypos 853 disable {{"parent.bbox==4 ? 0 : 1"}} addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N49e7f5a0 [stack 0] Transform { scale {{parent.adjustBBoxPercent} {parent.adjustBBoxPercent}} center {{((input.bbox.r-input.bbox.x)/2)+input.bbox.x} {((input.bbox.t-input.bbox.y)/2)+input.bbox.y}} black_outside false shutteroffset centred name TransformBBoxAdjustPercent xpos -516 ypos 898 } push $N49e7f5a0 AdjBBox { numpixels {{parent.adjustBBoxPixels} {parent.adjustBBoxPixels}} name AdjBBoxPixels xpos -401 ypos 901 } Switch { inputs 2 which {{adjustBBoxExtra}} name Switch3 xpos -401 ypos 940 } Dot { name Dot9 note_font_size 41 xpos -367 ypos 993 } push $N49e9e190 CopyBBox { inputs 2 name CopyBBox xpos 0 ypos 989 } BlackOutside { name BlackOutside1 xpos 0 ypos 1015 disable {{!parent.blackOutside}} } Output { name Output1 xpos 0 ypos 1155 } NoOp { inputs 0 name mergeNumber xpos 229 ypos -862 addUserKnob {20 User} addUserKnob {3 mergeNumber} mergeNumber {{"output2 == 0 ? 25 : output2 == 1 ? 24 : output2 == 2 ? 22 : output2 == 3 ? 13 : output2 == 4 ? 24 : output2 == 5 ? 17 : 18"}} } push $N4966bdf0 NoOp { name BBoxResult xpos 585 ypos -230 addUserKnob {20 User} addUserKnob {15 bbox} bbox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ExponGlow.gizmo ================================================ Group { name ExponGlow onCreate "n = nuke.thisNode()\nn.knob('size').setRange(0, 5)\nn.knob('exp').setRange(0, 4)\nn.knob('adjustBBoxPixels').setRange(0, 400)\nn.knob('adjustBBoxPercent').setRange(1, 2)\nn.knob('safeBBoxPixels').setRange(0, 400)\nn.knob('safeBBoxPercent').setRange(1, 2)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"includeOriginal\":\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n\n else:\n merge.setInput(steps+1, None)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps)\n\nelif k.name() == \"steps\":\n\n s = int(k.value())\n if s<1:\n k.setValue(1)\n else:\n start = nuke.toNode(\"Start\")\n end = nuke.toNode(\"End\")\n b1 = nuke.toNode(\"Blur1\")\n m1 = nuke.toNode(\"Multiply1\")\n merge = nuke.toNode(\"Merge1\")\n AvgMult = nuke.toNode(\"AverageMult\")\n\n b1x = b1.xpos()\n b1y = b1.ypos()\n b1n = b1.name()\n\n m1x = m1.xpos()\n m1y = m1.ypos()\n m1n = m1.name()\n\n steps = int(n.knob('steps').getValue())\n size = n.knob('size').getValue()\n mult = n.knob('exp').getValue()\n\n #b1.setInput(0, start)\n for i in range(1,merge.inputs()):\n merge.setInput(i,None)\n merge.setInput(0, m1)\n \[nuke.delete(i) for i in nuke.allNodes() if i.xpos()>start.xpos()]\n for i in range(1,steps):\n # Blur\n b = nuke.nodes.Blur()\n m = nuke.nodes.Multiply()\n b.setXYpos(b1x+i*100,b1y)\n b.setInput(0,start)\n b\[\"channels\"].setValue(\"all\")\n b\[\"crop\"].setValue(0)\n b\[\"size\"].setValue(0, 1)\n b\[\"size\"].setExpression( \"(width/25*pow(parent.size*\{\}, parent.exp.w))*((aspectCalc.aspect.w/100))\".format(str(i+1)), 0 )\n b\[\"size\"].setExpression( \"(height/25*pow(parent.size*\{\}, parent.exp.h))*((aspectCalc.aspect.h/100))\".format(str(i+1)), 1 )\n b\[\"label\"].setValue('')\n blurAbove = b.name()\n\n m.setXYpos(m1x+i*100,m1y)\n m.setInput(0, nuke.toNode(blurAbove))\n m\[\"channels\"].setValue(\"all\")\n m\[\"value\"].setValue(1,1,1,1)\n j = 1-(i/steps)\n m\[\"value\"].setExpression('falloffType == 0 ? \{\} :falloffType == 1 ? pow(\{\}, 3) : falloffType == 2 ? \{\}*\{\}*(3-2*\{\}) : falloffType == 3 ? \{\}*\{\}*(2 - \{\}) : falloffType == 4 ? \{\}*(1 + \{\}*(1 - \{\})) : 0'.format(j,j,j,j,j,j,j,j,j,j,j))\n m\[\"mix\"].setExpression(\"falloff\")\n m\[\"label\"].setValue('')\n\n merge.setInput(i if i<2 else i+1, m)\n AvgMult\['whitepoint'].setValue(i if i<2 else i+1)\n\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n\nelif k.name() == \"output2\":\n if n.knob(\"output2\").getValue() == 4:\n n.knob('AvgMaxOriginal').setVisible(True)\n else:\n n.knob('AvgMaxOriginal').setVisible(False)\n\nelif k.name() == \"safeBBox\":\n if n.knob(\"safeBBox\").getValue() == 0:\n n.knob('safeBBoxText').setVisible(False)\n n.knob('safetyBBoxMethod').setVisible(False)\n n.knob('safeBBoxPixels').setVisible(False)\n n.knob('safeBBoxPercent').setVisible(False)\n\n elif n.knob(\"safeBBox\").getValue() == 1:\n n.knob('safetyBBoxMethod').setVisible(True)\n n.knob('safeBBoxText').setVisible(True)\n if n.knob('safetyBBoxMethod').value() == \"pixels\":\n n.knob('safeBBoxPixels').setVisible(True)\n n.knob('safeBBoxPercent').setVisible(False)\n elif n.knob('safetyBBoxMethod').value() == \"percent\":\n n.knob('safeBBoxPixels').setVisible(False)\n n.knob('safeBBoxPercent').setVisible(True)\n\nelif k.name() == \"safetyBBoxMethod\":\n if n.knob(\"safetyBBoxMethod\").value() == \"pixels\":\n n.knob('safeBBoxPixels').setVisible(True)\n n.knob('safeBBoxPercent').setVisible(False)\n elif n.knob(\"safetyBBoxMethod\").value() == \"percent\":\n n.knob('safeBBoxPixels').setVisible(False)\n n.knob('safeBBoxPercent').setVisible(True)\n\nelif k.name() == \"adjustBBoxExtra\":\n if n.knob(\"adjustBBoxExtra\").value() == \"pixels\":\n n.knob('adjustBBoxPixels').setVisible(True)\n n.knob('adjustBBoxPercent').setVisible(False)\n elif n.knob(\"adjustBBoxExtra\").value() == \"percent\":\n n.knob('adjustBBoxPixels').setVisible(False)\n n.knob('adjustBBoxPercent').setVisible(True)\n" tile_color 0xcc804eff label "(\[value output2])" note_font "Verdana Bold" note_font_color 0xffffffff selected true addUserKnob {20 ExponGlow} addUserKnob {41 channels T Remove1.channels} addUserKnob {41 maskChannelMask_1 l area T MultiplyArea.maskChannelMask} addUserKnob {41 inject_1 l inject -STARTLINE T MultiplyArea.inject} addUserKnob {41 invert_mask_1 l invert -STARTLINE T MultiplyArea.invert_mask} addUserKnob {41 fringe_1 l fringe -STARTLINE T MultiplyArea.fringe} addUserKnob {26 ""} addUserKnob {26 ToleranceTitle l Tolerance T " "} addUserKnob {6 tolerance_2 l " " -STARTLINE} tolerance_2 true addUserKnob {7 tolerance l "" -STARTLINE R 0 4} tolerance 1 addUserKnob {4 output2 l Operation M {Screen Plus Over Hypot Average Max Min ""}} output2 Plus addUserKnob {3 steps l " Steps" -STARTLINE} steps 10 addUserKnob {26 text l " " -STARTLINE T " "} addUserKnob {6 includeOriginal l "Include Original?" -STARTLINE} addUserKnob {19 intensity l Intensity R 0 4} intensity 1 addUserKnob {6 intensity_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 intensity_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 intensity_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 text_1 l " "} addUserKnob {6 AvgMaxOriginal l "Use Max of Average and Original" +HIDDEN +STARTLINE} addUserKnob {14 size l Size R 0 5} size 1 addUserKnob {14 exp l Exponent R 0 4} exp 3 addUserKnob {6 color_rgba_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {4 falloffType l Falloff M {Linear pLinear smooth smooth0 smooth1 "" ""}} addUserKnob {7 falloff l "" -STARTLINE} falloff 1 addUserKnob {26 text_4 l " "} addUserKnob {6 color_rgba_panelDropped_1 l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {14 postBlur l "Post Blur" R 0 100} addUserKnob {6 effectOnly l ". Effect Only" +STARTLINE} addUserKnob {26 ""} addUserKnob {20 bboxControl l "BBox Control" n 1} bboxControl 0 addUserKnob {26 text_2 l " " T " "} addUserKnob {4 bbox l "BBox: " -STARTLINE M {union intersectionMask A B "input format" "" "" "" "" "" "" "" "" "" "" "" ""}} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {6 safeBBox l "Safe BBox" t "If the output BBox is larger than the input format and the input box combined. the result will be max of the input/format bbox plus a safety \"buffer\" in pixels or percent \n\nTurning off might make your BBox grow exponentially with high blur values" -STARTLINE} safeBBox true addUserKnob {26 safeBBoxText l "" +STARTLINE T " "} addUserKnob {4 safetyBBoxMethod l "Safe BBox Buffer " -STARTLINE M {pixels percent "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""}} safetyBBoxMethod percent addUserKnob {14 safeBBoxPixels l "" -STARTLINE +HIDDEN R 0 400} safeBBoxPixels 100 addUserKnob {14 safeBBoxPercent l "" -STARTLINE R 1 2} safeBBoxPercent 1.1 addUserKnob {26 text_3 l "" +STARTLINE T " "} addUserKnob {4 adjustBBoxExtra l "Extra BBox Adjust" -STARTLINE M {pixels percent "" "" "" "" "" "" "" "" "" "" "" "" ""}} addUserKnob {14 adjustBBoxPercent l "" -STARTLINE +HIDDEN R 1 2} adjustBBoxPercent 1 addUserKnob {14 adjustBBoxPixels l "" -STARTLINE R 0 400} addUserKnob {26 ""} addUserKnob {20 endGroup n -1} addUserKnob {41 maskChannelMask l mask T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: T ExponGlow} addUserKnob {26 ver l Version: T v03} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x535e5a00 label "BBox Management" note_font_size 30 note_font_color 0xffffffff xpos -529 ypos 636 bdwidth 341 bdheight 525 } Input { inputs 0 name Inputimg xpos 0 ypos -1449 } Dot { name Dot16 note_font_size 41 xpos 34 ypos -1282 } set N6c251600 [stack 0] Dot { name Dot2 note_font_size 41 xpos -367 ypos -1282 } Dot { name Dot25 note_font_size 41 xpos -367 ypos 360 } Dot { name Dot18 label B note_font_size 41 xpos -367 ypos 578 } Dot { name Dot11 note_font_size 41 xpos -367 ypos 767 } set Nd49eb900 [stack 0] Dot { name Dot3 note_font_size 41 xpos -367 ypos 819 } set Nd49eb200 [stack 0] Dot { name Dot8 note_font_size 41 xpos -463 ypos 819 } Dot { name Dot15 note_font_size 41 xpos -463 ypos 975 } Crop { inputs 0 box {{"!\[exists parent.input0] ? 0 : input.format.x"} {"!\[exists parent.input0] ? 0 : input.format.y"} {"!\[exists parent.input0] ? 0 : input.format.r"} {"!\[exists parent.input0] ? 0 : input.format.t"}} reformat true crop false name Crop1 xpos 210 ypos -1006 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } AddChannels { channels rgba name AddChannels2 xpos 210 ypos -980 } push $N6c251600 Merge2 { inputs 2 name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 83 ypos -927 } NoOp { name BBoxInput xpos 83 ypos -884 addUserKnob {20 User} addUserKnob {15 bbox} bbox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} } Dot { name Dot23 note_font_size 41 xpos 117 ypos -146 } Input { inputs 0 name Inputarea xpos 289 ypos -894 number 2 } AddChannels { channels alpha color 1 name AddChannels1 xpos 289 ypos -836 } Invert { channels rgba name Invert3 xpos 289 ypos -759 } push $N6c251600 Dot { name Dot1 note_font_size 41 xpos 461 ypos -1282 } Remove { operation keep channels rgba name Remove1 xpos 427 ypos -1213 } NoOp { name aspectCalc xpos 427 ypos -1155 addUserKnob {20 User} addUserKnob {14 aspect R 0 100} aspect {{parent.size.w} {(parent.size.h/format.pixel_aspect/height*width)*format.pixel_aspect}} } Dot { name Dot21 note_font_size 41 xpos 461 ypos -1026 } set Nd49c4100 [stack 0] Invert { name Invert1 xpos 864 ypos -1033 disable {{"parent.size < 0 ? 0 : 1"}} } set Nd49a7900 [stack 0] Keyer { operation "luminance key" range {{parent.tolerance} {range.A+parent.tolerance+1} {range.B} {range.B}} name Keyer1 xpos 774 ypos -967 disable {{!tolerance_2}} } Premult { channels all name Premult1 xpos 774 ypos -910 disable {{!tolerance_2}} } push $Nd49a7900 Dissolve { inputs 2 channels rgba which {{"parent.tolerance < 1 ? parent.tolerance : 1"}} name Dissolve1 label "\[value which]" xpos 864 ypos -857 } Multiply { inputs 1+1 value 0 name MultiplyArea label "\[value value]" xpos 864 ypos -768 } set Nd49a5d00 [stack 0] NoOp { name Start xpos 864 ypos -706 } set Nd49a4f00 [stack 0] Blur { size {{"(width/25*pow(parent.size*10, parent.exp.w))*((aspectCalc.aspect.w/100))"} {"(height/25*pow(parent.size*10, parent.exp.h))*((aspectCalc.aspect.h/100))"}} crop false name Blur10 xpos 1764 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.1 :falloffType == 1 ? pow(0.1, 3) : falloffType == 2 ? 0.1*0.1*(3-2*0.1) : falloffType == 3 ? 0.1*0.1*(2 - 0.1) : falloffType == 4 ? 0.1*(1 + 0.1*(1 - 0.1)) : 0"} {"falloffType == 0 ? 0.1 :falloffType == 1 ? pow(0.1, 3) : falloffType == 2 ? 0.1*0.1*(3-2*0.1) : falloffType == 3 ? 0.1*0.1*(2 - 0.1) : falloffType == 4 ? 0.1*(1 + 0.1*(1 - 0.1)) : 0"} {"falloffType == 0 ? 0.1 :falloffType == 1 ? pow(0.1, 3) : falloffType == 2 ? 0.1*0.1*(3-2*0.1) : falloffType == 3 ? 0.1*0.1*(2 - 0.1) : falloffType == 4 ? 0.1*(1 + 0.1*(1 - 0.1)) : 0"} {"falloffType == 0 ? 0.1 :falloffType == 1 ? pow(0.1, 3) : falloffType == 2 ? 0.1*0.1*(3-2*0.1) : falloffType == 3 ? 0.1*0.1*(2 - 0.1) : falloffType == 4 ? 0.1*(1 + 0.1*(1 - 0.1)) : 0"}} mix {{falloff}} name Multiply10 xpos 1764 ypos -477 } push $Nd49a4f00 Blur { size {{"(width/25*pow(parent.size*9, parent.exp.w))*((aspectCalc.aspect.w/100))"} {"(height/25*pow(parent.size*9, parent.exp.h))*((aspectCalc.aspect.h/100))"}} crop false name Blur9 xpos 1664 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.2 :falloffType == 1 ? pow(0.2, 3) : falloffType == 2 ? 0.2*0.2*(3-2*0.2) : falloffType == 3 ? 0.2*0.2*(2 - 0.2) : falloffType == 4 ? 0.2*(1 + 0.2*(1 - 0.2)) : 0"} {"falloffType == 0 ? 0.2 :falloffType == 1 ? pow(0.2, 3) : falloffType == 2 ? 0.2*0.2*(3-2*0.2) : falloffType == 3 ? 0.2*0.2*(2 - 0.2) : falloffType == 4 ? 0.2*(1 + 0.2*(1 - 0.2)) : 0"} {"falloffType == 0 ? 0.2 :falloffType == 1 ? pow(0.2, 3) : falloffType == 2 ? 0.2*0.2*(3-2*0.2) : falloffType == 3 ? 0.2*0.2*(2 - 0.2) : falloffType == 4 ? 0.2*(1 + 0.2*(1 - 0.2)) : 0"} {"falloffType == 0 ? 0.2 :falloffType == 1 ? pow(0.2, 3) : falloffType == 2 ? 0.2*0.2*(3-2*0.2) : falloffType == 3 ? 0.2*0.2*(2 - 0.2) : falloffType == 4 ? 0.2*(1 + 0.2*(1 - 0.2)) : 0"}} mix {{falloff}} name Multiply9 xpos 1664 ypos -477 } push $Nd49a4f00 Blur { size {{"(width/25*pow(parent.size*8, parent.exp.w))*((aspectCalc.aspect.w/100))"} {"(height/25*pow(parent.size*8, parent.exp.h))*((aspectCalc.aspect.h/100))"}} crop false name Blur8 xpos 1564 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.3 :falloffType == 1 ? pow(0.3, 3) : falloffType == 2 ? 0.3*0.3*(3-2*0.3) : falloffType == 3 ? 0.3*0.3*(2 - 0.3) : falloffType == 4 ? 0.3*(1 + 0.3*(1 - 0.3)) : 0"} {"falloffType == 0 ? 0.3 :falloffType == 1 ? pow(0.3, 3) : falloffType == 2 ? 0.3*0.3*(3-2*0.3) : falloffType == 3 ? 0.3*0.3*(2 - 0.3) : falloffType == 4 ? 0.3*(1 + 0.3*(1 - 0.3)) : 0"} {"falloffType == 0 ? 0.3 :falloffType == 1 ? pow(0.3, 3) : falloffType == 2 ? 0.3*0.3*(3-2*0.3) : falloffType == 3 ? 0.3*0.3*(2 - 0.3) : falloffType == 4 ? 0.3*(1 + 0.3*(1 - 0.3)) : 0"} {"falloffType == 0 ? 0.3 :falloffType == 1 ? pow(0.3, 3) : falloffType == 2 ? 0.3*0.3*(3-2*0.3) : falloffType == 3 ? 0.3*0.3*(2 - 0.3) : falloffType == 4 ? 0.3*(1 + 0.3*(1 - 0.3)) : 0"}} mix {{falloff}} name Multiply8 xpos 1564 ypos -477 } push $Nd49a4f00 Blur { size {{"(width/25*pow(parent.size*7, parent.exp.w))*((aspectCalc.aspect.w/100))"} {"(height/25*pow(parent.size*7, parent.exp.h))*((aspectCalc.aspect.h/100))"}} crop false name Blur7 xpos 1464 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.4 :falloffType == 1 ? pow(0.4, 3) : falloffType == 2 ? 0.4*0.4*(3-2*0.4) : falloffType == 3 ? 0.4*0.4*(2 - 0.4) : falloffType == 4 ? 0.4*(1 + 0.4*(1 - 0.4)) : 0"} {"falloffType == 0 ? 0.4 :falloffType == 1 ? pow(0.4, 3) : falloffType == 2 ? 0.4*0.4*(3-2*0.4) : falloffType == 3 ? 0.4*0.4*(2 - 0.4) : falloffType == 4 ? 0.4*(1 + 0.4*(1 - 0.4)) : 0"} {"falloffType == 0 ? 0.4 :falloffType == 1 ? pow(0.4, 3) : falloffType == 2 ? 0.4*0.4*(3-2*0.4) : falloffType == 3 ? 0.4*0.4*(2 - 0.4) : falloffType == 4 ? 0.4*(1 + 0.4*(1 - 0.4)) : 0"} {"falloffType == 0 ? 0.4 :falloffType == 1 ? pow(0.4, 3) : falloffType == 2 ? 0.4*0.4*(3-2*0.4) : falloffType == 3 ? 0.4*0.4*(2 - 0.4) : falloffType == 4 ? 0.4*(1 + 0.4*(1 - 0.4)) : 0"}} mix {{falloff}} name Multiply7 xpos 1464 ypos -477 } push $Nd49a4f00 Blur { size {{"(width/25*pow(parent.size*6, parent.exp.w))*((aspectCalc.aspect.w/100))"} {"(height/25*pow(parent.size*6, parent.exp.h))*((aspectCalc.aspect.h/100))"}} crop false name Blur6 xpos 1364 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"}} mix {{falloff}} name Multiply6 xpos 1364 ypos -477 } push $Nd49a4f00 Blur { size {{"(width/25*pow(parent.size*5, parent.exp.w))*((aspectCalc.aspect.w/100))"} {"(height/25*pow(parent.size*5, parent.exp.h))*((aspectCalc.aspect.h/100))"}} crop false name Blur5 xpos 1264 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.6 :falloffType == 1 ? pow(0.6, 3) : falloffType == 2 ? 0.6*0.6*(3-2*0.6) : falloffType == 3 ? 0.6*0.6*(2 - 0.6) : falloffType == 4 ? 0.6*(1 + 0.6*(1 - 0.6)) : 0"} {"falloffType == 0 ? 0.6 :falloffType == 1 ? pow(0.6, 3) : falloffType == 2 ? 0.6*0.6*(3-2*0.6) : falloffType == 3 ? 0.6*0.6*(2 - 0.6) : falloffType == 4 ? 0.6*(1 + 0.6*(1 - 0.6)) : 0"} {"falloffType == 0 ? 0.6 :falloffType == 1 ? pow(0.6, 3) : falloffType == 2 ? 0.6*0.6*(3-2*0.6) : falloffType == 3 ? 0.6*0.6*(2 - 0.6) : falloffType == 4 ? 0.6*(1 + 0.6*(1 - 0.6)) : 0"} {"falloffType == 0 ? 0.6 :falloffType == 1 ? pow(0.6, 3) : falloffType == 2 ? 0.6*0.6*(3-2*0.6) : falloffType == 3 ? 0.6*0.6*(2 - 0.6) : falloffType == 4 ? 0.6*(1 + 0.6*(1 - 0.6)) : 0"}} mix {{falloff}} name Multiply5 xpos 1264 ypos -477 } push $Nd49a4f00 Blur { size {{"(width/25*pow(parent.size*4, parent.exp.w))*((aspectCalc.aspect.w/100))"} {"(height/25*pow(parent.size*4, parent.exp.h))*((aspectCalc.aspect.h/100))"}} crop false name Blur4 xpos 1164 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.7 :falloffType == 1 ? pow(0.7, 3) : falloffType == 2 ? 0.7*0.7*(3-2*0.7) : falloffType == 3 ? 0.7*0.7*(2 - 0.7) : falloffType == 4 ? 0.7*(1 + 0.7*(1 - 0.7)) : 0"} {"falloffType == 0 ? 0.7 :falloffType == 1 ? pow(0.7, 3) : falloffType == 2 ? 0.7*0.7*(3-2*0.7) : falloffType == 3 ? 0.7*0.7*(2 - 0.7) : falloffType == 4 ? 0.7*(1 + 0.7*(1 - 0.7)) : 0"} {"falloffType == 0 ? 0.7 :falloffType == 1 ? pow(0.7, 3) : falloffType == 2 ? 0.7*0.7*(3-2*0.7) : falloffType == 3 ? 0.7*0.7*(2 - 0.7) : falloffType == 4 ? 0.7*(1 + 0.7*(1 - 0.7)) : 0"} {"falloffType == 0 ? 0.7 :falloffType == 1 ? pow(0.7, 3) : falloffType == 2 ? 0.7*0.7*(3-2*0.7) : falloffType == 3 ? 0.7*0.7*(2 - 0.7) : falloffType == 4 ? 0.7*(1 + 0.7*(1 - 0.7)) : 0"}} mix {{falloff}} name Multiply4 xpos 1164 ypos -477 } push $Nd49a4f00 Blur { size {{"(width/25*pow(parent.size*3, parent.exp.w))*((aspectCalc.aspect.w/100))"} {"(height/25*pow(parent.size*3, parent.exp.h))*((aspectCalc.aspect.h/100))"}} crop false name Blur3 xpos 1064 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.8 :falloffType == 1 ? pow(0.8, 3) : falloffType == 2 ? 0.8*0.8*(3-2*0.8) : falloffType == 3 ? 0.8*0.8*(2 - 0.8) : falloffType == 4 ? 0.8*(1 + 0.8*(1 - 0.8)) : 0"} {"falloffType == 0 ? 0.8 :falloffType == 1 ? pow(0.8, 3) : falloffType == 2 ? 0.8*0.8*(3-2*0.8) : falloffType == 3 ? 0.8*0.8*(2 - 0.8) : falloffType == 4 ? 0.8*(1 + 0.8*(1 - 0.8)) : 0"} {"falloffType == 0 ? 0.8 :falloffType == 1 ? pow(0.8, 3) : falloffType == 2 ? 0.8*0.8*(3-2*0.8) : falloffType == 3 ? 0.8*0.8*(2 - 0.8) : falloffType == 4 ? 0.8*(1 + 0.8*(1 - 0.8)) : 0"} {"falloffType == 0 ? 0.8 :falloffType == 1 ? pow(0.8, 3) : falloffType == 2 ? 0.8*0.8*(3-2*0.8) : falloffType == 3 ? 0.8*0.8*(2 - 0.8) : falloffType == 4 ? 0.8*(1 + 0.8*(1 - 0.8)) : 0"}} mix {{falloff}} name Multiply3 xpos 1064 ypos -477 } push 0 push $Nd49a4f00 Blur { size {{"(width/25*pow(parent.size*2, parent.exp.w))*((aspectCalc.aspect.w/100))"} {"(height/25*pow(parent.size*2, parent.exp.h))*((aspectCalc.aspect.h/100))"}} crop false name Blur2 xpos 964 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.9 :falloffType == 1 ? pow(0.9, 3) : falloffType == 2 ? 0.9*0.9*(3-2*0.9) : falloffType == 3 ? 0.9*0.9*(2 - 0.9) : falloffType == 4 ? 0.9*(1 + 0.9*(1 - 0.9)) : 0"} {"falloffType == 0 ? 0.9 :falloffType == 1 ? pow(0.9, 3) : falloffType == 2 ? 0.9*0.9*(3-2*0.9) : falloffType == 3 ? 0.9*0.9*(2 - 0.9) : falloffType == 4 ? 0.9*(1 + 0.9*(1 - 0.9)) : 0"} {"falloffType == 0 ? 0.9 :falloffType == 1 ? pow(0.9, 3) : falloffType == 2 ? 0.9*0.9*(3-2*0.9) : falloffType == 3 ? 0.9*0.9*(2 - 0.9) : falloffType == 4 ? 0.9*(1 + 0.9*(1 - 0.9)) : 0"} {"falloffType == 0 ? 0.9 :falloffType == 1 ? pow(0.9, 3) : falloffType == 2 ? 0.9*0.9*(3-2*0.9) : falloffType == 3 ? 0.9*0.9*(2 - 0.9) : falloffType == 4 ? 0.9*(1 + 0.9*(1 - 0.9)) : 0"}} mix {{falloff}} name Multiply2 xpos 964 ypos -477 } push $Nd49a4f00 Blur { size {{(width/10*parent.size*(aspectCalc.aspect.w/100))} {(height/10*parent.size*(aspectCalc.aspect.h/100))}} crop false name Blur1 xpos 864 ypos -555 } Multiply { value {1 1 1 1} mix {{falloff}} name Multiply1 xpos 864 ypos -477 } Merge2 { inputs 10+1 operation {{mergeNumber.mergeNumber}} also_merge all name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 864 ypos -327 } NoOp { name End xpos 864 ypos -279 } set Nd4af2b00 [stack 0] CopyBBox { inputs 2 name CopyBBox1 xpos 585 ypos -149 } Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" tile_color 0xa57aaaff note_font "Verdana Bold" note_font_color 0xffffffff xpos 585 ypos -106 addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} overscanType {{parent.safetyBBoxMethod}} addUserKnob {14 overscan l Overscan R 0 400} overscan {{parent.safeBBoxPixels} {parent.safeBBoxPixels}} addUserKnob {14 overscanPercent l "Overscan Percent" R 1 4} overscanPercent {{parent.safeBBoxPercent} {parent.safeBBoxPercent}} addUserKnob {20 inputBbox l "BBox Data" n 1} addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set Nd4af0f00 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set Nd4af0800 [stack 0] push $Nd4af0f00 Crop { box {{parent.inputBBox} {parent.inputBBox} {parent.inputBBox} {parent.inputBBox}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set Nd4af0100 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set Nd4ac7900 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{((input.bbox.r-input.bbox.x)/2)+input.bbox.x} {((input.bbox.t-input.bbox.y)/2)+input.bbox.y}} shutteroffset centred name Transform1 selected true xpos 120 ypos 553 } push $Nd4ac7900 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $Nd4af0800 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $Nd4af0100 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set Nd4ac4100 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $Nd4ac4100 NoOp { name OutputBBox1 xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group push $Nd4af2b00 Merge2 { inputs 2 bbox intersection name Merge4 xpos 585 ypos -66 } push $Nd4af2b00 CopyBBox { inputs 2 name CopyBBox2 xpos 585 ypos -21 } set Nd4aa2400 [stack 0] push $Nd49a5d00 Dot { name Dot4 note_font_size 41 xpos 540 ypos -678 } NoOp { name Original xpos 506 ypos -327 } Dot { name Dot5 note_font_size 41 xpos 540 ypos 78 } push $Nd4aa2400 push $Nd4af2b00 Switch { inputs 2 which {{"parent.safeBBox && ((BBoxResult.bbox.x < BBoxInput.bbox.x || BBoxResult.bbox.y < BBoxInput.bbox.y || BBoxResult.bbox.r > BBoxInput.bbox.r || BBoxResult.bbox.t > BBoxInput.bbox.t))"}} name Switch2 label "\[value which]" xpos 864 ypos -25 } Grade { channels all whitepoint 10 black_clamp false name AverageMult xpos 864 ypos 27 disable {{"output2 == 4 ? 0 : 1"}} } Merge2 { inputs 2 operation max also_merge all name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 864 ypos 74 disable {{"output2 == 4 && includeOriginal == 1 && AvgMaxOriginal == 1 ? 0 : 1"}} } Multiply { value {{parent.intensity/steps}} name Multiply12 xpos 864 ypos 98 } Blur { size {{postBlur} {postBlur}} name BlurOriginal xpos 864 ypos 155 } CopyBBox { inputs 2 name CopyBBox3 xpos 864 ypos 224 } Invert { name Invert2 xpos 864 ypos 283 disable {{"parent.size < 0 ? 0 : 1"}} } push $Nd49c4100 Switch { inputs 2 which {{"parent.size == 0 ? 0 : 1"}} name Switch1 label "\[value which]" xpos 427 ypos 283 } push $N6c251600 Dot { name Dot22 note_font_size 41 xpos 34 ypos 157 } Multiply { channels {{{parent.Remove1.channels}}} value 0 name Multiply11 xpos 0 ypos 227 disable {{!effectOnly}} } Merge2 { inputs 2 operation {{mergeNumber.mergeNumber}} also_merge all name Merge7 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 287 } Dot { name Dot17 label A note_font_size 41 xpos 34 ypos 599 } Dot { name Dot7 note_font_size 41 xpos 34 ypos 729 } set Nd4a37200 [stack 0] Dot { name Dot12 note_font_size 41 xpos -260 ypos 729 } Dot { name Dot13 note_font_size 41 xpos -260 ypos 943 } push $Nd49eb900 Input { inputs 0 name Inputmask xpos 346 ypos 516 number 1 } Dot { name Dot19 label Mask note_font_size 41 xpos 380 ypos 582 } set Nd4a35600 [stack 0] Dot { name Dot20 note_font_size 41 xpos 270 ypos 582 } push $Nd4a37200 Merge2 { inputs 2 bbox intersection Achannels {rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue rgba.alpha} output {rgba.red -rgba.green -rgba.blue rgba.alpha} name MergeIntersection xpos 236 ypos 719 disable {{"!\[exists parent.input1]"}} } Merge2 { inputs 2 Achannels {rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue rgba.alpha} output {rgba.red -rgba.green -rgba.blue rgba.alpha} name MergeUnion xpos 236 ypos 757 disable {{"!\[exists parent.input1]"}} } Dot { name Dot6 label "intersection\nof (Mask and A) + B" note_font_size 14 note_font_color 0xffffffff xpos 270 ypos 917 } push $Nd4a35600 Dot { name Dot10 note_font_size 41 xpos 380 ypos 819 } push $Nd4a37200 push $Nd49eb200 Merge2 { inputs 2+1 operation copy Achannels none Bchannels none output none also_merge {{{parent.Remove1.channels}}} name MergeKeymix xpos 0 ypos 809 } Dot { name Dot14 note_font_size 41 xpos 34 ypos 891 } set Nd4a1a400 [stack 0] push $Nd49eb200 CopyBBox { inputs 2 name CopyBBoxUnion xpos -401 ypos 887 disable {{parent.bbox==0?0:1}} } CopyBBox { inputs 2 name CopyBBoxIntersection xpos -401 ypos 913 disable {{"parent.bbox==1 ? 0 : 1"}} } CopyBBox { inputs 2 name CopyBBoxA xpos -401 ypos 939 disable {{"parent.bbox==2 ? 0 : 1"}} } CopyBBox { inputs 2 name CopyBBoxB xpos -401 ypos 971 disable {{"parent.bbox==3 ? 0 : 1"}} } Crop { box {0 0 {parent.width} {parent.height}} crop false name CopyBBoxFormat xpos -401 ypos 997 disable {{"parent.bbox==4 ? 0 : 1"}} addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set Nd4a18100 [stack 0] Transform { scale {{parent.adjustBBoxPercent} {parent.adjustBBoxPercent}} center {{((input.bbox.r-input.bbox.x)/2)+input.bbox.x} {((input.bbox.t-input.bbox.y)/2)+input.bbox.y}} black_outside false shutteroffset centred name TransformBBoxAdjustPercent xpos -516 ypos 1042 } push $Nd4a18100 AdjBBox { numpixels {{parent.adjustBBoxPixels} {parent.adjustBBoxPixels}} name AdjBBoxPixels xpos -401 ypos 1045 } Switch { inputs 2 which {{adjustBBoxExtra}} name Switch3 xpos -401 ypos 1084 } Dot { name Dot9 note_font_size 41 xpos -367 ypos 1137 } push $Nd4a1a400 CopyBBox { inputs 2 name CopyBBox xpos 0 ypos 1133 } BlackOutside { name BlackOutside1 xpos 0 ypos 1159 disable {{!parent.blackOutside}} } Output { name Output1 xpos 0 ypos 1299 } push $Nd4af2b00 NoOp { name BBoxResult xpos 714 ypos -279 addUserKnob {20 User} addUserKnob {15 bbox} bbox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} } NoOp { inputs 0 name mergeNumber xpos 202 ypos -1339 addUserKnob {20 User} addUserKnob {3 mergeNumber} mergeNumber {{"output2 == 0 ? 25 : output2 == 1 ? 24 : output2 == 2 ? 22 : output2 == 3 ? 13 : output2 == 4 ? 24 : output2 == 5 ? 17 : 18"}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_F_P_Project.gizmo ================================================ Group { name P_Project help "Position Project\n\nCamera Project using only the render of the Position pass and the Camera.\n" onCreate "if nuke.thisNode()\['created'].value() == False:\n nuke.thisNode()\['created'].setValue(True)\n nuke.thisNode().knob('project_frame').setValue(nuke.frame())" knobChanged "if nuke.thisKnob().name() in ('matte', 'showPanel'):\n inputT = nuke.exists('Alpha')\n mode = nuke.thisNode()\['matte'].value()\n if mode == 'rgba.alpha':\n if str(inputT)== 'True':\n nuke.thisNode().setInput(3,None)\n n = nuke.toNode('Alpha')\n nuke.delete(n)\n else:\n if str(inputT)== 'False':\n #nuke.message('Add New Input in Node')\n i = nuke.createNode('Input', inpanel=False )\n i\['name'].setValue('Alpha')\n n = nuke.toNode('Switch2')\n n.setInput(0,i)" tile_color 0xdda92aff selected true icon F_iconalpha.png addUserKnob {20 User l "Position Project"} addUserKnob {6 created l INVISIBLE +INVISIBLE +STARTLINE} created true addUserKnob {41 in l "@b;P channel" t "Choose the position pass channel." T Shuffle_input_channel.in} addUserKnob {26 ""} addUserKnob {3 project_frame l "Project Frame" t "Enter the reference frame you want for the camera projection."} project_frame 1 addUserKnob {22 setframe l " Set Current! " t "Set automatically the reference frame to the current frame." -STARTLINE T nuke.thisNode().knob('project_frame').setValue(nuke.frame())} addUserKnob {6 freeze_image l "Hold Image also (same frame)" t "Hold to the same frame the input Image." +STARTLINE} addUserKnob {26 S01 l " "} addUserKnob {41 filter l Filter T STMap1.filter} addUserKnob {6 crop l Crop t "Crop the incoming image, putting black outside the format area." -STARTLINE} addUserKnob {6 antialiasing l Antialiasing t "Increase the size of the input position pass before the projection." +STARTLINE} addUserKnob {26 S04 l " " T " "} addUserKnob {26 ""} addUserKnob {26 T01 l " (Un)Premult by" t "The Position Pass is divide by the Alpha channel before being processed, and multiplied again afterwards. This can improve the texturing of anti-aliased edges." T ""} addUserKnob {6 premult l "" t "The Position Pass is divide by the Alpha channel before being processed, and multiplied again afterwards. This can improve the texturing of anti-aliased edges." -STARTLINE} addUserKnob {4 matte l "" t "Choose the Alpha channel.\nAlpha is usefull for a better result with clean edge (UnPremult / Premult).\n\nrgba.alpha: \nPick automaticaly the Alpha from the Input.\n\nrgba.alpha (New Input):\nPick the Alpha from an other Input." -STARTLINE M {rgba.alpha "rgba.alpha (New Input)" "" "" "" "" ""}} addUserKnob {26 by2 l " " T " "} addUserKnob {26 FTools l " " t "FranklinVfx.com\n" -STARTLINE T " Franklin Vfx - 2017"} addUserKnob {1 output l INVISIBLE +INVISIBLE} output "\[value project_frame]" } Input { inputs 0 name Pos xpos -276 ypos -437 number 1 } Dot { name Dot2 xpos -242 ypos -229 } set N696a4710 [stack 0] Dot { name Dot7 xpos -14 ypos -229 } set N696c80c0 [stack 0] push 0 Switch { inputs 2 which {{!matte i}} name Switch2 xpos -48 ypos -138 } NoOp { name AlphaCheck xpos -48 ypos -60 addUserKnob {20 User} addUserKnob {6 alpha +STARTLINE} alpha {{"\[python \"len(\\\[n for n in nuke.channels(nuke.thisNode().input(0)) if n.find(\\\".a\\\") != -1])>0\"]" i}} } AddChannels { channels rgba name AddAlpha xpos -48 ypos -17 } Dot { name Dot4 xpos -14 ypos 74 } set N696f74a0 [stack 0] Dot { name Dot5 xpos -14 ypos 1201 } push $N696f74a0 push $N696c80c0 Dot { name Dot3 xpos 208 ypos -229 } set N69491b50 [stack 0] Shuffle { in rgb name Shuffle_input_channel xpos 174 ypos -27 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 174 ypos 64 } set N696ec8b0 [stack 0] push $N696ec8b0 Blur { inputs 1+1 size 2 invert_mask true name Blur1 xpos 386 ypos 64 disable {{!parent.antialiasing}} } Unpremult { name Unpremult1 xpos 386 ypos 102 } Dot { name Dot1 xpos 420 ypos 198 } push $N696ec8b0 Switch { inputs 2 which {{parent.premult}} name Switch9 xpos 174 ypos 194 disable {{!AlphaCheck.alpha}} } Reformat { type scale scale 2 pbb true name Reformat5 tile_color 0xff0000ff xpos 174 ypos 294 disable {{!parent.antialiasing}} } Expression { expr0 "(r - Proj_Cam.world_matrix.3)" expr1 "(g - Proj_Cam.world_matrix.7)" expr2 "(b - Proj_Cam.world_matrix.11)" name Distance xpos 174 ypos 417 } Expression { temp_name0 x temp_expr0 "Proj_Cam.world_matrix.0 * r + Proj_Cam.world_matrix.4 * g + Proj_Cam.world_matrix.8 * b" temp_name1 y temp_expr1 "Proj_Cam.world_matrix.1 * r + Proj_Cam.world_matrix.5 * g + Proj_Cam.world_matrix.9 * b" temp_name2 z temp_expr2 "Proj_Cam.world_matrix.2 * r + Proj_Cam.world_matrix.6 * g + Proj_Cam.world_matrix.10 * b" expr0 x expr1 y expr2 z name Transform xpos 174 ypos 452 } set N69d5f330 [stack 0] Expression { temp_name0 ratio temp_expr0 1 temp_name1 focal temp_expr1 Proj_Cam.focal temp_name2 u temp_expr2 "0.5 + (r * ((focal/(Proj_Cam.haperture))/b)) * -1" temp_name3 v temp_expr3 "0.5 + (g * ((focal/(Proj_Cam.vaperture * ratio))/b)) * -1" expr0 "u>0 && u<1 && v>0 && v<1 ? u : 0" expr1 "v>0 && v<1 && u>0 && u<1 ? v : 0" channel2 none channel3 none name Solve label ratio=1/pixel_aspect xpos 100 ypos 538 } push $N69d5f330 Expression { temp_name0 ratio temp_expr0 1 temp_name1 focal temp_expr1 Proj_Cam.focal temp_name2 u temp_expr2 "0.5 + (r * ((focal/(Proj_Cam.haperture))/b)) * -1" temp_name3 v temp_expr3 "0.5 + (g * ((focal/(Proj_Cam.vaperture * ratio))/b)) * -1" expr0 u expr1 v channel2 none channel3 none name Solve_Crop xpos 246 ypos 551 } Dissolve { inputs 2 which {{parent.crop}} name Dissolve2 xpos 174 ypos 635 } Input { inputs 0 name Image xpos 630 ypos -453 } FrameHold { first_frame {{parent.project_frame i x1060 1060}} name FrameHold1 xpos 630 ypos -356 disable {{!parent.freeze_image i}} } Log2Lin { operation lin2log name Log2Lin1 label "\[if \{\[value operation]==\"lin2log\"\} \{return \"\[knob this.icon F_iconstart.png]\"\} \{return \"\[knob this.icon F_iconend.png]\"\}]" xpos 630 ypos -318 icon F_iconstart.png } Reformat { type "to box" box_width {{parent.Crop1.box.r}} box_height {{parent.Crop1.box.t}} box_fixed true box_pixel_aspect {{parent.Crop1.softness}} resize none center false pbb true name Reformat2 xpos 630 ypos -207 } Reformat { type scale scale {{parent.Reformat5.scale}} pbb {{parent.Reformat5.pbb}} name Reformat7 tile_color 0xff0000ff xpos 630 ypos 291 disable {{!parent.antialiasing}} } Dot { name Dot12 xpos 664 ypos 773 } STMap { inputs 2 uv rgb blur_scale 0 maskChannel -rgba.alpha name STMap1 xpos 174 ypos 763 } Log2Lin { name Log2Lin2 label "\[if \{\[value operation]==\"lin2log\"\} \{return \"\[knob this.icon F_iconstart.png]\"\} \{return \"\[knob this.icon F_iconend.png]\"\}]" xpos 174 ypos 878 icon F_iconend.png } Clamp { maximum 1001 name Clamp1 xpos 174 ypos 969 } Reformat { type scale scale {{1/parent.Reformat5.scale}} pbb true name Reformat8 tile_color 0xff0000ff xpos 174 ypos 1094 disable {{!parent.antialiasing}} } set N69baeb10 [stack 0] Multiply { inputs 1+1 value 0 invert_mask true name Multiply1 xpos 77 ypos 1191 disable {{!AlphaCheck.alpha i}} } push $N69baeb10 Switch { inputs 2 which {{parent.premult}} name Switch10 xpos 174 ypos 1273 } Dot { name Dot6 xpos 208 ypos 1399 } push $N696a4710 Copy { inputs 2 channels rgba name Copy2 xpos -276 ypos 1382 } Output { name FranklinVFX xpos -276 ypos 1524 } Camera2 { inputs 0 read_from_file true display off selectable false useMatrix true matrix { {{"\[topnode parent.input2].world_matrix (parent.project_frame)"} {"\[topnode parent.input2].world_matrix (parent.project_frame)"} {"\[topnode parent.input2].world_matrix (parent.project_frame)"} {"\[topnode parent.input2].world_matrix (parent.project_frame)"}} {{"\[topnode parent.input2].world_matrix (parent.project_frame)"} {"\[topnode parent.input2].world_matrix (parent.project_frame)"} {"\[topnode parent.input2].world_matrix (parent.project_frame)"} {"\[topnode parent.input2].world_matrix (parent.project_frame)"}} {{"\[topnode parent.input2].world_matrix (parent.project_frame)"} {"\[topnode parent.input2].world_matrix (parent.project_frame)"} {"\[topnode parent.input2].world_matrix (parent.project_frame)"} {"\[topnode parent.input2].world_matrix (parent.project_frame)"}} {{"\[topnode parent.input2].world_matrix (parent.project_frame)"} {"\[topnode parent.input2].world_matrix (parent.project_frame)"} {"\[topnode parent.input2].world_matrix (parent.project_frame)"} {"\[topnode parent.input2].world_matrix (parent.project_frame)"}} } focal {{"\[topnode parent.input2].focal (parent.project_frame)"}} haperture {{"\[topnode parent.input2].haperture (parent.project_frame)"}} vaperture {{"\[topnode parent.input2].vaperture (parent.project_frame)"}} name Proj_Cam xpos 430 ypos 397 } Input { inputs 0 name Cam xpos 416 ypos 325 number 2 } push $N69491b50 Reformat { resize none center false name Reformat11 xpos 487 ypos -233 disable true } Crop { box {0 0 {input.width} {input.height}} softness {{"\[python nuke.value(\"%s.pixel_aspect\" % nuke.thisNode().name())]"}} name Crop1 knobChanged "a = nuke.thisNode()\naspectratio = a\['box_pixel_aspect'].value()\nprint(aspectratio)" xpos 487 ypos -207 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_F_P_Ramp.gizmo ================================================ Group { name P_Ramp help "P_Ramp\n\nCreate a ramp in the alpha channel using the render of the Position pass.\n\nThe result mask is create in the Alpha channel.\n" onCreate "if nuke.thisNode()\['created'].value() == False:\n nuke.thisNode()\['created'].setValue(True)\n \n if nuke.thisNode().input(0) is not None:\n w = nuke.thisNode().input(0).width()\n h = nuke.thisNode().input(0).height()\n nuke.thisNode().knob('_Start').setValue((w/2-100, h/2-100))\n nuke.thisNode().knob('_End').setValue((w/2+100, h/2+100))\n \n else:\n rw = nuke.root().format().width()\n rh = nuke.root().format().height()\n nuke.thisNode().knob('_Start').setValue((rw/2-100, rh/2-100))\n nuke.thisNode().knob('_End').setValue((rw/2+100, rh/2+100))" knobChanged "if nuke.thisKnob().name() == 'axex':\n nuke.thisNode()\['min_offset'].setValue(0)\n nuke.thisNode()\['max_offset'].setValue(0)\n\n xstart, ystart = nuke.thisNode().knob('_Start').value()\n xend, yend = nuke.thisNode().knob('_End').value()\n with nuke.thisNode():\n shuffle = nuke.toNode('Shuffle_input_channel')\n rs = shuffle.sample('red', xstart, ystart)\n gs = shuffle.sample('green', xstart, ystart)\n bs = shuffle.sample('blue', xstart, ystart)\n re = shuffle.sample('red', xend, yend)\n ge = shuffle.sample('green', xend, yend)\n be = shuffle.sample('blue', xend, yend)\n\n node = nuke.toNode('Color')\n node.knob('min').setValue(\[rs,gs,bs])\n node.knob('max').setValue(\[re,ge,be])\n\nif nuke.thisKnob().name() == '_Start':\n if nuke.root().knob('proxy').value() == True:\n nuke.message('You have to disable the proxy mode')\n else:\n animated = nuke.thisKnob().isAnimated()\n xPos, yPos = nuke.thisNode().knob('_Start').value()\n with nuke.thisNode():\n node = nuke.toNode('Shuffle_input_channel')\n r = node.sample('red', xPos, yPos)\n g = node.sample('green', xPos, yPos)\n b = node.sample('blue', xPos, yPos)\n \n node = nuke.toNode('Color')\n if animated:\n if not node.knob('min').isAnimated():\n node.knob('min').setAnimated()\n else:\n node.knob('min').clearAnimated()\n \n node.knob('min').setValue(\[r,g,b])\n\nif nuke.thisKnob().name() == '_End':\n if nuke.root().knob('proxy').value() == True:\n nuke.message('You have to disable the proxy mode')\n else:\n animated = nuke.thisKnob().isAnimated()\n xPos, yPos = nuke.thisNode().knob('_End').value()\n with nuke.thisNode():\n node = nuke.toNode('Shuffle_input_channel')\n r = node.sample('red', xPos, yPos)\n g = node.sample('green', xPos, yPos)\n b = node.sample('blue', xPos, yPos)\n \n node = nuke.toNode('Color')\n if animated:\n if not node.knob('max').isAnimated():\n node.knob('max').setAnimated()\n else:\n node.knob('max').clearAnimated()\n \n node.knob('max').setValue(\[r,g,b])\n\nif nuke.thisKnob().name() in ('matte', 'showPanel'):\n\tinputT = nuke.exists('Alpha')\n\tmode = nuke.thisNode()\['matte'].value()\n\tif mode == 'rgba.alpha':\n\t\tif str(inputT)== 'True':\n\t\t\tn = nuke.toNode('Alpha')\n\t\t\tnuke.delete(n)\n\telse:\n\t\tif str(inputT)== 'False':\n\t\t\tnuke.message('Add New Input in Node')\n\t\t\ti = nuke.createNode('Input', inpanel=False )\n\t\t\ti\['name'].setValue('Alpha')\n\t\t\tn = nuke.toNode('Switch2')\n\t\t\tn.setInput(0,i)\n\nnode = nuke.thisGroup()\nknob = nuke.thisKnob()\n\nif knob.name() == 'visualise':\n if knob.value():\n node\['point_detail'].setEnabled(True)\n node\['point_size'].setEnabled(True)\n node\['sphere'].setEnabled(True)\n else:\n node\['point_detail'].setEnabled(False)\n node\['point_size'].setEnabled(False)\n node\['sphere'].setEnabled(False)\n" tile_color 0xdda92aff selected true icon F_iconalpha.png addUserKnob {20 PR l "Position Ramp"} addUserKnob {6 created l INVISIBLE +INVISIBLE +STARTLINE} created true addUserKnob {41 in l "@b;P channel" t "Choose the position pass channel." T Shuffle_input_channel.in} addUserKnob {26 ""} addUserKnob {4 axex l Axe t "Choose the direction of the ramp." M {X Y Z}} addUserKnob {12 _Start l " Start " t "Set a position.\nIt will be the beginning of the ramp." -STARTLINE} _Start {1604 1000} addUserKnob {26 S01 l " " T " "} addUserKnob {12 _End l "End " t "Set a position.\nIt will be the end of the ramp." -STARTLINE} _End {1804 1200} addUserKnob {26 S02 l " "} addUserKnob {7 min_offset l "Start Offset" t "Offset the position of the beginning of the ramp." R -10 10} addUserKnob {7 max_offset l "End Offset" t "Offset the position of the end of the ramp." R -10 10} addUserKnob {26 S2 l " " T " "} addUserKnob {4 color l Overlay t "Show on the RGB the resulting mask using the overlay method.\nChoose the color of the overlay mask." M {none red green blue black "" "" ""}} color red addUserKnob {4 falloff l INVISIBLE t "Falloff profile of the feathered edge." +INVISIBLE M {Linear Smoothstep Cubic "Inverse Cubic" "" "" "" "" "" "" "" ""}} addUserKnob {26 ""} addUserKnob {20 options l "3D Options :" n 1} options 0 addUserKnob {6 visualise l "Visualize in 3D" t "Build Volume and Point Cloud in 3D Space." +STARTLINE} addUserKnob {7 point_detail l "Point Detail" t "Controls the number of available points to display in the Viewer. \n0 = No points, 1 = All available points" +DISABLED} point_detail 1 addUserKnob {7 point_size l "Point Size" t "Controls the display size of the points in the Viewer" +DISABLED R 0 10} point_size 2 addUserKnob {26 S07 l " "} addUserKnob {7 sphere l "(Start - End) Size" t "Adjust the size of the start point and the end point of the ramp." +DISABLED R 0.15 10} sphere 2 addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {26 T01 l " (Un)Premult by" T ""} addUserKnob {6 premult l "" t "The Position Pass is divide by the Alpha channel before being processed, and multiplied again afterwards. This can improve the texturing of anti-aliased edges." -STARTLINE} addUserKnob {4 matte l "" t "Choose the Alpha channel.\nAlpha is usefull for a better result with clean edge (UnPremult / Premult).\n\nrgba.alpha: \nAutomatic pick the .a from the Input.\n\nrgba.alpha (New Input):\nPick the .a from an other Input." -STARTLINE M {rgba.alpha "rgba.alpha (New Input)" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""}} addUserKnob {1 output l INVISIBLE +INVISIBLE} output "\[if \{\[value visualise]==\"true\"\} \{return \"\[knob this.tile_color 0xa30000ff]\"\} \{return \"\[knob this.tile_color 0xdda92aff]\"\}]Axe \[value axex]" addUserKnob {26 FT1 l " " T " "} addUserKnob {26 FTools l " " t "FranklinVFX.com\n" -STARTLINE T " Franklin VFX - 2017"} } Input { inputs 0 name Position xpos -448 ypos -854 } Dot { name Dot1 xpos -414 ypos -771 } set N6946d990 [stack 0] Dot { name Dot9 xpos -708 ypos -771 } set N696aafa0 [stack 0] push 0 Switch { inputs 2 which {{!matte}} name Switch2 xpos -1001 ypos -774 } NoOp { name AlphaCheck xpos -1001 ypos -719 addUserKnob {20 User} addUserKnob {6 alpha +STARTLINE} alpha {{"\[python \"len(\\\[n for n in nuke.channels(nuke.thisNode().input(0)) if n.find(\\\".a\\\") != -1])>0\"]" i}} } AddChannels { channels rgba name AddAlpha xpos -1001 ypos -695 } Dot { name Dot11 xpos -967 ypos -613 } set N6987be00 [stack 0] Dot { name Dot12 xpos -967 ypos 673 } push $N6987be00 push $N696aafa0 Shuffle { in rgb name Shuffle_input_channel knobChanged "if nuke.thisKnob().name() == 'in':\n xPos, yPos = nuke.thisGroup().knob('_Start').value()\n r = nuke.thisNode().sample('red', xPos, yPos)\n g = nuke.thisNode().sample('green', xPos, yPos)\n b = nuke.thisNode().sample('blue', xPos, yPos)\n node = nuke.toNode('Color')\n node.knob('min').setValue(\[r,g,b])\n\n xPos, yPos = nuke.thisGroup().knob('_End').value()\n r = nuke.thisNode().sample('red', xPos, yPos)\n g = nuke.thisNode().sample('green', xPos, yPos)\n b = nuke.thisNode().sample('blue', xPos, yPos)\n node.knob('max').setValue(\[r,g,b])" xpos -742 ypos -696 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy2 xpos -742 ypos -622 } set N698913e0 [stack 0] Unpremult { name Unpremult2 xpos -872 ypos -536 disable {{!AlphaCheck.alpha i}} } push $N698913e0 Switch { inputs 2 which {{parent.premult}} name Switch9 xpos -742 ypos -457 } Dot { name Dot8 xpos -708 ypos -353 } set N698aacb0 [stack 0] Expression { channel0 alpha expr0 clamp((b-(Color.min.b+parent.min_offset))/((Color.max.b+parent.max_offset)-(Color.min.b+parent.min_offset)),0,1) channel1 none channel2 none name Z xpos -639 ypos -216 } set N698aeb40 [stack 0] push $N698aacb0 Expression { channel0 alpha expr0 clamp((g-(Color.min.g+parent.min_offset))/((Color.max.g+parent.max_offset)-(Color.min.g+parent.min_offset)),0,1) channel1 none channel2 none name Y xpos -742 ypos -216 } set N698bae80 [stack 0] push $N698aacb0 Expression { channel0 alpha expr0 clamp((r-(Color.min.r+parent.min_offset))/((Color.max.r+parent.max_offset)-(Color.min.r+parent.min_offset)),0,1) channel1 none channel2 none name X xpos -848 ypos -216 } set N698c71f0 [stack 0] Switch { inputs 3 which {{axex}} name Switch3 xpos -742 ypos -93 } Dot { name Dot3 xpos -708 ypos 137 } set N698da240 [stack 0] Dot { name Dot16 xpos -708 ypos 233 } set N698de130 [stack 0] Dot { name Dot4 xpos -708 ypos 303 } push $N698de130 push $N6987be00 push $N6946d990 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos -448 ypos -623 } set N698e5ed0 [stack 0] Unpremult { name Unpremult1 xpos -578 ypos -537 disable {{!AlphaCheck.alpha i}} } push $N698e5ed0 Switch { inputs 2 which {{parent.premult}} name Switch4 xpos -448 ypos -458 } set N695085d0 [stack 0] Grade { inputs 1+1 white 0 add {{"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"red\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"} {"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"green\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"} {"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"blue\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"} {multiply}} name Grade3 xpos -448 ypos 230 disable {{"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"none\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"}} } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy3 xpos -448 ypos 293 } Dot { name Dot5 xpos -414 ypos 374 } set N68389690 [stack 0] Dot { name Dot6 xpos -529 ypos 374 } Dot { name Dot7 xpos -529 ypos 583 } Axis2 { inputs 0 display solid selectable false translate {{"\[python -execlocal axe\\ =\\ nuke.thisGroup().knob('axex').value()\\noffset\\ =\\ (\\\"Color.max+parent.max_offset\\\")\\nex\\ =\\ (\\\"Color.max\\\")\\n\\nif\\ axe\\ ==\\ \\\"X\\\":\\n\\ ret\\ =\\ offset\\nelse:\\n\\ ret\\ =\\ ex\\n]" i} {"\[python -execlocal axe\\ =\\ nuke.thisGroup().knob('axex').value()\\noffset\\ =\\ (\\\"Color.max+parent.max_offset\\\")\\nex\\ =\\ (\\\"Color.max\\\")\\n\\nif\\ axe\\ ==\\ \\\"Y\\\":\\n\\ ret\\ =\\ offset\\nelse:\\n\\ ret\\ =\\ ex\\n]" i} {"\[python -execlocal axe\\ =\\ nuke.thisGroup().knob('axex').value()\\noffset\\ =\\ (\\\"Color.max+parent.max_offset\\\")\\nex\\ =\\ (\\\"Color.max\\\")\\n\\nif\\ axe\\ ==\\ \\\"Z\\\":\\n\\ ret\\ =\\ offset\\nelse:\\n\\ ret\\ =\\ ex\\n]" i}} name End tile_color 0xa30000ff xpos 666 ypos -139 disable {{!parent.visualise i}} } Axis2 { inputs 0 display solid+wireframe selectable false translate {{"\[python -execlocal axe\\ =\\ nuke.thisGroup().knob('axex').value()\\noffset\\ =\\ (\\\"Color.min+parent.min_offset\\\")\\nex\\ =\\ (\\\"Color.min\\\")\\n\\nif\\ axe\\ ==\\ \\\"X\\\":\\n\\ ret\\ =\\ offset\\nelse:\\n\\ ret\\ =\\ ex\\n]"} {"\[python -execlocal axe\\ =\\ nuke.thisGroup().knob('axex').value()\\noffset\\ =\\ (\\\"Color.min+parent.min_offset\\\")\\nex\\ =\\ (\\\"Color.min\\\")\\n\\nif\\ axe\\ ==\\ \\\"Y\\\":\\n\\ ret\\ =\\ offset\\nelse:\\n\\ ret\\ =\\ ex]"} {"\[python -execlocal axe\\ =\\ nuke.thisGroup().knob('axex').value()\\noffset\\ =\\ (\\\"Color.min+parent.min_offset\\\")\\nex\\ =\\ (\\\"Color.min\\\")\\n\\nif\\ axe\\ ==\\ \\\"Z\\\":\\n\\ ret\\ =\\ offset\\nelse:\\n\\ ret\\ =\\ ex]"}} name Start xpos 272 ypos -138 disable {{!parent.visualise x104 1}} } push $N698aeb40 push $N695085d0 Dot { name Dot10 xpos -7 ypos -454 } set N69c017d0 [stack 0] Grade { inputs 1+1 white 0 add {{"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"red\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"} {"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"green\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"} {"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"blue\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"} {multiply}} name Grade7 xpos 92 ypos -216 disable {{"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"none\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"}} } push $N698aacb0 Dot { name Dot13 xpos -256 ypos -353 } Dot { name Dot14 xpos -256 ypos -163 } set N69c16570 [stack 0] PositionToPoints { inputs 2 display textured selectable false render_mode textured detail {{point_detail}} pointSize {{point_size}} name PositionToPoints3 xpos 92 ypos -167 disable {{!parent.visualise}} } push $N698bae80 push $N69c017d0 Grade { inputs 1+1 white 0 add {{"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"red\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"} {"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"green\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"} {"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"blue\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"} {multiply}} name Grade5 xpos -41 ypos -216 disable {{"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"none\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"}} } push $N69c16570 PositionToPoints { inputs 2 display textured selectable false render_mode textured detail {{point_detail}} pointSize {{point_size}} name PositionToPoints2 xpos -41 ypos -167 disable {{!parent.visualise}} } push $N698c71f0 push $N69c017d0 Grade { inputs 1+1 white 0 add {{"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"red\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"} {"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"green\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"} {"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"blue\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"} {multiply}} name Grade4 xpos -166 ypos -216 disable {{"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"none\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"}} } push $N69c16570 PositionToPoints { inputs 2 display textured selectable false render_mode textured detail {{point_detail}} pointSize {{point_size}} name PositionToPoints1 xpos -166 ypos -167 disable {{!parent.visualise}} } Switch { inputs 3 which {{axex}} name Switch5 xpos -41 ypos 35 disable {{!parent.visualise}} } push $N6946d990 Dot { name Dot15 xpos 479 ypos -771 } Shuffle { alpha white name Shuffle1 label "\[value in]" xpos 445 ypos -362 disable {{!parent.visualise}} } Grade { white 0 add {{"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"red\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"} {"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"green\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"} {"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"blue\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"} {multiply}} name Grade1 xpos 445 ypos -324 disable {{"\[python -execlocal col\\ =\\ nuke.thisGroup().knob('color').value()\\n\\nif\\ col\\ ==\\ \\\"none\\\":\\n\\ ret\\ =\\ 1\\nelse:\\n\\ ret\\ =\\ 0]"}} } Invert { channels rgb name Invert1 xpos 445 ypos -298 disable {{!parent.visualise}} } Multiply { value 0.1 name Multiply1 xpos 445 ypos -272 disable {{!parent.visualise}} } set N69c78280 [stack 0] Sphere { selectable false rows 10 columns 10 radius {{abs(parent.sphere-0.25/2)}} translate {{parent.Start.translate} {parent.Start.translate} {parent.Start.translate}} name Sphere3 xpos 398 ypos -119 disable {{!parent.visualise}} } push $N69c78280 Sphere { selectable false rows 10 columns 10 radius {{abs(parent.sphere-0.25/2)}} translate {{parent.End.translate} {parent.End.translate} {parent.End.translate}} name Sphere4 xpos 510 ypos -121 disable {{!parent.visualise}} } Scene { inputs 5 name Scene1 xpos 462 ypos 15 disable {{!parent.visualise}} } push $N698da240 ScanlineRender { inputs 2 name ScanlineRender1 xpos 452 ypos 134 disable true } Dot { name Dot2 xpos 486 ypos 474 } push $N68389690 Merge2 { inputs 2 bbox B name Merge1 xpos -448 ypos 470 disable true } CopyBBox { inputs 2 name CopyBBox1 xpos -448 ypos 579 } set N69047110 [stack 0] Multiply { inputs 1+1 value 0 invert_mask true name Multiply3 xpos -563 ypos 663 disable {{!AlphaCheck.alpha i}} } push $N69047110 Switch { inputs 2 which {{parent.premult}} name Switch10 xpos -448 ypos 756 } Output { name FranklinVFX xpos -448 ypos 841 } push $N698aacb0 NoOp { name Color xpos -848 ypos -357 hide_input true addUserKnob {20 User} addUserKnob {18 min} min {0 0 0} addUserKnob {6 min_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 min_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 max} max {0 0 0} addUserKnob {6 max_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 max_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_FastComplexityDistort.gizmo ================================================ Group { name FastComplexity_Distort tile_color 0xa57aaaff selected true addUserKnob {20 User} addUserKnob {26 text l "" +STARTLINE T "

Fast IDistort & STMap v1.0

\nFast implementation of iDistort and STMap for UV's with high complexity/detail\n

\n "} addUserKnob {41 useGPUIfAvailable l "Use GPU if available" T BlinkScript33.useGPUIfAvailable} addUserKnob {26 ""} addUserKnob {4 method l Method M {ST-Map IDistort}} addUserKnob {41 SaturationKernel_scaler l "Mip Level Scale" t "Scale mip level by this value \nHigher = Softer\nLower = Sharper but might skip details" T BlinkScript33.SaturationKernel_scaler} addUserKnob {6 boolean l "Keep uv Alpha" +STARTLINE} boolean true addUserKnob {20 advanced_tab l Advanced} addUserKnob {41 SaturationKernel_mip_levels l "mip limit" t "Clamp mip level at this" T BlinkScript33.SaturationKernel_mip_levels} } Input { inputs 0 name InputUV xpos 701 ypos 121 number 1 } set N8a65150 [stack 0] Input { inputs 0 name InputSrc xpos 583 ypos 119 } AddChannels { channels rgba name AddChannels1 xpos 583 ypos 177 } Dot { name Dot2 xpos 617 ypos 254 } set N2d0e67e0 [stack 0] Reformat { type scale scale 0.5 name Reformat26 xpos 78 ypos 251 } set N67cce60 [stack 0] Reformat { type scale scale 0.5 name Reformat27 xpos 78 ypos 299 } set N8cbca560 [stack 0] Reformat { type scale scale 0.5 name Reformat28 xpos 78 ypos 342 } set Nfc78aed0 [stack 0] Reformat { type scale scale 0.5 name Reformat29 xpos 78 ypos 401 disable {{!(min(input.width,input.height)>1)}} } set N78628ad0 [stack 0] Reformat { type scale scale 0.5 name Reformat30 xpos 78 ypos 449 disable {{!(min(input.width,input.height)>1)}} } set N3934e4d0 [stack 0] Reformat { type scale scale 0.5 name Reformat31 xpos 78 ypos 504 disable {{!(min(input.width,input.height)>1)}} } set N278cb280 [stack 0] Reformat { type scale scale 0.5 name Reformat32 xpos 78 ypos 552 disable {{!(min(input.width,input.height)>1)}} } set N8d4631a0 [stack 0] Reformat { type scale scale 0.5 name Reformat33 xpos 78 ypos 608 disable {{!(min(input.width,input.height)>1)}} } set Nb96b1920 [stack 0] Reformat { type scale scale 0.5 name Reformat34 xpos 78 ypos 664 disable {{!(min(input.width,input.height)>1)}} } set N100bb4d0 [stack 0] Reformat { type scale scale 0.5 name Reformat35 xpos 78 ypos 719 disable {{!(min(input.width,input.height)>1)}} } push $N100bb4d0 push $Nb96b1920 push $N8d4631a0 push $N278cb280 push $N3934e4d0 push $N78628ad0 push $Nfc78aed0 push $N8cbca560 push $N67cce60 push $N2d0e67e0 push $N8a65150 Grade { white {{InputSrc.width} {InputSrc.height} 0 0} white_panelDropped true black_clamp false name Grade44 xpos 812 ypos 225 disable {{parent.method!=0}} } set N8f0652a0 [stack 0] push $N8a65150 Expression { expr0 (x)/width expr1 (y)/height name Expression2 xpos 701 ypos 229 } Grade { white {{InputSrc.width} {InputSrc.height} 0 0} white_panelDropped true black_clamp false name Grade2 xpos 701 ypos 253 } Merge2 { inputs 2 operation plus name Merge1 xpos 812 ypos 373 } push $N8f0652a0 Expression { expr0 r-.5 expr1 g-.5 name Expression11 xpos 937 ypos 225 } Dot { name Dot3 xpos 971 ypos 258 } Dot { name Dot4 xpos 971 ypos 459 } Switch { inputs 2 which {{parent.method}} name Switch1 xpos 812 ypos 456 } Dot { name Dot1 xpos 846 ypos 722 } BlinkScript { inputs 12 recompileCount 226 ProgramGroup 1 KernelDescription "3 \"SaturationKernel\" iterate pixelWise d50b72ba34d6ca9c9e9846cee724250e1501d93b99201af43f5270b3281f99ff 13 \"srcUV\" Read Random \"src00\" Read Random \"src01\" Read Random \"src02\" Read Random \"src03\" Read Random \"src04\" Read Random \"src05\" Read Random \"src06\" Read Random \"src07\" Read Random \"src08\" Read Random \"src09\" Read Random \"src10\" Read Random \"dst\" Write Point 3 \"mip_levels\" Int 1 AAAAAA== \"scaler\" Float 1 AAAAAA== \"miplevel\" Int 1 AAAAAA== 3 \"mip_levels\" 1 1 Default \"scaler\" 1 1 Default \"miplevel\" 1 1 Default 0" kernelSource "inline float4 mix(float4 _X,float4 _Y,float _A)\{\n return _X*(1.0f-_A)+_Y*_A;\n\}\ninline float fract(float a_X)\n\{\n return a_X-floor(a_X);\n\}\n\nkernel SaturationKernel : ImageComputationKernel\n\{\n Image srcUV; // the input image\n Image src00; // the input image\n Image src01; // the input image\n Image src02; // the input image\n Image src03; // the input image\n Image src04; // the input image\n Image src05; // the input image\n Image src06; // the input image\n Image src07; // the input image\n Image src08; // the input image\n Image src09; // the input image\n Image src10; // the input image\n Image dst; // the output image\n\n param:\n int mip_levels;\n float scaler;\n int miplevel; //Not implemented, but used to control the mip manually\n\n float4 reader( float2 position, int mip_level )\{\n if (mip_level == 0)\{\n return bilinear(src00,position.x,position.y);\n \}\n else if (mip_level == 1)\{\n return bilinear(src01,position.x-.25f,position.y-.25f);\n \}\n else if (mip_level == 2)\{\n return bilinear(src02,position.x-0.5f,position.y-0.5f);\n \}\n else if (mip_level == 3)\{\n return bilinear(src03,position.x-0.5f,position.y-0.5f);\n \}\n else if (mip_level == 4)\{\n return bilinear(src04,position.x-0.5f,position.y-0.5f);\n \}\n else if (mip_level == 5)\{\n return bilinear(src05,position.x-0.5f,position.y-0.5f);\n \} \n else if (mip_level == 6)\{\n return bilinear(src06,position.x-0.5f,position.y-0.5f);\n \} \n else if (mip_level == 7)\{\n return bilinear(src07,position.x-0.5f,position.y-0.5f);\n \} \n else if (mip_level == 8)\{\n return bilinear(src08,position.x-0.5f,position.y-0.5f);\n \} \n else if (mip_level == 9)\{\n return bilinear(src09,position.x-0.5f,position.y-0.5f);\n \} \n else \{\n return bilinear(src10,position.x-0.5f,position.y-0.5f);\n \} \n \}\n\n void process(int2 pos) \{\n float4 p1 = srcUV(pos.x, pos.y);\n float4 p2 = srcUV(pos.x + 1, pos.y);\n float4 p3 = srcUV(pos.x, pos.y + 1);\n float4 p4 = srcUV(pos.x + 1, pos.y + 1);\n\n float minX = min(min(p1.x, p2.x), min(p3.x, p4.x));\n float maxX = max(max(p1.x, p2.x), max(p3.x, p4.x));\n float minY = min(min(p1.y, p2.y), min(p3.y, p4.y));\n float maxY = max(max(p1.y, p2.y), max(p3.y, p4.y));\n\n float width = maxX - minX;\n float height = maxY - minY;\n float mipfract = max(0.0f, min(mip_levels, (log2(max(width, height)) * scaler) + 0.0f));\n //mipfract = (int)miplevel; //Used to manually control the mip, not implemented\n int mipLevel = int(mipfract);\n\n float2 fpos = float2(p1.x,p1.y);\n\n float4 sample = reader(fpos/(pow(2.0f,mipLevel)),mipLevel);\n sample = mix(sample,reader(fpos/(pow(2.0f,mipLevel+1.0)),mipLevel+1.0f),fract(mipfract));\n\n dst() =sample;\n \}\n\n\};\n" useGPUIfAvailable false rebuild "" SaturationKernel_mip_levels 10 SaturationKernel_scaler 0.75 SaturationKernel_miplevel 7 rebuild_finalise "" name BlinkScript33 xpos 583 ypos 713 } Merge2 { inputs 2 operation copy output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge2 xpos 583 ypos 864 disable {{!parent.boolean}} } Output { name Output1 xpos 583 ypos 1019 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_FillSampler.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { name FillSampler selected true addUserKnob {20 User} addUserKnob {26 Info l " " T "FFFiller by Mads Hagbarth Damsbo\nAdd a source with a alpha mask to fill out."} addUserKnob {26 ""} addUserKnob {3 Itterations} Itterations 2 addUserKnob {26 ""} addUserKnob {6 Premult -STARTLINE} Premult true addUserKnob {20 Advanced} addUserKnob {3 MaxSamples l "Max Sample Count" -STARTLINE} MaxSamples 13 addUserKnob {3 SoftAlphaSamples l "Soft Alpha Samples"} SoftAlphaSamples 1 } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x8e388e00 label "This is a example of the \nsimple version of the algorithm" note_font_size 20 xpos 1302 ypos 428 bdwidth 278 bdheight 135 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x8e388e00 label "This is the more advanced version" note_font_size 20 xpos 1867 ypos 428 bdwidth 301 bdheight 133 } Input { inputs 0 name Input1 xpos 1678 ypos 282 } NoTimeBlur { name NoTimeBlur1 xpos 1678 ypos 331 } Grade { channels alpha add {{-(frame-floor(frame))}} name Grade1 xpos 1678 ypos 357 } Premult { name Premult1 xpos 1678 ypos 397 disable {{!parent.Premult}} } Dot { name Dot5 xpos 1712 ypos 445 } set N1a123c00 [stack 0] Group { name Group6 xpos 1990 ypos 501 addUserKnob {20 User} addUserKnob {3 maxsample l "Max Sample Depth"} maxsample {{parent.MaxSamples}} } Input { inputs 0 name Input1 xpos -524 ypos -4613 } Dot { name Dot7 xpos -490 ypos -4579 } Dot { name Controller tile_color 0x55ffffff gl_color 0x55ffffff label ControllerNode note_font "DejaVu Sans Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" note_font_color 0xaadfffff xpos -490 ypos -4485 addUserKnob {20 User} addUserKnob {3 samples} samples {{min(parent.maxsample,int(log(min(input.width,input.height))/log(2)))}} } set N1a12f060 [stack 0] Dot { name Controller1 tile_color 0x55ffffff gl_color 0x55ffffff label ControllerNode note_font "DejaVu Sans Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" note_font_color 0xaadfffff xpos 323 ypos -4473 addUserKnob {20 User} addUserKnob {3 samples} samples {{min(parent.maxsample,int(log(min(input.width,input.height))/log(2)))}} } set N1a131d00 [stack 0] Matrix { matrix { {0 0 0} {1 1 0} {1 1 0} } name Matrix10 xpos 393 ypos -4306 } set C23536d30 [stack 0] Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat1 xpos 393 ypos -4274 disable {{Controller1.samples<1}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression5 xpos 393 ypos -4250 } set N1a13ff40 [stack 0] Reformat { type "to box" box_width {{parent.Controller1.input.width}} box_height {{parent.Controller1.input.height}} box_fixed true scale 0.5 filter Parzen name Reformat38 xpos 283 ypos -4250 } set C1a1465b0 [stack 0] push $N1a131d00 Dot { name Dot1 xpos -45 ypos -4347 } Merge2 { inputs 2 operation under name Merge3 xpos -183 ypos -4250 } set N235370f0 [stack 0] clone $C23536d30 { xpos 393 ypos -4218 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat14 xpos 393 ypos -4186 disable {{Controller1.samples<2}} } clone $C23536d30 { xpos 393 ypos -4162 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat25 xpos 393 ypos -4130 disable {{Controller1.samples<2}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression7 xpos 393 ypos -4106 } set N1a167ca0 [stack 0] clone $C1a1465b0 { xpos 295 ypos -4106 selected false } push $N235370f0 Merge2 { inputs 2 operation under name Merge13 xpos -183 ypos -4106 disable {{Controller1.samples<2-1}} } set N1a1751d0 [stack 0] clone $C23536d30 { xpos 393 ypos -4057 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat15 xpos 393 ypos -4025 disable {{Controller1.samples<3}} } clone $C23536d30 { xpos 393 ypos -4001 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat26 xpos 393 ypos -3969 disable {{Controller1.samples<3}} } clone $C23536d30 { xpos 393 ypos -3945 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat27 xpos 393 ypos -3913 disable {{Controller1.samples<3}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression8 xpos 393 ypos -3867 } set N1a19fa60 [stack 0] clone $C1a1465b0 { xpos 289 ypos -3861 selected false } push $N1a1751d0 Merge2 { inputs 2 operation under name Merge15 xpos -183 ypos -3861 disable {{Controller1.samples<3-1}} } set N1a1acfb0 [stack 0] clone $C23536d30 { xpos 393 ypos -3804 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat16 xpos 393 ypos -3772 disable {{Controller1.samples<4}} } clone $C23536d30 { xpos 393 ypos -3748 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat28 xpos 393 ypos -3716 disable {{Controller1.samples<4}} } clone $C23536d30 { xpos 393 ypos -3692 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat29 xpos 393 ypos -3660 disable {{Controller1.samples<4}} } clone $C23536d30 { xpos 393 ypos -3636 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat30 xpos 393 ypos -3604 disable {{Controller1.samples<4}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression9 xpos 393 ypos -3549 } set N1a1e3bf0 [stack 0] clone $C1a1465b0 { xpos 289 ypos -3543 selected false } push $N1a1acfb0 Merge2 { inputs 2 operation under name Merge16 xpos -183 ypos -3543 disable {{Controller1.samples<4-1}} } set N1a1f1090 [stack 0] clone $C23536d30 { xpos 393 ypos -3487 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat17 xpos 393 ypos -3455 disable {{Controller1.samples<5}} } clone $C23536d30 { xpos 393 ypos -3431 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat31 xpos 393 ypos -3399 disable {{Controller1.samples<5}} } clone $C23536d30 { xpos 393 ypos -3375 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat32 xpos 393 ypos -3343 disable {{Controller1.samples<5}} } clone $C23536d30 { xpos 393 ypos -3319 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat33 xpos 393 ypos -3287 disable {{Controller1.samples<5}} } clone $C23536d30 { xpos 393 ypos -3263 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat34 xpos 393 ypos -3231 disable {{Controller1.samples<5}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression10 xpos 393 ypos -3165 } set N24f38190 [stack 0] clone $C1a1465b0 { xpos 289 ypos -3159 selected false } push $N1a1f1090 Merge2 { inputs 2 operation under name Merge17 xpos -183 ypos -3159 disable {{Controller1.samples<5-1}} } set N24f454e0 [stack 0] clone $C23536d30 { xpos 393 ypos -3125 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat18 xpos 393 ypos -3093 disable {{Controller1.samples<6}} } clone $C23536d30 { xpos 393 ypos -3069 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat35 xpos 393 ypos -3037 disable {{Controller1.samples<6}} } clone $C23536d30 { xpos 393 ypos -3013 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat36 xpos 393 ypos -2981 disable {{Controller1.samples<6}} } clone $C23536d30 { xpos 393 ypos -2957 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat37 xpos 393 ypos -2925 disable {{Controller1.samples<6}} } clone $C23536d30 { xpos 393 ypos -2901 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat39 xpos 393 ypos -2869 disable {{Controller1.samples<6}} } clone $C23536d30 { xpos 393 ypos -2845 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat40 xpos 393 ypos -2813 disable {{Controller1.samples<6}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression18 xpos 393 ypos -2771 } set N24f94020 [stack 0] clone $C1a1465b0 { xpos 289 ypos -2765 selected false } push $N24f454e0 Merge2 { inputs 2 operation under name Merge18 xpos -183 ypos -2765 disable {{Controller1.samples<6-1}} } set N24fa1550 [stack 0] clone $C23536d30 { xpos 393 ypos -2701 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat19 xpos 393 ypos -2669 disable {{Controller1.samples<7}} } clone $C23536d30 { xpos 393 ypos -2645 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat41 xpos 393 ypos -2613 disable {{Controller1.samples<7}} } clone $C23536d30 { xpos 393 ypos -2589 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat42 xpos 393 ypos -2557 disable {{Controller1.samples<7}} } clone $C23536d30 { xpos 393 ypos -2533 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat43 xpos 393 ypos -2501 disable {{Controller1.samples<7}} } clone $C23536d30 { xpos 393 ypos -2477 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat44 xpos 393 ypos -2445 disable {{Controller1.samples<7}} } clone $C23536d30 { xpos 393 ypos -2421 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat45 xpos 393 ypos -2389 disable {{Controller1.samples<7}} } clone $C23536d30 { xpos 393 ypos -2365 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat46 xpos 393 ypos -2333 disable {{Controller1.samples<7}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression19 xpos 393 ypos -2303 } set N2358ee20 [stack 0] clone $C1a1465b0 { xpos 289 ypos -2297 selected false } push $N24fa1550 Merge2 { inputs 2 operation under name Merge19 xpos -183 ypos -2297 disable {{Controller1.samples<7-1}} } set N2359c350 [stack 0] clone $C23536d30 { xpos 393 ypos -2213 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat20 xpos 393 ypos -2181 disable {{Controller1.samples<8}} } clone $C23536d30 { xpos 393 ypos -2157 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat47 xpos 393 ypos -2125 disable {{Controller1.samples<8}} } clone $C23536d30 { xpos 393 ypos -2101 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat48 xpos 393 ypos -2069 disable {{Controller1.samples<8}} } clone $C23536d30 { xpos 393 ypos -2045 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat49 xpos 393 ypos -2013 disable {{Controller1.samples<8}} } clone $C23536d30 { xpos 393 ypos -1989 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat50 xpos 393 ypos -1957 disable {{Controller1.samples<8}} } clone $C23536d30 { xpos 393 ypos -1933 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat51 xpos 393 ypos -1901 disable {{Controller1.samples<8}} } clone $C23536d30 { xpos 393 ypos -1877 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat52 xpos 393 ypos -1845 disable {{Controller1.samples<8}} } clone $C23536d30 { xpos 393 ypos -1821 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat53 xpos 393 ypos -1789 disable {{Controller1.samples<8}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression20 xpos 393 ypos -1729 } set N25007230 [stack 0] clone $C1a1465b0 { xpos 283 ypos -1729 selected false } push $N2359c350 Merge2 { inputs 2 operation under name Merge20 xpos -183 ypos -1729 disable {{Controller1.samples<8-1}} } set N25014760 [stack 0] clone $C23536d30 { xpos 393 ypos -1668 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat21 xpos 393 ypos -1636 disable {{Controller1.samples<9}} } clone $C23536d30 { xpos 393 ypos -1612 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat54 xpos 393 ypos -1580 disable {{Controller1.samples<9}} } clone $C23536d30 { xpos 393 ypos -1556 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat55 xpos 393 ypos -1524 disable {{Controller1.samples<9}} } clone $C23536d30 { xpos 393 ypos -1500 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat56 xpos 393 ypos -1468 disable {{Controller1.samples<9}} } clone $C23536d30 { xpos 393 ypos -1444 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat57 xpos 393 ypos -1412 disable {{Controller1.samples<9}} } clone $C23536d30 { xpos 393 ypos -1388 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat58 xpos 393 ypos -1356 disable {{Controller1.samples<9}} } clone $C23536d30 { xpos 393 ypos -1332 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat59 xpos 393 ypos -1300 disable {{Controller1.samples<9}} } clone $C23536d30 { xpos 393 ypos -1276 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat60 xpos 393 ypos -1244 disable {{Controller1.samples<9}} } clone $C23536d30 { xpos 393 ypos -1220 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat61 xpos 393 ypos -1188 disable {{Controller1.samples<9}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression21 xpos 393 ypos -1131 } set N25087800 [stack 0] clone $C1a1465b0 { xpos 283 ypos -1131 selected false } push $N25014760 Merge2 { inputs 2 operation under name Merge21 xpos -183 ypos -1131 disable {{Controller1.samples<9-1}} } set N25094d30 [stack 0] clone $C23536d30 { xpos 393 ypos -1051 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat22 xpos 393 ypos -1015 disable {{Controller1.samples<10}} } clone $C23536d30 { xpos 393 ypos -991 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat62 xpos 393 ypos -959 disable {{Controller1.samples<10}} } clone $C23536d30 { xpos 393 ypos -935 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat63 xpos 393 ypos -899 disable {{Controller1.samples<10}} } clone $C23536d30 { xpos 393 ypos -875 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat64 xpos 393 ypos -839 disable {{Controller1.samples<10}} } clone $C23536d30 { xpos 393 ypos -815 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat65 xpos 393 ypos -783 disable {{Controller1.samples<10}} } clone $C23536d30 { xpos 393 ypos -759 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat66 xpos 393 ypos -727 disable {{Controller1.samples<10}} } clone $C23536d30 { xpos 393 ypos -703 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat67 xpos 393 ypos -671 disable {{Controller1.samples<10}} } clone $C23536d30 { xpos 393 ypos -647 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat68 xpos 393 ypos -615 disable {{Controller1.samples<10}} } clone $C23536d30 { xpos 393 ypos -591 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat69 xpos 393 ypos -555 disable {{Controller1.samples<10}} } clone $C23536d30 { xpos 393 ypos -531 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat70 xpos 393 ypos -495 disable {{Controller1.samples<10}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression22 xpos 393 ypos -447 } set N24fb1cd0 [stack 0] clone $C1a1465b0 { xpos 283 ypos -447 selected false } push $N25094d30 Merge2 { inputs 2 operation under name Merge22 xpos -183 ypos -447 disable {{Controller1.samples<10-1}} } set N24fbf200 [stack 0] clone $C23536d30 { xpos 393 ypos -348 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat23 xpos 393 ypos -316 disable {{Controller1.samples<11}} } clone $C23536d30 { xpos 393 ypos -292 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat71 xpos 393 ypos -260 disable {{Controller1.samples<11}} } clone $C23536d30 { xpos 393 ypos -236 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat72 xpos 393 ypos -204 disable {{Controller1.samples<11}} } clone $C23536d30 { xpos 393 ypos -180 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat73 xpos 393 ypos -148 disable {{Controller1.samples<11}} } clone $C23536d30 { xpos 393 ypos -124 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat74 xpos 393 ypos -92 disable {{Controller1.samples<11}} } clone $C23536d30 { xpos 393 ypos -68 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat75 xpos 393 ypos -36 disable {{Controller1.samples<11}} } clone $C23536d30 { xpos 393 ypos -12 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat76 xpos 393 ypos 20 disable {{Controller1.samples<11}} } clone $C23536d30 { xpos 393 ypos 44 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat77 xpos 393 ypos 76 disable {{Controller1.samples<11}} } clone $C23536d30 { xpos 393 ypos 100 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat78 xpos 393 ypos 132 disable {{Controller1.samples<11}} } clone $C23536d30 { xpos 393 ypos 156 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat79 xpos 393 ypos 188 disable {{Controller1.samples<11}} } clone $C23536d30 { xpos 393 ypos 212 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat80 xpos 393 ypos 244 disable {{Controller1.samples<11}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression23 xpos 397 ypos 327 } set N2faf20 [stack 0] clone $C1a1465b0 { xpos 287 ypos 327 selected false } push $N24fbf200 Merge2 { inputs 2 operation under name Merge23 xpos -183 ypos 327 disable {{Controller1.samples<11-1}} } set N2520c420 [stack 0] clone $C23536d30 { xpos 393 ypos 414 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat24 xpos 393 ypos 446 disable {{Controller1.samples<12}} } clone $C23536d30 { xpos 393 ypos 470 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat81 xpos 393 ypos 502 disable {{Controller1.samples<12}} } clone $C23536d30 { xpos 393 ypos 526 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat82 xpos 393 ypos 558 disable {{Controller1.samples<12}} } clone $C23536d30 { xpos 393 ypos 582 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat83 xpos 393 ypos 614 disable {{Controller1.samples<12}} } clone $C23536d30 { xpos 393 ypos 638 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat84 xpos 393 ypos 670 disable {{Controller1.samples<12}} } clone $C23536d30 { xpos 393 ypos 694 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat85 xpos 393 ypos 726 disable {{Controller1.samples<12}} } clone $C23536d30 { xpos 393 ypos 750 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat86 xpos 393 ypos 782 disable {{Controller1.samples<12}} } clone $C23536d30 { xpos 393 ypos 806 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat87 xpos 393 ypos 838 disable {{Controller1.samples<12}} } clone $C23536d30 { xpos 393 ypos 862 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat88 xpos 393 ypos 894 disable {{Controller1.samples<12}} } clone $C23536d30 { xpos 393 ypos 918 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat89 xpos 393 ypos 950 disable {{Controller1.samples<12}} } clone $C23536d30 { xpos 393 ypos 974 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat90 xpos 393 ypos 1006 disable {{Controller1.samples<12}} } clone $C23536d30 { xpos 393 ypos 1030 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat91 xpos 393 ypos 1062 disable {{Controller1.samples<12}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression24 xpos 393 ypos 1126 } set N24fd0640 [stack 0] push $N2faf20 push $N24fb1cd0 push $N25087800 push $N25007230 push $N2358ee20 push $N24f94020 push $N24f38190 push $N1a1e3bf0 push $N1a19fa60 push $N1a167ca0 push $N1a13ff40 push $N1a12f060 clone $C23536d30 { xpos -420 ypos -4325 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat11 xpos -420 ypos -4293 disable {{Controller.samples<1}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression17 xpos -420 ypos -4269 } Switch { inputs 2 which {{parent.parent.Itterations>=1}} name Switch1 xpos -420 ypos -4245 } set N252a78e0 [stack 0] clone $C23536d30 { xpos -420 ypos -4168 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat10 xpos -420 ypos -4136 disable {{Controller.samples<2}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression16 xpos -420 ypos -4112 } Switch { inputs 2 which {{parent.parent.Itterations>=2}} name Switch3 xpos -420 ypos -4088 } set N24ff5320 [stack 0] clone $C23536d30 { xpos -420 ypos -3935 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat9 xpos -420 ypos -3903 disable {{Controller.samples<3}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression2 xpos -420 ypos -3879 } Switch { inputs 2 which {{parent.parent.Itterations>=3}} name Switch4 xpos -420 ypos -3855 } set N2530f7a0 [stack 0] clone $C23536d30 { xpos -420 ypos -3608 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat8 xpos -420 ypos -3576 disable {{Controller.samples<4}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression4 xpos -420 ypos -3552 } Switch { inputs 2 which {{parent.parent.Itterations>=4}} name Switch5 xpos -420 ypos -3528 } set N2531da70 [stack 0] clone $C23536d30 { xpos -420 ypos -3233 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat7 xpos -420 ypos -3201 disable {{Controller.samples<5}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression6 xpos -420 ypos -3173 } Switch { inputs 2 which {{parent.parent.Itterations>=5}} name Switch6 xpos -420 ypos -3149 } set N252af350 [stack 0] clone $C23536d30 { xpos -420 ypos -2831 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat6 xpos -420 ypos -2799 disable {{Controller.samples<6}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression11 xpos -420 ypos -2775 } Switch { inputs 2 which {{parent.parent.Itterations>=6}} name Switch7 xpos -420 ypos -2751 } set N252c5a30 [stack 0] clone $C23536d30 { xpos -420 ypos -2372 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat5 xpos -420 ypos -2340 disable {{Controller.samples<7}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression12 xpos -420 ypos -2316 } Switch { inputs 2 which {{parent.parent.Itterations>=7}} name Switch8 xpos -420 ypos -2292 } set N252dbfd0 [stack 0] clone $C23536d30 { xpos -420 ypos -1804 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat4 xpos -420 ypos -1772 disable {{Controller.samples<8}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression13 xpos -420 ypos -1748 } Switch { inputs 2 which {{parent.parent.Itterations>=8}} name Switch9 xpos -420 ypos -1724 } set N252f2570 [stack 0] clone $C23536d30 { xpos -420 ypos -1194 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat3 xpos -420 ypos -1162 disable {{Controller.samples<9}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression14 xpos -420 ypos -1138 } Switch { inputs 2 which {{parent.parent.Itterations>=9}} name Switch10 xpos -420 ypos -1114 } set N2540cb90 [stack 0] clone $C23536d30 { xpos -420 ypos -505 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat2 xpos -420 ypos -469 disable {{Controller.samples<10}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression15 xpos -420 ypos -445 } Switch { inputs 2 which {{parent.parent.Itterations>=10}} name Switch11 xpos -420 ypos -421 } set N25423130 [stack 0] clone $C23536d30 { xpos -420 ypos 276 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat13 xpos -420 ypos 308 disable {{Controller.samples<11}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression1 xpos -420 ypos 339 } Switch { inputs 2 which {{parent.parent.Itterations>=11}} name Switch12 xpos -420 ypos 363 } set N254396d0 [stack 0] clone $C23536d30 { xpos -420 ypos 1014 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat12 xpos -420 ypos 1060 disable {{Controller.samples<12}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression3 xpos -420 ypos 1096 } Switch { inputs 2 which {{parent.parent.Itterations>=12}} name Switch13 xpos -420 ypos 1120 } clone $C1a1465b0 { xpos -530 ypos 1096 selected false } push $N254396d0 clone $C1a1465b0 { xpos -530 ypos 339 selected false } push $N25423130 clone $C1a1465b0 { xpos -530 ypos -445 selected false } push $N2540cb90 clone $C1a1465b0 { xpos -530 ypos -1138 selected false } push $N252f2570 clone $C1a1465b0 { xpos -530 ypos -1748 selected false } push $N252dbfd0 clone $C1a1465b0 { xpos -524 ypos -2310 selected false } push $N252c5a30 clone $C1a1465b0 { xpos -524 ypos -2769 selected false } push $N252af350 clone $C1a1465b0 { xpos -524 ypos -3167 selected false } push $N2531da70 clone $C1a1465b0 { xpos -524 ypos -3546 selected false } push $N2530f7a0 clone $C1a1465b0 { xpos -524 ypos -3873 selected false } push $N24ff5320 clone $C1a1465b0 { xpos -518 ypos -4112 selected false } push $N252a78e0 clone $C1a1465b0 { xpos -530 ypos -4269 selected false } push $N1a12f060 Dot { name Dot6 xpos -962 ypos -4485 } Merge2 { inputs 2 operation under name Merge4 xpos -996 ypos -4269 } Merge2 { inputs 2 operation under name Merge5 xpos -996 ypos -4112 disable {{Controller.samples<2-1}} } Merge2 { inputs 2 operation under name Merge6 xpos -996 ypos -3873 disable {{Controller.samples<3-1}} } Merge2 { inputs 2 operation under name Merge7 xpos -996 ypos -3546 disable {{Controller.samples<4-1}} } Merge2 { inputs 2 operation under name Merge8 xpos -996 ypos -3167 disable {{Controller.samples<5-1}} } Merge2 { inputs 2 operation under name Merge9 xpos -996 ypos -2769 disable {{Controller.samples<6-1}} } Merge2 { inputs 2 operation under name Merge10 xpos -996 ypos -2310 disable {{Controller.samples<7-1}} } Merge2 { inputs 2 operation under name Merge11 xpos -996 ypos -1748 disable {{Controller.samples<8-1}} } Merge2 { inputs 2 operation under name Merge14 xpos -996 ypos -1138 disable {{Controller.samples<9-1}} } Merge2 { inputs 2 operation under name Merge12 xpos -996 ypos -445 disable {{Controller.samples<10-1}} } Merge2 { inputs 2 operation under name Merge1 xpos -1000 ypos 339 disable {{Controller.samples<11-1}} } Merge2 { inputs 2 operation under name Merge2 xpos -1000 ypos 1096 disable {{Controller.samples<12-1}} } Output { name Output1 xpos -1000 ypos 1203 } push $N24fd0640 clone $C1a1465b0 { xpos 283 ypos 1126 selected false } push $N2520c420 Merge2 { inputs 2 operation under name Merge24 xpos -187 ypos 1126 disable {{Controller1.samples<12-1}} } end_group push $N1a123c00 Group { name Simple selected true xpos 1371 ypos 506 addUserKnob {20 User} addUserKnob {3 maxsample l "Max Sample Depth"} maxsample {{parent.MaxSamples}} } Input { inputs 0 name Input1 xpos -420 ypos 304 } Dot { name Dot7 xpos -386 ypos 338 } Dot { name Controller tile_color 0x55ffffff gl_color 0x55ffffff label ControllerNode note_font "DejaVu Sans Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" note_font_color 0xaadfffff selected true xpos -386 ypos 432 addUserKnob {20 User} addUserKnob {3 samples} samples {{min(parent.maxsample,int(log(min(input.width,input.height))/log(2)))}} } set N2536e6a0 [stack 0] Matrix { matrix { {0 0 0} {1 1 0} {1 1 0} } name Matrix10 xpos -420 ypos 473 } set C25112840 [stack 0] Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat11 xpos -420 ypos 505 disable {{Controller.samples<1}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression17 xpos -420 ypos 529 } set N2511e800 [stack 0] clone $C25112840 { xpos -420 ypos 557 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat10 xpos -420 ypos 589 disable {{Controller.samples<2}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression16 xpos -420 ypos 613 } set N25130e90 [stack 0] clone $C25112840 { xpos -420 ypos 641 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat9 xpos -420 ypos 673 disable {{Controller.samples<3}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression2 xpos -420 ypos 697 } set N25143520 [stack 0] clone $C25112840 { xpos -420 ypos 725 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat8 xpos -420 ypos 757 disable {{Controller.samples<4}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression4 xpos -420 ypos 781 } set N25370fe0 [stack 0] clone $C25112840 { xpos -420 ypos 805 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat7 xpos -420 ypos 837 disable {{Controller.samples<5}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression6 xpos -420 ypos 865 } set N25383670 [stack 0] clone $C25112840 { xpos -420 ypos 893 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat6 xpos -420 ypos 925 disable {{Controller.samples<6}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression11 xpos -420 ypos 949 } set N25395d00 [stack 0] clone $C25112840 { xpos -420 ypos 977 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat5 xpos -420 ypos 1009 disable {{Controller.samples<7}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression12 xpos -420 ypos 1033 } set N253a83f0 [stack 0] clone $C25112840 { xpos -420 ypos 1061 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat4 xpos -420 ypos 1093 disable {{Controller.samples<8}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression13 xpos -420 ypos 1117 } set N253bab30 [stack 0] clone $C25112840 { xpos -420 ypos 1145 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat3 xpos -420 ypos 1177 disable {{Controller.samples<9}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression14 xpos -420 ypos 1201 } set N253cd190 [stack 0] clone $C25112840 { xpos -420 ypos 1225 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat2 xpos -420 ypos 1261 disable {{Controller.samples<10}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression15 xpos -420 ypos 1285 } set N253df840 [stack 0] clone $C25112840 { xpos -420 ypos 1320 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat13 xpos -420 ypos 1352 disable {{Controller.samples<11}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression1 xpos -420 ypos 1383 } set N253f20b0 [stack 0] clone $C25112840 { xpos -420 ypos 1426 selected false } Reformat { type scale scale 0.5 resize fit center false filter Impulse name Reformat12 xpos -420 ypos 1472 disable {{Controller.samples<12}} } Expression { expr0 a>0?r/a:a expr1 a>0?g/a:a expr2 a>0?b/a:a expr3 a>0?a/a:a name Expression3 xpos -420 ypos 1508 } Reformat { type "to box" box_width {{parent.Controller.input.width}} box_height {{parent.Controller.input.height}} box_fixed true scale 0.5 filter Parzen name Reformat38 xpos -530 ypos 1508 } set C2550edf0 [stack 0] push $N253f20b0 clone $C2550edf0 { xpos -530 ypos 1383 selected false } push $N253df840 clone $C2550edf0 { xpos -530 ypos 1285 selected false } push $N253cd190 clone $C2550edf0 { xpos -530 ypos 1201 selected false } push $N253bab30 clone $C2550edf0 { xpos -530 ypos 1117 selected false } push $N253a83f0 clone $C2550edf0 { xpos -524 ypos 1039 selected false } push $N25395d00 clone $C2550edf0 { xpos -524 ypos 955 selected false } push $N25383670 clone $C2550edf0 { xpos -524 ypos 871 selected false } push $N25370fe0 clone $C2550edf0 { xpos -524 ypos 787 selected false } push $N25143520 clone $C2550edf0 { xpos -524 ypos 703 selected false } push $N25130e90 clone $C2550edf0 { xpos -518 ypos 613 selected false } push $N2511e800 clone $C2550edf0 { xpos -530 ypos 529 selected false } push $N2536e6a0 Dot { name Dot6 xpos -858 ypos 432 } Merge2 { inputs 2 operation under name Merge4 xpos -996 ypos 529 } Merge2 { inputs 2 operation under name Merge5 xpos -996 ypos 613 disable {{Controller.samples<2-1}} } Merge2 { inputs 2 operation under name Merge6 xpos -996 ypos 703 disable {{Controller.samples<3-1}} } Merge2 { inputs 2 operation under name Merge7 xpos -996 ypos 787 disable {{Controller.samples<4-1}} } Merge2 { inputs 2 operation under name Merge8 xpos -996 ypos 871 disable {{Controller.samples<5-1}} } Merge2 { inputs 2 operation under name Merge9 xpos -996 ypos 955 disable {{Controller.samples<6-1}} } Merge2 { inputs 2 operation under name Merge10 xpos -996 ypos 1039 disable {{Controller.samples<7-1}} } Merge2 { inputs 2 operation under name Merge11 xpos -996 ypos 1117 disable {{Controller.samples<8-1}} } Merge2 { inputs 2 operation under name Merge14 xpos -996 ypos 1201 disable {{Controller.samples<9-1}} } Merge2 { inputs 2 operation under name Merge12 xpos -996 ypos 1285 disable {{Controller.samples<10-1}} } Merge2 { inputs 2 operation under name Merge1 xpos -1000 ypos 1383 disable {{Controller.samples<11-1}} } Merge2 { inputs 2 operation under name Merge2 xpos -1000 ypos 1508 disable {{Controller.samples<12-1}} } Output { name Output1 xpos -1000 ypos 1615 } end_group Switch { inputs 2 which {{parent.Itterations!=0}} name Switch1 label "\[value which]" xpos 1672 ypos 564 } TimeBlur { divisions {{parent.SoftAlphaSamples}} shutter 1 shutteroffset start shuttercustomoffset 0 name TimeBlur1 xpos 1672 ypos 635 } Output { name Output1 xpos 1672 ypos 699 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_FlareSuperStar.gizmo ================================================ Group { name FlareSuperStar selected true addUserKnob {20 User l "Shape Controls"} addUserKnob {26 ""} addUserKnob {26 _3 l "Global Controls"} addUserKnob {41 mode t "the mode in which the tool operates.\nPosition: the flare gets generated at the defined position\nConvolve: the flare gets applied via a convolve of the input image\nOutput Kernel: outputs the kernel that would get feeded into the convolve so you could make further adjustetments and apply as your custom filter to your node of choice" T MasterControl.mode} addUserKnob {41 center t "defines the center where the flare gets created if in position-mode." -STARTLINE T MasterControl.center} addUserKnob {6 togglefix l "toggle to fix \"missing channel\" error caused by the convolve" t "Sometimes, when in convolve-mode, the tool gives a \"missing channel\" error. This is a dirty workaround to fix it. It might occure again, then toggle the checkbox again." +STARTLINE} addUserKnob {41 multiply_1 l intensity t "global intensity" T MasterControl.multiply_1} addUserKnob {41 gamma_2_1 l gamma t "global gamma" T MasterControl.gamma_2} addUserKnob {41 scale t "changes the x and y scale of the flare around the center point." T MasterControl.scale} addUserKnob {41 relativeradius l radius t "Controls the kernel size if in konvolve mode and the radius at which the flare will be zero if falloff to zero is enabled.\nThis is a factor of the image width." T MasterControl.relativeradius} addUserKnob {26 ""} addUserKnob {26 "" l "Ray Controls"} addUserKnob {41 nr l "number of rays" t "Sets the number of rays that will be generated by the flare." T MasterControl.nr} addUserKnob {41 gamma_4 l "odd ray length" t xfgjxfhjc T Grade5.gamma} addUserKnob {26 text_3 l "" +STARTLINE T "doesn't actually change the length of the rays,\nbut applies a gamma correction"} addUserKnob {41 rotation t "Controls the Rotation of the rays." T MasterControl.rotation} addUserKnob {41 multiply_2 l "ray intensity" t "Controls intensity of the rays." T MasterControl.multiply_2} addUserKnob {41 gamma_3 l "ray gamma" t "Controls the gamma of the rays." T MasterControl.gamma_3} addUserKnob {41 thickness t "Lets you adjust the thickness of the rays." T MasterControl.thickness} addUserKnob {41 multiply l softness t "Lets you control the softness of the rays." T MasterControl.multiply} addUserKnob {41 coneangle l "Cone angle" t "Controls the angle of the rays." T MasterControl.coneangle} addUserKnob {26 "" l "Spread Controls"} addUserKnob {41 sdistn l "spread distance" t "Distance at which the spread will start. This is a factor of the global radius." T MasterControl.sdistn} addUserKnob {26 text_2 l "" +STARTLINE T "The spread distance is a factor of the radius."} addUserKnob {41 ssize l "spread angle" t "Spreads the rays via changing their angle from the spreaddistance outwards." T MasterControl.ssize} addUserKnob {41 sthk l "spread thickness" t "Changes the thickness of the rays from the spreaddistance outwards." T MasterControl.sthk} addUserKnob {41 sfotype l "spread falloff type" t "Lets you choose between a linear or an exponential falloff of the spread." T MasterControl.sfotype} addUserKnob {41 gamma l "" t "Gamma control for the spread falloff." -STARTLINE T MasterControl.gamma} addUserKnob {26 ""} addUserKnob {41 boolean l "Enable inner Glow" T MasterControl.boolean} addUserKnob {41 boolean_2 l "Enable Glare" T MasterControl.boolean_2} addUserKnob {41 boolean_1 l "Crop convolve" t "Crops the result to the image format in convolve mode to reduce boundingbox size." T MasterControl.boolean_1} addUserKnob {26 ""} addUserKnob {26 _1 l "" +STARTLINE T "FlareSuperStar v1.2\nby Lukas Fabian - December 2020"} addUserKnob {20 tab l "Glare Controls"} addUserKnob {26 ""} addUserKnob {41 Intensity l intensity t "Controls intensity of the glare." T NoiseControl.Intensity} addUserKnob {41 gamma_1_1 l gamma t "Controls gamma of the glare." T NoiseControl.gamma_1} addUserKnob {26 ""} addUserKnob {41 detail t "Controls the ray detail of the glare." T NoiseControl.detail} addUserKnob {41 z1 l z t "zOffset for the ray-detail." T NoiseControl.z1} addUserKnob {41 detail_1 l detail2 t "Controls additional detail for the rays outwards." T NoiseControl2.detail} addUserKnob {41 z1_1 l z2 t "zOffset for detail2." T NoiseControl2.z1} addUserKnob {41 sfix l "Enable seam fix" t "If disabled there could be a visible 0-1 in the glare. Also changes the bottom part of the glare appearence. Just try which setting suits your situation." T NoiseControl.sfix} addUserKnob {26 ""} addUserKnob {41 speed l "shimmer speed" t "If set to anything bigger then zero the glare will shimmer over time. The bigger the value the faster the shimmer." T NoiseControl.speed} addUserKnob {41 posspeed l "position change speed" t "Only works properly in position-mode.\nIf the center-position of the flare is changed, the glare will change its shape.\nThe higher the number the bigger the change. If it´s set to zero there won´t be any change in the glare due to position changes." T NoiseControl.posspeed} addUserKnob {20 tab_1 l "Glow Controls"} addUserKnob {26 _2 l "" +STARTLINE} addUserKnob {41 multiply_3 l "glow intensity" t "Controls the intensity of the glow." T Grade16.multiply} addUserKnob {41 gamma_2 l "glow gamma" t "Controls the gamma of the glow." T Grade16.gamma} addUserKnob {20 fotz l "Falloff to Zero"} addUserKnob {26 ""} addUserKnob {26 text l "" +STARTLINE T "If \"falloff to zero\" is enabled, the flare will be zero at the point defined by \nthe global radius. If \"fall off to zero\" is disabled it results in an inverse square\nfalloff, this might introduce edges in convolve-mode.\n\nUsually you want to have it on in convolve-mode, and off in position mode.\n\n"} addUserKnob {26 text_1 l "Falloff to Zero"} addUserKnob {41 fo l "enable in position mode" T MasterControl.fo} addUserKnob {41 focm l "enable in convolve mode" T MasterControl.focm} addUserKnob {41 fotype l "falloff type" t "Lets you choose between a linear or an exponential falloff." T MasterControl.fotype} addUserKnob {41 gamma_1 l "" t "Gammacontrol for the falloff." -STARTLINE T MasterControl.gamma_1} addUserKnob {26 ""} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x71c67100 label Controlers note_font_size 42 xpos 2321 ypos -1190 bdwidth 855 bdheight 322 } Grade { inputs 0 black_clamp false name AngleControl xpos 2440 ypos -1028 } StickyNote { inputs 0 name StickyNote4 label " create glare " note_font_size 40 xpos -1067 ypos -10 } Grade { inputs 0 black_clamp false name ARControl xpos 2697 ypos -1029 } Noise { inputs 0 replace true zoffset {{z1+frame*(speed/150)}} translate {13800.29102 822.1937866} center {2275 1208} name NoiseControl xpos 2824 ypos -1028 addUserKnob {20 User l Controls} addUserKnob {7 z1 l z} z1 1 addUserKnob {7 speed l "shimmer speed" R 0 5} speed 1 addUserKnob {7 detail} detail 15 addUserKnob {41 Intensity l intensity T Grade3.multiply} addUserKnob {41 gamma_1 l gamma T Grade4.gamma} addUserKnob {7 posspeed l "position speed" R 0 5} posspeed 1.5 addUserKnob {6 sfix l "Enable seam fix" +STARTLINE} sfix true } Noise { inputs 0 replace true zoffset {{z1+frame*(speed/100)}} translate {13800.29102 822.1937866} center {2275 1208} name NoiseControl2 xpos 2959 ypos -1034 addUserKnob {20 User l "z Controls"} addUserKnob {7 z1 l z} z1 1 addUserKnob {7 speed} speed {{parent.NoiseControl.speed}} addUserKnob {7 detail l detail2} detail 10 } Input { inputs 0 name img xpos 1386 ypos -1284 } Dot { name Dot19 xpos 1420 ypos -1215 } Dot { name Dot11 xpos 1420 ypos -1090 } set N1bbe4a90 [stack 0] Dot { name Dot18 xpos 1826 ypos -1090 } set N1bbe95b0 [stack 0] NoOp { name MasterControl xpos 2579 ypos -1035 addUserKnob {20 User l Controls} addUserKnob {26 _1 l "" +STARTLINE} addUserKnob {26 _4 l "General Controls"} addUserKnob {4 mode M {Position Convolve "Output Kernel" ""}} addUserKnob {12 center -STARTLINE} center {728 644} addUserKnob {41 multiply_1 l intensity T Grade14.multiply} addUserKnob {41 gamma_2 l gamma T Grade14.gamma} addUserKnob {3 nr l "number of rays"} nr 8 addUserKnob {41 scale T Reformat3.scale} addUserKnob {7 rotation R 0 360} addUserKnob {7 radius l "absolute radius" R 1 1000} radius {{(width/8)*(relativeradius+0.0000001)}} addUserKnob {7 relativeradius l radius R 0 10} relativeradius 1 addUserKnob {4 fotype l "falloff type" M {linear exponential}} fotype exponential addUserKnob {41 gamma_1 l "" -STARTLINE T Grade12.gamma} addUserKnob {6 fo l "disable falloff" +STARTLINE} addUserKnob {6 focm l "enable in convolve mode" +STARTLINE} focm true addUserKnob {26 _2 l "" +STARTLINE} addUserKnob {26 _5 l "Ray Controls"} addUserKnob {41 multiply_2 l "ray intensity" T Grade15.multiply} addUserKnob {41 gamma_3 l "ray gamma" T Grade15.gamma} addUserKnob {7 thickness R -2 2} addUserKnob {41 multiply l softness T Grade9.multiply} addUserKnob {41 coneangle l "cone angle" T AngleControl.multiply} addUserKnob {26 _3 l "" +STARTLINE} addUserKnob {26 _6 l "Spread Controls"} addUserKnob {7 sdist l "spread distance safe" R 0.0001 1} sdist {{sdistn+0.000001}} addUserKnob {7 sdistn l "spread distance"} sdistn 0.185 addUserKnob {7 ssize l "spread angle" R -2 2} addUserKnob {7 sthk l "spread thickness" R -2 2} addUserKnob {4 sfotype l "spread falloff type" M {linear exponential}} addUserKnob {41 gamma l "" -STARTLINE T Grade10.gamma} addUserKnob {26 ""} addUserKnob {6 boolean l "Enable inner Flare" +STARTLINE} boolean true addUserKnob {6 boolean_2 l "enable glare" +STARTLINE} boolean_2 true addUserKnob {6 boolean_1 l "Crop convolve" +STARTLINE} boolean_1 true } Reformat { inputs 0 format "1024 1024 0 0 1024 1024 1 square_1K" box_width 2000 filter Lanczos4 name Reformat1 xpos 716 ypos -1000 } Dot { name Dot7 xpos 750 ypos -937 } set Na837ab0 [stack 0] Dot { name Dot8 xpos -150 ypos -937 } Dot { name Dot10 xpos -150 ypos -421 } set N19e29ea0 [stack 0] Dot { name Dot20 xpos -150 ypos 96 } set Na839160 [stack 0] Dot { name Dot16 xpos -150 ypos 402 } set Na83d980 [stack 0] Dot { name Dot9 xpos -150 ypos 550 } Expression { temp_name0 centerx temp_expr0 width/2 temp_name1 centery temp_expr1 height/2 temp_name2 radius temp_expr2 (width/2)-10 expr0 "(radius - sqrt( pow2(x-centerx)+pow2(y-centery) ) ) / radius" name Expression13 xpos 26 ypos 546 } push $N1bbe4a90 Dot { name Dot12 xpos -17 ypos -1090 } Shuffle { red black green black blue black alpha black name Shuffle5 label "\[value in]" xpos -51 ypos -1005 } Dot { name Dot13 xpos -17 ypos -893 } set Na81c980 [stack 0] Dot { name Dot14 xpos -17 ypos -510 } set Na821520 [stack 0] Dot { name Dot6 xpos -17 ypos 174 } set N8173a30 [stack 0] Dot { name Dot1 xpos -17 ypos 381 } set N8234980 [stack 0] Dot { name Dot15 xpos -17 ypos 483 } Expression { temp_name0 centerx temp_expr0 parent.MasterControl.center.x temp_name1 centery temp_expr1 parent.MasterControl.center.y temp_name2 radius temp_expr2 parent.MasterControl.radius temp_name3 sw temp_expr3 parent.MasterControl.scale.0 expr0 "(radius - sqrt( pow2((x-centerx)*(1/sw))+pow2((y-centery)*(1/parent.MasterControl.scale.1)) ) ) / radius" name Expression8 xpos 197 ypos 478 } Switch { inputs 2 which {{parent.MasterControl.mode}} name Switch3 xpos 197 ypos 564 } Grade { name Grade20 xpos 197 ypos 604 } set N1abd7130 [stack 0] Expression { expr0 pow2(r) name Expression9 xpos 117 ypos 650 } Dot { name Dot4 label expo xpos 151 ypos 691 } push $N1abd7130 Dot { name Dot37 xpos 338 ypos 650 } Dot { name Dot5 label linear xpos 338 ypos 686 } Switch { inputs 2 which {{parent.MasterControl.fotype}} name Switch1 xpos 201 ypos 720 } Grade { black_clamp false name Grade12 xpos 201 ypos 775 } Shuffle { green red blue red alpha black name Shuffle8 label "\[value in]" xpos 201 ypos 812 } Dot { name Dot32 xpos 235 ypos 962 } set N1b7cb4a0 [stack 0] Dot { name Dot41 xpos 235 ypos 1011 } push $Na83d980 Dot { name Dot39 xpos 480 ypos 402 } Expression { temp_name0 centerx temp_expr0 512 temp_name1 centery temp_expr1 512 temp_name2 radius temp_expr2 parent.MasterControl.radius expr0 "sqrt( pow2((x/width*1024)-centerx)+pow2((y/height*1024)-centery) )" name Expression28 xpos 446 ypos 526 } Expression { expr0 isnan(r)?0:1/(r*r) name Expression29 xpos 446 ypos 568 } Merge2 { inputs 2 operation multiply name Merge10 xpos 446 ypos 1007 disable {{1-parent.MasterControl.focm}} } Dot { name Dot40 xpos 480 ypos 1070 } push $N1b7cb4a0 push $N8234980 Dot { name Dot38 xpos 608 ypos 381 } Expression { temp_name0 centerx temp_expr0 parent.MasterControl.center.x/width*1920 temp_name1 centery temp_expr1 parent.MasterControl.center.y/height*1080 temp_name2 sw temp_expr2 parent.MasterControl.scale.0 temp_name3 sh temp_expr3 parent.MasterControl.scale.1 expr0 "sqrt( pow2(((x/width*1920)-centerx)*(1/sw))+pow2(((y/height*1080)-centery)*(1/sh)) )" name Expression2 xpos 574 ypos 501 } Expression { expr0 isnan(r)?0:1/(r*r) name Expression3 xpos 574 ypos 544 } Merge2 { inputs 2 operation multiply name Merge3 xpos 574 ypos 958 disable {{1-parent.MasterControl.fo}} } Switch { inputs 2 which {{parent.Switch3.which}} name Switch10 xpos 574 ypos 1066 } Grade { multiply 1000 black_clamp false name Grade1 xpos 574 ypos 1189 } Clamp { maximum 2000 name Clamp1 xpos 574 ypos 1237 } Dot { name Dot21 xpos 608 ypos 1358 } set N1bbe1990 [stack 0] Grade { black_clamp false name Grade4 xpos -675 ypos 1354 } push $Na839160 Dot { name Dot24 xpos -656 ypos 96 } Dot { name Dot22 xpos -1105 ypos 96 } set N1b8ade90 [stack 0] Dot { name Dot29 xpos -1739 ypos 186 } set Na7f7730 [stack 0] Expression { temp_name0 centerx temp_expr0 width/2 temp_name1 centery temp_expr1 height/2 temp_name2 sw temp_expr2 parent.MasterControl.scale.0 temp_name3 sh temp_expr3 parent.MasterControl.scale.1 expr0 "atan((x - centerx)*(1/sw) , (y - centery)*(1/sh))/pi" name Expression24 xpos -1691 ypos 262 } Expression { expr0 sqrt(pow2(r)) name Expression25 xpos -1691 ypos 326 } Grade { blackpoint 0.6 name Grade11 xpos -1691 ypos 412 } push $Na7f7730 Expression { temp_name0 centerx temp_expr0 width/2 temp_name1 centery temp_expr1 height/2 temp_name2 sw temp_expr2 parent.MasterControl.scale.0 temp_name3 sh temp_expr3 parent.MasterControl.scale.1 expr0 "(atan( (x - centerx)*(1/sw) , (-y -- centery)*(1/sh) )) / (pi*2)" name Expression26 xpos -1859 ypos 254 } Dot { name Dot33 xpos -1825 ypos 510 } push $N1b8ade90 Dot { name Dot25 xpos -1105 ypos 283 } set N1b9fdc90 [stack 0] Expression { temp_name0 centerx temp_expr0 width/2 temp_name1 centery temp_expr1 height/2 expr0 "atan(x - centerx , y - centery)/pi" name Expression15 xpos -1139 ypos 451 } Copy { inputs 2+1 from0 rgba.red to0 rgba.red maskChannelMask rgba.red name Copy3 xpos -1139 ypos 500 disable {{1-parent.NoiseControl.sfix}} } Dot { name Dot27 xpos -1105 ypos 552 } push $N8173a30 Dot { name Dot23 xpos -935 ypos 174 } set N977fb90 [stack 0] Dot { name Dot28 xpos -1351 ypos 186 } set N9784ac0 [stack 0] Expression { temp_name0 centerx temp_expr0 parent.MasterControl.center.x temp_name1 centery temp_expr1 parent.MasterControl.center.y temp_name2 sw temp_expr2 parent.MasterControl.scale.0 temp_name3 sh temp_expr3 parent.MasterControl.scale.1 expr0 "atan((x - centerx)*(1/sw) , (y - centery)*(1/sh))/pi" name Expression21 xpos -1303 ypos 258 } Expression { expr0 sqrt(pow2(r)) name Expression22 xpos -1303 ypos 308 } Grade { blackpoint 0.6 name Grade6 xpos -1303 ypos 355 } push $N9784ac0 Expression { temp_name0 centerx temp_expr0 parent.MasterControl.center.x temp_name1 centery temp_expr1 parent.MasterControl.center.y temp_name2 sw temp_expr2 parent.MasterControl.scale.0 temp_name3 sh temp_expr3 parent.MasterControl.scale.1 expr0 "(atan( (x - centerx)*(1/sw) , (-y -- centery)*(1/sh) ) ) / (pi*2)" name Expression23 xpos -1474 ypos 252 } Dot { name Dot34 xpos -1440 ypos 428 } push $N977fb90 Expression { temp_name0 centerx temp_expr0 parent.MasterControl.center.x temp_name1 centery temp_expr1 parent.MasterControl.center.y temp_name2 sw temp_expr2 parent.MasterControl.scale.0 temp_name3 sh temp_expr3 parent.MasterControl.scale.1 expr0 "atan((x - centerx)*(1/sw) , (y - centery)*(1/sh))/pi" name Expression4 xpos -969 ypos 377 } Copy { inputs 2+1 from0 rgba.red to0 rgba.red maskChannelMask rgba.red name Copy2 xpos -969 ypos 418 disable {{1-parent.NoiseControl.sfix}} } Switch { inputs 2 which {{parent.Switch3.which}} name Switch5 xpos -969 ypos 548 } set N1ca0e9b0 [stack 0] push $N1b9fdc90 Expression { temp_name0 cx temp_expr0 width/2 temp_name1 cy temp_expr1 height/2 temp_name2 sw temp_expr2 parent.MasterControl.scale.0 temp_name3 sh temp_expr3 parent.MasterControl.scale.1 expr0 "sqrt( pow2( ((x-cx)*(1/sw))/width ) + pow2( ((y-cy)*(1/sh))/width ) )" name Expression16 xpos -756 ypos 408 } push $N977fb90 Dot { name Dot26 xpos -612 ypos 266 } Expression { temp_name0 cx temp_expr0 parent.MasterControl.center.x temp_name1 cy temp_expr1 parent.MasterControl.center.y temp_name2 sw temp_expr2 parent.MasterControl.scale.0 temp_name3 sh temp_expr3 parent.MasterControl.scale.1 expr0 "sqrt( pow2( ((x-cx)*(1/sw))/width ) + pow2( ((y-cy)*(1/sh))/width ) )" name Expression19 xpos -646 ypos 408 } Switch { inputs 2 which {{parent.Switch3.which}} name Switch9 xpos -646 ypos 475 } Copy { inputs 2 from0 rgba.red to0 rgba.green name Copy1 xpos -646 ypos 542 } set N1ca3f880 [stack 0] Expression { temp_name0 oct temp_expr0 parent.NoiseControl.octaves temp_name1 lac temp_expr1 parent.NoiseControl.lacunarity temp_name2 gain temp_expr2 parent.NoiseControl.gain temp_name3 y temp_expr3 ((parent.MasterControl.center.x/width)+(parent.MasterControl.center.y/height))*2*parent.NoiseControl.posspeed expr0 "fBm((r)*parent.NoiseControl2.detail , y, parent.NoiseControl2.zoffset+3, oct, lac, gain)" expr1 0 expr2 0 expr3 0 name Expression20 xpos -393 ypos 604 } push $N1ca3f880 Expression { temp_name0 oct temp_expr0 parent.NoiseControl.octaves temp_name1 lac temp_expr1 parent.NoiseControl.lacunarity temp_name2 gain temp_expr2 parent.NoiseControl.gain temp_name3 y temp_expr3 ((parent.MasterControl.center.x/width)+(parent.MasterControl.center.y/height))*2*parent.NoiseControl.posspeed expr0 "fBm((r-g)*parent.NoiseControl2.detail , y, parent.NoiseControl2.zoffset, oct, lac, gain)" expr1 0 expr2 0 expr3 0 name Expression18 xpos -530 ypos 607 } push $N1ca3f880 Expression { temp_name0 oct temp_expr0 parent.NoiseControl.octaves temp_name1 lac temp_expr1 parent.NoiseControl.lacunarity temp_name2 gain temp_expr2 parent.NoiseControl.gain temp_name3 y temp_expr3 ((parent.MasterControl.center.x/width)+(parent.MasterControl.center.y/height))*2*parent.NoiseControl.posspeed expr0 "fBm((r+g)*parent.NoiseControl2.detail , y, parent.NoiseControl2.zoffset, oct, lac, gain)" expr1 0 expr2 0 expr3 0 name Expression17 xpos -646 ypos 610 } Merge2 { inputs 2 operation plus mix 0.5 name Merge8 xpos -605 ypos 660 } Merge2 { inputs 2 operation plus mix 0.5 name Merge9 xpos -605 ypos 709 } Dot { name Dot35 xpos -571 ypos 781 } push $N1ca0e9b0 Expression { temp_name0 oct temp_expr0 parent.NoiseControl.octaves temp_name1 lac temp_expr1 parent.NoiseControl.lacunarity temp_name2 gain temp_expr2 parent.NoiseControl.gain temp_name3 y temp_expr3 ((parent.MasterControl.center.x/width)+(parent.MasterControl.center.y/width))*2*parent.NoiseControl.posspeed expr0 "fBm(r*parent.NoiseControl.detail , y, parent.NoiseControl.zoffset, oct, lac, gain)" name Expression14 xpos -969 ypos 623 } Merge2 { inputs 2 operation plus mix 0.5 name Merge7 xpos -969 ypos 777 } Grade { name Grade2 xpos -969 ypos 869 } Merge2 { inputs 2 operation multiply name Merge4 xpos -969 ypos 1354 } Clamp { maximum 2000 name Clamp2 xpos -969 ypos 1511 } Shuffle { green red blue red alpha black name Shuffle7 label "\[value in]" xpos -969 ypos 1576 } Grade { multiply 0.4 black_clamp false name Grade3 xpos -969 ypos 1635 } Dot { name Dot30 xpos -935 ypos 1921 } push $N1bbe1990 Shuffle { green red blue red alpha black name Shuffle6 label "\[value in]" xpos 574 ypos 1515 } Grade { black_clamp false name Grade16 xpos 574 ypos 1588 } Dot { name Dot31 xpos 608 ypos 1687 } push $N1bbe1990 push $N19e29ea0 Expression { temp_name0 centerx temp_expr0 width/2 temp_name1 centery temp_expr1 height/2 temp_name2 spdist temp_expr2 (width/2-10)*parent.MasterControl.sdist expr0 "(sqrt( pow2(x-centerx)+pow2(y-centery) ) -spdist ) / spdist" name Expression11 xpos 156 ypos -377 } push $Na821520 Expression { temp_name0 centerx temp_expr0 parent.MasterControl.center.x temp_name1 centery temp_expr1 parent.MasterControl.center.y temp_name2 spdist temp_expr2 parent.MasterControl.radius*parent.MasterControl.sdist expr0 "(sqrt( pow2((x-centerx)*(1/parent.MasterControl.scale.0))+pow2((y-centery)*(1/parent.MasterControl.scale.1)) ) -spdist ) / spdist" name Expression6 xpos 334 ypos -403 } Switch { inputs 2 which {{parent.Switch3.which}} name Switch4 xpos 334 ypos -368 } Grade { name Grade8 xpos 334 ypos -323 } set N1cb59fe0 [stack 0] Expression { expr0 pow2(r) name Expression7 xpos 254 ypos -279 } Dot { name Dot3 label expo xpos 288 ypos -241 } push $N1cb59fe0 Dot { name Dot2 label linear xpos 440 ypos -271 } Switch { inputs 2 which {{parent.MasterControl.sfotype}} name Switch7 xpos 343 ypos -206 } Grade { black_clamp false name Grade10 xpos 343 ypos -172 } set N1cb89e40 [stack 0] Grade { multiply {{parent.MasterControl.sthk}} black_clamp false name Grade13 xpos 343 ypos -117 } set N1cb9a780 [stack 0] push $N1cb89e40 push $Na837ab0 Dot { name Dot42 xpos 750 ypos -822 } set N1cbaaf30 [stack 0] Expression { temp_name0 centerx temp_expr0 width/2 temp_name1 centery temp_expr1 height/2 temp_name2 nr temp_expr2 parent.MasterControl.nr temp_name3 r temp_expr3 radians(parent.MasterControl.rotation) expr0 "cos( (atan((x - centerx) , (y - centery))+r+(2*pi/nr)) *(nr/2))" name Expression30 xpos 730 ypos -726 } push $Na81c980 Dot { name Dot36 xpos 981 ypos -893 } set N1cbbdb90 [stack 0] Expression { temp_name0 centerx temp_expr0 parent.MasterControl.center.x temp_name1 centery temp_expr1 parent.MasterControl.center.y temp_name2 nr temp_expr2 parent.MasterControl.nr temp_name3 r temp_expr3 radians(parent.MasterControl.rotation) expr0 "cos( (atan((x - centerx)*(1/parent.MasterControl.scale.0) , (y - centery)*(1/parent.MasterControl.scale.1))+r+(2*pi/nr)) * (nr/2))" name Expression12 xpos 1026 ypos -809 } Switch { inputs 2 which {{parent.Switch3.which}} name Switch11 xpos 1026 ypos -658 } Expression { temp_name0 ca temp_expr0 parent.MasterControl.coneangle expr0 ((r-1)*ca*pi)+1 name Expression32 xpos 1026 ypos -588 } Copy { inputs 2 from0 rgba.red to0 rgba.green name Copy6 xpos 1026 ypos -110 } Expression { temp_name0 ca temp_expr0 parent.MasterControl.ssize*-1 expr0 ((r-1)*(ca*g+1))+1 expr1 0 name Expression34 xpos 1026 ypos -21 } Merge2 { inputs 2 operation plus name Merge14 xpos 1026 ypos 37 } Grade { blackpoint {{Grade9.blackpoint}} blackpoint_panelDropped {{Grade9.blackpoint_panelDropped}} whitepoint {{Grade9.whitepoint}} whitepoint_panelDropped {{Grade9.whitepoint_panelDropped}} black {{Grade9.black}} black_panelDropped {{Grade9.black_panelDropped}} white {{Grade9.white}} white_panelDropped {{Grade9.white_panelDropped}} multiply {{Grade9.multiply}} multiply_panelDropped {{Grade9.multiply_panelDropped}} add {{Grade9.add}} add_panelDropped {{Grade9.add_panelDropped}} gamma {{Grade9.gamma}} gamma_panelDropped {{Grade9.gamma_panelDropped}} reverse {{Grade9.reverse}} black_clamp {{Grade9.black_clamp}} white_clamp {{Grade9.white_clamp}} inject {{Grade9.inject}} invert_mask {{Grade9.invert_mask}} fringe {{Grade9.fringe}} process_mask {{Grade9.process_mask}} invert_unpremult {{Grade9.invert_unpremult}} enable_mix_luminance {{Grade9.enable_mix_luminance}} mix_luminance {{Grade9.mix_luminance}} mix {{Grade9.mix}} name Grade19 xpos 1026 ypos 116 } Merge2 { inputs 2 operation multiply name Merge2 xpos 1046 ypos 1309 } Grade { name Grade5 label "odd ray grade" xpos 1046 ypos 1372 } push $N1bbe1990 push $N1cb9a780 push $N1cb89e40 push $N1cbaaf30 Expression { temp_name0 centerx temp_expr0 width/2 temp_name1 centery temp_expr1 height/2 temp_name2 nr temp_expr2 parent.MasterControl.nr temp_name3 r temp_expr3 radians(parent.MasterControl.rotation) expr0 "cos( (atan((x - centerx) , (y - centery))+r) * (nr/2))" name Expression1 xpos 564 ypos -716 } push $N1cbbdb90 Expression { temp_name0 centerx temp_expr0 parent.MasterControl.center.x temp_name1 centery temp_expr1 parent.MasterControl.center.y temp_name2 nr temp_expr2 parent.MasterControl.nr temp_name3 r temp_expr3 radians(parent.MasterControl.rotation) expr0 "cos( (atan((x - centerx)*(1/parent.MasterControl.scale.0) , (y - centery)*(1/parent.MasterControl.scale.1))+r) * (nr/2))" name Expression5 xpos 838 ypos -807 } Switch { inputs 2 which {{parent.Switch3.which}} name Switch8 xpos 838 ypos -653 } Expression { temp_name0 ca temp_expr0 parent.MasterControl.coneangle expr0 ((r-1)*ca*pi)+1 name Expression31 xpos 838 ypos -583 } Copy { inputs 2 from0 rgba.red to0 rgba.green name Copy5 xpos 838 ypos -178 } Expression { temp_name0 ca temp_expr0 parent.MasterControl.ssize*-1 expr0 ((r-1)*(ca*g+1))+1 expr1 0 name Expression33 xpos 838 ypos -89 } Merge2 { inputs 2 operation plus name Merge13 xpos 838 ypos -33 } Grade { add {{parent.MasterControl.thickness}} white_clamp true name Grade9 xpos 838 ypos 81 } Merge2 { inputs 2 operation multiply name Merge1 xpos 838 ypos 1354 } Merge2 { inputs 2 operation max name Merge11 selected true xpos 923 ypos 1444 } Shuffle { green red blue red alpha black name Shuffle1 label "\[value in]" xpos 923 ypos 1510 } Grade { black_clamp false name Grade15 xpos 923 ypos 1592 } Merge2 { inputs 2 operation plus name Merge6 xpos 923 ypos 1683 disable {{1-parent.MasterControl.boolean}} } Merge2 { inputs 2 operation plus name Merge5 xpos 923 ypos 1917 disable {{1-parent.MasterControl.boolean_2}} } Shuffle { alpha black name Shuffle2 label "\[value in]" xpos 923 ypos 2293 } Grade { black_clamp false name Grade14 xpos 923 ypos 2637 } Dot { name Dot17 xpos 957 ypos 2874 } set N1cd39ac0 [stack 0] Transform { scale {{parent.Reformat3.scale.0} {parent.Reformat3.scale.1}} center {{width/2} {height/2}} filter Mitchell name Transform1 label scale xpos 1096 ypos 2864 } Reformat { type scale scale {1 1} resize none filter Lanczos4 name Reformat3 label "scale format" xpos 1221 ypos 2864 } Reformat { type scale scale {{parent.MasterControl.radius/200}} filter Lanczos4 name Reformat2 label radius xpos 1338 ypos 2864 } Shuffle { alpha white name Shuffle4 label "\[value in]" xpos 1448 ypos 2864 } set N1cd6b030 [stack 0] push $N1cd6b030 Shuffle { alpha white name Shuffle10 label "\[value in]" xpos 1552 ypos 2864 disable {{parent.togglefix}} } Grade { multiply 1e-05 black_clamp false name Grade17 label normalize xpos 1662 ypos 2864 } push $N1bbe95b0 Shuffle { alpha white name Shuffle3 label "\[value in]" xpos 1792 ypos 2574 } Convolve2 { inputs 2 channels rgba filter_channel rgba.red use_input_channels true normalize false name Convolve1 xpos 1792 ypos 2870 } Shuffle { alpha black name Shuffle9 label "\[value in]" xpos 1792 ypos 2919 } Crop { box {0 0 {input.width} {input.height}} name Crop1 xpos 1792 ypos 2993 disable {{1-parent.MasterControl.boolean_1}} } push $N1cd39ac0 Switch { inputs 3 which {{parent.Switch3.which}} name Switch2 xpos 1380 ypos 3232 } Output { name Output1 xpos 1380 ypos 3336 } StickyNote { inputs 0 name StickyNote1 label " create rays " note_font_size 40 xpos 1188 ypos -730 } StickyNote { inputs 0 name StickyNote2 label " spread " note_font_size 40 xpos 1168 ypos -103 } StickyNote { inputs 0 name StickyNote3 label " create glow " note_font_size 40 xpos 642 ypos 592 } StickyNote { inputs 0 name StickyNote5 label " falloff to zero " note_font_size 40 xpos 117 ypos 1047 } StickyNote { inputs 0 name StickyNote6 label " convolve " note_font_size 40 xpos 1557 ypos 2747 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_FractalBlur.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { name FractalBlur selected true addUserKnob {20 User} addUserKnob {4 output l Output M {rgba alpha}} output alpha addUserKnob {26 ""} addUserKnob {7 FractalBlur_UserDilate l Spread R 0 200} addUserKnob {7 FractalBlur_UserGrainSize l "Grain Size" R 0 100} FractalBlur_UserGrainSize 20 addUserKnob {7 FractalBlur_UserContrast l Contrast} addUserKnob {7 FractalBlur_UserGamma l Gamma R 0 5} FractalBlur_UserGamma 1 addUserKnob {6 FractalBlur_UserBlackWhite l "Make black and white" +STARTLINE} addUserKnob {7 FractalBlur_UserThreshold l Threshold} addUserKnob {6 FractalBlur_UserBW l "Clamp output" +STARTLINE} FractalBlur_UserBW true addUserKnob {26 ""} addUserKnob {7 FractalBlur_UserGrainEvolve l "Grain Evolution" t "Keyframe this value to animate the grain" R 0 10} FractalBlur_UserGrainEvolve 1 addUserKnob {26 ""} addUserKnob {26 instructions l "" +STARTLINE T "Plug a texture into Input2 to use that instead of noise"} addUserKnob {26 ""} addUserKnob {26 FractalBlur_Credit l "" +STARTLINE T "Fractal Blur v1.9 by Richard Frazer - www.richardfrazer.com\nmod-v1 by Holger Hummel - www.celluloid-vfx.com"} } Input { inputs 0 name TEXTURE selected true xpos 1874 ypos -423 number 1 } Dot { name Dot2 selected true xpos 1908 ypos -118 } set Ne7325c0 [stack 0] Input { inputs 0 name ALPHA selected true xpos 1249 ypos -506 } Dot { name Dot4 selected true xpos 1283 ypos -413 } set N12b7dd80 [stack 0] Dot { name Dot3 selected true xpos 1550 ypos -370 } set N12b69400 [stack 0] Dot { name Dot1 selected true xpos 1748 ypos -370 } Shuffle { red black green black blue black alpha black name Shuffle10 selected true xpos 1714 ypos -255 } Noise { cliptype none size {{"\[value FractalBlur_UserGrainSize]" i}} zoffset {{"\[value FractalBlur_UserGrainEvolve]" i}} center {1024 778} name Noise1 selected true xpos 1714 ypos -166 } set Nb6e7c90 [stack 0] Switch { inputs 2 which {{"\[exists parent.input1]"}} name Switch3 selected true xpos 1714 ypos -122 } Invert { name Invert4 selected true xpos 1714 ypos -72 } push $N12b69400 Shuffle { red alpha green alpha blue alpha name Shuffle1 selected true xpos 1516 ypos -333 } Blur { size {{"\[value FractalBlur_UserDilate]" i x101 0}} name Blur1 selected true xpos 1516 ypos -283 } FilterErode { channels rgba size {{"(-\[value FractalBlur_UserDilate])/2" i x1 0}} filter gaussian name FilterErode7 selected true xpos 1516 ypos -216 } Dot { name Dot10 selected true xpos 1550 ypos -133 } set N12ea2320 [stack 0] Merge2 { inputs 2 operation minus name Merge2 selected true xpos 1660 ypos -6 } Invert { name Invert3 selected true xpos 1660 ypos 37 } push $N12ea2320 Merge2 { inputs 2 operation multiply name Merge13 selected true xpos 1516 ypos 72 } set N12ea7d20 [stack 0] Clamp { name Clamp1 selected true xpos 1408 ypos 116 } Grade { channels rgba blackpoint {{FractalBlur_UserThreshold i}} whitepoint {{FractalBlur_UserThreshold i}} name Grade1 selected true xpos 1408 ypos 195 } push $N12ea7d20 Switch { inputs 2 which {{FractalBlur_UserBlackWhite i x47 1}} name Switch1 selected true xpos 1516 ypos 249 } Grade { channels rgba blackpoint {{FractalBlur_UserContrast}} whitepoint {{1-FractalBlur_UserContrast}} gamma {{FractalBlur_UserGamma x101 0.985}} black_clamp false name Grade5 selected true xpos 1516 ypos 329 } set N13100180 [stack 0] Clamp { name Clamp2 selected true xpos 1426 ypos 394 } push $N13100180 Switch { inputs 2 which {{FractalBlur_UserBW x47 0}} name Switch2 selected true xpos 1516 ypos 466 } Dot { name Dot6 selected true xpos 1550 ypos 545 } set N12ef6c40 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle2 selected true xpos 1516 ypos 619 } push $N12ef6c40 push $N12b7dd80 ShuffleCopy { inputs 2 name ShuffleCopy1 selected true xpos 1249 ypos 575 } Dot { name Dot5 selected true xpos 1283 ypos 636 } Switch { inputs 2 which {{parent.output}} name Switch5 selected true xpos 1516 ypos 751 } Output { name Output1 selected true xpos 1516 ypos 851 } push $Ne7325c0 push $Nb6e7c90 Switch { inputs 2 which {{parent.altInput}} name Switch4 selected true xpos 1874 ypos -65 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_FrameFiller.gizmo ================================================ Group { name FrameFiller onCreate "\nthisGRP = nuke.thisGroup()\nlogKnobs = \['vectorDetailLocal','smoothnessLocal','vectorDetailReg','strengthReg']\nfor knob in logKnobs :\n thisGRP\[knob].setFlag(0x00000004)\n" tile_color 0x7f6a3fff addUserKnob {20 tab_general l General} addUserKnob {6 use_gpu l "Use GPU if available" t "Select this to render on the Local GPU, if available.\n\nYou can select this even if no GPU is currently available on your machine. The GPU will then be used whenever the script is opened on a machine which does have a GPU available. You should also select this if you wish to render from the command line with the --gpu option.\n\nIf this node requires full frames from its inputs, and is therefore unable to reduce its memory overhead, it will fall back to the CPU if an attempt to render a frame on the GPU fails due to lack of memory. When this occurs, a warning message will be printed to the console." +STARTLINE} addUserKnob {26 ""} addUserKnob {41 channels l Channels t "The effect is applied only to these channels" T menu02.retimedChannels} addUserKnob {1 fixframes l "frame(s) to fix" t "Fill in the frame(s) need to be generate. Support single frame, multiply frames, and multiply frames in a row.\n\nWritten format :\nseparate multiply frames with ',' or join multiply frames with '-'\ne.g. 1010,1012,1013,1014,1020\ne.g. 1010,1012-1014,1020\neither format work."} addUserKnob {22 detect_from_read l "Detect from Read" t "Detect missing frame from the file path provided from Read node and auto fill in 'frame(s) to fix' knob.\n\nThis function will check the file system, and only works when Read node connect directly. Any nodes in between this node and Read node will not work." -STARTLINE T "thisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\nif thisGRP.dependencies()\[0].Class() == 'Read' :\n\tfilepath = nuke.os.path.split( thisGRP.dependencies()\[0]\['file'].value() )\n\ttry :\n\t\tfileformat = \[ filepath\[1].split('%0')\[0] , filepath\[1].split('%0')\[1]\[2:] ]\n\n\t\tavailframes = \[]\n\t\tfor file in nuke.os.listdir( filepath\[0] ) :\n\t\t\tif file\[:len(fileformat\[0])] == fileformat\[0] and file\[-len(fileformat\[1]):] == fileformat\[1] :\n\t\t\t\tavailframes.append( int(file\[len(fileformat\[0]) : -len(fileformat\[1]):]) )\n\t\tavailframes.sort()\n\n\t\tmissingframes = \[]\n\n\t\tfor frame in range( availframes\[0], availframes\[-1:]\[0] + 1 , 1 ) :\n\t\t\tif frame not in availframes :\n\t\t\t\tmissingframes.append( str(frame) )\n\n\t\tstage01 = dataReconcile( missingframes )\n\t\tstage02 = seqConvert( stage01\[1] )\n\t\tmissingData = \[str(i) for i in stage01\[0]]\n\n\t\tfor key,value in stage02.items() :\n\t\t\tmissingData.append( '\{0\}-\{1\}'.format(str(key),str(key+value-1)) )\n\t\tmissingData.sort()\n\t\t\n\t\tthisGRP\['fixframes'].setValue( ','.join( missingData ) )\n\texcept IndexError :\n\t\tnuke.message('File path is not a sequence.

Process denied...')\nelse :\n\tnuke.message('This function only works with Read node connect to FrameFiller directly.')"} addUserKnob {22 generate l Generate t "Generate the frame interpolation setup inside this tool. 'frame(s) to fix' define which frame(s) need to be generate.\n\nAfter that, 'frame(s) to fix' will be locked. Hit 'Reset' to clean up internal generated setup and unlock 'frame(s) to fix' knob." T "thisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\n##########\n\nfframes = thisGRP\['fixframes'].value().replace(' ','').split(',')\n\nif len(fframes\[0]) :\n\tstage01 = dataReconcile( fframes )\n\tlastNode = nuke.toNode('dot_start')\n\n\tif len(stage01\[0]) :\n\t\tsingleFrame = stage01\[0]\n\t\tlastNode = gen(singleFrame , 1 , lastNode)\n\n\tif len(stage01\[1]) :\n\t\tmultData = seqConvert( stage01\[1] )\n\t\tfor key,value in multData.items() :\n\t\t\tlastNode = gen( \[key] , value , lastNode)\n\n\tnuke.toNode('dot_end').setInput(0, lastNode)\n\n\tthisGRP\['fixframes'].setEnabled(False)\n\tthisGRP\['detect_from_read'].setEnabled(False)\nelse :\n\tnuke.message(\"No frame provided.

Access denied...\")" +STARTLINE} addUserKnob {22 reset l Reset t "Remove all internal setup and unlock 'frame(s) to fix' knob." -STARTLINE T "base = \['menu02', 'menu01', 'Output1', 'dot_end', 'dot_start', 'input', 'BackdropNode2', 'BackdropNode1','store']\nfor node in nuke.allNodes() :\n\tif node.name() not in base :\n\t\tnuke.delete( node )\nnuke.thisGroup()\['fixframes'].setEnabled(True)\nnuke.thisGroup()\['detect_from_read'].setEnabled(True)"} addUserKnob {26 ""} addUserKnob {7 subframeBias l "subframe(s) bias" t "Balance pre-frame and post frame ratio.\n\n0.5 is the averge of 2 existing frames\n0.0 bias to pre-frame\n1.0 bias to post-frame\n\nThis value clamp to 0-1"} subframeBias 0.5 addUserKnob {41 motionEstimation l Motion t "Choose the motion estimation method.\n\n\nRegularized - calculates motion in a semi-global way, providing more consistent regions in the vector fields.\nLocal - calculates motion by performing local block matching. This can sometimes lead to fragmentation in the vector fields. This is the legacy method used by previous versions of Kronos." T menu01.motionEstimation} addUserKnob {7 vectorDetailLocal l "Vector Detail" t "Use this to adjust the density of the calculated motion vector field. Higher detail picks up finer movement but will take longer to calculate." +HIDDEN R 0.01 1} vectorDetailLocal 0.2 addUserKnob {7 smoothnessLocal l Smoothness t "A high smoothness will miss local detail, but is less likely to create spurious vectors." +HIDDEN R 0.01 1} smoothnessLocal 0.5 addUserKnob {7 vectorDetailReg l "Vector Detail" t "Use this to adjust the density of the calculated motion vector field. Higher detail picks up finer movement but will take longer to calculate." R 0.01 1} vectorDetailReg 0.3 addUserKnob {7 strengthReg l Strength t "Match strength." R 0 5} strengthReg 1.5 addUserKnob {4 resampleType l Filter t "Choose the image resampling type." M {Bilinear Lanczos4 Lanczos6 ""}} addUserKnob {20 grp_shutter l Shutter n 1} grp_shutter 0 addUserKnob {3 shutterSamples l "Shutter Samples" t "How many in-between images to average together for the motion blur."} shutterSamples 1 addUserKnob {7 shutterTime l "Shutter Time" t "Sets the equivalent shutter time of the retimed sequence." R 0 10} addUserKnob {20 endGroup n -1} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.2} addUserKnob {26 l_DATE l "Date Modified" T 2021-03-18} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.2
- compatiable with python3
  (remove range command)
- added error message if input read is not a sequence

1.1
- fix the bug of the code that
  when input frame seq withtout single frame to fix.

1.0
- framefiller to fill up missing frame with frame interpolation method
- support multiply frames
- support more than one broken frames in a row\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -648 ypos 15 bdwidth 234 bdheight 160 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x4c4c4cff label bin note_font_size 42 xpos -370 ypos 18 bdwidth 181 bdheight 242 } Input { inputs 0 name input xpos 14 ypos 2 } Dot { name dot_start tile_color 0xff00ff xpos 48 ypos 93 } Dot { name dot_end tile_color 0xff0000ff xpos 48 ypos 434 } Output { name Output1 xpos 14 ypos 522 } NoOp { inputs 0 name menu01 knobChanged "\nthisGRP = nuke.thisGroup()\nknobs = \['vectorDetailLocal','smoothnessLocal','vectorDetailReg','strengthReg']\nmotionBool = False\nif thisGRP\['motionEstimation'].value() == 'Local' :\n motionBool = True \nfor i in range(len(knobs)) :\n if i<2 :\n thisGRP\[knobs\[i]].setVisible( motionBool )\n else :\n thisGRP\[knobs\[i]].setVisible( not motionBool )\n" xpos -568 ypos 99 addUserKnob {20 User} addUserKnob {4 motionEstimation l Motion t "Choose the motion estimation method.\n\n\nRegularized - calculates motion in a semi-global way, providing more consistent regions in the vector fields.\nLocal - calculates motion by performing local block matching. This can sometimes lead to fragmentation in the vector fields. This is the legacy method used by previous versions of Kronos. " M {Regularized Local}} } OFlow2 { inputs 0 useGPUIfAvailable false name menu02 xpos -314 ypos 103 } NoOp { inputs 0 name store xpos -313 ypos 177 addUserKnob {20 User} addUserKnob {22 fn T "def dataReconcile( _listOfSTR ) :\n\tsingleFrame = \[]\n\tmultFrames = \[]\n\tinputErrorDetect = False\n\n\tfor i in _listOfSTR :\n\t\tif i.find('-') > 0 :\n\t\t\tif int(i.split('-')\[1]) < int(i.split('-')\[0]) :\n\t\t\t\tinputErrorDetect = True\n\t\t\telse :\n\t\t\t\tfor j in range( int(i.split('-')\[0]) , int(i.split('-')\[1])+1 , 1 ) :\n\t\t\t\t\tmultFrames.append( j )\n\t\telse :\n\t\t\ttry :\n\t\t\t\ti = int(i)\n\t\t\t\tcheck = 0\n\t\t\t\tcount = 1\n\t\t\t\tmultDetect = False\n\t\t\t\twhile check < 1 :\n\t\t\t\t\tif str(i+count) in _listOfSTR :\n\t\t\t\t\t\tmultDetect = True\n\t\t\t\t\t\tif (i+count-1) not in multFrames :\n\t\t\t\t\t\t\tmultFrames.append( i+count-1 )\n\t\t\t\t\telse :\n\t\t\t\t\t\tif multDetect == True :\n\t\t\t\t\t\t\tif (i+count-1) not in multFrames :\n\t\t\t\t\t\t\t\tmultFrames.append( i+count-1 )\n\t\t\t\t\t\telse :\n\t\t\t\t\t\t\tif i not in multFrames :\n\t\t\t\t\t\t\t\tsingleFrame.append( i )\n\t\t\t\t\t\tcheck = 10\n\t\t\t\t\tcount += 1\n\t\t\texcept :\n\t\t\t\tpass\n\n\tsingleFrame.sort()\n\tmultFrames.sort()\n\n\treturn ( singleFrame , multFrames )\n\n##########\n\ndef seqConvert( _multFList ) :\n\tdump = \[]\n\tmultData = \{\}\n\tif len(_multFList) :\n\t\tfor i in _multFList :\n\t\t\tcheck = 0\n\t\t\tcount = 0\n\t\t\ttemp = \[]\n\t\t\twhile check < 1 :\n\t\t\t\tif i+count in _multFList :\n\t\t\t\t\tif i+count not in dump :\n\t\t\t\t\t\ttemp.append( i+count )\n\t\t\t\t\t\tdump .append( i+count )\n\t\t\t\telse :\n\t\t\t\t\tcheck = 10\n\t\t\t\tcount += 1\n\t\t\tif len(temp) :\n\t\t\t\tmultData\[temp\[0]] = len(temp)\n\n\treturn multData\n\n##########\n\ndef gen( _list , _steps , _stNode ) :\n\tstart = _stNode\n\n\tfor i in range(len(_list)) :\n\t\tsuffix = str(_list\[i])\n\n\t\tdot = nuke.nodes.Dot( name='dot_\{0\}'.format(suffix) , inputs=\[start] )\n\n\t\ttw = nuke.nodes.TimeWarp( name='tw_\{0\}'.format(suffix) , inputs=\[dot] )\n\t\ttw\['lookup'].clearAnimated()\n\t\ttw\['lookup'].setExpression( 'frame>=\{0\} ? frame+\{1\} : frame'.format(suffix,_steps) )\n\n\t\tkro = nuke.nodes.Kronos( name='kro_\{0\}'.format(suffix) , \n\t\t\t\t\t\t\t\t interpolation='Motion' ,\n\t\t\t\t\t\t\t\t timing2='Frame' ,\n\t\t\t\t\t\t\t\t inputs=\[tw] )\n\t\tkro\['useGPUIfAvailable'].setExpression( 'parent.use_gpu' )\n\t\tkro\['retimedChannels'].setExpression( 'menu02.retimedChannels' )\n\t\tkro\['timingFrame2'].setExpression( '\{0\}-1+1/(\{1\}+1)*(frame-(\{0\}-1))*(parent.subframeBias/0.5)'.format(suffix,_steps) )\n\t\tkro\['motionEstimation'].setExpression( 'parent.motionEstimation' )\n\t\tkro\['vectorDetailLocal'].setExpression( 'parent.vectorDetailLocal' )\n\t\tkro\['smoothnessLocal'].setExpression( 'parent.smoothnessLocal' )\n\t\tkro\['vectorDetailReg'].setExpression( 'parent.vectorDetailReg' )\n\t\tkro\['strengthReg'].setExpression( 'parent.strengthReg' )\n\t\tkro\['resampleType'].setExpression( 'parent.resampleType' )\n\t\tkro\['shutterSamples'].setExpression( 'parent.shutterSamples' )\n\t\tkro\['shutterTime'].setExpression( 'parent.shutterTime' )\n\n\t\tsw = nuke.nodes.Switch( name='sw_\{0\}'.format(suffix) , inputs=\[dot, kro] )\n\t\tif _steps == 1 :\n\t\t\tsw\['which'].setExpression( 'frame==\{0\} ? 1 : 0'.format(suffix) )\n\t\telse :\n\t\t\tsw\['which'].setExpression( 'frame>=\{0\}&&frame<\{0\}+\{1\} ? 1 : 0'.format(suffix,_steps) )\n\n\t\tstart = sw\n\n\treturn sw\n\n##########" +STARTLINE} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_FrameHoldSpecial.gizmo ================================================ Group { name FrameHold_special knobChanged "\nnk = nuke.thisNode()\nk = nuke.thisKnob()\ntype=nk\['type']\npause=nk\['pause']\nif (k.name() in \['pause', 'first', 'last','type'] ):\n if(type.getValue() == 0):\n nk.knob('pause').setVisible(False)\n else:\n nk.knob('pause').setVisible(True)\n if(pause.getValue() == 0 or type == 1):\n nk.knob('message').setVisible(False)\n else:\n nk.begin()\n offset = int(nuke.toNode('TimeOffset1')\['time_offset'].getValue())\n first_frame = int(nuke.toNode('FrameRange_input')\['first_frame'].getValue())\n last_frame = int(nuke.toNode('FrameRange_input')\['last_frame'].getValue()) + offset\n nk.end()\n\n nk.knob('message').setValue('Now your new Frame Range is: ' + str(first_frame) + ' - ' + str(last_frame))\n nk.knob('message').setVisible(True)\n" tile_color 0xb0a254ff label "(frame \[value knob.frame_hold])" lifetimeStart 1 lifetimeEnd 100 addUserKnob {20 FrameHold} addUserKnob {3 frame_hold l "Frame Hold"} frame_hold 1001 addUserKnob {22 current_frame l "Current frame" -STARTLINE T nuke.thisNode().knob('frame_hold').setValue(nuke.frame())} addUserKnob {26 ""} addUserKnob {4 type l "Hold this frame:" t "- Always: it's the classic FrameHold\n- Range: specify the FrameRange in the textfields. You can pause the original plate and play it again after the FrameHold." M {Always Range "" ""}} type Range addUserKnob {3 first l Range} first 1005 addUserKnob {3 last l "" -STARTLINE} last 1010 addUserKnob {6 pause l "continue plate after Framehold" t "If checked, the plate will restart from the frame after the Framehold. " +STARTLINE} addUserKnob {26 message l "" +STARTLINE +HIDDEN T "Now your new Frame Range is: 1 - 106"} addUserKnob {26 ""} addUserKnob {26 email l "" -STARTLINE T "FrameHold Special v2.3
\nby Andrea Geremia
\n
\nandrea.geremia89@gmail.com
\nwww.andreageremia.it
"} addUserKnob {22 explanation l ? T "nuke.message(\"This FrameHold node is has something more compared to the classic one:\\n - You can set the frame range when the Framehold works, without using other nodes or animate keyframes\\n - Plus, you can continue the plate after the Frame Hold\\n\\n - EXAMPLE: FrameHold: 1005\\n - Range: 1005 - 1010\\n - if you NOT continue: at frame 1011 will switch back to the plate, so at the frame 1011\\n - if you continue: at the frame 1011 will restart from 1005, frame 1011 will be 1006 and so on.\")" +STARTLINE} addUserKnob {22 info l Tutorial -STARTLINE T "nuke.tcl('start', 'http://www.nukepedia.com/gizmos/time/framehold-special') "} } Input { inputs 0 name Input1 xpos -1030 ypos -226 } set Ned2886f0 [stack 0] Dot { name Dot1 xpos -996 ypos -150 } set Ne2d05d40 [stack 0] Dot { name Dot3 xpos -886 ypos -150 } TimeOffset { time_offset {{abs(last-first)+1}} time "" name TimeOffset1 xpos -917 ypos -81 } Dot { name Dot4 xpos -886 ypos -6 } push $Ne2d05d40 Dot { name Dot2 xpos -1109 ypos -150 } FrameHold { first_frame {{parent.frame_hold}} name FrameHold1 xpos -1140 ypos -88 } push $Ne2d05d40 Switch { inputs 2 which {{parent.type?x>=min(parent.first,parent.last)&&x<=max(parent.first,parent.last):1}} name Switch2 xpos -1030 ypos -82 } Switch { inputs 2 which {{pause&&parent.type?x>max(parent.first,parent.last):0}} name Switch1 selected true xpos -1030 ypos -7 } FrameRange { first_frame {{parent.FrameRange_input.knob.first_frame}} last_frame {{parent.pause?parent.FrameRange_input.knob.last_frame+parent.TimeOffset1.time_offset:parent.FrameRange_input.knob.last_frame}} time "" name FrameRange_input1 xpos -1030 ypos 116 } set Neb47c800 [stack 0] Output { name Output1 xpos -1030 ypos 219 } push $Neb47c800 push $Ned2886f0 FrameRange { first_frame {{input.first_frame}} last_frame {{input.last_frame}} time "" name FrameRange_input xpos -843 ypos -226 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_FrameMedian.gizmo ================================================ Group { name FrameMedian tile_color 0x2f66ff selected true addUserKnob {20 FrameMedian} addUserKnob {26 ""} addUserKnob {4 Method l "Calculation Method" M {"Frame Range" "Specified Frames" "" ""}} addUserKnob {26 FrameRange_line l "Frame Range"} addUserKnob {7 MaxFrames l "Sample Frames" R 1 20} MaxFrames 15 addUserKnob {3 FramesFrom l "Frame Range From"} FramesFrom 1 addUserKnob {3 Frames l To -STARTLINE} Frames 100 addUserKnob {26 devider_specframe l "Specified Frames"} addUserKnob {1 frame_list l frames} frame_list "\[43, 53, 63, 73, 83]" addUserKnob {22 ToggleFrame l "Toggle Frame" T "tempval = nuke.thisNode().knob(\"frame_list\").value()\ntempval = eval(tempval)\nfound = False\nfor index, item in enumerate(tempval):\n if item==nuke.frame():\n tempval.pop(index)\n found = True\n break\nif not found:\n tempval.append(nuke.frame()) \ntempval.sort()\nnuke.thisNode().knob(\"frame_list\").setValue(str(tempval))" +STARTLINE} addUserKnob {22 clear l Clear -STARTLINE T "nuke.thisNode().knob(\"frame_list\").setValue(\"\[]\")"} addUserKnob {20 HelpTab l Help} addUserKnob {26 Help} addUserKnob {26 Info l "" -STARTLINE T "The input plate must be stabelized before running this node.\n\n\[Frame Range]\nA: Set the frame range to the desidred input frame range\nB: Set the number of frames you want to sample from.\n\n\[Specified Frames]\nA: Go to a frame that you want to include and hit \"Toggle Frame\".\n(If you want to remove a frame, just go to that frame and hit \n\"Toggle Frame\" again.)"} } Input { inputs 0 name Input1 selected true xpos -643 ypos -375 } AddChannels { channels rgba name AddChannels1 xpos -643 ypos -326 } Dot { name Dot1 note_font_size 41 xpos -609 ypos -272 } set N40125f10 [stack 0] FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[min(len(eval(nuke.thisParent().knob(\"frame_list\").value()))-1,int(nuke.thisNode().name().split(\"_\")\[1]))]\}]"}} name TO_19 xpos 237 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[min(len(eval(nuke.thisParent().knob(\"frame_list\").value()))-1,int(nuke.thisNode().name().split(\"_\")\[1]))]\}]"}} name TO_18 xpos 119 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[min(len(eval(nuke.thisParent().knob(\"frame_list\").value()))-1,int(nuke.thisNode().name().split(\"_\")\[1]))]\}]"}} name TO_17 xpos 17 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[min(len(eval(nuke.thisParent().knob(\"frame_list\").value()))-1,int(nuke.thisNode().name().split(\"_\")\[1]))]\}]"}} name TO_16 xpos -93 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[min(len(eval(nuke.thisParent().knob(\"frame_list\").value()))-1,int(nuke.thisNode().name().split(\"_\")\[1]))]\}]"}} name TO_15 xpos -203 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[min(len(eval(nuke.thisParent().knob(\"frame_list\").value()))-1,int(nuke.thisNode().name().split(\"_\")\[1]))]\}]"}} name TO_14 xpos -313 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[min(len(eval(nuke.thisParent().knob(\"frame_list\").value()))-1,int(nuke.thisNode().name().split(\"_\")\[1]))]\}]"}} name TO_13 xpos -423 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[min(len(eval(nuke.thisParent().knob(\"frame_list\").value()))-1,int(nuke.thisNode().name().split(\"_\")\[1]))]\}]"}} name TO_12 xpos -533 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[min(len(eval(nuke.thisParent().knob(\"frame_list\").value()))-1,int(nuke.thisNode().name().split(\"_\")\[1]))]\}]"}} name TO_11 xpos -643 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[min(len(eval(nuke.thisParent().knob(\"frame_list\").value()))-1,int(nuke.thisNode().name().split(\"_\")\[1]))]\}]"}} name TO_10 xpos -753 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[min(len(eval(nuke.thisParent().knob(\"frame_list\").value()))-1,int(nuke.thisNode().name().split(\"_\")\[1]))]\}]"}} name TO_9 xpos -863 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[min(len(eval(nuke.thisParent().knob(\"frame_list\").value()))-1,int(nuke.thisNode().name().split(\"_\")\[1]))]\}]"}} name TO_8 xpos -973 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[min(len(eval(nuke.thisParent().knob(\"frame_list\").value()))-1,int(nuke.thisNode().name().split(\"_\")\[1]))]\}]"}} name TO_7 xpos -1083 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[min(len(eval(nuke.thisParent().knob(\"frame_list\").value()))-1,int(nuke.thisNode().name().split(\"_\")\[1]))]\}]"}} name TO_6 xpos -1193 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[min(len(eval(nuke.thisParent().knob(\"frame_list\").value()))-1,int(nuke.thisNode().name().split(\"_\")\[1]))]\}]"}} name TO_5 xpos -1303 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[int(nuke.thisNode().name().split(\"_\")\[1])]\}]"}} name TO_4 xpos -1413 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[int(nuke.thisNode().name().split(\"_\")\[1])]\}]"}} name TO_3 xpos -1523 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[int(nuke.thisNode().name().split(\"_\")\[1])]\}]"}} name TO_2 xpos -1633 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[int(nuke.thisNode().name().split(\"_\")\[1])]\}]"}} name TO_1 xpos -1743 ypos -112 } push $N40125f10 FrameHold { first_frame {{"parent.Method==0?floor(parent.FramesFrom+(((parent.Frames-parent.FramesFrom)/parent.MaxFrames)*\[lindex \[split \[value name] _] 1])):\[python \{eval(nuke.thisParent().knob(\"frame_list\").value())\[min(len(eval(nuke.thisParent().knob(\"frame_list\").value()))-1,int(nuke.thisNode().name().split(\"_\")\[1]))]\}]"}} name TO_0 xpos -1868 ypos -112 } BlinkScript { inputs 20 ProgramGroup 1 KernelDescription "1 \"CleanPlater\" iterate componentWise e23f2c1acd3c540d820e06225fe9058ef919b69ea31e669235276c5ae236c0a7 21 \"src1\" Read Point \"src2\" Read Point \"src3\" Read Point \"src4\" Read Point \"src5\" Read Point \"src6\" Read Point \"src7\" Read Point \"src8\" Read Point \"src9\" Read Point \"src10\" Read Point \"src11\" Read Point \"src12\" Read Point \"src13\" Read Point \"src14\" Read Point \"src15\" Read Point \"src16\" Read Point \"src17\" Read Point \"src18\" Read Point \"src19\" Read Point \"src20\" Read Point \"dst\" Write Point 1 \"Frames\" Int 1 AQAAAA==" kernelSource "kernel CleanPlater : ImageComputationKernel\n\{\n Image src1; \n Image src2;\n Image src3; \n Image src4;\n Image src5;\n Image src6;\n Image src7; \n Image src8;\n Image src9; \n Image src10;\n Image src11; \n Image src12;\n Image src13; \n Image src14;\n Image src15;\n Image src16;\n Image src17; \n Image src18;\n Image src19; \n Image src20;\n Image dst;\n param:\n int frames;\n void define() \{\n defineParam(frames, \"Frames\", 1);\n \}\n void process() \{\n float values\[] = \{src1(),src2(),src3(),src4(),src5(),src6(),src7(),src8(),src9(),src10(),src11(),src12(),src13(),src14(),src15(),src16(),src17(),src18(),src19(),src20(),\};\n float outputS = median(values, frames);\n dst() = outputS;\n \}\n\};" useGPUIfAvailable false vectorize false rebuild "" CleanPlater_Frames {{"parent.Method==0?parent.MaxFrames:\[python \{len(eval(nuke.thisParent().knob(\"frame_list\").value()))\}]"}} rebuild_finalise "" name BlinkScript3 xpos -643 ypos 80 } Output { name Output1 xpos -643 ypos 144 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_GUI_Switch.gizmo ================================================ Group { name GUI_Switch knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"disable\":\n if k.getValue() == 1:\n n\[\"output\"].setValue(\"RENDER\")\n n\[\"tile_color\"].setValue(16711935)\n elif k.getValue() == 0:\n n\[\"output\"].setValue(\"GUI\")\n n\[\"tile_color\"].setValue(4278190335)" tile_color 0xff0000ff note_font "Verdana Bold Bold" note_font_color 0x40404ff selected true dope_sheet true addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 description l Description: T "GUI_Switch\n\nNode will switch to the Render Pipe on Render Time. \n\nNode will display the GUI Pipe while working.\n\nDisabling defaults to Render Side \n(can safely toggle disable since\nexpression is on the switch 'which' knob)"} addUserKnob {1 output l INVISIBLE +INVISIBLE} output GUI addUserKnob {26 ver l Version: T v03} } Input { inputs 0 name InputRender xpos -502 ypos -435 } Input { inputs 0 name InputGUI xpos -341 ypos -517 number 1 } Switch { inputs 2 which {{"\[python nuke.executing()]"}} name Switch1 xpos -341 ypos -435 } Output { name Output1 xpos -341 ypos -366 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_GammaPlus.gizmo ================================================ Group { name GammaPlus onCreate "\nthisGRP = nuke.thisGroup()\nfor knob in thisGRP.knobs() :\n if thisGRP\[knob].label()\[:19] == 'panel dropped state' :\n thisGRP.removeKnob( nuke.thisNode()\[knob] )\n try :\n if thisGRP\[knob].Class() == 'AColor_Knob' and thisGRP\[knob].getValue() == \[0,0,0,0] :\n thisGRP\[knob].setSingleValue(True)\n except :\n pass\nthisGRP\['value_luma'].setFlag(0x00000004)\n" tile_color 0x7fb2ffff addUserKnob {20 tab_general l General} addUserKnob {41 channels t "The effect is applied only to these channels" T menu01.channels} addUserKnob {41 channels_cs t "The effect is applied only to these channels" +INVISIBLE T menu02.channels} addUserKnob {26 title_setting l "setting"} addUserKnob {4 method l "method use in" t "Grade\n- as Grade node gamma math with condition\n 0.0-1.0 use regular math\n above 1.0 will switch to multiply\n\n data<0 ? data : data>1 ? (data-1)*(1/gamma)+1 : data**(1/gamma)\n\n----------\n\nColorCorrect/Gamma\n- as ColorCorrect/Gamma node\n use regular gamma math\n\n data**(1/gamma)" M {Grade ColorCorrect/Gamma ""}} addUserKnob {41 apply_on l "apply on" t "Color\nResult apply on color, saturation might change a lot.\n\nLuminance\nResult apply on luminance, saturation affects the minimal." T menu03.apply_on} addUserKnob {19 set_pivot l "set pivot" t "set pivot\nto lock the value for gamma correction.\n\nCtrl+Alt+colorpick\nto sample the input source value before gamma correction.\n" R 0 4} set_pivot 1 addUserKnob {26 title_gamma l "gamma"} addUserKnob {19 value_color l "value color" t "Gamma correction applied to final result" R 0.2 5} value_color 1 addUserKnob {7 value_luma l "value luma" t "Gamma correction applied to final result" +DISABLED R 0.2 5} value_luma 1 addUserKnob {6 reverse +STARTLINE} addUserKnob {26 ""} addUserKnob {7 mix t "Dissolve between the original image at 0 and the full effect at 1."} mix 1 addUserKnob {22 as_contrast l "Tips : use as contrast in ColorCorrect" T "nuke.message('Setting as contrast on ColorCorrect :\\n\\nmethod use in = ColorCorrect/Gamma\\napply on = Color\\nset_pivot = 0.18\\nreverse = checked\\n\\nThen value will work as Contrast in ColorCorrect.')" +STARTLINE} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2020-09-11} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.0
- more setting on gamma/contrast\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x4c4c4cff label bin note_font_size 42 xpos -1049 ypos -17 bdwidth 384 bdheight 351 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0xff label "dont touch" note_font_size 42 xpos -1514 ypos -17 bdwidth 384 bdheight 351 } Input { inputs 0 name img xpos 0 ypos -77 } Dot { name Dot5 xpos 34 ypos 99 } set Nea9e000 [stack 0] Dot { name Dot8 xpos -840 ypos 99 } set Ne8ddc00 [stack 0] Dot { name Dot7 xpos -957 ypos 99 } Multiply { channels rgb name menu01 knobChanged "\nnuke.thisGroup()\['channels_cs'].setValue( nuke.thisGroup()\['channels'].value() )\n" xpos -991 ypos 175 } push $Ne8ddc00 Colorspace { name menu02 xpos -874 ypos 173 } NoOp { inputs 0 name menu03 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['apply_on'].getValue() == 0 :\n thisGRP\['value_color'].setEnabled(True)\n thisGRP\['value_luma'].setEnabled(False)\nelse :\n thisGRP\['value_color'].setEnabled(False)\n thisGRP\['value_luma'].setEnabled(True)\n" xpos -1387 ypos 171 addUserKnob {20 User} addUserKnob {4 apply_on l "apply on" M {Color Luminance}} } Reformat { inputs 0 type "to box" box_width 10 box_height 10 box_fixed true name Reformat1 xpos -561 ypos 505 } Shuffle { alpha white name Shuffle1 xpos -561 ypos 585 } Input { inputs 0 name mask xpos -388 ypos -75 number 1 } Switch { inputs 2 which {{"!\[exists parent.input1]"}} name Switch3 xpos -388 ypos 585 } Dot { name Dot6 xpos -354 ypos 710 } push $Nea9e000 Dot { name Dot1 xpos 169 ypos 99 } set Ne905000 [stack 0] Dot { name Dot2 xpos 426 ypos 99 } Colorspace { channels {{{menu02.channels}}} colorspace_out HSV name HSV xpos 392 ypos 173 } Multiply { channels {{{menu01.channels}}} value {1 1 {"1/\nmax(\n ( parent.set_pivot.r <= 0.0031308 ? parent.set_pivot.r*12.92 : 1.055 * (parent.set_pivot.r**(1/2.4)) - 0.055 ) ,\n ( parent.set_pivot.g <= 0.0031308 ? parent.set_pivot.g*12.92 : 1.055 * (parent.set_pivot.g**(1/2.4)) - 0.055 ) ,\n ( parent.set_pivot.b <= 0.0031308 ? parent.set_pivot.b*12.92 : 1.055 * (parent.set_pivot.b**(1/2.4)) - 0.055 )\n )"} {1/parent.set_pivot}} name Multiply3 xpos 392 ypos 253 } Dot { name Dot9 xpos 426 ypos 316 } set Ne904000 [stack 0] Gamma { channels {{{menu01.channels}}} value {1 1 {"parent.reverse ? (1/parent.value_luma) : parent.value_luma"} {"parent.reverse ? (1/parent.value_luma) : parent.value_luma"}} name Gamma2 xpos 499 ypos 382 } push $Ne904000 Grade { channels {{{menu01.channels}}} gamma {1 1 {"parent.reverse ? (1/parent.value_luma) : parent.value_luma"} {"parent.reverse ? (1/parent.value_luma) : parent.value_luma"}} black_clamp false name Grade2 xpos 392 ypos 383 } Switch { inputs 2 which {{parent.method}} name Switch4 xpos 392 ypos 470 } Multiply { channels {{{menu01.channels}}} value {1 1 {"max(\n ( parent.set_pivot.r <= 0.0031308 ? parent.set_pivot.r*12.92 : 1.055 * (parent.set_pivot.r**(1/2.4)) - 0.055 ) ,\n ( parent.set_pivot.g <= 0.0031308 ? parent.set_pivot.g*12.92 : 1.055 * (parent.set_pivot.g**(1/2.4)) - 0.055 ) ,\n ( parent.set_pivot.b <= 0.0031308 ? parent.set_pivot.b*12.92 : 1.055 * (parent.set_pivot.b**(1/2.4)) - 0.055 )\n )"} {parent.set_pivot}} name Multiply4 xpos 392 ypos 550 } Colorspace { channels {{{menu02.channels}}} colorspace_in HSV name invHSV xpos 392 ypos 630 } Dot { name Dot3 xpos 426 ypos 710 } push $Ne905000 Multiply { channels {{{menu01.channels}}} value {{1/parent.set_pivot} {1/parent.set_pivot} {1/parent.set_pivot} {1/parent.set_pivot}} name Multiply1 xpos 135 ypos 173 } Dot { name Dot4 xpos 169 ypos 253 } set Ne7e2000 [stack 0] Gamma { channels {{{menu01.channels}}} value {{"parent.reverse ? (1/parent.value_color) : parent.value_color"} {"parent.reverse ? (1/parent.value_color) : parent.value_color"} {"parent.reverse ? (1/parent.value_color) : parent.value_color"} {"parent.reverse ? (1/parent.value_color) : parent.value_color"}} name Gamma1 xpos 248 ypos 328 } push $Ne7e2000 Grade { channels {{{menu01.channels}}} gamma {{"parent.reverse ? (1/parent.value_color) : parent.value_color"} {"parent.reverse ? (1/parent.value_color) : parent.value_color"} {"parent.reverse ? (1/parent.value_color) : parent.value_color"} {"parent.reverse ? (1/parent.value_color) : parent.value_color"}} black_clamp false name Grade1 xpos 135 ypos 327 } Switch { inputs 2 which {{parent.method}} name Switch2 xpos 135 ypos 407 } Multiply { channels {{{menu01.channels}}} value {{parent.set_pivot} {parent.set_pivot} {parent.set_pivot} {parent.set_pivot}} name Multiply2 xpos 135 ypos 487 } Switch { inputs 2 which {{parent.apply_on}} name Switch1 xpos 135 ypos 707 } push $Nea9e000 Keymix { inputs 3 mix {{clamp(parent.mix)}} name Keymix1 xpos 0 ypos 701 } Output { name Output1 xpos 0 ypos 928 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_GenerateMatrix4.gizmo ================================================ Group { name GenerateMatrix4_ help "Generate a Matrix4 based on a Matrix Knob. (Defaults to an identity matrix)" knobChanged "node = nuke.thisNode()\nknob = nuke.thisKnob()\n\nif knob.name() == \"inputChange\":\n with node:\n format_knob = nuke.toNode('Constant1')\['format']\n if node.input(0):\n format_knob.setEnabled(False)\n else:\n format_knob.setEnabled(True)\n" addUserKnob {20 Matrix4} addUserKnob {41 format T Constant1.format} addUserKnob {26 ""} addUserKnob {41 matrix T MatrixKnob.matrix} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x545454ff label "- Identity in\n matrix layers\n- Bypass other channels" note_font_size 20 xpos 411 ypos 441 bdwidth 280 bdheight 262 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x545454ff label "Use input format" note_font_size 20 xpos 408 ypos -57 bdwidth 281 bdheight 195 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x545454ff label "Custom format" note_font_size 20 xpos 793 ypos -58 bdwidth 281 bdheight 195 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x464646ff label "Used for\nmatrix knob" note_font_size 20 xpos 6 ypos -57 bdwidth 284 bdheight 231 } Axis2 { inputs 0 useMatrix true name MatrixKnob xpos 111 ypos 49 } Constant { inputs 0 channels rgb name Constant1 xpos 889 ypos 13 } Dot { name Dot1 xpos 923 ypos 224 } Input { inputs 0 name Input xpos 509 ypos 4 } Switch { inputs 2 which {{"!\[exists parent.input0]"}} name format xpos 509 ypos 220 } add_layer {matrix0 matrix0.0 matrix0.1 matrix0.2 matrix0.3} add_layer {matrix1 matrix1.0 matrix1.1 matrix1.2 matrix1.3} add_layer {matrix2 matrix2.0 matrix2.1 matrix2.2 matrix2.3} add_layer {matrix3 matrix3.0 matrix3.1 matrix3.2 matrix3.3} AddChannels { channels matrix0 channels2 matrix1 channels3 matrix2 channels4 matrix3 name AddChannels1 xpos 509 ypos 303 } Expression { channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 MatrixKnob.world_matrix.0 channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 MatrixKnob.world_matrix.1 channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 MatrixKnob.world_matrix.2 channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 MatrixKnob.world_matrix.3 name Expression1 xpos 509 ypos 568 } Expression { channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 MatrixKnob.world_matrix.4 channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 MatrixKnob.world_matrix.5 channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 MatrixKnob.world_matrix.6 channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 MatrixKnob.world_matrix.7 name Expression2 xpos 509 ypos 594 } Expression { channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 MatrixKnob.world_matrix.8 channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 MatrixKnob.world_matrix.9 channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 MatrixKnob.world_matrix.10 channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 MatrixKnob.world_matrix.11 name Expression3 xpos 509 ypos 620 } Expression { channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 MatrixKnob.world_matrix.12 channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 MatrixKnob.world_matrix.13 channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 MatrixKnob.world_matrix.14 channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 MatrixKnob.world_matrix.15 name Expression4 xpos 509 ypos 646 } Output { name Output1 xpos 509 ypos 756 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_GenerateSTMap.gizmo ================================================ Group { inputs 0 name GenerateSTMap postage_stamp true addUserKnob {20 STMap l "ST Map"} addUserKnob {41 format l Format T Reformat1.format} addUserKnob {26 ""} addUserKnob {7 overscan l "Overscan (%)" t "Add overscan to your ST map" R 0 100} overscan 10 addUserKnob {6 reformat l "Reformat to Overscan" t "Reformats the image to overscan size" +STARTLINE} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Reformat { inputs 0 name Reformat1 xpos 555 ypos 395 } Crop { box {{-width*(parent.overscan/100)/2} {-height*(parent.overscan/100)/2} {width+(width*(parent.overscan/100)/2)} {height+(height*(parent.overscan/100)/2)}} reformat {{parent.reformat}} crop false name Crop1 xpos 555 ypos 446 } Expression { expr0 (x+0.5)/width expr1 (y+.5)/height name Expression1 xpos 555 ypos 497 } Output { name Output1 xpos 555 ypos 583 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_GeoToPoints.gizmo ================================================ Group { name GeoToPoints tile_color 0x807291ff selected true addUserKnob {20 User} addUserKnob {26 info l "" +STARTLINE T "This node will turn whatever input geo into a pointcloud.\n(normals are not preserved!)\n\n-by Mads Hagbarth Lund 2014\n"} addUserKnob {26 ""} addUserKnob {22 GeoToPoints l " Geo To Points " T "'''================================================================================\n; Function: PointClouder(points):\n; Description: Generate a pointcloud from a series of specified points\n; Parameter(s): points - A list a points formated \[\[X,Y,Z,VEL_X,VEL_Y,VEL_Z,COL_R,COL_G,COL_B]\[...]]\n; Return: myNode - The pointcloud node created by the function\n; \n; Note(s): by Mads Hagbarth Lund 2013\n;=================================================================================='''\ndef PointClouder(points):\n pc_Points=pc_Velocities=pc_Colors = str(len(points))+ \" \" \n pc_Points = pc_Points + \" \".join(str(i) for i in chain1(*points)) \n pc_Velocities = pc_Velocities + \" \".join(str(i) for i in chain2(*points))\n pc_Colors = pc_Colors + \" \".join(str(i) for i in chain3(*points))\n myNode = nuke.createNode(\"BakedPointCloud\") \n myNode.knob(\"serializePoints\").fromScript(pc_Points) \n myNode.knob(\"serializeNormals\").fromScript(pc_Velocities)\n myNode.knob(\"serializeColors\").fromScript(pc_Colors)\n return myNode\n\ndef chain1(*iterables):\n for it in iterables:\n for element in it\[0:3]:\n yield element\n\ndef chain2(*iterables):\n for it in iterables:\n for element in it\[3:6]:\n yield element\n\ndef chain3(*iterables):\n for it in iterables:\n for element in it\[6:9]:\n yield element \n\ndef ConvertToTup(pointList):\n points = \[]\n for item in pointList:\n for n in range(0,len(item\[0]),3):\n points.append(\[item\[0]\[n], item\[0]\[n+1], item\[0]\[n+2],1,1,1,1,1,1]) \n return points\n\nObjectDataPre = \[]\n\npag = nuke.thisNode()\npag.begin()\npyg = nuke.toNode(\"PYG\")\npag.end()\nprint(pyg.Class())\nprint(pyg.name())\ntry:\n gObj = pyg\['geo'].getGeometry()\[0]\n ObjectDataPre.append(\[gObj.points()])\n PointCloudData = ConvertToTup(ObjectDataPre)\n PointClouder(PointCloudData)\nexcept: \n nuke.message(\"Error, no geo found in the input\")\n" +STARTLINE} addUserKnob {22 GetVertCount l "Get Number of Vertices" T "pag = nuke.thisNode()\nwith pag:\n pyg = nuke.toNode(\"PYG\")\ntry:\n pyg.knob(\"ClickMe\").execute()\nexcept: \n nuke.message(\"Error, no geo found in the input\")" +STARTLINE} } Input { inputs 0 name Input1 xpos 384 ypos -218 } PythonGeo { name PYG xpos 384 ypos -146 addUserKnob {20 User} addUserKnob {22 ClickMe T "pyg = nuke.thisNode()\ngObj = pyg\['geo'].getGeometry()\[0]\nnuke.message(\"Number of vertecies: \"+str(len(gObj.points())))" +STARTLINE} } Output { name Output1 xpos 384 ypos -78 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Glass.gizmo ================================================ Group { name Glass tile_color 0xcc804eff note_font "Bitstream Vera Sans Bold" note_font_color 0xffffffff selected true addUserKnob {20 "" l Glass} addUserKnob {41 channles l channels T Merge2.also_merge} addUserKnob {26 "" +STARTLINE} addUserKnob {7 displace l Displace R 0 20} displace 5 addUserKnob {7 abberation l Abberation} addUserKnob {26 "" l Defocus} addUserKnob {6 useDef l "Apply Defocus" -STARTLINE} addUserKnob {41 size T ZBlur1.size} addUserKnob {41 max_size l maximum T ZBlur1.max_size} addUserKnob {41 shape l "filter shape" T ZBlur1.shape} addUserKnob {26 "" +STARTLINE} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge2.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge2.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge2.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge2.fringe} addUserKnob {41 mix T Merge2.mix} } Input { inputs 0 name Inputmask xpos 82 ypos 953 number 2 } Input { inputs 0 name img xpos -289 ypos -1 } set N122bf7f0 [stack 0] Dot { name Dot1 xpos -255 ypos 871 } set N122c5dd0 [stack 0] Input { inputs 0 name control xpos -64 ypos -564 number 1 } AddChannels { channels rgba name AddChannels2 xpos -64 ypos -400 } set Ncf85b870 [stack 0] push $Ncf85b870 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy6 xpos -64 ypos -354 disable {{error}} } set Ncf3e2a20 [stack 0] Dot { name Dot2 xpos 94 ypos -343 } set N9387b4e0 [stack 0] Transform { translate {0 -1} center {320 240} name down xpos 60 ypos -141 } push $Ncf3e2a20 Dot { name Dot3 xpos -122 ypos -343 } Dot { name Dot4 xpos -207 ypos -343 } Transform { translate {0 1} center {320 240} name up xpos -241 ypos -180 } push $N9387b4e0 Dot { name Dot5 xpos 176 ypos -343 } Transform { translate {1 0} center {320 240} name right xpos 142 ypos -221 } push $Ncf3e2a20 Shuffle { in alpha green black blue black out rgb name Shuffle1 xpos -64 ypos -311 } Transform { translate {-1 0} center {320 240} name left xpos -64 ypos -273 } Copy { inputs 2 from0 rgba.alpha to0 rgba.green name Copy2 xpos -64 ypos -228 } Copy { inputs 2 from0 rgba.alpha to0 rgba.blue name Copy3 xpos -64 ypos -187 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy4 xpos -64 ypos -147 } Expression { temp_name0 l temp_expr0 red temp_name1 r temp_expr1 green temp_name2 u temp_expr2 blue temp_name3 d temp_expr3 alpha channel0 {forward.u -forward.v} expr0 (l-r)*width channel1 {-forward.u forward.v} expr1 (d-u)*width channel2 depth expr2 (abs(l-r)+abs(d-u))*width/2 name Expression1 xpos -64 ypos -3 } set N54da1870 [stack 0] Dot { name Dot6 xpos 89 ypos 1 } Dot { name Dot7 xpos 89 ypos 193 } push $N54da1870 push $N122bf7f0 Copy { inputs 2 from0 -rgba.alpha to0 -rgba.alpha channels forward name Copy1 xpos -64 ypos 67 } Copy { inputs 2 from0 -rgba.alpha to0 -rgba.alpha channels depth name Copy8 xpos -64 ypos 175 } ZBlur { math -linear shape 1 name ZBlur1 xpos -64 ypos 225 disable {{!parent.useDef}} } set Ncbc44560 [stack 0] IDistort { uv forward uv_scale {{parent.displace}} name IDistort4 xpos 98 ypos 788 } push $Ncbc44560 IDistort { uv forward uv_scale {{parent.displace/(1+parent.abberation/10)}} name IDistort3 xpos 65 ypos 313 } Multiply { value {0 0 1 1} name Multiply2 label "\[value value]" xpos 65 ypos 366 } set Nbc97d60 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle2 autolabel '' tile_color 0xffffffff note_font_size 22 note_font_color 0xffffffff xpos 386 ypos 373 } push 0 push $Ncbc44560 IDistort { uv forward uv_scale {{parent.displace}} name IDistort2 xpos -64 ypos 312 } Multiply { value {0 1 0 1} name Multiply3 label "\[value value]" xpos -64 ypos 362 } set N7ed065a0 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle3 autolabel '' tile_color 0xffffffff note_font_size 22 note_font_color 0xffffffff xpos 291 ypos 416 } push $Ncbc44560 IDistort { uv forward uv_scale {{parent.displace/(1-parent.abberation/10)}} name IDistort1 xpos -188 ypos 308 } Multiply { value {1 0 0 1} name Multiply1 label "\[value value]" xpos -188 ypos 365 } set N201e1910 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle4 autolabel '' tile_color 0xffffffff note_font_size 22 note_font_color 0xffffffff xpos 228 ypos 453 } Blend { inputs 3+1 weight0 0.2126 weight1 0.7152 weight2 0.0722 name Blend1 xpos 291 ypos 508 } Multiply { value {0 0 0 1} name Multiply4 label "\[value value]" xpos 291 ypos 592 } push $Nbc97d60 Multiply { value {1 1 1 0} name Multiply7 label "\[value value]" xpos 65 ypos 448 } push 0 push $N201e1910 Multiply { value {1 1 1 0} name Multiply5 label "\[value value]" xpos -188 ypos 445 } push $N7ed065a0 Multiply { value {1 1 1 0} name Multiply6 label "\[value value]" xpos -64 ypos 444 } Merge2 { inputs 3+1 operation plus also_merge all name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -64 ypos 554 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "from csnuke_tools.trixter.snippets import convertMergeToAll as convertMergeToAll;convertMergeToAll.convToAll()"} } Merge2 { inputs 2 operation plus also_merge all name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -64 ypos 604 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "from csnuke_tools.trixter.snippets import convertMergeToAll as convertMergeToAll;convertMergeToAll.convToAll()"} } Switch { inputs 2 which {{parent.abberation==0}} name Switch1 xpos -64 ypos 794 addUserKnob {20 "" l Weta} addUserKnob {32 knob l "update input order" t "changes the input order according to the input nodes' horizontal order (left most node becomes input 0)" -STARTLINE T " reconnectInputs"} } Copy { inputs 2 from0 -rgba.alpha to0 -rgba.alpha channels depth name Copy5 xpos -64 ypos 855 } push $N122c5dd0 Dot { name Dot8 note_font_size 41 xpos -255 ypos 963 } Merge2 { inputs 2+1 operation copy also_merge all name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -64 ypos 959 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "from csnuke_tools.trixter.snippets import convertMergeToAll as convertMergeToAll;convertMergeToAll.convToAll()"} } Output { name Output1 xpos -64 ypos 1096 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Glow_Exponential.gizmo ================================================ Group { name Glow_Exponential inputs 2 help "Exponential Glow node, with options to recolor and adjust falloff." knobChanged "\nk = nuke.thisKnob()\nif k.name()=='crop':\n if k.value():\n nuke.thisNode().knob('overscan').setEnabled(True)\n else:\n nuke.thisNode().knob('overscan').setEnabled(False)\n" tile_color 0xc97200ff addUserKnob {20 ge l Glow} addUserKnob {26 glow_ctrls l "@b;Glow:"} addUserKnob {7 size t "Size of the glow" R 0 100} size 10 addUserKnob {7 intensity t "Brightness of the Glow" R 0 10} intensity 1 addUserKnob {7 falloff t "Adjust the light falloff of the glow. Higher values will have a longer falloff, resulting in visually bigger glows."} falloff 0.75 addUserKnob {26 glow_highlights l "@b;Highlights:"} addUserKnob {41 range t "Luma key to define which parts of the image will glow." T Keyer1.range} addUserKnob {26 glow_colors l "@b;Glow Colors:"} addUserKnob {7 saturation l "color from img" t "By default the glow takes on the colors of the plate. By using this knob you can desaturate the color of the glow."} saturation 1 addUserKnob {18 core_color l "core re-color" t "Re-color the core of the glow. Use the core threshold to define which parts of the glow are core or falloff."} core_color {1 1 1} addUserKnob {6 core_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 falloff_color l "falloff re-color" t "Re-color the falloff of the glow. Use the core threshold to define which parts of the glow are core or falloff."} falloff_color {1 1 1} addUserKnob {6 falloff_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 threshold l "core threshold" t "Define which parts of the glow are core or falloff."} threshold 1 addUserKnob {26 glow_options l "@b;Options:"} addUserKnob {14 aspect l "aspect ratio" t "Set the aspect ratio for your glow. Streaky results can be obtained by changing the ratio here." R 0 100} aspect {1 1} addUserKnob {6 glow_only l "Glow only" t "By default the glow is added onto the plate. Checking this box will output the glow only. " +STARTLINE} addUserKnob {6 crop l "Crop to Format" t "This glow can expand the bounding box to massive values, checking this box can prevent your bbox from getting unmanageable." +STARTLINE} crop true addUserKnob {7 overscan l "overscan (%)" t "If you are cropping to format but originally had some values outside the format, you can add some overscan here to preserve these. The values are a percentage of the format size." R 0 100} overscan 10 addUserKnob {7 mix t "Mix back with the original plate (or black, if glow only is enabled)"} mix 1 addUserKnob {26 ""} addUserKnob {26 spin_copyright l "" t "© SPINVFX\nGlow_Exponential\nVersion 1.0\n2017" +STARTLINE T "SPINVFX - Version 1.0 - 2017 - Github Page"} } Input { inputs 0 name img xpos 0 ypos -59 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 50 } set N9308ac0 [stack 0] Dot { name Dot24 tile_color 0xcccccc00 xpos 34 ypos 1274 } set N930d770 [stack 0] Input { inputs 0 name mask xpos 136 ypos 158 number 1 } push $N9308ac0 NoOp { name CTRL xpos 304 ypos 46 addUserKnob {20 User} addUserKnob {7 falloff R 0 2} falloff {{"max(parent.falloff/2+0.5, 0.0001)"}} addUserKnob {7 falloff_intensity} falloff_intensity {{falloff+pow(falloff,2)+pow(falloff,3)+pow(falloff,4)+pow(falloff,5)+pow(falloff,6)+pow(falloff,7)+pow(falloff,8)+pow(falloff,9)+pow(falloff,10)}} addUserKnob {14 size R 0 100} size {{parent.size/20*parent.aspect.w} {parent.size/20*parent.aspect.h}} addUserKnob {7 intensity} intensity {{parent.intensity/falloff_intensity}} addUserKnob {7 core R 0 2} core {{threshold}} addUserKnob {7 core_length} core_length {{sqrt(pow(core_color.r,2)+pow(core_color.g,2)+pow(core_color.b,2))/sqrt(3)}} addUserKnob {7 falloff_length} falloff_length {{sqrt(pow(falloff_color.r,2)+pow(falloff_color.g,2)+pow(falloff_color.b,2))/sqrt(3)}} } Keyer { operation "luminance key" name Keyer1 xpos 304 ypos 98 } ChannelMerge { inputs 2 operation in name ChannelMerge1 xpos 304 ypos 146 disable {{"!\[exists parent.input1] "}} } Premult { name Premult1 xpos 304 ypos 202 } Remove { operation keep channels rgb name Remove1 xpos 304 ypos 228 } Multiply { value {{parent.CTRL.intensity}} name Multiplyer xpos 304 ypos 263 } Saturation { saturation {{parent.saturation}} name Saturation1 xpos 304 ypos 325 } Dot { name Dot3 tile_color 0x7aa9ff00 xpos 338 ypos 372 } set N935d6a0 [stack 0] Dot { name Dot2 tile_color 0x7aa9ff00 xpos 604 ypos 372 } set N93621b0 [stack 0] Dot { name Dot4 tile_color 0x7aa9ff00 xpos 870 ypos 372 } set N9366c60 [stack 0] Dot { name Dot5 tile_color 0x7aa9ff00 xpos 1136 ypos 372 } set N936b710 [stack 0] Dot { name Dot6 tile_color 0x7aa9ff00 xpos 1402 ypos 372 } set N93701c0 [stack 0] Dot { name Dot7 tile_color 0x7aa9ff00 xpos 1668 ypos 372 } set N9374c70 [stack 0] Dot { name Dot8 tile_color 0x7aa9ff00 xpos 1934 ypos 372 } set N93797d0 [stack 0] Dot { name Dot9 tile_color 0x7aa9ff00 xpos 2200 ypos 372 } set N937e250 [stack 0] Dot { name Dot10 tile_color 0x7aa9ff00 xpos 2466 ypos 372 } set N9382d00 [stack 0] Dot { name Dot11 tile_color 0x7aa9ff00 xpos 2732 ypos 372 } Blur { size {{Blur9.size*2} {Blur9.size*2}} crop false name Blur10 xpos 2698 ypos 440 } Multiply { value {{pow(CTRL.falloff,10)}} name Multiply10 xpos 2698 ypos 543 } Dot { name Dot20 tile_color 0x7aa9ff00 xpos 2732 ypos 796 } push $N9382d00 Blur { size {{Blur8.size*2} {Blur8.size*2}} crop false name Blur9 xpos 2432 ypos 440 } Multiply { value {{pow(CTRL.falloff,9)}} name Multiply9 xpos 2432 ypos 542 } Dot { name Dot19 tile_color 0x7aa9ff00 xpos 2466 ypos 770 } push $N937e250 Blur { size {{Blur7.size*2} {Blur7.size*2}} crop false name Blur8 xpos 2166 ypos 440 } Multiply { value {{pow(CTRL.falloff,8)}} name Multiply8 xpos 2166 ypos 536 } Dot { name Dot18 tile_color 0x7aa9ff00 xpos 2200 ypos 744 } push $N93797d0 Blur { size {{Blur6.size*2} {Blur6.size*2}} crop false name Blur7 xpos 1900 ypos 440 } Multiply { value {{pow(CTRL.falloff,7)}} name Multiply7 xpos 1900 ypos 528 } Dot { name Dot17 tile_color 0x7aa9ff00 xpos 1934 ypos 718 } push $N9374c70 Blur { size {{Blur5.size*2} {Blur5.size*2}} crop false name Blur6 xpos 1634 ypos 440 } Multiply { value {{pow(CTRL.falloff,6)}} name Multiply6 xpos 1634 ypos 528 } Dot { name Dot16 tile_color 0x7aa9ff00 xpos 1668 ypos 692 } push $N93701c0 Blur { size {{Blur4.size*2} {Blur4.size*2}} crop false name Blur5 xpos 1368 ypos 440 } Multiply { value {{pow(CTRL.falloff,5)}} name Multiply5 xpos 1368 ypos 524 } Dot { name Dot15 tile_color 0x7aa9ff00 xpos 1402 ypos 666 } push $N936b710 Blur { size {{Blur3.size*2} {Blur3.size*2}} crop false name Blur4 xpos 1102 ypos 440 } Multiply { value {{pow(CTRL.falloff,4)}} name Multiply4 xpos 1102 ypos 518 } Dot { name Dot14 tile_color 0x7aa9ff00 xpos 1136 ypos 640 } push $N9366c60 Blur { size {{Blur2.size*2} {Blur2.size*2}} crop false name Blur3 xpos 836 ypos 440 } Multiply { value {{pow(CTRL.falloff,3)}} name Multiply3 xpos 836 ypos 509 } Dot { name Dot13 tile_color 0x7aa9ff00 xpos 870 ypos 614 } push $N93621b0 Blur { size {{Blur1.size*2} {Blur1.size*2}} crop false name Blur2 xpos 570 ypos 440 } Multiply { value {{pow(CTRL.falloff,2)}} name Multiply2 xpos 570 ypos 508 } Dot { name Dot12 tile_color 0x7aa9ff00 xpos 604 ypos 588 } push $N935d6a0 Blur { size {{CTRL.size*2} {CTRL.size*2}} crop false name Blur1 xpos 304 ypos 440 } Multiply { value {{CTRL.falloff}} name Multiply1 xpos 304 ypos 512 } Merge2 { inputs 2 operation plus name Merge1 xpos 304 ypos 584 } Merge2 { inputs 2 operation plus name Merge2 xpos 304 ypos 610 } Merge2 { inputs 2 operation plus name Merge3 xpos 304 ypos 636 } Merge2 { inputs 2 operation plus name Merge4 xpos 304 ypos 662 } Merge2 { inputs 2 operation plus name Merge5 xpos 304 ypos 688 } Merge2 { inputs 2 operation plus name Merge6 xpos 304 ypos 714 } Merge2 { inputs 2 operation plus name Merge7 xpos 304 ypos 740 } Merge2 { inputs 2 operation plus name Merge8 xpos 304 ypos 766 } Merge2 { inputs 2 operation plus name Merge9 xpos 304 ypos 792 } Dot { name Dot21 tile_color 0x4b5ec600 xpos 338 ypos 928 } set N8f62310 [stack 0] Dot { name Dot22 tile_color 0x4b5ec600 xpos 498 ypos 928 } Grade { whitepoint {{CTRL.core}} white_clamp true name Grade2 xpos 464 ypos 977 } Gamma { channels rgb value {{parent.falloff_color.r/CTRL.falloff_length} {parent.falloff_color.g/CTRL.falloff_length} {parent.falloff_color.b/CTRL.falloff_length} {curve}} name Gamma1 xpos 464 ypos 1037 } Grade { whitepoint {{CTRL.core}} reverse true name Grade3 xpos 464 ypos 1082 } push $N8f62310 Clamp { minimum {{CTRL.core}} maximum_enable false name Clamp1 xpos 304 ypos 972 } Grade { add {{1-CTRL.core}} name Grade4 xpos 304 ypos 1020 } Gamma { channels rgb value {{1+(1-parent.core_color.r)/CTRL.core_length} {1+(1-parent.core_color.g)/CTRL.core_length} {1+(1-parent.core_color.b)/CTRL.core_length} {curve}} name Gamma2 xpos 304 ypos 1061 } Add { channels rgb value -1 name Add1 xpos 304 ypos 1087 } Merge2 { inputs 2 operation plus name Merge10 xpos 304 ypos 1157 } Remove { operation keep channels rgb name Remove2 xpos 304 ypos 1183 } Multiply { value {{parent.mix}} name mix xpos 304 ypos 1217 } Merge2 { inputs 2 operation plus name Merge11 xpos 304 ypos 1270 disable {{parent.glow_only}} } Dot { name Dot23 tile_color 0x4b5ec600 xpos 338 ypos 1436 } push $N930d770 Copy { inputs 2 from0 rgba.red to0 rgba.red from1 rgba.green to1 rgba.green from2 rgba.blue to2 rgba.blue name Copy1 xpos 0 ypos 1414 } Crop { box {{-width*(parent.overscan/100)/2} {-height*(parent.overscan/100)/2} {width+(width*(parent.overscan/100)/2)} {height+(height*(parent.overscan/100)/2)}} crop false name Crop2 xpos 0 ypos 1495 disable {{!parent.crop}} } Output { name Output1 xpos 0 ypos 1543 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_GlueP.gizmo ================================================ Group { name Ls_GlueP help "GlueP - glues an image to a position pass, by projecting on it.\n\nInputs:\n Image to project\n P, the position pass\n N, an optional normals pass for front/back facing selection\n Projector, the Camera to project from\n CGCamera, optionally the original camera from the CG render\n\nThe second camera input can be used to convert P and N from camera space to world space - many renderers output camera space P and N by default, but we need world space to do this. Even better is a \"world position at frame 1\" or \"P0\" or \"Rest position\" pass, which sticks properly to the surface of animated meshes.\n\nA good way to check that a position pass is suitable to project on is to plug it into a PositionToPoints node along with the beauty pass and check in the 3D view that the points lie within the camera frustrum and are laid out in space like the 3D scene was. For gory details on how to make a good P pass, see the second half of this video about the Flame version: https://www.youtube.com/watch?v=YkgHAMwtmpw\n\nIt works best with 32-bit float P and N passes, rather than 16-bit half." selected true addUserKnob {20 Ls_GlueP} addUserKnob {41 useGPUIfAvailable l "Use GPU if available" t "There's not much point turning this on, it's just as fast on the CPU" T BlinkScript1.useGPUIfAvailable} addUserKnob {26 gap l "" +STARTLINE} addUserKnob {3 freezeat l "Freeze projector at frame" t "This takes the projector values from a particular frame, to avoid having to hit No Animation on the Camera node"} freezeat 1 addUserKnob {22 freezehere l Current -STARTLINE T "nuke.thisNode().knob('freezeat').setValue(nuke.frame());"} addUserKnob {26 gap3 l "" -STARTLINE T "\n\n"} addUserKnob {41 Ls_GlueP_ConvertPpassfromcameraspace l "Convert P from camera space" T BlinkScript1.Ls_GlueP_ConvertPpassfromcameraspace} addUserKnob {41 Ls_GlueP_ConvertNpassfromcameraspace l "Convert N from camera space" -STARTLINE T BlinkScript1.Ls_GlueP_ConvertNpassfromcameraspace} addUserKnob {4 outputselect l Output M {"Glued projection" "Glued ST map" "NDC coords" "Clip space coords" "View space coords" "P converted from camera space" "N converted from camera space" "Facing ratio" ""}} addUserKnob {26 gap2 l "" -STARTLINE T "\n\n"} addUserKnob {41 filter l Filter -STARTLINE T STMap1.filter} addUserKnob {41 Ls_GlueP_Projectonfrontfaces l "Front faces" t "Project on faces which face the projector position. This requires the N input connected." T BlinkScript1.Ls_GlueP_Projectonfrontfaces} addUserKnob {41 Ls_GlueP_Projectonbackfaces l "Back faces" t "Project on faces which face away from the projector position. This requires the N input connected." -STARTLINE T BlinkScript1.Ls_GlueP_Projectonbackfaces} addUserKnob {41 Ls_GlueP_Depthclip l "Clip to projector's near/far" t "Adjust the near/far knobs on the Camera node attached to the Projector input to clip the result in depth" T BlinkScript1.Ls_GlueP_Depthclip} addUserKnob {26 credit l "" +STARTLINE T "\n\nlewis@lewissaunders.com"} } Input { inputs 0 name InputCgCamera xpos 180 ypos 159 number 4 } Input { inputs 0 name InputProjector xpos 70 ypos 159 number 3 } StickyNote { inputs 0 name StickyNote1 label "this crop stops it crashing... idk" note_font "Verdana Italic Italic Italic Italic Italic" xpos -52 ypos 332 } Input { inputs 0 name InputP xpos -150 ypos 159 number 1 } set Nee730100 [stack 0] Dot { name Dot1 note_font_size 41 xpos 8 ypos 386 } Input { inputs 0 name InputN xpos -40 ypos 159 number 2 } Crop { box {{Crop1.box.x} {Crop1.box.y} {Crop1.box.r} {Crop1.box.t}} name Crop2 xpos -40 ypos 221 } push $Nee730100 Input { inputs 0 name InputImage xpos -260 ypos 159 } set Nee7eba90 [stack 0] BlinkScript { inputs 3 kernelSourceFile /works/blinks/blinks/Ls_GlueP.blink ProgramGroup 1 KernelDescription "2 \"Ls_GlueP\" iterate pixelWise 139beda4c8afdcbfbb8184dd1b6236759be6f3e522fd5ae922fb4788f211299a 4 \"src\" Read Random \"position\" Read Point \"normals\" Read Point \"dst\" Write Point 22 \"ConvertPpassfromcameraspace\" Bool 1 AA== \"ConvertNpassfromcameraspace\" Bool 1 AA== \"OutputconvertedP\" Bool 1 AA== \"OutputconvertedN\" Bool 1 AA== \"OriginalCGcameraposition\" Float 3 AAAAAAAAAAAAAAAAAAAAAA== \"OriginalCGcamerarotation\" Float 3 AAAAAAAAAAAAAAAAAAAAAA== \"Projectorposition\" Float 3 AAAAAAAAAAAAAMjCAAAAAA== \"Projectorrotation\" Float 3 AAAAAAAAAAAAAAAAAAAAAA== \"Projectorfocallength\" Float 1 AABIQg== \"Projectorhorizontalaperture\" Float 1 exS+QQ== \"Projectonfrontfaces\" Bool 1 AQ== \"Projectonbackfaces\" Bool 1 AQ== \"Depthclip\" Bool 1 AA== \"Depthclipnear\" Float 1 AAAAAA== \"Depthclipfar\" Float 1 8CN0SQ== \"Outputviewspace\" Bool 1 AA== \"Outputclipspace\" Bool 1 AA== \"OutputNDCspace\" Bool 1 AA== \"OutputUVs\" Bool 1 AA== \"OutputFacingRatio\" Bool 1 AA== \"Srcwidth\" Int 1 gAcAAA== \"Srcheight\" Int 1 OAQAAA== 22 \"convertp\" 1 1 \"convertn\" 1 1 \"outputp\" 1 1 \"outputn\" 1 1 \"worldcam_position\" 3 1 \"worldcam_rotation\" 3 1 \"projector_position\" 3 1 \"projector_rotation\" 3 1 \"projector_focal\" 1 1 \"projector_haperture\" 1 1 \"frontface\" 1 1 \"backface\" 1 1 \"zclip\" 1 1 \"znear\" 1 1 \"zfar\" 1 1 \"outputviewspace\" 1 1 \"outputclipspace\" 1 1 \"outputndc\" 1 1 \"outputuv\" 1 1 \"outputfacingratio\" 1 1 \"srcwidth\" 1 1 \"srcheight\" 1 1 4 \"aspect\" Float 1 1 AAAAAA== \"vaperture\" Float 1 1 AAAAAA== \"fovy\" Float 1 1 AAAAAA== \"fovx\" Float 1 1 AAAAAA==" kernelSource "// GlueP: project onto a position pass\n// lewis@lewissaunders.com\n// TODO:\n// o rearrange the output selection logic, translating\n// the return statements into setting a flag was stupid\n// o I wonder what happens when inputs are different sizes\n\nkernel Ls_GlueP : ImageComputationKernel \{\n Image src;\n Image position;\n Image normals;\n Image dst;\n\n param:\n bool convertp, convertn, outputp, outputn;\n float3 worldcam_position, worldcam_rotation;\n float3 projector_position, projector_rotation;\n float projector_focal, projector_haperture;\n bool frontface, backface, zclip;\n float znear, zfar;\n bool outputviewspace, outputclipspace, outputndc, outputuv, outputfacingratio;\n int srcwidth, srcheight;\n\n local:\n float aspect, vaperture, fovy, fovx;\n\n void define() \{\n defineParam(convertp, \"ConvertPpassfromcameraspace\", false);\n defineParam(convertn, \"ConvertNpassfromcameraspace\", false);\n defineParam(outputp, \"OutputconvertedP\", false);\n defineParam(outputn, \"OutputconvertedN\", false);\n defineParam(worldcam_position, \"OriginalCGcameraposition\", float3(0.0, 0.0, 0.0));\n defineParam(worldcam_rotation, \"OriginalCGcamerarotation\", float3(0.0, 0.0, 0.0));\n defineParam(projector_position, \"Projectorposition\", float3(0.0, 0.0, -100.0));\n defineParam(projector_rotation, \"Projectorrotation\", float3(0.0, 0.0, 0.0));\n defineParam(projector_focal, \"Projectorfocallength\", 50.0f);\n defineParam(projector_haperture, \"Projectorhorizontalaperture\", 23.76f);\n defineParam(zclip, \"Depthclip\", false);\n defineParam(frontface, \"Projectonfrontfaces\", true);\n defineParam(backface, \"Projectonbackfaces\", true);\n defineParam(znear, \"Depthclipnear\", 0.0f);\n defineParam(zfar, \"Depthclipfar\", 999999.0f);\n defineParam(outputviewspace, \"Outputviewspace\", false);\n defineParam(outputclipspace, \"Outputclipspace\", false);\n defineParam(outputndc, \"OutputNDCspace\", false);\n defineParam(outputuv, \"OutputUVs\", false);\n defineParam(outputfacingratio, \"OutputFacingRatio\", false);\n defineParam(srcwidth, \"Srcwidth\", 1920);\n defineParam(srcheight, \"Srcheight\", 1080);\n \}\n\n void init() \{\n aspect = max(float(srcwidth), 1.0f) / max(float(srcheight), 1.0f);\n vaperture = projector_haperture / aspect;\n fovy = 2.0f * atan(vaperture / (2.0f * projector_focal));\n fovx = 2.0f * atan(projector_haperture / (2.0f * projector_focal));\n \}\n\n float deg2rad(float angle) \{\n return(angle/(180.0f/PI));\n \}\n\n // Rotates about the origin in ZXY order\n float3 rotate(float3 p, float3 angles) \{\n float x = deg2rad(angles.x);\n float y = deg2rad(angles.y);\n float z = deg2rad(angles.z);\n\n float3x3 rx, ry, rz;\n float rxd\[] = \{1.0, 0.0, 0.0, 0.0, cos(x), -sin(x), 0.0, sin(x), cos(x)\};\n float ryd\[] = \{cos(y), 0.0, sin(y), 0.0, 1.0, 0.0, -sin(y), 0.0, cos(y)\};\n float rzd\[] = \{cos(z), -sin(z), 0.0, sin(z), cos(z), 0.0, 0.0, 0.0, 1.0\};\n rx.setArray(rxd);\n ry.setArray(ryd);\n rz.setArray(rzd);\n\n float3x3 r = rz * rx * ry;\n return(r * p);\n \}\n\n // Un-rotates about the origin in ZXY order\n float3 unrotate(float3 p, float3 angles) \{\n float x = deg2rad(angles.x);\n float y = deg2rad(angles.y);\n float z = deg2rad(angles.z);\n\n float3x3 rx, ry, rz;\n float rxd\[] = \{1.0f, 0.0f, 0.0f, 0.0f, cos(x), sin(x), 0.0f, -sin(x), cos(x)\};\n float ryd\[] = \{cos(y), 0.0f, -sin(y), 0.0f, 1.0f, 0.0f, sin(y), 0.0f, cos(y)\};\n float rzd\[] = \{cos(z), sin(z), 0.0f, -sin(z), cos(z), 0.0f, 0.0f, 0.0f, 1.0f\};\n rx.setArray(rxd);\n ry.setArray(ryd);\n rz.setArray(rzd);\n\n float3x3 r = ry * rx * rz;\n return(r * p);\n \}\n\n void process(int2 pos) \{\n SampleType(position) prgba = position();\n float3 p = float3(prgba.x, prgba.y, prgba.z);\n\n SampleType(normals) nrgba = normals();\n float3 n = float3(nrgba.x, nrgba.y, nrgba.z);\n\n bool outputready = false;\n float3 o;\n\n // Optionally, convert P and N passes from camera space to world space\n if(convertp) \{\n p.z *= -1.0f;\n p = unrotate(p, -worldcam_rotation);\n p += worldcam_position;\n \}\n if(convertn) \{\n n.z *= -1.0f;\n n = unrotate(n, -worldcam_rotation);\n \}\n if(outputp && !outputready) \{\n o = p;\n outputready = true;\t\t\n \}\n if(outputn && !outputready) \{\n o = n;\n outputready = true;\t\t\n \}\n\n // Keep world space p for later, we need it for facing calc\n float3 worldp = p;\n\n // World space to view space\n p -= projector_position;\n p = rotate(p, -projector_rotation);\n if(outputviewspace && !outputready) \{\n o = p;\n outputready = true;\n \}\n\n // Optional clipping\n if(zclip) \{\n if(-p.z < znear || -p.z > zfar) \{\n o = float3(0.0f);\n outputready = true;\n \}\n \}\n\n // Clip behind projector\n if(p.z > 0.0f) \{\n o = float3(0.0f);\n outputready = true;\n \}\n\n // Facing\n float3 v = normalize(projector_position - worldp);\n float facingratio = dot(n, v);\n if(outputfacingratio && !outputready) \{\n o = float3(facingratio);\n outputready = true;\n \}\n if((facingratio > 0.0f && !frontface) || (facingratio < 0.0f && !backface)) \{\n o = float3(0.0f);\n outputready = true;\n \}\n\n // View space to clip space\n float4x4 projection_matrix;\n float pmd\[] = \{1.0f/tan(fovx/2.0f), 0.0f, 0.0f, 0.0f,\n\t\t0.0f, 1.0f/tan(fovy/2.0f), 0.0f, 0.0f,\n\t\t0.0f, 0.0f, 1.0f, 1.0f,\n\t\t0.0f, 0.0f, 1.0f, 0.0f\};\n projection_matrix.setArray(pmd);\n float4 p4 = float4(p.x, p.y, p.z, 0.0f);\n p4 = projection_matrix * p4;\n if(outputclipspace && !outputready) \{\n o.x = p4.x;\n o.y = p4.y;\n o.z = p4.z;\n outputready = true;\n \}\n\n // Clip space to NDC\n p4 /= p4.w;\n if(outputndc && !outputready) \{\n o.x = p4.x;\n o.y = p4.y;\n o.z = p4.z;\n outputready = true;\n \}\n\n // NDC to window\n p4 /= -2.0f;\n p4 += 0.5f;\n if(outputuv && !outputready) \{\n o.x = p4.x;\n o.y = p4.y;\n o.z = 0.0f;\n outputready = true;\n \}\n\n // Sample\n if(!outputready) \{\n SampleType(src) s = bilinear(src, p4.x*srcwidth, p4.y*srcheight);\n o.x = s.x;\n o.y = s.y;\n o.z = s.z;\n \}\n\n // Output\n SampleType(dst) d;\n d.x = o.x;\n d.y = o.y;\n d.z = o.z;\n dst() = d;\n \}\n\};\n" useGPUIfAvailable false rebuild "" Ls_GlueP_OutputconvertedP {{"parent.outputselect == 5"}} Ls_GlueP_OutputconvertedN {{"parent.outputselect == 6"}} Ls_GlueP_OriginalCGcameraposition {{"\[exists parent.input4] ? parent.input4.translate.x : 0.0"} {"\[exists parent.input4] ? parent.input4.translate.y : 0.0"} {"\[exists parent.input4] ? parent.input4.translate.z : 0.0"}} Ls_GlueP_OriginalCGcamerarotation {{"\[exists parent.input4] ? parent.input4.rotate.x : 0.0"} {"\[exists parent.input4] ? parent.input4.rotate.y : 0.0"} {"\[exists parent.input4] ? parent.input4.rotate.z : 0.0"}} Ls_GlueP_Projectorposition {{parent.input3.translate.x(parent.freezeat)} {parent.input3.translate.y(parent.freezeat)} {parent.input3.translate.z(parent.freezeat)}} Ls_GlueP_Projectorrotation {{parent.input3.rotate.x(parent.freezeat)} {parent.input3.rotate.y(parent.freezeat)} {parent.input3.rotate.z(parent.freezeat)}} Ls_GlueP_Projectorfocallength {{parent.input3.focal(parent.freezeat)}} Ls_GlueP_Projectorhorizontalaperture {{parent.input3.haperture(parent.freezeat)}} Ls_GlueP_Depthclipnear {{parent.input3.near(parent.freezeat)}} Ls_GlueP_Depthclipfar {{parent.input3.far(parent.freezeat)}} Ls_GlueP_Outputviewspace {{"parent.outputselect == 4"}} Ls_GlueP_Outputclipspace {{"parent.outputselect == 3"}} Ls_GlueP_OutputNDCspace {{"parent.outputselect == 2"}} Ls_GlueP_OutputUVs {{"parent.outputselect == 0 | parent.outputselect == 1"}} Ls_GlueP_OutputFacingRatio {{"parent.outputselect == 7"}} Ls_GlueP_Srcwidth {{width}} Ls_GlueP_Srcheight {{height}} rebuild_finalise "" name BlinkScript1 xpos -150 ypos 278 } Crop { box {0 0 {width} {height}} crop false name Crop1 xpos -150 ypos 334 } Transform { translate {-0.5 -0.5} center {1024 778} name Transform1 xpos -150 ypos 358 } set N14f97310 [stack 0] push $Nee7eba90 STMap { inputs 2 uv rgb name STMap1 xpos -260 ypos 396 } push $N14f97310 Switch { inputs 2 which {{"parent.outputselect == 0 ? 1 : 0"}} name Switch1 xpos -150 ypos 460 } CopyBBox { inputs 2 name CopyBBox1 xpos -150 ypos 510 } Output { name Output1 xpos -150 ypos 570 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_GodRaysProjector.gizmo ================================================ Group { name GodRaysProjector tile_color 0xcc804eff selected true addUserKnob {20 User} addUserKnob {41 "Local GPU: " T "GetGPUName.Local GPU: "} addUserKnob {41 useGPUIfAvailable l "GPU Preview" -STARTLINE T BlinkScript1.useGPUIfAvailable} addUserKnob {41 vectorize l "Vectorize on CPU" -STARTLINE T BlinkScript1.vectorize} addUserKnob {26 ""} addUserKnob {4 outputMode l "output mode" t "2D: just the RGBA projection\nDeep: RGBA projection, with deep data, output as a deep stream\nShadow: just the shadow mask" M {2D Deep Shadow "" "" ""}} addUserKnob {26 ""} addUserKnob {20 _3 l Projection n 1} _3 0 addUserKnob {41 scale l "input resolution scale" t "pre-scales the input image(s) and then performs an inverse scale to return the same format.\n\nthis will either speed up performance, or decrease the powderiness depending on increased or decreased resolution." T Reformat1.scale} addUserKnob {41 GodRaysProjectorVolumeKernel_iterations l steps t "the number of projected planes used to create the volume" T BlinkScript1.GodRaysProjectorVolumeKernel_iterations} addUserKnob {41 GodRaysProjectorVolumeKernel_depthMin l "project near" t "the closest plane used to create the volume" T BlinkScript1.GodRaysProjectorVolumeKernel_depthMin} addUserKnob {41 GodRaysProjectorVolumeKernel_depthMax l "project far" t "the farthest plane used to create the volume" T BlinkScript1.GodRaysProjectorVolumeKernel_depthMax} addUserKnob {41 GodRaysProjectorVolumeKernel_projDistSkew l "near/far weight" t "this skews the projection plane placement nearer or further from the first and last planes" T BlinkScript1.GodRaysProjectorVolumeKernel_projDistSkew} addUserKnob {20 endGroup n -1} addUserKnob {20 projectionNoise l "3D Noise" n 1} projectionNoise 0 addUserKnob {41 GodRaysProjectorVolumeKernel_EnableNoise l "enable noise" T BlinkScript1.GodRaysProjectorVolumeKernel_EnableNoise} addUserKnob {41 GodRaysProjectorVolumeKernel_NoiseOctaves l octaves t "the complexity of the 4D noise" T BlinkScript1.GodRaysProjectorVolumeKernel_NoiseOctaves} addUserKnob {41 GodRaysProjectorVolumeKernel_NoisePersistence l persistence t "how much each level of complexity contributes to the final noise" T BlinkScript1.GodRaysProjectorVolumeKernel_NoisePersistence} addUserKnob {41 GodRaysProjectorVolumeKernel_NoiseScale l scale t "scaling the noise at generation level" T BlinkScript1.GodRaysProjectorVolumeKernel_NoiseScale} addUserKnob {41 GodRaysProjectorVolumeKernel_NoiseSeed l seed t "this is the 4th dimention of the 4D noise, this is relative to the scale of the postion data" T BlinkScript1.GodRaysProjectorVolumeKernel_NoiseSeed} addUserKnob {41 GodRaysProjectorVolumeKernel_NoiseGamma l gamma T BlinkScript1.GodRaysProjectorVolumeKernel_NoiseGamma} addUserKnob {41 GodRaysProjectorVolumeKernel_NoiseMix l mix T BlinkScript1.GodRaysProjectorVolumeKernel_NoiseMix} addUserKnob {26 ""} addUserKnob {41 xform_order l "transform order" T Axis1.xform_order} addUserKnob {41 rot_order l "rotation order" T Axis1.rot_order} addUserKnob {41 translate T Axis1.translate} addUserKnob {41 rotate T Axis1.rotate} addUserKnob {41 scaling l scale T Axis1.scaling} addUserKnob {41 uniform_scale l "shadow length scale" T Axis1.uniform_scale} addUserKnob {41 skew T Axis1.skew} addUserKnob {41 pivot T Axis1.pivot} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 colourTweaks l Image n 1} colourTweaks 0 addUserKnob {41 GodRaysProjectorVolumeKernel_EnableSourceDarken l "darken at source" t "this exponentially darkens the planes at the source, this is useful for when bunched up planes/pixels cause very bright values\n" T BlinkScript1.GodRaysProjectorVolumeKernel_EnableSourceDarken} addUserKnob {41 clampAlpha l "clamp alpha" -STARTLINE T Clamp1.clampAlpha} addUserKnob {41 GodRaysProjectorVolumeKernel_fromColour l "from colour" T BlinkScript1.GodRaysProjectorVolumeKernel_fromColour} addUserKnob {41 GodRaysProjectorVolumeKernel_toColour l "to colour" T BlinkScript1.GodRaysProjectorVolumeKernel_toColour} addUserKnob {41 GodRaysProjectorVolumeKernel_toFromGamma l gamma T BlinkScript1.GodRaysProjectorVolumeKernel_toFromGamma} addUserKnob {26 ""} addUserKnob {41 size l "gaussian blur size" T Blur1.size} addUserKnob {41 blurShadow l "blur shadow" -STARTLINE T Blur1.blurShadow} addUserKnob {41 parallelScaleBlur l "parallel scale blur" T GodRays1.parallelScaleBlur} addUserKnob {41 bidirectional -STARTLINE T GodRays1.bidirectional} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {20 shadowSettings l Shadow n 1} shadowSettings 0 addUserKnob {41 in l "position data" T Shuffle1.in} addUserKnob {41 in_1 l "normals data" T Shuffle2.in} addUserKnob {41 enableShadow l "enable shadow" T Merge1.enableShadow} addUserKnob {41 useCustomShadowMask l "use custom shadow mask" t "this bypasses the position and normals processing and intead uses the alpha channel straight from the shadow input" -STARTLINE T Switch3.useCustomShadowMask} addUserKnob {41 mix l "stencil amount" T Merge1.mix} addUserKnob {41 scale_1 l scale T GodRays5.scale} addUserKnob {41 from_color l "from color" T GodRays5.from_color} addUserKnob {41 to_color l "to color" T GodRays5.to_color} addUserKnob {41 gamma T GodRays5.gamma} addUserKnob {41 steps T GodRays5.steps} addUserKnob {41 max -STARTLINE T GodRays5.max} addUserKnob {41 size_1 l "shadow blur size" T Blur4.size} addUserKnob {26 ""} addUserKnob {41 blackpoint l "facing mask blackpoint" t "this controls the falloff of the mask created using the facing angle of an object to the camera" T Grade2.blackpoint} addUserKnob {41 whitepoint l "facing mask whitepoint" t "this controls the falloff of the mask created using the facing angle of an object to the camera" T Grade2.whitepoint} addUserKnob {26 ""} addUserKnob {41 useVolumeDepth l "depth region override" t "this overrides the near/far values of the projection when selecting the region of the position data used to generate a shadow" T BlinkScript2.useVolumeDepth} addUserKnob {41 nearDepth l "near depth" T BlinkScript2.nearDepth} addUserKnob {41 farDepth l "far depth" T BlinkScript2.farDepth} addUserKnob {20 endGroup_3 l endGroup n -1} addUserKnob {26 _1 l "" +STARTLINE} addUserKnob {26 credit l "" +STARTLINE T "Chris Fryer | 2021"} addUserKnob {20 About} addUserKnob {26 info l "" +STARTLINE T "v1.1 - 03.03.21\n\n- complete rebuild\n- 4 point approximation no longer available\n- input scale option for speed/quality control\n- card placement math no longer breaks under certain angles or behind camera\n- shadow functionality added\n- camera input now uses DummyCam, this allows for non-topnode compliant methods (Axis inputs etc..)\n- 3D noise transform, no longer inverted\n- labels on most knobs\n- code now commented for those learning Blinkscript\n- to/from now functions for RGBA\n- added weight option to skew virtual card placement\n- far card now matches far distance exactly\n- edge pixels no longer wrong"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x191b8eff label DEEP note_font "Verdana Bold" note_font_size 60 xpos -592 ypos 75 bdwidth 357 bdheight 812 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0xc69548ff label "VOLUME PROJECTION" note_font "Verdana Bold" note_font_size 60 xpos 188 ypos -80 bdwidth 208 bdheight 621 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x3f3f3fff label SHADOW note_font "Verdana Bold" note_font_size 60 xpos 938 ypos -66 bdwidth 324 bdheight 717 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0xaa1d1dff label "CAMERA INPUTS" note_font "Verdana Bold" note_font_size 42 xpos -43 ypos -121 bdwidth 196 bdheight 195 } Input { inputs 0 name img xpos 254 ypos 28 } Reformat { type scale pbb true name Reformat1 label "image scaling" selected true xpos 254 ypos 92 disable {{"scale == 1"}} } set N32615c00 [stack 0] Input { inputs 0 name shadow xpos 1039 ypos 21 number 3 } Reformat { type scale box_width {{Reformat1.input0.width}} box_height {{Reformat1.input0.height}} scale {{parent.Reformat1.scale} {parent.Reformat1.scale}} filter notch name Reformat3 xpos 1039 ypos 58 disable {{parent.Reformat1.disable}} } CopyBBox { inputs 2 name CopyBBox1 xpos 1039 ypos 98 } Dot { name Dot10 xpos 1073 ypos 155 } set N32614400 [stack 0] Dot { name Dot14 xpos 996 ypos 155 } set N64bb3c00 [stack 0] Dot { name Dot18 xpos 951 ypos 155 } GodRays { channels alpha scale 2 center {{parent.GodRays1.center} {parent.GodRays1.center}} to_color 0 steps 10 max true name GodRays6 xpos 917 ypos 462 disable {{scale==1}} } Dot { name Dot17 xpos 951 ypos 568 } push $N32614400 Shuffle { in none name Shuffle1 label "Position Data" xpos 1039 ypos 184 } Remove { operation keep channels rgba name Remove2 xpos 1039 ypos 222 } BlinkScript { recompileCount 134 ProgramGroup 1 KernelDescription "2 \"PositionInFrustrumKernel\" iterate pixelWise 62c3f92d35daef6caeb6bf3bb07a8403333e7c6da2c2f19b3e5542cb00358efa 2 \"src\" Read Point \"dst\" Write Random 6 \"projCamMatrix\" Float 16 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== \"projCamFocal\" Float 1 AAAAAA== \"projCamHaperture\" Float 1 AAAAAA== \"projCamVaperture\" Float 1 AAAAAA== \"depthMin\" Float 1 AAAAAA== \"depthMax\" Float 1 AAAAAA== 6 \"projCamMatrix\" 16 1 \"projCamFocal\" 1 1 \"projCamHaperture\" 1 1 \"projCamVaperture\" 1 1 \"depthMin\" 1 1 \"depthMax\" 1 1 2 \"resolution\" Float 2 1 AAAAAAAAAAA= \"posData\" Float 4 1 AAAAAAAAAAAAAAAAAAAAAA==" kernelSource "inline float4 matrixTransform(float4 image, float4x4 matrix)\{\n\n float4 matrixTransformsOutput;\n\n matrixTransformsOutput.x = image.x * matrix\[0]\[0] + image.y * matrix\[0]\[1] + image.z * matrix\[0]\[2] + matrix\[0]\[3];\n matrixTransformsOutput.y = image.x * matrix\[1]\[0] + image.y * matrix\[1]\[1] + image.z * matrix\[1]\[2] + matrix\[1]\[3];\n matrixTransformsOutput.z = image.x * matrix\[2]\[0] + image.y * matrix\[2]\[1] + image.z * matrix\[2]\[2] + matrix\[2]\[3];\n matrixTransformsOutput.w = image.x * matrix\[3]\[0] + image.y * matrix\[3]\[1] + image.z * matrix\[3]\[2] + matrix\[3]\[3];\n\n\n return matrixTransformsOutput;\n\n\}\n\ninline float4 matrixToScreenspace(float4 image, float focal, float haperture, float vaperture, int2 resolution)\{\n\n image.x = 0.5f - ((image.x) * (focal/haperture))/image.z;\n image.y = 0.5f - ((image.y) * (focal/vaperture))/image.z;\n image.z = -image.z;\n\n image.x = image.x*(resolution.x)-1.0f;\n image.y = image.y*(resolution.y)-1.0f;\n\n\n return image;\n\n\}\n\n\n\nkernel PositionInFrustrumKernel : ImageComputationKernel\n\{\n Image src; // the input image\n Image dst; // the output image\n\n param:\n\n //projection cam world matrix\n float4x4 projCamMatrix;\n\n //projection cam settings\n float projCamFocal;\n float projCamHaperture;\n float projCamVaperture;\n\n //distance of card from camera\n float depthMin;\n float depthMax;\n\n local:\n\n float2 resolution;\n float4 posData; \n\n void define() \{\n \n \}\n\n void init() \{\n\n //defining resolution\n resolution.x = src.bounds.width();\n resolution.y = src.bounds.height(); \n \n \}\n\n void process(int2 pos) \{ \n \n\n posData = src();\n\n //transforming card using projection cam\n posData = matrixTransform(posData, projCamMatrix.invert());\n \n //creating screenspace UV coordinates using projection cam data\n posData = matrixToScreenspace(posData, projCamFocal, projCamHaperture, projCamVaperture, resolution);\n\n posData.x = posData.x >= 0.0f && posData.x <= resolution.x-1 ? 1 : 0;\n posData.y = posData.y >= 0.0f && posData.y <= resolution.y-1 ? 1 : 0;\n posData.z = posData.z >= depthMin && posData.z <= depthMax ? 1 : 0;\n\n posData.w = posData.x * posData.y * posData.z;\n \n \n\n dst(pos.x, pos.y) = posData; \n\n\n \n\n \}\n\};\n" useGPUIfAvailable {{parent.BlinkScript1.useGPUIfAvailable}} vectorize {{parent.BlinkScript1.vectorize}} rebuild "" PositionInFrustrumKernel_projCamMatrix { {{parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix} {parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix} {parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix} {parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix}} {{parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix} {parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix} {parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix} {parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix}} {{parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix} {parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix} {parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix} {parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix}} {{parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix} {parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix} {parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix} {parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix}} } PositionInFrustrumKernel_projCamFocal {{parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamFocal}} PositionInFrustrumKernel_projCamHaperture {{parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamHaperture}} PositionInFrustrumKernel_projCamVaperture {{parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamVaperture}} PositionInFrustrumKernel_depthMin {{"useVolumeDepth ? nearDepth : parent.BlinkScript1.GodRaysProjectorVolumeKernel_depthMin "}} PositionInFrustrumKernel_depthMax {{"useVolumeDepth ? farDepth : parent.BlinkScript1.GodRaysProjectorVolumeKernel_depthMax"}} rebuild_finalise "" name BlinkScript2 xpos 1039 ypos 286 addUserKnob {20 User} addUserKnob {7 nearDepth l "shadow region near" R 0 100} nearDepth 1 addUserKnob {7 farDepth l "shadow region far" R 0 100} farDepth 10 addUserKnob {6 useVolumeDepth l "shadow depth override" +STARTLINE} } Dot { name Dot19 xpos 1073 ypos 342 } set N64bb2000 [stack 0] Dot { name Dot21 xpos 1158 ypos 342 } Dot { name Dot20 xpos 1158 ypos 482 } push $N32614400 Dot { name Dot11 xpos 1202 ypos 155 } Shuffle { in none name Shuffle2 label "Normals Data" xpos 1168 ypos 185 } Remove { operation keep channels rgba name Remove3 xpos 1168 ypos 223 } ColorMatrix { matrix { {{parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix.0} {parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix.1} {parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix.2}} {{parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix.4} {parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix.5} {parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix.6}} {{parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix.8} {parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix.9} {parent.BlinkScript1.GodRaysProjectorVolumeKernel_projCamMatrix.10}} } invert true name ColorMatrix1 xpos 1168 ypos 262 } Grade { white_clamp true name Grade2 xpos 1168 ypos 288 } Dot { name Dot12 xpos 1202 ypos 517 } push $N64bb3c00 Dot { name Dot13 xpos 996 ypos 411 } push $N64bb2000 ChannelMerge { inputs 2 operation multiply name ChannelMerge2 xpos 1039 ypos 394 } GodRays { channels alpha scale 2 center {{parent.GodRays1.center} {parent.GodRays1.center}} to_color 0 steps 10 max true name GodRays5 xpos 1039 ypos 462 disable {{scale==1}} } ChannelMerge { inputs 2+1 A rgba.blue operation stencil bbox A name ChannelMerge1 xpos 1039 ypos 500 } Switch { inputs 2 which {{useCustomShadowMask}} name Switch3 xpos 1039 ypos 564 addUserKnob {20 User} addUserKnob {6 useCustomShadowMask l "use custom shadow mask" +STARTLINE} } Blur { channels rgba name Blur4 xpos 1039 ypos 590 disable {{"size == 0"}} } Blur { channels rgba size {{parent.Blur1.size}} name Blur2 xpos 1039 ypos 616 disable {{"max(1-parent.Blur1.blurShadow, Blur1.disable )"}} addUserKnob {20 User} addUserKnob {6 blurShadow l "blur shadow" +STARTLINE} } Dot { name Dot15 xpos 1073 ypos 660 } set N62546000 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle3 tile_color 0xffffff00 xpos 1039 ypos 745 } Reformat { type "to box" box_width {{Reformat1.input0.width}} box_height {{Reformat1.input0.height}} box_fixed true scale {{1/parent.Reformat1.scale} {1/parent.Reformat1.scale}} filter notch name Reformat4 xpos 1039 ypos 822 disable {{parent.Reformat1.disable}} } Dot { name Dot16 xpos 1073 ypos 965 } push $N62546000 push $N32615c00 Dot { name Dot4 xpos 288 ypos 155 } set N62544c00 [stack 0] BlinkScript { recompileCount 199 ProgramGroup 1 KernelDescription "2 \"GodRaysProjectorVolumeKernel\" iterate pixelWise c90547bcdf11f7b781348ba43735748059cb3e7f197f04c35f90a8e587e83036 2 \"src\" Read Point \"dst\" Write Random 24 \"renderCamMatrix\" Float 16 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== \"renderCamFocal\" Float 1 AAAAAA== \"renderCamHaperture\" Float 1 AAAAAA== \"renderCamVaperture\" Float 1 AAAAAA== \"projCamMatrix\" Float 16 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== \"projCamFocal\" Float 1 AAAAAA== \"projCamHaperture\" Float 1 AAAAAA== \"projCamVaperture\" Float 1 AAAAAA== \"depthMin\" Float 1 AAAAAA== \"depthMax\" Float 1 AAAAAA== \"iterations\" Int 1 AAAAAA== \"projDistSkew\" Float 1 AAAAAA== \"EnableSourceDarken\" Bool 1 AA== \"NoiseOctaves\" Float 1 AAAAAA== \"NoisePersistence\" Float 1 AAAAAA== \"NoiseScale\" Float 1 AAAAAA== \"NoiseSeed\" Float 1 AAAAAA== \"NoiseGamma\" Float 1 AAAAAA== \"axisMatrix\" Float 16 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== \"EnableNoise\" Bool 1 AA== \"NoiseMix\" Float 1 AAAAAA== \"toColour\" Float 4 AAAAAAAAAAAAAAAAAAAAAA== \"fromColour\" Float 4 AAAAAAAAAAAAAAAAAAAAAA== \"toFromGamma\" Float 4 AAAAAAAAAAAAAAAAAAAAAA== 24 \"renderCamMatrix\" 16 1 \"renderCamFocal\" 1 1 \"renderCamHaperture\" 1 1 \"renderCamVaperture\" 1 1 \"projCamMatrix\" 16 1 \"projCamFocal\" 1 1 \"projCamHaperture\" 1 1 \"projCamVaperture\" 1 1 \"depthMin\" 1 1 \"depthMax\" 1 1 \"iterations\" 1 1 \"projDistSkew\" 1 1 \"EnableSourceDarken\" 1 1 \"NoiseOctaves\" 1 1 \"NoisePersistence\" 1 1 \"NoiseScale\" 1 1 \"NoiseSeed\" 1 1 \"NoiseGamma\" 1 1 \"axisMatrix\" 16 1 \"EnableNoise\" 1 1 \"NoiseMix\" 1 1 \"toColour\" 4 1 \"fromColour\" 4 1 \"toFromGamma\" 4 1 7 \"resolution\" Float 2 1 AAAAAAAAAAA= \"nearPosData\" Float 4 1 AAAAAAAAAAAAAAAAAAAAAA== \"farPosData\" Float 4 1 AAAAAAAAAAAAAAAAAAAAAA== \"posData\" Float 4 1 AAAAAAAAAAAAAAAAAAAAAA== \"imageMult\" Float 4 1 AAAAAAAAAAAAAAAAAAAAAA== \"NoisePosData\" Float 4 1 AAAAAAAAAAAAAAAAAAAAAA== \"cardInfo\" Float 2 1 AAAAAAAAAAA=" kernelSource "inline float4 matrixTransform(float4 image, float4x4 matrix)\{\n\n float4 matrixTransformsOutput;\n\n matrixTransformsOutput.x = image.x * matrix\[0]\[0] + image.y * matrix\[0]\[1] + image.z * matrix\[0]\[2] + matrix\[0]\[3];\n matrixTransformsOutput.y = image.x * matrix\[1]\[0] + image.y * matrix\[1]\[1] + image.z * matrix\[1]\[2] + matrix\[1]\[3];\n matrixTransformsOutput.z = image.x * matrix\[2]\[0] + image.y * matrix\[2]\[1] + image.z * matrix\[2]\[2] + matrix\[2]\[3];\n matrixTransformsOutput.w = image.x * matrix\[3]\[0] + image.y * matrix\[3]\[1] + image.z * matrix\[3]\[2] + matrix\[3]\[3];\n\n\n return matrixTransformsOutput;\n\n\}\n\ninline float4 matrixToScreenspace(float4 image, float focal, float haperture, float vaperture, int2 resolution)\{\n\n image.x = 0.5f - ((image.x) * (focal/haperture))/image.z;\n image.y = 0.5f - ((image.y) * (focal/vaperture))/image.z;\n image.z = -image.z;\n\n image.x = image.x * (resolution.x) - 1.0f;\n image.y = image.y * (resolution.y) - 1.0f;\n\n return image;\n\n\}\n\n//Based on https://github.com/Draradech/csworldgen/blob/master/simplexnoise.cpp\n//Ported by Mads Hagbarth Lund 2014\n\n/* Copyright (c) 2007-2012 Eliot Eshelman\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n *\n */\n\n\nint fastfloor( const float x ) \{ return x > 0 ? (int) x : (int) x - 1; \}\ninline float raw_noise_4d( const float x, const float y, const float z, const float w ) \n\{\nint simplex\[64]\[4] = \{\n \{0,1,2,3\},\{0,1,3,2\},\{0,0,0,0\},\{0,2,3,1\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{1,2,3,0\},\n \{0,2,1,3\},\{0,0,0,0\},\{0,3,1,2\},\{0,3,2,1\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{1,3,2,0\},\n \{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\n \{1,2,0,3\},\{0,0,0,0\},\{1,3,0,2\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{2,3,0,1\},\{2,3,1,0\},\n \{1,0,2,3\},\{1,0,3,2\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{2,0,3,1\},\{0,0,0,0\},\{2,1,3,0\},\n \{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\n \{2,0,1,3\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{3,0,1,2\},\{3,0,2,1\},\{0,0,0,0\},\{3,1,2,0\},\n \{2,1,0,3\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{3,1,0,2\},\{0,0,0,0\},\{3,2,0,1\},\{3,2,1,0\}\n\};\n int perm\[512] = \{\n 151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,\n 8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,\n 35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,\n 134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,\n 55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208, 89,\n 18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,\n 250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,\n 189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,\n 172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,\n 228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,\n 107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,\n 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180,\n\n 151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,\n 8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,\n 35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,\n 134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,\n 55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208, 89,\n 18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,\n 250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,\n 189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,\n 172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,\n 228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,\n 107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,\n 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180\n \};\n int grad4\[32]\[4]= \{\n \{0,1,1,1\}, \{0,1,1,-1\}, \{0,1,-1,1\}, \{0,1,-1,-1\},\n \{0,-1,1,1\}, \{0,-1,1,-1\}, \{0,-1,-1,1\}, \{0,-1,-1,-1\},\n \{1,0,1,1\}, \{1,0,1,-1\}, \{1,0,-1,1\}, \{1,0,-1,-1\},\n \{-1,0,1,1\}, \{-1,0,1,-1\}, \{-1,0,-1,1\}, \{-1,0,-1,-1\},\n \{1,1,0,1\}, \{1,1,0,-1\}, \{1,-1,0,1\}, \{1,-1,0,-1\},\n \{-1,1,0,1\}, \{-1,1,0,-1\}, \{-1,-1,0,1\}, \{-1,-1,0,-1\},\n \{1,1,1,0\}, \{1,1,-1,0\}, \{1,-1,1,0\}, \{1,-1,-1,0\},\n \{-1,1,1,0\}, \{-1,1,-1,0\}, \{-1,-1,1,0\}, \{-1,-1,-1,0\}\n \};\n float F4 = (sqrt(5.0f)-1.0)/4.0;\n float G4 = (5.0-sqrt(5.0f))/20.0;\n float n0, n1, n2, n3, n4;\n float s = (x + y + z + w) * F4;\n int i = fastfloor(x + s);\n int j = fastfloor(y + s);\n int k = fastfloor(z + s);\n int l = fastfloor(w + s);\n float t = (i + j + k + l) * G4;\n float X0 = i - t;\n float Y0 = j - t;\n float Z0 = k - t;\n float W0 = l - t;\n\n float x0 = x - X0;\n float y0 = y - Y0;\n float z0 = z - Z0;\n float w0 = w - W0;\n int c1 = (x0 > y0) ? 32 : 0;\n int c2 = (x0 > z0) ? 16 : 0;\n int c3 = (y0 > z0) ? 8 : 0;\n int c4 = (x0 > w0) ? 4 : 0;\n int c5 = (y0 > w0) ? 2 : 0;\n int c6 = (z0 > w0) ? 1 : 0;\n int c = c1 + c2 + c3 + c4 + c5 + c6;\n\n int i1, j1, k1, l1;\n int i2, j2, k2, l2;\n int i3, j3, k3, l3;\n i1 = simplex\[c]\[0]>=3 ? 1 : 0;\n j1 = simplex\[c]\[1]>=3 ? 1 : 0;\n k1 = simplex\[c]\[2]>=3 ? 1 : 0;\n l1 = simplex\[c]\[3]>=3 ? 1 : 0;\n i2 = simplex\[c]\[0]>=2 ? 1 : 0;\n j2 = simplex\[c]\[1]>=2 ? 1 : 0;\n k2 = simplex\[c]\[2]>=2 ? 1 : 0;\n l2 = simplex\[c]\[3]>=2 ? 1 : 0;\n i3 = simplex\[c]\[0]>=1 ? 1 : 0;\n j3 = simplex\[c]\[1]>=1 ? 1 : 0;\n k3 = simplex\[c]\[2]>=1 ? 1 : 0;\n l3 = simplex\[c]\[3]>=1 ? 1 : 0;\n float x1 = x0 - i1 + G4;\n float y1 = y0 - j1 + G4;\n float z1 = z0 - k1 + G4;\n float w1 = w0 - l1 + G4;\n float x2 = x0 - i2 + 2.0*G4;\n float y2 = y0 - j2 + 2.0*G4;\n float z2 = z0 - k2 + 2.0*G4;\n float w2 = w0 - l2 + 2.0*G4;\n float x3 = x0 - i3 + 3.0*G4;\n float y3 = y0 - j3 + 3.0*G4;\n float z3 = z0 - k3 + 3.0*G4;\n float w3 = w0 - l3 + 3.0*G4;\n float x4 = x0 - 1.0 + 4.0*G4;\n float y4 = y0 - 1.0 + 4.0*G4;\n float z4 = z0 - 1.0 + 4.0*G4;\n float w4 = w0 - 1.0 + 4.0*G4;\n int ii = i & 255;\n int jj = j & 255;\n int kk = k & 255;\n int ll = l & 255;\n int gi0 = perm\[ii+perm\[jj+perm\[kk+perm\[ll]]]] % 32;\n int gi1 = perm\[ii+i1+perm\[jj+j1+perm\[kk+k1+perm\[ll+l1]]]] % 32;\n int gi2 = perm\[ii+i2+perm\[jj+j2+perm\[kk+k2+perm\[ll+l2]]]] % 32;\n int gi3 = perm\[ii+i3+perm\[jj+j3+perm\[kk+k3+perm\[ll+l3]]]] % 32;\n int gi4 = perm\[ii+1+perm\[jj+1+perm\[kk+1+perm\[ll+1]]]] % 32;\n float t0 = 0.6 - x0*x0 - y0*y0 - z0*z0 - w0*w0;\n if(t0<0) n0 = 0.0;\n else \{\n t0 *= t0;\n n0 = t0 * t0 * dot(float4(grad4\[gi0]\[0],grad4\[gi0]\[2],grad4\[gi0]\[3],grad4\[gi0]\[3]), float4(x0, y0, z0, w0));\n \}\n float t1 = 0.6 - x1*x1 - y1*y1 - z1*z1 - w1*w1;\n if(t1<0) n1 = 0.0;\n else \{\n t1 *= t1;\n n1 = t1 * t1 * dot(float4(grad4\[gi1]\[0],grad4\[gi1]\[2],grad4\[gi1]\[3],grad4\[gi1]\[3]), float4(x1, y1, z1, w1));\n \}\n float t2 = 0.6 - x2*x2 - y2*y2 - z2*z2 - w2*w2;\n if(t2<0) n2 = 0.0;\n else \{\n t2 *= t2;\n n2 = t2 * t2 * dot(float4(grad4\[gi2]\[0],grad4\[gi2]\[2],grad4\[gi2]\[3],grad4\[gi2]\[3]), float4(x2, y2, z2, w2));\n \}\n float t3 = 0.6 - x3*x3 - y3*y3 - z3*z3 - w3*w3;\n if(t3<0) n3 = 0.0;\n else \{\n t3 *= t3;\n n3 = t3 * t3 * dot(float4(grad4\[gi3]\[0],grad4\[gi3]\[2],grad4\[gi3]\[3],grad4\[gi3]\[3]), float4(x3, y3, z3, w3));\n \}\n float t4 = 0.6 - x4*x4 - y4*y4 - z4*z4 - w4*w4;\n if(t4<0) n4 = 0.0;\n else \{\n t4 *= t4;\n n4 = t4 * t4 * dot(float4(grad4\[gi4]\[0],grad4\[gi4]\[2],grad4\[gi4]\[3],grad4\[gi4]\[3]), float4(x4, y4, z4, w4));\n \}\n return 27.0 * (n0 + n1 + n2 + n3 + n4);\n\}\n\ninline float octave_noise_4d( const float octaves, const float persistence, const float scale, const float x, const float y, const float z, const float w ) \n\{\n float total = 0;\n float frequency = scale;\n float amplitude = 1;\n float maxAmplitude = 0;\n for( int i=0; i < octaves; i++ ) \{\n total += (float)raw_noise_4d( x * frequency, y * frequency, z * frequency, w * frequency ) * amplitude;\n\n frequency *= 2;\n maxAmplitude += amplitude;\n amplitude *= persistence;\n \}\n return float(total / maxAmplitude);\n\}\n\nkernel GodRaysProjectorVolumeKernel : ImageComputationKernel\n\{\n Image src; // the input image\n Image dst; // the output image\n\n param:\n\n //projection cam world matrix\n float4x4 renderCamMatrix;\n\n //projection cam settings\n float renderCamFocal;\n float renderCamHaperture;\n float renderCamVaperture;\n\n\n //projection cam world matrix\n float4x4 projCamMatrix;\n\n //projection cam settings\n float projCamFocal;\n float projCamHaperture;\n float projCamVaperture;\n\n //distance of card from camera\n float depthMin;\n float depthMax;\n\n //number of samples\n int iterations;\n float projDistSkew;\n\n //darken at source\n bool EnableSourceDarken;\n\n //4D noise settings\n float NoiseOctaves;\n float NoisePersistence; \n float NoiseScale; \n float NoiseSeed;\n float NoiseGamma;\n float4x4 axisMatrix;\n bool EnableNoise;\n float NoiseMix;\n\n //to, from, gamma\n float4 toColour;\n float4 fromColour;\n float4 toFromGamma;\n\n\n local:\n\n float2 resolution;\n \n float4 nearPosData;\n float4 farPosData;\n float4 posData;\n\n float4 imageMult;\n float4 NoisePosData;\n float2 cardInfo;\n \n\n void define() \{\n \n \}\n\n void init() \{\n\n //defining resolution\n resolution.x = src.bounds.width();\n resolution.y = src.bounds.height(); \n \n \}\n\n void process(int2 pos) \{\n \n float NoiseOutput;\n\n //uses camera information to create virtual card\n cardInfo.x = ((((pos.x+.5f))/resolution.x-.5f)*projCamHaperture/projCamFocal);\n cardInfo.y = ((((pos.y+.5f))/resolution.y-.5f)*(resolution.y/resolution.x)*projCamHaperture/projCamFocal);\n\n //creating near virtual card\n nearPosData.x = cardInfo.x*depthMin;\n nearPosData.y = cardInfo.y*depthMin;\n nearPosData.z = -depthMin; \n\n //creating far virtual card\n farPosData.x = cardInfo.x*depthMax;\n farPosData.y = cardInfo.y*depthMax;\n farPosData.z = -depthMax; \n\n\n //looping for each iterations\n for(int i = 0; i < iterations; i++)\{\n\n //iterating from min to max deep over time\n posData = iterations == 1 ? nearPosData : nearPosData + (farPosData - nearPosData)*pow(float(i)/(iterations-1.0f),projDistSkew); \n\n //transforming card using projection cam\n posData = matrixTransform(posData, projCamMatrix);\n\n //calculating 4D noise\n if(EnableNoise == 1)\{\n NoisePosData = matrixTransform(posData, axisMatrix.invert());\n\n NoiseOutput = octave_noise_4d(NoiseOctaves, NoisePersistence, NoiseScale, NoisePosData.x, NoisePosData.y, NoisePosData.z, NoiseSeed); \n NoiseOutput = (NoiseOutput+1.0f)/2.0f;\n \}\n\n //transforming card using render cam\n posData = matrixTransform(posData, renderCamMatrix.invert());\n\n //creating screenspace UV coordinates using render cam data\n posData = matrixToScreenspace(posData, renderCamFocal, renderCamHaperture, renderCamVaperture, resolution);\n\n \n //multiplier for output image\n imageMult = 1.0f;\n\n //4DNoise\n if(EnableNoise == 1)\{\n imageMult *= 1.0f+(pow(((NoiseOutput+1.0f)/2.0f), 1.0f/NoiseGamma)-1.0f)*NoiseMix;\n \}\n\n //darken at source\n if(EnableSourceDarken == 1)\{\n imageMult *= pow((i+1.0f)/iterations,0.5f);\n \}\n\n //to-from colour\n imageMult *= pow((fromColour + (toColour - fromColour)*float(i)/(iterations-1.0f)),1.0f/toFromGamma);\n\n //iterations average\n imageMult /= iterations;\n\n //mults image with modifier \n imageMult = src()*imageMult;\n\n //assigns pixel values within image bounds\n if(posData.x <= (resolution.x) && posData.x >= 0.0f && posData.y <= (resolution.y) && posData.y >= 0.0f) \{ \n dst(posData.x, posData.y) += imageMult;\n \} \n \n\n \}\n\n \}\n\};\n" useGPUIfAvailable false rebuild "" GodRaysProjectorVolumeKernel_renderCamMatrix { {{parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix}} {{parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix}} {{parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix}} {{parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix}} } GodRaysProjectorVolumeKernel_renderCamFocal {{parent.DummyRenderCam.focal}} GodRaysProjectorVolumeKernel_renderCamHaperture {{parent.DummyRenderCam.haperture}} GodRaysProjectorVolumeKernel_renderCamVaperture {{parent.DummyRenderCam.vaperture}} GodRaysProjectorVolumeKernel_projCamMatrix { {{parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix}} {{parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix}} {{parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix}} {{parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix}} } GodRaysProjectorVolumeKernel_projCamFocal {{parent.DummyProjCam.focal}} GodRaysProjectorVolumeKernel_projCamHaperture {{parent.DummyProjCam.haperture x37 0.976}} GodRaysProjectorVolumeKernel_projCamVaperture {{parent.DummyProjCam.vaperture}} GodRaysProjectorVolumeKernel_depthMin 1 GodRaysProjectorVolumeKernel_depthMax 10 GodRaysProjectorVolumeKernel_iterations 10 GodRaysProjectorVolumeKernel_projDistSkew 1 GodRaysProjectorVolumeKernel_EnableSourceDarken true GodRaysProjectorVolumeKernel_NoiseOctaves 1 GodRaysProjectorVolumeKernel_NoisePersistence 0.5 GodRaysProjectorVolumeKernel_NoiseScale 1 GodRaysProjectorVolumeKernel_NoiseGamma 0.25 GodRaysProjectorVolumeKernel_axisMatrix { {{parent.Axis1.world_matrix} {parent.Axis1.world_matrix} {parent.Axis1.world_matrix} {parent.Axis1.world_matrix}} {{parent.Axis1.world_matrix} {parent.Axis1.world_matrix} {parent.Axis1.world_matrix} {parent.Axis1.world_matrix}} {{parent.Axis1.world_matrix} {parent.Axis1.world_matrix} {parent.Axis1.world_matrix} {parent.Axis1.world_matrix}} {{parent.Axis1.world_matrix} {parent.Axis1.world_matrix} {parent.Axis1.world_matrix} {parent.Axis1.world_matrix}} } GodRaysProjectorVolumeKernel_NoiseMix 1 GodRaysProjectorVolumeKernel_toColour 1 GodRaysProjectorVolumeKernel_fromColour 1 GodRaysProjectorVolumeKernel_toFromGamma 0.5 rebuild_finalise "" name BlinkScript1 xpos 254 ypos 220 } Multiply { channels rgba value 4 name Multiply1 xpos 254 ypos 280 disable {{1-parent.BlinkScript1.useGPUIfAvailable}} } Clamp { channels alpha minimum_enable false name Clamp1 xpos 254 ypos 306 disable {{1-clampAlpha}} addUserKnob {20 User} addUserKnob {6 clampAlpha l "clamp alpha" +STARTLINE} clampAlpha true } GodRays { channels rgba scale {{1+parallelScaleBlur}} center {{parent.Reconcile3D1.output} {parent.Reconcile3D1.output}} steps 8 name GodRays1 xpos 254 ypos 391 disable {{scale==1}} addUserKnob {20 User} addUserKnob {6 bidirectional +STARTLINE} bidirectional true addUserKnob {7 parallelScaleBlur l "parallel scale blur"} } GodRays { channels rgba scale {{1/parent.GodRays1.scale}} center {{parent.GodRays1.center} {parent.GodRays1.center}} steps 8 name GodRays2 xpos 254 ypos 417 disable {{"max(parent.GodRays1.disable, 1-GodRays1.bidirectional)" x5 1}} } Blur { channels rgba name Blur1 xpos 254 ypos 491 disable {{"size == 0"}} addUserKnob {20 User} addUserKnob {6 blurShadow l "blur shadow" +STARTLINE} } Merge2 { inputs 2 operation stencil bbox B name Merge1 xpos 254 ypos 656 disable {{1-enableShadow}} addUserKnob {20 User} addUserKnob {6 enableShadow l "enable shadow" +STARTLINE} } Dot { name Dot3 xpos 288 ypos 709 } set N602aa800 [stack 0] Dot { name Dot2 xpos -291 ypos 709 } push $N62544c00 Dot { name Dot7 xpos -410 ypos 155 } set N602aa000 [stack 0] Dot { name Dot8 xpos -548 ypos 155 } BlinkScript { recompileCount 149 ProgramGroup 1 KernelDescription "2 \"GodRaysProjectorDeepBackKernel\" iterate pixelWise b2d9280d746340d99b0c7d6e1708f2c867926bf38e3e6d63f84aa6bfe80deed0 2 \"src\" Read Point \"dst\" Write Random 12 \"renderCamMatrix\" Float 16 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== \"renderCamFocal\" Float 1 AAAAAA== \"renderCamHaperture\" Float 1 AAAAAA== \"renderCamVaperture\" Float 1 AAAAAA== \"projCamMatrix\" Float 16 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== \"projCamFocal\" Float 1 AAAAAA== \"projCamHaperture\" Float 1 AAAAAA== \"projCamVaperture\" Float 1 AAAAAA== \"depthMin\" Float 1 AAAAAA== \"depthMax\" Float 1 AAAAAA== \"iterations\" Int 1 AAAAAA== \"projDistSkew\" Float 1 AAAAAA== 12 \"renderCamMatrix\" 16 1 \"renderCamFocal\" 1 1 \"renderCamHaperture\" 1 1 \"renderCamVaperture\" 1 1 \"projCamMatrix\" 16 1 \"projCamFocal\" 1 1 \"projCamHaperture\" 1 1 \"projCamVaperture\" 1 1 \"depthMin\" 1 1 \"depthMax\" 1 1 \"iterations\" 1 1 \"projDistSkew\" 1 1 2 \"resolution\" Float 2 1 AAAAAAAAAAA= \"posData\" Float 4 1 AAAAAAAAAAAAAAAAAAAAAA==" kernelSource "inline float4 matrixTransform(float4 image, float4x4 matrix)\{\n\n float4 matrixTransformsOutput;\n\n matrixTransformsOutput.x = image.x * matrix\[0]\[0] + image.y * matrix\[0]\[1] + image.z * matrix\[0]\[2] + matrix\[0]\[3];\n matrixTransformsOutput.y = image.x * matrix\[1]\[0] + image.y * matrix\[1]\[1] + image.z * matrix\[1]\[2] + matrix\[1]\[3];\n matrixTransformsOutput.z = image.x * matrix\[2]\[0] + image.y * matrix\[2]\[1] + image.z * matrix\[2]\[2] + matrix\[2]\[3];\n matrixTransformsOutput.w = image.x * matrix\[3]\[0] + image.y * matrix\[3]\[1] + image.z * matrix\[3]\[2] + matrix\[3]\[3];\n\n\n return matrixTransformsOutput;\n\n\}\n\ninline float4 matrixToScreenspace(float4 image, float focal, float haperture, float vaperture, int2 resolution)\{\n\n image.x = 0.5f - ((image.x) * (focal/haperture))/image.z;\n image.y = 0.5f - ((image.y) * (focal/vaperture))/image.z;\n image.z = -image.z;\n\n image.x = image.x * (resolution.x) - 1.0f;\n image.y = image.y * (resolution.y) - 1.0f;\n\n\n return image;\n\n\}\n\nkernel GodRaysProjectorDeepBackKernel : ImageComputationKernel\n\{\n Image src; // the input image\n Image dst; // the output image\n\n param:\n\n //projection cam world matrix\n float4x4 renderCamMatrix;\n\n //projection cam settings\n float renderCamFocal;\n float renderCamHaperture;\n float renderCamVaperture;\n\n\n //projection cam world matrix\n float4x4 projCamMatrix;\n\n //projection cam settings\n float projCamFocal;\n float projCamHaperture;\n float projCamVaperture;\n\n //distance of card from camera\n float depthMin;\n float depthMax;\n\n //number of samples\n int iterations;\n float projDistSkew;\n\n local:\n\n float2 resolution;\n float4 posData;\n\n void define() \{\n \n \}\n\n void init() \{\n\n //defining resolution\n resolution.x = src.bounds.width();\n resolution.y = src.bounds.height(); \n \n \}\n\n void process(int2 pos) \{\n \n float Z;\n \n\n\n //looping for each iterations\n for(int i = 0; i < iterations; i++)\{\n\n //iterating from min to max deep over time\n Z = iterations == 1 ? depthMin : depthMin + (depthMax - depthMin)*pow(float(i)/(iterations-1.0f),projDistSkew); \n\n //creating virtual card\n posData.x = ((((pos.x+.5f))/resolution.x-.5f)*projCamHaperture/projCamFocal)*Z;\n posData.y = ((((pos.y+.5f))/resolution.y-.5f)*(resolution.y/resolution.x)*projCamHaperture/projCamFocal)*Z;\n posData.z = -Z; \n\n //transforming card using projection cam\n posData = matrixTransform(posData, projCamMatrix); \n\n //transforming card using render cam\n posData = matrixTransform(posData, renderCamMatrix.invert());\n\n //creating screenspace UV coordinates using render cam data\n posData = matrixToScreenspace(posData, renderCamFocal, renderCamHaperture, renderCamVaperture, resolution); \n\n //assigns depth data if it is closer than current value\n if(posData.x <= (resolution.x) && posData.x >= 0.0f && posData.y <= (resolution.y) && posData.y >= 0.0f) \{\n dst(posData.x, posData.y) = dst(posData.x, posData.y).x == 0.0f || dst(posData.x, posData.y).x < posData.z ? posData.z : dst(posData.x, posData.y).x; \n \}\n\n \}\n\n \}\n\};\n" useGPUIfAvailable {{parent.BlinkScript1.useGPUIfAvailable}} vectorize {{parent.BlinkScript1.vectorize}} rebuild "" GodRaysProjectorDeepBackKernel_renderCamMatrix { {{parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix}} {{parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix}} {{parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix}} {{parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix}} } GodRaysProjectorDeepBackKernel_renderCamFocal {{parent.DummyRenderCam.focal}} GodRaysProjectorDeepBackKernel_renderCamHaperture {{parent.DummyRenderCam.haperture}} GodRaysProjectorDeepBackKernel_renderCamVaperture {{parent.DummyRenderCam.vaperture}} GodRaysProjectorDeepBackKernel_projCamMatrix { {{parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix}} {{parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix}} {{parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix}} {{parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix}} } GodRaysProjectorDeepBackKernel_projCamFocal {{parent.DummyProjCam.focal}} GodRaysProjectorDeepBackKernel_projCamHaperture {{parent.DummyProjCam.haperture}} GodRaysProjectorDeepBackKernel_projCamVaperture {{parent.DummyProjCam.vaperture}} GodRaysProjectorDeepBackKernel_depthMin {{parent.BlinkScript1.GodRaysProjectorVolumeKernel_depthMin}} GodRaysProjectorDeepBackKernel_depthMax {{parent.BlinkScript1.GodRaysProjectorVolumeKernel_depthMax}} GodRaysProjectorDeepBackKernel_iterations {{parent.BlinkScript1.GodRaysProjectorVolumeKernel_iterations}} GodRaysProjectorDeepBackKernel_projDistSkew {{parent.BlinkScript1.GodRaysProjectorVolumeKernel_projDistSkew}} rebuild_finalise "" name BlinkScript4 label "deep back" xpos -582 ypos 246 } Dot { name Dot6 xpos -548 ypos 362 } push $N602aa000 BlinkScript { recompileCount 150 ProgramGroup 1 KernelDescription "2 \"GodRaysProjectorDeepFrontKernel\" iterate pixelWise db8732d7db620ffee3a5d75c1843aeeff690d4bc4ef2286e6d3285d82ce4d06f 2 \"src\" Read Point \"dst\" Write Random 12 \"renderCamMatrix\" Float 16 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== \"renderCamFocal\" Float 1 AAAAAA== \"renderCamHaperture\" Float 1 AAAAAA== \"renderCamVaperture\" Float 1 AAAAAA== \"projCamMatrix\" Float 16 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== \"projCamFocal\" Float 1 AAAAAA== \"projCamHaperture\" Float 1 AAAAAA== \"projCamVaperture\" Float 1 AAAAAA== \"depthMin\" Float 1 AAAAAA== \"depthMax\" Float 1 AAAAAA== \"iterations\" Int 1 AAAAAA== \"projDistSkew\" Float 1 AAAAAA== 12 \"renderCamMatrix\" 16 1 \"renderCamFocal\" 1 1 \"renderCamHaperture\" 1 1 \"renderCamVaperture\" 1 1 \"projCamMatrix\" 16 1 \"projCamFocal\" 1 1 \"projCamHaperture\" 1 1 \"projCamVaperture\" 1 1 \"depthMin\" 1 1 \"depthMax\" 1 1 \"iterations\" 1 1 \"projDistSkew\" 1 1 2 \"resolution\" Float 2 1 AAAAAAAAAAA= \"posData\" Float 4 1 AAAAAAAAAAAAAAAAAAAAAA==" kernelSource "inline float4 matrixTransform(float4 image, float4x4 matrix)\{\n\n float4 matrixTransformsOutput;\n\n matrixTransformsOutput.x = image.x * matrix\[0]\[0] + image.y * matrix\[0]\[1] + image.z * matrix\[0]\[2] + matrix\[0]\[3];\n matrixTransformsOutput.y = image.x * matrix\[1]\[0] + image.y * matrix\[1]\[1] + image.z * matrix\[1]\[2] + matrix\[1]\[3];\n matrixTransformsOutput.z = image.x * matrix\[2]\[0] + image.y * matrix\[2]\[1] + image.z * matrix\[2]\[2] + matrix\[2]\[3];\n matrixTransformsOutput.w = image.x * matrix\[3]\[0] + image.y * matrix\[3]\[1] + image.z * matrix\[3]\[2] + matrix\[3]\[3];\n\n\n return matrixTransformsOutput;\n\n\}\n\ninline float4 matrixToScreenspace(float4 image, float focal, float haperture, float vaperture, int2 resolution)\{\n\n image.x = 0.5f - ((image.x) * (focal/haperture))/image.z;\n image.y = 0.5f - ((image.y) * (focal/vaperture))/image.z;\n image.z = -image.z;\n\n image.x = image.x * (resolution.x) - 1.0f;\n image.y = image.y * (resolution.y) - 1.0f;\n\n\n return image;\n\n\}\n\nkernel GodRaysProjectorDeepFrontKernel : ImageComputationKernel\n\{\n Image src; // the input image\n Image dst; // the output image\n\n param:\n\n //projection cam world matrix\n float4x4 renderCamMatrix;\n\n //projection cam settings\n float renderCamFocal;\n float renderCamHaperture;\n float renderCamVaperture;\n\n\n //projection cam world matrix\n float4x4 projCamMatrix;\n\n //projection cam settings\n float projCamFocal;\n float projCamHaperture;\n float projCamVaperture;\n\n //distance of card from camera\n float depthMin;\n float depthMax;\n\n //number of samples\n int iterations;\n float projDistSkew;\n\n local:\n\n float2 resolution;\n float4 posData;\n\n void define() \{\n \n \}\n\n void init() \{\n\n //defining resolution\n resolution.x = src.bounds.width();\n resolution.y = src.bounds.height(); \n \n \}\n\n void process(int2 pos) \{\n \n float Z;\n \n\n\n //looping for each iterations\n for(int i = 0; i < iterations; i++)\{\n\n //iterating from min to max deep over time\n Z = iterations == 1 ? depthMin : depthMin + (depthMax - depthMin)*pow(float(i)/(iterations-1.0f),projDistSkew); \n\n //creating virtual card\n posData.x = ((((pos.x+.5f))/resolution.x-.5f)*projCamHaperture/projCamFocal)*Z;\n posData.y = ((((pos.y+.5f))/resolution.y-.5f)*(resolution.y/resolution.x)*projCamHaperture/projCamFocal)*Z;\n posData.z = -Z; \n\n //transforming card using projection cam\n posData = matrixTransform(posData, projCamMatrix); \n\n //transforming card using render cam\n posData = matrixTransform(posData, renderCamMatrix.invert());\n\n //creating screenspace UV coordinates using render cam data\n posData = matrixToScreenspace(posData, renderCamFocal, renderCamHaperture, renderCamVaperture, resolution); \n\n //assigns depth data if it is closer than current value\n if(posData.x <= (resolution.x) && posData.x >= 0.0f && posData.y <= (resolution.y) && posData.y >= 0.0f) \{\n dst(posData.x, posData.y) = dst(posData.x, posData.y).x == 0.0f || dst(posData.x, posData.y).x > posData.z ? posData.z : dst(posData.x, posData.y).x; \n \}\n\n \}\n\n \}\n\};\n" useGPUIfAvailable {{parent.BlinkScript1.useGPUIfAvailable}} vectorize {{parent.BlinkScript1.vectorize}} rebuild "" GodRaysProjectorDeepFrontKernel_renderCamMatrix { {{parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix}} {{parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix}} {{parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix}} {{parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix} {parent.DummyRenderCam.world_matrix}} } GodRaysProjectorDeepFrontKernel_renderCamFocal {{parent.DummyRenderCam.focal}} GodRaysProjectorDeepFrontKernel_renderCamHaperture {{parent.DummyRenderCam.haperture}} GodRaysProjectorDeepFrontKernel_renderCamVaperture {{parent.DummyRenderCam.vaperture}} GodRaysProjectorDeepFrontKernel_projCamMatrix { {{parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix}} {{parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix}} {{parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix}} {{parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix} {parent.DummyProjCam.world_matrix}} } GodRaysProjectorDeepFrontKernel_projCamFocal {{parent.DummyProjCam.focal}} GodRaysProjectorDeepFrontKernel_projCamHaperture {{parent.DummyProjCam.haperture}} GodRaysProjectorDeepFrontKernel_projCamVaperture {{parent.DummyProjCam.vaperture}} GodRaysProjectorDeepFrontKernel_depthMin {{parent.BlinkScript1.GodRaysProjectorVolumeKernel_depthMin}} GodRaysProjectorDeepFrontKernel_depthMax {{parent.BlinkScript1.GodRaysProjectorVolumeKernel_depthMax}} GodRaysProjectorDeepFrontKernel_iterations {{parent.BlinkScript1.GodRaysProjectorVolumeKernel_iterations}} GodRaysProjectorDeepFrontKernel_projDistSkew {{parent.BlinkScript1.GodRaysProjectorVolumeKernel_projDistSkew}} rebuild_finalise "" name BlinkScript3 label "deep front" xpos -444 ypos 248 } Expression { channel0 none channel1 none channel2 none channel3 alpha expr3 "r != 0 || g != 0" name Expression1 xpos -444 ypos 300 } Copy { inputs 2 from0 rgba.green to0 rgba.green name Copy1 xpos -444 ypos 352 } Remove { operation keep channels {rgba.red rgba.green -rgba.blue rgba.alpha} name Remove1 xpos -444 ypos 390 } FilterErode { channels rgba size -3 name FilterErode1 xpos -444 ypos 468 disable {{parent.GodRays1.disable x5 1}} } GodRays { channels {rgba.red rgba.green -rgba.blue rgba.alpha} scale {{parent.GodRays1.scale}} center {{parent.GodRays1.center} {parent.GodRays1.center}} steps 8 max true name GodRays3 xpos -444 ypos 494 disable {{scale==1}} } GodRays { channels {rgba.red rgba.green -rgba.blue rgba.alpha} scale {{1/parent.GodRays3.scale}} center {{parent.GodRays1.center} {parent.GodRays1.center}} steps 8 max true name GodRays4 xpos -444 ypos 532 disable {{parent.GodRays2.disable x5 1}} } Blur { channels rgba size {{parent.Blur1.size}} name Blur3 xpos -444 ypos 588 disable {{parent.Blur1.disable}} addUserKnob {20 User} addUserKnob {6 blurShadow l "blur shadow" +STARTLINE} } Unpremult { channels {rgba.red rgba.green -rgba.blue none} name Unpremult1 xpos -444 ypos 614 disable {{"Blur1.size == 0 "}} } DeepFromImage { premult true name DeepFromImage1 xpos -444 ypos 661 } DeepExpression { chans1 deep deep.front r deep.back g name DeepExpression1 xpos -444 ypos 687 } Dot { name Dot5 xpos -410 ypos 793 } DeepRecolor { inputs 2 targetInputAlpha true name DeepRecolor1 xpos -325 ypos 789 } DeepReformat { type "to box" box_width {{Reformat1.input0.width}} box_height {{Reformat1.input0.height}} box_fixed true scale {{1/parent.Reformat1.scale} {1/parent.Reformat1.scale}} pbb true name DeepReformat1 xpos -325 ypos 815 disable {{parent.Reformat1.disable}} } Dot { name Dot1 xpos -291 ypos 863 } push $N602aa800 Reformat { type "to box" box_width {{Reformat1.input0.width}} box_height {{Reformat1.input0.height}} box_fixed true scale {{1/parent.Reformat1.scale} {1/parent.Reformat1.scale}} filter notch name Reformat2 xpos 254 ypos 782 disable {{parent.Reformat1.disable}} } Switch { inputs 2 which {{"parent.outputMode == 1"}} name Switch1 label "deep output switch" xpos 254 ypos 853 } Switch { inputs 2 which {{"parent.outputMode == 2"}} name Switch2 label "shadow only switch" xpos 254 ypos 961 } Output { name Output1 xpos 254 ypos 1101 } Group { inputs 0 name GetGPUName label "This just grabs the GPU name" xpos 529 ypos 28 disable true addUserKnob {20 GodRaysProjectorVolumeKernel} addUserKnob {41 "Local GPU: " T BlinkScript1.gpuName} addUserKnob {41 "Use GPU if Available" T BlinkScript1.useGPUIfAvailable} } Input { inputs 0 name Input1 xpos 84 ypos 418 } BlinkScript { recompileCount 201 ProgramGroup 1 KernelDescription "2 \"BlankKernel\" iterate pixelWise 555f8bedff5787bfff38741a5cf42e9ba1f3e68c81d54c15322b81680fbf2e6e 2 \"src\" Read Point \"dst\" Write Point 0 0 0" kernelSource "\nkernel BlankKernel : ImageComputationKernel\n\{\n Image src; // the input image\n Image dst; // the output image\n void process() \{\n \n // Write the result to the output image\n dst() = src();\n \}\n\};\n" useGPUIfAvailable false rebuild "" rebuild_finalise "" name BlinkScript1 xpos 84 ypos 478 disable true } Output { name Output1 xpos 84 ypos 558 } end_group Axis2 { inputs 0 name Axis1 label "4D Noise Transform" xpos 522 ypos 189 } Input { inputs 0 name projectionCam xpos -33 ypos -40 number 2 } Camera { projection_mode {{"\[expression \[value the_cam]projection_mode(\[value the_frame])]"}} focal {{"\[expression \[value the_cam]focal(\[value the_frame])]"}} haperture {{"\[expression \[value the_cam]haperture(\[value the_frame])]"}} vaperture {{"\[expression \[value the_cam]vaperture(\[value the_frame])]"}} near {{"\[expression \[value the_cam]near(\[value the_frame])]"}} far {{"\[expression \[value the_cam]far(\[value the_frame])]"}} win_translate {{"\[expression \[value the_cam]win_translate.u(\[value the_frame])]"} {"\[expression \[value the_cam]win_translate.v(\[value the_frame])]"}} win_scale {{"\[expression \[value the_cam]win_scale.u(\[value the_frame])]"} {"\[expression \[value the_cam]win_scale.v(\[value the_frame])]"}} winroll {{"\[expression \[value the_cam]winroll(\[value the_frame])]"}} focal_point {{"\[expression \[value the_cam]focal_point(\[value the_frame])]"}} fstop {{"\[expression \[value the_cam]fstop(\[value the_frame])]"}} name DummyProjCam help "DummyCam by Adrian Pueyo\n\nCamera that apart from the matrices also grabs all the \"Projection\" values from the upstream camera that it's connected to. Turns into a default Camera if no Camera connected. Can also be used inside of groups and gizmos, as many levels deep as you want :D All using live and super fast TCL.\n\nUpdated v1.1: Now grabs the correct frame too (thanks Erwan Leroy for the idea).\n\nadrianpueyo.com, 2019-2020" onCreate "n = nuke.thisNode()\nfor k in \[\"projection_mode\",\"focal\",\"haperture\",\"vaperture\",\"near\",\"far\",\"win_translate\",\"win_scale\",\"winroll\",\"focal_point\",\"fstop\"]:\n n\[k].setFlag(0x0000000010000000)" label projCam xpos -23 ypos 3 addUserKnob {20 DummyCam l Defaults} addUserKnob {43 the_cam +INVISIBLE} the_cam "\[\n#DummyCam v1.1. Updated 5 April 2020.\nset starting_point \"this.input0\"\nset default \"this.d_\"\n\n# If cam has no inputs, return the default.\nif \{\[exists \$starting_point]\} \{\n set x \[node \$starting_point]\n\} \{ \n return \$default\n\}\n\nset finished 0\nwhile \{\$finished != 1\} \{\n\n # First look for a Cam or Input or topnode.\n while \{\[class \$x] != \"Camera2\" && \[class \$x] != \"Camera\" && \[class \$x] != \"Input\" && \$x != \[topnode \$x]\} \{\n set x \[node \$x.input0]\n \}\n\n # Then, check if node is a cam (and return), and otherwise, if it's an input, see if the parent exists and move to it.\n if \{\[class \$x]==\"Camera2\"||\[class \$x]==\"Camera\"\} \{\n set x \[append x \".\"]\n return \$x\n \} \{ \n if \{ \[class \$x]==\"Input\" \} \{ \n set inp \"\$x.parent.input\"\n set inputNum \[value \$x.number]\n set inp \[append inp \$inputNum]\n if \{ \[exists \$inp] \} \{\n set x \[node \$inp]\n \} \{ \n set finished 1\n \}\n \} \{ \n set finished 1\n \}\n \}\n\}\nreturn \$default\n]" addUserKnob {43 the_frame +INVISIBLE} the_frame "\[\nset the_camera \[string trimright \[value the_cam] .]\nif \{\[exists \$the_camera]\} \{\n return \[value \$the_camera.frame]\n\} \{ \n return \[frame]\n\}\n]" addUserKnob {4 d_projection_mode l projection M {perspective orthographic uv spherical ""}} addUserKnob {7 d_focal l "focal length" R 0 100} d_focal 50 addUserKnob {7 d_haperture l "horiz aperture" R 0 50} d_haperture 24.576 addUserKnob {7 d_vaperture l "vert aperture" R 0 50} d_vaperture 18.672 addUserKnob {7 d_near l near R 0 10} d_near 0.1 addUserKnob {7 d_far l far R 0 10000} d_far 10000 addUserKnob {30 d_win_translate l "window translate"} addUserKnob {30 d_win_scale l "window scale"} d_win_scale {1 1} addUserKnob {7 d_winroll l "window roll" R 0 45} addUserKnob {7 d_focal_point l "focal distance" R 0 10} d_focal_point 2 addUserKnob {7 d_fstop l fstop R 0 30} d_fstop 16 addUserKnob {26 version l " " t "Updated 5 April 2020" T "
DummyCam v1.1 - adrianpueyo.com, 2019-2020
"} } Dot { name Dot9 xpos 1 ypos 324 } Input { inputs 0 name renderCam xpos 63 ypos -41 number 1 } Camera { projection_mode {{"\[expression \[value the_cam]projection_mode(\[value the_frame])]"}} focal {{"\[expression \[value the_cam]focal(\[value the_frame])]"}} haperture {{"\[expression \[value the_cam]haperture(\[value the_frame])]"}} vaperture {{"\[expression \[value the_cam]vaperture(\[value the_frame])]"}} near {{"\[expression \[value the_cam]near(\[value the_frame])]"}} far {{"\[expression \[value the_cam]far(\[value the_frame])]"}} win_translate {{"\[expression \[value the_cam]win_translate.u(\[value the_frame])]"} {"\[expression \[value the_cam]win_translate.v(\[value the_frame])]"}} win_scale {{"\[expression \[value the_cam]win_scale.u(\[value the_frame])]"} {"\[expression \[value the_cam]win_scale.v(\[value the_frame])]"}} winroll {{"\[expression \[value the_cam]winroll(\[value the_frame])]"}} focal_point {{"\[expression \[value the_cam]focal_point(\[value the_frame])]"}} fstop {{"\[expression \[value the_cam]fstop(\[value the_frame])]"}} name DummyRenderCam help "DummyCam by Adrian Pueyo\n\nCamera that apart from the matrices also grabs all the \"Projection\" values from the upstream camera that it's connected to. Turns into a default Camera if no Camera connected. Can also be used inside of groups and gizmos, as many levels deep as you want :D All using live and super fast TCL.\n\nUpdated v1.1: Now grabs the correct frame too (thanks Erwan Leroy for the idea).\n\nadrianpueyo.com, 2019-2020" onCreate "n = nuke.thisNode()\nfor k in \[\"projection_mode\",\"focal\",\"haperture\",\"vaperture\",\"near\",\"far\",\"win_translate\",\"win_scale\",\"winroll\",\"focal_point\",\"fstop\"]:\n n\[k].setFlag(0x0000000010000000)" label renderCam xpos 73 ypos 4 addUserKnob {20 DummyCam l Defaults} addUserKnob {43 the_cam +INVISIBLE} the_cam "\[\n#DummyCam v1.1. Updated 5 April 2020.\nset starting_point \"this.input0\"\nset default \"this.d_\"\n\n# If cam has no inputs, return the default.\nif \{\[exists \$starting_point]\} \{\n set x \[node \$starting_point]\n\} \{ \n return \$default\n\}\n\nset finished 0\nwhile \{\$finished != 1\} \{\n\n # First look for a Cam or Input or topnode.\n while \{\[class \$x] != \"Camera2\" && \[class \$x] != \"Camera\" && \[class \$x] != \"Input\" && \$x != \[topnode \$x]\} \{\n set x \[node \$x.input0]\n \}\n\n # Then, check if node is a cam (and return), and otherwise, if it's an input, see if the parent exists and move to it.\n if \{\[class \$x]==\"Camera2\"||\[class \$x]==\"Camera\"\} \{\n set x \[append x \".\"]\n return \$x\n \} \{ \n if \{ \[class \$x]==\"Input\" \} \{ \n set inp \"\$x.parent.input\"\n set inputNum \[value \$x.number]\n set inp \[append inp \$inputNum]\n if \{ \[exists \$inp] \} \{\n set x \[node \$inp]\n \} \{ \n set finished 1\n \}\n \} \{ \n set finished 1\n \}\n \}\n\}\nreturn \$default\n]" addUserKnob {43 the_frame +INVISIBLE} the_frame "\[\nset the_camera \[string trimright \[value the_cam] .]\nif \{\[exists \$the_camera]\} \{\n return \[value \$the_camera.frame]\n\} \{ \n return \[frame]\n\}\n]" addUserKnob {4 d_projection_mode l projection M {perspective orthographic uv spherical ""}} addUserKnob {7 d_focal l "focal length" R 0 100} d_focal 50 addUserKnob {7 d_haperture l "horiz aperture" R 0 50} d_haperture 24.576 addUserKnob {7 d_vaperture l "vert aperture" R 0 50} d_vaperture 18.672 addUserKnob {7 d_near l near R 0 10} d_near 0.1 addUserKnob {7 d_far l far R 0 10000} d_far 10000 addUserKnob {30 d_win_translate l "window translate"} addUserKnob {30 d_win_scale l "window scale"} d_win_scale {1 1} addUserKnob {7 d_winroll l "window roll" R 0 45} addUserKnob {7 d_focal_point l "focal distance" R 0 10} d_focal_point 2 addUserKnob {7 d_fstop l fstop R 0 30} d_fstop 16 addUserKnob {26 version l " " t "Updated 5 April 2020" T "
DummyCam v1.1 - adrianpueyo.com, 2019-2020
"} } push $N62544c00 Reconcile3D { inputs 3 calc_output true name Reconcile3D1 label "calculates the 2D screenspace coordinate of the projection cam" xpos 63 ypos 307 disable {{parent.GodRays1.disable x1 1}} } push $N32615c00 Viewer { frame_range 1-100 name Viewer1 xpos 254 ypos 130 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_GradMagic.gizmo ================================================ Group { name GradMagic help "Creates a 4 point gradient that samples corners from the input. Ability to bake color results. Outputs Grad over BG or Grad Only.\n\nSet corners to:\n- default\n- format\n- input bbox\n- bbox from viewer\n- color Ssample box\n\n- can link or bake to exisiting\n cornerpin node, and you can use\n manually adjust points to further\n tweak the position of the ramp.\n\nChoose between output colors that are:\n- Live\n- Baked on current frame\n- Baked framerange\n\nCan adjust edge blur of gradient" tile_color 0x621d5aff gl_color 0xbffffff note_font "Verdana Bold" note_font_color 0x73e6e2ff selected true addUserKnob {20 GradMagic} addUserKnob {4 output1 l "Output:" M {"Grad Over BG " "Grad Only " "" "" "" "" "" ""}} addUserKnob {41 sampleSize l "| Sample Size" t "Sample size will be used as the area to average the colors from on each cornerpoint" -STARTLINE T Settings.sampleSize} addUserKnob {26 ""} addUserKnob {20 points l "Corner Points" n 1} addUserKnob {26 setPointsTo l " Set Points To:" t "Sets points to a small box in bottom left corner of screen" T " "} addUserKnob {22 setToDefault l Default -STARTLINE T "#gather nodes\n\nn = nuke.thisNode()\ns = nuke.toNode(\"Settings\")\n\n#gather settings points knobs\nsetRefFrame = n.knob('setRefFrame')\n\nsettl = s.knob(\"topLeft\")\nsettr = s.knob(\"topRight\")\nsetbl = s.knob(\"bottomLeft\")\nsetbr = s.knob(\"bottomRight\")\n\n#set topLeft\nsettl.clearAnimated()\nsettl.setValue(100, 0)\nsettl.setValue(400, 1)\n\n#set topRight\nsettr.clearAnimated()\nsettr.setValue(400, 0)\nsettr.setValue(400, 1)\n\n#set bottomLeft\nsetbl.clearAnimated()\nsetbl.setValue(100, 0)\nsetbl.setValue(100, 1)\n\n#set bottomRight\nsetbr.clearAnimated()\nsetbr.setValue(400, 0)\nsetbr.setValue(100, 1)\n\nsetRefFrame.execute()"} addUserKnob {22 setToFormat l Format t "Sets points to input format\nif nothing is plugged into the input, takes root.format of the script" -STARTLINE T "#gather nodes\ngif = nuke.toNode(\"getInputFormat\")\ns = nuke.toNode(\"Settings\")\nn = nuke.thisNode()\n\nsetRefFrame = n.knob('setRefFrame')\n\n#gather format values\nfx = int(gif.knob(\"box\").getValue(0))\nfy = int(gif.knob(\"box\").getValue(1))\nfr = int(gif.knob(\"box\").getValue(2))\nft = int(gif.knob(\"box\").getValue(3))\n\n#gather settings points knobs\nsettl = s.knob(\"topLeft\")\nsettr = s.knob(\"topRight\")\nsetbl = s.knob(\"bottomLeft\")\nsetbr = s.knob(\"bottomRight\")\n\n#set topLeft\nsettl.clearAnimated()\nsettl.setValue(fx, 0)\nsettl.setValue(ft, 1)\n\n#set topRight\nsettr.clearAnimated()\nsettr.setValue(fr, 0)\nsettr.setValue(ft, 1)\n\n#set bottomLeft\nsetbl.clearAnimated()\nsetbl.setValue(fx, 0)\nsetbl.setValue(fy, 1)\n\n#set bottomRight\nsetbr.clearAnimated()\nsetbr.setValue(fr, 0)\nsetbr.setValue(fy, 1)\n\nsetRefFrame.execute()"} addUserKnob {22 setToInputBbox l "Input Bbox" t "Sets points to the input bbox" T "#gather nodes\ngib = nuke.toNode(\"getInputBbox\")\ns = nuke.toNode(\"Settings\")\nn = nuke.thisNode()\n\nsetRefFrame = n.knob('setRefFrame')\n\n#gather format values\nfx = int(gib.knob(\"box\").getValue(0))\nfy = int(gib.knob(\"box\").getValue(1))\nfr = int(gib.knob(\"box\").getValue(2))\nft = int(gib.knob(\"box\").getValue(3))\n\n#gather settings points knobs\nsettl = s.knob(\"topLeft\")\nsettr = s.knob(\"topRight\")\nsetbl = s.knob(\"bottomLeft\")\nsetbr = s.knob(\"bottomRight\")\n\n#set topLeft\nsettl.clearAnimated()\nsettl.setValue(fx, 0)\nsettl.setValue(ft, 1)\n\n#set topRight\nsettr.clearAnimated()\nsettr.setValue(fr, 0)\nsettr.setValue(ft, 1)\n\n#set bottomLeft\nsetbl.clearAnimated()\nsetbl.setValue(fx, 0)\nsetbl.setValue(fy, 1)\n\n#set bottomRight\nsetbr.clearAnimated()\nsetbr.setValue(fr, 0)\nsetbr.setValue(fy, 1)\n\nsetRefFrame.execute()" +STARTLINE} addUserKnob {22 setToViewerBBox l "Viewer BBox" t "Sets points to the bbox of whatever is being viewed and is displayed in the viewer" -STARTLINE T "n = nuke.thisNode()\ns = nuke.toNode(\"Settings\")\n\nsetRefFrame = n.knob('setRefFrame')\n\nbbox = nuke.activeViewer().node().input(nuke.activeViewer().activeInput()).bbox()\nvbbx = bbox.x()\nvbby = bbox.y()\nvbbr = (bbox.x()+bbox.w())\nvbbt = (bbox.y()+bbox.h())\n\nwith n:\n s\[\"topLeft\"].clearAnimated()\n s\[\"topLeft\"].setValue(vbbx, 0)\n s\[\"topLeft\"].setValue(vbbt, 1)\n\n s\[\"topRight\"].clearAnimated()\n s\[\"topRight\"].setValue(vbbr, 0)\n s\[\"topRight\"].setValue(vbbt, 1)\n\n s\[\"bottomLeft\"].clearAnimated()\n s\[\"bottomLeft\"].setValue(vbbx, 0)\n s\[\"bottomLeft\"].setValue(vbby, 1)\n\n s\[\"bottomRight\"].clearAnimated()\n s\[\"bottomRight\"].setValue(vbbr, 0)\n s\[\"bottomRight\"].setValue(vbby, 1)\n\nsetRefFrame.execute()"} addUserKnob {22 colorSampleBox l "Color Sample Box" t "Sets points to the color sample box that the user has set" -STARTLINE T "if nuke.activeViewer().node().input(0):\n myNode = nuke.activeViewer().node().input(0)\n if not nuke.selectedNodes(): #Trying to be smart by assuming that you don't want to add a node to nothing.\n myNode.setSelected(1)\nelse:\n myNode = nuke.activeViewer().node()\n\nbboxinfo = nuke.activeViewer().node()\['colour_sample_bbox'].value() #Get the position info from the colour sample bbox\naspect = float(myNode.width()*myNode.pixelAspect())/float(myNode.height()) #Calcualte the aspect (thanks Tom van Dop for notifying and Jelmen Palsterman for the correction!)\ncornerA = \[(bboxinfo\[0]*0.5+0.5)*myNode.width(),(((bboxinfo\[1]*0.5)+(0.5/aspect))*aspect)*myNode.height()] #Get the button left corner\ncornerB = \[(bboxinfo\[2]*0.5+0.5)*myNode.width(),(((bboxinfo\[3]*0.5)+(0.5/aspect))*aspect)*myNode.height()] #Get the top right corner\narea_WH = \[cornerB\[0]-cornerA\[0],cornerB\[1]-cornerA\[1]] #Get the width and height of the bbox\narea_Mid = \[cornerA\[0]+(area_WH\[0]/2),cornerA\[1]+(area_WH\[1]/2)] #Get the center of the bbox\n\nn = nuke.thisNode()\nn\['bottomLeft'].setValue(\[cornerA\[0],cornerA\[1]])\nn\['bottomRight'].setValue(\[cornerB\[0],cornerA\[1]])\nn\['topRight'].setValue(\[cornerB\[0],cornerB\[1]])\nn\['topLeft'].setValue(\[cornerA\[0],cornerB\[1]])"} addUserKnob {26 ""} addUserKnob {22 linkCornerPin l " Link CornerPin" t "Select a corner pin or node with \"to\" points to link animation to" T "n = nuke.thisNode()\nwith nuke.root():\n try:\n s = nuke.selectedNode()\n sn = s.name()\n\n tl = n.knob(\"topLeft\")\n tr = n.knob('topRight')\n bl = n.knob(\"bottomLeft\")\n br = n.knob(\"bottomRight\")\n \n if s.knob(\"to1\") and s.knob(\"to2\") and s.knob(\"to3\") and s.knob(\"to4\"):\n to1 = s.knob(\"to1\")\n to1v = to1.getValue()\n to2 = s.knob(\"to2\")\n to2v = to2.getValue()\n to3 = s.knob(\"to3\")\n to3v = to3.getValue()\n to4 = s.knob(\"to4\")\n to4v = to4.getValue()\n \n tl.clearAnimated()\n tl.setExpression( sn + \".\" + to4.name() )\n \n tr.clearAnimated()\n tr.setExpression( sn + \".\" + to3.name() )\n \n bl.clearAnimated()\n bl.setExpression( sn + \".\" + to1.name() )\n \n br.clearAnimated()\n br.setExpression( sn + \".\" + to2.name() )\n \n else:\n nuke.message(\"Please select node with valid 'to' points\")\n\n except:\n nuke.message(\"Please select node\")" +STARTLINE} addUserKnob {22 bakeCornerPin l " Bake CornerPin" t "Select a corner pin or node with \"to\" points to bake animation from" -STARTLINE T "n = nuke.thisNode()\nwith nuke.root():\n try:\n s = nuke.selectedNode()\n \n sn = s.name()\n\n tl = n.knob(\"topLeft\")\n tr = n.knob('topRight')\n bl = n.knob(\"bottomLeft\")\n br = n.knob(\"bottomRight\")\n \n if s.knob(\"to1\") and s.knob(\"to2\") and s.knob(\"to3\") and s.knob(\"to4\"):\n to1 = s.knob(\"to1\")\n to1v = to1.getValue()\n to2 = s.knob(\"to2\")\n to2v = to2.getValue()\n to3 = s.knob(\"to3\")\n to3v = to3.getValue()\n to4 = s.knob(\"to4\")\n to4v = to4.getValue()\n \n if to1.hasExpression() or to2.hasExpression() or to3.hasExpression() or to4.hasExpression():\n \n first_frame = int(nuke.Root()\['first_frame'].getValue())\n last_frame = int(nuke.Root()\['last_frame'].getValue())\n # Grab first and last frame from root\n \n p = nuke.Panel(\"Execute on FrameRange\")\n p.addSingleLineInput('First Frame', first_frame)\n p.addSingleLineInput('Last Frame', last_frame)\n p.addSingleLineInput('Increment', 1)\n result = p.show()\n if result:\n \n # Create user input panel\n \n ff = int(p.value(\"First Frame\"))\n lf = int(p.value(\"Last Frame\"))\n i = int(p.value(\"Increment\"))\n # Define first, last, increment from user input panel\n \n tl.clearAnimated()\n tl.fromScript(to4.toScript())\n \n tr.clearAnimated()\n tr.fromScript(to3.toScript())\n \n bl.clearAnimated()\n bl.fromScript(to1.toScript())\n \n br.clearAnimated()\n br.fromScript(to2.toScript())\n \n nuke.animation( n.name() + \".\" + \"topLeft.x\", \"generate\", (str(ff), str(lf), str(i), \"y\", \"topLeft\"))\n nuke.animation( n.name() + \".\" + \"topLeft.y\", \"generate\", (str(ff), str(lf), str(i), \"y\", \"topLeft\"))\n \n nuke.animation( n.name() + \".\" + \"topRight.x\", \"generate\", (str(ff), str(lf), str(i), \"y\", \"topRight\"))\n nuke.animation( n.name() + \".\" + \"topRight.y\", \"generate\", (str(ff), str(lf), str(i), \"y\", \"topRight\"))\n \n nuke.animation( n.name() + \".\" + \"bottomLeft.x\", \"generate\", (str(ff), str(lf), str(i), \"y\", \"bottomLeft\"))\n nuke.animation( n.name() + \".\" + \"bottomLeft.y\", \"generate\", (str(ff), str(lf), str(i), \"y\", \"bottomLeft\"))\n \n nuke.animation( n.name() + \".\" + \"bottomRight.x\", \"generate\", (str(ff), str(lf), str(i), \"y\", \"bottomRight\"))\n nuke.animation( n.name() + \".\" + \"bottomRight.y\", \"generate\", (str(ff), str(lf), str(i), \"y\", \"bottomRight\"))\n else:\n pass\n \n else:\n tl.clearAnimated()\n tl.fromScript(to4.toScript())\n \n tr.clearAnimated()\n tr.fromScript(to3.toScript())\n \n bl.clearAnimated()\n bl.fromScript(to1.toScript())\n \n br.clearAnimated()\n br.fromScript(to2.toScript())\n else:\n nuke.message(\"Please select node with valid 'to' points\")\n\n except:\n nuke.message(\"Please select node\") \n \n"} addUserKnob {26 adjustPointsDesc l " " T " If using adjust points, set ref frame to align to main points."} addUserKnob {22 setRefFrame l "Set Adjust Ref Frame" t "Set the reference frame to snap the adjust points to where the main points are on the current frame. This will make it easier to adjust the points from that reference point" T "n = nuke.thisNode()\npo = nuke.toNode(\"PointsOffset\")\n\n# Gather Knobs\nrf = n.knob('refFrame')\n\nsPosTL = po.knob('startPosTL')\nfhPosTL = po.knob('frameHoldPosTL')\naPosTL = n.knob('adjustPosTL')\n\nsPosTR = po.knob('startPosTR')\nfhPosTR = po.knob('frameHoldPosTR')\naPosTR = n.knob('adjustPosTR')\n\nsPosBL = po.knob('startPosBL')\nfhPosBL = po.knob('frameHoldPosBL')\naPosBL = n.knob('adjustPosBL')\n\nsPosBR = po.knob('startPosBR')\nfhPosBR = po.knob('frameHoldPosBR')\naPosBR = n.knob('adjustPosBR')\n\n# Get Current Frame\ncurentFrame = nuke.frame()\n\n# Set frameHold frame from current frame\nrf.setValue(curentFrame)\n\n# grab start position from current frame\nstartPosTL_X = sPosTL.getValueAt( curentFrame, 0 )\nstartPosTL_Y = sPosTL.getValueAt( curentFrame, 1 )\n\nstartPosTR_X = sPosTR.getValueAt( curentFrame, 0 )\nstartPosTR_Y = sPosTR.getValueAt( curentFrame, 1 )\n\nstartPosBL_X = sPosBL.getValueAt( curentFrame, 0 )\nstartPosBL_Y = sPosBL.getValueAt( curentFrame, 1 )\n\nstartPosBR_X = sPosBR.getValueAt( curentFrame, 0 )\nstartPosBR_Y = sPosBR.getValueAt( curentFrame, 1 )\n\n# set frameHold Position\nfhPosTL.setValue(startPosTL_X, 0)\nfhPosTL.setValue(startPosTL_Y, 1)\n\nfhPosTR.setValue(startPosTR_X, 0)\nfhPosTR.setValue(startPosTR_Y, 1)\n\nfhPosBL.setValue(startPosBL_X, 0)\nfhPosBL.setValue(startPosBL_Y, 1)\n\nfhPosBR.setValue(startPosBR_X, 0)\nfhPosBR.setValue(startPosBR_Y, 1)\n\n# set adjusted Position \naPosTL.setValue(startPosTL_X, 0)\naPosTL.setValue(startPosTL_Y+10, 1)\naPosTL.clearAnimated()\n\naPosTR.setValue(startPosTR_X, 0)\naPosTR.setValue(startPosTR_Y+10, 1)\naPosTR.clearAnimated()\n\naPosBL.setValue(startPosBL_X, 0)\naPosBL.setValue(startPosBL_Y+10, 1)\naPosBL.clearAnimated()\n\naPosBR.setValue(startPosBR_X, 0)\naPosBR.setValue(startPosBR_Y+10, 1)\naPosBR.clearAnimated()\n\n\n" +STARTLINE} addUserKnob {3 refFrame l "" -STARTLINE +DISABLED} refFrame 1001 addUserKnob {26 viewerUI l " Viewer UI:" T " "} addUserKnob {22 toggleMainPoints l "Hide Main Points" t "Toggle the visiblity in viewer of main points UI" -STARTLINE T "n = nuke.thisNode()\n\ntl = n.knob(\"topLeft\")\ntr = n.knob(\"topRight\")\nbl = n.knob(\"bottomLeft\")\nbr = n.knob(\"bottomRight\")\n\ntmp = n.knob(\"toggleMainPoints\")\nts = n.knob(\"mainToggleStatus\")\ncurrState = ts.getValue()\n\nif currState == 0:\n tl.clearFlag(0x0000000000008000)\n tr.clearFlag(0x0000000000008000)\n bl.clearFlag(0x0000000000008000)\n br.clearFlag(0x0000000000008000)\n ts.setValue(1)\n tmp.setLabel(\"Hide Main Points\")\n \n\nelse:\n tl.setFlag(0x0000000000008000)\n tr.setFlag(0x0000000000008000)\n bl.setFlag(0x0000000000008000)\n br.setFlag(0x0000000000008000)\n ts.setValue(0)\n tmp.setLabel(\"Show Main Points\")"} addUserKnob {22 toggleAdjustKnobs l "Show Adjust Points" t "Toggle the visibilty of knobs and viewer UI of adjustment points" -STARTLINE T "n = nuke.thisNode()\n\natl = n.knob(\"adjustPosTL\")\natr = n.knob(\"adjustPosTR\")\nabl = n.knob(\"adjustPosBL\")\nabr = n.knob(\"adjustPosBR\")\n\ntak = n.knob(\"toggleAdjustKnobs\")\ncurrState = atl.visible()\n\nif currState == False:\n atl.setVisible(True)\n atr.setVisible(True)\n abl.setVisible(True)\n abr.setVisible(True)\n \n atl.clearFlag(0x0000000000008000)\n atr.clearFlag(0x0000000000008000)\n abl.clearFlag(0x0000000000008000)\n abr.clearFlag(0x0000000000008000)\n tak.setLabel(\"Hide Adjust Points\")\n\n\nelse:\n atl.setVisible(False)\n atr.setVisible(False)\n abl.setVisible(False)\n abr.setVisible(False)\n\n atl.setFlag(0x0000000000008000)\n atr.setFlag(0x0000000000008000)\n abl.setFlag(0x0000000000008000)\n abr.setFlag(0x0000000000008000)\n tak.setLabel(\"Show Adjust Points\")"} addUserKnob {41 topLeft T Settings.topLeft} addUserKnob {12 adjustPosTL l "adjust TL" -STARTLINE +HIDDEN} adjustPosTL {100 410} addUserKnob {41 topRight T Settings.topRight} addUserKnob {12 adjustPosTR l "adjust TR" -STARTLINE +HIDDEN} adjustPosTR {400 410} addUserKnob {41 bottomLeft T Settings.bottomLeft} addUserKnob {12 adjustPosBL l "adjust BL" -STARTLINE +HIDDEN} adjustPosBL {100 110} addUserKnob {41 bottomRight T Settings.bottomRight} addUserKnob {12 adjustPosBR l "adjust BR" -STARTLINE +HIDDEN} adjustPosBR {400 110} addUserKnob {3 mainToggleStatus +INVISIBLE} mainToggleStatus 1 addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {22 makeLive l "Make Live" t "make the points sample from input live" T "n = nuke.thisNode()\nbc = nuke.toNode(\"BakeColors\")\nl = \" Is Live\"\nk = \"status\"\nbcg = n.knob(\"bakeColors\")\n\nct1 = nuke.toNode(\"CurveToolTopLeft\")\nct2 = nuke.toNode(\"CurveToolTopRight\")\nct3 = nuke.toNode(\"CurveToolBottomLeft\")\nct4 = nuke.toNode(\"CurveToolBottomRight\")\n\ncol_tl = nuke.toNode(\"TopLeftColor\").knob(\"value\")\ncol_tr = nuke.toNode(\"TopRightColor\").knob(\"value\")\ncol_bl = nuke.toNode(\"BottomLeftColor\").knob(\"value\")\ncol_br = nuke.toNode(\"BottomRightColor\").knob(\"value\")\n\nn\[k].setValue(l)\n\nwith n:\n bc.knob(\"makeLive\").execute()\n\nn.knob(\"topLeftColor\").setEnabled(False)\nn.knob(\"topRightColor\").setEnabled(False)\nn.knob(\"bottomLeftColor\").setEnabled(False)\nn.knob(\"bottomRightColor\").setEnabled(False)\n\ncol_tl.setValue(0, 0)\ncol_tl.setValue(0, 1)\ncol_tl.setValue(0, 2)\ncol_tl.setValue(0, 3)\ncol_tl.clearAnimated()\n\ncol_tr.setValue(0, 0)\ncol_tr.setValue(0, 1)\ncol_tr.setValue(0, 2)\ncol_tr.setValue(0, 3)\ncol_tr.clearAnimated()\n\ncol_bl.setValue(0, 0)\ncol_bl.setValue(0, 1)\ncol_bl.setValue(0, 2)\ncol_bl.setValue(0, 3)\n\ncol_bl.clearAnimated()\ncol_br.setValue(0, 0)\ncol_br.setValue(0, 1)\ncol_br.setValue(0, 2)\ncol_br.setValue(0, 3)\ncol_br.clearAnimated()\n\n\nn\[\"bakedColors\"].setValue(False)\n\nct1\[\"intensitydata\"].clearAnimated()\nct1\[\"intensitydata\"].setValue(0, 0)\nct1\[\"intensitydata\"].setValue(0, 1)\nct1\[\"intensitydata\"].setValue(0, 2)\nct1\[\"intensitydata\"].setValue(0, 3)\n\nct2\[\"intensitydata\"].clearAnimated()\nct2\[\"intensitydata\"].setValue(0, 0)\nct2\[\"intensitydata\"].setValue(0, 1)\nct2\[\"intensitydata\"].setValue(0, 2)\nct2\[\"intensitydata\"].setValue(0, 3)\n\nct3\[\"intensitydata\"].clearAnimated()\nct3\[\"intensitydata\"].setValue(0, 0)\nct3\[\"intensitydata\"].setValue(0, 1)\nct3\[\"intensitydata\"].setValue(0, 2)\nct3\[\"intensitydata\"].setValue(0, 3)\n\nct4\[\"intensitydata\"].clearAnimated()\nct4\[\"intensitydata\"].setValue(0, 0)\nct4\[\"intensitydata\"].setValue(0, 1)\nct4\[\"intensitydata\"].setValue(0, 2)\nct4\[\"intensitydata\"].setValue(0, 3)\n" +STARTLINE} addUserKnob {26 status l " Status: " -STARTLINE T " Is Live"} addUserKnob {22 bakeCurrentFrame l " Bake Current Frame" t "bake a single color for each corner point on this frame" T "n = nuke.thisNode()\nf = nuke.frame()\n\nbcg = n.knob(\"bakeColors\")\n\ncol_tl = nuke.toNode(\"TopLeftColor\")\ncol_tr = nuke.toNode(\"TopRightColor\")\ncol_bl = nuke.toNode(\"BottomLeftColor\")\ncol_br = nuke.toNode(\"BottomRightColor\")\n\nptl = nuke.toNode(\"PickerTL\")\nptr = nuke.toNode(\"PickerTR\")\npbl = nuke.toNode(\"PickerBL\")\npbr = nuke.toNode(\"PickerBR\")\n\nswtl = nuke.toNode(\"LiveSwitchTopLeft\")\nswtr = nuke.toNode(\"LiveSwitchTopRight\")\nswbl = nuke.toNode(\"LiveSwitchBottomLeft\")\nswbr = nuke.toNode(\"LiveSwitchBottomRight\")\n\nk = \"status\"\nl = \" Is Baked on Frame:\" + \" \" + str(f)\n\nwith n:\n swtl.knob(\"which\").setValue(0)\n swtr.knob(\"which\").setValue(0)\n swbl.knob(\"which\").setValue(0)\n swbr.knob(\"which\").setValue(0)\n\n col_tl\[\"value\"].clearAnimated()\n col_tr\[\"value\"].clearAnimated()\n col_bl\[\"value\"].clearAnimated()\n col_br\[\"value\"].clearAnimated()\n\n ptl.knob(\"generateColors\").execute()\n ptr.knob(\"generateColors\").execute()\n pbl.knob(\"generateColors\").execute()\n pbr.knob(\"generateColors\").execute()\n\n swtl.knob(\"which\").setValue(1)\n swtr.knob(\"which\").setValue(1)\n swbl.knob(\"which\").setValue(1)\n swbr.knob(\"which\").setValue(1)\n\nn\[k].setValue(l)\n\nn\[\"topLeftColor\"].setEnabled(True)\nn\[\"topRightColor\"].setEnabled(True)\nn\[\"bottomLeftColor\"].setEnabled(True)\nn\[\"bottomRightColor\"].setEnabled(True)\n\nn\[\"bakedColors\"].setValue(True)" +STARTLINE} addUserKnob {22 bakeFrameRange l "Bake FrameRange" t "bake a framerange for the cornerpoints" -STARTLINE T "import time\nimport threading\n\nn = nuke.thisNode()\n#Define this node\n\nct1 = nuke.toNode(\"CurveToolTopLeft\")\nct2 = nuke.toNode(\"CurveToolTopRight\")\nct3 = nuke.toNode(\"CurveToolBottomLeft\")\nct4 = nuke.toNode(\"CurveToolBottomRight\")\nctL = \[ct1,ct2,ct3,ct4]\n# Define curveTool nodes\n\nbcg = n.knob(\"bakeColors\")\n\ncol_tl = nuke.toNode(\"TopLeftColor\")\ncol_tr = nuke.toNode(\"TopRightColor\")\ncol_bl = nuke.toNode(\"BottomLeftColor\")\ncol_br = nuke.toNode(\"BottomRightColor\")\n# Define color constant nodes\n\nfirst_frame = int(nuke.Root()\['first_frame'].getValue())\nlast_frame = int(nuke.Root()\['last_frame'].getValue())\n# Grab first and last frame from root\n\np = nuke.Panel(\"Execute on FrameRange\")\np.addSingleLineInput('First Frame', first_frame)\np.addSingleLineInput('Last Frame', last_frame)\np.addSingleLineInput('Increment', 1)\nif p.show():\n \n # Create user input panel\n \n ff = int(p.value(\"First Frame\"))\n lf = int(p.value(\"Last Frame\"))\n i = int(p.value(\"Increment\"))\n # Define first, last, increment from user input panel\n \n k = \"status\"\n l = \" Is Baked on Frames:\" + \" \" + str(ff) + \"-\" + str(lf)\n # Change status of node\n \n with n:\n \n ct1\[\"intensitydata\"].clearAnimated()\n ct2\[\"intensitydata\"].clearAnimated()\n ct3\[\"intensitydata\"].clearAnimated()\n ct4\[\"intensitydata\"].clearAnimated()\n # Clear any intensitydata from all CurveTool nodes\n \n def executeCT(first,last,inc):\n runMe = True\n while runMe == True:\n nuke.execute(ct1,first,last,inc) \n nuke.execute(ct2,first,last,inc)\n nuke.execute(ct3,first,last,inc)\n nuke.execute(ct4,first,last,inc)\n stop_event.set()\n runMe = False\n #print('CurveTools done')\n break\n # Define CurveTool execution function\n \n \n global stop_event \n stop_event = threading.Event()\n threading.Thread(target=executeCT, kwargs=dict(first=ff,last=lf,inc=i) ).start() \n while not stop_event.is_set():\n time.sleep(0.1)\n # run CurveTools with threading\n \n swtl = nuke.toNode(\"LiveSwitchTopLeft\")\n swtr = nuke.toNode(\"LiveSwitchTopRight\")\n swbl = nuke.toNode(\"LiveSwitchBottomLeft\")\n swbr = nuke.toNode(\"LiveSwitchBottomRight\")\n # Define Switchs\n \n swtl.knob(\"which\").setValue(1)\n swtr.knob(\"which\").setValue(1)\n swbl.knob(\"which\").setValue(1)\n swbr.knob(\"which\").setValue(1)\n # Switch output type to animated constants\n \n col_tl\[\"value\"].copyAnimations(ct1\[\"intensitydata\"].animations())\n col_tr\[\"value\"].copyAnimations(ct2\[\"intensitydata\"].animations())\n col_bl\[\"value\"].copyAnimations(ct3\[\"intensitydata\"].animations())\n col_br\[\"value\"].copyAnimations(ct4\[\"intensitydata\"].animations())\n # copy curveTool intensity values over to the constant colors\n \n n\[k].setValue(l)\n # Change Status of Node\n \n n\[\"topLeftColor\"].setEnabled(True)\n n\[\"topRightColor\"].setEnabled(True)\n n\[\"bottomLeftColor\"].setEnabled(True)\n n\[\"bottomRightColor\"].setEnabled(True)\n # Unlock Color knobs from property bin\n \n n\[\"bakedColors\"].setValue(True)"} addUserKnob {20 bakedColors l "Baked Colors:" n 1} bakedColors 0 addUserKnob {41 topLeftColor l "Top Left Color" T TopLeftColor.value} addUserKnob {41 topRightColor l "Top Right Color" T TopRightColor.value} addUserKnob {41 bottomLeftColor l "Bottom Left Color" T BottomLeftColor.value} addUserKnob {41 bottomRightColor l "Bottom Right Color" T BottomRightColor.value} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {41 size l "Edge Blur Size" T Blur1.size} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask -STARTLINE T Merge3.maskChannelMask} addUserKnob {41 inject -STARTLINE T Merge3.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge3.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge3.fringe} addUserKnob {7 mix} mix 1 addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Name: T GradMagic} addUserKnob {26 ver l Version: T v05} } NoOp { inputs 0 name BakeColors xpos -388 ypos 8 addUserKnob {20 User} addUserKnob {22 bakeCurrentFrame l "Bake Current Frame" T "#Running Curvetool on current frame and baking color\n\n#grab current frame\nf = int(nuke.frame())\n\n#execute on top left point color\n\ncttl = nuke.toNode(\"CurveToolTopLeft\")\ncol_tl = nuke.toNode(\"TopLeftColor\")\nswtl = nuke.toNode(\"LiveSwitchTopLeft\")\n\nnuke.execute(cttl, f, f)\ncol_tl\[\"value\"].copyAnimations(cttl\[\"intensitydata\"].animations())\ncol_tl\[\"value\"].clearAnimated()\nswtl\[\"which\"].setValue(1)\n\n#execute on top right point color\n\ncttr = nuke.toNode(\"CurveToolTopRight\")\ncol_tr = nuke.toNode(\"TopRightColor\")\nswtr = nuke.toNode(\"LiveSwitchTopRight\")\n\nnuke.execute(cttr, f, f)\ncol_tr\[\"value\"].copyAnimations(cttr\[\"intensitydata\"].animations())\ncol_tr\[\"value\"].clearAnimated()\nswtr\[\"which\"].setValue(1)\n\n#execute on bottom left point color\n\nctbl = nuke.toNode(\"CurveToolBottomLeft\")\ncol_bl = nuke.toNode(\"BottomLeftColor\")\nswbl = nuke.toNode(\"LiveSwitchBottomLeft\")\n\nnuke.execute(ctbl, f, f)\ncol_bl\[\"value\"].copyAnimations(ctbl\[\"intensitydata\"].animations())\ncol_bl\[\"value\"].clearAnimated()\nswbl\[\"which\"].setValue(1)\n\n#execute on bottom right point color\n\nctbr = nuke.toNode(\"CurveToolBottomRight\")\ncol_br = nuke.toNode(\"BottomRightColor\")\nswbr = nuke.toNode(\"LiveSwitchBottomRight\")\n\nnuke.execute(ctbr, f, f)\ncol_br\[\"value\"].copyAnimations(ctbr\[\"intensitydata\"].animations())\ncol_br\[\"value\"].clearAnimated()\nswbr\[\"which\"].setValue(1)" +STARTLINE} addUserKnob {22 bakeCurrentFrame02 l "Quick Bake Current Frame" T "tls = nuke.toNode(\"BlurTopLeft\")\ntlc = nuke.toNode(\"TopLeftColor\")\n\ntlRed = nuke.sample(tls, \"red\", 1, 1, 1, 1)\ntlGreen = nuke.sample(tls, \"green\", 1, 1, 1, 1)\ntlBlue = nuke.sample(tls, \"blue\", 1, 1, 1, 1)\ntlcolor = \[tlRed,tlGreen,tlBlue,0]\n\n#tlc\[\"value\"].setValue(tlcolor)\n\n" +STARTLINE} addUserKnob {22 test T "ptl = nuke.toNode(\"PickerTL\")\nktl = ptl.knob(\"GenerateColors\")\ncol_tl = nuke.toNode(\"TopLeftColor\")\n\nktl.execute()\ncolors = ptl.knob(\"TLColors\")\ncol_tl\[\"value\"].setValue(colors)" +STARTLINE} addUserKnob {22 makeLive l "Make Live" T "swtl = nuke.toNode(\"LiveSwitchTopLeft\")\nswtr = nuke.toNode(\"LiveSwitchTopRight\")\nswbl = nuke.toNode(\"LiveSwitchBottomLeft\")\nswbr = nuke.toNode(\"LiveSwitchBottomRight\")\n\nswtl\[\"which\"].setValue(0)\nswtr\[\"which\"].setValue(0)\nswbl\[\"which\"].setValue(0)\nswbr\[\"which\"].setValue(0)" +STARTLINE} } NoOp { inputs 0 name SetPoints xpos -282 ypos -54 addUserKnob {20 User} addUserKnob {22 setToFormat l "Set To Format" T "#gather nodes\ngif = nuke.toNode(\"getInputFormat\")\ns = nuke.toNode(\"Settings\")\nn = nuke.thisNode()\n\n#gather format values\nfx = int(gif.knob(\"box\").getValue(0))\nfy = int(gif.knob(\"box\").getValue(1))\nfr = int(gif.knob(\"box\").getValue(2))\nft = int(gif.knob(\"box\").getValue(3))\n\n#gather settings points knobs\nsettl = s.knob(\"topLeft\")\nsettr = s.knob(\"topRight\")\nsetbl = s.knob(\"bottomLeft\")\nsetbr = s.knob(\"bottomRight\")\n\natl = n.knob(\"atl\")\natr = n.knob(\"atr\")\nabl = n.knob(\"abl\")\nabr = n.knob(\"abr\")\n\n#set topLeft\nsettl.clearAnimated()\nsettl.setValue(fx, 0)\nsettl.setValue(ft, 1)\n\natl.clearAnimated()\natl.setValue(0,0)\natl.setValue(0,1)\n\n#set topRight\nsettr.clearAnimated()\nsettr.setValue(fr, 0)\nsettr.setValue(ft, 1)\n\natr.clearAnimated()\natr.setValue(0,0)\natr.setValue(0,1)\n\n#set bottomLeft\nsetbl.clearAnimated()\nsetbl.setValue(fx, 0)\nsetbl.setValue(fy, 1)\n\nabl.clearAnimated()\nabl.setValue(0,0)\nabl.setValue(0,1)\n\n#set bottomRight\nsetbr.clearAnimated()\nsetbr.setValue(fr, 0)\nsetbr.setValue(fy, 1)\n\nabr.clearAnimated()\nabr.setValue(0,0)\nabr.setValue(0,1)" +STARTLINE} addUserKnob {22 setToInputBbox l "Set To Input BBox" -STARTLINE T "#gather nodes\ngib = nuke.toNode(\"getInputBbox\")\ns = nuke.toNode(\"Settings\")\nn = nuke.thisNode()\n\n#gather format values\nfx = int(gib.knob(\"box\").getValue(0))\nfy = int(gib.knob(\"box\").getValue(1))\nfr = int(gib.knob(\"box\").getValue(2))\nft = int(gib.knob(\"box\").getValue(3))\n\n#gather settings points knobs\nsettl = s.knob(\"topLeft\")\nsettr = s.knob(\"topRight\")\nsetbl = s.knob(\"bottomLeft\")\nsetbr = s.knob(\"bottomRight\")\n\natl = n.knob(\"atl\")\natr = n.knob(\"atr\")\nabl = n.knob(\"abl\")\nabr = n.knob(\"abr\")\n\n#set topLeft\nsettl.clearAnimated()\nsettl.setValue(fx, 0)\nsettl.setValue(ft, 1)\n\natl.clearAnimated()\natl.setValue(0,0)\natl.setValue(0,1)\n\n#set topRight\nsettr.clearAnimated()\nsettr.setValue(fr, 0)\nsettr.setValue(ft, 1)\n\natr.clearAnimated()\natr.setValue(0,0)\natr.setValue(0,1)\n\n#set bottomLeft\nsetbl.clearAnimated()\nsetbl.setValue(fx, 0)\nsetbl.setValue(fy, 1)\n\nabl.clearAnimated()\nabl.setValue(0,0)\nabl.setValue(0,1)\n\n#set bottomRight\nsetbr.clearAnimated()\nsetbr.setValue(fr, 0)\nsetbr.setValue(fy, 1)\n\nabr.clearAnimated()\nabr.setValue(0,0)\nabr.setValue(0,1)"} addUserKnob {22 setPointsToDefault l "Set To Default" T "#gather nodes\n\nn = nuke.thisNode()\ns = nuke.toNode(\"Settings\")\n\n#gather settings points knobs\natl = n.knob(\"atl\")\natr = n.knob(\"atr\")\nabl = n.knob(\"abl\")\nabr = n.knob(\"abr\")\n\nsettl = s.knob(\"topLeft\")\nsettr = s.knob(\"topRight\")\nsetbl = s.knob(\"bottomLeft\")\nsetbr = s.knob(\"bottomRight\")\n\natl.clearAnimated()\natr.clearAnimated()\nabl.clearAnimated()\nabr.clearAnimated()" +STARTLINE} } Input { inputs 0 name Inputmask xpos 174 ypos 1371 number 1 } Invert { name Invert1 xpos 174 ypos 1464 } set N116e68b0 [stack 0] push $N116e68b0 push 0 Crop { inputs 0 box {{parent.getInputFormat.box} {parent.getInputFormat.box} {parent.getInputFormat.box} {parent.getInputFormat.box}} reformat true crop false name CropRestoreFormatBottomRight2 xpos 1175 ypos 493 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } AddChannels { channels rgba name AddChannels4 xpos 1175 ypos 517 } Add { channels rgb value {0 0 0 0} name BottomRightColor xpos 1175 ypos 541 } Input { inputs 0 name Input xpos 0 ypos -90 } AddChannels { channels rgba name AddChannels5 xpos 0 ypos -44 disable {{"\[exists parent.input0]"}} } Reformat { name Reformat1 xpos 0 ypos -20 disable {{"\[exists parent.input0]"}} } Dot { name Dot7 note_font_size 31 xpos 34 ypos 122 } set N12be8f20 [stack 0] Dot { name Dot8 note_font_size 31 xpos 375 ypos 122 } set N13d90510 [stack 0] Dot { name Dot3 note_font_size 31 xpos 760 ypos 122 } set N13d6f700 [stack 0] Dot { name Dot4 note_font_size 31 xpos 1122 ypos 122 } Dot { name Dot2 label "Bottom Right" note_font_size 31 xpos 1122 ypos 245 } Crop { box {{PointsOffset.finalPosBR.x-(parent.Settings.sampleSize/2)} {PointsOffset.finalPosBR.y-(parent.Settings.sampleSize/2)} {PointsOffset.finalPosBR.x+(parent.Settings.sampleSize/2)} {PointsOffset.finalPosBR.y+(parent.Settings.sampleSize/2)}} reformat true intersect true crop false name sampleRegionBottomRight xpos 1088 ypos 299 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Blur { channels rgb size {{parent.Settings.sampleSize*10}} name BlurBottomRight label "\[value size]" xpos 1088 ypos 323 } Dot { name Dot14 note_font_size 31 xpos 1122 ypos 396 } set N13c54f20 [stack 0] NoOp { name PickerBR xpos 1020 ypos 446 addUserKnob {20 User} addUserKnob {7 searcharea l INVISIBLE +INVISIBLE R 0 30} searcharea {{parent.Settings.sampleSize}} addUserKnob {22 generateColors l GenerateColors T "area = 1\nBRs = nuke.thisNode()\nBRc = nuke.toNode(\"BottomRightColor\")\nswbr = nuke.toNode(\"LiveSwitchBottomRight\")\nswbr\[\"which\"].setValue(0)\n\nBR = BRs.knob(\"BR\").getValue()\nBRx = BR\[0]\nBRy = BR\[1]\nBRred = nuke.sample(BRs, \"red\" , BRx, BRy, area, area)\nBRgrn = nuke.sample(BRs, \"green\" , BRx, BRy, area, area)\nBRblu = nuke.sample(BRs, \"blue\" , BRx, BRy, area, area)\nBRcolor = \[BRred,BRgrn,BRblu,0]\n\nBRs\[\"brColor\"].setValue(BRcolor)\nBRc\[\"value\"].setValue(BRcolor)\nswbr\[\"which\"].setValue(1)" +STARTLINE} addUserKnob {12 BR} BR {{searcharea/2} {searcharea/2}} addUserKnob {19 brColor l BRColor} brColor {0.0574003458 0.0481092073 0.04007726908 0} addUserKnob {6 brColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Crop { box {{parent.getInputFormat.box} {parent.getInputFormat.box} {parent.getInputFormat.box} {parent.getInputFormat.box}} reformat true crop false name CropRestoreFormatBottomRight1 xpos 1020 ypos 470 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Switch { inputs 2 name LiveSwitchBottomRight xpos 1088 ypos 580 } Expression { expr3 x/width name WidthRamp2 xpos 1088 ypos 624 } Premult { name Premult2 xpos 1088 ypos 648 } Crop { inputs 0 box {{parent.getInputFormat.box} {parent.getInputFormat.box} {parent.getInputFormat.box} {parent.getInputFormat.box}} reformat true crop false name CropRestoreFormatBottomLeft2 xpos 804 ypos 498 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } AddChannels { channels rgba name AddChannels3 xpos 804 ypos 522 } Add { channels rgb value {0 0 0 0} name BottomLeftColor xpos 804 ypos 546 } push $N13d6f700 Dot { name Dot1 label "Bottom Left" note_font_size 31 xpos 760 ypos 243 } Crop { box {{PointsOffset.finalPosBL.x-(parent.Settings.sampleSize/2)} {PointsOffset.finalPosBL.y-(parent.Settings.sampleSize/2)} {PointsOffset.finalPosBL.x+(parent.Settings.sampleSize/2)} {PointsOffset.finalPosBL.y+(parent.Settings.sampleSize/2)}} reformat true intersect true crop false name sampleRegionBottomLeft xpos 726 ypos 298 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Blur { channels rgb size {{parent.Settings.sampleSize*10}} name BlurBottomLeft label "\[value size]" xpos 726 ypos 322 } Dot { name Dot13 note_font_size 31 xpos 760 ypos 397 } set N13d6d350 [stack 0] NoOp { name PickerBL xpos 664 ypos 449 addUserKnob {20 User} addUserKnob {7 searcharea l INVISIBLE +INVISIBLE R 0 30} searcharea {{parent.Settings.sampleSize}} addUserKnob {22 generateColors l GenerateColors T "area = 1\nBLs = nuke.thisNode()\nBLc = nuke.toNode(\"BottomLeftColor\")\nswbl = nuke.toNode(\"LiveSwitchBottomLeft\")\nswbl\[\"which\"].setValue(0)\n\nBL = BLs.knob(\"BL\").getValue()\nBLx = BL\[0]\nBLy = BL\[1]\nBLred = nuke.sample(BLs, \"red\" , BLx, BLy, area, area)\nBLgrn = nuke.sample(BLs, \"green\" , BLx, BLy, area, area)\nBLblu = nuke.sample(BLs, \"blue\" , BLx, BLy, area, area)\nBLcolor = \[BLred,BLgrn,BLblu,0]\n\nBLs\[\"blColor\"].setValue(BLcolor)\nBLc\[\"value\"].setValue(BLcolor)\nswbl\[\"which\"].setValue(1)" +STARTLINE} addUserKnob {12 BL} BL {{searcharea/2} {searcharea/2}} addUserKnob {19 blColor l BLColor} blColor {0.03392057866 0.02863720059 0.02191788703 0} addUserKnob {6 blColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Crop { box {{parent.getInputFormat.box} {parent.getInputFormat.box} {parent.getInputFormat.box} {parent.getInputFormat.box}} reformat true crop false name CropRestoreFormatBottomLeft1 xpos 664 ypos 473 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Switch { inputs 2 name LiveSwitchBottomLeft xpos 733 ypos 601 } Merge2 { inputs 2 name MergeCombineBottomLeftBottomRight xpos 733 ypos 648 } Expression { expr3 1-y/height name HeightRamp xpos 733 ypos 688 } Premult { name Premult3 xpos 733 ypos 712 } Crop { inputs 0 box {{parent.getInputFormat.box} {parent.getInputFormat.box} {parent.getInputFormat.box} {parent.getInputFormat.box}} reformat true crop false name CropRestoreFormatTopRight2 xpos 428 ypos 483 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } AddChannels { channels rgba name AddChannels2 xpos 428 ypos 507 } Add { channels rgb value {0 0 0 0} name TopRightColor xpos 428 ypos 531 } push $N13d90510 Dot { name Dot6 label "Top Right" note_font_size 31 xpos 375 ypos 245 } Crop { box {{PointsOffset.finalPosTR.x-(parent.Settings.sampleSize/2)} {PointsOffset.finalPosTR.y-(parent.Settings.sampleSize/2)} {PointsOffset.finalPosTR.x+(parent.Settings.sampleSize/2)} {PointsOffset.finalPosTR.y+(parent.Settings.sampleSize/2)}} reformat true intersect true crop false name sampleRegionTopRight xpos 341 ypos 297 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Blur { channels rgb size {{parent.Settings.sampleSize*10}} name BlurTopRight label "\[value size]" xpos 341 ypos 321 } Dot { name Dot12 note_font_size 31 xpos 375 ypos 397 } set N2e301de0 [stack 0] NoOp { name PickerTR xpos 283 ypos 468 addUserKnob {20 User} addUserKnob {7 searcharea l INVISIBLE +INVISIBLE R 0 30} searcharea {{parent.Settings.sampleSize}} addUserKnob {22 generateColors l GenerateColors T "area = 1\ntrs = nuke.thisNode()\ntrc = nuke.toNode(\"TopRightColor\")\nswtr = nuke.toNode(\"LiveSwitchTopRight\")\nswtr\[\"which\"].setValue(0)\n\nTR = trs.knob(\"TR\").getValue()\nTRx = TR\[0]\nTRy = TR\[1]\nTRred = nuke.sample(trs, \"red\" , TRx, TRy, area, area)\nTRgrn = nuke.sample(trs, \"green\" , TRx, TRy, area, area)\nTRblu = nuke.sample(trs, \"blue\" , TRx, TRy, area, area)\nTRcolor = \[TRred,TRgrn,TRblu,0]\n\ntrs\[\"trColor\"].setValue(TRcolor)\ntrc\[\"value\"].setValue(TRcolor)\nswtr\[\"which\"].setValue(1)" +STARTLINE} addUserKnob {12 TR} TR {{searcharea/2} {searcharea/2}} addUserKnob {19 trColor l TRColor} trColor {0.03820500523 0.03160730004 0.02090981975 0} addUserKnob {6 trColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Crop { box {{parent.getInputFormat.box} {parent.getInputFormat.box} {parent.getInputFormat.box} {parent.getInputFormat.box}} reformat true crop false name CropRestoreFormatTopRight1 xpos 283 ypos 492 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Switch { inputs 2 name LiveSwitchTopRight xpos 338 ypos 587 } Expression { expr3 x/width name WidthRamp1 xpos 338 ypos 633 } Premult { name Premult1 xpos 338 ypos 657 } Crop { inputs 0 box {{parent.getInputFormat.box} {parent.getInputFormat.box} {parent.getInputFormat.box} {parent.getInputFormat.box}} reformat true crop false name CropRestoreFormatTopLeft2 xpos 79 ypos 476 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } AddChannels { channels rgba name AddChannels1 xpos 79 ypos 500 } Add { channels rgb value {0 0 0 0} name TopLeftColor xpos 79 ypos 524 } push $N12be8f20 Dot { name Dot5 label "Top Left" note_font_size 31 xpos 34 ypos 243 } Crop { box {{PointsOffset.finalPosTL.x-(parent.Settings.sampleSize/2)} {PointsOffset.finalPosTL.y-(parent.Settings.sampleSize/2)} {PointsOffset.finalPosTL.x+(parent.Settings.sampleSize/2)} {PointsOffset.finalPosTL.y+(parent.Settings.sampleSize/2)}} reformat true crop false name sampleRegionTopLeft xpos 0 ypos 288 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Blur { channels rgb size {{parent.Settings.sampleSize*10}} name BlurTopLeft label "\[value size]" xpos 0 ypos 312 } Dot { name Dot10 note_font_size 31 xpos 34 ypos 396 } set N13d49000 [stack 0] NoOp { name PickerTL xpos -73 ypos 467 addUserKnob {20 User} addUserKnob {7 searcharea l INVISIBLE +INVISIBLE R 0 30} searcharea {{parent.Settings.sampleSize}} addUserKnob {22 generateColors l GenerateColors T "area = 1\ntls = nuke.thisNode()\ntlc = nuke.toNode(\"TopLeftColor\")\nswtl = nuke.toNode(\"LiveSwitchTopLeft\")\nswtl\[\"which\"].setValue(0)\n\nTL = tls.knob(\"TL\").getValue()\nTLx = TL\[0]\nTLy = TL\[1]\nTLred = nuke.sample(tls, \"red\" , TLx, TLy, area, area)\nTLgrn = nuke.sample(tls, \"green\" , TLx, TLy, area, area)\nTLblu = nuke.sample(tls, \"blue\" , TLx, TLy, area, area)\nTLcolor = \[TLred,TLgrn,TLblu,0]\n\ntls\[\"tlColor\"].setValue(TLcolor)\ntlc\[\"value\"].setValue(TLcolor)\nswtl\[\"which\"].setValue(1)" +STARTLINE} addUserKnob {12 TL} TL {{searcharea/2} {searcharea/2}} addUserKnob {19 tlColor l TLColor} tlColor {0.04360837862 0.03884135559 0.03016782366 0} addUserKnob {6 tlColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Crop { box {{parent.getInputFormat.box} {parent.getInputFormat.box} {parent.getInputFormat.box} {parent.getInputFormat.box}} reformat true crop false name CropRestoreFormatTopLeft1 xpos -73 ypos 491 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Switch { inputs 2 name LiveSwitchTopLeft xpos -5 ypos 591 } Merge2 { inputs 2 name MergeCombineTopLeftTopRight xpos -5 ypos 657 } Merge2 { inputs 2 name Merge2 xpos -5 ypos 712 } Shuffle { alpha white name Shuffle1 label "\[value in]" xpos -5 ypos 1065 } CornerPin2D { to1 {{parent.PointsOffset.finalPosBL} {parent.PointsOffset.finalPosBL}} to2 {{parent.PointsOffset.finalPosBR} {parent.PointsOffset.finalPosBR}} to3 {{parent.PointsOffset.finalPosTR} {parent.PointsOffset.finalPosTR}} to4 {{parent.PointsOffset.finalPosTL} {parent.PointsOffset.finalPosTL}} invert false from1 {0 0} from2 {{parent.getInputFormat.box.r} 0} from3 {{parent.getInputFormat.box.r} {parent.getInputFormat.box.t}} from4 {0 {parent.getInputFormat.box.t}} name CornerPin xpos -5 ypos 1111 addUserKnob {20 User} addUserKnob {22 "set reference frame" -STARTLINE T cornerPinZero()} addUserKnob {22 "set reference frame_1" l "set reference frame" -STARTLINE T cornerPinZero()} } Blur { channels rgba name Blur1 label "\[value size]" xpos -5 ypos 1195 } Multiply { channels rgba value {{parent.mix}} name Multiply1 xpos -5 ypos 1364 } Merge2 { inputs 2+1 operation copy bbox intersection name Merge3 xpos -5 ypos 1468 disable {{"!\[exists parent.input1]"}} } set N2e0038f0 [stack 0] Merge2 { inputs 2 operation mask bbox intersection name Merge4 xpos 174 ypos 1519 } push $N2e0038f0 CopyBBox { inputs 2 name CopyBBox1 xpos -5 ypos 1519 disable {{"!\[exists parent.input1]"}} } Dot { name Dot11 note_font_size 31 xpos 29 ypos 1641 } set N2e1211c0 [stack 0] Dot { name Dot15 note_font_size 31 xpos 29 ypos 1730 } push $N2e1211c0 push $N12be8f20 Dot { name Dot9 note_font_size 31 xpos -561 ypos 122 } Merge2 { inputs 2 name Merge1 xpos -595 ypos 1638 } Switch { inputs 2 which {{parent.output1}} name SwitchOutput xpos -595 ypos 1727 } Output { name Output1 xpos -595 ypos 2064 } push $N13d6d350 CurveTool { avgframes 1 ROI {0 0 1 1} autocropdata {512 389 1536 1167} intensitydata {0 0 0 0} name CurveToolBottomLeft xpos 806 ypos 441 } push $N13c54f20 CurveTool { avgframes 1 ROI {0 0 1 1} autocropdata {512 389 1536 1167} intensitydata {0 0 0 0} name CurveToolBottomRight xpos 1175 ypos 441 } push $N13d49000 CurveTool { avgframes 1 ROI {0 0 1 1} autocropdata {512 389 1536 1167} intensitydata {0 0 0 0} name CurveToolTopLeft xpos 83 ypos 419 } NoOp { inputs 0 name Settings xpos -178 ypos -13 addUserKnob {20 User} addUserKnob {3 sampleSize l "Sample Size"} sampleSize 4 addUserKnob {26 ""} addUserKnob {12 topLeft} topLeft {100 400} addUserKnob {12 topRight} topRight {400 400} addUserKnob {12 bottomLeft} bottomLeft {100 100} addUserKnob {12 bottomRight} bottomRight {400 100} } NoOp { inputs 0 name PointsOffset xpos -445 ypos -70 addUserKnob {20 PointsOffset} addUserKnob {12 startPosTL} startPosTL {{parent.Settings.topLeft} {parent.Settings.topLeft}} addUserKnob {12 frameHoldPosTL} frameHoldPosTL {100 400} addUserKnob {12 amountMovedTL} amountMovedTL {{frameHoldPosTL-adjustPosTL} {frameHoldPosTL-adjustPosTL+10}} addUserKnob {12 finalPosTL} finalPosTL {{startPosTL-amountMovedTL} {startPosTL-amountMovedTL}} addUserKnob {26 ""} addUserKnob {12 startPosTR} startPosTR {{parent.Settings.topRight} {parent.Settings.topRight}} addUserKnob {12 frameHoldPosTR} frameHoldPosTR {400 400} addUserKnob {12 amountMovedTR} amountMovedTR {{frameHoldPosTR-adjustPosTR} {frameHoldPosTR-adjustPosTR+10}} addUserKnob {12 finalPosTR} finalPosTR {{startPosTR-amountMovedTR} {startPosTR-amountMovedTR}} addUserKnob {26 ""} addUserKnob {12 startPosBL} startPosBL {{parent.Settings.bottomLeft} {parent.Settings.bottomLeft}} addUserKnob {12 frameHoldPosBL} frameHoldPosBL {100 100} addUserKnob {12 amountMovedBL} amountMovedBL {{frameHoldPosBL-adjustPosBL} {frameHoldPosBL-adjustPosBL+10}} addUserKnob {12 finalPosBL} finalPosBL {{startPosBL-amountMovedBL} {startPosBL-amountMovedBL}} addUserKnob {26 ""} addUserKnob {12 startPosBR} startPosBR {{parent.Settings.bottomRight} {parent.Settings.bottomRight}} addUserKnob {12 frameHoldPosBR} frameHoldPosBR {400 100} addUserKnob {12 amountMovedBR} amountMovedBR {{frameHoldPosBR-adjustPosBR} {frameHoldPosBR-adjustPosBR+10}} addUserKnob {12 finalPosBR} finalPosBR {{startPosBR-amountMovedBR} {startPosBR-amountMovedBR}} } push $N2e301de0 CurveTool { avgframes 1 ROI {0 0 1 1} autocropdata {512 389 1536 1167} intensitydata {0 0 0 0} name CurveToolTopRight xpos 429 ypos 423 } Crop { inputs 0 box {0 0 {"\[exists parent.input0] ? parent.input.width : \[value root.format.w]"} {"\[exists parent.input0] ? parent.input.height : \[value root.format.h]"}} name getInputFormat xpos 230 ypos -12 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Crop { inputs 0 box {{"\[exists parent.input0] == 1 ? parent.input.bbox.x : 0"} {"\[exists parent.input0] == 1 ? parent.input.bbox.y : 0"} {"\[exists parent.input0] == 1 ? parent.input.bbox.r : 0"} {"\[exists parent.input0] == 1 ? parent.input.bbox.t : 0"}} name getInputBbox selected true xpos 118 ypos -13 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_GradeLayerPass.gizmo ================================================ Group { name GradeLayerPass help "Select a lighting pass layer to minus from CG beauty input, do your color corrections, and plus the pass, with corrections.\n\nalso injects and replaces layer back into the stream. If you shuffle it out later, will include these color corrections." tile_color 0x5c7fc0ff label "(\[value channel])" note_font "Arial Bold Bold" note_font_color 0xffffffff selected true addUserKnob {20 GradeLayerPass} addUserKnob {4 output2 l output M {"Final Output" "Channel Changed" "Channel Original" ""}} addUserKnob {41 channel l channels T Shuffle64.in} addUserKnob {26 ""} addUserKnob {41 red l Exposure T Exposure16.red} addUserKnob {41 multiply T Grade159.multiply} addUserKnob {41 gamma T Grade159.gamma} addUserKnob {41 saturation T Saturation1.saturation} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge1.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge1.fringe} addUserKnob {7 mix} mix 1 addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Name: t "Select a lighting pass layer to minus from CG beauty input, do your color corrections, and plus the pass, with corrections.\n\nalso injects and replaces layer back into the stream. If you shuffle it out later, will include these color corrections." T GradeLayerPass} addUserKnob {26 ver l Version T v03} } Input { inputs 0 name Input xpos 381 ypos -676 } Dot { name Dot374 note_font_size 41 xpos 415 ypos -526 } set N33233460 [stack 0] Shuffle { in rgb name Shuffle64 label "\[value in]" xpos 662 ypos -533 } Remove { operation keep channels rgba name Remove10 xpos 662 ypos -501 } Dot { name Dot375 note_font_size 41 xpos 696 ypos -436 } set N331f5730 [stack 0] Dot { name Dot380 note_font_size 41 xpos 806 ypos -436 } Dot { name Dot381 note_font_size 41 xpos 806 ypos -127 } Dot { name Dot382 note_font_size 41 xpos 497 ypos -127 } Input { inputs 0 name Inputmask xpos 896 ypos -687 number 1 } Dot { name Dot1 note_font_size 41 xpos 930 ypos -338 } push $N331f5730 Dot { name Dot6 note_font_size 41 xpos 528 ypos -436 } set N3341c8e0 [stack 0] EXPTool { mode Stops green {{red x1001 -2.6}} blue {{red x1001 -2.6}} name Exposure16 xpos 494 ypos -391 } Grade { name Grade159 xpos 494 ypos -367 } Saturation { name Saturation1 xpos 494 ypos -341 } push $N331f5730 Merge2 { inputs 2+1 operation copy bbox B mix {{parent.mix}} name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 662 ypos -341 } Dot { name Dot377 note_font_size 41 xpos 696 ypos -276 } set N30ce7670 [stack 0] Shuffle { black red white green red2 blue green2 alpha out2 {{{parent.Shuffle64.in}}} name Shuffle72 label "\[value in]" xpos 662 ypos -232 } Dot { name Dot376 note_font_size 41 xpos 696 ypos -178 } set N3343b490 [stack 0] Dot { name Dot379 note_font_size 41 xpos 696 ypos -89 } push $N3343b490 push $N30ce7670 push $N3341c8e0 push $N33233460 Merge2 { inputs 2 operation from bbox B output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge152 xpos 381 ypos -439 } Merge2 { inputs 2 operation plus bbox B output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge153 xpos 381 ypos -279 } ShuffleCopy { inputs 2 in2 none black red white green red2 blue green2 alpha out none out2 {{{parent.Shuffle64.in}}} name ShuffleCopy1 xpos 381 ypos -181 } Switch { inputs 3 which {{parent.output2}} name Switch7 xpos 381 ypos -93 } Output { name Output1 xpos 381 ypos 14 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Grain_Advanced.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { name GrainAdvanced help "Adds synthetic grain. \n\nThe defaults are setup to simulate an HD Alexa plate's grain.\n\nYou can adjust the sliders to match a sample piece of grain. Find a sample with a rather constant background, blur it to remove the grain, and use as input to this. View with a wipe in the viewer so you can make a match. It helps to view and match each of the red, green, blue separately." tile_color 0x323232ff note_font_color 0xb80045ff selected true addUserKnob {20 grain_tab l Grain} addUserKnob {3 seed t "Change this value to make different instances of this operator produce different noise"} seed 134 addUserKnob {26 "" l "@b;Size"} addUserKnob {14 red_size l red R 0 100} red_size 0.4 addUserKnob {14 green_size l green R 0 100} green_size 0.6 addUserKnob {14 blue_size l blue R 0 100} blue_size 1.6 addUserKnob {7 irregularity} irregularity 0.6 addUserKnob {26 Intensity l "@b;Intensity Bright"} addUserKnob {7 red_m l red t "Amount of grain to add to a white pixel"} red_m 0.15 addUserKnob {7 green_m l green} green_m 0.15 addUserKnob {7 blue_m l blue} blue_m 0.2 addUserKnob {26 Darks l "@b;Intensity Darks"} addUserKnob {7 red_i l red R 0 0.2} red_i 0.025 addUserKnob {7 green_i l green R 0 0.2} green_i 0.01 addUserKnob {7 blue_i l blue R 0 0.2} blue_i 0.03 addUserKnob {26 Softness l "@b;Softness"} addUserKnob {7 red_soft l red R 0 2} red_soft 1.3 addUserKnob {7 green_soft l green R 0 2} green_soft 1.1 addUserKnob {7 blue_soft l blue R 0 2} blue_soft 1.3 addUserKnob {26 Globals l "@b;Global Controls"} addUserKnob {7 saturation l "Grain Saturation" t "Control how saturated the grain appears"} saturation 0.85 addUserKnob {7 aspect_ratio l "Aspect Ratio" t "Edit the aspect ratio of the grain to match anamorphic plates." R 0.5 2} aspect_ratio 1 addUserKnob {4 ar_filter l " " t "Set the filter on the aspect ratio transform" -STARTLINE M {Impulse Cubic ""}} ar_filter Cubic addUserKnob {6 apply_alpha l "Apply only through alpha" +STARTLINE} addUserKnob {6 invert_alpha l "Invert alpha" -STARTLINE} addUserKnob {6 invert_mask l "Invert mask" -STARTLINE} addUserKnob {7 mix} mix 1 addUserKnob {26 ""} addUserKnob {26 spin_copyright l "" t "© SPINVFX\nGrain_Advanced\nVersion 1.1\n2017" +STARTLINE T "SPINVFX - Version 1.1 - 2017 - Github Page"} } Input { inputs 0 name mask xpos 368 ypos 675 number 1 } Input { inputs 0 name img xpos 34 ypos -150 } Dot { name Dot1 tile_color 0xcccccc00 xpos 68 ypos -58 } set Na44a0240 [stack 0] Dot { name Dot5 tile_color 0xcccccc00 xpos -75 ypos -58 } set Na44a3d70 [stack 0] Dot { name Dot6 tile_color 0xcccccc00 xpos -146 ypos -58 } Dot { name Dot7 tile_color 0xcccccc00 xpos -146 ypos 679 } push $Na44a3d70 Shuffle { alpha white name Shuffle1 xpos -109 ypos 86 disable {{parent.apply_alpha}} } Dot { name Dot4 tile_color 0x9e3c6300 xpos -76 ypos 557 } push $Na44a0240 Dot { name Dot2 tile_color 0xcccccc00 xpos 164 ypos -58 } set Na44c1190 [stack 0] Noise { output {rgba.red -rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.red_size.w} {parent.red_size.h}} zoffset {{frame+seed+(irregularity/2)}} octaves 2 gamma 1 xrotate {{irregularity*45}} yrotate {{irregularity*45}} name red xpos 252 ypos -62 } Noise { output {-rgba.red rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.green_size.w} {parent.green_size.h}} zoffset {{frame+6+seed+(irregularity/2)}} octaves 2 gamma 1 xrotate {{irregularity*45}} yrotate {{irregularity*45}} name green xpos 252 ypos -19 } Noise { output {-rgba.red -rgba.green rgba.blue -rgba.alpha} cliptype none replace true size {{parent.blue_size.w} {parent.blue_size.h}} zoffset {{frame+3*seed+(irregularity/2)}} octaves 2 gamma 1 xrotate {{irregularity*45}} yrotate {{irregularity*45}} name blue xpos 252 ypos 20 } Transform { scale {{parent.aspect_ratio>1?parent.aspect_ratio:1 x3 0} {parent.aspect_ratio<1?1/parent.aspect_ratio:1 x3 0}} filter {{parent.ar_filter}} shutteroffset centred name Scale_Ratio xpos 252 ypos 62 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{parent.red_soft}} name Blur1 label "size \[value size]" xpos 252 ypos 122 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{parent.green_soft}} name Blur2 label "size \[value size]" xpos 252 ypos 173 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{parent.blue_soft}} name Blur3 label "size \[value size]" xpos 252 ypos 223 } Grade { multiply 2 add -1 black_clamp false name Grade1 xpos 252 ypos 295 } push $Na44c1190 Grade { black {{parent.red_i} {parent.green_i} {parent.blue_i} {curve}} white {{parent.red_m} {parent.green_m} {parent.blue_m} {curve}} name Grade4 xpos 130 ypos 422 } Merge2 { inputs 2 operation multiply bbox B name Merge3 xpos 252 ypos 422 } Saturation { saturation {{parent.saturation}} name Saturation1 xpos 252 ypos 465 } Dot { name Dot3 tile_color 0x7aa9ff00 xpos 286 ypos 557 } push $Na44a0240 Merge2 { inputs 2+1 operation plus bbox B output rgb invert_mask {{invert_alpha}} mix {{parent.mix}} name Merge4 xpos 34 ypos 553 } Keymix { inputs 3 invertMask {{!invert_mask}} name Keymix1 xpos 34 ypos 669 disable {{"!\[exists parent.input1] "}} } Output { name Output1 xpos 34 ypos 758 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_GuidedBlur.gizmo ================================================ Group { inputs 2 name GuidedBlur help "Description:\n\nThe guided filter is an edge-preserving blur,\nuseful to add details to the edges of a roto/matte\nusing a second image as a guide. \n\nHow to use:\n\nConnect the alpha to the 'matte' input\nand the 'guide' image to the 'img' input.\n\nControl the amount of detail using\nthe 'edge detail' slider.\n\n---\n\nThe filter is an implementation of the\n 'Guided Image Filtering', by Kaiming He. \nMore details at http://kaiminghe.com/eccv10/\n" tile_color 0xcc804eff note_font "Bitstream Vera Sans Bold" note_font_color 0xffffffff selected true addUserKnob {20 GuidedBlur} addUserKnob {6 replaceRGB l "Replace RGB with img" +STARTLINE} addUserKnob {41 blur_size l "blur size" T Blur1.size} addUserKnob {41 tolerance l "edge detail" t "Control the amount of detail that will be preserved. \n\nA value close to 0 makes the filter behave like a regular blur. \n\nValues close to 6 or 7 can introduce artifacts, identifying grain \"as edges\". \n\nRecommended values are between 2.5 and 4." T Constant_eps.multiplier} addUserKnob {41 filter T Blur1.filter} addUserKnob {41 quality l "" -STARTLINE T Blur1.quality} addUserKnob {26 ""} addUserKnob {41 amount l "sharpen amount" T Sharpen1.amount} addUserKnob {41 size l "sharpen size" T Sharpen1.size} addUserKnob {26 "" +STARTLINE} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge21.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge21.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge21.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge21.fringe} addUserKnob {41 mix T Merge21.mix} addUserKnob {20 info l Info} addUserKnob {26 versionInfo l "" +STARTLINE T "\nCreated by Rafael Silva\nwww.rafael.ai\nrafael@rafael.ai\n\nVersion 1.3\nLast Updated: August 16th, 2020\n\nUpdated by Nikolai Wüstemann 2021\n\nToronto, Canada\n\n---\n\nHelp and more information:\nwww.rafael.ai/guided_blur"} addUserKnob {26 ""} } Input { inputs 0 name matte label p xpos 2050 ypos 95 } set N7bf79600 [stack 0] Dot { name Dot21 note_font_size 41 xpos 1737 ypos 3701 } set N76b77900 [stack 0] Blur { size 10 filter box name Blur1 xpos 289 ypos 3691 } set C7bf78100 [stack 0] Input { inputs 0 name Inputmask xpos 644 ypos 3893 number 2 } Input { inputs 0 name img label i xpos -40 ypos 5 number 1 } Sharpen { amount 0 name Sharpen1 xpos -40 ypos 158 } Clamp { maximum 1000 name Clamp1 xpos -40 ypos 194 } Dot { name Dot16 xpos -6 ypos 330 } set N78f94f00 [stack 0] Dot { name Dot4 xpos 544 ypos 498 } set N78f94800 [stack 0] Dot { name Dot6 xpos 654 ypos 498 } set N78f94100 [stack 0] Dot { name Dot7 xpos 874 ypos 498 } set N7bf7b900 [stack 0] Dot { name Dot8 xpos 984 ypos 498 } set N7bf7b200 [stack 0] Dot { name Dot15 xpos 2194 ypos 498 } set N7bf7ab00 [stack 0] Dot { name Dot3 xpos 2744 ypos 498 } NoOp { name I1 xpos 2710 ypos 1695 } push $N7bf79600 Shuffle { red alpha green alpha blue alpha name Shuffle5 xpos 2050 ypos 543 } set N7bf78f00 [stack 0] push $N7bf7ab00 Merge { inputs 2 operation mult name Merge5 xpos 2160 ypos 591 } clone $C7bf78100 { xpos 2160 ypos 635 selected false } NoOp { name mean_Ip xpos 2160 ypos 711 } push $N78f94800 clone $C7bf78100 { xpos 510 ypos 659 selected false } NoOp { name mean_I xpos 510 ypos 735 } Dot { name Dot9 xpos 544 ypos 786 } set N78956400 [stack 0] Dot { name Dot13 xpos 874 ypos 810 } set N78955d00 [stack 0] Dot { name Dot14 xpos 1424 ypos 834 } set N78955600 [stack 0] push $N7bf78f00 clone $C7bf78100 { xpos 2050 ypos 635 selected false } NoOp { name mean_p xpos 2050 ypos 687 } set N78954800 [stack 0] Merge { inputs 2 operation mult name Merge8 xpos 1940 ypos 951 } Merge { inputs 2 operation minus name Merge9 xpos 1940 ypos 1023 } NoOp { name cov_Ip xpos 1940 ypos 1095 } set N786d3200 [stack 0] Constant { inputs 0 channels rgb color {{"1/pow(10, multiplier)"}} name Constant_eps xpos 400 ypos 1095 addUserKnob {20 User} addUserKnob {7 multiplier R 1 6} multiplier 5 } set N786d2b00 [stack 0] push $N78f94100 push $N7bf7b900 Merge2 { inputs 2 operation multiply name Merge18 label I*I xpos 730 ypos 611 } clone $C7bf78100 { xpos 730 ypos 683 selected false } set N786d1600 [stack 0] Dot { name Dot5 xpos 2634 ypos 834 } NoOp { name mean_II xpos 2600 ypos 1023 } push $N78955600 Dot { name Dot1 xpos 2524 ypos 882 } set N786d0100 [stack 0] push $N786d0100 Merge2 { inputs 2 operation multiply name Merge4 label "mean I * mean I" xpos 2490 ypos 1019 } Merge2 { inputs 2 operation minus name Merge2 xpos 2490 ypos 1095 } NoOp { name var_I xpos 2490 ypos 1167 } Merge { inputs 2 operation plus bbox B name Merge13 xpos 2490 ypos 1287 } Merge { inputs 2 operation divide bbox B name Merge14 xpos 2490 ypos 1407 } NoOp { name a_mono label a xpos 2490 ypos 1475 } set N6eb99600 [stack 0] clone $C7bf78100 { xpos 2600 ypos 1691 selected false } Merge { inputs 2 operation mult bbox B name Merge17 xpos 2600 ypos 1815 } push $N78954800 Dot { name Dot19 xpos 2084 ypos 1410 } set N6eb98100 [stack 0] push $N78955600 push $N6eb99600 Merge { inputs 2 operation mult bbox B name Merge15 xpos 2490 ypos 1551 } Merge { inputs 2 operation minus bbox B name Merge7 xpos 2490 ypos 1671 } NoOp { name b_mono xpos 2490 ypos 1743 } clone $C7bf78100 { xpos 2490 ypos 1811 selected false } NoOp { name mean_b_mono_ xpos 2490 ypos 1887 } Merge { inputs 2 operation plus bbox B name Merge16 xpos 2490 ypos 1959 } Dot { name Dot18 xpos 2524 ypos 2922 } push $N6eb98100 Dot { name Dot10 xpos 1314 ypos 2346 } Dot { name Dot2 xpos 1314 ypos 2562 } push $N786d2b00 push $N786d1600 push $N78956400 Expression { expr0 r*r expr1 g*g expr2 b*b name Expression3 label "I*I (rr, gg, bb)" xpos 510 ypos 995 } Merge { inputs 2 operation minus name Merge11 xpos 730 ypos 1119 } Merge { inputs 2 operation plus bbox B name Merge12 xpos 730 ypos 1215 } NoOp { name I___ label "rr, gg, bb" xpos 730 ypos 1283 } set N4824e400 [stack 0] push $N7bf7b200 Expression { expr0 r*g expr1 r*b expr2 g*b name Expression2 label "rg, rb, gb" xpos 950 ypos 611 } clone $C7bf78100 { xpos 950 ypos 683 selected false } push $N78955d00 Expression { expr0 r*g expr1 r*b expr2 g*b name Expression4 label "rg, rb, gb" xpos 840 ypos 1019 } Merge { inputs 2 operation minus name Merge10 xpos 950 ypos 1095 } NoOp { name I____ label "rg, rb, gb" xpos 950 ypos 1283 } set N4824c100 [stack 0] MergeExpression { inputs 2 expr0 Ar*Ab-Bg*Bg expr1 Bg*Br-Ar*Bb expr2 Ar*Ag-Br*Br name MergeExpression2 label "invgg, invgb, invbb" xpos 730 ypos 1691 } push $N4824e400 push $N4824c100 MergeExpression { inputs 2 expr0 Ag*Ab-Bb*Bb expr1 Bb*Bg-Br*Ab expr2 Br*Bb-Ag*Bg name MergeExpression1 label "invrr, invrg, invrb" xpos 510 ypos 1403 } set N3437b200 [stack 0] push $N4824c100 MergeExpression { inputs 2 expr0 Ab*Bg expr1 0 expr2 0 name MergeExpression5 label invrb*I_rb xpos 1170 ypos 1475 } Shuffle { green red blue red alpha red name Shuffle8 xpos 1170 ypos 1551 } push 0 push $N3437b200 push $N4824e400 MergeExpression { inputs 2 expr0 Ar*Br expr1 0 expr2 0 name MergeExpression3 label invrr*I_rr xpos 620 ypos 1475 } Shuffle { green red blue red alpha red name Shuffle2 xpos 620 ypos 1527 } push $N3437b200 push $N4824c100 MergeExpression { inputs 2 expr0 Ag*Br expr1 0 expr2 0 name MergeExpression4 label invrg*I_rg xpos 950 ypos 1499 } Shuffle { green red blue red alpha red name Shuffle3 xpos 950 ypos 1551 } Merge2 { inputs 3+1 operation plus name Merge1 label covDet xpos 950 ypos 1691 } set N34378100 [stack 0] MergeExpression { inputs 2 expr0 Ar/Br expr1 Ag/Bg expr2 Ab/Bb expr3 0 name MergeExpression7 label "invgg, invgb, invbb" xpos 730 ypos 1883 } set N5b47f900 [stack 0] push $N3437b200 push $N34378100 MergeExpression { inputs 2 expr0 Ar/Br expr1 Ag/Bg expr2 Ab/Bb expr3 0 name MergeExpression6 label "invrr, invrg, invrb" xpos 510 ypos 1883 } set N5b47f200 [stack 0] ShuffleCopy { inputs 2 red blue2 green green blue blue alpha black name ShuffleCopy1 label "invrb, invgb, invbb" xpos 840 ypos 2099 } push $N786d3200 NoOp { name cov_Ip1 xpos 950 ypos 1887 } Dot { name Dot17 xpos 984 ypos 1986 } set N5b47dd00 [stack 0] MergeExpression { inputs 2 expr0 Ar*Bb expr1 Ag*Bb expr2 Ab*Bb name MergeExpression10 xpos 840 ypos 2175 } push 0 push $N5b47f200 push $N5b47dd00 MergeExpression { inputs 2 expr0 Ar*Br expr1 Ag*Br expr2 Ab*Br name MergeExpression8 xpos 620 ypos 2175 } push $N5b47f900 push $N5b47f200 ShuffleCopy { inputs 2 red green2 green red blue green alpha black name ShuffleCopy2 label "invrg, invgg, invgb" xpos 730 ypos 2099 } push $N5b47dd00 MergeExpression { inputs 2 expr0 Ar*Bg expr1 Ag*Bg expr2 Ab*Bg name MergeExpression9 xpos 730 ypos 2175 } Merge2 { inputs 3+1 operation plus name A label "a_r, a_g, a_b\n-" xpos 730 ypos 2262 } set Na6063900 [stack 0] push $N78955600 NoOp { name NoOp2 label mean_I xpos 1390 ypos 2411 } Merge2 { inputs 2 operation multiply name Merge22 xpos 1390 ypos 2487 } set Na6062b00 [stack 0] Shuffle { green red blue red alpha red name a_r_mult_mean_I_r xpos 1390 ypos 2559 } Merge2 { inputs 2 operation minus name Merge6 xpos 1390 ypos 2679 } push $Na6062b00 Shuffle { red green blue green alpha green name a_g_mult_mean_I_g xpos 1500 ypos 2559 } Merge2 { inputs 2 operation minus name Merge19 xpos 1500 ypos 2727 } push $Na6062b00 Shuffle { red blue green blue alpha blue name a_b_mult_mean_I_b xpos 1610 ypos 2559 } Merge2 { inputs 2 operation minus name Merge20 xpos 1610 ypos 2775 } NoOp { name NoOp4 label B xpos 1610 ypos 2819 } clone $C7bf78100 { xpos 1610 ypos 2915 selected false } NoOp { name NoOp5 label boxfilter(b) xpos 1610 ypos 2987 } push $Na6063900 clone $C7bf78100 { xpos 730 ypos 2363 selected false } push $N78f94f00 Merge2 { inputs 2 operation multiply name Merge3 xpos -40 ypos 2799 } NoOp { name NoOp6 label "boxfilter(a_\[rgb])" xpos -40 ypos 3227 } set N7809d600 [stack 0] Shuffle { red blue green blue alpha blue name ab2 xpos 180 ypos 3327 } push 0 push $N7809d600 Shuffle { green red blue red alpha red name ar2 label "boxfiler(a_r,r) * I_r" xpos -40 ypos 3323 } push $N7809d600 Shuffle { red green blue green alpha green name ag2 xpos 70 ypos 3327 } Merge2 { inputs 4+1 operation plus name Merge25 xpos -40 ypos 3448 } Dot { name Dot11 xpos -6 ypos 3546 } Switch { inputs 2 name Switch1 xpos -40 ypos 3616 } set N7ad6eb00 [stack 0] push $N78f94f00 Dot { name Dot12 xpos -172 ypos 450 } Dot { name Dot20 xpos -189 ypos 3610 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos -124 ypos 3685 } push $N7ad6eb00 Switch { inputs 2 which {{replaceRGB}} name Switch2 label "\[value which]" xpos -40 ypos 3757 } push $N76b77900 Merge2 { inputs 2+1 operation copy name Merge21 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos -40 ypos 3847 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "\nntn = nuke.thisNode()\nall = nuke.allNodes()\na = ntn.input(1)\nx = int(ntn\['xpos'].value())\nb = ntn.input(0)\ny = int(ntn\['ypos'].value())\nwith nuke.Root():\n ma = nuke.nodes.NST_MergeAll()\n ma.setXYpos(x,y)\n # copy all values\n ak = ntn.knobs()\n for knoB in ma.knobs():\n try:\n if knoB not in \[\"name\",\"tile_color\", \"also_merge\"]:\n ma\[knoB].setValue(ntn\[knoB].value())\n with ma:\n newMerge = nuke.toNode(\"MergeAllChannels\")\n if ntn\[\"mix\"].isAnimated():\n newMerge\[\"mix\"].copyAnimations(ntn\[\"mix\"].animations())\n else:\n newMerge\['mix'].setValue(ntn\['mix'].value())\n newMerge.knob('also_merge').setValue('all')\n\n except:\n pass\n \n # try to reconnect\n try:\n ma.setInput(0,b);ma.setInput(1,a)\n for one in all:\n for i in range(one.inputs()):\n if one.input(i) == ntn:\n one.setInput(i,ma)\n except:\n pass\n nuke.delete(ntn)\n"} } CopyBBox { inputs 2 name CopyBBox1 xpos -40 ypos 3929 disable {{replaceRGB}} } Output { name Output1 xpos -40 ypos 4032 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_HSL_Tool.gizmo ================================================ Group { name HSL_Tool tile_color 0xe2f1ff selected true addUserKnob {20 hue} addUserKnob {41 lut l "" -STARTLINE T HUE_key.lut} addUserKnob {20 sat} addUserKnob {41 lut_1 l "" -STARTLINE T SAT_key.lut} addUserKnob {20 lum} addUserKnob {41 lut_2 l "" -STARTLINE T LUM_key.lut} addUserKnob {20 Settings} addUserKnob {6 displayAlpha l "display Mask in Alpha" +STARTLINE} displayAlpha true addUserKnob {26 "" +STARTLINE} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge5.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge5.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge5.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge5.fringe} addUserKnob {41 mix T Merge5.mix} } Input { inputs 0 name Inputmask xpos 565 ypos 920 number 1 } Input { inputs 0 name Input xpos 420 ypos 425 } Dot { name Dot1 xpos 454 ypos 547 } set N9c565e20 [stack 0] Dot { name Dot2 xpos 700 ypos 547 } set N9c542480 [stack 0] Dot { name Dot3 xpos 813 ypos 547 } set N9c546090 [stack 0] Dot { name Dot4 xpos 923 ypos 547 } HueKeyer { lut {amount {curve 1 1 1 1 1 1 1} sat_thrsh {curve 0 0 0 0 0 0 0}} invert false name LUM_key xpos 889 ypos 597 } Shuffle { red white green white blue alpha name Shuffle3 xpos 889 ypos 700 } push $N9c546090 HueKeyer { lut {amount {curve 1 1 0.3495025039 0.3495025039 0.3495025039 1 1} sat_thrsh {curve 0 0 0 0 0 0 0}} invert false name SAT_key xpos 779 ypos 597 } Shuffle { red white green alpha blue white name Shuffle2 xpos 779 ypos 664 } push $N9c542480 HueKeyer { lut {amount {curve 1 1 1 1 1 1 1} sat_thrsh {curve 0 0 0 0 0 0 0}} invert false name HUE_key xpos 666 ypos 598 } Shuffle { red alpha green black blue black name Shuffle1 xpos 666 ypos 634 } push $N9c565e20 Colorspace { colorspace_out HSL name Colorspace1 xpos 420 ypos 597 } Merge2 { inputs 2 operation plus output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge1 xpos 420 ypos 634 } Merge2 { inputs 2 operation multiply output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge2 xpos 420 ypos 664 } Merge2 { inputs 2 operation multiply output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge3 xpos 420 ypos 700 } Colorspace { colorspace_in HSL name Colorspace2 xpos 420 ypos 757 } set N7e480490 [stack 0] push $N9c565e20 Dot { name Dot5 xpos 315 ypos 547 } set N7e491ff0 [stack 0] Merge2 { inputs 2 operation from name Merge4 xpos 281 ypos 757 } Expression { expr3 abs(red)+abs(green)+abs(blue) name Expression1 xpos 281 ypos 822 } push $N7e480490 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha mix {{parent.displayAlpha}} name Copy1 xpos 420 ypos 816 } push $N7e491ff0 Dot { name Dot6 note_font_size 41 xpos 78 ypos 547 } Dot { name Dot7 note_font_size 41 xpos 78 ypos 923 } Merge2 { inputs 2+1 operation copy name Merge5 xpos 420 ypos 920 } Output { name Output1 xpos 420 ypos 1018 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Halation.gizmo ================================================ Group { name Halation tile_color 0xcc804eff note_font "Verdana Bold" note_font_color 0xffffffff selected true addUserKnob {20 Halation} addUserKnob {4 outputView l "Output View" M {"Final Output" "Luma Key" "Effect Only"}} addUserKnob {26 key l Key:} addUserKnob {7 black l blackpoint R 0 10} black 2 addUserKnob {7 white l whitepoint R 0 10} white 6 addUserKnob {41 size_1 l size T Glow1.size} addUserKnob {26 ""} addUserKnob {7 red R 0 4} red 1 addUserKnob {7 green R 0 4} green 0.25 addUserKnob {7 blue R 0 4} blue 0.08 addUserKnob {7 globalAmount l "Global Amount" R 0 4} globalAmount 1 addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge1.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge1.fringe} addUserKnob {7 mix} mix 1 addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: T Halation} addUserKnob {26 ver l Version: T v01} } Input { inputs 0 name Input xpos -852 ypos 177 } Dot { name Dot45 note_font_size 41 xpos -818 ypos 236 } set Ne27f76c0 [stack 0] Saturation { saturation 0 name Saturation1 xpos -661 ypos 233 } Grade { blackpoint {{parent.black}} whitepoint {{parent.white}} white_clamp true name Grade2 xpos -661 ypos 257 } Shuffle { green red blue red alpha red name Shuffle1 label "\[value in]" xpos -661 ypos 291 } Dot { name Dot48 note_font_size 41 xpos -627 ypos 352 } set Ne2790040 [stack 0] push $Ne2790040 Dot { name Dot49 note_font_size 41 xpos -420 ypos 352 } set Ne4e48d30 [stack 0] Dot { name Dot51 note_font_size 41 xpos -310 ypos 352 } set Ne4432470 [stack 0] Dot { name Dot52 note_font_size 41 xpos -200 ypos 352 } set Ne279cea0 [stack 0] Glow2 { effect_only true size {{parent.Glow1.size.w*4} {parent.Glow1.size.h*4}} name Glow3 xpos -234 ypos 403 } Dot { name Dot54 note_font_size 41 xpos -200 ypos 496 } push $Ne4432470 Glow2 { effect_only true size {{parent.Glow1.size.w*2} {parent.Glow1.size.h*2}} name Glow2 xpos -344 ypos 404 } Dot { name Dot53 note_font_size 41 xpos -310 ypos 453 } push $Ne4e48d30 Glow2 { effect_only true size 1.2 name Glow1 xpos -454 ypos 401 } Merge2 { inputs 2 operation screen name Merge8 xpos -454 ypos 449 } Merge2 { inputs 2 operation screen name Merge13 xpos -454 ypos 492 } Merge2 { inputs 2 operation from name Merge9 xpos -661 ypos 492 } Clamp { channels rgba maximum_enable false name Clamp4 xpos -661 ypos 529 } Shuffle { green red blue red alpha red name Shuffle3 label "\[value in]" xpos -661 ypos 555 } Dot { name Dot50 note_font_size 41 xpos -627 ypos 628 } set Ne452d3f0 [stack 0] Dot { name Dot55 note_font_size 41 xpos -517 ypos 628 } Blur { channels rgba size {{parent.Glow1.size.w} {parent.Glow1.size.h}} name Blur11 label "\[value size]" xpos -551 ypos 681 } push $Ne452d3f0 Merge2 { inputs 2 operation max name Merge7 xpos -661 ypos 687 } Grade { multiply {{parent.red} {parent.green} {parent.blue} 1} gamma {1 1 1 1} name Grade17 xpos -661 ypos 754 } Multiply { channels rgba value {{parent.globalAmount}} name Multiply2 label "\[value value]" xpos -661 ypos 795 } Shuffle { alpha black name Shuffle2 label "\[value in]" xpos -661 ypos 867 } Dot { name Dot57 note_font_size 41 xpos -627 ypos 961 } set Ne4ff28b0 [stack 0] Multiply { value {{parent.Merge1.mix}} name Multiply1 label "\[value value]" xpos -661 ypos 1136 } push $Ne279cea0 Dot { name Dot2 note_font_size 41 xpos 48 ypos 352 } Dot { name Dot1 note_font_size 41 xpos 48 ypos 1284 } Input { inputs 0 name Inputmask xpos -380 ypos 686 number 1 } Dot { name Dot60 xpos -346 ypos 1042 } push $Ne4ff28b0 push $Ne27f76c0 Dot { name Dot56 note_font_size 41 xpos -818 ypos 617 } Merge2 { inputs 2 operation plus bbox B name Merge14 xpos -852 ypos 957 } push $Ne27f76c0 Dot { name Dot58 note_font_size 41 xpos -969 ypos 236 } Dot { name Dot59 note_font_size 41 xpos -962 ypos 1042 } Merge2 { inputs 2+1 operation copy mix {{parent.mix}} name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos -852 ypos 1039 } Switch { inputs 3 which {{parent.outputView}} name OutputView label "\[value which]" xpos -852 ypos 1277 } Output { name Output1 xpos -852 ypos 1437 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_HeatWave.gizmo ================================================ Group { name HeatWave knobChanged "n = nuke.thisNode()\n\nif n.input(2) !=None :\n n\['evolutionspeed'].setEnabled(False)\n n\['Base'].setEnabled(False)\n n\['Detail'].setEnabled(False)\n n\['basesize'].setEnabled(False)\n n\['basedistortion'].setEnabled(False)\n n\['detailsize'].setEnabled(False)\n n\['detaildistortion'].setEnabled(False)\n n\['windstrength'].setEnabled(False)\nelse:\n n\['evolutionspeed'].setEnabled(True)\n n\['Base'].setEnabled(True)\n n\['Detail'].setEnabled(True)\n n\['basesize'].setEnabled(True)\n n\['basedistortion'].setEnabled(True)\n n\['detailsize'].setEnabled(True)\n n\['detaildistortion'].setEnabled(True)\n n\['windstrength'].setEnabled(True)" tile_color 0xe0000ff gl_color 0xff5b5bff note_font_color 0xe24a4aff selected true addUserKnob {20 User l HeatWave} addUserKnob {41 channels l Channels T STMap1.channels} addUserKnob {41 POS l Position T Ramp1.POS} addUserKnob {41 WIND l "Wind Angle" T Ramp1.WIND} addUserKnob {26 __________________________ l "Distortion"} addUserKnob {7 globaldistortion l "Global Distortion" R 0 100} globaldistortion 50 addUserKnob {7 distortionresponse l Response R 0 2} distortionresponse 1 addUserKnob {7 evolutionspeed l "Turbulence Speed" t "Noise Z offset speed over time." R 0 100} evolutionspeed 50 addUserKnob {20 Base l BASE n 1} addUserKnob {7 basesize l "Base Size" R 0 100} basesize 50 addUserKnob {7 basedistortion l "Base Distortion" R 0 100} basedistortion 50 addUserKnob {20 endGroup n -1} addUserKnob {20 Detail l DETAIL n 1} addUserKnob {7 detailsize l "Detail Size" R 0 100} detailsize 50 addUserKnob {7 detaildistortion l "Detail Distortion" R 0 100} detaildistortion 50 addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ________________________________ l "Haze Blur"} addUserKnob {7 hazeamount l "Blur Size" R 0 100} hazeamount 50 addUserKnob {7 hazeresponse l Response R 0 2} hazeresponse 1 addUserKnob {26 ___________________________ l "Wind"} addUserKnob {41 useslider l "Use slider instead of point" T Ramp1.useslider} addUserKnob {41 rotation l "Wind Angle" T Ramp1.rotation} addUserKnob {7 windstrength l Strength R 0 100} windstrength 50 addUserKnob {26 ""} addUserKnob {7 mix l Mix} mix 1 addUserKnob {6 limittobb l "Limit to Bounding Box " t "Limits distortion and blur calculations to 'Mask' or 'Custom' inputs bounding boxes." +STARTLINE} limittobb true addUserKnob {6 fillframeedges l "Fill Frame Edges " t "Adds a fake overscan to avoid black borders around the frame.\n\nEnable this if your input image has no overscan.\n\nOverscan size can be adjusted with the Overscan slider located in the \"Extras\" tab.\n\nIf a Roto is being used for the Mask input, remember to set it to \"no clip\" in the Roto's \"clip to\" knob to avoid bounding box cropping." -STARTLINE} addUserKnob {6 previewnoisemap l "Preview Noise Map " -STARTLINE} addUserKnob {26 credits l " " T "HeatWave v4.0   │   B Y   D A M I A N   B I N D E R"} addUserKnob {20 Extras} addUserKnob {26 ______________________ l Extras} addUserKnob {7 ca l "Chromatic Aberration" R -1 1} addUserKnob {7 detailwindmult l "Detail Wind Strength Mult" t "Wind strength multiplier that affects only the DETAIL noise. Can be used to reduce flickering or add parallax between BASE and DETAIL noise." R 0 2} detailwindmult 1 addUserKnob {7 overscan l Overscan t "Check \"Fill Frame Edges\" in the main tab." R 0 400} overscan 200 } Ramp { inputs 0 output none p0 {{POS} {POS}} p1 {{"parent.useslider==0 ? WIND : p0.x + (p0.x - p0.x) * cos(rotation*pi/-180) - ((p0.y+(Image.width/8)) - p0.y) * sin(rotation*pi/-180)"} {"parent.useslider==0 ? WIND : p0.y + (p0.x - p0.x) * sin(rotation*pi/-180) + ((p0.y+(Image.width/8)*Image.pixel_aspect) - p0.y) * cos(rotation*pi/-180)"}} name Ramp1 knobChanged "n = nuke.thisNode()\n\nif n\['useslider'].getValue() == 1:\n n\['WIND'].setEnabled(False)\n n\['rotation'].setEnabled(True)\nelse:\n n\['WIND'].setEnabled(True)\n n\['rotation'].setEnabled(False)\n \nn.knob('p0').setEnabled(False)\nn.knob('p1').setEnabled(False)" gl_color 0xff5b5bff xpos 1770 ypos 175 hide_input true addUserKnob {20 User} addUserKnob {12 POS} POS {500 300} addUserKnob {12 WIND} WIND {500 800} addUserKnob {7 rotation +DISABLED R -360 360} addUserKnob {6 useslider +STARTLINE} } Input { inputs 0 name Mask xpos 2292 ypos -456 number 1 } BlackOutside { name BlackOutside5 xpos 2292 ypos -428 } AdjBBox { numpixels 24 name AdjBBox1 xpos 2292 ypos -402 } Input { inputs 0 name Image xpos 82 ypos -464 } Dot { name Dot14 xpos 116 ypos -401 } set N6c835c00 [stack 0] Crop { box {0 0 {width} {height}} crop false name Crop2 xpos 82 ypos -370 disable {{!fillframeedges}} } set N6c835800 [stack 0] Crop { box {{-parent.overscan} {-parent.overscan} {width+parent.overscan} {height+parent.overscan}} name Crop3 xpos 190 ypos -370 disable {{!fillframeedges}} } Dot { name Dot15 xpos 224 ypos -137 } set N6c835000 [stack 0] Remove { name Remove2 xpos 1929 ypos -147 } set N6c834c00 [stack 0] Merge2 { inputs 2 bbox intersection name Merge10 xpos 2292 ypos -141 } Dot { name Dot10 xpos 2326 ypos -13 } set N6c834400 [stack 0] Dot { name Dot13 xpos 2326 ypos 651 } set N6c7e7c00 [stack 0] Dot { name Dot34 xpos 2326 ypos 798 } set N6c7e7800 [stack 0] Dot { name Dot33 xpos 2327 ypos 1720 } set N6c7e7400 [stack 0] push $N6c835000 Dot { name Dot51 xpos 224 ypos 51 } Input { inputs 0 name Custom xpos 765 ypos -457 number 2 } AdjBBox { numpixels 24 name AdjBBox2 xpos 765 ypos -431 } Merge2 { inputs 2 bbox A output none name Merge11 xpos 765 ypos 41 disable {{parent.limittobb}} } Dot { name Dot40 xpos 799 ypos 158 } set N6c7e6000 [stack 0] Dot { name Dot42 xpos 1061 ypos 158 } set N6c7e5c00 [stack 0] Multiply { value 0.1 name Multiply6 xpos 1027 ypos 402 } Gamma { value {{parent.distortionresponse}} name Gamma1 xpos 1027 ypos 440 } Dot { name Dot41 xpos 1061 ypos 723 } push $N6c834400 push $N6c834c00 CopyBBox { inputs 2 name CopyBBox1 xpos 1929 ypos -17 disable {{"!parent.limittobb+!\[exists parent.input1]*!\[exists parent.input2]"}} } AdjBBox { numpixels 1 name AdjBBox3 xpos 1929 ypos 55 } Dot { name Dot5 xpos 1963 ypos 133 } set N6c7e4400 [stack 0] Dot { name Dot3 xpos 1637 ypos 133 } Noise { cliptype bbox size 1000 zoffset {{(frame-root.first_frame)*(evolutionspeed/400)}} octaves 1 gain 0.1 translate {{(frame-root.first_frame)*(windstrength*4)+Ramp1.p0} {Ramp1.p0}} rotate {{atan2((Ramp1.p1.y/pixel_aspect)-Ramp1.p0.y/pixel_aspect,(Ramp1.p1.x)-Ramp1.p0.x)*(180/pi)}} scale {{parent.basesize/32} {parent.basesize/32*pixel_aspect}} center {{Ramp1.p0.x-translate} {Ramp1.p0.y-translate}} name Noise10 xpos 1603 ypos 181 } Clamp { maximum_enable false name Clamp2 xpos 1603 ypos 207 } Dot { name Dot8 xpos 1637 ypos 275 } set N6c79f000 [stack 0] Gamma { value {{parent.distortionresponse}} name Gamma2 xpos 1603 ypos 407 } set N6c79ec00 [stack 0] push $N6c7e4400 Noise { cliptype bbox size {{parent.detailsize*20}} zoffset {{(frame-root.first_frame)*evolutionspeed/20000}} octaves 8 gain 0.55 translate {{(frame-root.first_frame)*(windstrength*detailwindmult)+Ramp1.p0} {Ramp1.p0}} rotate {{atan2((Ramp1.p1.y/pixel_aspect)-Ramp1.p0.y/pixel_aspect,(Ramp1.p1.x)-Ramp1.p0.x)*(180/pi)}} scale {1 {pixel_aspect}} center {{Ramp1.p0.x-translate} {Ramp1.p0.y-translate}} name Noise3 xpos 1929 ypos 181 } Clamp { maximum_enable false name Clamp1 xpos 1929 ypos 209 } Multiply { value {{(parent.detailsize/100)*(parent.detaildistortion/100*2)}} name Multiply4 xpos 1929 ypos 355 } Merge2 { inputs 2 operation multiply name Merge5 xpos 1929 ypos 413 } Dot { name Dot6 xpos 1963 ypos 510 } push $N6c79ec00 Multiply { value {{(parent.basedistortion/2)*pow(parent.basesize/100,1.5)}} name Multiply3 xpos 1603 ypos 455 } Merge2 { inputs 2 operation plus name Merge3 xpos 1603 ypos 506 } BlackOutside { name BlackOutside6 xpos 1603 ypos 549 } Switch { inputs 2 which {{"\[exists parent.input2]"}} name Switch4 xpos 1603 ypos 719 } Dot { name Dot7 xpos 1637 ypos 937 } set N6c79c800 [stack 0] Multiply { value 0.08 name Multiply2 xpos 1374 ypos 927 disable {{"\[exists parent.input2]"}} } Dot { name Dot30 xpos 1188 ypos 937 } Merge2 { inputs 2 operation mask name Merge9 xpos 1154 ypos 1716 disable {{"!\[exists parent.input1]"}} } Dot { name Dot29 xpos 1188 ypos 3060 } Shuffle { in alpha name Shuffle1 xpos 249 ypos 3056 } push $N6c7e5c00 Dot { name Dot9 xpos 1275 ypos 158 } push $N6c7e7800 Merge2 { inputs 2 name Merge2 xpos 1241 ypos 794 } Dot { name Dot35 xpos 1004 ypos 798 } set N6c73a400 [stack 0] Dot { name Dot37 xpos 1004 ypos 2940 } Expression { channel0 {-rgba.red -rgba.green -rgba.blue none} channel1 {-rgba.red -rgba.green -rgba.blue none} channel2 {-rgba.red -rgba.green -rgba.blue none} expr3 !a>0 name Expression2 xpos 247 ypos 2936 } push $N6c835000 push $N6c835800 Mirror { Horizontal true Vertical true name Mirror1 xpos 82 ypos -344 disable {{!fillframeedges}} } Reformat { type scale scale 3 filter impulse name Reformat11 xpos 82 ypos -318 disable {{!fillframeedges}} } Tile { rows 3 mirrorRows true columns 3 mirrorCols true filter impulse name Tile2 xpos 82 ypos -292 disable {{!fillframeedges}} } Reformat { type "to box" box_width {{Image.width}} box_height {{Image.height}} box_fixed true box_pixel_aspect {{Image.pixel_aspect}} filter impulse name Reformat12 xpos 82 ypos -266 disable {{!fillframeedges}} } Transform { translate {-1 -1} scale 3 center {{"width / 2"} {"height / 2"}} filter impulse black_outside false name Transform4 xpos 82 ypos -240 disable {{!fillframeedges}} } push $N6c835c00 Dot { name Dot22 xpos 36 ypos -401 } Dot { name Dot24 xpos 36 ypos -189 } Dissolve { inputs 2 which 1 name Dissolve3 xpos 82 ypos -199 disable {{!fillframeedges}} } CopyBBox { inputs 2 name CopyBBox3 xpos 82 ypos -141 disable {{!fillframeedges}} } Dot { name Dot39 xpos 116 ypos 575 } set N6c6f2800 [stack 0] Dot { name Dot38 xpos -191 ypos 575 } Dot { name Dot36 xpos -191 ypos 2940 } push $N6c7e7400 Dot { name Dot12 xpos 2327 ypos 1876 } push $N6c79c800 Dot { name Dot11 xpos 1637 ypos 1247 } set N6c6f1800 [stack 0] Position { translate {0 1} name Position2 xpos 1715 ypos 1243 } push $N6c6f1800 Merge2 { inputs 2 operation from name Merge6 xpos 1656 ypos 1303 } Multiply { value {{pixel_aspect**2}} name Multiply8 xpos 1656 ypos 1345 } Dot { name Dot60 xpos 1690 ypos 1407 } push $N6c6f1800 Position { translate {1 0} name Position1 xpos 1491 ypos 1243 } push $N6c6f1800 Merge2 { inputs 2 operation from name Merge4 xpos 1548 ypos 1303 } Dot { name Dot61 xpos 1582 ypos 1407 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy1 xpos 1604 ypos 1403 } Multiply { value {{2*(globaldistortion/50)*parent.mix}} name Multiply1 xpos 1604 ypos 1438 } Merge2 { inputs 2 operation mask name Merge7 xpos 1604 ypos 1872 disable {{"!\[exists parent.input1]"}} } set N6c69ec00 [stack 0] Dot { name Dot50 xpos 1097 ypos 1876 } Dot { name Dot49 xpos 1097 ypos 2327 } Multiply { value {{parent.ca>0?parent.ca:-parent.ca}} name Multiply5 xpos 852 ypos 2317 } Dot { name Dot52 xpos 732 ypos 2327 } set N6c69dc00 [stack 0] Dot { name Dot48 xpos 642 ypos 2327 } push $N6c73a400 push $N6c6f2800 CopyBBox { inputs 2 name CopyBBox5 xpos 82 ypos 794 disable {{"!parent.limittobb+!\[exists parent.input1]*!\[exists parent.input2]"}} } Dot { name Dot27 xpos 116 ypos 1388 } set N6c69d000 [stack 0] Dot { name Dot31 xpos 763 ypos 1388 } Dot { name Dot32 xpos 763 ypos 2076 } set N6c69c800 [stack 0] Remove { name Remove1 xpos 1294 ypos 2066 } Expression { expr0 (x+0.5)/width expr1 (y+0.5)/height channel2 {-rgba.red -rgba.green -rgba.blue none} name Expression1 xpos 1447 ypos 2049 postage_stamp true } push $N6c69ec00 Merge2 { inputs 2 operation plus bbox B name Merge1 xpos 1604 ypos 2072 } BlackOutside { name BlackOutside4 xpos 1604 ypos 2139 } Dot { name Dot28 xpos 1638 ypos 2499 } Dot { name Dot45 xpos 923 ypos 2499 } set N6c662c00 [stack 0] Dot { name Dot47 xpos 923 ypos 2440 } Merge2 { inputs 2 operation from name Merge12 xpos 608 ypos 2436 } push $N6c69c800 push $N6c7e7c00 push $N6c7e6000 push $N6c79f000 Switch { inputs 2 which {{"\[exists parent.input2]"}} name Switch3 xpos 765 ypos 271 } Dot { name Dot4 xpos 569 ypos 275 } BlackOutside { name BlackOutside2 xpos 535 ypos 407 } Gamma { value {{parent.hazeresponse}} name Gamma3 xpos 535 ypos 433 } Merge2 { inputs 2 operation mask name Merge8 xpos 535 ypos 647 disable {{"!\[exists parent.input1]"}} } Dot { name Dot2 xpos 569 ypos 1525 } set N6c661000 [stack 0] Dot { name Dot16 xpos 569 ypos 1570 } set N6c660c00 [stack 0] Dot { name Dot17 xpos 569 ypos 1617 } set N6c660800 [stack 0] Dot { name Dot18 xpos 569 ypos 1664 } set N6c660400 [stack 0] Dot { name Dot19 xpos 569 ypos 1709 } set N6c607c00 [stack 0] Dot { name Dot20 xpos 569 ypos 1754 } set N6c607800 [stack 0] Dot { name Dot21 xpos 569 ypos 1801 } set N6c607400 [stack 0] Dot { name Dot23 xpos 569 ypos 1847 } set N6c607000 [stack 0] Dot { name Dot25 xpos 569 ypos 1896 } set N6c606c00 [stack 0] Dot { name Dot26 xpos 569 ypos 1946 } Grade { channels alpha blackpoint 0.9 white_clamp true name Grade12 xpos 312 ypos 1936 } push $N6c606c00 Grade { channels alpha blackpoint 0.7 whitepoint 0.9 white_clamp true name Grade11 xpos 312 ypos 1886 } push $N6c607000 Grade { channels alpha blackpoint 0.5 whitepoint 0.7 white_clamp true name Grade8 xpos 312 ypos 1837 } push $N6c607400 Grade { channels alpha blackpoint 0.3 whitepoint 0.5 white_clamp true name Grade6 xpos 312 ypos 1791 } push $N6c607800 Grade { channels alpha blackpoint 0.25 whitepoint 0.3 white_clamp true name Grade5 xpos 312 ypos 1744 } push $N6c607c00 Grade { channels alpha blackpoint 0.2 whitepoint 0.25 white_clamp true name Grade15 xpos 312 ypos 1699 } push $N6c660400 Grade { channels alpha blackpoint 0.15 whitepoint 0.2 white_clamp true name Grade10 xpos 312 ypos 1654 } push $N6c660800 Grade { channels alpha blackpoint 0.1 whitepoint 0.15 white_clamp true name Grade18 xpos 311 ypos 1607 } push $N6c660c00 Grade { channels alpha blackpoint 0.05 whitepoint 0.1 white_clamp true name Grade17 xpos 311 ypos 1560 } push $N6c661000 Grade { channels alpha whitepoint 0.05 white_clamp true name Grade14 xpos 311 ypos 1515 } push $N6c69d000 Blur { inputs 1+1 channels {{{STMap1.channels}}} size {{parent.hazeamount*parent.mix*0.05}} name Blur2 xpos 82 ypos 1521 } Blur { inputs 1+1 channels {{{STMap1.channels}}} size {{parent.hazeamount*parent.mix*0.1}} name Blur3 xpos 82 ypos 1566 } Blur { inputs 1+1 channels {{{STMap1.channels}}} size {{parent.hazeamount*parent.mix*0.15}} name Blur4 xpos 82 ypos 1613 } Blur { inputs 1+1 channels {{{STMap1.channels}}} size {{parent.hazeamount*parent.mix*0.2}} name Blur5 xpos 82 ypos 1660 } Blur { inputs 1+1 channels {{{STMap1.channels}}} size {{parent.hazeamount*parent.mix*0.25}} quality 8 name Blur6 xpos 82 ypos 1705 } Blur { inputs 1+1 channels {{{STMap1.channels}}} size {{parent.hazeamount*parent.mix*0.3}} quality 8 name Blur7 xpos 82 ypos 1750 } Blur { inputs 1+1 channels {{{STMap1.channels}}} size {{parent.hazeamount*parent.mix*0.4}} quality 8 name Blur8 xpos 82 ypos 1797 } Blur { inputs 1+1 channels {{{STMap1.channels}}} size {{parent.hazeamount*parent.mix*0.6}} quality 8 name Blur10 xpos 82 ypos 1843 } Blur { inputs 1+1 channels {{{STMap1.channels}}} size {{parent.hazeamount*parent.mix*0.8}} quality 8 name Blur12 xpos 82 ypos 1892 } Blur { inputs 1+1 channels {{{STMap1.channels}}} size {{parent.hazeamount*parent.mix*0.9}} quality 8 name Blur13 xpos 82 ypos 1942 } CopyBBox { inputs 2 name CopyBBox4 xpos 82 ypos 2072 } BlackOutside { name BlackOutside3 xpos 82 ypos 2147 } Dot { name Dot59 xpos 116 ypos 2261 } set N6ad04800 [stack 0] Dot { name Dot56 xpos 381 ypos 2261 } Dot { name Dot1 xpos 381 ypos 2327 } set N6ac9fc00 [stack 0] Dot { name Dot44 xpos 508 ypos 2327 } Remove { operation keep channels {-rgba.red -rgba.green rgba.blue none} name Remove5 xpos 474 ypos 2377 } STMap { inputs 2 channels {{{STMap1.channels}}} uv rgb name STMap3 xpos 474 ypos 2436 } Dot { name Dot54 xpos 508 ypos 2613 } push 0 push $N6c69dc00 Multiply { value 0.5 name Multiply7 xpos 698 ypos 2374 } set N6ac9e800 [stack 0] Dot { name Dot58 xpos 834 ypos 2384 } push $N6c662c00 Dot { name Dot46 xpos 923 ypos 2556 } set N6ac9e000 [stack 0] Merge2 { inputs 2 operation from name Merge15 xpos 800 ypos 2552 disable {{-parent.ca<0}} } push $N6ac9fc00 Dot { name Dot43 xpos 248 ypos 2327 } Remove { operation keep channels {rgba.red -rgba.green -rgba.blue none} name Remove3 xpos 214 ypos 2377 } STMap { inputs 2 channels {{{STMap1.channels}}} uv rgb name STMap2 xpos 214 ypos 2552 } Dot { name Dot53 xpos 248 ypos 2613 } push $N6ac9e800 push $N6c662c00 Merge2 { inputs 2 operation from name Merge13 xpos 698 ypos 2495 disable {{parent.ca<0}} } push $N6ac9fc00 Remove { operation keep channels {-rgba.red rgba.green -rgba.blue none} name Remove4 xpos 347 ypos 2378 } STMap { inputs 2 channels {{{STMap1.channels}}} uv rgb name STMap4 xpos 347 ypos 2495 } Merge2 { inputs 3+1 operation plus name Merge14 xpos 347 ypos 2609 } Dot { name Dot55 xpos 381 ypos 2768 } push $N6ac9e000 Dot { name Dot57 xpos 923 ypos 2665 } push $N6ad04800 STMap { inputs 2 channels rgb uv rgb name STMap1 xpos 82 ypos 2661 } Copy { inputs 2 from0 rgba.red to0 rgba.red from1 rgba.green to1 rgba.green from2 rgba.blue to2 rgba.blue name Copy1 xpos 82 ypos 2745 disable {{parent.ca==0}} } Keymix { inputs 3 name Keymix1 xpos 82 ypos 2930 disable {{"!parent.limittobb+!\[exists parent.input1]*!\[exists parent.input2]"}} } Switch { inputs 2 which {{parent.previewnoisemap}} name Switch2 xpos 82 ypos 3056 } Output { name Output1 xpos 82 ypos 3184 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_HexColor.gizmo ================================================ Group { inputs 0 name HexColor knobChanged "\ndef int2hex(x):\n val = hex(x)\[2:]\n val = \"0\"+val if len(val)<2 else val \n return val.upper()\n\nn = nuke.thisNode()\nk = nuke.thisKnob()\n\nwith n:\n sample_forth = nuke.toNode(\"ColorspaceForth\")\n sample_back = nuke.toNode(\"ColorspaceBack\")\n \nif k.name() == \"color_float\":\n corrected_forth_r = nuke.sample(sample_forth, 'red', 0, 0)\n corrected_forth_g = nuke.sample(sample_forth, 'green', 0, 0)\n corrected_forth_b = nuke.sample(sample_forth, 'blue', 0, 0)\n \n n\['color_8bit_r'].setValue(int(round(corrected_forth_r*255)))\n n\['color_8bit_g'].setValue(int(round(corrected_forth_g*255)))\n n\['color_8bit_b'].setValue(int(round(corrected_forth_b*255)))\n \n n\['color_hex'].setValue(\"#\" + int2hex(int(round(255*corrected_forth_r))) + int2hex(int(round(255*corrected_forth_g))) + int2hex(int(round(255*corrected_forth_b))))\n \nelif k.name() == \"color_8bit_r\":\n corrected_back_r = nuke.sample(sample_back, 'red', 0, 0)\n n\['color_float'].setValue(corrected_back_r, 0)\n n\['color_hex'].setValue(\"#\" + int2hex(int(n\['color_8bit_r'].getValue())) + int2hex(int(n\['color_8bit_g'].getValue())) + int2hex(int(n\['color_8bit_b'].getValue())))\n \nelif k.name() == \"color_8bit_g\":\n corrected_back_g = nuke.sample(sample_back, 'green', 0, 0)\n n\['color_float'].setValue(corrected_back_g, 1)\n n\['color_hex'].setValue(\"#\" + int2hex(int(n\['color_8bit_r'].getValue())) + int2hex(int(n\['color_8bit_g'].getValue())) + int2hex(int(n\['color_8bit_b'].getValue())))\n \nelif k.name() == \"color_8bit_b\":\n corrected_back_b = nuke.sample(sample_back, 'blue', 0, 0)\n n\['color_float'].setValue(corrected_back_b, 2)\n n\['color_hex'].setValue(\"#\" + int2hex(int(n\['color_8bit_r'].getValue())) + int2hex(int(n\['color_8bit_g'].getValue())) + int2hex(int(n\['color_8bit_b'].getValue())))\n\nelif k.name() == \"color_hex\":\n hex_r = n\['color_hex'].getValue()\[1:3]\n hex_g = n\['color_hex'].getValue()\[3:5]\n hex_b = n\['color_hex'].getValue()\[5:7]\n \n int_r = int(hex_r, 16)\n int_g = int(hex_g, 16)\n int_b = int(hex_b, 16)\n \n n\['color_8bit_r'].setValue(int_r)\n n\['color_8bit_g'].setValue(int_g)\n n\['color_8bit_b'].setValue(int_b)\n \n corrected_back_r = nuke.sample(sample_back, 'red', 0, 0)\n corrected_back_g = nuke.sample(sample_back, 'green', 0, 0)\n corrected_back_b = nuke.sample(sample_back, 'blue', 0, 0)\n \n n\['color_float'].setValue(corrected_back_r, 0)\n n\['color_float'].setValue(corrected_back_g, 1)\n n\['color_float'].setValue(corrected_back_b, 2)\n\nmyHex = n\['color_hex'].getValue()\[1:] + \"00\"\nnukeHex = int(myHex, 16)\nn.knob('tile_color').setValue(nukeHex)\n" tile_color 0xff000000 label "\[value this.color_hex]" note_font_color 0xff selected true addUserKnob {20 User l "Color Modes"} addUserKnob {26 title l "" +STARTLINE T "HexColor v1.0"} addUserKnob {26 divider_general l " "} addUserKnob {41 format l Format T OutputColor.format} addUserKnob {41 colorspace l Colorspace t "sRGB should work in the most cases. I.E. converting a web #hex color to Nuke's linear workspace.\nChanging the colorspace does not update the colors immediately since the reference point is missing. Change a color value to apply the changes to the other color values respectively." T ColorspaceForth.colorspace_out} addUserKnob {26 divider_color l " "} addUserKnob {1 color_hex l Hex t "requires a hashtag # at the beginning"} color_hex #FF0000 addUserKnob {18 color_float l Float t "This value is used to color the output image"} color_float {1 0 0} addUserKnob {6 color_float_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 color_8bit_label l 8bit T ""} addUserKnob {3 color_8bit_r l "R" -STARTLINE} color_8bit_r 255 addUserKnob {3 color_8bit_g l "G" -STARTLINE} addUserKnob {3 color_8bit_b l "B" -STARTLINE} addUserKnob {20 About} addUserKnob {26 title_1 l "" +STARTLINE T "HexColor v1.0"} addUserKnob {26 author l "" +STARTLINE T "by Nikolai Wüstemann"} addUserKnob {26 ""} addUserKnob {26 description l Description T "- This Node workes like a regular Constant.\n- Changing one color value changes all other values respectively \n- Colorspace conversions are taken into consideration\n- This is necessary to produce a valid represtation of i.E. web #hex colors in Nuke."} } Constant { inputs 0 channels rgb color {{"\[value this.parent.color_8bit_r]/255"} {"\[value this.parent.color_8bit_g]/255"} {"\[value this.parent.color_8bit_b]/255"} 0} name ConversionColor xpos 394 ypos -112 } Colorspace { colorspace_in sRGB name ColorspaceBack selected true xpos 394 ypos 9 } Constant { inputs 0 channels rgb color {{"\[value this.parent.color_float.r]"} {"\[value this.parent.color_float.g]"} {"\[value this.parent.color_float.b]"} {"\[value this.parent.color_float.a]"}} name OutputColor xpos 557 ypos -116 } set Nfbef7900 [stack 0] Colorspace { colorspace_out sRGB name ColorspaceForth knobChanged "id = nuke.thisNode().knob(\"colorspace_out\").getValue()\nnuke.toNode(\"ColorspaceBack\").knob(\"colorspace_in\").setValue(int(id))" xpos 557 ypos 11 } push $Nfbef7900 Output { name Output1 xpos 741 ypos 14 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_HighPass.gizmo ================================================ Group { name HighPass knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == 'output1':\n if n.knob('output1').getValue() == 0:\n n.knob('HighPassAmount').setVisible(False)\n n.knob('HighContrastAmount').setVisible(True)\n else:\n n.knob('HighPassAmount').setVisible(True)\n n.knob('HighContrastAmount').setVisible(False)" tile_color 0xcc804eff note_font "Verdana Bold" note_font_color 0xffffffff selected true mapsize {0.15 0.15} addUserKnob {20 HighPass} addUserKnob {41 channels T MergeKeymix.also_merge} addUserKnob {4 output1 l Operation t "High Contrast, Makes details pop out while still maintaining some color\n\nHigh Pass, Makes details pop out more but becomes more grayscale" M {"High Contrast" "High Pass" "" "" "" "" "" "" ""}} addUserKnob {41 blurSize l "Blur Size" t "controls the blur amount of the input before the difference operation is calculated" T Blur6.size} addUserKnob {7 HighContrastAmount l Amount t "controls a multiply on the input before the difference is calculated\n\n(only works when operation is set to high contrast)" R 0.6 1} HighContrastAmount 0.8 addUserKnob {7 HighPassAmount l Amount t "controls an offset (add) on the input before the difference is calculated\n\n(only works when operation is set to high pass)" +HIDDEN R -0.3 0} HighPassAmount -0.01 addUserKnob {7 postMult l "Post Mult" R 0 4} postMult 1 addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask -STARTLINE T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator T "Tony Lyons"} addUserKnob {26 desc l Description: t "blurs image and minuses with original, producing a sharpened highpass image\n\nGood for use as a sharpen tool\nvery useful as an aid to trackers and as a viewer input to check for errors" T HighPass} addUserKnob {26 ver l Version: T v05} } Input { inputs 0 name Inputmask xpos 99 ypos 428 number 1 } Dot { name Dot4 label Mask note_font_size 41 xpos 133 ypos 481 } Dot { name Dot6 note_font_size 41 xpos 133 ypos 581 } Input { inputs 0 name Inputimg xpos -273 ypos -335 } AddChannels { channels rgba name AddChannels1 xpos -273 ypos -264 } Dot { name Dot8 note_font_size 41 xpos -239 ypos -114 } set Ne5199a80 [stack 0] Dot { name Dot3 note_font_size 41 xpos -239 ypos 43 } set Ne519d820 [stack 0] Dot { name Dot1 note_font_size 41 xpos -367 ypos 43 } Blur { size 8 name Blur6 xpos -401 ypos 84 } set Ne27e6090 [stack 0] Grade { channels all add {{parent.HighPassAmount}} black_clamp false name Grade11 xpos -504 ypos 139 } push $Ne27e6090 Grade { channels all multiply {{parent.HighContrastAmount}} black_clamp false name Grade1 xpos -401 ypos 138 } Switch { inputs 2 which {{"parent.output1==1 ? 1 : 0"}} name Switch1 xpos -401 ypos 192 } Dot { name Dot5 xpos -367 ypos 244 } push $Ne519d820 Merge2 { inputs 2 operation from Achannels none Bchannels none output none also_merge all name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -273 ypos 237 } Multiply { value {{parent.postMult*4}} name Multiply1 label "\[value value]" xpos -273 ypos 300 } Dot { name Dot17 label A note_font_size 41 xpos -239 ypos 493 } push $Ne5199a80 Dot { name Dot9 note_font_size 41 xpos -580 ypos -114 } Dot { name Dot18 label B note_font_size 41 xpos -580 ypos 490 } Dot { name Dot7 note_font_size 41 xpos -580 ypos 581 } Merge2 { inputs 2+1 operation copy bbox B Achannels none Bchannels none output none also_merge rgb name MergeKeymix xpos -273 ypos 574 } Output { name Output1 xpos -273 ypos 650 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_HighlightSuppress.gizmo ================================================ Group { name HighlightSuppress tile_color 0x5c7fc0ff note_font "Verdana Bold" note_font_color 0xffffffff selected true addUserKnob {20 LazyTonemap} addUserKnob {41 in l channels T Shuffle3.in} addUserKnob {26 ""} addUserKnob {7 wp l Whitepoint R 1 10} wp 4 addUserKnob {41 white l gain T Grade1.white} addUserKnob {41 gamma T Grade1.gamma} addUserKnob {26 ""} addUserKnob {7 affectedArea l "Limit Affected Area"} addUserKnob {6 reverse +STARTLINE} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask -STARTLINE T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 unpremult l "(un)premult? by" T Unpremult1.alpha} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {20 info l Info} addUserKnob {26 createdBy l "Created By: " T "Iiro Harra - Lazy_Tonemap"} addUserKnob {26 modifiedBy l "Modified By:" T "Tony Lyons"} addUserKnob {26 desc l Name: t "Limits and normalizes highlights of image, simulating a soft white falloff. \n\nHigher the whitepoint, the darker the whites\n\nCan limit effect to not affect lower values" T HighlightSuppress} addUserKnob {26 ver l Version: T v03} } Input { inputs 0 name Inputmask xpos 402 ypos 309 number 1 } Dot { name Dot5 label Mask note_font_size 41 xpos 436 ypos 442 } Dot { name Dot4 note_font_size 41 xpos 436 ypos 542 } Input { inputs 0 name Input xpos 0 ypos -471 } Dot { name Dot1 note_font_size 41 xpos 34 ypos -375 } set N3154ebb0 [stack 0] Unpremult { channels all alpha -rgba.alpha name Unpremult1 xpos 0 ypos -290 } Dot { name Dot11 note_font_size 41 xpos 34 ypos -237 } set N315594e0 [stack 0] Shuffle { in rgb black red white green red2 blue green2 alpha name Shuffle3 label "\[value in]" xpos 0 ypos -187 } Remove { operation keep channels rgba name Remove3 xpos 0 ypos -155 } Dot { name Dot6 note_font_size 41 xpos 34 ypos -107 } set N31571d60 [stack 0] Dot { name Dot9 note_font_size 41 xpos 182 ypos -107 } Keyer { operation "luminance key" range {0 {parent.affectedArea} 1 1} name Keyer1 xpos 148 ypos -18 } set N30d740f0 [stack 0] push $N31571d60 Grade { black_clamp false name Grade1 xpos 0 ypos -49 disable {{parent.reverse}} } Colorspace { colorspace_out CIE-Yxy name Colorspace4 xpos 0 ypos -25 } Dot { name Dot7 note_font_size 41 xpos 34 ypos 23 } set N314cc070 [stack 0] Expression { inputs 1+1 expr0 "(parent.knob.wp*((((r**2)-2*r+1)*(parent.knob.wp**2)+4*r)**.5) + (r-1) * (parent.knob.wp**2)) / 2" channel1 {-rgba.red -rgba.green -rgba.blue none} expr1 "(parent.knob.wp*((((g**2)-2*g+1)*(parent.knob.wp**2)+4*g)**.5) + (g-1) * (parent.knob.wp**2)) / 2" channel2 {-rgba.red -rgba.green -rgba.blue none} expr2 "(parent.knob.wp*((((b**2)-2*b+1)*(parent.knob.wp**2)+4*b)**.5) + (b-1) * (parent.knob.wp**2)) / 2" expr3 a name Tonemap_whitepoint1 xpos 60 ypos 71 } push $N30d740f0 push $N314cc070 Expression { inputs 1+1 expr0 "(r*(1+(r/(parent.knob.wp**2))) ) / (1+r)" channel1 {-rgba.red -rgba.green -rgba.blue none} expr1 "(g*(1+(g/(parent.knob.wp**2))) ) / (1+g)" channel2 {-rgba.red -rgba.green -rgba.blue none} expr2 "(b*(1+(b/(parent.knob.wp**2))) ) / (1+b)" expr3 a name Tonemap_whitepoint xpos -63 ypos 71 } Switch { inputs 2 which {{parent.reverse}} name Switch3 xpos 0 ypos 138 } Colorspace { colorspace_in CIE-Yxy name Colorspace3 xpos 0 ypos 186 } Grade { white {{parent.Grade1.white}} gamma {{parent.Grade1.gamma}} reverse true black_clamp false name Grade2 xpos 0 ypos 210 disable {{!parent.reverse}} } push $N315594e0 Dot { name Dot10 note_font_size 41 xpos -123 ypos -237 } Dot { name Dot8 note_font_size 41 xpos -123 ypos 304 } ShuffleCopy { inputs 2 in2 none alpha alpha2 black red white green red2 blue green2 alpha out none out2 {{{parent.Shuffle3.in}}} name ShuffleCopy1 selected true xpos 0 ypos 301 } Premult { channels all alpha {{{parent.Unpremult1.alpha}}} name Premult1 xpos 0 ypos 346 } Dot { name Dot17 label A note_font_size 41 xpos 34 ypos 454 } push $N3154ebb0 Dot { name Dot2 note_font_size 41 xpos -351 ypos -375 } Dot { name Dot18 label B note_font_size 41 xpos -351 ypos 451 } Dot { name Dot3 note_font_size 41 xpos -351 ypos 542 } Merge2 { inputs 2+1 operation copy bbox B Achannels none Bchannels none output none also_merge all name MergeKeymix xpos 0 ypos 535 } Output { name Output1 xpos 0 ypos 716 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ID_Extractor.gizmo ================================================ Group { name ID_Extractor tile_color 0x3d3d3dff label "\[value Achannels]\n\[value Red]\n\[value Green]\n\[value Blue]" note_font "Verdana Bold" note_font_color 0xb8d2dfff selected true addUserKnob {20 ID_Extract} addUserKnob {41 Achannels l "ID channel" t "Pick the layer you want to extract from" T ID2.Achannels} addUserKnob {26 text l " " T "Name your channels something:"} addUserKnob {1 Red l "Red" t "Enter a name for your red channel"} addUserKnob {1 Green l "Green" t "Enter a name for your green channel"} addUserKnob {1 Blue l "Blue" t "Enter a name for your blue channel"} addUserKnob {26 text_1 l " " T "Extract your channels into Stamps:"} addUserKnob {22 extractRed l "Extract Red" t "Extract Red Channel into Stamp" T "import NST_ID_Extractor\nNST_ID_Extractor.extractRed()" +STARTLINE} addUserKnob {22 extractGreen l " Extract Green" t "Extract Blue Channel into Stamp" -STARTLINE T "import NST_ID_Extractor\nNST_ID_Extractor.extractGreen()"} addUserKnob {22 extractBlue l "Extract Blue" t "Extract Blue Channel into Stamp" -STARTLINE T "import NST_ID_Extractor\nNST_ID_Extractor.extractBlue()"} addUserKnob {26 ""} addUserKnob {22 extractAll l "Extract All" t "Extract all 3 Channels at once" T "import NST_ID_Extractor\nNST_ID_Extractor.extractAll()" +STARTLINE} addUserKnob {22 set l "Set Names" t "Reset the names of Existing Stamp outputs" -STARTLINE T "import NST_ID_Extractor\nNST_ID_Extractor.set()"} addUserKnob {22 reset l "Clear Names" t "Clear all 3 name text input fields" -STARTLINE T "import NST_ID_Extractor\nNST_ID_Extractor.reset()"} } Input { inputs 0 name Input1 xpos -576 ypos -418 } Dot { name Dot1 xpos -542 ypos -354 } set N4be96400 [stack 0] push $N4be96400 Dot { name Dot2 xpos -667 ypos -354 } Remove { name Remove1 xpos -701 ypos -209 } Merge2 { inputs 2 Achannels rgb Bchannels none output rgb name ID2 tile_color 0xffffffff label "R=\[value Red]\nG=\[value Green]\nB=\[value Blue]\nframe \[value postage_stamp_frame]" note_font_size 15 xpos -576 ypos -234 postage_stamp_frame 1001 } Output { name Output1 xpos -576 ypos -124 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_IIDistort.gizmo ================================================ Group { inputs 2 name IIDistort help "Recursuve IDistort Node, the vectors advect themselves multiple times, creating more different patterns than a regular IDistort node." addUserKnob {20 iidistort_tab l IIDistort} addUserKnob {7 scale l Scale t "Amount of vector advection" R 0 10} scale 1 addUserKnob {3 samples l "Number of Samples" t "Add samples for a smoother curve, reduce for faster results."} samples 10 addUserKnob {26 ""} addUserKnob {4 output l Output t "Choose the desired output.\n\nDistorted image: Image from img input distorted by vectors.\nModified Vectors: Vectors modified so that feeding these in a regular IDistort would produce the same result as this node's distorted image.\nSTMap: An STMap whch would match this node's distortion." M {"Distorted image" "Modified Vectors" STMap}} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.1 - Erwan Leroy - Github"} } Input { inputs 0 name vectors xpos 223 ypos -56 number 1 } BlinkScript { ProgramGroup 1 KernelDescription "2 \"FlowKernel\" iterate pixelWise 831e6c85b5efa3aa8b859b0c422c683ec13d73f561e57321e66c972e8e807f77 2 \"vectors\" Read Random \"dst\" Write Point 2 \"samples\" Int 1 AAAAAA== \"strength\" Float 1 AAAAAA== 2 \"samples\" 1 1 \"strength\" 1 1 0" kernelSource "kernel FlowKernel : ImageComputationKernel\n\{\n Image vectors; // the input image\n Image dst; // the output image\n\n param:\n int samples;\n float strength;\n\n void process(int2 pos) \{\n float2 fpos = float2(pos.x, pos.y);\n float4 disp;\n\n for (int i=0; iGithub"} } Input { inputs 0 name Input xpos -303 ypos 114 } set Ne07e7c00 [stack 0] Shuffle { name UV_Channel xpos -163 ypos 114 } Expression { expr0 (r+x+0.5)/width expr1 (g+y+0.5)/height channel2 {-rgba.red -rgba.green -rgba.blue none} channel3 {none none none -rgba.alpha} name Vectors_to_UV xpos -163 ypos 228 } push $Ne07e7c00 ShuffleCopy { inputs 2 in2 none red red green green alpha black out {{{parent.UV_Channel.in}}} name ShuffleCopy1 xpos -303 ypos 228 } Output { name Output1 xpos -303 ypos 299 } end_group set Nf9650480 [stack 0] push $Nf9650480 push $Ne07e6000 Dot { name Dot1 xpos 257 ypos 171 } push $Nf9650480 Input { inputs 0 name img xpos 515 ypos -53 } STMap { inputs 2 uv rgb name STMap1 xpos 515 ypos 59 } Switch { inputs 3 which {{parent.output}} name Switch1 xpos 515 ypos 167 } Output { name Output1 xpos 515 ypos 249 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ITransformU.gizmo ================================================ Group { name ITransformU tile_color 0xa57aaaff selected true addUserKnob {20 "" l Transform} addUserKnob {14 AdjBBox1_numpixels l "Add Pixels" +INVISIBLE R 0 100} AdjBBox1_numpixels 1024 addUserKnob {41 channels T IDistort2.channels} addUserKnob {6 blackOutside_1 l "Black Outside Before?" +STARTLINE} addUserKnob {41 matrix T Transform1.matrix} addUserKnob {41 translate T Transform1.translate} addUserKnob {41 rotate T Transform1.rotate} addUserKnob {41 scale T Transform1.scale} addUserKnob {41 skewX l "skew X" T Transform1.skewX} addUserKnob {41 skewY l "skew Y" T Transform1.skewY} addUserKnob {41 center T Transform1.center} addUserKnob {22 setCenter l "Set Center" -STARTLINE T "n = nuke.thisGroup()\nw= n.width()\nh=n.height()\nn\['center'].setValue(\[w/2,h/2])"} addUserKnob {41 filter_1 l filter T IDistort2.filter} addUserKnob {41 clamp T Transform1.clamp} addUserKnob {26 ""} addUserKnob {6 cropToFormat l "Crop To Format" +STARTLINE} addUserKnob {6 blackOutside2 l "Black Outside After" -STARTLINE} addUserKnob {14 addPixels l "Add Pixels" R 0 100} addUserKnob {41 mix T Transform3.mix} } Input { inputs 0 name ctrlMask xpos -40 ypos -338 number 1 } set Nb4dbd80 [stack 0] Shuffle { red alpha green alpha blue alpha alpha black name Shuffle1 xpos -40 ypos -25 } set Nb4e0070 [stack 0] Input { inputs 0 name img xpos -517 ypos -411 } BlackOutside { name BlackOutside1 xpos -517 ypos -357 disable {{!parent.blackOutside_1}} } Dot { name Dot5 note_font_size 41 xpos -483 ypos -294 } set Nb4fd6b0 [stack 0] Remove { name Remove1 xpos -210 ypos -304 } set Nb502b80 [stack 0] push $Nb4dbd80 Merge2 { inputs 2 Achannels {-rgba.red -rgba.green -rgba.blue -rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue -rgba.alpha} output {-rgba.red -rgba.green -rgba.blue -rgba.alpha} name Merge3 xpos -111 ypos -258 } AdjBBox { numpixels {{parent.AdjBBox1_numpixels}} name AdjBBox1 xpos -111 ypos -232 } push $Nb502b80 CopyBBox { inputs 2 name CopyBBox2 xpos -210 ypos -232 } Expression { expr0 x expr1 y name Expression1 xpos -210 ypos -176 } set Nb52e070 [stack 0] Dot { name Dot2 xpos -286 ypos -172 } TransformMasked { channels rgba translate {{parent.Transform1.translate} {parent.Transform1.translate}} rotate {{parent.Transform1.rotate}} scale {{parent.Transform1.scale} {parent.Transform1.scale}} skewX {{parent.Transform1.skewX}} skewY {{parent.Transform1.skewY}} skew_order {{Transform1.skew_order}} center {{parent.Transform1.center} {parent.Transform1.center}} filter {{Transform1.filter}} motionblur {{parent.Transform1.motionblur}} shutter {{parent.Transform1.shutter}} shutteroffset {{Transform1.shutteroffset}} shuttercustomoffset {{parent.Transform1.shuttercustomoffset}} name Transform3 xpos -320 ypos -121 } push $Nb52e070 Merge2 { inputs 2 operation minus bbox B name Merge1 xpos -210 ypos -121 } Merge2 { inputs 2 operation multiply bbox B name Merge2 xpos -210 ypos -25 } set Nb564c80 [stack 0] Dot { name Dot1 xpos -270 ypos -21 } Dot { name Dot3 xpos -270 ypos 423 } push $Nb4fd6b0 Dot { name Dot4 xpos -483 ypos 46 } set Nb57e7a0 [stack 0] Copy { inputs 2 from0 rgba.red to0 rgba.red from1 rgba.green to1 rgba.green name Copy2 xpos -517 ypos 407 } IDistort { channels none name IDistort1 xpos -517 ypos 457 } push $Nb4fd6b0 push $Nb4fd6b0 TransformMasked { channels rgba translate {{parent.Transform1.translate} {parent.Transform1.translate}} rotate {{parent.Transform1.rotate}} scale {{parent.Transform1.scale} {parent.Transform1.scale}} skewX {{parent.Transform1.skewX}} skewY {{parent.Transform1.skewY}} skew_order {{Transform1.skew_order}} center {{parent.Transform1.center} {parent.Transform1.center}} filter {{Transform1.filter}} motionblur {{parent.Transform1.motionblur}} shutter {{parent.Transform1.shutter}} shutteroffset {{Transform1.shutteroffset}} shuttercustomoffset {{parent.Transform1.shuttercustomoffset}} name Transform2 xpos -446 ypos -202 } Merge2 { inputs 2 name Merge4 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -446 ypos -123 } Crop { box {0 0 {input.width} {input.height}} name Crop1 xpos -446 ypos 182 disable {{!parent.cropToFormat}} addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } AdjBBox { numpixels {{parent.addPixels} {parent.addPixels}} name AdjBBox3 xpos -446 ypos 208 } Dot { name Dot6 note_font_size 41 xpos -412 ypos 364 } push $Nb4e0070 push $Nb564c80 push $Nb57e7a0 Copy { inputs 2 from0 rgba.red to0 forward.u from1 rgba.green to1 forward.v bbox A name Copy1 xpos -210 ypos 30 } set Nb13fce0 [stack 0] Merge2 { inputs 2 Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge5 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -40 ypos 108 } push $Nb13fce0 CopyBBox { inputs 2 name CopyBBox1 xpos -210 ypos 114 } AdjBBox { numpixels {{parent.addPixels} {parent.addPixels}} name AdjBBox2 xpos -210 ypos 140 } IDistort { uv forward name IDistort2 selected true xpos -210 ypos 187 } CopyBBox { inputs 2 name CopyBBox3 xpos -210 ypos 360 } Remove { channels none name Remove2 xpos -210 ypos 419 } Copy { inputs 2 from0 -rgba.alpha to0 -rgba.alpha bbox B name Copy3 xpos -210 ypos 457 } BlackOutside { name BlackOutside2 xpos -210 ypos 538 disable {{!parent.blackOutside2}} } Output { name Output1 xpos -210 ypos 634 } Transform { inputs 0 center {1220 901} black_outside false name Transform1 label "expresison link this\nto avoid st map overlay" xpos 51 ypos -201 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ImagePlane3D.gizmo ================================================ Group { name ImagePlane3D knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == 'inputChange':\n n\['distanceAxis'].setVisible(n\[\"isOn\"].value())\n n.knob('distance').setVisible(not n\[\"isOn\"].value())\n \nif k.name() == 'result':\n result = n.knob('result').getValue()\n if result == 0:\n n.knob('samples').setVisible(True)\n n.knob('motionblur').setVisible(False)\n elif result == 1 or result == 2 or result == 3 :\n n.knob('samples').setVisible(False)\n n.knob('motionblur').setVisible(True)\n" tile_color 0x634966ff label "dist: \[value distance]" note_font "DejaVu Sans" note_font_color 0xffffffff selected true addUserKnob {20 imagePlane3D l ImagePlane3D} addUserKnob {26 instructions l Instructions: T "1.) Choose preview (Result) method.\n2.) Set Ref Frame and Distance\n3.) Bake FrameRange\n4.) Export CornerPin\n\nUse this like cardToTrack, for exports\nNot recommended to be plugged into stream"} addUserKnob {26 text_1 l " " T " "} addUserKnob {4 output l "Output:" M {Stabilize Matchmove "" "" ""}} addUserKnob {4 result l Result: M {"3D Projection Setup (slow, accurate)" "Card3D Setup (fast, inaccurate)" "Live (Reconcile3D) (fast, buggy)" "Baked (Cornerpin) (best)" "" "" "" "" "" "" "" ""}} addUserKnob {26 status l " Status:" T " Is NOT Baked"} addUserKnob {3 refFrame l "Ref Frame"} refFrame 1001 addUserKnob {22 setRefFrame l "Set Ref Frame" -STARTLINE T "n = nuke.thisNode()\nref = n.knob('refFrame')\nframe = nuke.frame()\n\nref.setValue(frame)"} addUserKnob {1 operation +INVISIBLE} operation "\[value refFrame]" addUserKnob {7 distance l DistanceFromCam R 0 1000} distance 500 addUserKnob {22 bakeFramerange l "Bake FrameRange" T "import time\nimport threading\n\nn = nuke.thisNode()\n#Define this node\n\nstatus = n.knob(\"status\")\nresult = n.knob('result')\n\nr1 = nuke.toNode(\"Reconcile3DTL\")\nr2 = nuke.toNode(\"Reconcile3DTR\")\nr3 = nuke.toNode(\"Reconcile3DBL\")\nr4 = nuke.toNode(\"Reconcile3DBR\")\nrL = \[r1,r2,r3,r4]\n# Define reconcile3D nodes\n\n#bcg = n.knob(\"bakeColors\")\n\ncps = nuke.toNode(\"CornerPin2DBakedStabilize\")\ncpm = nuke.toNode(\"CornerPin2DBakedMatchmove\")\n# Define cornerpin node\n\nfirst_frame = int(nuke.Root()\['first_frame'].getValue())\nlast_frame = int(nuke.Root()\['last_frame'].getValue())\n# Grab first and last frame from root\n\np = nuke.Panel(\"Execute on FrameRange\")\np.addSingleLineInput('First Frame', first_frame)\np.addSingleLineInput('Last Frame', last_frame)\np.addSingleLineInput('Increment', 1)\nif p.show():\n# Create user input panel\n \n ff = int(p.value(\"First Frame\"))\n lf = int(p.value(\"Last Frame\"))\n i = int(p.value(\"Increment\"))\n # Define first, last, increment from user input panel\n \n #k = \"status\"\n l = \" Is Baked on Frames:\" + \" \" + str(ff) + \"-\" + str(lf)\n status.setValue(l)\n # Change status of node\n \n result.setValue(3)\n \n with n:\n r1\[\"calc_output\"].setValue(0)\n r2\[\"calc_output\"].setValue(0)\n r3\[\"calc_output\"].setValue(0)\n r4\[\"calc_output\"].setValue(0)\n # turn off live status of reconcile3Ds\n \n r1\[\"output\"].clearAnimated()\n r1\[\"outputxyz\"].clearAnimated()\n r2\[\"output\"].clearAnimated()\n r2\[\"outputxyz\"].clearAnimated()\n r3\[\"output\"].clearAnimated()\n r3\[\"outputxyz\"].clearAnimated()\n r4\[\"output\"].clearAnimated()\n r4\[\"outputxyz\"].clearAnimated()\n # Clear any data from all Reconcile3D nodes\n \n def execute(first,last,inc):\n runMe = True\n while runMe == True:\n nuke.execute(r1,first,last,inc) \n nuke.execute(r2,first,last,inc)\n nuke.execute(r3,first,last,inc)\n nuke.execute(r4,first,last,inc)\n stop_event.set()\n runMe = False\n print ('Reconcile3Ds done')\n break\n # Define Reconcile3D execution function\n \n global stop_event \n stop_event = threading.Event()\n threading.Thread(target=execute, kwargs=dict(first=ff,last=lf,inc=i) ).start() \n while not stop_event.is_set():\n time.sleep(0.1)\n # run Reconcile3Ds with threading\n \n cps\[\"from4\"].copyAnimations(r1\[\"output\"].animations())\n cps\[\"from3\"].copyAnimations(r2\[\"output\"].animations())\n cps\[\"from1\"].copyAnimations(r3\[\"output\"].animations())\n cps\[\"from2\"].copyAnimations(r4\[\"output\"].animations())\n \n cpm\[\"to4\"].copyAnimations(r1\[\"output\"].animations())\n cpm\[\"to3\"].copyAnimations(r2\[\"output\"].animations())\n cpm\[\"to1\"].copyAnimations(r3\[\"output\"].animations())\n cpm\[\"to2\"].copyAnimations(r4\[\"output\"].animations())\n # copy reconcile3D values over to cornerpins\n \n r1\[\"output\"].clearAnimated()\n r1\[\"outputxyz\"].clearAnimated()\n r2\[\"output\"].clearAnimated()\n r2\[\"outputxyz\"].clearAnimated()\n r3\[\"output\"].clearAnimated()\n r3\[\"outputxyz\"].clearAnimated()\n r4\[\"output\"].clearAnimated()\n r4\[\"outputxyz\"].clearAnimated()\n # clear animation from live reconcile3Ds\n \n r1\[\"calc_output\"].setValue(1)\n r2\[\"calc_output\"].setValue(1)\n r3\[\"calc_output\"].setValue(1)\n r4\[\"calc_output\"].setValue(1)\n # make reconcile3ds live again\n " +STARTLINE} addUserKnob {22 clearBaked l "Clear Baked" -STARTLINE T "n = nuke.thisNode()\nw = n.width()\nh = n.height()\nresult = n.knob('result')\n\ncps = nuke.toNode(\"CornerPin2DBakedStabilize\")\ncpm = nuke.toNode(\"CornerPin2DBakedMatchmove\")\nstatus = n.knob(\"status\")\n\ncpsfrom1 = cps.knob(\"from1\")\ncpsfrom2 = cps.knob(\"from2\")\ncpsfrom3 = cps.knob(\"from3\")\ncpsfrom4 = cps.knob(\"from4\")\n\ncpmto1 = cpm.knob(\"to1\")\ncpmto2 = cpm.knob(\"to2\")\ncpmto3 = cpm.knob(\"to3\")\ncpmto4 = cpm.knob(\"to4\")\n\ncpsfrom1.clearAnimated()\ncpsfrom2.clearAnimated()\ncpsfrom3.clearAnimated()\ncpsfrom4.clearAnimated()\ncpmto1.clearAnimated()\ncpmto2.clearAnimated()\ncpmto3.clearAnimated()\ncpmto4.clearAnimated()\n\ncpsfrom1.setValue(0,0)\ncpsfrom1.setValue(0,1)\ncpsfrom2.setValue(w,0)\ncpsfrom2.setValue(0,1)\ncpsfrom3.setValue(w,0)\ncpsfrom3.setValue(h,1)\ncpsfrom4.setValue(0,0)\ncpsfrom4.setValue(h,1)\n\ncpmto1.setValue(0,0)\ncpmto1.setValue(0,1)\ncpmto2.setValue(w,0)\ncpmto2.setValue(0,1)\ncpmto3.setValue(w,0)\ncpmto3.setValue(h,1)\ncpmto4.setValue(0,0)\ncpmto4.setValue(h,1)\n\nstatus.setValue(\" Is NOT Baked\")\nresult.setValue(2)"} addUserKnob {22 exportBakedTrack l "Export Baked CornerPin" T "n = nuke.thisNode()\n\ncps = nuke.toNode(\"CornerPin2DBakedStabilize\")\ncpsName = str(n.name())\nrefFrame = int(n.knob(\"refFrame\").value())\ndist = n.knob(\"distance\").value()\noutput = n.knob('output').getValue()\n\ncpsfrom1 = cps.knob(\"from1\")\ncpsfrom2 = cps.knob(\"from2\")\ncpsfrom3 = cps.knob(\"from3\")\ncpsfrom4 = cps.knob(\"from4\")\n\ncpsto1 = cps.knob(\"to1\")\ncpsto2 = cps.knob(\"to2\")\ncpsto3 = cps.knob(\"to3\")\ncpsto4 = cps.knob(\"to4\")\n\nwith nuke.Root():\n posX = n.knob(\"xpos\").value()\n posY = n.knob(\"ypos\").value()\n nukescripts.clear_selection_recursive()\n \n cpn = None\n \n try: \n cpn = nuke.createNode('CProject')\n cpn.setName(\"CP_\" + cpsName + \"_\")\n cpn.knob('xpos').setValue(posX +100)\n cpn.knob('ypos').setValue(posY +70)\n cpn.autoplace()\n cpn.setInput(0, None)\n \n cpnto1 = cpn.knob('to1')\n cpnto2 = cpn.knob('to2')\n cpnto3 = cpn.knob('to3')\n cpnto4 = cpn.knob('to4')\n \n cpnfrom1 = cpn.knob('from1')\n cpnfrom2 = cpn.knob('from2')\n cpnfrom3 = cpn.knob('from3')\n cpnfrom4 = cpn.knob('from4')\n \n cpn.knob('refFrame').setValue(refFrame)\n \n cpnto1.copyAnimations(cpsfrom1.animations())\n cpnto2.copyAnimations(cpsfrom2.animations())\n cpnto3.copyAnimations(cpsfrom3.animations())\n cpnto4.copyAnimations(cpsfrom4.animations())\n \n cpnfrom1.setValue(cpsto1.getValueAt(refFrame))\n cpnfrom2.setValue(cpsto2.getValueAt(refFrame))\n cpnfrom3.setValue(cpsto3.getValueAt(refFrame))\n cpnfrom4.setValue(cpsto4.getValueAt(refFrame))\n \n cpn.knob('note_font_size').setValue(11)\n cpn\['label'].setValue('dist: \{\}'.format(dist))\n cpn.knob('stabilize').setValue(1)\n cpn.knob('stabilize').setValue(1-output)\n cpn.knob('element').setValue(cpsName)\n \n except RuntimeError:\n pass\n \n if not cpn:\n cpn = nuke.createNode('CornerPin2D')\n cpn.setName(cpsName + \"_CnrPin\")\n cpn.knob('xpos').setValue(posX +100)\n cpn.knob('ypos').setValue(posY +70)\n cpn.autoplace()\n cpn.setInput(0, None)\n \n cpnto1 = cpn.knob('to1')\n cpnto2 = cpn.knob('to2')\n cpnto3 = cpn.knob('to3')\n cpnto4 = cpn.knob('to4')\n \n cpnfrom1 = cpn.knob('from1')\n cpnfrom2 = cpn.knob('from2')\n cpnfrom3 = cpn.knob('from3')\n cpnfrom4 = cpn.knob('from4')\n \n cpnfrom1.copyAnimations(cpsfrom1.animations())\n cpnfrom2.copyAnimations(cpsfrom2.animations())\n cpnfrom3.copyAnimations(cpsfrom3.animations())\n cpnfrom4.copyAnimations(cpsfrom4.animations())\n \n tab = nuke.Tab_Knob('settings', 'Settings')\n \n setCurrentFrameBtn = nuke.PyScript_Knob(\"setCurrentFrame\", \"Set to Current Frame\")\n setCurrentFrameBtn.setCommand('n = nuke.thisNode()\\nrefFrame = n.knob(\"refFrame\")\\nrefFrame.setValue(nuke.frame())\\nrefFrame = refFrame.getValue()\\noutput = n.knob(\"output\")\\nto1 = n.knob(\"to1\")\\nto2 = n.knob(\"to2\")\\nto3 = n.knob(\"to3\")\\nto4 = n.knob(\"to4\")\\nfrom1 = n.knob(\"from1\")\\nfrom2 = n.knob(\"from2\")\\nfrom3 = n.knob(\"from3\")\\nfrom4 = n.knob(\"from4\")\\nif output.getValue() == 0:\\n to1.setValue(from1.getValueAt(refFrame))\\n to2.setValue(from2.getValueAt(refFrame))\\n to3.setValue(from3.getValueAt(refFrame))\\n to4.setValue(from4.getValueAt(refFrame))\\nif output.getValue() == 1:\\n from1.setValue(to1.getValueAt(refFrame))\\n from2.setValue(to2.getValueAt(refFrame))\\n from3.setValue(to3.getValueAt(refFrame))\\n from4.setValue(to4.getValueAt(refFrame))')\n \n setFrameBtn = nuke.PyScript_Knob('setFrame', 'Set Frame')\n setFrameBtn.setCommand('n = nuke.thisNode()\\nrefFrame = n.knob(\\\"refFrame\\\").getValue()\\noutput = n.knob(\\\"output\\\")\\nto1 = n.knob(\\\"to1\\\")\\nto2 = n.knob(\\\"to2\\\")\\nto3 = n.knob(\\\"to3\\\")\\nto4 = n.knob(\\\"to4\\\")\\nfrom1 = n.knob(\\\"from1\\\")\\nfrom2 = n.knob(\\\"from2\\\")\\nfrom3 = n.knob(\\\"from3\\\")\\nfrom4 = n.knob(\\\"from4\\\")\\nif output.getValue() == 0:\\n to1.setValue(from1.getValueAt(refFrame))\\n to2.setValue(from2.getValueAt(refFrame))\\n to3.setValue(from3.getValueAt(refFrame))\\n to4.setValue(from4.getValueAt(refFrame))\\nif output.getValue() == 1:\\n from1.setValue(to1.getValueAt(refFrame))\\n from2.setValue(to2.getValueAt(refFrame))\\n from3.setValue(to3.getValueAt(refFrame))\\n from4.setValue(to4.getValueAt(refFrame))')\n \n StabBtn = nuke.PyScript_Knob(\"stabilize\", \"Stabilize\")\n StabBtn.setFlag(nuke.STARTLINE)\n StabBtn.setCommand('n = nuke.thisNode()\\nstab = n.knob(\"stabilize\")\\nmatch = n.knob(\"matchmove\")\\noutput = n.knob(\"output\")\\nrefFrame = n.knob(\"refFrame\").getValue()\\nif output.getValue() == 1:\\n stab.setLabel(\"Stabilize\")\\n match.setLabel(\"Matchmove\")\\n to1 = n.knob(\"to1\")\\n to2 = n.knob(\"to2\")\\n to3 = n.knob(\"to3\")\\n to4 = n.knob(\"to4\")\\n from1 = n.knob(\"from1\")\\n from2 = n.knob(\"from2\")\\n from3 = n.knob(\"from3\")\\n from4 = n.knob(\"from4\")\\n from1.copyAnimations(to1.animations())\\n from2.copyAnimations(to2.animations())\\n from3.copyAnimations(to3.animations())\\n from4.copyAnimations(to4.animations())\\n to1.clearAnimated()\\n to2.clearAnimated()\\n to3.clearAnimated()\\n to4.clearAnimated()\\n to1.setValue(from1.getValueAt(refFrame))\\n to2.setValue(from2.getValueAt(refFrame))\\n to3.setValue(from3.getValueAt(refFrame))\\n to4.setValue(from4.getValueAt(refFrame))\\n output.setValue(0)')\n \n MatchBtn = nuke.PyScript_Knob(\"matchmove\", \"Matchmove\")\n MatchBtn.setCommand('n = nuke.thisNode()\\nstab = n.knob(\"stabilize\")\\nmatch = n.knob(\"matchmove\")\\noutput = n.knob(\"output\")\\nrefFrame = n.knob(\"refFrame\").getValue()\\nif output.getValue() == 0:\\n stab.setLabel(\"Stabilize\")\\n match.setLabel(\"Matchmove\")\\n to1 = n.knob(\"to1\")\\n to2 = n.knob(\"to2\")\\n to3 = n.knob(\"to3\")\\n to4 = n.knob(\"to4\")\\n from1 = n.knob(\"from1\")\\n from2 = n.knob(\"from2\")\\n from3 = n.knob(\"from3\")\\n from4 = n.knob(\"from4\")\\n to1.copyAnimations(from1.animations())\\n to2.copyAnimations(from2.animations())\\n to3.copyAnimations(from3.animations())\\n to4.copyAnimations(from4.animations())\\n from1.clearAnimated()\\n from2.clearAnimated()\\n from3.clearAnimated()\\n from4.clearAnimated()\\n from1.setValue(to1.getValueAt(refFrame))\\n from2.setValue(to2.getValueAt(refFrame))\\n from3.setValue(to3.getValueAt(refFrame))\\n from4.setValue(to4.getValueAt(refFrame))\\n output.setValue(1)')\n \n pulldownStatus = nuke.Enumeration_Knob('output', 'Output', \['Stabilized', 'Matchmoved'])\n \n intFrame = nuke.Int_Knob(\"refFrame\", \"Ref Frame\")\n intFrame.setFlag(nuke.STARTLINE)\n cpn.addKnob(tab)\n \n cpn.addKnob(setCurrentFrameBtn)\n cpn.addKnob(intFrame)\n cpn.knob(\"refFrame\").setValue(refFrame)\n \n cpn.addKnob(setFrameBtn)\n \n cpn.addKnob(StabBtn)\n cpn.addKnob(MatchBtn)\n \n cpn.addKnob(pulldownStatus)\n cpn.knob('output').setVisible(False)\n \n cpnto1.setValue(cpnfrom1.getValueAt(refFrame))\n cpnto2.setValue(cpnfrom2.getValueAt(refFrame))\n cpnto3.setValue(cpnfrom3.getValueAt(refFrame))\n cpnto4.setValue(cpnfrom4.getValueAt(refFrame))\n \n cpn\['label'].setValue('rf: \[value refFrame] dist: \{\}'.format(dist))\n " +STARTLINE} addUserKnob {22 exportLinkedTrack l "Export Linked CornerPin" -STARTLINE T "n = nuke.thisNode()\n\ncps = nuke.toNode(\"CornerPin2DBakedStabilize\")\nnName = str(n.name())\ncpsName = str(cps.name())\nrefFrame = int(n.knob(\"refFrame\").value())\ndist = n.knob(\"distance\").value()\noutput = n.knob('output').getValue()\n\ncpsfrom1 = cps.knob(\"from1\")\ncpsfrom2 = cps.knob(\"from2\")\ncpsfrom3 = cps.knob(\"from3\")\ncpsfrom4 = cps.knob(\"from4\")\n\nwith nuke.Root():\n posX = n.knob(\"xpos\").value()\n posY = n.knob(\"ypos\").value()\n \n\n cpn = None\n try: \n cpn = nuke.createNode('CProject')\n cpn.setName(\"CP_\" + nName + \"_\")\n cpn.knob('xpos').setValue(posX +100)\n cpn.knob('ypos').setValue(posY +70)\n cpn.autoplace()\n cpn.setInput(0, None)\n \n cpnto1 = cpn.knob('to1')\n cpnto2 = cpn.knob('to2')\n cpnto3 = cpn.knob('to3')\n cpnto4 = cpn.knob('to4')\n \n cpnfrom1 = cpn.knob('from1')\n cpnfrom2 = cpn.knob('from2')\n cpnfrom3 = cpn.knob('from3')\n cpnfrom4 = cpn.knob('from4')\n \n cpn.knob('refFrame').setValue(refFrame)\n \n cpnto1.setExpression(nName + \".\" + cpsName + \".\" + \"from1\")\n cpnto2.setExpression(nName + \".\" + cpsName + \".\" + \"from2\")\n cpnto3.setExpression(nName + \".\" + cpsName + \".\" + \"from3\")\n cpnto4.setExpression(nName + \".\" + cpsName + \".\" + \"from4\")\n \n cpnfrom1.setExpression(nName + \".\" + cpsName + \".\" + \"to1\")\n cpnfrom2.setExpression(nName + \".\" + cpsName + \".\" + \"to2\")\n cpnfrom3.setExpression(nName + \".\" + cpsName + \".\" + \"to3\")\n cpnfrom4.setExpression(nName + \".\" + cpsName + \".\" + \"to4\")\n \n \n cpn.knob('note_font_size').setValue(11)\n cpn\['label'].setValue('dist: \[value \{\}.distance]'.format(nName))\n cpn.knob('stabilize').setValue(1)\n cpn.knob('stabilize').setValue(1-output)\n cpn.knob('element').setValue(nName)\n \n \n except RuntimeError:\n pass\n \n if not cpn:\n cpn = nuke.createNode('CornerPin2D')\n cpn.setName(nName + \"_CrnPn\")\n cpn.knob('xpos').setValue(posX +100)\n cpn.knob('ypos').setValue(posY +70)\n cpn.autoplace()\n cpn.setInput(0, None)\n \n cpnto1 = cpn.knob('to1')\n cpnto2 = cpn.knob('to2')\n cpnto3 = cpn.knob('to3')\n cpnto4 = cpn.knob('to4')\n \n cpnfrom1 = cpn.knob('from1')\n cpnfrom2 = cpn.knob('from2')\n cpnfrom3 = cpn.knob('from3')\n cpnfrom4 = cpn.knob('from4')\n \n cpnfrom1.setExpression(nName + \".\" + cpsName + \".\" + \"from1\")\n cpnfrom2.setExpression(nName + \".\" + cpsName + \".\" + \"from2\")\n cpnfrom3.setExpression(nName + \".\" + cpsName + \".\" + \"from3\")\n cpnfrom4.setExpression(nName + \".\" + cpsName + \".\" + \"from4\")\n \n tab = nuke.Tab_Knob('settings', 'Settings')\n \n setCurrentFrameBtn = nuke.PyScript_Knob(\"setCurrentFrame\", \"Set to Current Frame\")\n setCurrentFrameBtn.setCommand('n = nuke.thisNode()\\nrefFrame = n.knob(\"refFrame\")\\nrefFrame.setValue(nuke.frame())\\nrefFrame = refFrame.getValue()\\noutput = n.knob(\"output\")\\nto1 = n.knob(\"to1\")\\nto2 = n.knob(\"to2\")\\nto3 = n.knob(\"to3\")\\nto4 = n.knob(\"to4\")\\nfrom1 = n.knob(\"from1\")\\nfrom2 = n.knob(\"from2\")\\nfrom3 = n.knob(\"from3\")\\nfrom4 = n.knob(\"from4\")\\nif output.getValue() == 0:\\n to1.setValue(from1.getValueAt(refFrame))\\n to2.setValue(from2.getValueAt(refFrame))\\n to3.setValue(from3.getValueAt(refFrame))\\n to4.setValue(from4.getValueAt(refFrame))\\nif output.getValue() == 1:\\n from1.setValue(to1.getValueAt(refFrame))\\n from2.setValue(to2.getValueAt(refFrame))\\n from3.setValue(to3.getValueAt(refFrame))\\n from4.setValue(to4.getValueAt(refFrame))')\n \n setFrameBtn = nuke.PyScript_Knob('setFrame', 'Set Frame')\n setFrameBtn.setCommand('n = nuke.thisNode()\\nrefFrame = n.knob(\\\"refFrame\\\").getValue()\\noutput = n.knob(\\\"output\\\")\\nto1 = n.knob(\\\"to1\\\")\\nto2 = n.knob(\\\"to2\\\")\\nto3 = n.knob(\\\"to3\\\")\\nto4 = n.knob(\\\"to4\\\")\\nfrom1 = n.knob(\\\"from1\\\")\\nfrom2 = n.knob(\\\"from2\\\")\\nfrom3 = n.knob(\\\"from3\\\")\\nfrom4 = n.knob(\\\"from4\\\")\\nif output.getValue() == 0:\\n to1.setValue(from1.getValueAt(refFrame))\\n to2.setValue(from2.getValueAt(refFrame))\\n to3.setValue(from3.getValueAt(refFrame))\\n to4.setValue(from4.getValueAt(refFrame))\\nif output.getValue() == 1:\\n from1.setValue(to1.getValueAt(refFrame))\\n from2.setValue(to2.getValueAt(refFrame))\\n from3.setValue(to3.getValueAt(refFrame))\\n from4.setValue(to4.getValueAt(refFrame))')\n \n StabBtn = nuke.PyScript_Knob(\"stabilize\", \"Stabilize\")\n StabBtn.setFlag(nuke.STARTLINE)\n StabBtn.setCommand('n = nuke.thisNode()\\nstab = n.knob(\"stabilize\")\\nmatch = n.knob(\"matchmove\")\\noutput = n.knob(\"output\")\\nrefFrame = n.knob(\"refFrame\").getValue()\\nif output.getValue() == 1:\\n stab.setLabel(\"Stabilize\")\\n match.setLabel(\"Matchmove\")\\n to1 = n.knob(\"to1\")\\n to2 = n.knob(\"to2\")\\n to3 = n.knob(\"to3\")\\n to4 = n.knob(\"to4\")\\n from1 = n.knob(\"from1\")\\n from2 = n.knob(\"from2\")\\n from3 = n.knob(\"from3\")\\n from4 = n.knob(\"from4\")\\n from1.copyAnimations(to1.animations())\\n from2.copyAnimations(to2.animations())\\n from3.copyAnimations(to3.animations())\\n from4.copyAnimations(to4.animations())\\n to1.clearAnimated()\\n to2.clearAnimated()\\n to3.clearAnimated()\\n to4.clearAnimated()\\n to1.setValue(from1.getValueAt(refFrame))\\n to2.setValue(from2.getValueAt(refFrame))\\n to3.setValue(from3.getValueAt(refFrame))\\n to4.setValue(from4.getValueAt(refFrame))\\n output.setValue(0)')\n \n MatchBtn = nuke.PyScript_Knob(\"matchmove\", \"Matchmove\")\n MatchBtn.setCommand('n = nuke.thisNode()\\nstab = n.knob(\"stabilize\")\\nmatch = n.knob(\"matchmove\")\\noutput = n.knob(\"output\")\\nrefFrame = n.knob(\"refFrame\").getValue()\\nif output.getValue() == 0:\\n stab.setLabel(\"Stabilize\")\\n match.setLabel(\"Matchmove\")\\n to1 = n.knob(\"to1\")\\n to2 = n.knob(\"to2\")\\n to3 = n.knob(\"to3\")\\n to4 = n.knob(\"to4\")\\n from1 = n.knob(\"from1\")\\n from2 = n.knob(\"from2\")\\n from3 = n.knob(\"from3\")\\n from4 = n.knob(\"from4\")\\n to1.copyAnimations(from1.animations())\\n to2.copyAnimations(from2.animations())\\n to3.copyAnimations(from3.animations())\\n to4.copyAnimations(from4.animations())\\n from1.clearAnimated()\\n from2.clearAnimated()\\n from3.clearAnimated()\\n from4.clearAnimated()\\n from1.setValue(to1.getValueAt(refFrame))\\n from2.setValue(to2.getValueAt(refFrame))\\n from3.setValue(to3.getValueAt(refFrame))\\n from4.setValue(to4.getValueAt(refFrame))\\n output.setValue(1)')\n \n pulldownStatus = nuke.Enumeration_Knob('output', 'Output', \['Stabilized', 'Matchmoved'])\n \n intFrame = nuke.Int_Knob(\"refFrame\", \"Ref Frame\")\n intFrame.setFlag(nuke.STARTLINE)\n cpn.addKnob(tab)\n \n cpn.addKnob(setCurrentFrameBtn)\n cpn.addKnob(intFrame)\n cpn.knob(\"refFrame\").setValue(refFrame)\n \n cpn.addKnob(setFrameBtn)\n \n cpn.addKnob(StabBtn)\n cpn.addKnob(MatchBtn)\n \n cpn.addKnob(pulldownStatus)\n cpn.knob('output').setVisible(False)\n \n cpnto1.setValue(cpnfrom1.getValueAt(refFrame))\n cpnto2.setValue(cpnfrom2.getValueAt(refFrame))\n cpnto3.setValue(cpnfrom3.getValueAt(refFrame))\n cpnto4.setValue(cpnfrom4.getValueAt(refFrame))\n \n cpn\['label'].setValue('rf: \[value refFrame] dist: \{\}'.format(dist))"} addUserKnob {41 isOn +INVISIBLE T isON.isOn} addUserKnob {7 distanceAxis l DistanceToAxis +HIDDEN R 0 1000} distanceAxis {{AxisDistance.NoOp1.distance}} addUserKnob {26 overscanSettings l "Overscan"} addUserKnob {7 overscan l Overscan R 0 200} addUserKnob {26 mBlurSettings l "MotionBlur"} addUserKnob {7 samples R 1 10} samples 1 addUserKnob {7 motionblur +HIDDEN} addUserKnob {7 shutter R 0 2} shutter 0.5 addUserKnob {41 shutteroffset l "shutter offset" T TimeBlur.shutteroffset} addUserKnob {26 text l " " T " "} addUserKnob {26 info l " " T "ImagePlane3D v2.0 | Tony Lyons 2021"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x57614e00 label Live note_font_size 60 note_font_color 0xffffffff xpos 1893 ypos 398 bdwidth 301 bdheight 350 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x3c472700 label Baked note_font_size 60 note_font_color 0xffffffff xpos 2354 ypos 382 bdwidth 300 bdheight 358 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x5e443cff label Card3D note_font_size 100 note_font_color 0xffffffff xpos 1129 ypos -908 bdwidth 400 bdheight 1690 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x686b5900 label "Projection 3D setup" note_font_size 60 note_font_color 0xffffffff xpos -13 ypos -827 bdwidth 735 bdheight 1748 } BackdropNode { inputs 0 name BackdropNode5 tile_color 0x44573100 label "Corners of Cards \nfor Reconcile 3D" note_font_size 60 note_font_color 0xffffffff xpos 1771 ypos -1109 bdwidth 763 bdheight 1355 } BackdropNode { inputs 0 name BackdropNode6 tile_color 0x555f6b00 label "input cam" note_font_size 60 note_font_color 0xffffffff xpos 929 ypos -1247 bdwidth 267 bdheight 232 } BackdropNode { inputs 0 name BackdropNode8 tile_color 0x4b5a2e00 label Camera note_font_size 60 note_font_color 0xffffffff xpos -638 ypos -401 bdwidth 442 bdheight 1189 } Input { inputs 0 name Inputcam xpos -598 ypos -300 number 1 } set Ndb8948a0 [stack 0] Camera { projection_mode {{"\[expression \[value the_cam]projection_mode(\[value the_frame])]"}} focal {{"\[expression \[value the_cam]focal(\[value the_frame])]"}} haperture {{"\[expression \[value the_cam]haperture(\[value the_frame])]"}} vaperture {{"\[expression \[value the_cam]vaperture(\[value the_frame])]"}} near {{"\[expression \[value the_cam]near(\[value the_frame])]"}} far {10000} win_translate {{"\[expression \[value the_cam]win_translate.u(\[value the_frame])]"} {"\[expression \[value the_cam]win_translate.v(\[value the_frame])]"}} win_scale {{"\[expression \[value the_cam]win_scale.u(\[value the_frame])]"} {"\[expression \[value the_cam]win_scale.v(\[value the_frame])]"}} winroll {{"\[expression \[value the_cam]winroll(\[value the_frame])]"}} focal_point {{"\[expression \[value the_cam]focal_point(\[value the_frame])]"}} fstop {{"\[expression \[value the_cam]fstop(\[value the_frame])]"}} name DummyCam help "DummyCam by Adrian Pueyo\n\nCamera that apart from the matrices also grabs all the \"Projection\" values from the upstream camera that it's connected to. Turns into a default Camera if no Camera connected. Can also be used inside of groups and gizmos, as many levels deep as you want :D All using live and super fast TCL.\n\nUpdated v1.1: Now grabs the correct frame too (thanks Erwan Leroy for the idea).\n\nUpdated v1.3: Now accepts Nuke13's Camera3\n\nadrianpueyo.com, 2019-2021" onCreate "n = nuke.thisNode()\nfor k in \[\"projection_mode\",\"focal\",\"haperture\",\"vaperture\",\"near\",\"far\",\"win_translate\",\"win_scale\",\"winroll\",\"focal_point\",\"fstop\"]:\n n\[k].setFlag(0x0000000010000000)" xpos 972 ypos -1126 addUserKnob {20 DummyCam l Defaults} addUserKnob {43 the_cam +INVISIBLE} the_cam "\[\n#DummyCam v1.3 - Updated 5 May 2021.\nset starting_point \"this.input0\"\nset default \"this.d_\"\n\n# If cam has no inputs, return the default.\nif \{\[exists \$starting_point]\} \{\n set x \[node \$starting_point]\n\} \{ \n return \$default\n\}\n\nset finished 0\nwhile \{\$finished != 1\} \{\n\n # First look for a Cam or Input or topnode.\n while \{\[class \$x] != \"Camera3\" && \[class \$x] != \"Camera2\" && \[class \$x] != \"Camera\" && \[class \$x] != \"Input\" && \$x != \[topnode \$x]\} \{\n set x \[node \$x.input0]\n \}\n\n # Then, check if node is a cam (and return), and otherwise, if it's an input, see if the parent exists and move to it.\n if \{\[class \$x]==\"Camera3\"||\[class \$x]==\"Camera2\"||\[class \$x]==\"Camera\"\} \{\n set x \[append x \".\"]\n return \$x\n \} \{ \n if \{ \[class \$x]==\"Input\" \} \{ \n set inp \"\$x.parent.input\"\n set inputNum \[value \$x.number]\n set inp \[append inp \$inputNum]\n if \{ \[exists \$inp] \} \{\n set x \[node \$inp]\n \} \{ \n set finished 1\n \}\n \} \{ \n set finished 1\n \}\n \}\n\}\nreturn \$default\n]" addUserKnob {43 the_frame +INVISIBLE} the_frame "\[\nset the_camera \[string trimright \[value the_cam] .]\nif \{\[exists \$the_camera]\} \{\n return \[value \$the_camera.frame]\n\} \{ \n return \[frame]\n\}\n]" addUserKnob {4 d_projection_mode l projection M {perspective orthographic uv spherical ""}} addUserKnob {7 d_focal l "focal length" R 0 100} d_focal 50 addUserKnob {7 d_haperture l "horiz aperture" R 0 50} d_haperture 24.576 addUserKnob {7 d_vaperture l "vert aperture" R 0 50} d_vaperture 18.672 addUserKnob {7 d_near l near R 0 10} d_near 0.1 addUserKnob {7 d_far l far R 0 10000} d_far 10000 addUserKnob {30 d_win_translate l "window translate"} addUserKnob {30 d_win_scale l "window scale"} d_win_scale {1 1} addUserKnob {7 d_winroll l "window roll" R 0 45} addUserKnob {7 d_focal_point l "focal distance" R 0 10} d_focal_point 2 addUserKnob {7 d_fstop l fstop R 0 30} d_fstop 16 addUserKnob {26 version l " " t "Updated 5 May 2021" T "
DummyCam v1.3 - adrianpueyo.com, 2019-2021
"} } Dot { name Dot27 note_font_size 41 xpos 993 ypos -974 } set Ndbedd50 [stack 0] Dot { name Dot23 label cam note_font_size 41 xpos 1317 ypos -974 } Axis2 { translate {0 0 {-parent.Settings.camDistance}} name CameraDistance label "dist to cam : \[value translate.z]" xpos 1293 ypos -665 } Axis2 { uniform_scale {{(DummyCam.haperture/DummyCam.focal)*Settings.camDistance}} name ScaleToFilmGateAxis label "uniform Scale : \[value uniform_scale]" xpos 1293 ypos -539 } set N2436b100 [stack 0] Axis2 { scaling {1 {DummyCam.vaperture/parent.DummyCam.haperture} 1} name AspectRatioScaleY label "scale Y : \[value scaling.y]" xpos 2131 ypos -539 } Dot { name Dot1 note_font_size 41 xpos 2155 ypos -419 } set N256636e0 [stack 0] Card2 { inputs 0 image_aspect false rows 4 columns 4 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name ProjectionPlane xpos 442 ypos -505 } TransformGeo { inputs 2 name AlignProjectionPlane1 xpos 442 ypos -422 } FrameHold { firstFrame {{parent.refFrame}} name FrameHold1 xpos 442 ypos -345 } Dot { name Dot10 note_font_size 41 xpos 476 ypos -62 } set Nebe4d210 [stack 0] Dot { name Dot16 note_font_size 41 xpos 296 ypos -62 } Dot { name Dot15 note_font_size 41 xpos 296 ypos 1345 } Input { inputs 0 name Inputimg xpos 849 ypos 174 } Reformat { format {{{parent.input0.format}}} pbb true name Reformat1 xpos 849 ypos 250 } Dot { name Dot12 label img note_font_size 41 xpos 883 ypos 333 } set Nd6e98960 [stack 0] Dot { name Dot7 label img note_font_size 41 xpos 1686 ypos 333 } set Nc81917a0 [stack 0] Dot { name Dot14 note_font_size 41 xpos 1967 ypos 334 } set Ne1c9aa80 [stack 0] Dot { name Dot6 label img note_font_size 41 xpos 2428 ypos 334 } Dot { name Dot25 note_font_size 41 xpos 2428 ypos 482 } set N7c6fb240 [stack 0] CornerPin2D { to1 {0 0} to2 {1920 0} to3 {1920 1080} to4 {0 1080} invert false motionblur {{parent.motionblur}} shutter {{parent.shutter}} shutteroffset {{parent.shutteroffset}} from1 {{to1(refFrame)} {to1(refFrame)}} from2 {{to2(refFrame)} {to2(refFrame)}} from3 {{to3(refFrame)} {to3(refFrame)}} from4 {{to4(refFrame)} {to4(refFrame)}} name CornerPin2DBakedMatchmove xpos 2535 ypos 572 addUserKnob {20 User} addUserKnob {22 "set reference frame" -STARTLINE T "import addOnCreateUU; addOnCreateUU.cornerPinZero()"} } push $N7c6fb240 CornerPin2D { to1 {{from1(refFrame)} {from1(refFrame)}} to2 {{from2(refFrame)} {from2(refFrame)}} to3 {{from3(refFrame)} {from3(refFrame)}} to4 {{from4(refFrame)} {from4(refFrame)}} invert false motionblur {{parent.motionblur}} shutter {{parent.shutter}} shutteroffset {{parent.shutteroffset}} from1 {0 0} from2 {1920 0} from3 {1920 1080} from4 {0 1080} name CornerPin2DBakedStabilize xpos 2394 ypos 572 addUserKnob {20 User} addUserKnob {22 "set reference frame" -STARTLINE T "import addOnCreateUU; addOnCreateUU.cornerPinZero()"} } Switch { inputs 2 which {{output}} name Switch7 xpos 2394 ypos 650 } Dot { name Dot22 note_font_size 41 xpos 2428 ypos 1281 } push $Ne1c9aa80 Dot { name Dot26 note_font_size 41 xpos 1967 ypos 498 } set N8c6f4770 [stack 0] CornerPin2D { to1 {{parent.Reconcile3DBL.output} {parent.Reconcile3DBL.output}} to2 {{parent.Reconcile3DBR.output} {parent.Reconcile3DBR.output}} to3 {{parent.Reconcile3DTR.output} {parent.Reconcile3DTR.output}} to4 {{parent.Reconcile3DTL.output} {parent.Reconcile3DTL.output}} invert false motionblur {{parent.motionblur}} shutter {{parent.shutter}} shutteroffset {{parent.shutteroffset}} from1 {{to1(refFrame)} {to1(refFrame)}} from2 {{to2(refFrame)} {to2(refFrame)}} from3 {{to3(refFrame)} {to3(refFrame)}} from4 {{to4(refFrame)} {to4(refFrame)}} name CornerPin2DLiveMatchmove xpos 2073 ypos 582 addUserKnob {20 User} addUserKnob {22 "set reference frame" -STARTLINE T "import addOnCreateUU; addOnCreateUU.cornerPinZero()"} } push $N8c6f4770 CornerPin2D { to1 {{parent.Reconcile3DBL.output(refFrame)} {parent.Reconcile3DBL.output(refFrame)}} to2 {{parent.Reconcile3DBR.output(refFrame)} {parent.Reconcile3DBR.output(refFrame)}} to3 {{parent.Reconcile3DTR.output(refFrame)} {parent.Reconcile3DTR.output(refFrame)}} to4 {{parent.Reconcile3DTL.output(refFrame)} {parent.Reconcile3DTL.output(refFrame)}} invert false motionblur {{parent.motionblur}} shutter {{parent.shutter}} shutteroffset {{parent.shutteroffset}} from1 {{parent.Reconcile3DBL.output} {parent.Reconcile3DBL.output}} from2 {{parent.Reconcile3DBR.output} {parent.Reconcile3DBR.output}} from3 {{parent.Reconcile3DTR.output} {parent.Reconcile3DTR.output}} from4 {{parent.Reconcile3DTL.output} {parent.Reconcile3DTL.output}} name CornerPin2DLiveStabilize xpos 1933 ypos 583 addUserKnob {20 User} addUserKnob {22 "set reference frame" -STARTLINE T "import addOnCreateUU; addOnCreateUU.cornerPinZero()"} } Switch { inputs 2 which {{output}} name Switch5 xpos 1933 ypos 644 } Dot { name Dot3 note_font_size 41 xpos 1967 ypos 785 } push $N2436b100 Dot { name Dot19 note_font_size 41 xpos 1317 ypos -361 } set Ne8192410 [stack 0] push $Ne8192410 FrameHold { firstFrame {{parent.refFrame}} name FrameHold4 xpos 1418 ypos -293 } Switch { inputs 2 which {{!output}} name Switch6 label "\[value which]" xpos 1283 ypos -224 } push $Ndb8948a0 Dot { name Dot18 note_font_size 41 xpos -564 ypos -54 } set N3330d7b0 [stack 0] Dot { name Dot4 note_font_size 41 xpos -564 ypos 271 } set N2fd660 [stack 0] FrameHold { firstFrame {{parent.refFrame}} name FrameHold2 xpos -454 ypos 264 } set Ne8392930 [stack 0] Dot { name Dot13 note_font_size 41 xpos -420 ypos 536 } push $N2fd660 Dot { name Dot11 note_font_size 41 xpos -564 ypos 442 } set Ncecf0100 [stack 0] Switch { inputs 2 which {{!output}} name Switch3 label "\[value which]" xpos -598 ypos 529 } Dot { name Dot8 note_font_size 41 xpos -564 ypos 629 } set N94c949b0 [stack 0] push $Nd6e98960 Card3D { inputs 3 translate {0 0 0} format {{{parent.Reformat1.format}}} shutter {{parent.shutter}} shutteroffset {{parent.shutteroffset}} name Card3D1 xpos 1283 ypos 625 } Dot { name Dot9 note_font_size 41 xpos 1317 ypos 725 } push $N94c949b0 Dot { name Dot5 note_font_size 41 xpos -564 ypos 736 } push $Ne8392930 Dot { name Dot24 note_font_size 41 xpos -282 ypos 271 } push $Ncecf0100 Switch { inputs 2 which {{output}} name Switch2 label "\[value which]" xpos -316 ypos 435 } push $Nd6e98960 Dot { name Dot29 label img note_font_size 41 xpos 626 ypos 333 } Project3D2 { inputs 2 crop false name Project3D1 xpos 592 ypos 432 } Dot { name Dot2 note_font_size 41 xpos 626 ypos 520 } push $Nebe4d210 ApplyMaterial { inputs 2 name ApplyMaterial1 xpos 442 ypos 517 } Reformat { inputs 0 format {{{parent.input0.format}}} resize none pbb true name Reformat2 xpos 591 ypos 733 } ScanlineRender { inputs 3 conservative_shader_sampling false overscan {{parent.overscan}} motion_vectors_type off MB_channel none name ScanlineRender1 xpos 442 ypos 733 } TimeBlur { divisions {{parent.samples}} shutter {{parent.shutter}} shutteroffset centred shuttercustomoffset 0 name TimeBlur xpos 442 ypos 833 disable {{"divisions == 1 ? 1 : 0"}} } Switch { inputs 4 which {{"result == 2 && !\$gui == 1 ? 0 : result"}} name Switch1 xpos 442 ypos 1277 } Switch { inputs 2 which 1 name Switch4 xpos 442 ypos 1342 disable true } Output { name Output1 xpos 442 ypos 1423 } push $N256636e0 FrameHold { firstFrame {{parent.refFrame}} name FrameHold3 xpos 2121 ypos -309 } Dot { name Dot21 note_font_size 41 xpos 2155 ypos -250 } set N29568c60 [stack 0] Axis2 { translate {0.5 0.5 0} name TopRight xpos 2043 ypos -178 } set Ne8b853d0 [stack 0] push $Ndbedd50 Dot { name Dot20 label cam note_font_size 41 xpos 993 ypos 11 } Dot { name Dot17 label cam note_font_size 41 xpos 1837 ypos 11 } set N2038c3c0 [stack 0] push $Nc81917a0 Reconcile3D { inputs 3 calc_output true output {1201.555786 1134.033569} outputxyz {-112.3282394 153.2042542 810.4436035} name Reconcile3DTR xpos 2033 ypos 103 } push $N29568c60 Axis2 { translate {-0.5 -0.5 0} name BottomLeft xpos 2219 ypos -178 } set Nd93484a0 [stack 0] push $N2038c3c0 push $Nc81917a0 Reconcile3D { inputs 3 calc_output true output {-433.5252991 34.41772079} outputxyz {-20.63001251 54.64735413 679.4829102} name Reconcile3DBL xpos 2209 ypos 99 } push $N29568c60 Axis2 { translate {0.5 -0.5 0} name BottomRight xpos 2358 ypos -184 } set Nd7d973f0 [stack 0] push $N2038c3c0 push $Nc81917a0 Reconcile3D { inputs 3 calc_output true output {1267.329224 198.26091} outputxyz {-120.8343277 61.53775787 808.7359009} name Reconcile3DBR xpos 2348 ypos 101 } push $N29568c60 Axis2 { translate {-0.5 0.5 0} name TopLeft xpos 1883 ypos -180 } set Nda020630 [stack 0] push $N2038c3c0 push $Nc81917a0 Reconcile3D { inputs 3 calc_output true output {-512.678894 1042.547974} outputxyz {-12.12392426 146.3138428 681.1906128} name Reconcile3DTL xpos 1873 ypos 99 } push $Nebe4d210 push $Nd7d973f0 push $Nd93484a0 push $Ne8b853d0 push $Nda020630 Scene { inputs 5 name SceneTest xpos 2124 ypos -86 } Input { inputs 0 name InputAxis xpos -382 ypos -301 number 2 } NoOp { name isON xpos -382 ypos -248 addUserKnob {20 User} addUserKnob {6 isOn +STARTLINE} isOn {{"\[exists input2]"}} } push $N3330d7b0 Group { inputs 2 name AxisDistance tile_color 0x9c0000ff xpos -382 ypos -57 addUserKnob {20 tab1 l TNT_AxisDistance} addUserKnob {41 distance T NoOp1.distance} } Output { inputs 0 name Output1 xpos 488 ypos 194 } Input { inputs 0 name axis2 xpos 740 ypos -220 number 1 } Axis2 { name A2 xpos 750 ypos -150 } NoOp { inputs 0 name NoOp1 xpos 620 ypos -70 addUserKnob {20 User} addUserKnob {7 distance R 0 100} distance {{sqrt((pow2(parent.A1.world_matrix.3-parent.A2.world_matrix.3))+(pow2(parent.A1.world_matrix.7-parent.A2.world_matrix.7))+(pow2(parent.A1.world_matrix.11-parent.A2.world_matrix.11)))}} } Input { inputs 0 name axis1 xpos 500 ypos -220 } Axis2 { name A1 xpos 510 ypos -150 } end_group NoOp { name Settings xpos -382 ypos 35 addUserKnob {20 User} addUserKnob {7 camDistance l "Camera Distance" R 0 2000} camDistance {{"isOn == 0 ? parent.distance : AxisDistance.distance"}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_InjectMatteChannel.gizmo ================================================ Group { name InjectMatteChannel help "this node creates a new single channel\n.red and injects it into the stream before a deep recolor.\n\nThis workflow is to create single channel mattes for your elements in your deep combine tree. which you can later pull out with a shuffle node after you have pre-rendered.\n\nThe benifit: you know what your elements look like deep combined, as a sanity check reference, and the pre-render itself has all the matte channels needed to recreate the deep render.\n\nWhen replacing your alpha, remember to unpremult(all), copy the holdout alpha, and premult(all)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == 'addPrefix':\n if n.knob('addPrefix').value() == 1:\n n.knob('prefix').setVisible(True)\n else:\n n.knob('prefix').setVisible(False)\n\nif k.name() == 'addPostfix':\n if n.knob('addPostfix').value() == 1:\n n.knob('postfix').setVisible(True)\n else:\n n.knob('postfix').setVisible(False)" tile_color 0x272727ff note_font "Bitstream Vera Sans Bold" note_font_color 0xffffffff selected true addUserKnob {20 InjectMatteChannel} addUserKnob {22 grabTitle l "Grab Title" t "grabs title from either a stamp or a read node from the 'color' stream and fills in the 'new channel name' field" T "from stamps_config import defaultTitle\n\nn = nuke.thisNode()\nncn = n.knob('newChannelName')\n\niNode = nuke.thisNode()\n\ndef upstream(iNode):\n found = False\n name = ''\n while found == False:\n \n if iNode.input(1) != None:\n\n if iNode.input(1).Class() in \['Read']:\n found = True\n name = defaultTitle(iNode.input(0))\n \n \n elif iNode.input(1).Class() in \['NoOp','PostageStamp']: \n \n try: \n found = True \n name = iNode.input(1)\['title'].value() \n \n except:\n iNode = iNode.input(1)\n \n \n else:\n iNode = iNode.input(1)\n else:\n nuke.message('please connect a read node or a stamp')\n found = True\n \n return name\n \nname = upstream(iNode)\nncn.setValue(name)" +STARTLINE} addUserKnob {22 injectNewChannel l "Inject New Channel" t "Copies the alpha from the color stream into a new channel .red into the stream to be used as a matte when pulled out later down the stream." -STARTLINE T "n = nuke.thisNode()\ncd = n.knob('channelDisplay')\ncs = n.knob('channel_select').value()\nncn = n.knob('newChannelName').getValue()\n\nif n.knob('addPrefix').value() == 1 and n.knob('prefix').getValue() != '':\n prefix = n.knob('prefix').value() + '_'\nelse:\n prefix = ''\n \nif n.knob('addPostfix').value() == 1 and n.knob('postfix').getValue() != '':\n postfix = '_' + n.knob('postfix').value()\nelse:\n postfix = ''\n\nchannelName = prefix+ncn+postfix\n\nwith n:\n nodeName = n.name()\n copy = nuke.toNode('Copy1')\n if channelName != '':\n channelName = ''.join(channelName.split('.'))\n channelName = '_'.join(channelName.split(' '))\n fullChannelName = channelName + '.red'\n nuke.Layer('\{\}'.format(channelName), \[fullChannelName])\n copy.knob('from0').setValue('rgba.'+cs)\n copy.knob('to0').setValue(fullChannelName)\n copy.knob('tile_color').setValue(437918463)\n copy.knob('note_font_color').setValue(4280090879)\n \ncd.setValue(fullChannelName)\ncd.setVisible(True)\nn.knob('note_font_color').setValue(4280090879)\nn.knob('label').setValue('\{\} --> \{\}.red'.format(cs, channelName))"} addUserKnob {22 reset l "Reset" t "resets the node to default values" -STARTLINE T "n = nuke.thisNode()\nncn = n.knob('newChannelName')\ncd = n.knob('channelDisplay')\nwith n:\n copy = nuke.toNode('Copy1')\n copy.knob('from0').setValue('rgba.alpha')\n copy.knob('to0').setValue('rgba.alpha')\n copy.knob('tile_color').setValue(2654757632)\n copy.knob('note_font_color').setValue(235802367)\ncd.setValue('')\ncd.setVisible(False)\nncn.setValue('')\nn.knob('note_font_color').setValue(4294967295)\nn.knob('label').setValue('')\nn.knob('addPrefix').setValue(0)\nn.knob('addPostfix').setValue(0)\nn.knob('prefix').setValue('ID')\nn.knob('postfix').setValue('')\nn.knob('channel_select').setValue('alpha')"} addUserKnob {1 newChannelName l "New Channel Name"} addUserKnob {83 channel_select l "Input Matte Channel" M {red green blue alpha}} channel_select alpha addUserKnob {6 addPrefix l "Add Prefix" +STARTLINE} addUserKnob {6 addPostfix l "Add Postfix" -STARTLINE} addUserKnob {1 prefix +HIDDEN} prefix ID addUserKnob {1 postfix +HIDDEN} addUserKnob {1 channelDisplay l ---> +INVISIBLE} addUserKnob {41 bbox l "Set BBox to " T Copy1.bbox} addUserKnob {26 text l " " T " "} addUserKnob {26 info l " " T "InjectMatteChannel v1.2 | Tony Lyons 2020"} } Input { inputs 0 name Inputmatte xpos 192 ypos 456 number 1 } Input { inputs 0 name Input xpos 378 ypos 319 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 tile_color 0x9e3c6300 note_font_color 0xe0e0eff xpos 378 ypos 450 } Output { name Output1 xpos 378 ypos 641 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_InverseMatrix33.gizmo ================================================ Group { inputs 0 name InverseMatrix33_ tile_color 0x337f4cff addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} addUserKnob {26 ""} addUserKnob {41 id T assignID.matrix} addUserKnob {26 ""} addUserKnob {20 tab_math l math n 1} tab_math 0 addUserKnob {7 m l determinant} m {{"\[value \[value knob_path].\[value id.0]] * \n(( \[value \[value knob_path].\[value id.4]] * \[value \[value knob_path].\[value id.8]] )\n-\n( \[value \[value knob_path].\[value id.5]] * \[value \[value knob_path].\[value id.7]] ))\n\n-\n\n\[value \[value knob_path].\[value id.1]] * \n(( \[value \[value knob_path].\[value id.3]] * \[value \[value knob_path].\[value id.8]] )\n-\n( \[value \[value knob_path].\[value id.5]] * \[value \[value knob_path].\[value id.6]] ))\n\n+\n\n\[value \[value knob_path].\[value id.2]] * \n(( \[value \[value knob_path].\[value id.3]] * \[value \[value knob_path].\[value id.7]] )\n-\n( \[value \[value knob_path].\[value id.4]] * \[value \[value knob_path].\[value id.6]] ))"}} addUserKnob {41 a l cofactor T co.matrix} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {41 iMatrix T result.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-24} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"live inverse matrix
iMatrix33
iMatrix44\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name assignID xpos -40 ypos 65 } Matrix { inputs 0 matrix { {{"pow(-1,0+0) * (\n+\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]\n-\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]]\n)"} {"pow(-1,0+1) * (\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]\n-\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]\n)"} {"pow(-1,0+2) * (\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]\n-\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]\n)"}} {{"pow(-1,1+0) * (\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.8]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.7]]\n)"} {"pow(-1,1+1) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.8]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.6]]\n)"} {"pow(-1,1+2) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.7]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.6]]\n)"}} {{"pow(-1,2+0) * (\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]]\n)"} {"pow(-1,2+1) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]\n)"} {"pow(-1,2+2) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]]\n)"}} } name co xpos 70 ypos 65 } Matrix { inputs 0 matrix { {{"a.0==0 || m==0 ? 0 : a.0/m"} {"a.3==0 || m==0 ? 0 : a.3/m"} {"a.6==0 || m==0 ? 0 : a.6/m"}} {{"a.1==0 || m==0 ? 0 : a.1/m"} {"a.4==0 || m==0 ? 0 : a.4/m"} {"a.7==0 || m==0 ? 0 : a.7/m"}} {{"a.2==0 || m==0 ? 0 : a.2/m"} {"a.5==0 || m==0 ? 0 : a.5/m"} {"a.8==0 || m==0 ? 0 : a.8/m"}} } name result xpos 180 ypos 65 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_InverseMatrix44.gizmo ================================================ Group { inputs 0 name InverseMatrix44_ tile_color 0x337f4cff addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} addUserKnob {26 ""} addUserKnob {41 id T assignID.matrix} addUserKnob {26 ""} addUserKnob {20 grp_math l math n 1} grp_math 0 addUserKnob {7 m l determinant} m {{"\[value \[value knob_path].\[value id.0]] * \n(\n\[value \[value knob_path].\[value id.5]] * \n(( \[value \[value knob_path].\[value id.10]] * \[value \[value knob_path].\[value id.15]] )\n-\n( \[value \[value knob_path].\[value id.11]] * \[value \[value knob_path].\[value id.14]] ))\n-\n\[value \[value knob_path].\[value id.6]] * \n(( \[value \[value knob_path].\[value id.9]] * \[value \[value knob_path].\[value id.15]] )\n-\n( \[value \[value knob_path].\[value id.11]] * \[value \[value knob_path].\[value id.13]] ))\n+\n\[value \[value knob_path].\[value id.7]] * \n(( \[value \[value knob_path].\[value id.9]] * \[value \[value knob_path].\[value id.14]] )\n-\n( \[value \[value knob_path].\[value id.10]] * \[value \[value knob_path].\[value id.13]] ))\n)\n\n-\n\n\[value \[value knob_path].\[value id.1]] * \n(\n\[value \[value knob_path].\[value id.4]] * \n(( \[value \[value knob_path].\[value id.10]] * \[value \[value knob_path].\[value id.15]] )\n-\n( \[value \[value knob_path].\[value id.11]] * \[value \[value knob_path].\[value id.14]] ))\n-\n\[value \[value knob_path].\[value id.6]] * \n(( \[value \[value knob_path].\[value id.8]] * \[value \[value knob_path].\[value id.15]] )\n-\n( \[value \[value knob_path].\[value id.11]] * \[value \[value knob_path].\[value id.12]] ))\n+\n\[value \[value knob_path].\[value id.7]] * \n(( \[value \[value knob_path].\[value id.8]] * \[value \[value knob_path].\[value id.14]] )\n-\n( \[value \[value knob_path].\[value id.10]] * \[value \[value knob_path].\[value id.12]] ))\n)\n\n+\n\n\[value \[value knob_path].\[value id.2]] * \n(\n\[value \[value knob_path].\[value id.4]] * \n(( \[value \[value knob_path].\[value id.9]] * \[value \[value knob_path].\[value id.15]] )\n-\n( \[value \[value knob_path].\[value id.11]] * \[value \[value knob_path].\[value id.13]] ))\n-\n\[value \[value knob_path].\[value id.5]] * \n(( \[value \[value knob_path].\[value id.8]] * \[value \[value knob_path].\[value id.15]] )\n-\n( \[value \[value knob_path].\[value id.11]] * \[value \[value knob_path].\[value id.12]] ))\n+\n\[value \[value knob_path].\[value id.7]] * \n(( \[value \[value knob_path].\[value id.8]] * \[value \[value knob_path].\[value id.13]] )\n-\n( \[value \[value knob_path].\[value id.9]] * \[value \[value knob_path].\[value id.12]] ))\n)\n\n-\n\n\[value \[value knob_path].\[value id.3]] * \n(\n\[value \[value knob_path].\[value id.4]] * \n(( \[value \[value knob_path].\[value id.9]] * \[value \[value knob_path].\[value id.14]] )\n-\n( \[value \[value knob_path].\[value id.10]] * \[value \[value knob_path].\[value id.13]] ))\n-\n\[value \[value knob_path].\[value id.5]] * \n(( \[value \[value knob_path].\[value id.8]] * \[value \[value knob_path].\[value id.14]] )\n-\n( \[value \[value knob_path].\[value id.10]] * \[value \[value knob_path].\[value id.12]] ))\n+\n\[value \[value knob_path].\[value id.6]] * \n(( \[value \[value knob_path].\[value id.8]] * \[value \[value knob_path].\[value id.13]] )\n-\n( \[value \[value knob_path].\[value id.9]] * \[value \[value knob_path].\[value id.12]] ))\n)"}} addUserKnob {41 a l cofactor T co.matrix} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {41 iMatrix T result.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-24} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"live inverse matrix
iMatrix33
iMatrix44\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2 3} {4 5 6 7} {8 9 10 11} {12 13 14 15} } name assignID xpos -150 ypos -255 } Matrix { inputs 0 matrix { {{"pow(-1,0+0) * (\n+\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.13]]\n+\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.14]]\n-\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,0+1) * (\n+\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,0+2) * (\n+\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,0+3) * (\n+\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.14]]\n+\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.14]]\n-\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.13]]\n)"}} {{"pow(-1,1+0) * (\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.13]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.14]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,1+1) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,1+2) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,1+3) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.14]]\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.14]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.13]]\n)"}} {{"pow(-1,2+0) * (\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.13]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.14]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,2+1) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,2+2) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,2+3) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.14]]\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.14]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.13]]\n)"}} {{"pow(-1,3+0) * (\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.11]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.9]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.10]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.9]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.11]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.10]]\n)"} {"pow(-1,3+1) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.11]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.8]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.10]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.8]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.11]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.10]]\n)"} {"pow(-1,3+2) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.11]]\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.8]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.9]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.8]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.11]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.9]]\n)"} {"pow(-1,3+3) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.10]]\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.8]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.9]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.8]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.10]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.9]]\n)"}} } name co xpos -44 ypos -255 } Matrix { inputs 0 matrix { {{"a.0==0 || m==0 ? 0 : a.0/m"} {"a.4==0 || m==0 ? 0 : a.4/m"} {"a.8==0 || m==0 ? 0 : a.8/m"} {"a.12==0 || m==0 ? 0 : a.12/m"}} {{"a.1==0 || m==0 ? 0 : a.1/m"} {"a.5==0 || m==0 ? 0 : a.5/m"} {"a.9==0 || m==0 ? 0 : a.9/m"} {"a.13==0 || m==0 ? 0 : a.13/m"}} {{"a.2==0 || m==0 ? 0 : a.2/m"} {"a.6==0 || m==0 ? 0 : a.6/m"} {"a.10==0 || m==0 ? 0 : a.10/m"} {"a.14==0 || m==0 ? 0 : a.14/m"}} {{"a.3==0 || m==0 ? 0 : a.3/m"} {"a.7==0 || m==0 ? 0 : a.7/m"} {"a.11==0 || m==0 ? 0 : a.11/m"} {"a.15==0 || m==0 ? 0 : a.15/m"}} } name result xpos 56 ypos -254 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_InvertAxis.gizmo ================================================ Group { name InvertAxis help "Inverts an input Axis" tile_color 0x9c0000ff addUserKnob {20 InvertAxis l "Invert Axis"} addUserKnob {41 world_matrix l "" -STARTLINE T Out_Axis.world_matrix} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.1 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Axis2 { inputs 0 useMatrix true matrix { {{Mid_Axis.matrix/Mid_Axis.matrix.15} {Mid_Axis.matrix/Mid_Axis.matrix.15} {Mid_Axis.matrix/Mid_Axis.matrix.15} {Mid_Axis.matrix/Mid_Axis.matrix.15}} {{Mid_Axis.matrix/Mid_Axis.matrix.15} {Mid_Axis.matrix/Mid_Axis.matrix.15} {Mid_Axis.matrix/Mid_Axis.matrix.15} {Mid_Axis.matrix/Mid_Axis.matrix.15}} {{Mid_Axis.matrix/Mid_Axis.matrix.15} {Mid_Axis.matrix/Mid_Axis.matrix.15} {Mid_Axis.matrix/Mid_Axis.matrix.15} {Mid_Axis.matrix/Mid_Axis.matrix.15}} {{Mid_Axis.matrix/Mid_Axis.matrix.15} {Mid_Axis.matrix/Mid_Axis.matrix.15} {Mid_Axis.matrix/Mid_Axis.matrix.15} 1} } name Out_Axis xpos 816 ypos 668 } Output { name Output1 xpos 806 ypos 780 } Input { inputs 0 name Inputaxis xpos 806 ypos 434 } Axis2 { name In_Axis xpos 816 ypos 499 } Axis2 { inputs 0 useMatrix true matrix { {{In_Axis.world_matrix.5*In_Axis.world_matrix.10*In_Axis.world_matrix.15+In_Axis.world_matrix.6*In_Axis.world_matrix.11*In_Axis.world_matrix.13+In_Axis.world_matrix.7*In_Axis.world_matrix.9*In_Axis.world_matrix.14-In_Axis.world_matrix.5*In_Axis.world_matrix.11*In_Axis.world_matrix.14-In_Axis.world_matrix.6*In_Axis.world_matrix.9*In_Axis.world_matrix.15-In_Axis.world_matrix.7*In_Axis.world_matrix.10*In_Axis.world_matrix.13} {In_Axis.world_matrix.1*In_Axis.world_matrix.11*In_Axis.world_matrix.14+In_Axis.world_matrix.2*In_Axis.world_matrix.9*In_Axis.world_matrix.15+In_Axis.world_matrix.3*In_Axis.world_matrix.10*In_Axis.world_matrix.13-In_Axis.world_matrix.1*In_Axis.world_matrix.10*In_Axis.world_matrix.15-In_Axis.world_matrix.2*In_Axis.world_matrix.11*In_Axis.world_matrix.13-In_Axis.world_matrix.3*In_Axis.world_matrix.9*In_Axis.world_matrix.14} {In_Axis.world_matrix.1*In_Axis.world_matrix.6*In_Axis.world_matrix.15+In_Axis.world_matrix.2*In_Axis.world_matrix.7*In_Axis.world_matrix.13+In_Axis.world_matrix.3*In_Axis.world_matrix.5*In_Axis.world_matrix.14-In_Axis.world_matrix.1*In_Axis.world_matrix.7*In_Axis.world_matrix.14-In_Axis.world_matrix.2*In_Axis.world_matrix.5*In_Axis.world_matrix.15-In_Axis.world_matrix.3*In_Axis.world_matrix.6*In_Axis.world_matrix.13} {In_Axis.world_matrix.1*In_Axis.world_matrix.7*In_Axis.world_matrix.10+In_Axis.world_matrix.2*In_Axis.world_matrix.5*In_Axis.world_matrix.11+In_Axis.world_matrix.3*In_Axis.world_matrix.6*In_Axis.world_matrix.9-In_Axis.world_matrix.1*In_Axis.world_matrix.6*In_Axis.world_matrix.11-In_Axis.world_matrix.2*In_Axis.world_matrix.7*In_Axis.world_matrix.9-In_Axis.world_matrix.3*In_Axis.world_matrix.5*In_Axis.world_matrix.10}} {{In_Axis.world_matrix.4*In_Axis.world_matrix.11*In_Axis.world_matrix.14+In_Axis.world_matrix.6*In_Axis.world_matrix.8*In_Axis.world_matrix.15+In_Axis.world_matrix.7*In_Axis.world_matrix.10*In_Axis.world_matrix.12-In_Axis.world_matrix.4*In_Axis.world_matrix.10*In_Axis.world_matrix.15-In_Axis.world_matrix.6*In_Axis.world_matrix.11*In_Axis.world_matrix.12-In_Axis.world_matrix.7*In_Axis.world_matrix.8*In_Axis.world_matrix.14} {In_Axis.world_matrix.0*In_Axis.world_matrix.10*In_Axis.world_matrix.15+In_Axis.world_matrix.2*In_Axis.world_matrix.11*In_Axis.world_matrix.12+In_Axis.world_matrix.3*In_Axis.world_matrix.8*In_Axis.world_matrix.14-In_Axis.world_matrix.0*In_Axis.world_matrix.11*In_Axis.world_matrix.14-In_Axis.world_matrix.2*In_Axis.world_matrix.8*In_Axis.world_matrix.15-In_Axis.world_matrix.3*In_Axis.world_matrix.10*In_Axis.world_matrix.12} {In_Axis.world_matrix.0*In_Axis.world_matrix.7*In_Axis.world_matrix.14+In_Axis.world_matrix.2*In_Axis.world_matrix.4*In_Axis.world_matrix.15+In_Axis.world_matrix.3*In_Axis.world_matrix.6*In_Axis.world_matrix.12-In_Axis.world_matrix.0*In_Axis.world_matrix.6*In_Axis.world_matrix.15-In_Axis.world_matrix.2*In_Axis.world_matrix.7*In_Axis.world_matrix.12-In_Axis.world_matrix.3*In_Axis.world_matrix.4*In_Axis.world_matrix.14} {In_Axis.world_matrix.0*In_Axis.world_matrix.6*In_Axis.world_matrix.11+In_Axis.world_matrix.2*In_Axis.world_matrix.7*In_Axis.world_matrix.8+In_Axis.world_matrix.3*In_Axis.world_matrix.4*In_Axis.world_matrix.10-In_Axis.world_matrix.0*In_Axis.world_matrix.7*In_Axis.world_matrix.10-In_Axis.world_matrix.2*In_Axis.world_matrix.4*In_Axis.world_matrix.11-In_Axis.world_matrix.3*In_Axis.world_matrix.6*In_Axis.world_matrix.8}} {{In_Axis.world_matrix.4*In_Axis.world_matrix.9*In_Axis.world_matrix.15+In_Axis.world_matrix.5*In_Axis.world_matrix.11*In_Axis.world_matrix.12+In_Axis.world_matrix.7*In_Axis.world_matrix.8*In_Axis.world_matrix.13-In_Axis.world_matrix.4*In_Axis.world_matrix.11*In_Axis.world_matrix.13-In_Axis.world_matrix.5*In_Axis.world_matrix.8*In_Axis.world_matrix.15-In_Axis.world_matrix.7*In_Axis.world_matrix.9*In_Axis.world_matrix.12} {In_Axis.world_matrix.0*In_Axis.world_matrix.11*In_Axis.world_matrix.13+In_Axis.world_matrix.1*In_Axis.world_matrix.8*In_Axis.world_matrix.15+In_Axis.world_matrix.3*In_Axis.world_matrix.9*In_Axis.world_matrix.12-In_Axis.world_matrix.0*In_Axis.world_matrix.9*In_Axis.world_matrix.15-In_Axis.world_matrix.1*In_Axis.world_matrix.11*In_Axis.world_matrix.12-In_Axis.world_matrix.3*In_Axis.world_matrix.8*In_Axis.world_matrix.13} {In_Axis.world_matrix.0*In_Axis.world_matrix.5*In_Axis.world_matrix.15+In_Axis.world_matrix.1*In_Axis.world_matrix.7*In_Axis.world_matrix.12+In_Axis.world_matrix.3*In_Axis.world_matrix.4*In_Axis.world_matrix.13-In_Axis.world_matrix.0*In_Axis.world_matrix.7*In_Axis.world_matrix.13-In_Axis.world_matrix.1*In_Axis.world_matrix.4*In_Axis.world_matrix.15-In_Axis.world_matrix.3*In_Axis.world_matrix.5*In_Axis.world_matrix.12} {In_Axis.world_matrix.0*In_Axis.world_matrix.7*In_Axis.world_matrix.9+In_Axis.world_matrix.1*In_Axis.world_matrix.4*In_Axis.world_matrix.11+In_Axis.world_matrix.3*In_Axis.world_matrix.5*In_Axis.world_matrix.8-In_Axis.world_matrix.0*In_Axis.world_matrix.5*In_Axis.world_matrix.11-In_Axis.world_matrix.1*In_Axis.world_matrix.7*In_Axis.world_matrix.8-In_Axis.world_matrix.3*In_Axis.world_matrix.4*In_Axis.world_matrix.9}} {{In_Axis.world_matrix.4*In_Axis.world_matrix.10*In_Axis.world_matrix.13+In_Axis.world_matrix.5*In_Axis.world_matrix.8*In_Axis.world_matrix.14+In_Axis.world_matrix.6*In_Axis.world_matrix.9*In_Axis.world_matrix.12-In_Axis.world_matrix.4*In_Axis.world_matrix.9*In_Axis.world_matrix.14-In_Axis.world_matrix.5*In_Axis.world_matrix.10*In_Axis.world_matrix.12-In_Axis.world_matrix.6*In_Axis.world_matrix.8*In_Axis.world_matrix.13} {In_Axis.world_matrix.0*In_Axis.world_matrix.9*In_Axis.world_matrix.14+In_Axis.world_matrix.1*In_Axis.world_matrix.10*In_Axis.world_matrix.12+In_Axis.world_matrix.2*In_Axis.world_matrix.8*In_Axis.world_matrix.13-In_Axis.world_matrix.0*In_Axis.world_matrix.10*In_Axis.world_matrix.13-In_Axis.world_matrix.1*In_Axis.world_matrix.8*In_Axis.world_matrix.14-In_Axis.world_matrix.2*In_Axis.world_matrix.9*In_Axis.world_matrix.12} {In_Axis.world_matrix.0*In_Axis.world_matrix.6*In_Axis.world_matrix.13+In_Axis.world_matrix.1*In_Axis.world_matrix.4*In_Axis.world_matrix.14+In_Axis.world_matrix.2*In_Axis.world_matrix.5*In_Axis.world_matrix.12-In_Axis.world_matrix.0*In_Axis.world_matrix.5*In_Axis.world_matrix.14-In_Axis.world_matrix.1*In_Axis.world_matrix.6*In_Axis.world_matrix.12-In_Axis.world_matrix.2*In_Axis.world_matrix.4*In_Axis.world_matrix.13} {In_Axis.world_matrix.0*In_Axis.world_matrix.5*In_Axis.world_matrix.10+In_Axis.world_matrix.1*In_Axis.world_matrix.6*In_Axis.world_matrix.8+In_Axis.world_matrix.2*In_Axis.world_matrix.4*In_Axis.world_matrix.9-In_Axis.world_matrix.0*In_Axis.world_matrix.6*In_Axis.world_matrix.9-In_Axis.world_matrix.1*In_Axis.world_matrix.4*In_Axis.world_matrix.10-In_Axis.world_matrix.2*In_Axis.world_matrix.5*In_Axis.world_matrix.8}} } name Mid_Axis xpos 700 ypos 601 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_InvertMatrix4.gizmo ================================================ Group { name InvertMatrix4_ help "Invert a pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" knobChanged "node = nuke.thisNode()\nknob = nuke.thisKnob()\n\nif knob.name() == \"inputChange\":\n with node:\n format_knob = nuke.toNode('Constant1')\['format']\n if node.input(0):\n format_knob.setEnabled(False)\n else:\n format_knob.setEnabled(True)\n" selected true xpos -2208 ypos 688 addUserKnob {20 Matrix4 l InvertMatrix4} addUserKnob {26 Description l "" +STARTLINE T "Invert matrix channels"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name Inputmatrix xpos 276 ypos 144 } Dot { name Dot3 tile_color 0xcccccc00 xpos 310 ypos 296 } set N120b6ee0 [stack 0] Dot { name Dot20 tile_color 0xcccccc00 xpos 456 ypos 296 } add_layer {matrix0 matrix0.0 matrix0.1 matrix0.2 matrix0.3} Shuffle { in matrix0 name Shuffle1 label "in \[value in]-->out \[value out]" xpos 422 ypos 343 } set N14561c90 [stack 0] add_layer {matrix1 matrix1.0 matrix1.1 matrix1.2 matrix1.3} Shuffle { in matrix1 name Shuffle2 label "in \[value in]-->out \[value out]" xpos 422 ypos 383 } set N1c218280 [stack 0] add_layer {matrix2 matrix2.0 matrix2.1 matrix2.2 matrix2.3} Shuffle { in matrix2 name Shuffle3 label "in \[value in]-->out \[value out]" xpos 422 ypos 419 } set N1c736ac0 [stack 0] add_layer {matrix3 matrix3.0 matrix3.1 matrix3.2 matrix3.3} Shuffle { in matrix3 name Shuffle4 label "in \[value in]-->out \[value out]" xpos 422 ypos 456 } Dot { name Dot8 tile_color 0x9e3c6300 xpos 707 ypos 465 } set N142755e0 [stack 0] Dot { name Dot11 tile_color 0x9e3c6300 xpos 831 ypos 465 } set N11330380 [stack 0] Dot { name Dot12 tile_color 0x9e3c6300 xpos 965 ypos 465 } set N1b902700 [stack 0] Dot { name Dot16 tile_color 0x9e3c6300 xpos 1113 ypos 465 } push $N1c736ac0 Dot { name Dot7 tile_color 0x9e3c6300 xpos 666 ypos 428 } set N1c6f5ac0 [stack 0] Dot { name Dot10 tile_color 0x9e3c6300 xpos 821 ypos 428 } set N1e8d5010 [stack 0] Dot { name Dot13 tile_color 0x9e3c6300 xpos 949 ypos 428 } set N1133ec50 [stack 0] Dot { name Dot17 tile_color 0x9e3c6300 xpos 1100 ypos 428 } push $N1c218280 Dot { name Dot6 tile_color 0x9e3c6300 xpos 637 ypos 392 } set N1c7017f0 [stack 0] Dot { name Dot9 tile_color 0x9e3c6300 xpos 808 ypos 392 } set N11323810 [stack 0] Dot { name Dot14 tile_color 0x9e3c6300 xpos 927 ypos 392 } set N1eabc3d0 [stack 0] Dot { name Dot18 tile_color 0x9e3c6300 xpos 1084 ypos 392 } push $N14561c90 Dot { name Dot5 tile_color 0x9e3c6300 xpos 592 ypos 352 } set N1e9a4770 [stack 0] Dot { name Dot4 tile_color 0x9e3c6300 xpos 776 ypos 352 } set N1c087c20 [stack 0] Dot { name Dot15 tile_color 0x9e3c6300 xpos 905 ypos 352 } set N1ec479e0 [stack 0] Dot { name Dot19 tile_color 0x9e3c6300 xpos 1068 ypos 352 } BlinkScript { inputs 4 recompileCount 14 ProgramGroup 1 KernelDescription "2 \"InvertMatrix4\" iterate pixelWise 24c0b57d50e6fc4d3de1ddabffc2c534b1cd8bf00f432f09e06cab24b7b23d50 5 \"matrix0\" Read Point \"matrix1\" Read Point \"matrix2\" Read Point \"matrix3\" Read Point \"dst\" Write Point 0 0 0" kernelSource "kernel InvertMatrix4 : ImageComputationKernel\n\{\n Image matrix0; // the input image\n Image matrix1; // the input image\n Image matrix2; // the input image\n Image matrix3; // the input image\n Image dst; // the output image\n\n void process() \{\n // Read the input image\n SampleType(matrix0) m0 = matrix0();\n SampleType(matrix1) m1 = matrix1();\n SampleType(matrix2) m2 = matrix2();\n SampleType(matrix3) m3 = matrix3();\n\n // Create the matrix object (matrix3 in this case)\n float4x4 matrix;\n matrix\[0]\[0] = m0.x;\n matrix\[0]\[1] = m0.y;\n matrix\[0]\[2] = m0.z;\n matrix\[0]\[3] = m0.w;\n matrix\[1]\[0] = m1.x;\n matrix\[1]\[1] = m1.y;\n matrix\[1]\[2] = m1.z;\n matrix\[1]\[3] = m1.w;\n matrix\[2]\[0] = m2.x;\n matrix\[2]\[1] = m2.y;\n matrix\[2]\[2] = m2.z;\n matrix\[2]\[3] = m2.w;\n matrix\[3]\[0] = m3.x;\n matrix\[3]\[1] = m3.y;\n matrix\[3]\[2] = m3.z;\n matrix\[3]\[3] = m3.w;\n\n // Inverse the matrix\n matrix = matrix.invert();\n\n // Write the result to the output image\n dst() = float4(matrix\[3]\[0], matrix\[3]\[1], matrix\[3]\[2], matrix\[3]\[3]);\n \}\n\};\n" rebuild "" rebuild_finalise "" name BlinkScript4 xpos 1034 ypos 579 } Dot { name Dot2 tile_color 0xcccccc00 xpos 1068 ypos 866 } push $N1b902700 push $N1133ec50 push $N1eabc3d0 push $N1ec479e0 BlinkScript { inputs 4 recompileCount 14 ProgramGroup 1 KernelDescription "2 \"InvertMatrix4\" iterate pixelWise 18ad5fdc0440a3820ed7a9939c0cfbbf7fad1323aed420c38542f1e186aa8c86 5 \"matrix0\" Read Point \"matrix1\" Read Point \"matrix2\" Read Point \"matrix3\" Read Point \"dst\" Write Point 0 0 0" kernelSource "kernel InvertMatrix4 : ImageComputationKernel\n\{\n Image matrix0; // the input image\n Image matrix1; // the input image\n Image matrix2; // the input image\n Image matrix3; // the input image\n Image dst; // the output image\n\n void process() \{\n // Read the input image\n SampleType(matrix0) m0 = matrix0();\n SampleType(matrix1) m1 = matrix1();\n SampleType(matrix2) m2 = matrix2();\n SampleType(matrix3) m3 = matrix3();\n\n // Create the matrix object (matrix3 in this case)\n float4x4 matrix;\n matrix\[0]\[0] = m0.x;\n matrix\[0]\[1] = m0.y;\n matrix\[0]\[2] = m0.z;\n matrix\[0]\[3] = m0.w;\n matrix\[1]\[0] = m1.x;\n matrix\[1]\[1] = m1.y;\n matrix\[1]\[2] = m1.z;\n matrix\[1]\[3] = m1.w;\n matrix\[2]\[0] = m2.x;\n matrix\[2]\[1] = m2.y;\n matrix\[2]\[2] = m2.z;\n matrix\[2]\[3] = m2.w;\n matrix\[3]\[0] = m3.x;\n matrix\[3]\[1] = m3.y;\n matrix\[3]\[2] = m3.z;\n matrix\[3]\[3] = m3.w;\n\n // Inverse the matrix\n matrix = matrix.invert();\n\n // Write the result to the output image\n dst() = float4(matrix\[2]\[0], matrix\[2]\[1], matrix\[2]\[2], matrix\[2]\[3]);\n \}\n\};\n" rebuild "" rebuild_finalise "" name BlinkScript3 xpos 871 ypos 585 } Dot { name Dot1 tile_color 0xcccccc00 xpos 905 ypos 776 } push $N11330380 push $N1e8d5010 push $N11323810 push $N1c087c20 BlinkScript { inputs 4 recompileCount 14 ProgramGroup 1 KernelDescription "2 \"InvertMatrix4\" iterate pixelWise e9f630cc235826bda0787271e2c79d1689a8462ddf208e8692d52b548c8b67e3 5 \"matrix0\" Read Point \"matrix1\" Read Point \"matrix2\" Read Point \"matrix3\" Read Point \"dst\" Write Point 0 0 0" kernelSource "kernel InvertMatrix4 : ImageComputationKernel\n\{\n Image matrix0; // the input image\n Image matrix1; // the input image\n Image matrix2; // the input image\n Image matrix3; // the input image\n Image dst; // the output image\n\n void process() \{\n // Read the input image\n SampleType(matrix0) m0 = matrix0();\n SampleType(matrix1) m1 = matrix1();\n SampleType(matrix2) m2 = matrix2();\n SampleType(matrix3) m3 = matrix3();\n\n // Create the matrix object (matrix3 in this case)\n float4x4 matrix;\n matrix\[0]\[0] = m0.x;\n matrix\[0]\[1] = m0.y;\n matrix\[0]\[2] = m0.z;\n matrix\[0]\[3] = m0.w;\n matrix\[1]\[0] = m1.x;\n matrix\[1]\[1] = m1.y;\n matrix\[1]\[2] = m1.z;\n matrix\[1]\[3] = m1.w;\n matrix\[2]\[0] = m2.x;\n matrix\[2]\[1] = m2.y;\n matrix\[2]\[2] = m2.z;\n matrix\[2]\[3] = m2.w;\n matrix\[3]\[0] = m3.x;\n matrix\[3]\[1] = m3.y;\n matrix\[3]\[2] = m3.z;\n matrix\[3]\[3] = m3.w;\n\n // Inverse the matrix\n matrix = matrix.invert();\n\n // Write the result to the output image\n dst() = float4(matrix\[1]\[0], matrix\[1]\[1], matrix\[1]\[2], matrix\[1]\[3]);\n \}\n\};\n" rebuild "" rebuild_finalise "" name BlinkScript2 xpos 742 ypos 581 } Dot { name Dot37 tile_color 0xcccccc00 xpos 776 ypos 692 } push $N142755e0 push $N1c6f5ac0 push $N1c7017f0 push $N1e9a4770 BlinkScript { inputs 4 recompileCount 15 ProgramGroup 1 KernelDescription "2 \"InvertMatrix4\" iterate pixelWise 13aa95e9193320b60408dcef52f07d536b6bc8570746ebe3a513989e032825a7 5 \"matrix0\" Read Point \"matrix1\" Read Point \"matrix2\" Read Point \"matrix3\" Read Point \"dst\" Write Point 0 0 0" kernelSource "kernel InvertMatrix4 : ImageComputationKernel\n\{\n Image matrix0; // the input image\n Image matrix1; // the input image\n Image matrix2; // the input image\n Image matrix3; // the input image\n Image dst; // the output image\n\n void process() \{\n // Read the input image\n SampleType(matrix0) m0 = matrix0();\n SampleType(matrix1) m1 = matrix1();\n SampleType(matrix2) m2 = matrix2();\n SampleType(matrix3) m3 = matrix3();\n\n // Create the matrix object (matrix3 in this case)\n float4x4 matrix;\n matrix\[0]\[0] = m0.x;\n matrix\[0]\[1] = m0.y;\n matrix\[0]\[2] = m0.z;\n matrix\[0]\[3] = m0.w;\n matrix\[1]\[0] = m1.x;\n matrix\[1]\[1] = m1.y;\n matrix\[1]\[2] = m1.z;\n matrix\[1]\[3] = m1.w;\n matrix\[2]\[0] = m2.x;\n matrix\[2]\[1] = m2.y;\n matrix\[2]\[2] = m2.z;\n matrix\[2]\[3] = m2.w;\n matrix\[3]\[0] = m3.x;\n matrix\[3]\[1] = m3.y;\n matrix\[3]\[2] = m3.z;\n matrix\[3]\[3] = m3.w;\n\n // Inverse the matrix\n matrix = matrix.invert();\n\n // Write the result to the output image\n dst() = float4(matrix\[0]\[0], matrix\[0]\[1], matrix\[0]\[2], matrix\[0]\[3]);\n \}\n\};\n" rebuild "" rebuild_finalise "" name BlinkScript1 selected true xpos 558 ypos 588 } push $N120b6ee0 Copy { inputs 2 from0 rgba.red to0 matrix0.0 from1 rgba.green to1 matrix0.1 from2 rgba.blue to2 matrix0.2 from3 rgba.alpha to3 matrix0.3 bbox B name Copy2 xpos 276 ypos 569 } Copy { inputs 2 from0 rgba.red to0 matrix1.0 from1 rgba.green to1 matrix1.1 from2 rgba.blue to2 matrix1.2 from3 rgba.alpha to3 matrix1.3 bbox B name Copy1 xpos 276 ypos 664 } Copy { inputs 2 from0 rgba.red to0 matrix2.0 from1 rgba.green to1 matrix2.1 from2 rgba.blue to2 matrix2.2 from3 rgba.alpha to3 matrix2.3 bbox B name Copy4 xpos 276 ypos 748 } Copy { inputs 2 from0 rgba.red to0 matrix3.0 from1 rgba.green to1 matrix3.1 from2 rgba.blue to2 matrix3.2 from3 rgba.alpha to3 matrix3.3 bbox B name Copy5 xpos 276 ypos 838 } Output { name Output1 xpos 276 ypos 1059 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_KeyChew.gizmo ================================================ Group { name KeyChew help "Cheaply dilates and erodes a matte" onCreate "n = nuke.thisNode()\nn.knob(\"shrinkDilate\").setRange(-50,50)\n" tile_color 0x878787ff selected true addUserKnob {20 User l Keychew} addUserKnob {14 shrinkDilate l "Shrink / Dilate" R -50 50} addUserKnob {41 filter l "" -STARTLINE T Blur1.filter} addUserKnob {7 contrast l Contrast R 0 10} addUserKnob {14 postBlur l "Post Blur" R 0 100} addUserKnob {41 filter_1 l "" -STARTLINE T Blur11.filter} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge1.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge1.fringe} addUserKnob {41 mix T Merge1.mix} addUserKnob {20 info l Info} addUserKnob {26 created l created: T "1/1/2015 by Rafal Kaniewski"} addUserKnob {26 adjustments l "adjustments by:" T "Igor Gama + Tony Lyons"} } Input { inputs 0 name Inputmask xpos 327 ypos 707 number 1 } Input { inputs 0 name Input xpos 180 ypos 104 } Dot { name Dot1 note_font_size 41 xpos 214 ypos 161 } set Nea18d320 [stack 0] Blur { channels alpha size {{abs(shrinkDilate) x1004 8} {abs(shrinkDilate) x1004 8}} filter quadratic crop false name Blur1 xpos 180 ypos 221 addUserKnob {20 User} addUserKnob {7 Chew R -300 300} Chew 106 } Invert { channels alpha name Invert2 xpos 180 ypos 320 disable {{parent.Invert3.disable}} } Grade { channels {-rgba.red -rgba.green -rgba.blue rgba.alpha} white {{abs(shrinkDilate)+1 x1004 1.32}} gamma {{1/abs(abs(shrinkDilate)/(1-contrast+10)+1)}} black_clamp false name Grade3 xpos 180 ypos 371 } Invert { channels alpha name Invert3 xpos 180 ypos 424 disable {{shrinkDilate>0?1:0}} } Clamp { channels alpha name Clamp5 xpos 180 ypos 494 } Blur { channels alpha size {{parent.postBlur} {parent.postBlur}} crop false name Blur11 xpos 180 ypos 594 } push $Nea18d320 Dot { name Dot2 note_font_size 41 xpos 63 ypos 161 } Dot { name Dot3 note_font_size 41 xpos 63 ypos 710 } Merge2 { inputs 2+1 operation copy also_merge rgba name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 180 ypos 707 } Output { name Output1 xpos 180 ypos 772 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_KeymixBBox.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { inputs 3 name KeymixBBox tile_color 0x4b5ec6ff selected true addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N8e543ea0 [stack 0] Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set Ncfd3cc70 [stack 0] Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } set Nc1bc290 [stack 0] push $N8e543ea0 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -350 } push $Nc1bc290 push $Ncfd3cc70 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -350 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 channels rgba name Keymix8 selected true xpos 378 ypos -350 } Output { name Output1 xpos 378 ypos -249 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_KillOutline.gizmo ================================================ Group { name KillOutline help "KillOutline reduces unwanted outlines from keyed footage.\n\nerode controls: erode the alpha in for the amount of the visible outline.\n\nexpand controls: expand outer pixels of eroded image out again until it reaches the edge of the original alpha.\n\ntransition treatment: if needed, blur the transition between original image and extension." note_font Verdana selected true mapsize {0.15 0.15} addUserKnob {20 Settings} addUserKnob {26 title l "" +STARTLINE T "KillOutline by Andreas Frickinger"} addUserKnob {26 expectation l "" +STARTLINE T "expects premultiplied input."} addUserKnob {26 text_2 l "Erode Controls"} addUserKnob {41 erodeSize l "erode size" t "alpha gets eroded in by this amount." T GizmoControl.erodeSize} addUserKnob {26 text l "Expand Controls"} addUserKnob {41 slices T EdgeExtend2.slices} addUserKnob {41 slice_width l "slice width" T EdgeExtend2.slice_width} addUserKnob {41 expandSize l "expand size" t "outer pixels of eroded image gets dilated out by this amount. " T EdgeExtend2.blurResult} addUserKnob {26 text_1 l "Transition Treatment"} addUserKnob {41 transitionTreatmentSwitch l on/off T GizmoControl.transitionTreatmentSwitch} addUserKnob {41 edgeSize l "edge size" t "size of transition edge." T GizmoControl.edgeSize} addUserKnob {41 edgeBlur l "edge blur" t "blur size of transition edge." T GizmoControl.edgeBlur} addUserKnob {41 size l "image blur" t "blur size of image, masked out by transition edge." T TransitionBlur.size} addUserKnob {26 "" +STARTLINE} addUserKnob {7 mix l Mix} mix 1 } NoOp { inputs 0 name GizmoControl xpos 1425 ypos 254 addUserKnob {20 User} addUserKnob {6 transitionTreatmentSwitch l on/off +STARTLINE} transitionTreatmentSwitch true addUserKnob {7 edgeBlur l "edge blur" R 0 100} edgeBlur 3 addUserKnob {7 edgeSize l "edge size" R -1 10} edgeSize 1 addUserKnob {7 erodeSize l "erode size" R 0 10} erodeSize 1.25 } Input { inputs 0 name mask xpos 1465 ypos 775 number 1 } Invert { name Invert1 xpos 1465 ypos 829 } set N5ebf700 [stack 0] Dot { name Dot17 xpos 1499 ypos 1152 } Input { inputs 0 name img xpos 833 ypos -395 } Dot { name Dot5 xpos 867 ypos -311 } set N1b631370 [stack 0] Unpremult { name UnpremultInput xpos 833 ypos -241 } Dot { name Dot3 xpos 867 ypos -144 } set N1b63ca60 [stack 0] Dot { name Dot4 xpos 867 ypos 371 } Dot { name Dot1 xpos 923 ypos 370 } set N5e11630 [stack 0] Dot { name Dot2 xpos 923 ypos 671 } set N5e15260 [stack 0] Dot { name Dot18 xpos 923 ypos 1061 } push $N1b63ca60 Shuffle { red black green black blue black name AlphaOnly xpos 1250 ypos -147 } Erode { size {{GizmoControl.erodeSize i}} name ErodeShrink xpos 1250 ypos 38 } set N5e37a90 [stack 0] Dot { name Dot10 xpos 1657 ypos 47 } EdgeDetectWrapper { channels alpha erodesize {{GizmoControl.edgeSize*-1 i}} blursize {{abs(erodesize) i} {abs(erodesize)*3 i}} name EdgeDetectWrapper1 xpos 1623 ypos 257 } Blur { size {{GizmoControl.edgeBlur i}} name EdgeBlur xpos 1623 ypos 321 } Dot { name Dot14 xpos 1657 ypos 572 } set N1b2dc4f0 [stack 0] push $N5e37a90 push $N5e11630 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 1250 ypos 362 } Premult { name Premult2 xpos 1250 ypos 457 } set N5e8d4b0 [stack 0] Dot { name Dot12 xpos 1102 ypos 460 } Blur { inputs 1+1 size {{parent.TransitionBlur.size i}} name TransitionBlur1 xpos 1068 ypos 563 disable {{(GizmoControl.transitionTreatmentSwitch-1)*-1 i}} } push $N5e15260 Expression { expr3 a==0?0:a name Expression1 xpos 982 ypos 668 } set N5e7f060 [stack 0] Dot { name Dot19 xpos 1016 ypos 981 } Merge2 { inputs 2 operation stencil name Merge3 xpos 1068 ypos 978 } push $N1b2dc4f0 Dot { name Dot9 xpos 1657 ypos 605 } set N5ed5b20 [stack 0] Merge2 { inputs 2 name Merge4 xpos 1623 ypos 978 } Clamp { channels alpha name Clamp1 xpos 1623 ypos 1002 } Merge2 { inputs 2 operation mask name Max xpos 1623 ypos 1058 } Merge2 { inputs 2 operation stencil name Merge5 xpos 1623 ypos 1149 } Dot { name Dot13 xpos 1657 ypos 1226 } push $N5ebf700 push $N1b631370 Dot { name Dot6 xpos 585 ypos -311 } Dot { name Dot7 xpos 585 ypos 839 } Dot { name Dot8 xpos 1170 ypos 838 } set N5c76ab0 [stack 0] push $N5e7f060 push $N5ed5b20 push $N5e8d4b0 push $N5e8d4b0 Group { inputs 2 name EdgeExtend2 help "EdgeExtend repeatedly blurs and unpremuliplies the image to extend edges outward while trying to preserve the original source colour" xpos 1250 ypos 515 addUserKnob {20 "" l User} addUserKnob {4 premult l "input is" M {premultiplied unpremultiplied}} addUserKnob {3 slices t "How many times the edges are blurred and unpremuliplied.\nThis is the fine control for slightly better quality. The current maximum is 10."} slices 4 addUserKnob {3 slice_width l "slice width" t "Blur amount that is applied before unpremultiplying the result per slice.\nThis is the brute force control and should be kept at 1 if possible.\nOnly increase this if the maximum amount of slices (10) doesn't cover the area you need."} slice_width 1 addUserKnob {7 blurResult l "blur slices" R 0 10} blurResult 5 } Input { inputs 0 name img xpos -590 ypos -509 } set N5c81cd0 [stack 0] Dot { name Dot1 xpos -556 ypos 978 } Input { inputs 0 name matte xpos -358 ypos -653 number 1 } push $N5c81cd0 Unpremult { name Unpremult11 xpos -468 ypos -509 disable {{parent.premult}} } Copy { inputs 2 from0 -rgba.alpha to0 -rgba.alpha channels alpha name Copy2 xpos -358 ypos -516 } Premult { name Premult1 xpos -358 ypos -450 } Shuffle { black alpha out2 depth name Shuffle1 label alpha>depth xpos -223 ypos -413 } Unpremult { channels {rgba.red rgba.green rgba.blue depth.Z} name Unpremult1 xpos -223 ypos -373 } set N5c0c880 [stack 0] Dot { name Dot2 xpos -189 ypos -214 } set N2007d4d0 [stack 0] push $N5c0c880 Blur { channels {rgba.red rgba.green rgba.blue depth.Z} size {{parent.slice_width}} name Blur1 xpos -25 ypos -373 } Shuffle { in2 depth alpha red2 out2 depth name Shuffle3 label depth>alpha xpos -25 ypos -333 } Unpremult { channels rgba alpha depth.Z name Unpremult3 xpos -25 ypos -293 } Blur { channels rgba size {{parent.blurResult}} name Blur10 xpos -25 ypos -241 } set C5c63600 [stack 0] Merge2 { inputs 2 Achannels {rgba.red rgba.green rgba.blue depth.Z} name Merge1 xpos -25 ypos -218 } set N5c6e060 [stack 0] Dot { name Dot3 xpos 9 ypos -73 } set N200c2d90 [stack 0] push $N5c6e060 Blur { channels rgba size {{parent.slice_width}} name Blur2 xpos 159 ypos -218 } Shuffle { in2 depth black alpha out2 depth name Shuffle5 label alpha>depth xpos 159 ypos -180 } Unpremult { channels {rgba.red rgba.green rgba.blue depth.Z} name Unpremult2 xpos 159 ypos -140 } Blur { channels {rgba.red rgba.green rgba.blue depth.Z} size {{parent.blurResult}} name Blur3 xpos 159 ypos -101 } set C1b20ac30 [stack 0] Merge2 { inputs 2 name Merge2 xpos 159 ypos -73 } set N20093730 [stack 0] Dot { name Dot4 xpos 193 ypos 103 } set N2008df10 [stack 0] push $N20093730 Shuffle { in2 depth alpha red2 out2 depth name Shuffle2 label depth>alpha xpos 342 ypos -24 } Unpremult { channels rgba alpha depth.Z name Unpremult4 xpos 342 ypos 16 } set N200de320 [stack 0] clone $C5c63600 { xpos 342 ypos 68 selected false } Merge2 { inputs 2 Achannels {rgba.red rgba.green rgba.blue depth.Z} name Merge3 xpos 342 ypos 103 } Dot { name Dot5 xpos 373 ypos 226 } set N5e206e0 [stack 0] push $N200de320 Blur { channels rgba size {{parent.slice_width}} name Blur5 xpos 503 ypos 23 } Shuffle { in2 depth black alpha out2 depth name Shuffle4 label alpha>depth xpos 503 ypos 65 } Unpremult { channels {rgba.red rgba.green rgba.blue depth.Z} name Unpremult5 xpos 503 ypos 105 } set N1b6d0ab0 [stack 0] clone $C1b20ac30 { xpos 503 ypos 174 selected false } Merge2 { inputs 2 name Merge4 xpos 503 ypos 226 } Dot { name Dot6 xpos 537 ypos 321 } set N5e25a50 [stack 0] push $N1b6d0ab0 Blur { channels {rgba.red rgba.green rgba.blue depth.Z} size {{parent.slice_width}} name Blur7 xpos 689 ypos 105 } Shuffle { in2 depth alpha red2 out2 depth name Shuffle6 label depth>alpha xpos 689 ypos 145 } Unpremult { channels rgba alpha depth.Z name Unpremult6 xpos 689 ypos 185 } set N1b6f5cd0 [stack 0] clone $C5c63600 { xpos 684 ypos 272 selected false } Merge2 { inputs 2 Achannels {rgba.red rgba.green rgba.blue depth.Z} name Merge5 xpos 689 ypos 321 } Dot { name Dot7 xpos 723 ypos 448 } set N191cc770 [stack 0] push $N1b6f5cd0 Blur { channels rgba size {{parent.slice_width}} name Blur9 xpos 856 ypos 200 } Shuffle { in2 depth black alpha out2 depth name Shuffle7 label alpha>depth xpos 856 ypos 280 } Unpremult { channels {rgba.red rgba.green rgba.blue depth.Z} name Unpremult7 xpos 856 ypos 320 } set N19141860 [stack 0] clone $C1b20ac30 { xpos 852 ypos 405 selected false } Merge2 { inputs 2 name Merge6 xpos 856 ypos 448 } Dot { name Dot8 xpos 890 ypos 514 } set N19115c50 [stack 0] push $N19141860 Blur { channels {rgba.red rgba.green rgba.blue depth.Z} size {{parent.slice_width}} name Blur12 xpos 1042 ypos 320 } Shuffle { in2 depth alpha red2 out2 depth name Shuffle8 label depth>alpha xpos 1042 ypos 393 } Unpremult { channels rgba alpha depth.Z name Unpremult8 xpos 1042 ypos 433 } set N880a710 [stack 0] clone $C5c63600 { xpos 1046 ypos 484 selected false } Merge2 { inputs 2 Achannels {rgba.red rgba.green rgba.blue depth.Z} name Merge7 xpos 1042 ypos 514 } Dot { name Dot9 xpos 1076 ypos 579 } set N8829a90 [stack 0] push $N880a710 Blur { channels rgba size {{parent.slice_width}} name Blur14 xpos 1205 ypos 440 } Shuffle { in2 depth black alpha out2 depth name Shuffle9 label alpha>depth xpos 1205 ypos 466 } Unpremult { channels {rgba.red rgba.green rgba.blue depth.Z} name Unpremult9 xpos 1205 ypos 506 } set N8846200 [stack 0] clone $C1b20ac30 { xpos 1206 ypos 551 selected false } Merge2 { inputs 2 name Merge8 xpos 1205 ypos 579 } Dot { name Dot10 xpos 1239 ypos 664 } set N88653f0 [stack 0] push $N8846200 Blur { channels {rgba.red rgba.green rgba.blue depth.Z} size {{parent.slice_width}} name Blur16 xpos 1421 ypos 506 } Shuffle { in2 depth alpha red2 out2 depth name Shuffle11 label depth>alpha xpos 1421 ypos 546 } Unpremult { channels rgba alpha depth.Z name Unpremult10 xpos 1421 ypos 586 } clone $C5c63600 { xpos 1421 ypos 638 selected true } Merge2 { inputs 2 Achannels {rgba.red rgba.green rgba.blue depth.Z} name Merge9 xpos 1421 ypos 664 } push $N88653f0 push $N8829a90 push $N19115c50 push $N191cc770 push $N5e25a50 push $N5e206e0 push $N2008df10 push $N200c2d90 push $N2007d4d0 push $N5c81cd0 Switch { inputs 11 which {{parent.slices}} name Switch1 xpos 689 ypos 827 } Shuffle { in2 depth alpha red2 out2 depth name Shuffle10 label depth>alpha xpos 689 ypos 865 } Remove { channels depth name Remove1 xpos 689 ypos 905 } Copy { inputs 2 from0 -rgba.alpha to0 -rgba.alpha channels depth name Copy1 xpos 689 ypos 960 } Output { name Output1 xpos 689 ypos 1290 } Blur { inputs 0 channels {rgba.red rgba.green rgba.blue depth.Z} size 8.5 name Blur18 xpos 299 ypos -61 } end_group Blur { inputs 1+1 size 2.1 name TransitionBlur xpos 1250 ypos 596 disable {{(GizmoControl.transitionTreatmentSwitch-1)*-1 i}} } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy2 xpos 1250 ypos 662 } Premult { name Premult3 xpos 1250 ypos 777 } Keymix { inputs 3 name Keymix1 xpos 1250 ypos 829 } Copy { inputs 2 from0 rgba.alpha to0 mask.a name Copy3 xpos 1250 ypos 1217 } push $N5c76ab0 Dot { name Dot11 xpos 1170 ypos 1343 } Dissolve { inputs 2 which {{parent.mix i}} name Dissolve1 xpos 1250 ypos 1334 } Output { name Output1 xpos 1250 ypos 1433 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_LabelFromRead.gizmo ================================================ Group { name LabelFromRead tile_color 0x1f1f1fff label "\[ expr \{ \[value splitPath] ? \[value finalFilePath] : \[] \} ]\n\[value inputDesc]" note_font "Verdana Bold" note_font_color 0xe5e500ff selected true addUserKnob {20 LabelFromRead} addUserKnob {1 inputName +INVISIBLE} inputName "\[file tail \[value \[topnode].file]] \n" addUserKnob {1 fullPath +INVISIBLE} fullPath "\[value \[topnode].file]" addUserKnob {6 filenameCheck l "Include FIle Name?" +STARTLINE} filenameCheck true addUserKnob {4 pathType l "" -STARTLINE M {"Full Path" Tail}} pathType Tail addUserKnob {6 splitPath l "Split Path" -STARTLINE} addUserKnob {1 whichPath +INVISIBLE} whichPath "\[ expr \{ \[value pathType] == \"Full Path\" ? \[value fullPath] : \[value inputName] \} ]" addUserKnob {3 rangeStart l range} rangeStart 1 addUserKnob {3 rangeEnd l " - " -STARTLINE} rangeEnd 2 addUserKnob {1 splitText l "Split with" -STARTLINE} splitText _ addUserKnob {1 fileRange +INVISIBLE} fileRange "\[ expr \{ \[value splitPath] ? \[ expr \{ \[value filenameCheck] ? \[lrange \[split \[value whichPath] \[value splitText] ] \[value rangeStart] \[value rangeEnd] ] : \[] \} ] : \[value whichPath] \} ]" addUserKnob {1 finalFilePath +INVISIBLE} finalFilePath "\[value fileRange]" addUserKnob {6 descCheck l "Include Description?" +STARTLINE} addUserKnob {1 inputDesc l Description} addUserKnob {26 ""} addUserKnob {6 color_rgb_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {18 color l "Text Color"} color {1 1 0} addUserKnob {6 color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 color_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 borderColor l "Border Color"} borderColor {0 0 0} addUserKnob {6 borderColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 borderColor_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 color_rgb_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 borderSize l "Border Size" R 0 5} borderSize 2 addUserKnob {6 enableBackground l "Enable Background" +INVISIBLE +STARTLINE} addUserKnob {26 ""} addUserKnob {20 font n 1} font 0 addUserKnob {41 fileFront l "File Font" T FileName.font} addUserKnob {41 descFont l "Description Font" T Description.font} addUserKnob {20 endGroup n -1} addUserKnob {41 xjustify l Justify T FileName.xjustify} addUserKnob {41 yjustify l "" -STARTLINE T FileName.yjustify} addUserKnob {7 size l "Overall Size" R -50 50} addUserKnob {7 x_pos l "X Pos" R -100 100} addUserKnob {7 YPos l "Y Pos" R -100 100} addUserKnob {26 ""} addUserKnob {41 mix T Merge1.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Takes the last section of the filename and displays in on the top of frame\n\n- Can toggle dsiplay of a User Description\n- Can adjust size and position of Text" T LabelFromRead} addUserKnob {26 text l Version: T v06} } Input { inputs 0 name Input xpos -195 ypos -608 } Dot { name Dot1 xpos -161 ypos -550 } set N36754800 [stack 0] Remove { operation keep channels rgba name Remove1 xpos -339 ypos -553 } Shuffle { red black green black blue black alpha black name Shuffle1 label "\[value in]" xpos -339 ypos -529 } Text2 { font_size_toolbar 100 font_width_toolbar 100 font_height_toolbar 100 message "\[value parent.inputDesc]" old_expression_markers {{0 -1} } box {0 {input.height-(input.height/5)} {input.width} {input.height-(input.height/37.25)}} xjustify {{parent.FileName.xjustify}} yjustify {{parent.FileName.yjustify}} transforms {{0 2} } global_font_scale {{(input.width/35+parent.size)/100}} scale {1 1} cursor_initialised true autofit_bbox false initial_cursor_position {{0 1556} } group_animations {{0} imported: 0 selected: items: "root transform"} animation_layers {{1 11 0 {input.height-(input.height/7)} {"input.width/40+ parent.x_pos"} {parent.YPos} 1 1 0 0 0 0} } color {{parent.color} {parent.color} {parent.color} 1} background_border_x 0 background_border_y 0 enable_shadows true shadow_color {{parent.borderColor} {parent.borderColor} {parent.borderColor} 1} shadow_opacity 1 shadow_distance 0 shadow_size {{parent.borderSize}} name Description selected true xpos -339 ypos -453 disable {{!parent.descCheck}} } Text2 { font_size_toolbar 100 font_width_toolbar 100 font_height_toolbar 100 message "\n\[value parent.finalFilePath]" old_message {{10 78 111 116 104 105 110 103 32 105 115 32 110 97 109 101 100 32 34 110 111 100 101 49 51 54 55 55 54 98 48 48 46 102 105 108 101 34} } old_expression_markers {{1 37} } box {0 {input.height-(input.height/5)} {input.width} {input.height-(input.height/37.25)}} transforms {{0 2} } cursor_position 1 global_font_scale {{(input.width/35+parent.size)/100}} scale {1 1} cursor_initialised true autofit_bbox false initial_cursor_position {{0 1556} } group_animations {{0} imported: 0 selected: items: "root transform"} animation_layers {{1 11 0 {input.height-(input.height/7)} {"input.width/40+ parent.x_pos"} {"descCheck == 1 ? parent.YPos : input.height/20 + parent.YPos"} 1 1 0 0 0 0} } color {{parent.color} {parent.color} {parent.color} 1} enable_background {{parent.enableBackground}} background_border_x 0 background_border_y 0 enable_shadows true shadow_color {{parent.borderColor} {parent.borderColor} {parent.borderColor} 1} shadow_opacity 1 shadow_distance 0 shadow_size {{parent.borderSize}} name FileName xpos -339 ypos -408 disable {{!parent.filenameCheck}} } Dot { name Dot2 xpos -305 ypos -342 } push $N36754800 Merge2 { inputs 2 bbox B name Merge1 xpos -195 ypos -345 } Output { name Output1 xpos -195 ypos -201 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_LensEngine.gizmo ================================================ Group { name LensEngine selected true addUserKnob {20 mainTab l main} addUserKnob {26 headline l "" +STARTLINE T "Lens Engine v1.3 "} addUserKnob {26 headline2 l "" +STARTLINE T "by Kyran Bishop"} addUserKnob {26 formatSettings l "project format"} addUserKnob {41 format T backdropConstant.format} addUserKnob {26 flareTranslateHeader l "flare translate"} addUserKnob {12 flarePos l "flare position"} flarePos {960 540} addUserKnob {16 flareCoreSize l size} flareCoreSize 1 addUserKnob {26 lensDirtHeader l "lens dirt"} addUserKnob {6 lensDirtEnable l enable +STARTLINE} addUserKnob {4 lensDirtCalculation l "calculation type" M {simple "normals based"}} lensDirtCalculation "normals based" addUserKnob {4 lensDirtPicker l type M {water "water clumpy" scratches streaks "\[custom dirt]"}} addUserKnob {4 lensDirtBlurType l "blur type" M {"basic blur" "bokeh blur"}} addUserKnob {14 lensDirtBlur l softness R 0 100} lensDirtBlur 1 addUserKnob {7 lensBlurAspectRatio l "aspect ratio" R 1 2} lensBlurAspectRatio 1 addUserKnob {7 lensDirtMix l mix} lensDirtMix 1 addUserKnob {7 lensDirtBoost l boost R 0 10} lensDirtBoost 1 addUserKnob {6 lensDirtRangePreview l "preview range" +STARTLINE} addUserKnob {7 lensDirtRangeFalloff l falloff R 0 2000} lensDirtRangeFalloff 200 addUserKnob {7 lensDirtFalloffSteepness l "falloff clamp" R 0 0.25} lensDirtFalloffSteepness 0.03 addUserKnob {26 UIcontrolheader l "UI controls"} addUserKnob {22 resetAll l "reset all" T "import nuke\n\n# template\n#nuke.thisNode()\[''].setValue()\n\n# env variables\nf = nuke.root().format()\nfw = f.width()\nfh = f.height()\n\nif nuke.ask('Are you sure you want to reset the flare? This action cannot be undone!'):\n\t\n\t# main\n\t# translate\n\tnuke.thisNode()\['flarePos'].setValue(fw/2, 0)\n\tnuke.thisNode()\['flarePos'].setValue(fh/2, 1)\n\tnuke.thisNode()\['flareCoreSize'].setValue(1)\n\t# lens dirt\n\tnuke.thisNode()\['lensDirtEnable'].setValue(0)\n\tnuke.thisNode()\['lensDirtPicker'].setValue(0)\n\tnuke.thisNode()\['lensDirtBlurType'].setValue(0)\n\tnuke.thisNode()\['lensDirtBlur'].setValue(1)\n\tnuke.thisNode()\['lensBlurAspectRatio'].setValue(1)\n\tnuke.thisNode()\['lensDirtMix'].setValue(1)\n\tnuke.thisNode()\['lensDirtBoost'].setValue(1)\n\tnuke.thisNode()\['lensDirtRangePreview'].setValue(0)\n\tnuke.thisNode()\['lensDirtRangeFalloff'].setValue(200)\n\tnuke.thisNode()\['lensDirtFalloffSteepness'].setValue(0.03)\n\n\t# cores\n\t# core\n\tnuke.thisNode()\['altCoreDisable'].setValue(1)\n\tnuke.thisNode()\['coreSize'].setValue(1)\n\tnuke.thisNode()\['coreOffsetSlider'].setValue(0, 0)\n\tnuke.thisNode()\['coreOffsetSlider'].setValue(0, 1)\n\tnuke.thisNode()\['coreRotation'].setValue(0)\n\tnuke.thisNode()\['coreTypePick'].setValue(0)\n\tnuke.thisNode()\['coreColour'].setValue(1, 0)\n\tnuke.thisNode()\['coreColour'].setValue(1, 1)\n\tnuke.thisNode()\['coreColour'].setValue(1, 2)\n\tnuke.thisNode()\['coreBlur'].setValue(0)\n\tnuke.thisNode()\['coreMix'].setValue(1)\n\t# core rays\n\tnuke.thisNode()\['coreRaysEnable'].setValue(1)\n\tnuke.thisNode()\['coreRaysSize'].setValue(1)\n\tnuke.thisNode()\['coreRaysRotation'].setValue(0)\n\tnuke.thisNode()\['coreRaysThickness'].setValue(0)\n\tnuke.thisNode()\['coreRaysType'].setValue(0)\n\tnuke.thisNode()\['coreRaysColour'].setValue(1, 0)\n\tnuke.thisNode()\['coreRaysColour'].setValue(1, 1)\n\tnuke.thisNode()\['coreRaysColour'].setValue(1, 2)\n\tnuke.thisNode()\['coreRaysBlur'].setValue(0)\n\tnuke.thisNode()\['coreRaysMix'].setValue(0.2)\n\tnuke.thisNode()\['coreRaysSeed'].setValue(0)\n\t# core extra\n\tnuke.thisNode()\['coreCoronaAlt'].setValue(1)\n\tnuke.thisNode()\['coreCoronaSize'].setValue(1)\n\tnuke.thisNode()\['coronaOffsetSlider'].setValue(0, 0)\n\tnuke.thisNode()\['coronaOffsetSlider'].setValue(0, 1)\n\tnuke.thisNode()\['coreCoronaRotation'].setValue(0)\n\tnuke.thisNode()\['coreCoronaType'].setValue(3)\n\tnuke.thisNode()\['coreCoronaNoise'].setValue(0)\n\tnuke.thisNode()\['coreCoronaTint'].setValue(1, 0)\n\tnuke.thisNode()\['coreCoronaTint'].setValue(1, 1)\n\tnuke.thisNode()\['coreCoronaTint'].setValue(1, 2)\n\tnuke.thisNode()\['coreCoronaBlur'].setValue(0)\n\tnuke.thisNode()\['coreCoronaMix'].setValue(1)\n\t# corona\n\tnuke.thisNode()\['coronaExtraEnable'].setValue(1)\n\tnuke.thisNode()\['coronaExtraSize'].setValue(1)\n\tnuke.thisNode()\['coronaExtraOffset'].setValue(0, 0)\n\tnuke.thisNode()\['coronaExtraOffset'].setValue(0, 1)\n\tnuke.thisNode()\['coronaExtraRotation'].setValue(0)\n\tnuke.thisNode()\['coronaExtraType'].setValue(1)\n\tnuke.thisNode()\['coronaExtraNoise'].setValue(0)\n\tnuke.thisNode()\['coronaExtraColour'].setValue(1, 0)\n\tnuke.thisNode()\['coronaExtraColour'].setValue(1, 1)\n\tnuke.thisNode()\['coronaExtraColour'].setValue(1, 2)\n\tnuke.thisNode()\['coronaExtraBlur'].setValue(0)\n\tnuke.thisNode()\['coronaExtraMix'].setValue(0.5)\n\n\t# anomalies\n\t# anomaly\n\tnuke.thisNode()\['lensAnomalyEnable'].setValue(0)\n\tnuke.thisNode()\['anomalySize'].setValue(1)\n\tnuke.thisNode()\['anomalyPosOffset'].setValue(0, 0)\n\tnuke.thisNode()\['anomalyPosOffset'].setValue(0, 1)\n\tnuke.thisNode()\['coronaOffsetSlider'].setValue(0, 1)\n\tnuke.thisNode()\['anomalyRotOffset'].setValue(0)\n\tnuke.thisNode()\['anomalyAnamorph'].setValue(1)\n\tnuke.thisNode()\['anomalyType'].setValue(0)\n\tnuke.thisNode()\['anomalyColour'].setValue(1, 0)\n\tnuke.thisNode()\['anomalyColour'].setValue(1, 1)\n\tnuke.thisNode()\['anomalyColour'].setValue(1, 2)\n\tnuke.thisNode()\['anomalyPresat'].setValue(1)\n\tnuke.thisNode()\['anomalyBlur'].setValue(0)\n\tnuke.thisNode()\['anomalyMix'].setValue(1)\n\t# dog schidt\n\tnuke.thisNode()\['dogSchidtEnableAlt'].setValue(0)\n\tnuke.thisNode()\['coreDogschidtMix'].setValue(1)\n\tnuke.thisNode()\['dogSchidtSize'].setValue(1)\n\tnuke.thisNode()\['dogSchidtRotation'].setValue(0)\n\tnuke.thisNode()\['dogSchidtAnamorph'].setValue(1)\n\tnuke.thisNode()\['dogSchidtThickness'].setValue(0.5)\n\tnuke.thisNode()\['dogSchidtType'].setValue(0)\n\tnuke.thisNode()\['dogSchidtTint'].setValue(1, 0)\n\tnuke.thisNode()\['dogSchidtTint'].setValue(1, 1)\n\tnuke.thisNode()\['dogSchidtTint'].setValue(1, 2)\n\tnuke.thisNode()\['dogSchidtFalloff'].setValue(500, 0, 500, 1)\n\tnuke.thisNode()\['dogSchidtBlur'].setValue(0.2)\n\t# frame ghosting\n\tnuke.thisNode()\['frameGhostEnable'].setValue(0)\n\tnuke.thisNode()\['ghostCalc'].setValue(0)\n\tnuke.thisNode()\['frameGhostQuality'].setValue(0.15)\n\tnuke.thisNode()\['frameGhostPreview'].setValue(0)\n\tnuke.thisNode()\['frameGhostSelectionPreview'].setValue(0)\n\tnuke.thisNode()\['frameGhostSelection'].setValue(0.2)\n\tnuke.thisNode()\['frameGhostGamma'].setValue(0.4)\n\tnuke.thisNode()\['frameGhostSat'].setValue(1)\n\tnuke.thisNode()\['frameGhostOverallColour'].setValue(1, 0)\n\tnuke.thisNode()\['frameGhostOverallColour'].setValue(1, 1)\n\tnuke.thisNode()\['frameGhostOverallColour'].setValue(1, 2)\n\tnuke.thisNode()\['frameGhostBlur'].setValue(0)\n\tnuke.thisNode()\['frameGhostMix'].setValue(1)\t\n\t# frame ghosting - flare 1\n\tnuke.thisNode()\['frameGhostFlare1Enable'].setValue(1)\n\tnuke.thisNode()\['frameGhostFlare1Size'].setValue(5)\n\tnuke.thisNode()\['frameGhostFlare1PosOffset'].setValue(-1)\n\tnuke.thisNode()\['frameGhostFlare1Colour'].setValue(1, 0)\n\tnuke.thisNode()\['frameGhostFlare1Colour'].setValue(1, 1)\n\tnuke.thisNode()\['frameGhostFlare1Colour'].setValue(1, 2)\n\tnuke.thisNode()\['frameGhostFlare1Blur'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare1Mix'].setValue(1)\n\tnuke.thisNode()\['frameGhostFlare1Shape'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare1DiaphragmSize'].setValue(1)\n\tnuke.thisNode()\['frameGhostFlare1DiaphragmRot'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare1NoiseOpac'].setValue(0.5)\n\tnuke.thisNode()\['frameGhostFlare1Noise'].setValue(0.5)\n\tnuke.thisNode()\['frameGhostFlare1ReflRotation'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare1ReflBlur'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare1ReflGamma'].setValue(1)\n\t# frame ghosting - flare 2\n\tnuke.thisNode()\['frameGhostFlare2Enable'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare2Size'].setValue(5)\n\tnuke.thisNode()\['frameGhostFlare2PosOffset'].setValue(-0.2)\n\tnuke.thisNode()\['frameGhostFlare2Colour'].setValue(1, 0)\n\tnuke.thisNode()\['frameGhostFlare2Colour'].setValue(1, 1)\n\tnuke.thisNode()\['frameGhostFlare2Colour'].setValue(1, 2)\n\tnuke.thisNode()\['frameGhostFlare2Blur'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare2Mix'].setValue(1)\n\tnuke.thisNode()\['frameGhostFlare2Shape'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare2DiaphragmSize'].setValue(1)\n\tnuke.thisNode()\['frameGhostFlare2DiaphragmRot'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare2NoiseOpac'].setValue(0.5)\n\tnuke.thisNode()\['frameGhostFlare2Noise'].setValue(0.5)\n\tnuke.thisNode()\['frameGhostFlare2ReflRotation'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare2ReflBlur'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare2ReflGamma'].setValue(1)\n\t# frame ghosting - flare 3\n\tnuke.thisNode()\['frameGhostFlare3Enable'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare3Size'].setValue(3)\n\tnuke.thisNode()\['frameGhostFlare3PosOffset'].setValue(-1)\n\tnuke.thisNode()\['frameGhostFlare3Colour'].setValue(1, 0)\n\tnuke.thisNode()\['frameGhostFlare3Colour'].setValue(1, 1)\n\tnuke.thisNode()\['frameGhostFlare3Colour'].setValue(1, 2)\n\tnuke.thisNode()\['frameGhostFlare3Blur'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare3Mix'].setValue(1)\n\tnuke.thisNode()\['frameGhostFlare3Shape'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare3DiaphragmSize'].setValue(1)\n\tnuke.thisNode()\['frameGhostFlare3DiaphragmRot'].setValue(0)\t\n\tnuke.thisNode()\['frameGhostFlare3NoiseOpac'].setValue(0.5)\n\tnuke.thisNode()\['frameGhostFlare3Noise'].setValue(0.5)\n\tnuke.thisNode()\['frameGhostFlare3ReflRotation'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare3ReflBlur'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare3ReflGamma'].setValue(1)\n\t# frame ghosting - flare 4\n\tnuke.thisNode()\['frameGhostFlare4Enable'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare4Size'].setValue(1)\n\tnuke.thisNode()\['frameGhostFlare4PosOffset'].setValue(0.2)\n\tnuke.thisNode()\['frameGhostFlare4Colour'].setValue(1, 0)\n\tnuke.thisNode()\['frameGhostFlare4Colour'].setValue(1, 1)\n\tnuke.thisNode()\['frameGhostFlare4Colour'].setValue(1, 2)\n\tnuke.thisNode()\['frameGhostFlare4Blur'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare4Mix'].setValue(1)\n\tnuke.thisNode()\['frameGhostFlare4Shape'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare4DiaphragmSize'].setValue(1)\n\tnuke.thisNode()\['frameGhostFlare4DiaphragmRot'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare4NoiseOpac'].setValue(0.5)\n\tnuke.thisNode()\['frameGhostFlare4Noise'].setValue(0.5)\n\tnuke.thisNode()\['frameGhostFlare4ReflRotation'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare4ReflBlur'].setValue(0)\n\tnuke.thisNode()\['frameGhostFlare4ReflGamma'].setValue(1)\n\n\t#lens pieces\n\t#lens pieces\n\tnuke.thisNode()\['lensPieceMainEnable'].setValue(0)\n\tnuke.thisNode()\['lensPieceMainSize'].setValue(1)\n\tnuke.thisNode()\['lensPieceMainSizeVariation'].setValue(1)\n\tnuke.thisNode()\['lensPieceMainOffset'].setValue(0)\n\tnuke.thisNode()\['lensPieceMainAdditional'].setValue(0)\n\tnuke.thisNode()\['lensPieceMainSeed'].setValue(0)\n\tnuke.thisNode()\['lensPieceMainType'].setValue(0)\n\tnuke.thisNode()\['lensPieceMainColour'].setValue(1, 0)\n\tnuke.thisNode()\['lensPieceMainColour'].setValue(1, 1)\n\tnuke.thisNode()\['lensPieceMainColour'].setValue(1, 2)\n\tnuke.thisNode()\['lensPieceMainBlur'].setValue(0)\n\tnuke.thisNode()\['lensPieceMainMix'].setValue(0.25)\n\t#big pieces\n\tnuke.thisNode()\['lensPieceBigEnable'].setValue(0)\n\tnuke.thisNode()\['lensPieceBigOffset'].setValue(0)\n\tnuke.thisNode()\['lensPieceBigSeed'].setValue(0)\n\tnuke.thisNode()\['lensPieceBigPicker'].setValue(3)\n\tnuke.thisNode()\['lensPieceBigTint'].setValue(1, 0)\n\tnuke.thisNode()\['lensPieceBigTint'].setValue(1, 1)\n\tnuke.thisNode()\['lensPieceBigTint'].setValue(1, 2)\n\tnuke.thisNode()\['lensPieceBigBlur'].setValue(0)\n\tnuke.thisNode()\['lensPieceBigMix'].setValue(0.25)\n\t#rings\n\tnuke.thisNode()\['lensPieceRingsEnable'].setValue(0)\n\tnuke.thisNode()\['lensPieceRingsRotation'].setValue(0)\n\tnuke.thisNode()\['lensPieceRingsPicker'].setValue(3)\n\tnuke.thisNode()\['lensPieceRingsTint'].setValue(1, 0)\n\tnuke.thisNode()\['lensPieceRingsTint'].setValue(1, 1)\n\tnuke.thisNode()\['lensPieceRingsTint'].setValue(1, 2)\n\tnuke.thisNode()\['lensPieceRingsMix'].setValue(0.4)\n\t#lines\n\tnuke.thisNode()\['lensPieceLinesEnable'].setValue(0)\n\tnuke.thisNode()\['lensPieceLinesStretch'].setValue(1)\n\tnuke.thisNode()\['lensPieceLinesOffset'].setValue(0)\n\tnuke.thisNode()\['lensPieceLinesPicker'].setValue(0)\n\tnuke.thisNode()\['lensPieceLinesTint'].setValue(1, 0)\n\tnuke.thisNode()\['lensPieceLinesTint'].setValue(1, 1)\n\tnuke.thisNode()\['lensPieceLinesTint'].setValue(1, 2)\n\tnuke.thisNode()\['lensPieceLinesMix'].setValue(0.05)\n\n\t# screen space fx\n\t# regions\n\tnuke.thisNode()\['previewEdgeArea'].setValue(0)\n\tnuke.thisNode()\['bloomFalloffCrush'].setValue(0)\n\tnuke.thisNode()\['previewCenterSelection'].setValue(0)\n\tnuke.thisNode()\['centerFalloffAdjust'].setValue(0)\n\t# center frame bloom\n\tnuke.thisNode()\['centerFrameBloomAlt'].setValue(1)\n\tnuke.thisNode()\['centerFrameBloomMix'].setValue(1)\n\tnuke.thisNode()\['centerFrameBloomGrade'].setValue(1, 0)\n\tnuke.thisNode()\['centerFrameBloomGrade'].setValue(1, 1)\n\tnuke.thisNode()\['centerFrameBloomGrade'].setValue(1, 2)\n\t# edge shimmer\n\tnuke.thisNode()\['edgeShimmerAlt'].setValue(0)\n\tnuke.thisNode()\['edgeShimmerIntensity'].setValue(1)\n\tnuke.thisNode()\['shimmerColour'].setValue(1)\n\tnuke.thisNode()\['edgeShimmerColour'].setValue(1, 0)\n\tnuke.thisNode()\['edgeShimmerColour'].setValue(1, 1)\n\tnuke.thisNode()\['edgeShimmerColour'].setValue(1, 2)\n\t# edge bloom\n\tnuke.thisNode()\['edgeBloomAlt'].setValue(0)\n\tnuke.thisNode()\['edgeBloomIntensity'].setValue(1)\n\tnuke.thisNode()\['edgeBloomColour'].setValue(1, 0)\n\tnuke.thisNode()\['edgeBloomColour'].setValue(1, 1)\n\tnuke.thisNode()\['edgeBloomColour'].setValue(1, 2)\n\n\t# lens FX\n\t# chroma shift\n\tnuke.thisNode()\['lensChromaEnable'].setValue(1)\n\tnuke.thisNode()\['chromaShiftType'].setValue(0)\n\tnuke.thisNode()\['chromaShiftAmountSlider'].setValue(0.007)\n\tnuke.thisNode()\['chromaR'].setValue(0)\n\tnuke.thisNode()\['chromaG'].setValue(0)\n\tnuke.thisNode()\['chromaB'].setValue(1)\n\t# lens distortion\n\tnuke.thisNode()\['lensDistortionEnable'].setValue(0)\n\tnuke.thisNode()\['lensFXDistortionAmount'].setValue(0)\n\tnuke.thisNode()\['lensFXDistortionAmount2'].setValue(0)\n\t# edge blur\n\tnuke.thisNode()\['edgeBlurEnable'].setValue(0)\n\tnuke.thisNode()\['edgeBlurAmount'].setValue(0)\n\tnuke.thisNode()\['previewEdgeBlur'].setValue(0)\n\tnuke.thisNode()\['edgeBlurRegionScale'].setValue(1.7)\n\tnuke.thisNode()\['edgeBlurRegionClamp'].setValue(0.3)\n\t# vignetting\n\tnuke.thisNode()\['vignettingEnable'].setValue(0)\n\tnuke.thisNode()\['vignettingAmountSlider'].setValue(0)\n\tnuke.thisNode()\['vignettingRegionPreview'].setValue(0)\n\tnuke.thisNode()\['vignettingRegionScale'].setValue(1.7)\n\tnuke.thisNode()\['vignettingRegionClamp'].setValue(0.3)\n\t#bloom\n\tnuke.thisNode()\['bloomEnable'].setValue(0)\n\tnuke.thisNode()\['bloomType'].setValue(1)\n\tnuke.thisNode()\['bloomPreview'].setValue(0)\n\tnuke.thisNode()\['bloomTolerance'].setValue(0.6)\n\tnuke.thisNode()\['bloomAmount'].setValue(20)\n\tnuke.thisNode()\['bloomRatio'].setValue(0.25)\n\tnuke.thisNode()\['bloomStrength'].setValue(1)\n\tnuke.thisNode()\['bloomNoiseSize'].setValue(300)\n\tnuke.thisNode()\['bloomNoiseEnable'].setValue(0)\n\tnuke.thisNode()\['bloomNoiseAmount'].setValue(0.9)\n\tnuke.thisNode()\['bloomNoiseGain'].setValue(0.45)\n\n\t#anim\n\t#anim options\n\tnuke.thisNode()\['enable_animation'].setValue(0)\n\tnuke.thisNode()\['WaveSeed'].setValue(0)\n\tnuke.thisNode()\['squared'].setValue(0)\n\tnuke.thisNode()\['minVal'].setValue(1)\n\tnuke.thisNode()\['maxVal'].setValue(3)\n\tnuke.thisNode()\['speed'].setValue(60)\n\tnuke.thisNode()\['slide'].setValue(0)\t\n\n\tnuke.message('Flare Successfully Reset...')" +STARTLINE} addUserKnob {20 coreTab l cores} addUserKnob {26 coreOptHeader l "core options"} addUserKnob {20 coreGrp l "@b;core" n 1} coreGrp 0 addUserKnob {6 coreDisable l INVISIBLE +INVISIBLE +STARTLINE} coreDisable {{!altCoreDisable}} addUserKnob {6 altCoreDisable l enable +STARTLINE} altCoreDisable true addUserKnob {7 coreSize l size R 0 4} coreSize 1 addUserKnob {14 coreOffsetSlider l offset R 0 100} coreOffsetSlider {0 0} addUserKnob {12 coreOffset l INVISIBLE +INVISIBLE} coreOffset {{parent.coreOffsetSlider.w} {parent.coreOffsetSlider.h}} addUserKnob {7 coreRotation l rotation R 0 360} addUserKnob {26 ""} addUserKnob {4 coreTypePick l "core type" M {"white orb" anamorphic "hot orb" prism}} addUserKnob {19 coreColour l tint} coreColour {1 1 1 0} addUserKnob {6 coreColour_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {14 coreBlur l blur R 0 100} addUserKnob {7 coreMix l mix} coreMix 1 addUserKnob {26 ""} addUserKnob {20 endGroup n -1} addUserKnob {20 coreRaysGrp l "core rays" n 1} coreRaysGrp 0 addUserKnob {6 coreRaysEnable l enable +STARTLINE} coreRaysEnable true addUserKnob {7 coreRaysSize l size R -4 4} coreRaysSize 1 addUserKnob {7 coreRaysRotation l rotation R -180 180} addUserKnob {7 coreRaysThickness l thickness R 0 100} addUserKnob {26 ""} addUserKnob {4 coreRaysType l "core rays type" M {basic irregular hectic anamorphic "blue crisp" "soft volume rays" "halo star" "anamorph spike" "blue crush" "penta star" "rainbow burst" "blue flame" "banded streak"}} addUserKnob {18 coreRaysColour l colour} coreRaysColour {1 1 1} addUserKnob {6 coreRaysColour_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {14 coreRaysBlur l blur R 0 100} addUserKnob {7 coreRaysMix l mix} coreRaysMix 0.2 addUserKnob {3 coreRaysSeed l seed} addUserKnob {26 ""} addUserKnob {20 endGroup_11 l endGroup n -1} addUserKnob {20 coreCoronaGrp l "core extra shape" n 1} coreCoronaGrp 0 addUserKnob {6 coreCoronaDisable l INVISIBLE +INVISIBLE +STARTLINE} coreCoronaDisable {{!coreCoronaAlt}} addUserKnob {6 coreCoronaAlt l enable +STARTLINE} coreCoronaAlt true addUserKnob {7 coreCoronaSize l size R 0 4} coreCoronaSize 1 addUserKnob {14 coronaOffsetSlider l offset R 0 100} coronaOffsetSlider {0 0} addUserKnob {12 coreCoronaOffset l INVISIBLE +INVISIBLE} coreCoronaOffset {{parent.coronaOffsetSlider.w} {parent.coronaOffsetSlider.h}} addUserKnob {7 coreCoronaRotation l rotation R 0 360} addUserKnob {26 ""} addUserKnob {4 coreCoronaType l "shape type" M {"single ring" "double ring" "glass hoops" "chroma hoops" "vertical stripes" "horizontal stripes" "horizontal chunky stripes" "chroma glows"}} coreCoronaType "chroma hoops" addUserKnob {6 coreCoronaNoise l "noisy shape" +STARTLINE} addUserKnob {19 coreCoronaTint l tint} coreCoronaTint {1 1 1 0} addUserKnob {6 coreCoronaTint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {14 coreCoronaBlur l blur R 0 100} addUserKnob {7 coreCoronaMix l mix} coreCoronaMix 1 addUserKnob {26 ""} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 coronaExtraGroup l corona n 1} coronaExtraGroup 0 addUserKnob {6 coronaExtraEnable l enable +STARTLINE} coronaExtraEnable true addUserKnob {14 coronaExtraSize l size R 0 100} coronaExtraSize 1 addUserKnob {14 coronaExtraOffset l offset R 0 100} coronaExtraOffset {0 0} addUserKnob {7 coronaExtraRotation l rotation R 0 360} addUserKnob {26 ""} addUserKnob {4 coronaExtraType l "corona type" M {"double cloud" aura "stepping cloud" "noisy cloud" "soft noise" ??? "saturated aura" "" ""}} coronaExtraType aura addUserKnob {6 coronaExtraNoise l "noisy corona" +STARTLINE} addUserKnob {19 coronaExtraColour l tint} coronaExtraColour {1 1 1 0} addUserKnob {6 coronaExtraColour_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {14 coronaExtraBlur l blur R 0 100} addUserKnob {7 coronaExtraMix l mix} coronaExtraMix 0.5 addUserKnob {26 ""} addUserKnob {20 endGroup_3 l endGroup n -1} addUserKnob {20 lensAnomaliesTab l anomalies} addUserKnob {26 anomalyOptHeader l "anomaly options"} addUserKnob {20 anomalyGrp l "anomaly controls" n 1} anomalyGrp 0 addUserKnob {6 lensAnomalyEnable l enable +STARTLINE} addUserKnob {7 anomalySize l size R 0 15} anomalySize 1 addUserKnob {14 anomalyPosOffset l "positional offset" R 0 100} anomalyPosOffset {0 0} addUserKnob {7 anomalyRotOffset l "screen space offset" R -5 5} addUserKnob {7 anomalyAnamorph l anamorph R -10 10} anomalyAnamorph 1 addUserKnob {26 ""} addUserKnob {4 anomalyType l "anomaly type" M {"thick stripes " "thin stripes" "super thick " "single stripe" "soft clouds" "edge glow" "chroma rings" "blue spike" "soft offset chroma ring" ""}} addUserKnob {18 anomalyColour l tint} anomalyColour {1 1 1} addUserKnob {6 anomalyColour_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 anomalyPresat l pre-sat R 0 4} anomalyPresat 1 addUserKnob {14 anomalyBlur l blur R 0 100} addUserKnob {7 anomalyMix l mix} anomalyMix 1 addUserKnob {26 ""} addUserKnob {20 endGroup_4 l endGroup n -1} addUserKnob {20 dogSchidtGrp l "dog schidt optics" n 1} dogSchidtGrp 0 addUserKnob {6 dogSchidtControl l INVISIBLE +INVISIBLE +STARTLINE} dogSchidtControl {{!dogSchidtEnableAlt}} addUserKnob {6 dogSchidtEnableAlt l enable +STARTLINE} addUserKnob {7 dogSchidtSize l size R 1 15} dogSchidtSize 1 addUserKnob {7 dogSchidtRotation l rotation R 0 360} addUserKnob {7 dogSchidtAnamorph l anamoprh R -10 10} dogSchidtAnamorph 1 addUserKnob {7 dogSchidtThickness l thickness R 0 5} dogSchidtThickness 0.5 addUserKnob {26 ""} addUserKnob {4 dogSchidtType l "dog schidt type" M {"lens tearing" "water tearing"}} addUserKnob {18 dogSchidtTint l tint} dogSchidtTint {1 1 1} addUserKnob {6 dogSchidtTint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {14 dogSchidtFalloff l falloff R 0 100} dogSchidtFalloff {500 500} addUserKnob {14 dogSchidtBlur l blur R 0 100} dogSchidtBlur 0.2 addUserKnob {7 coreDogschidtMix l mix} coreDogschidtMix 1 addUserKnob {26 ""} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {20 frameGhostTab l "frame ghosting" n 1} frameGhostTab 0 addUserKnob {6 frameGhostEnable l enable +STARTLINE} addUserKnob {4 ghostCalc l calculation M {pre-flare post-flare}} addUserKnob {7 frameGhostQuality l quality} frameGhostQuality 0.15 addUserKnob {6 frameGhostPreview l "preview FX only" +STARTLINE} addUserKnob {26 ""} addUserKnob {6 frameGhostSelectionPreview l "preview selection" +STARTLINE} addUserKnob {7 frameGhostSelection l "selection range"} frameGhostSelection 0.2 addUserKnob {7 frameGhostGamma l "gamma crush"} frameGhostGamma 0.4 addUserKnob {26 ""} addUserKnob {7 frameGhostSat l "overall saturation" R 0 5} frameGhostSat 1 addUserKnob {7 frameGhostNoiseMult l "overall noise mult"} frameGhostNoiseMult 1 addUserKnob {18 frameGhostOverallColour l "overall colour"} frameGhostOverallColour {1 1 1} addUserKnob {6 frameGhostOverallColour_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {14 frameGhostBlur l blur R 0 100} addUserKnob {7 frameGhostMix l mix} frameGhostMix 1 addUserKnob {26 ""} addUserKnob {20 frameGhostFlare1Grp l "flare 1" n 1} frameGhostFlare1Grp 0 addUserKnob {6 frameGhostFlare1Enable l enable +STARTLINE} frameGhostFlare1Enable true addUserKnob {14 frameGhostFlare1Size l size R 0 100} frameGhostFlare1Size 5 addUserKnob {7 frameGhostFlare1PosOffset l "pos offset" R -3 3} frameGhostFlare1PosOffset -1 addUserKnob {18 frameGhostFlare1Colour l colour} frameGhostFlare1Colour {1 1 1} addUserKnob {6 frameGhostFlare1Colour_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 frameGhostFlare1Blur l blur R 0 50} addUserKnob {7 frameGhostFlare1Mix l mix} frameGhostFlare1Mix 1 addUserKnob {26 ""} addUserKnob {4 frameGhostFlare1Shape l "convolve shape" M {pentagon hexagon heptagon octagon decagon ""}} addUserKnob {7 frameGhostFlare1DiaphragmSize l "diaphragm size"} frameGhostFlare1DiaphragmSize 1 addUserKnob {7 frameGhostFlare1DiaphragmRot l "diaphragm rot" R -180 180} addUserKnob {26 ""} addUserKnob {7 frameGhostFlare1NoiseOpac l "noise opacity"} frameGhostFlare1NoiseOpac 0.5 addUserKnob {7 frameGhostFlare1Noise l "noise gain"} frameGhostFlare1Noise 0.5 addUserKnob {26 ""} addUserKnob {7 frameGhostFlare1ReflRotation l "refl rotation" R -180 180} addUserKnob {7 frameGhostFlare1ReflBlur l "refl blur" R 0 100} addUserKnob {18 frameGhostFlare1ReflGamma l "refl gamma" R 0 5} frameGhostFlare1ReflGamma 1 addUserKnob {6 frameGhostFlare1ReflGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup_7 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 frameGhostFlare2Grp l "flare 2" n 1} frameGhostFlare2Grp 0 addUserKnob {6 frameGhostFlare2Enable l enable +STARTLINE} addUserKnob {14 frameGhostFlare2Size l size R 0 100} frameGhostFlare2Size 5 addUserKnob {7 frameGhostFlare2PosOffset l "pos offset" R -3 3} frameGhostFlare2PosOffset -0.2 addUserKnob {18 frameGhostFlare2Colour l colour} frameGhostFlare2Colour {1 1 1} addUserKnob {6 frameGhostFlare2Colour_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 frameGhostFlare2Blur l blur R 0 50} addUserKnob {7 frameGhostFlare2Mix l mix} frameGhostFlare2Mix 1 addUserKnob {26 ""} addUserKnob {4 frameGhostFlare2Shape l "convolve shape" M {pentagon hexagon hectagon octagon decagon "" "" ""}} addUserKnob {7 frameGhostFlare2DiaphragmSize l "diaphragm size"} frameGhostFlare2DiaphragmSize 1 addUserKnob {7 frameGhostFlare2DiaphragmRot l "diaphragm rot" R -180 180} addUserKnob {26 ""} addUserKnob {7 frameGhostFlare2NoiseOpac l "noise opacity"} frameGhostFlare2NoiseOpac 0.5 addUserKnob {7 frameGhostFlare2Noise l "noise gain"} frameGhostFlare2Noise 0.5 addUserKnob {26 ""} addUserKnob {7 frameGhostFlare2ReflRotation l "refl rotation" R -180 180} addUserKnob {16 frameGhostFlare2ReflBlur l "refl blur"} addUserKnob {18 frameGhostFlare2ReflGamma l "refl gamma" R 0 5} frameGhostFlare2ReflGamma 1 addUserKnob {6 frameGhostFlare2ReflGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup_6 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 frameGhostFlare3Grp l "flare 3" n 1} frameGhostFlare3Grp 0 addUserKnob {6 frameGhostFlare3Enable l enable +STARTLINE} addUserKnob {14 frameGhostFlare3Size l size R 0 100} frameGhostFlare3Size 3 addUserKnob {7 frameGhostFlare3PosOffset l "pos offset" R -3 3} frameGhostFlare3PosOffset -1 addUserKnob {18 frameGhostFlare3Colour l colour} frameGhostFlare3Colour {1 1 1} addUserKnob {6 frameGhostFlare3Colour_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 frameGhostFlare3Blur l blur R 0 50} addUserKnob {7 frameGhostFlare3Mix l mix} frameGhostFlare3Mix 1 addUserKnob {26 ""} addUserKnob {4 frameGhostFlare3Shape l "convolve shape" M {pentagon hexagon heptagon octagon decagon}} addUserKnob {7 frameGhostFlare3DiaphragmSize l "diaphragm size"} frameGhostFlare3DiaphragmSize 1 addUserKnob {7 frameGhostFlare3DiaphragmRot l "diaphragm rot" R -180 180} addUserKnob {26 ""} addUserKnob {7 frameGhostFlare3NoiseOpac l "noise opacity"} frameGhostFlare3NoiseOpac 0.5 addUserKnob {7 frameGhostFlare3Noise l "noise gain"} frameGhostFlare3Noise 0.5 addUserKnob {26 ""} addUserKnob {7 frameGhostFlare3ReflRotation l "refl rotation" R -180 180} addUserKnob {7 frameGhostFlare3ReflBlur l "refl blur"} addUserKnob {18 frameGhostFlare3ReflGamma l "refl gamma" R 0 5} frameGhostFlare3ReflGamma 1 addUserKnob {6 frameGhostFlare3ReflGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup_8 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 frameGhostFlare4Grp l "flare 4" n 1} frameGhostFlare4Grp 0 addUserKnob {6 frameGhostFlare4Enable l enable +STARTLINE} addUserKnob {14 frameGhostFlare4Size l size R 0 100} frameGhostFlare4Size 1 addUserKnob {7 frameGhostFlare4PosOffset l "pos offset" R -3 3} frameGhostFlare4PosOffset 0.2 addUserKnob {18 frameGhostFlare4Colour l colour} frameGhostFlare4Colour {1 1 1} addUserKnob {6 frameGhostFlare4Colour_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {14 frameGhostFlare4Blur l blur R 0 100} addUserKnob {7 frameGhostFlare4Mix l mix} frameGhostFlare4Mix 1 addUserKnob {26 ""} addUserKnob {4 frameGhostFlare4Shape l "convolve shape" M {pentagon hexagon heptagon octagon decagon}} addUserKnob {7 frameGhostFlare4DiaphragmSize l "diaphragm size"} frameGhostFlare4DiaphragmSize 1 addUserKnob {7 frameGhostFlare4DiaphragmRot l "diaphragm rot" R -180 180} addUserKnob {26 ""} addUserKnob {7 frameGhostFlare4NoiseOpac l "noise opacity"} frameGhostFlare4NoiseOpac 0.5 addUserKnob {7 frameGhostFlare4Noise l "noise gain"} frameGhostFlare4Noise 0.5 addUserKnob {26 ""} addUserKnob {7 frameGhostFlare4ReflRotation l "refl rotation" R -180 180} addUserKnob {7 frameGhostFlare4ReflBlur l "refl blur"} addUserKnob {18 frameGhostFlare4ReflGamma l "refl gamma" R 0 5} frameGhostFlare4ReflGamma 1 addUserKnob {6 frameGhostFlare4ReflGamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup_9 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 endGroup_5 l endGroup n -1} addUserKnob {20 lensPieceTab l "lens pieces"} addUserKnob {26 lensPieceOptions l "lens piece options"} addUserKnob {20 lensPieceMainGrp l "lens pieces" n 1} lensPieceMainGrp 0 addUserKnob {6 lensPieceMainEnable l enable +STARTLINE} addUserKnob {7 lensPieceMainSize l size R -4 4} lensPieceMainSize 1 addUserKnob {7 lensPieceMainSizeVariation l "size variation" R -5 5} lensPieceMainSizeVariation 1 addUserKnob {7 lensPieceMainOffset l offset R -5 5} addUserKnob {7 lensPieceMainAdditional l "additional pieces" R 0 10} addUserKnob {3 lensPieceMainSeed l seed} addUserKnob {26 ""} addUserKnob {4 lensPieceMainType l type M {"white bokeh" "photo bokeh" "varied bokeh" "soft white bokeh" "green tris" "squashed bokeh" "ring halos" "chroma sphere" "bubbly bokeh" "crisp bokeh" "" "" ""}} addUserKnob {18 lensPieceMainColour l tint} lensPieceMainColour {1 1 1} addUserKnob {6 lensPieceMainColour_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {14 lensPieceMainBlur l blur R 0 100} addUserKnob {7 lensPieceMainMix l mix} lensPieceMainMix 0.25 addUserKnob {26 ""} addUserKnob {20 endGroup_10 l endGroup n -1} addUserKnob {20 lensPieceBigGrp l "big pieces" n 1} lensPieceBigGrp 0 addUserKnob {6 lensPieceBigEnable l enable +STARTLINE} addUserKnob {7 lensPieceBigOffset l offset R -5 5} addUserKnob {3 lensPieceBigSeed l seed} addUserKnob {26 ""} addUserKnob {4 lensPieceBigPicker l type M {"big blue" "soft blue" "squashed chroma" "saturated blue" "penta shapes" "white curves" "crisp bokehs" ""}} lensPieceBigPicker "saturated blue" addUserKnob {18 lensPieceBigTint l tint} lensPieceBigTint {1 1 1} addUserKnob {6 lensPieceBigTint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {14 lensPieceBigBlur l blur R 0 100} addUserKnob {7 lensPieceBigMix l mix} lensPieceBigMix 0.25 addUserKnob {26 ""} addUserKnob {20 endGroup_12 l endGroup n -1} addUserKnob {20 lensPieceRingsGrp l rings n 1} lensPieceRingsGrp 0 addUserKnob {6 lensPieceRingsEnable l enable +STARTLINE} addUserKnob {7 lensPieceRingsRotation l rotation R -180 180} addUserKnob {26 ""} addUserKnob {4 lensPieceRingsPicker l type M {"chroma sticks" "chroma hoop" "whitewashed hoops" "photographic glows" ""}} lensPieceRingsPicker "photographic glows" addUserKnob {18 lensPieceRingsTint l tint} lensPieceRingsTint {1 1 1} addUserKnob {6 lensPieceRingsTint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lensPieceRingsMix l mix} lensPieceRingsMix 0.4 addUserKnob {26 ""} addUserKnob {20 endGroup_13 l endGroup n -1} addUserKnob {20 lensPieceLinesGrp l lines n 1} lensPieceLinesGrp 0 addUserKnob {6 lensPieceLinesEnable l enable +STARTLINE} addUserKnob {7 lensPieceLinesStretch l stretch R 1 20} lensPieceLinesStretch 1 addUserKnob {7 lensPieceLinesOffset l offset R -5 5} addUserKnob {26 ""} addUserKnob {4 lensPieceLinesPicker l type M {"sharp lines" "ripped squares" "single thin stripe" "long squares" "blue stripes" "checkered stripes" "double thin stripe"}} addUserKnob {18 lensPieceLinesTint l tint} lensPieceLinesTint {1 1 1} addUserKnob {6 lensPieceLinesTint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lensPieceLinesMix l mix} lensPieceLinesMix 0.05 addUserKnob {26 ""} addUserKnob {20 endGroup_14 l endGroup n -1} addUserKnob {20 dynamicFXTab l "screen space FX"} addUserKnob {26 selectionRegionHeader l "selection region"} addUserKnob {6 previewEdgeArea l "preview edge selection" +STARTLINE} addUserKnob {7 bloomFalloffCrush l "edge falloff adjust" R -1 1} addUserKnob {6 previewCenterSelection l "preview center selection" +STARTLINE} addUserKnob {7 centerFalloffAdjust l "center falloff adjust" R -1 1} addUserKnob {26 centerFrameBloomHeader l "center frame bloom"} addUserKnob {6 centerFrameBloomDisable l INVISIBLE +INVISIBLE +STARTLINE} centerFrameBloomDisable {{!centerFrameBloomAlt}} addUserKnob {6 centerFrameBloomAlt l enable +STARTLINE} centerFrameBloomAlt true addUserKnob {7 centerFrameBloomMix l mix} centerFrameBloomMix 1 addUserKnob {18 centerFrameBloomGrade l tint} centerFrameBloomGrade {1 1 1} addUserKnob {6 centerFrameBloomGrade_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 edgeShimmerHeader l "edge shimmer"} addUserKnob {6 edgeShimmerDisable l INVISIBLE +INVISIBLE +STARTLINE} edgeShimmerDisable {{!edgeShimmerAlt}} addUserKnob {6 edgeShimmerAlt l enable +STARTLINE} addUserKnob {7 edgeShimmerIntensity l intensity R 0 5} edgeShimmerIntensity 1 addUserKnob {6 shimmerColour l "coloured shimmer" +STARTLINE} shimmerColour true addUserKnob {18 edgeShimmerColour l tint} edgeShimmerColour {1 1 1} addUserKnob {6 edgeShimmerColour_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 edgeBloomHeader l "edge bloom"} addUserKnob {6 edgeBloomDisable l INVISIBLE +INVISIBLE +STARTLINE} edgeBloomDisable {{!edgeBloomAlt}} addUserKnob {6 edgeBloomAlt l enable +STARTLINE} addUserKnob {7 edgeBloomIntensity l intensity} edgeBloomIntensity 1 addUserKnob {18 edgeBloomColour l tint} edgeBloomColour {1 1 1} addUserKnob {6 edgeBloomColour_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 lensFxTab l "lens FX"} addUserKnob {26 chromaHeader l "chroma shift"} addUserKnob {6 lensChromaEnable l enable +STARTLINE} lensChromaEnable true addUserKnob {4 chromaShiftType l type M {blur scale}} addUserKnob {7 chromaShiftAmountSlider l amount R 0 0.25} chromaShiftAmountSlider 0.007 addUserKnob {6 chromaR l R +STARTLINE} addUserKnob {6 chromaG l G -STARTLINE} addUserKnob {6 chromaB l B -STARTLINE} chromaB true addUserKnob {26 distortionHeader l "lens distortion"} addUserKnob {6 lensDistortionEnable l enable +STARTLINE} addUserKnob {7 lensFXDistortionAmount l "first radial" R -0.3 0.3} addUserKnob {7 lensFXDistortionAmount2 l "second radial" R -0.3 0.3} addUserKnob {26 edgeBlurHeader l "edge blur"} addUserKnob {6 edgeBlurEnable l enable +STARTLINE} addUserKnob {14 edgeBlurAmount l amount R 0 100} addUserKnob {6 previewEdgeBlur l "preview region" +STARTLINE} addUserKnob {14 edgeBlurRegionScale l "region scale" R 0 100} edgeBlurRegionScale 1.7 addUserKnob {7 edgeBlurRegionClamp l "region clamp"} edgeBlurRegionClamp 0.3 addUserKnob {26 vignettingHeader l "vignetting"} addUserKnob {6 vignettingEnable l enable +STARTLINE} addUserKnob {7 vignettingAmountSlider l amount} addUserKnob {6 vignettingRegionPreview l "preview region" +STARTLINE} addUserKnob {14 vignettingRegionScale l "region scale" R 0 100} vignettingRegionScale 1.7 addUserKnob {7 vignettingRegionClamp l "region clamp"} vignettingRegionClamp 0.3 addUserKnob {26 bloomHeader l "photographic bloom"} addUserKnob {6 bloomEnable l enable +STARTLINE} addUserKnob {4 bloomTypeAlt l "bloom type" M {"radial bloom" "striped bloom" ""}} addUserKnob {4 bloomType l "bloom calculation" M {pre-flare post-flare ""}} bloomType post-flare addUserKnob {4 bloomPreview l preview M {"\[none]" "selection region" "bloom FX only"}} addUserKnob {7 bloomTolerance l tolerance} bloomTolerance 0.6 addUserKnob {14 bloomAmount l size R 0 100} bloomAmount 20 addUserKnob {7 bloomRatio l "sharp/soft ratio" R 0.1 1} bloomRatio 0.25 addUserKnob {26 sharpSoftText l "" +STARTLINE T "(sharp) < - - - > (soft)"} addUserKnob {7 bloomStrength l strength} bloomStrength 1 addUserKnob {20 bloomNoiseGrp l "noise controls" n 1} bloomNoiseGrp 0 addUserKnob {6 bloomNoiseEnable l "noise enable" +STARTLINE} addUserKnob {7 bloomNoiseAmount l "noise mult"} bloomNoiseAmount 0.9 addUserKnob {7 bloomNoiseGain l "noise gain"} bloomNoiseGain 0.45 addUserKnob {7 bloomNoiseSize l "noise size" R 0 1000} bloomNoiseSize 300 addUserKnob {20 endGroup_15 l endGroup n -1} addUserKnob {20 animTab l animation} addUserKnob {26 animLabel l "animation options"} addUserKnob {6 enable_animation l "enable animation" +STARTLINE} addUserKnob {26 ""} addUserKnob {4 WaveSeed l seed M {sine bounce rand tri saw sawPara sawPara_reversed "" "" ""}} addUserKnob {6 squared -STARTLINE} addUserKnob {26 ""} addUserKnob {3 minVal l min} minVal 1 addUserKnob {3 maxVal l max -STARTLINE} maxVal 3 addUserKnob {26 ""} addUserKnob {7 speed R 0.1 100} speed 60 addUserKnob {26 animSpeedLabel l "" +STARTLINE T "(faster) < - - > (slower)"} addUserKnob {26 ""} addUserKnob {7 slide R -50 50} addUserKnob {26 ""} addUserKnob {22 applyAnim l "apply animation" T "type = nuke.thisNode().knob(\"WaveSeed\").value()\nsquareExp = \" > ((maxVal/2)+(minVal/2)) ? maxVal : minVal\"\nwcontrol = nuke.thisNode().knob(\"waveController\").value()\n\nsineExp1 = \"((sin(((frame*(pi*2/(speed/2)+slide)/2)))+1)/2)\"\nbounceExp1 = \"(sin(((frame/speed)*pi)+slide)>0?sin(((frame/speed)*pi)+slide):cos((((frame/speed)*pi)+slide)+(pi/2)))\"\nrandExp1 = \"(random((frame/speed)+slide))\"\nnoiseExp1 = \"((1*(noise((frame/speed)+slide))+1 ) /2 )\"\ntriExp1 = \"((((2*asin(sin(2*pi*(frame/speed)+slide)))/pi) / 2)+0.5)\"\nsawExp1 = \"(1/speed)*(((frame-1)+slide) % speed)\"\nsawParaExp1 = \"(sin((1/(pi/2))*(((frame-1)+slide)/(speed/2.46666666)) % (pi/2)))>0.99999?1:(sin((1/(pi/2))*(((frame-1)+slide)/(speed/2.46666666)) % (pi/2)))\"\nsawParaRExp1 = \"(cos((1/(pi/2))*(((frame-1)+slide)/(speed/2.46666666)) % (pi/2)))>0.99999?1:(cos((1/(pi/2))*(((frame-1)+slide)/(speed/2.46666666)) % (pi/2)))\"\nsawExpoExp1 = \"(((((exp((1/(pi/2))*(((frame-1)+slide)/(speed/4.934802)) % pi*2)))/534.5)) - 0.00186741)>0.999987?1:(((((exp((1/(pi/2))*(((frame-1)+slide)/(speed/4.934802)) % pi*2)))/534.5)) - 0.00186741)\"\n\nmaxMinExp = \" * (maxVal-minVal) ) + minVal\"\n\nsineExp2 = \"(\" + sineExp1 + maxMinExp\nbounceExp2 = \"(\" + bounceExp1 + maxMinExp\nrandomExp2 = \"(\" + randExp1 + maxMinExp\nnoiseExp2 = \"(\" + noiseExp1 + maxMinExp\ntriExp2 = \"(\" + triExp1 + maxMinExp\nsawExp2 = \"(\" + sawExp1 + maxMinExp\nsawParaExp2 = \"(\" + sawParaExp1 + maxMinExp\nsawParaRExp2 = \"(\" + sawParaRExp1 + maxMinExp\nsawExpoExp2 = \"(\" + sawExpoExp1 + maxMinExp\n\nmaxMinCexp = \" * ((maxVal-((maxVal - minVal)*result2))-(minVal+((maxVal - minVal)*result2))))+(minVal+((maxVal - minVal)*result2))\"\n\nsineCexp = \"(\" + sineExp1 + maxMinCexp\nbounceCexp = \"(\" + bounceExp1 + maxMinCexp\nrandCexp = \"(\" + randExp1 + maxMinCexp\nnoiseCexp = \"(\" + noiseExp1 + maxMinCexp\ntriCexp = \"(\" + triExp1 + maxMinCexp\nsawCexp = \"(\" + sawExp1 + maxMinCexp\nsawParaCexp = \"(\" + sawParaExp1 + maxMinCexp\nsawParaRCexp = \"(\" + sawParaRExp1 + maxMinCexp\nsawExpoCexp = \"(\" + sawExpoExp1 + maxMinCexp\n\nsineComboExp = \"waveController ? (\" + sineCexp + \") : (\" + sineExp2 + \")\"\nbounceComboExp = \"waveController ? (\" + bounceCexp + \") : (\" + bounceExp2 + \")\"\nrandomComboExp = \"waveController ? (\" + randCexp + \") : (\" + randomExp2 + \")\"\nnoiseComboExp = \"waveController ? (\" + noiseCexp + \") : (\" + noiseExp2 + \")\"\ntriComboExp = \"waveController ? (\" + triCexp + \") : (\" + triExp2 + \")\"\nsawComboExp = \"waveController ? (\" + sawCexp + \") : (\" + sawExp2 + \")\"\nsawParaComboExp = \"waveController ? (\" + sawParaCexp + \") : (\" + sawParaExp2 + \")\"\nsawParaRComboExp = \"waveController ? (\" + sawParaRCexp + \") : (\" + sawParaRExp2 + \")\"\nsawExpoComboExp = \"waveController ? (\" + sawExpoCexp + \") : (\" + sawExpoExp2 + \")\"\n\n\nif (type==\"sine\"):\n\texp = \"squared ? ((\" + sineComboExp + \")\" + squareExp + \") : (\" + sineComboExp + \")\"\nelif (type==\"bounce\"):\n\texp = \"squared ? ((\" + bounceComboExp + \")\" + squareExp + \") : (\" + bounceComboExp + \")\"\nelif (type==\"rand\"):\n\texp = \"squared ? ((\" + randomComboExp + \")\" + squareExp + \") : (\" + randomComboExp + \")\"\nelif (type==\"noise\"):\n\texp = \"squared ? ((\" + noiseComboExp + \")\" + squareExp + \") : (\" + noiseComboExp + \")\"\nelif (type==\"tri\"):\n\texp = \"squared ? ((\" + triComboExp + \")\" + squareExp + \") : (\" + triComboExp + \")\"\nelif (type==\"saw\"):\n\texp = \"squared ? ((\" + sawComboExp + \")\" + squareExp + \") : (\" + sawComboExp + \")\"\nelif (type==\"sawPara\"):\n\texp = \"squared ? ((\" + sawParaComboExp + \")\" + squareExp + \") : (\" + sawParaComboExp + \")\"\nelif (type==\"sawPara_reversed\"):\n\texp = \"squared ? ((\" + sawParaRComboExp + \")\" + squareExp + \") : (\" + sawParaRComboExp + \")\"\nelif (type==\"sawExp\"):\n\texp = \"squared ? ((\" + sawExpoComboExp + \")\" + squareExp + \") : (\" + sawExpoComboExp + \")\"\n\n\nnuke.thisNode().knob(\"result\").setExpression(exp)" +STARTLINE} addUserKnob {26 ""} addUserKnob {6 waveController l INVISIBLE +INVISIBLE +STARTLINE} waveController {{"squared ? ((waveController ? ((((sin(((frame*(pi*2/(animSpeed/2)+animSlide)/2)))+1)/2) * ((maxVal-((maxVal - minVal)*result2))-(minVal+((maxVal - minVal)*result2))))+(minVal+((maxVal - minVal)*result2))) : ((((sin(((frame*(pi*2/(animSpeed/2)+animSlide)/2)))+1)/2) * (maxVal-minVal) ) + minVal)) > ((maxVal/2)+(minVal/2)) ? maxVal : minVal) : (waveController ? ((((sin(((frame*(pi*2/(animSpeed/2)+animSlide)/2)))+1)/2) * ((maxVal-((maxVal - minVal)*result2))-(minVal+((maxVal - minVal)*result2))))+(minVal+((maxVal - minVal)*result2))) : ((((sin(((frame*(pi*2/(animSpeed/2)+animSlide)/2)))+1)/2) * (maxVal-minVal) ) + minVal))"}} addUserKnob {7 result l "animation curve" R 0 10} result {{"squared ? ((waveController ? ((((sin(((frame*(pi*2/(speed/2)+slide)/2)))+1)/2) * ((maxVal-((maxVal - minVal)*result2))-(minVal+((maxVal - minVal)*result2))))+(minVal+((maxVal - minVal)*result2))) : ((((sin(((frame*(pi*2/(speed/2)+slide)/2)))+1)/2) * (maxVal-minVal) ) + minVal)) > ((maxVal/2)+(minVal/2)) ? maxVal : minVal) : (waveController ? ((((sin(((frame*(pi*2/(speed/2)+slide)/2)))+1)/2) * ((maxVal-((maxVal - minVal)*result2))-(minVal+((maxVal - minVal)*result2))))+(minVal+((maxVal - minVal)*result2))) : ((((sin(((frame*(pi*2/(speed/2)+slide)/2)))+1)/2) * (maxVal-minVal) ) + minVal))"}} addUserKnob {26 ""} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {0 0 55.87} size_mult {{"parent.flareCoreSize * 3.4"}} anamorph 1.1 ring_color 0.3720190227 inner_color 0.1795123965 inner_falloff 7.4 flattening 0.15 corners_angle -16 asym_falloff 0.45018 asym_angle -180 asym_angle_add true mult_num 2 mult_offset 0.3 mult_size -0.28 name Flare167 label "Center Bloom" xpos 605 ypos 16098 } set N8fe56000 [stack 0] Blur { size 8.5 name Blur1 xpos 605 ypos 16195 } set N8fe56800 [stack 0] Blur { size 200 name Blur2 xpos 605 ypos 16233 } Constant { inputs 0 channels rgb name backdropConstant xpos 908 ypos 22841 } Radial { inputs 0 area {0 0 {root.width} {root.height}} softness {{"1 - parent.vignettingRegionClamp"}} plinear true name Radial4 xpos 1230 ypos 22163 } Transform { scale {{"1 + parent.vignettingRegionScale"}} center {{root.width/2} {root.height/2}} name Transform10 xpos 1230 ypos 22200 } Invert { clamp true name Invert3 xpos 1230 ypos 22247 } set N8fe57c00 [stack 0] Grade { multiply {1 0 0 1} multiply_panelDropped true name Grade18 xpos 1230 ypos 22305 } Dot { name Dot26 xpos 1264 ypos 22366 } push $N8fe57c00 Radial { inputs 0 area {0 0 {root.width} {root.height}} softness {{"1 - parent.edgeBlurRegionClamp"}} plinear true name Radial3 xpos 1230 ypos 21636 } Transform { scale {{"1 + parent.edgeBlurRegionScale"}} center {960 540} name Transform8 xpos 1230 ypos 21690 } Invert { clamp true name Invert1 xpos 1230 ypos 21737 } set N884f2c00 [stack 0] Grade { multiply {1 0 0 1} multiply_panelDropped true name Grade17 xpos 1230 ypos 21796 } Dot { name Dot36 xpos 1264 ypos 21856 } push $N884f2c00 Noise { inputs 0 size {{parent.bloomNoiseSize}} gain {{parent.bloomNoiseGain}} center {960 540} name Noise26 xpos 1500 ypos 20956 } Dot { name Dot167 xpos 1534 ypos 21090 } set N884f1c00 [stack 0] Flare { inputs 0 position {{"parent.flarePos.x + parent.coreOffsetSlider.w"} {"parent.flarePos.y + parent.coreOffsetSlider.h"}} radius {0 0 227.56} size_mult {{parent.flareCoreSize/10}} anamorph 1.01 ring_color {0.7653999925 0.7450000048 1} inner_color 1 outer_falloff 2 name Flare1 xpos 525 ypos 610 disable {{parent.Flare340.disable}} } Dot { name Dot8 xpos 559 ypos 699 } Flare { inputs 0 position {{"parent.flarePos.x + parent.coreOffsetSlider.w"} {"parent.flarePos.y + parent.coreOffsetSlider.h"}} radius {0 0 227.56} size_mult {{parent.flareCoreSize/10}} anamorph 1.01 ring_color {0.7653999925 0.7450000048 1} inner_color 1 outer_falloff 2 name Flare340 xpos 436 ypos 585 disable {{"parent.coreTypePick == 3 ? 0 : 1"}} } Flare { position {{"parent.flarePos.x + parent.coreOffsetSlider.w"} {"parent.flarePos.y + parent.coreOffsetSlider.h"}} radius {0 3.97 21.06} size_mult {{parent.flareCoreSize*3}} anamorph 1.728 ring_color 0.2300000191 inner_color 1 outer_falloff 9 inner_falloff 2 chroma_spread 0.02 vis_mask -rgba.alpha name Flare341 xpos 436 ypos 647 disable {{parent.Flare340.disable}} } Merge { inputs 2 operation plus name Merge287 xpos 436 ypos 695 } Flare { inputs 0 position {{"parent.flarePos.x + parent.coreOffsetSlider.w"} {"parent.flarePos.y + parent.coreOffsetSlider.h"}} radius {0 17.54 30.69} size_mult {{parent.flareCoreSize}} inner_color 1 outer_falloff 2.8 inner_falloff 10 name mainCore_V3 label "core 3" xpos 332 ypos 617 disable {{"parent.coreTypePick == 2 ? 0 : 1"}} } Blur { size 2 crop false name Blur162 xpos 332 ypos 655 disable {{parent.mainCore_V3.disable}} } Glow { tint {0.22 0.055 0.034} tint_panelDropped true brightness 3 size 25 crop false name Glow42 xpos 332 ypos 701 disable {{parent.mainCore_V3.disable}} } Dot { name Dot3 xpos 366 ypos 760 } Flare { inputs 0 position {{"parent.flarePos.x + parent.coreOffsetSlider.w"} {"parent.flarePos.y + parent.coreOffsetSlider.h"}} radius {0 7.61 10.51} size_mult {{parent.flareCoreSize} {parent.flareCoreSize}} anamorph 2 inner_color 1 name mainCore_V2 label "core 2" xpos 224 ypos 611 disable {{"parent.coreTypePick == 1 ? 0 : 1"}} } Glow { brightness 0.64 size 25 crop false name Glow43 xpos 224 ypos 655 disable {{parent.mainCore_V2.disable}} } Blur { size 4.2 crop false name Blur159 xpos 224 ypos 696 disable {{parent.mainCore_V2.disable}} } Dot { name Dot2 xpos 258 ypos 773 } Flare { inputs 0 position {{"parent.flarePos.x + parent.coreOffsetSlider.w"} {"parent.flarePos.y + parent.coreOffsetSlider.h"}} radius {0 17.54 30.69} size_mult {{parent.flareCoreSize}} inner_color 1 outer_falloff 2.8 inner_falloff 10 name mainCore_V1 label "core 1" xpos 104 ypos 602 disable {{"parent.coreTypePick == 0 ? 0 : 1"}} } Glow { brightness 3 size 25 crop false name Glow44 xpos 104 ypos 656 disable {{parent.mainCore_V1.disable}} } Blur { size 25 crop false name Blur160 xpos 104 ypos 692 disable {{parent.mainCore_V1.disable}} } Dot { name Dot1 xpos 138 ypos 793 } Switch { inputs 4 which {{parent.coreTypePick}} name coreSel xpos 528 ypos 789 } Transform { rotate {{parent.coreRotation}} scale {{parent.coreSize}} center {{parent.flarePos.x} {parent.flarePos.y}} black_outside false name Transform1 xpos 528 ypos 830 } Blur { size {{parent.coreBlur}} name coreMainBlur xpos 528 ypos 866 } Grade { multiply {{parent.coreColour.r} {parent.coreColour.g} {parent.coreColour.b} 1} name lens_core_grade xpos 528 ypos 922 } Transform { translate {{"(parent.flarePos.x + parent.coreOffsetSlider.w) >root.width ? ((-1*parent.coreSize) * (root.width - parent.flarePos.x + parent.coreOffsetSlider.w)) : 0"} {"(parent.flarePos.y + parent.coreOffsetSlider.h) >root.height ? ((-1*parent.coreSize) * (root.height - parent.flarePos.y + parent.coreOffsetSlider.h)) : 0"}} center {{"parent.flarePos.x + parent.coreOffsetSlider.w"} {"parent.flarePos.y + parent.coreOffsetSlider.h"}} black_outside false name trans_compensate2 xpos 528 ypos 962 } Transform { translate {{"(parent.flarePos.x + parent.coreOffsetSlider.w) <0 ? ((-1*parent.coreSize) * (0 - parent.flarePos.x + parent.coreOffsetSlider.w)) : 0"} {"(parent.flarePos.y + parent.coreOffsetSlider.h) <0 ? ((-1*parent.coreSize) * (0 - parent.flarePos.y + parent.coreOffsetSlider.h)) : 0"}} center {{"parent.flarePos.x + parent.coreOffsetSlider.w"} {"parent.flarePos.y + parent.coreOffsetSlider.h"}} black_outside false name neg_trans_compensate2 xpos 528 ypos 997 } Crop { box {0 0 {root.width} {root.height}} name Crop4 xpos 528 ypos 1038 } Dot { name Dot4 xpos 562 ypos 1089 } Dot { name Dot42 xpos 699 ypos 1089 } set Nd50e1800 [stack 0] Saturation { saturation 0 name Saturation4 xpos 665 ypos 1121 } push $Nd50e1800 Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy6 xpos 798 ypos 1078 disable true } set Nd50e1000 [stack 0] Dot { name Dot43 xpos 918 ypos 1058 } Dot { name Dot27 xpos 1444 ypos 1058 } Blur { size {{"parent.lensDirtRangeFalloff * 3"}} name Blur5 xpos 1410 ypos 14988 } Grade { whitepoint 0.14 white 2 multiply 4 gamma 1.18 name Grade11 xpos 1410 ypos 15040 } Grade { blackpoint {{parent.lensDirtFalloffSteepness}} name Grade15 xpos 1410 ypos 15118 } Dot { name Dot22 xpos 1444 ypos 15187 } set Ne180b400 [stack 0] Dot { name Dot25 xpos 1245 ypos 15187 } Grade { white {1 0 0 1} white_panelDropped true name Grade14 xpos 1211 ypos 15226 } Shuffle { alpha red name Shuffle2 xpos 1211 ypos 16333 } Dot { name Dot15 xpos 1245 ypos 16777 } Constant { inputs 0 channels rgb name Constant1 xpos 1573 ypos 16477 } push $Ne180b400 Input { inputs 0 name customDirt xpos 1523 ypos 14731 number 1 } Saturation { saturation 0 name Saturation12 xpos 1523 ypos 14767 } Grade { blackpoint 0.12 whitepoint 1.65 name Grade52 xpos 1523 ypos 14804 } Constant { inputs 0 channels rgb format "1920 1080 0 0 1920 1080 1 HD_1080" name Constant5 xpos 2022 ypos 14581 } set Ne1809000 [stack 0] RotoPaint { cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 512} {t x44768000 x43fd0000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Blur6 512 catmullrom {cc {f 2080} {px x41300000 {x438c8000 x4479c000 x3cc00000} {x438a8000 x447ac000 x3e600000} {x43a58000 x446b0000 x3ea5000d} {x43928000 x446e0000 x3f252008} {x438f0000 x44824000 x3f325ffa} {x438c8000 x4482c000 x3f346003} {x439b0000 x4467c000 x3f389ff9} {x43898000 x446a8000 x3f3d5ffe} {x43030000 x44828000 x3f3ce001} {x42180000 x44854000 x3f39dffc} {x426c0000 x4468c000 x3f39dffc} {x42e00000 x44580000 x3f3b9ffd} {x42500000 x446d4000 x3f3ce001} {x426c0000 x44808000 x3f389ff9} {x42580000 x44564000 x3f3aa002} {x42aa0000 x44340000 x3f3edff8} {xc1300000 x444b8000 x3f3edff8} {xc1900000 x44690000 x3f3c6003} {x41c80000 x44460000 x3f3c6003} {x42a60000 x441d0000 x3f401ffb} {x42000000 x44124000 x3f40e001} {x42240000 x440d4000 x3f3f1fff} {x42880000 x43eb0000 x3f3ea002} {x42600000 x43d48000 x3f3f1fff} {x42480000 x43c38000 x3f3ddffc} {x42740000 x43dc8000 x3f292008} {x42a20000 x44094000 x3f212008} {x42c20000 x43e58000 x3f246003} {x429e0000 x438c8000 x3f2d5ffe} {x42900000 x43510000 x3f2fe005} {x42ca0000 x43630000 x3f262004} {x42d00000 x43980000 x3f0c1ffb} {x433b0000 x43800000 x3f11a006} {x43838000 x431b0000 x3f2be005} {x43910000 x42ea0000 x3f2d5ffe} {x43730000 x431d0000 x3f2c1ffb} {x43980000 x42e00000 x3f2b9ffd} {x43cd0000 x41b00000 x3f34e001} {x43f88000 xc2820000 x3f31dffc} {x44004000 xc2c60000 x3f21dffc} {x43f68000 xc2be0000 x3eb28006}}} {t {{x41300000 x432bd439}} {{x41300000 x4411f6a8}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43838000 bt x40000000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 x41700000 tt x41a00000 nv x40000000 view2 x40000000}} {cubiccurve Blur5 512 catmullrom {cc {f 2080} {px x41300000 {x442a0000 x44618000 x3da20005} {x442a0000 x44608000 x3e770004} {x44258000 x44690000 x3ef1fff8} {x4424c000 x44698000 x3f215ffe} {x4424c000 x44690000 x3f239ffd} {x44114000 x447ac000 x3f24e001} {x44108000 x447b0000 x3f2be005} {x44108000 x447a4000 x3f2b1fff} {x441d8000 x44650000 x3f2d2008} {x441a0000 x44634000 x3f309ff9} {x44028000 x4481a000 x3f36dff8} {x43f98000 x44862000 x3f3a2004} {x44030000 x44804000 x3f3c6003} {x440c8000 x4471c000 x3f42a002} {x43fb0000 x447dc000 x3f452008} {x43ee8000 x44882000 x3f446003} {x43f20000 x44856000 x3f465ffa} {x44060000 x447d0000 x3f46dff8} {x44004000 x447c0000 x3f479ffd} {x43e68000 x44856000 x3f479ffd} {x43c28000 x448e6000 x3f476007} {x43bd0000 x448d8000 x3f02a002}}} {t {{x41300000 x440a4ba6}} {{x41300000 x447ab70a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43838000 bt x40000000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 x41700000 tt x41a00000 nv x40000000 view2 x40000000}} {cubiccurve Blur4 512 catmullrom {cc {f 2080} {px x41300000 {x449b8000 x442f8000 x3dbc0003} {x449ac000 x4432c000 x3edafff3} {x44968000 x44494000 x3d8dfffb}}} {t {{x41300000 x44999571}} {{x41300000 x44392ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43838000 bt x40000000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 x41700000 tt x41a00000 nv x40000000 view2 x40000000}} {cubiccurve Blur3 512 catmullrom {cc {f 2080} {px x41300000 {x44904000 x44068000 x3da3fffd} {x44904000 x44078000 x3ebf7ff1} {x448fc000 x440d4000 x3eeb8002} {x44928000 x44060000 x3f1b6007} {x44932000 x44054000 x3f1ea002} {x44920000 x440d4000 x3f206003} {x44920000 x440dc000 0}}} {t {{x41300000 x44916948}} {{x41300000 x44095b75}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43838000 bt x40000000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 x41700000 tt x41a00000 nv x40000000 view2 x40000000}} {cubiccurve Blur2 512 catmullrom {cc {f 2080} {px x41300000 {x44698000 x44704000 x3ebc0011} {x44690000 x4471c000 x3ee1fff8} {x4479c000 x4459c000 x3f046003} {x447c0000 x44538000 x3f30e001} {x4471c000 x44610000 x3f35a006} {x44618000 x447c8000 x3f362004} {x44770000 x445b4000 x3f3aa002} {x4462c000 x447f8000 x3f43e005} {x44620000 x44808000 x3f455ffe} {x4479c000 x44618000 x3f4d5ffe} {x447ac000 x445c0000 x3f515ffe} {x44674000 x44780000 x3f51a006} {x44658000 x447d0000 x3f509ff9} {x446fc000 x44720000 x3f40e001}}} {t {{x41300000 x446e4db2}} {{x41300000 x446c5b75}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43838000 bt x40000000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 x41700000 tt x41a00000 nv x40000000 view2 x40000000}} {cubiccurve Smear40 512 catmullrom {cc {f 2080} {px x41300000 {x4480c000 x444c4000 x3cb0000d} {x44812000 x444cc000 x3d27fff9} {x44804000 x444f8000 x3ef70004} {x447ac000 x4456c000 x3f265ffa} {x4470c000 x4463c000 x3f2e5ffa} {x446d4000 x44698000 x3f352008} {x44684000 x44714000 x3f362004} {x44658000 x44740000 x3f3a2004} {x4463c000 x44770000 x3f3a2004} {x44620000 x44788000 x3f376007} {x44618000 x44788000 x3e6cffeb}}} {t {{x41300000 x44702e87}} {{x41300000 x44654000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear39 512 catmullrom {cc {f 2080} {px x41300000 {x44efe000 x44338000 x3cc00000} {x44efa000 x44380000 x3d6c0003}}} {t {{x41300000 x44efc000}} {{x41300000 x4435c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear38 512 catmullrom {cc {f 2080} {px x41300000 {x44eba000 x442c0000 x3d67fff9} {x44eb6000 x442c0000 x3e01001d} {x44eb6000 x442c4000 x3e828006} {x44ede000 x4431c000 x3eb9800a}}} {t {{x41300000 x44ec1000}} {{x41300000 x442d8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear37 512 catmullrom {cc {f 2080} {px x41300000 {x44514000 x43e80000 x3d000000} {x44514000 x43ed8000 x3d30000d} {x44514000 x43fc0000 x3ef28006} {x44504000 x43fe0000 x3a7ffff7}}} {t {{x41300000 x44510000}} {{x41300000 x43f3e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear36 512 catmullrom {cc {f 2080} {px x41300000 {x441f4000 x42ea0000 x3d8dfffb} {x4420c000 x43030000 x3e6afff3} {x442b8000 x433d0000 x3ec67ff6} {x44374000 x436c0000 x3f089ff9} {x443d0000 x43850000 x3f195ffe} {x443fc000 x43938000 x3f241ffb} {x44428000 x439e8000 x3f295ffe} {x444cc000 x43c80000 x3f2d5ffe}}} {t {{x41300000 x4435d800}} {{x41300000 x4373e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear35 512 catmullrom {cc {f 2080} {px x41300000 {x442d4000 x43100000 x3c800000} {x442f8000 x43220000 x3c980007}}} {t {{x41300000 x442e6000}} {{x41300000 x43190000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear34 512 catmullrom {cc {f 2080} {px x41300000 {x44228000 x42b40000 x3d13fffd} {x44398000 x43560000 x3d6c0003}}} {t {{x41300000 x442e0000}} {{x41300000 x43180000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear33 512 catmullrom {cc {f 2080} {px x41300000 {x4424c000 x42f40000 x3d67fff9} {x4423c000 x42c60000 x3d600000}}} {t {{x41300000 x44244000}} {{x41300000 x42dd0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear32 512 catmullrom {cc {f 2080} {px x41300000 {x44270000 x43020000 x3e9d000d} {x4428c000 x427c0000 x3eb9fff8} {x44284000 x426c0000 x3e977ff1}}} {t {{x41300000 x44280000}} {{x41300000 x42a80000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear31 512 catmullrom {cc {f 2080} {px x41300000 {x442a0000 x43020000 x3dbdfffb} {x442a0000 x42e20000 x3e9c7ffe} {x442a8000 x42ce0000 x3ee8800f} {x442a0000 x42600000 x3ee9800a}}} {t {{x41300000 x442a2000}} {{x41300000 x42c90000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear30 512 catmullrom {cc {f 2080} {px x41300000 {x4427c000 x43140000 x3db00000} {x44270000 x42900000 x3ee9fff8}}} {t {{x41300000 x44276000}} {{x41300000 x42dc0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear29 512 catmullrom {cc {f 2080} {px x41300000 {x44308000 x43340000 x3d180007} {x44314000 x430e0000 x3ebf7ff1} {x44324000 x42ea0000 x3f0a2004} {x4430c000 x42ac0000 x3f09dffc}}} {t {{x41300000 x44313000}} {{x41300000 x43034000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear28 512 catmullrom {cc {f 2080} {px x41300000 {x44314000 x434a0000 x3db80007} {x4431c000 x434b0000 x3eb1fff8} {x44338000 x43380000 x3eff0004} {x44390000 x43000000 x3f1be005} {x44398000 x42f20000 x3ef77ff1} {x44388000 x42f40000 x3d580007}}} {t {{x41300000 x44359550}} {{x41300000 x43200000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear27 512 catmullrom {cc {f 2080} {px x41300000 {x44398000 x43610000 x3d8dfffb} {x443ec000 x43360000 x3e9afff3} {x443e0000 x43220000 x3f1ddffc} {x443a4000 x43540000 x3f1e2004} {x443ac000 x435a0000 x3f1ce001} {x443c0000 x43290000 x3f1ea002} {x443b4000 x43260000 x3f209ff9} {x443ac000 x43290000 x3f1da006} {x44388000 x43530000 x3f1c1ffb} {x44388000 x43650000 x3f155ffe} {x44380000 x43320000 x3f171fff} {x44354000 x430c0000 x3f1b6007} {x4430c000 x43290000 x3f1c1ffb} {x44300000 x43440000 x3f189ff9} {x44308000 x434a0000 x3f176007} {x44330000 x433b0000 x3f176007} {x44348000 x432b0000 x3f179ffd} {x44364000 x43360000 x3f0ddffc} {x44364000 x43410000 x3dd80022}}} {t {{x41300000 x44379e56}} {{x41300000 x433b6bc7}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear26 512 catmullrom {cc {f 2080} {px x41300000 {x444dc000 x43860000 x3e847ffe} {x444dc000 x43948000 x3eb0fffc}}} {t {{x41300000 x444dc000}} {{x41300000 x438d4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear25 512 catmullrom {cc {f 2080} {px x41300000 {x44494000 x43660000 x3d1bfff6} {x444cc000 x438d8000 x3eaafff3} {x444dc000 x43900000 x3e21fff8}}} {t {{x41300000 x444beab0}} {{x41300000 x43858000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear24 512 catmullrom {cc {f 2080} {px x41300000 {x44468000 x43420000 x3ecb8002} {x444a0000 x43870000 x3ef00000} {x44494000 x43850000 x3db9fffe}}} {t {{x41300000 x44489550}} {{x41300000 x4373553f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear23 512 catmullrom {cc {f 2080} {px x41300000 {x443fc000 x43300000 x3e2afff3} {x44404000 x433d0000 x3ec60008} {x44408000 x435a0000 x3f089ff9} {x44418000 x43360000 x3f081ffb} {x44434000 x435a0000 x3ef67ff6} {x44458000 x436c0000 x3f0e2004}}} {t {{x41300000 x4441cab0}} {{x41300000 x434b2ac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear22 512 catmullrom {cc {f 2080} {px x41300000 {x443c8000 x43270000 x3ec00000} {x443e4000 x43580000 x3ee3ffef}}} {t {{x41300000 x443d6000}} {{x41300000 x433f8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear21 512 catmullrom {cc {f 2080} {px x41300000 {x443b4000 x43140000 x3e977ff1} {x443a4000 x432d0000 x3eef0004} {x443a4000 x43460000 x3f039ffd}}} {t {{x41300000 x443a9550}} {{x41300000 x432d0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear20 512 catmullrom {cc {f 2080} {px x41300000 {x44408000 x42fc0000 x3ecd7ffa} {x443d8000 x43360000 x3ef0800f}}} {t {{x41300000 x443f0000}} {{x41300000 x431a0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear19 512 catmullrom {cc {f 2080} {px x41300000 {x443c0000 x42b80000 x3edd7ffa} {x443f4000 x43260000 x3eee7ff6}}} {t {{x41300000 x443da000}} {{x41300000 x43010000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear18 512 catmullrom {cc {f 2080} {px x41300000 {x44364000 x428c0000 x3ee0800f} {x44330000 x42bc0000 x3ef47ffe} {x44380000 x43190000 x3f079ffd} {x44398000 x43200000 x3eb9800a}}} {t {{x41300000 x4436b000}} {{x41300000 x42ee8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear17 512 catmullrom {cc {f 2080} {px x41300000 {x44308000 x42900000 x3eee7ff6} {x442f8000 x42940000 1} {x442f8000 x43150000 x3f02a002} {x442f8000 x431b0000 x3f036007} {x442f0000 x43170000 x3e9a8006}}} {t {{x41300000 x442f999a}} {{x41300000 x42f06666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear16 512 catmullrom {cc {f 2080} {px x41300000 {x44300000 x427c0000 x3e7e0008} {x442e8000 x42be0000 x3ebb8002} {x442f8000 x43000000 x3f276007} {x442f8000 x43030000 x3f0e2004}}} {t {{x41300000 x442f6000}} {{x41300000 x42d08000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear15 512 catmullrom {cc {f 2080} {px x41300000 {x4439c000 x42940000 x3d900000} {x44378000 x429e0000 x3e947ffe} {x44324000 x42ca0000 x3f101ffb} {x4430c000 x42e00000 x3f2a5ffa} {x442f0000 x42f80000 x3f2d5ffe} {x442e8000 x42f40000 0}}} {t {{x41300000 x4432f550}} {{x41300000 x42cc0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43120000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Blur1 512 catmullrom {cc {f 2080} {px x41300000 {x44180000 x41e80000 x3e180022} {x441c8000 x42600000 x3ea70004} {x442a8000 x42f20000 x3f0ea002} {x441d8000 x41f80000 x3f25dffc} {x441d8000 x42ac0000 x3f365ffa} {x4428c000 x431b0000 x3f36a002} {x44220000 x41100000 x3f3edff8} {x44210000 x423c0000 x3f49a006} {x4423c000 x434b0000 x3f455ffe} {x441fc000 x42080000 x3f58e001} {x44180000 x42d40000 x3f576007} {x440e4000 x43610000 x3f522004} {x44220000 x42000000 x3f601ffb} {x44108000 x42580000 x3f5c6003} {x44054000 x43420000 x3f59a006} {x441d8000 x42940000 x3f615ffe} {x4405c000 x42aa0000 x3f595ffe} {x440e4000 x43440000 x3f58e001} {x4420c000 x41c80000 x3f609ff9} {x44068000 x42880000 x3f615ffe} {x44204000 x43380000 x3f5f9ffd} {x44220000 x42500000 x3f6be005} {x440d4000 x43340000 x3f665ffa} {x44324000 x43808000 x3f61dffc} {x44230000 x42f20000 x3f6adff8} {x440a4000 x43120000 x3f5be005} {x44338000 x438a8000 x3f57e005} {x4428c000 x43200000 x3f5edff8} {x4417c000 x434a0000 x3f612008} {x442a0000 x43a00000 x3f5be005} {x44268000 x437c0000 x3f5adff8} {x441d0000 x43290000 x3f5c9ff9} {x442c4000 x43a10000 x3f5c9ff9} {x4430c000 x43b50000 x3f576007} {x4428c000 x43610000 x3f5b1fff} {x4423c000 x438c8000 x3f5be005} {x443d0000 x43e90000 x3f565ffa} {x443ac000 x43da8000 x3f54e001} {x44244000 x439e8000 x3f58e001} {x442b8000 x43c60000 x3f579ffd} {x4436c000 x43f78000 x3f522004} {x44338000 x43bf0000 x3f52dff8} {x4430c000 x432d0000 x3f546003} {x4431c000 x43650000 x3f571fff} {x44578000 x43800000 x3f4fe005} {x443d0000 x428c0000 x3f579ffd} {x44450000 x437a0000 x3f5f9ffd} {x44588000 x438e0000 x3f539ffd} {x44474000 x42100000 x3f5f6007} {x44418000 x429e0000 x3f5be005} {x44578000 x43860000 x3f595ffe} {x44528000 x43510000 x3f5e2004} {x44378000 xc0a00000 x3f5ea002} {x44450000 x42ea0000 x3f5c9ff9} {x445ac000 x434f0000 x3f581ffb} {x443e0000 x42240000 x3f62a002} {x44284000 x40000000 x3f652008} {x4442c000 x43530000 x3f615ffe} {x444cc000 x43440000 x3f61dffc} {x442c0000 x42180000 x3f689ff9} {x4432c000 x430b0000 x3f6aa002} {x44548000 x43808000 x3f65a006} {x44350000 x426c0000 x3f66dff8} {x441fc000 xc1500000 x3f6b1fff} {x44410000 x438c8000 x3f69a006} {x4448c000 x43980000 x3f34e001}}} {t {{x41300000 x442ce000}} {{x41300000 x432e8f9e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x435b0000 bt x40000000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 x41700000 tt x41a00000 nv x40000000 view2 x40000000}} {cubiccurve Smear14 512 catmullrom {cc {f 2080} {px x41300000 {x441d8000 x426c0000 x3ea2fff3} {x44218000 x426c0000 x3eb77ff1} {x44354000 x42ca0000 x3f0a5ffa} {x4424c000 x42440000 x3f0c9ff9} {x441ec000 x42100000 x3f11a006} {x44164000 x41800000 x3f15a006} {x44268000 x427c0000 x3f18e001} {x442a8000 x42900000 x3f192008} {x442e8000 x429a0000 x3f192008} {x442a8000 x422c0000 x3f195ffe} {x441a0000 x40000000 x3f1c6003} {x44254000 x422c0000 x3f215ffe} {x442e4000 x42740000 x3f20e001} {x4436c000 x42680000 x3f20e001} {x4429c000 x41d80000 x3f22a002} {x441c8000 x41500000 x3f239ffd} {x4423c000 x42180000 x3f222004} {x44278000 x423c0000 x3f222004} {x44398000 x42940000 x3f222004} {x44388000 x42880000 x3f22dff8} {x44234000 x41f80000 x3f236007} {x441d0000 x41c80000 x3f241ffb} {x44258000 x42860000 x3f231fff} {x442f0000 x42b00000 x3f222004} {x442e4000 x42980000 x3f222004} {x44258000 x42440000 x3f236007} {x44220000 x42340000 x3f246003} {x44284000 x42880000 x3f22dff8} {x4432c000 x42ce0000 x3f22dff8} {x44308000 x42c60000 x3f22dff8} {x442cc000 x42d00000 x3f236007} {x442e4000 x42f80000 x3f222004} {x442dc000 x42fc0000 x3efd000d}}} {t {{x41300000 x4428ae87}} {{x41300000 x4273c1f2}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42ba0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear13 512 catmullrom {cc {f 2080} {px x41300000 {x44140000 x42100000 x3e8afff3} {x44158000 x42600000 x3ea1fff8} {x44188000 x428c0000 x3ee00000} {x4430c000 x43100000 x3ee3ffef} {x442e4000 x42e60000 x3ec1800a}}} {t {{x41300000 x44203333}} {{x41300000 x42a86666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42ba0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear12 512 catmullrom {cc {f 2080} {px x41300000 {x44164000 x42440000 x3d4c0003} {x441fc000 x42dc0000 x3d7bfff6} {x442dc000 x432b0000 x3ef0800f}}} {t {{x41300000 x44214000}} {{x41300000 x42dc0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42ba0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear11 512 catmullrom {cc {f 2080} {px x41300000 {x44150000 x41c80000 x3de2003b} {x44420000 x43838000 x3ec9fff8} {x443e4000 x437a0000 x3d860002}}} {t {{x41300000 x4431c000}} {{x41300000 x4333553f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42ba0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear10 512 catmullrom {cc {f 2080} {px x41300000 {x44ab0000 x436f0000 x3d04000a} {x44a94000 x43818000 x3d44000a} {x449d4000 x43c98000 x3f041ffb} {x449dc000 x43c88000 x3f076007} {x449f4000 x43c08000 x3cf7ffec}}} {t {{x41300000 x44a2e666}} {{x41300000 x43a8b333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42ba0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear9 512 catmullrom {cc {f 2080} {px x41300000 {x44af0000 x43680000 x3d67fff9} {x44ae2000 x436f0000 x3e838002} {x44a84000 x43938000 x3ee8800f} {x44a06000 x43bd0000 x3f11dffc} {x449ee000 x43c60000 x3f15a006}}} {t {{x41300000 x44a75333}} {{x41300000 x439a0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42ba0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear8 512 catmullrom {cc {f 2080} {px x41300000 {x44ae2000 x43530000 x3d0ffff3} {x44af4000 x43510000 x3d33fffd} {x44acc000 x43680000 x3ece0008} {x44a8c000 x43860000 x3f1c9ff9} {x44a36000 x43a88000 x3f209ff9} {x44a32000 x43aa0000 x3f236007} {x44a48000 x43a48000 x3f0be005}}} {t {{x41300000 x44a8d6b8}} {{x41300000 x4389924e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42ba0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear7 512 catmullrom {cc {f 2080} {px x41300000 {x44982000 x43f08000 x3d4c0003} {x4497e000 x43f10000 x3da60002} {x448f8000 x44180000 x3e857ffa} {x448ee000 x441c8000 x3f0adff8} {x448e0000 x44230000 x3f089ff9} {x448d8000 x44244000 x3eb5000d}}} {t {{x41300000 x4491a571}} {{x41300000 x44121550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42ba0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear6 512 catmullrom {cc {f 2080} {px x41300000 {x44974000 x43f58000 x3d900000} {x44948000 x44020000 x3eb80000} {x448e0000 x44220000 x3f0adff8} {x448d8000 x44234000 x3f0a2004}}} {t {{x41300000 x4491d000}} {{x41300000 x44108000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42ba0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear5 512 catmullrom {cc {f 2080} {px x41300000 {x44976000 x43e90000 x3d580007} {x44974000 x43ea0000 x3e770004} {x44956000 x43f50000 x3ec77ff1} {x448f8000 x4412c000 x3f106003} {x448e4000 x44180000 x3f22a002} {x448dc000 x441a0000 x3f215ffe}}} {t {{x41300000 x44929571}} {{x41300000 x4406cab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42ba0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear4 512 catmullrom {cc {f 2080} {px x41300000 {x44a04000 x44140000 x3dcfffbd} {x449f4000 x44190000 x3e9c0011} {x4498c000 x4439c000 x3f049ff9} {x4491a000 x446fc000 x3f255ffe} {x4490e000 x446f8000 0}}} {t {{x41300000 x44988ccd}} {{x41300000 x44413333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42ba0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear3 512 catmullrom {cc {f 2080} {px x41300000 {x44a0a000 x44124000 x3d64000a} {x44a0a000 x44140000 x3eb28006} {x449a6000 x4429c000 x3f101ffb} {x4493e000 x4447c000 x3f2d2008} {x448e6000 x44608000 x3f36dff8} {x448e0000 x4463c000 x3f376007} {x448e0000 x44648000 x3f2da006}}} {t {{x41300000 x4495fb85}} {{x41300000 x4440124e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42ba0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear2 512 catmullrom {cc {f 2080} {px x41300000 {x44866000 x44460000 x3d400000} {x4485e000 x44474000 x3e7c0011} {x44854000 x4448c000 x3f076007} {x44800000 x44548000 x3f0ea002} {x44778000 x44644000 x3f239ffd} {x446d4000 x4471c000 x3f2b1fff} {x446c4000 x44740000 x3f2f9ffd} {x446bc000 x44754000 x3f301ffb} {x446b4000 x44754000 x3f309ff9} {x446d8000 x44738000 x3f2f9ffd} {x4470c000 x446f8000 x3f2f9ffd} {x447dc000 x445c8000 x3f2ddffc} {x44836000 x4450c000 x3f2da006} {x4487e000 x4443c000 x3f2da006} {x44886000 x44428000 x3f2c9ff9} {x44866000 x44470000 x3f2c9ff9} {x44828000 x444dc000 x3f2d5ffe} {x446fc000 x44650000 x3f2e2004} {x4466c000 x446f0000 x3f306003} {x44608000 x44764000 x3f306003} {x4467c000 x446e8000 x3f2da006} {x44740000 x445fc000 x3f2c9ff9} {x4483e000 x44498000 x3f2c1ffb} {x4483a000 x444a0000 x3f2c6003} {x44780000 x445e4000 x3f2b1fff} {x44704000 x44684000 x3f2c9ff9} {x446c4000 x446f8000 x3f2d5ffe} {x44754000 x44650000 x3f2d5ffe} {x447b8000 x445dc000 x3f2d5ffe} {x447d4000 x4459c000 x3f2d2008} {x4478c000 x445f4000 x3f2e5ffa} {x446a0000 x4471c000 x3f2edff8} {x44650000 x4475c000 x3f2edff8} {x44634000 x44770000 x3f1fe005}}} {t {{x41300000 x4477fa5e}} {{x41300000 x446030f6}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42ba0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear1 512 catmullrom {cc {f 2080} {px x41300000 {x44854000 x444b8000 x3d180007} {x44854000 x444b0000 x3d2c0003} {x44856000 x44484000 x3e100000} {x44808000 x4450c000 x3f0b9ffd} {x44780000 x445d0000 x3f246003} {x446cc000 x446d8000 x3f2e2004} {x44690000 x44720000 x3f376007} {x44658000 x44794000 x3f389ff9} {x4462c000 x447b8000 x3f3b9ffd} {x44618000 x447d0000 x3f3c6003} {x44618000 x447c0000 x3f249ff9}}} {t {{x41300000 x4473cba6}} {{x41300000 x44654000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42ba0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Brush94 512 catmullrom {cc {f 2080} {px x41300000 {x446e8000 x442f8000 x3d04000a} {x446e0000 x44380000 x3d380007}}} {t {{x41300000 x446e4000}} {{x41300000 x4433c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush93 512 catmullrom {cc {f 2080} {px x41300000 {x4470c000 x4429c000 x3d4c0003} {x44714000 x442a8000 x3e45ffe7} {x44704000 x44300000 x3e700000}}} {t {{x41300000 x4470c000}} {{x41300000 x442c1550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush92 512 catmullrom {cc {f 2080} {px x41300000 {x448d8000 x4416c000 x3d400000} {x448e0000 x441c8000 x3d4ffff3}}} {t {{x41300000 x448dc000}} {{x41300000 x4419a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush91 512 catmullrom {cc {f 2080} {px x41300000 {x448ee000 x440b8000 x3d0c0003} {x448e6000 x440d4000 x3d2c0003}}} {t {{x41300000 x448ea000}} {{x41300000 x440c6000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush90 512 catmullrom {cc {f 2080} {px x41300000 {x448ea000 x44070000 x3dc9fffe} {x448e4000 x440a4000 x3e65ffe7}}} {t {{x41300000 x448e7000}} {{x41300000 x4408a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush89 512 catmullrom {cc {f 2080} {px x41300000 {x448d4000 x44084000 x3d200000} {x448d4000 x44080000 x3d9c0003} {x448d4000 x44078000 0}}} {t {{x41300000 x448d4000}} {{x41300000 x4407eab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush88 512 catmullrom {cc {f 2080} {px x41300000 {x44832000 x4412c000 x3e4afff3} {x44832000 x4411c000 x3e6a0019}}} {t {{x41300000 x44832000}} {{x41300000 x44124000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush87 512 catmullrom {cc {f 2080} {px x41300000 {x4435c000 x4471c000 x3cc80014} {x4436c000 x446b4000 x3d780007} {x4439c000 x44624000 x3e000000} {x443c8000 x44600000 x3d980007} {x443bc000 x44580000 x3dadfffb} {x443c8000 x44528000 x3dddffc5} {x443fc000 x444b8000 x3e070004} {x44408000 x44450000 x3e530015} {x44420000 x443e0000 x3e53ffef} {x44420000 x44378000 x3e53ffef} {x44470000 x44308000 x3e2afff3} {x44498000 x442b0000 x3e31001d} {x444a8000 x44284000 x3e61001d} {x444e0000 x441c8000 x3e61001d} {x4451c000 x44164000 x3dcc0003} {x44588000 x440c0000 x3db3fffd}}} {t {{x41300000 x44432800}} {{x41300000 x444123f8}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush86 512 catmullrom {cc {f 2080} {px x41300000 {x442e8000 x4443c000 x3c60001b} {x4431c000 x443fc000 x3cd80007} {x44340000 x44364000 x3d000000} {x44390000 x442e8000 x3d04000a} {x443d0000 x4424c000 x3dc60002} {x443e4000 x44218000 x3e070004} {x443f4000 x441d0000 x3ca7fff9}}} {t {{x41300000 x4437f6d9}} {{x41300000 x442f5b75}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush85 512 catmullrom {cc {f 2080} {px x41300000 {x440d4000 x44768000 x3cc80014} {x440dc000 x44778000 x3d180007} {x440f0000 x44780000 x3e35000d} {x44100000 x44770000 x3e960008} {x44198000 x446f0000 x3e99800a} {x441d8000 x4463c000 x3ea77ff1} {x44218000 x445b4000 x3ea1fff8} {x44254000 x4459c000 x3e9c0011} {x442a8000 x44564000 x3e99fff8} {x442e4000 x44540000 x3e900000} {x442e4000 x44524000 x3e11fff8}}} {t {{x41300000 x441cfa2d}} {{x41300000 x4465ee87}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush84 512 catmullrom {cc {f 2080} {px x41300000 {x44134000 x44390000 x3d07fff9} {x44140000 x44380000 x3e430015} {x44180000 x44324000 x3ea0800f} {x44188000 x4430c000 0}}} {t {{x41300000 x4415f000}} {{x41300000 x44350000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush83 512 catmullrom {cc {f 2080} {px x41300000 {x43fc0000 x44204000 x3d0c0003} {x43fd0000 x441ac000 x3d47fff9}}} {t {{x41300000 x43fc8000}} {{x41300000 x441d8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush82 512 catmullrom {cc {f 2080} {px x41300000 {x43f68000 x442f8000 x3ccffff3} {x43fe0000 x44278000 x3d180007} {x43fa0000 x44234000 x3d4ffff3} {x43f88000 x44220000 x3d53fffd}}} {t {{x41300000 x43f9c000}} {{x41300000 x44271000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush81 512 catmullrom {cc {f 2080} {px x41300000 {x43f40000 x4435c000 x3cd80007} {x43f50000 x4435c000 x3d9c0003} {x43f50000 x44324000 x3e11001d}}} {t {{x41300000 x43f4aaa0}} {{x41300000 x44349550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush80 512 catmullrom {cc {f 2080} {px x41300000 {x43cd0000 x43a30000 x3cb7ffec} {x43c40000 x43aa0000 x3d33fffd} {x43c38000 x43ae8000 x3d7bfff6}}} {t {{x41300000 x43c6d560}} {{x41300000 x43a92aa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush79 512 catmullrom {cc {f 2080} {px x41300000 {x44004000 x43a10000 x3d2c0003} {x43fa0000 x439e8000 x3d33fffd}}} {t {{x41300000 x43fd4000}} {{x41300000 x439fc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush78 512 catmullrom {cc {f 2080} {px x41300000 {x44078000 x43970000 x3d04000a} {x44068000 x43980000 x3d27fff9}}} {t {{x41300000 x44070000}} {{x41300000 x43978000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush77 512 catmullrom {cc {f 2080} {px x41300000 {x44260000 x43ef8000 x3c980007} {x4429c000 x43e20000 x3d0ffff3} {x44254000 x43cd0000 x3e08fffc}}} {t {{x41300000 x44270000}} {{x41300000 x43df8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush76 512 catmullrom {cc {f 2080} {px x41300000 {x44260000 x44158000 x3ca7fff9} {x442b0000 x440b8000 x3d13fffd} {x442b8000 x4409c000 x3affffd5}}} {t {{x41300000 x44298000}} {{x41300000 x440e4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush75 512 catmullrom {cc {f 2080} {px x41300000 {x44174000 x44244000 x3ca7fff9} {x44164000 x44230000 x3cf0000d} {x4415c000 x44218000 x3d1bfff6}}} {t {{x41300000 x44166ab0}} {{x41300000 x4422eab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush74 512 catmullrom {cc {f 2080} {px x41300000 {x43ff8000 x44374000 x3c60001b} {x43fc0000 x44380000 x3ccffff3} {x43f88000 x443e4000 x3e01001d} {x43fa0000 x44428000 x3e1afff3} {x43fe8000 x44434000 x3df9ffd6} {x44028000 x44444000 x3df1fff8} {x44084000 x44410000 x3e21fff8} {x440c8000 x443d0000 x3db00000}}} {t {{x41300000 x4401b000}} {{x41300000 x443eb000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush73 512 catmullrom {cc {f 2080} {px x41300000 {x44114000 x44100000 x3cc80014} {x440dc000 x44150000 x3cf0000d}}} {t {{x41300000 x440f8000}} {{x41300000 x44128000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush72 512 catmullrom {cc {f 2080} {px x41300000 {x440f0000 x440d4000 x3cd80007} {x44108000 x440e4000 x3d0ffff3}}} {t {{x41300000 x440fc000}} {{x41300000 x440dc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush71 512 catmullrom {cc {f 2080} {px x41300000 {x440d4000 x44084000 x3cc00000} {x440dc000 x440a8000 x3d27fff9}}} {t {{x41300000 x440d8000}} {{x41300000 x44096000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush70 512 catmullrom {cc {f 2080} {px x41300000 {x440a4000 x43e80000 x3d07fff9} {x440c0000 x43e68000 x3d380007} {x440c8000 x43e68000 0}}} {t {{x41300000 x440b9550}} {{x41300000 x43e70000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush69 512 catmullrom {cc {f 2080} {px x41300000 {x44060000 x43f40000 x3ce7fff9} {x4408c000 x43ef8000 x3d180007} {x4408c000 x43ed8000 x3dd5ffe7}}} {t {{x41300000 x4407d550}} {{x41300000 x43f05560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush68 512 catmullrom {cc {f 2080} {px x41300000 {x43db8000 x440f8000 x3cc00000} {x43de8000 x44108000 x3d180007} {x43e48000 x4411c000 x3e130015} {x43e58000 x44114000 x3de3ffef} {x43ec0000 x440dc000 x3da20005} {x43ee8000 x440c8000 0}}} {t {{x41300000 x43e51560}} {{x41300000 x440f8ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush67 512 catmullrom {cc {f 2080} {px x41300000 {x43ad8000 x42880000 x3ce7fff9} {x43c38000 x422c0000 x3d000000}}} {t {{x41300000 x43b88000}} {{x41300000 x425e0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush66 512 catmullrom {cc {f 2080} {px x41300000 {x43890000 x42e00000 x3cb7ffec} {x43968000 x42dc0000 x3d07fff9} {x43a40000 x42bc0000 x3e13ffef} {x43ac0000 x428c0000 x3e38fffc}}} {t {{x41300000 x439be000}} {{x41300000 x42c10000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush65 512 catmullrom {cc {f 2080} {px x41300000 {x43480000 x42e60000 x3cc00000} {x43560000 x42ce0000 x3d04000a}}} {t {{x41300000 x434f0000}} {{x41300000 x42da0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush64 512 catmullrom {cc {f 2080} {px x41300000 {x43340000 x43050000 x3c6fffd8} {x43380000 x42e20000 x3cd80007} {x43380000 x42d80000 x3cb7ffec}}} {t {{x41300000 x4336aac1}} {{x41300000 x42ec0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush63 512 catmullrom {cc {f 2080} {px x41300000 {x43d00000 x40e00000 x3c8ffff3} {x43d00000 x40800000 x3b9ffffb}}} {t {{x41300000 x43d00000}} {{x41300000 x40b00000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush62 512 catmullrom {cc {f 2080} {px x41300000 {x43c98000 x42240000 x3cd80007} {x43c98000 x42000000 x3d000000}}} {t {{x41300000 x43c98000}} {{x41300000 x42120000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush61 512 catmullrom {cc {f 2080} {px x41300000 {x43b88000 x42ca0000 x3cd80007} {x43bc0000 x42c20000 x3d13fffd} {x43bd0000 x42bc0000 x3dcc0003}}} {t {{x41300000 x43bb2aa0}} {{x41300000 x42c2aaa6}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush60 512 catmullrom {cc {f 2080} {px x41300000 {x42e20000 x43ad8000 x3cc80014} {x43050000 x43ad0000 x3d07fff9} {x43140000 x43a40000 x3e1e0008} {x430e0000 x439c8000 x3e380022} {x43020000 x43958000 x3e500000} {x430e0000 x439b0000 x3e500000} {x43410000 x439b8000 x3e47ffde} {x433f0000 x438f0000 x3e500000} {x43300000 x43828000 x3e53ffef} {x43340000 x43808000 x3e21fff8} {x43440000 x43770000 x3e100000} {x434a0000 x436a0000 x3e180022} {x434a0000 x43660000 x3e18fffc} {x434a0000 x434d0000 x3dce0008} {x435c0000 x43540000 x3d70000d} {x43848000 x434b0000 x3d70000d} {x43880000 x433f0000 x3e3c0011} {x438f0000 x432d0000 x3e3afff3} {x43948000 x43200000 x3debffce} {x43980000 x43100000 x3e130015}}} {t {{x41300000 x4347b333}} {{x41300000 x437cd99a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush59 512 catmullrom {cc {f 2080} {px x41300000 {x43c38000 x44380000 x3c800000} {x43c40000 x44348000 x3cf0000d}}} {t {{x41300000 x43c3c000}} {{x41300000 x44364000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush58 512 catmullrom {cc {f 2080} {px x41300000 {x43bc0000 x44554000 x3d4c0003} {x43b78000 x4451c000 x3d4ffff3}}} {t {{x41300000 x43b9c000}} {{x41300000 x44538000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush57 512 catmullrom {cc {f 2080} {px x41300000 {x439d8000 x446a8000 x3ccffff3} {x43990000 x446d4000 x3d04000a} {x439d8000 x44728000 x3de00000} {x43a40000 x44740000 x3e82fff3} {x43b08000 x44720000 x3e80fffc} {x43b18000 x446f0000 x3e580022} {x43b20000 x446cc000 x3e63ffef} {x43b30000 x446c4000 x3e200000} {x43b08000 x44644000 x3e31001d}}} {t {{x41300000 x43a8d560}} {{x41300000 x446dd550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush56 512 catmullrom {cc {f 2080} {px x41300000 {x42100000 x4478c000 x3d180007} {x422c0000 x44728000 x3d800000} {x42240000 x44620000 x3e23ffef} {x42100000 x44588000 x3e4a0019} {x42100000 x44474000 x3e61fff8} {x42180000 x4439c000 x3e430015} {x42240000 x44350000 x3d64000a}}} {t {{x41300000 x421adb71}} {{x41300000 x44564000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush55 512 catmullrom {cc {f 2080} {px x41300000 {x42dc0000 x445c8000 x3d24000a} {x42e00000 x445c8000 x3d4ffff3} {x42e20000 x445e4000 x3dd5ffe7} {x42ce0000 x4467c000 x3e91800a} {x42b00000 x4470c000 x3e947ffe} {x42480000 x447b0000 x3e98fffc}}} {t {{x41300000 x42c00000}} {{x41300000 x44672000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush54 512 catmullrom {cc {f 2080} {px x41300000 {x43860000 x445c0000 x3dc3fffd} {x43800000 x445b8000 x3e860008} {x437e0000 x44618000 x3e98fffc}}} {t {{x41300000 x4381aaa0}} {{x41300000 x445daab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush53 512 catmullrom {cc {f 2080} {px x41300000 {x43260000 x44540000 x3d2c0003} {x43270000 x44548000 x3d47fff9} {x43340000 x44570000 x3df00043} {x43380000 x44580000 0}}} {t {{x41300000 x432e4000}} {{x41300000 x4455e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush52 512 catmullrom {cc {f 2080} {px x41300000 {x43270000 x44278000 x3c6fffd8} {x43260000 x44258000 x3c880014}}} {t {{x41300000 x43268000}} {{x41300000 x44268000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush51 512 catmullrom {cc {f 2080} {px x41300000 {x431e0000 x443c8000 x3cf7ffec} {x43240000 x44398000 x3d1bfff6} {x43220000 x44338000 x3e967ff6} {x43260000 x442d4000 x3e78fffc}}} {t {{x41300000 x43228000}} {{x41300000 x4435b000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush50 512 catmullrom {cc {f 2080} {px x41300000 {x43020000 x44460000 x3ce7fff9} {x42f40000 x444bc000 x3d04000a} {x42d40000 x444bc000 x3d3bfff6} {x42c60000 x444b0000 x3e11001d} {x42b00000 x444e8000 x3e25000d} {x42ac0000 x444e8000 x3e8d000d} {x42b80000 x44538000 x3e8f0004} {x42be0000 x44564000 x3e9a8006} {x42e20000 x4459c000 x3e9a8006} {x42f80000 x44590000 x3e98800f} {x43120000 x44528000 x3e91800a} {x43170000 x44514000 0}}} {t {{x41300000 x42e15581}} {{x41300000 x44507ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush49 512 catmullrom {cc {f 2080} {px x41300000 {x42580000 x4423c000 x3cf0000d} {x42580000 x44244000 x3d600000} {x42480000 x4435c000 x3d960002} {x42b00000 x44418000 x3e11001d} {x42be0000 x44428000 0}}} {t {{x41300000 x42886666}} {{x41300000 x44338ccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x43050000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush48 512 catmullrom {cc {f 2080} {px x41300000 {x44504000 x43990000 x3da7fff9} {x444f8000 x43a58000 x3db80007}}} {t {{x41300000 x444fe000}} {{x41300000 x439f4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42700000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush47 512 catmullrom {cc {f 2080} {px x41300000 {x441ac000 xc0e00000 x3d04000a} {x441ac000 xc0a00000 x3d3bfff6} {x441e8000 x40e00000 x3d64000a} {x442cc000 x423c0000 x3e600000} {x44314000 x42600000 x3e65000d} {x44364000 x42820000 x3e65ffe7} {x44380000 x428c0000 x3e63ffef} {x443c0000 x42d80000 x3e630015} {x443f4000 x42f20000 x3e5afff3} {x44428000 x43000000 x3e5a0019} {x44420000 x43050000 x3e51fff8} {x44450000 x43200000 x3e4effe3} {x44460000 x43220000 x3e3a0019} {x4447c000 x43270000 x3e3e0008} {x4442c000 x43320000 x3e01001d} {x44428000 x43480000 x3e31001d} {x44474000 x434d0000 x3e2afff3} {x444b0000 x434f0000 x3e08fffc} {x444b0000 x43510000 x3e18fffc} {x444bc000 x43580000 x3e18fffc} {x444dc000 x435f0000 x3e180022} {x444e0000 x43650000 x3e270004} {x444e8000 x43710000 x3e13ffef} {x444e0000 x437c0000 x3e070004} {x444dc000 x43890000 x3de7ffde}}} {t {{x41300000 x443f0000}} {{x41300000 x4311d70a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42700000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush46 512 catmullrom {cc {f 2080} {px x41300000 {x44108000 xc1100000 x3d3bfff6} {x4416c000 x42340000 x3d5bfff6} {x441d8000 x42ca0000 x3e15ffe7} {x44210000 x43000000 x3e15ffe7} {x44278000 x43270000 x3e180022} {x442a0000 x43380000 x3e05000d} {x4430c000 x435a0000 x3e130015} {x44300000 x43630000 x3da7fff9} {x44338000 x43800000 x3e03ffef} {x44350000 x43828000 x3dfdffc5} {x443d0000 x438b8000 x3e000000} {x443e4000 x438d8000 x3da7fff9} {x44418000 x439a0000 x3e03ffef} {x4444c000 x43a88000 x3dfdffc5} {x44474000 x43b30000 x3da3fffd}}} {t {{x41300000 x442f8ccd}} {{x41300000 x43518873}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42700000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush45 512 catmullrom {cc {f 2080} {px x41300000 {x4411c000 xc1800000 x3cd80007} {x44114000 xc1800000 x3d0ffff3} {x44124000 xc1500000 x3d13fffd} {x44124000 xc1300000 x3df9ffd6} {x44124000 x40800000 x3e1c0011} {x4411c000 x41b00000 x3e800000} {x44108000 x42740000 x3e82fff3} {x44108000 x429e0000 x3e80800f} {x44100000 x42ac0000 x3e78fffc} {x44108000 x42ac0000 x3e5c0011} {x44114000 x42c60000 x3e58fffc} {x44138000 x42ea0000 x3e5cffeb} {x44148000 x43000000 x3e370004} {x44140000 x43030000 x3e38fffc} {x4416c000 x43190000 x3e3afff3} {x44188000 x43200000 x3e5afff3} {x44188000 x43290000 x3e61001d} {x441a0000 x433d0000 x3e5cffeb} {x441bc000 x43510000 x3e55000d} {x441e0000 x435f0000 x3e3a0019} {x44204000 x43730000 x3d6c0003} {x441fc000 x43780000 x3d89fffe} {x44218000 x43898000 x3da3fffd} {x44210000 x438c8000 x3d900000} {x44228000 x43980000 x3db00000} {x44228000 x439b0000 x3d13fffd} {x44230000 x43a10000 x3d1bfff6} {x44234000 x43a68000 x3d380007} {x44230000 x43b68000 x3d380007} {x44230000 x43bf0000 x3cc80014} {x44234000 x43c38000 x3c980007}}} {t {{x41300000 x44192f7d}} {{x41300000 x432b6b44}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42700000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush44 512 catmullrom {cc {f 2080} {px x41300000 {x449a2000 x44364000 x3cd80007} {x449b8000 x442cc000 x3d04000a} {x449be000 x442a8000 x3e270004} {x449c2000 x442a0000 x3e18fffc} {x449c2000 x4428c000 x3e15ffe7} {x449c2000 x44278000 x3e0a0019} {x449c6000 x44258000 x3e0cffeb} {x449c2000 x44260000 x3e1afff3} {x449b0000 x442a8000 x3e400000} {x449ac000 x442b8000 x3e7effe3} {x449a6000 x442f0000 x3e800000} {x449a2000 x4431c000 x3e80800f} {x449a6000 x4432c000 x3e80800f} {x449a6000 x44348000 x3e80800f} {x44994000 x443ac000 x3e80800f} {x44988000 x443c8000 x3e53ffef} {x4497e000 x443e0000 x3dc9fffe}}} {t {{x41300000 x449ac3d7}} {{x41300000 x442f70f6}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42700000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush43 512 catmullrom {cc {f 2080} {px x41300000 {x449ac000 x44340000 x3d180007} {x449ac000 x44350000 x3d3bfff6} {x449a2000 x44380000 x3e2c0011} {x4499e000 x443ac000 x3e400000} {x4498c000 x44408000 x3e41001d} {x44988000 x44418000 x3e130015} {x44988000 x4443c000 x3d8c0003} {x44986000 x44450000 x3da20005} {x44982000 x44474000 x3d960002}}} {t {{x41300000 x44994e14}} {{x41300000 x443df8e5}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42700000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush42 512 catmullrom {cc {f 2080} {px x41300000 {x44948000 x44570000 x3d1bfff6} {x44940000 x44570000 x3d53fffd} {x4493a000 x44564000 x3e31001d}}} {t {{x41300000 x44940a8f}} {{x41300000 x4456c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42ba0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush41 512 catmullrom {cc {f 2080} {px x41300000 {x44928000 x445c0000 x3d13fffd} {x44920000 x445c8000 x3d600000}}} {t {{x41300000 x44924000}} {{x41300000 x445c4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush40 512 catmullrom {cc {f 2080} {px x41300000 {x44940000 x4456c000 x3d400000} {x44940000 x44578000 x3d580007} {x4493e000 x44590000 x3d8dfffb}}} {t {{x41300000 x4493f571}} {{x41300000 x4457c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush39 512 catmullrom {cc {f 2080} {px x41300000 {x44952000 x44514000 x3c8ffff3} {x44944000 x44540000 x3d04000a} {x44940000 x44554000 x3d9dfffb}}} {t {{x41300000 x44947571}} {{x41300000 x44538000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush38 512 catmullrom {cc {f 2080} {px x41300000 {x449b8000 x44308000 x3c9fffe5} {x449ac000 x44330000 x3dbc0003} {x4499e000 x44390000 x3e15ffe7} {x44998000 x443bc000 x3e18fffc} {x4498c000 x443fc000 x3e1e0008} {x44986000 x44420000 x3e1effe3} {x4497a000 x44458000 x3e21fff8} {x44976000 x4447c000 x3e1c0011} {x44970000 x444a8000 x3dfdffc5} {x4496c000 x444b0000 x3affffd5}}} {t {{x41300000 x4498c000}} {{x41300000 x443faccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush37 512 catmullrom {cc {f 2080} {px x41300000 {x44d9a000 x40800000 x3ce7fff9} {x44d9c000 x40800000 x3d04000a}}} {t {{x41300000 x44d9b000}} {{x41300000 x40800000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush36 512 catmullrom {cc {f 2080} {px x41300000 {x44d3c000 0 x3cf0000d} {x44d40000 x40000000 x3db20005} {x44d40000 x40800000 x3e0c0011} {x44d42000 x40e00000 x3e300000} {x44d4e000 x40e00000 x3e8e0008} {x44d52000 x40e00000 x3e9e0008} {x44d6a000 x41100000 x3e55ffe7} {x44d8e000 x40e00000 x3e5a0019} {x44da8000 xc0000000 x3e55ffe7}}} {t {{x41300000 x44d5c385}} {{x41300000 x4091c726}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush35 512 catmullrom {cc {f 2080} {px x41300000 {x44f04000 x44378000 x3d30000d} {x44f02000 x4436c000 x3dac0003}}} {t {{x41300000 x44f03000}} {{x41300000 x44372000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush34 512 catmullrom {cc {f 2080} {px x41300000 {x44eaa000 x442b0000 x3cb7ffec} {x44eb2000 x442c0000 x3e8c0011} {x44eb6000 x442c0000 x3e8c0011} {x44ebc000 x442c0000 x3e8b8002} {x44ec0000 x442b8000 x3e900000} {x44ecc000 x442c4000 x3e61001d} {x44ee0000 x44300000 x3e1cffeb}}} {t {{x41300000 x44ebf23d}} {{x41300000 x442c648b}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush33 512 catmullrom {cc {f 2080} {px x41300000 {x44a36000 x43150000 x3c6fffd8} {x44a3a000 x43170000 x3d13fffd} {x44a40000 x43170000 x3d6c0003} {x44aa6000 x423c0000 x3e27ffde} {x44a9e000 x42080000 x3d9c0003}}} {t {{x41300000 x44a64000}} {{x41300000 x42d4cccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush32 512 catmullrom {cc {f 2080} {px x41300000 {x44974000 x43200000 x3cf7ffec} {x44986000 x432b0000 x3d33fffd}}} {t {{x41300000 x4497d000}} {{x41300000 x43258000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush31 512 catmullrom {cc {f 2080} {px x41300000 {x44990000 x42e60000 x3cf7ffec} {x44974000 x43020000 x3d33fffd}}} {t {{x41300000 x44982000}} {{x41300000 x42f50000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush30 512 catmullrom {cc {f 2080} {px x41300000 {x449a2000 x42480000 x3cb7ffec} {x449a6000 x42a20000 x3d24000a}}} {t {{x41300000 x449a4000}} {{x41300000 x42830000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush29 512 catmullrom {cc {f 2080} {px x41300000 {x44968000 x42000000 x3d0ffff3} {x44976000 x42200000 x3db9fffe} {x44998000 x42480000 x3e38fffc}}} {t {{x41300000 x4497ca8f}} {{x41300000 x4222aab3}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush28 512 catmullrom {cc {f 2080} {px x41300000 {x44808000 x42b40000 x3d3bfff6} {x44820000 x43050000 x3d70000d} {x44828000 x430c0000 x3dbc0003} {x44832000 x43220000 x3d87fff9} {x44832000 x433b0000 x3d83fffd} {x44836000 x43440000 x3dd40032} {x44836000 x434f0000 x3dfdffc5} {x44836000 x43660000 x3df40032} {x4483a000 x436f0000 x3d580007}}} {t {{x41300000 x4482c70a}} {{x41300000 x43300000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush27 512 catmullrom {cc {f 2080} {px x41300000 {x44824000 x42100000 x3d33fffd} {x44812000 x42340000 x3d6c0003} {x44800000 x42740000 x3df1fff8} {x447f8000 x42860000 x3d1bfff6}}} {t {{x41300000 x4480c800}} {{x41300000 x42510000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush26 512 catmullrom {cc {f 2080} {px x41300000 {x448ae000 x43580000 x3d33fffd} {x448b0000 x43530000 x3d47fff9} {x448b0000 x43510000 x3db80007} {x448b4000 x43440000 x3db3fffd} {x448b8000 x43300000 x3d900000} {x448b8000 x43200000 x3d900000} {x448bc000 x43100000 x3dc3fffd} {x448b8000 x43090000 x3e61001d} {x448b4000 x42e20000 x3e7a0019} {x448c0000 x42a20000 x3e7effe3} {x448c6000 x42500000 x3e0e0008} {x448d2000 x41e80000 x3dc60002} {x448dc000 xc0a00000 x3d87fff9} {x448e0000 xc1b80000 x3da7fff9} {x448e0000 xc1d80000 x3d960002}}} {t {{x41300000 x448c0f0a}} {{x41300000 x42de88b4}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush25 512 catmullrom {cc {f 2080} {px x41300000 {x448c2000 x43910000 x3d30000d} {x448c0000 x438f0000 x3e25000d}}} {t {{x41300000 x448c1000}} {{x41300000 x43900000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush24 512 catmullrom {cc {f 2080} {px x41300000 {x448b8000 x43cb8000 x3cd80007} {x448b4000 x43ca8000 x3d3bfff6}}} {t {{x41300000 x448b6000}} {{x41300000 x43cb0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush23 512 catmullrom {cc {f 2080} {px x41300000 {x44886000 x43c50000 x3d180007} {x44882000 x43c50000 x3d33fffd} {x44878000 x43cb8000 x3e500000} {x4487a000 x43d00000 x3e78fffc} {x44898000 x43d28000 x3e730015} {x448aa000 x43d00000 x3df9ffd6}}} {t {{x41300000 x4488a000}} {{x41300000 x43cc0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush22 512 catmullrom {cc {f 2080} {px x41300000 {x44554000 x446d8000 x3d7bfff6} {x4454c000 x446e8000 x3e18fffc} {x44570000 x446e8000 x3e9f7ff1}}} {t {{x41300000 x4455aab0}} {{x41300000 x446e2ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush21 512 catmullrom {cc {f 2080} {px x41300000 {x44620000 x44590000 x3e05000d} {x44610000 x44588000 x3e31fff8} {x44608000 x44594000 x3e4effe3} {x44610000 x445b4000 x3e5a0019} {x44610000 x445b8000 x3e847ffe}}} {t {{x41300000 x4461199a}} {{x41300000 x4459e666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush20 512 catmullrom {cc {f 2080} {px x41300000 {x446b4000 x446c4000 x3d64000a} {x446b4000 x446bc000 x3e25ffe7} {x446b4000 x446b4000 0}}} {t {{x41300000 x446b4000}} {{x41300000 x446bc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush19 512 catmullrom {cc {f 2080} {px x41300000 {x44738000 x445f4000 x3cf0000d} {x44740000 x44608000 x3d87fff9}}} {t {{x41300000 x4473c000}} {{x41300000 x445fe000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush18 512 catmullrom {cc {f 2080} {px x41300000 {x44764000 x445c8000 x3d4c0003} {x44754000 x445ec000 x3d73fffd} {x4474c000 x445ec000 x3d27fff9}}} {t {{x41300000 x44756ab0}} {{x41300000 x445e0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush17 512 catmullrom {cc {f 2080} {px x41300000 {x44794000 x44590000 x3d400000} {x4478c000 x4459c000 x3dc60002} {x44788000 x445a4000 x3d4c0003}}} {t {{x41300000 x4478d550}} {{x41300000 x4459aab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush16 512 catmullrom {cc {f 2080} {px x41300000 {x447b0000 x4455c000 x3c8ffff3} {x447a4000 x44578000 x3d5bfff6} {x44794000 x44588000 x3e4a0019}}} {t {{x41300000 x447a2ae1}} {{x41300000 x44574000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush15 512 catmullrom {cc {f 2080} {px x41300000 {x447d0000 x44538000 x3d0ffff3} {x447c8000 x44548000 x3d27fff9}}} {t {{x41300000 x447cc000}} {{x41300000 x44540000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush14 512 catmullrom {cc {f 2080} {px x41300000 {x449d0000 x441ec000 x3cf0000d} {x449d0000 x441fc000 x3e380022} {x449be000 x44234000 x3e45000d} {x449b8000 x44234000 x3e370004} {x449b8000 x44244000 x3e180022} {x449b4000 x44244000 x3ca7fff9} {x449b4000 x4424c000 0}}} {t {{x41300000 x449be948}} {{x41300000 x44229b75}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush13 512 catmullrom {cc {f 2080} {px x41300000 {x449dc000 x44210000 x3ccffff3} {x449e0000 x44218000 x3dd5ffe7} {x449d4000 x44254000 x3e21001d} {x449d4000 x44260000 x3dd1fff8} {x449d8000 x44278000 x3d93fffd} {x449d4000 x442a0000 x3e330015}}} {t {{x41300000 x449d8000}} {{x41300000 x44253550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush12 512 catmullrom {cc {f 2080} {px x41300000 {x44b3c000 x44624000 x3d0ffff3} {x44b38000 x44624000 x3de7ffde} {x44b32000 x4462c000 x3e4e0008} {x44b2e000 x44658000 x3e91fff8} {x44b2e000 x44668000 x3ed38002} {x44b2a000 x44674000 x3ede0008}}} {t {{x41300000 x44b32000}} {{x41300000 x44646ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ecccccd bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush11 512 catmullrom {cc {f 2080} {px x41300000 {x44c14000 x4447c000 x3d180007} {x44c0e000 x4448c000 x3e61fff8}}} {t {{x41300000 x44c11000}} {{x41300000 x44484000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush10 512 catmullrom {cc {f 2080} {px x41300000 {x44c20000 x4427c000 x3d07fff9} {x44c1c000 x4427c000 x3de3ffef} {x44c18000 x44284000 x3e47ffde} {x44c14000 x4428c000 x3e6a0019} {x44c14000 x4429c000 x3ea1800a}}} {t {{x41300000 x44c18ccd}} {{x41300000 x44287333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush9 512 catmullrom {cc {f 2080} {px x41300000 {x44e30000 x43d00000 x3d400000} {x44e30000 x43d58000 x3e8f0004} {x44e34000 x43d70000 x3e6effe3} {x44e3c000 x43da0000 x3e92fff3} {x44e3c000 x43da8000 x3e828006}}} {t {{x41300000 x44e3599a}} {{x41300000 x43d6999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush8 512 catmullrom {cc {f 2080} {px x41300000 {x44b00000 x43540000 x3cd80007} {x44afc000 x43530000 x3d27fff9} {x44ae6000 x43560000 x3e80fffc} {x44ade000 x435d0000 x3e98fffc} {x44ade000 x435f0000 x3eb8fffc} {x44adc000 x43610000 x3ebf0004} {x44ad0000 x43710000 x3ebe7ff6} {x44aba000 x43750000 x3ea8800f} {x44a9e000 x43838000 x3ea70004} {x44a9a000 x43850000 x3ea67ff6} {x44a90000 x438d8000 x3e90800f} {x44a90000 x438f0000 x3e470004} {x44a8c000 x43928000 x3e600000} {x44a88000 x43968000 x3d180007}}} {t {{x41300000 x44abedc3}} {{x41300000 x4378db64}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush7 512 catmullrom {cc {f 2080} {px x41300000 {x4429c000 x43b98000 x3d04000a} {x4429c000 x43ba8000 x3e01fff8} {x442e4000 x43c18000 x3e330015} {x44308000 x43c18000 x3e51fff8} {x442f8000 x43c28000 x3e5afff3} {x44300000 x43c98000 x3e5afff3} {x4430c000 x43cc8000 x3e5afff3} {x44300000 x43cc8000 x3e5e0008} {x442e8000 x43cd0000 x3e5e0008} {x442e4000 x43d28000 x3e51001d}}} {t {{x41300000 x442e5333}} {{x41300000 x43c5f333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush6 512 catmullrom {cc {f 2080} {px x41300000 {x44538000 x43a30000 x3ca7fff9} {x44538000 x43a40000 x3d1bfff6} {x44538000 x43a30000 x3eb8800f} {x44530000 x43a30000 x3e770004} {x44528000 x43a40000 x3e2afff3}}} {t {{x41300000 x44533333}} {{x41300000 x43a36666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush5 512 catmullrom {cc {f 2080} {px x41300000 {x44528000 x43e80000 x3c60001b} {x44528000 x43eb0000 x3e28fffc} {x44514000 x43f08000 x3ea9800a} {x4450c000 x43f08000 x3ebd000d} {x44504000 x43f10000 x3eb2fff3} {x444f0000 x43f78000 x3eb0fffc} {x444dc000 x43fb0000 x3eaf7ff1} {x444dc000 x43fc0000 x3e68fffc}}} {t {{x41300000 x44503800}} {{x41300000 x43f27000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush4 512 catmullrom {cc {f 2080} {px x41300000 {x44962000 x43fa0000 x3d64000a} {x44962000 x43fb0000 x3d87fff9} {x44950000 x44018000 x3e7afff3}}} {t {{x41300000 x4495c000}} {{x41300000 x43fd5560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush3 512 catmullrom {cc {f 2080} {px x41300000 {x4497a000 x43ee8000 x3d0c0003} {x44976000 x43ee8000 x3d33fffd} {x44968000 x43f98000 x3e3cffeb} {x44962000 x43fa0000 x3d64000a}}} {t {{x41300000 x4496e800}} {{x41300000 x43f42000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush2 512 catmullrom {cc {f 2080} {px x41300000 {x449f2000 x4415c000 x3d0ffff3} {x449f8000 x44148000 x3dd5ffe7} {x449e6000 x4417c000 x3eb80000} {x449dc000 x441a0000 x3ecb8002} {x449e2000 x44190000 x3e730015} {x449e2000 x441b4000 x3e33ffef} {x449dc000 x441c8000 x3e35000d} {x449d4000 x441d8000 x3e51001d} {x449c6000 x441f4000 x3d580007}}} {t {{x41300000 x449e0a8f}} {{x41300000 x4419f1cb}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {px x41300000 {x4485a000 x44460000 x3cc00000} {x4485a000 x44458000 x3d13fffd} {x4485e000 x44458000 x3d30000d} {x44850000 x44468000 x3ec70004} {x4483a000 x4448c000 x3f086003} {x44836000 x444a0000 x3f0a5ffa} {x4484c000 x44470000 x3f0b6007} {x44848000 x44468000 x3f0b9ffd} {x44836000 x44494000 x3f0d2008} {x4482c000 x444cc000 x3f0d2008} {x44832000 x444b0000 x3f0d2008} {x44820000 x444bc000 x3f0ddffc} {x44812000 x444e0000 x3f0ce001} {x4480e000 x44500000 x3f076007} {x44816000 x444f0000 x3ecc7ffe} {x447ec000 x4450c000 x3e6e0008} {x447d4000 x44528000 x3d99fffe}}} {t {{x41300000 x44830000}} {{x41300000 x444aa1db}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}}}}}} toolbox {selectAll { { selectAll bs 263 src 1 str 1 ssx 1 ssy 1 sf 1 ep1 15 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createOpenSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush opc 0.4 bs 133 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 11 ltm 11 ltt 0 tt 14 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur bs 263 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 11 ltm 11 ltt 0 tt 23 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 tt 21 } { smear bs 146 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 11 ltm 11 tt 22 } } } toolbar_brush_size 263 toolbar_brush_hardness 0.200000003 toolbar_lifetime_start 11 toolbar_lifetime_end 11 toolbar_effect_parameter1 15 toolbar_paint_source fg toolbar_source_transform_scale {1 1} toolbar_source_transform_center {960 540} colorOverlay {0 0 0 0} paint_source foreground lifetime_type "all frames" lifetime_start 39 lifetime_end 39 motionblur_on true brush_type smear brush_size 93 brush_spacing 0.05000000075 brush_hardness 0.200000003 effect_parameter1 1 source_translate_round false source_black_outside true name RotoPaint5 xpos 2100 ypos 14768 disable {{"parent.lensDirtPicker == 3 ? 0 : 1"}} } RotoPaint { cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 512} {t x44768000 x43fd0000} {a} {cubiccurve Smear35 512 catmullrom {cc {f 2080} {px x41300000 {x448dc000 x42b00000 x3e670004} {x448e4000 x42aa0000 x3e99fff8} {x448f2000 x42980000 x3e957ffa}}} {t {{x41300000 x448e6000}} {{x41300000 x42a60000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 ltt x40000000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear34 512 catmullrom {cc {f 2080} {px x41300000 {x4431c000 x43b98000 x3d5bfff6} {x44314000 x43b78000 x3e98fffc} {x4430c000 x43ae8000 x3ee57ffa} {x4431c000 x439f8000 x3f086003} {x4430c000 x438f0000 x3f0ea002} {x44308000 x438a8000 x3f11a006} {x44300000 x43828000 x3f11dffc} {x44300000 x43750000 x3f11dffc} {x442f8000 x43580000 x3f11a006} {x44300000 x43420000 x3f101ffb} {x44308000 x43270000 x3efa8006}}} {t {{x41300000 x44309d1f}} {{x41300000 x438aba3d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 ltt x40000000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear33 512 catmullrom {cc {f 2080} {px x41300000 {x441bc000 x44230000 x3cc00000} {x441e0000 x44244000 x3d380007} {x441e0000 x44254000 x3e9f0004} {x441d8000 x4427c000 x3ec00000} {x441c4000 x442a0000 x3ede7ff6} {x44150000 x442e8000 x3ef8fffc} {x4415c000 x4430c000 x3f09a006} {x441a0000 x44330000 x3f089ff9} {x441a4000 x44330000 0}}} {t {{x41300000 x441ab8e5}} {{x41300000 x442b0e35}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 ltt x40000000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear32 512 catmullrom {cc {f 2080} {px x41300000 {x44134000 x440f8000 x3d0c0003} {x44140000 x44100000 x3d380007} {x4412c000 x4412c000 x3eb0800f} {x4411c000 x44174000 x3f022004} {x4411c000 x441ac000 x3f092008} {x44114000 x441b4000 x3f0a2004}}} {t {{x41300000 x44127550}} {{x41300000 x44154000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 ltt x40000000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear31 512 catmullrom {cc {f 2080} {px x41300000 {x43ed8000 x44094000 x3d24000a} {x43ee8000 x4409c000 x3e18fffc} {x43e90000 x44110000 x3e78fffc} {x43df0000 x441ac000 x3f11a006} {x43d80000 x4420c000 x3f1be005} {x43c80000 x442c0000 x3f1ea002} {x43c08000 x442f8000 x3f209ff9} {x43bc0000 x4431c000 x3f1f9ffd}}} {t {{x41300000 x43d81000}} {{x41300000 x441d9800}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 ltt x40000000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear30 512 catmullrom {cc {f 2080} {px x41300000 {x4408c000 x43808000 x3d67fff9} {x44094000 x43808000 x3e91800a} {x440c8000 x43750000 x3eac7ffe} {x44100000 x43610000 x3f08e001} {x44150000 x43480000 x3f0f9ffd} {x441a0000 x43290000 x3f125ffa} {x441d0000 x43100000 x3f12a002} {x441d8000 x43090000 x3ef70004}}} {t {{x41300000 x44130000}} {{x41300000 x434c4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 ltt x40000000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear29 512 catmullrom {cc {f 2080} {px x41300000 {x43e20000 x43a30000 x3ce0001b} {x43e48000 x43a48000 x3d2c0003} {x43e90000 x43a40000 x3e9d7ffa} {x43ec8000 x439d8000 x3ef38002} {x43f50000 x43900000 x3f04e001} {x43f58000 x438d8000 x3f092008} {x43f98000 x43850000 x3f095ffe} {x43ff8000 x43770000 x3f0a5ffa} {x43ff8000 x43750000 x3d780007}}} {t {{x41300000 x43f1aaa0}} {{x41300000 x4391f1cb}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 ltt x40000000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Brush352 512 catmullrom {cc {f 2080} {px x41300000 {x44030000 x43948000 x3cc00000} {x44060000 x438f0000 x3d0ffff3} {x44068000 x438e0000 x3e0c0011} {x4409c000 x438b8000 x3e1c0011} {x4409c000 x43898000 x3e33ffef} {x440a8000 x437e0000 x3e35000d}}} {t {{x41300000 x44079550}} {{x41300000 x438b9560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush351 512 catmullrom {cc {f 2080} {px x41300000 {x43fe8000 x43780000 x3c60001b} {x43fe0000 x43710000 x3c6fffd8} {x43fe8000 x43650000 x3c6fffd8}}} {t {{x41300000 x43fe5560}} {{x41300000 x436f553f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush350 512 catmullrom {cc {f 2080} {px x41300000 {x43f08000 x43910000 x3c880014} {x43fc0000 x43850000 x3d000000}}} {t {{x41300000 x43f64000}} {{x41300000 x438b0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush349 512 catmullrom {cc {f 2080} {px x41300000 {x43fc0000 x43a90000 x3cb0000d} {x43f78000 x43ab0000 x3d0ffff3} {x43f20000 x43aa0000 x3e65000d} {x43f40000 x43a90000 x3e370004} {x43fb0000 x43a78000 x3e38fffc} {x43f98000 x43a68000 x3e6c0011} {x43f50000 x43a68000 x3e6c0011} {x43f30000 x43a48000 x3e770004} {x43f20000 x439e8000 x3e75ffe7} {x43f30000 x439a0000 x3e3e0008} {x43f30000 x43990000 0}}} {t {{x41300000 x43f5a2f2}} {{x41300000 x43a48000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush348 512 catmullrom {cc {f 2080} {px x41300000 {x43fe0000 x44014000 x3cf0000d} {x43fa0000 x44044000 x3d3bfff6} {x43f58000 x44080000 x3e7effe3} {x43f20000 x440a8000 x3db3fffd} {x43f08000 x440c0000 x3e3afff3} {x43eb0000 x440d4000 x3e877ff1} {x43e78000 x440f8000 x3e870004} {x43e20000 x4411c000 x3e870004} {x43e20000 x44134000 x3e55000d} {x43df0000 x44138000 x3e0effe3} {x43dd8000 x44134000 x3df5ffe7} {x43db8000 x44148000 x3dadfffb} {x43da0000 x4415c000 x3d8dfffb} {x43d90000 x44164000 x3e3a0019} {x43d18000 x44198000 x3e41fff8} {x43cc8000 x441d0000 x3e33ffef} {x43ca8000 x441e0000 x3c6fffd8} {x43c88000 x441f4000 0}}} {t {{x41300000 x43e1eaa0}} {{x41300000 x4411d1cb}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush347 512 catmullrom {cc {f 2080} {px x41300000 {x44258000 x43b68000 x3d000000} {x44268000 x43b08000 x3d27fff9} {x44268000 x43ad0000 x3e45000d} {x44260000 x43a40000 x3d960002}}} {t {{x41300000 x44262000}} {{x41300000 x43ae0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush346 512 catmullrom {cc {f 2080} {px x41300000 {x442b8000 x43a40000 x3cb7ffec} {x442b8000 x43a30000 x3cf0000d} {x442b0000 x439e8000 x3d1bfff6} {x442b0000 x439b0000 x3c400036}}} {t {{x41300000 x442b4000}} {{x41300000 x43a02000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush345 512 catmullrom {cc {f 2080} {px x41300000 {x4432c000 x43d80000 x3d44000a} {x44348000 x43c88000 x3e370004} {x44340000 x43c40000 x3e78fffc} {x44324000 x43be0000 x3e370004} {x4431c000 x43bb0000 x3e01001d} {x4430c000 x43b78000 x3d89fffe} {x44300000 x43b60000 x3c9fffe5}}} {t {{x41300000 x44324927}} {{x41300000 x43c1924e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush344 512 catmullrom {cc {f 2080} {px x41300000 {x44270000 x43c70000 x3cf0000d} {x4427c000 x43c38000 x3d400000} {x44284000 x43bf8000 x3d820005}}} {t {{x41300000 x4427aab0}} {{x41300000 x43c35560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush343 512 catmullrom {cc {f 2080} {px x41300000 {x44254000 x43d00000 x3d380007} {x44284000 x43cc8000 x3e2effe3} {x4428c000 x43cc8000 x3ea9fff8} {x44294000 x43cb8000 x3ea9800a} {x442a0000 x43cb8000 x3e928006} {x442a8000 x43c88000 x3e957ffa} {x44278000 x43c70000 x3e960008} {x44270000 x43c70000 x3b40000b}}} {t {{x41300000 x44285000}} {{x41300000 x43cad000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush342 512 catmullrom {cc {f 2080} {px x41300000 {x44190000 x43f10000 x3ca7fff9} {x441a0000 x43ef8000 x3cf0000d}}} {t {{x41300000 x44198000}} {{x41300000 x43f04000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush341 512 catmullrom {cc {f 2080} {px x41300000 {x440f8000 x4405c000 x3d000000} {x44114000 x44014000 x3d13fffd}}} {t {{x41300000 x44106000}} {{x41300000 x44038000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush340 512 catmullrom {cc {f 2080} {px x41300000 {x440f8000 x440e4000 x3cf0000d} {x440f8000 x440dc000 x3e870004} {x44100000 x440c0000 x3e89800a} {x44110000 x440c8000 x3e89800a} {x4411c000 x440c0000 x3eab8002} {x44114000 x44094000 x3eb9fff8} {x4411c000 x440a4000 x3eac7ffe} {x4412c000 x44080000 x3eae0008} {x44134000 x44078000 x3e98fffc} {x4412c000 x44070000 x3d83fffd} {x44124000 x44068000 x3d7bfff6}}} {t {{x41300000 x44116e87}} {{x41300000 x440a45d3}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush339 512 catmullrom {cc {f 2080} {px x41300000 {x441d8000 x44278000 x3d33fffd} {x441d0000 x44278000 x3e0a0019} {x441d0000 x4427c000 x3e900000} {x441c4000 x4428c000 x3ead000d}}} {t {{x41300000 x441cf000}} {{x41300000 x4427e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush338 512 catmullrom {cc {f 2080} {px x41300000 {x44138000 x4428c000 x3d04000a} {x44138000 x4429c000 x3d400000} {x44134000 x44294000 x3ef1fff8}}} {t {{x41300000 x44136ab0}} {{x41300000 x44294000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush337 512 catmullrom {cc {f 2080} {px x41300000 {x44108000 x441ac000 x3d53fffd} {x44108000 x441c8000 x3e800000}}} {t {{x41300000 x44108000}} {{x41300000 x441ba000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush336 512 catmullrom {cc {f 2080} {px x41300000 {x440ec000 x44148000 x3d1bfff6} {x440b8000 x44180000 x3e130015}}} {t {{x41300000 x440d2000}} {{x41300000 x44164000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush335 512 catmullrom {cc {f 2080} {px x41300000 {x44138000 x44100000 x3cf0000d} {x44138000 x44110000 x3e100000} {x44108000 x44110000 x3eac7ffe} {x44108000 x4411c000 x3ebc0011} {x44114000 x44138000 x3ecc0011} {x44100000 x44150000 x3ef00000} {x440c0000 x4415c000 x3ef47ffe} {x440b8000 x44158000 x3e78fffc}}} {t {{x41300000 x44101800}} {{x41300000 x4412f000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush334 512 catmullrom {cc {f 2080} {px x41300000 {x441fc000 x441e8000 x3d380007} {x441e0000 x4420c000 x3e6a0019} {x441d8000 x44218000 x3e6a0019} {x441c8000 x44218000 x3e8c0011}}} {t {{x41300000 x441df000}} {{x41300000 x44209000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush333 512 catmullrom {cc {f 2080} {px x41300000 {x44218000 x44138000 x3cc00000} {x44218000 x44140000 x3d0ffff3} {x44218000 x44180000 x3d27fff9}}} {t {{x41300000 x44218000}} {{x41300000 x44152ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush332 512 catmullrom {cc {f 2080} {px x41300000 {x4411c000 x440a4000 x3cd80007} {x4411c000 x440a8000 x3d0ffff3} {x44134000 x44094000 x3e8c7ffe} {x44150000 x44070000 x3e8d7ffa} {x44188000 x44028000 x3d900000} {x44198000 x4400c000 x3d87fff9} {x441b4000 x43fd0000 x3d99fffe} {x441c4000 x43fa0000 x3d70000d} {x441c8000 x43f68000 x3d33fffd}}} {t {{x41300000 x44174e35}} {{x41300000 x440371cb}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush331 512 catmullrom {cc {f 2080} {px x41300000 {x44038000 x43f40000 x3cb7ffec} {x44038000 x43f50000 x3d180007} {x44020000 x43fe0000 x3d380007} {x43fb0000 x4403c000 x3e8d7ffa}}} {t {{x41300000 x4401a000}} {{x41300000 x43fba000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush330 512 catmullrom {cc {f 2080} {px x41300000 {x44134000 x43a78000 x3d13fffd} {x44140000 x43a88000 x3d47fff9}}} {t {{x41300000 x4413a000}} {{x41300000 x43a80000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush329 512 catmullrom {cc {f 2080} {px x41300000 {x44020000 x43aa0000 x3d3bfff6} {x44028000 x43ac0000 x3d400000} {x4403c000 x43a90000 x3eac7ffe} {x44060000 x43a68000 x3eca8006} {x44094000 x43a30000 x3ecf0004} {x440a8000 x43a20000 x3ecb8002} {x440cc000 x43a30000 x3ec9fff8} {x440e4000 x43a30000 x3ec2fff3} {x44100000 x43a48000 x3eb38002} {x44110000 x43a48000 x3ea5000d} {x44114000 x43a58000 x3e90fffc}}} {t {{x41300000 x440a1d1f}} {{x41300000 x43a5ba3d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush328 512 catmullrom {cc {f 2080} {px x41300000 {x44020000 x43aa0000 x3d000000} {x44030000 x43ab0000 x3d1bfff6} {x44044000 x43a88000 x3e89fff8} {x44060000 x43a48000 x3e9e0008}}} {t {{x41300000 x4403d000}} {{x41300000 x43a88000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush327 512 catmullrom {cc {f 2080} {px x41300000 {x43fb0000 x44038000 x3d400000} {x43f98000 x44044000 x3d64000a}}} {t {{x41300000 x43fa4000}} {{x41300000 x4403e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush326 512 catmullrom {cc {f 2080} {px x41300000 {x43fe8000 x43fe8000 x3c6fffd8} {x43fd0000 x44038000 x3d1bfff6} {x43fb0000 x44030000 x3eae7ff6}}} {t {{x41300000 x43fcd560}} {{x41300000 x4401eab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush325 512 catmullrom {cc {f 2080} {px x41300000 {x440dc000 x43d18000 x3d07fff9} {x440dc000 x43d28000 x3dc00000} {x440cc000 x43d60000 x3e780022} {x44094000 x43e10000 x3eaf7ff1} {x44078000 x43e78000 x3eb67ff6} {x44044000 x43f10000 x3eb57ffa} {x44038000 x43f40000 x3e9e7ff6} {x44018000 x43f78000 x3e2e0008}}} {t {{x41300000 x44084800}} {{x41300000 x43e3e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush324 512 catmullrom {cc {f 2080} {px x41300000 {x44210000 x44138000 x3d1bfff6} {x44204000 x44158000 x3d33fffd} {x441fc000 x4417c000 x3e9afff3} {x441fc000 x44190000 x3c0ffffd}}} {t {{x41300000 x44203000}} {{x41300000 x44167000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush323 512 catmullrom {cc {f 2080} {px x41300000 {x44198000 x44028000 x3cf7ffec} {x441a0000 x44020000 x3d2c0003} {x441c4000 x43fc0000 x3e1c0011} {x441e8000 x43f40000 x3e4c0011} {x44218000 x43e78000 x3e38fffc} {x44228000 x43e38000 x3e65000d} {x44230000 x43df0000 x3e80800f} {x44230000 x43dd8000 x3e860008} {x4423c000 x43da8000 x3e8b8002} {x44244000 x43d80000 x3e88800f} {x4424c000 x43d58000 x3e880000} {x4424c000 x43d48000 x3e61001d} {x4423c000 x43d80000 x3d0c0003} {x4420c000 x43e20000 x3dea0019} {x441c4000 x43f58000 x3e41001d} {x441ac000 x43fa0000 x3e5afff3} {x44190000 x44014000 x3e6effe3} {x44180000 x44030000 x3e75ffe7} {x4416c000 x44044000 x3e7a0019} {x44158000 x4405c000 x3e80800f} {x44138000 x44080000 x3e7effe3} {x44134000 x4408c000 x3e81800a} {x4411c000 x440c0000 x3e80800f}}} {t {{x41300000 x441d0000}} {{x41300000 x43f35375}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush322 512 catmullrom {cc {f 2080} {px x41300000 {x44204000 x440b0000 x3d04000a} {x44218000 x440d4000 x3d27fff9} {x44210000 x440ec000 x3da7fff9} {x44210000 x440f0000 x3e4c0011} {x44204000 x4412c000 x3e4effe3} {x441fc000 x44140000 x3dc00000} {x441fc000 x44150000 x3dcc0003} {x441f4000 x44140000 x3e670004} {x4420c000 x44114000 x3e880000} {x4424c000 x44084000 x3e91fff8} {x44270000 x4403c000 x3ea1fff8} {x44284000 x44020000 x3ea9800a} {x4429c000 x43fe8000 x3ea8fffc} {x442a8000 x43fb0000 x3ea8800f} {x442b8000 x43f68000 x3eaa8006} {x442c4000 x43f30000 x3eaa8006} {x442dc000 x43ed8000 x3eaf7ff1} {x442e8000 x43ec0000 x3eb0fffc} {x442f8000 x43e80000 x3eb0fffc} {x44300000 x43e68000 x3e81fff8} {x4431c000 x43df0000 x3dddffc5} {x44330000 x43d90000 x3d4c0003} {x44340000 x43d58000 x3cc00000}}} {t {{x41300000 x44280000}} {{x41300000 x44022429}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush321 512 catmullrom {cc {f 2080} {px x41300000 {x4420c000 x44080000 x3c980007} {x44204000 x4408c000 x3d0ffff3}}} {t {{x41300000 x44208000}} {{x41300000 x44086000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush320 512 catmullrom {cc {f 2080} {px x41300000 {x441a4000 x43fc0000 x3cc80014} {x441e8000 x43ff8000 x3d180007} {x44220000 x44014000 x3ebb8002} {x44228000 x44014000 x3eb8800f} {x44230000 x44018000 x3ea38002} {x44230000 x44020000 x3dcfffbd} {x44234000 x44030000 x3d99fffe}}} {t {{x41300000 x4420edb2}} {{x41300000 x4400f6d9}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush319 512 catmullrom {cc {f 2080} {px x41300000 {x4409c000 x43de8000 x3c9fffe5} {x4408c000 x43e48000 x3cf7ffec} {x44084000 x43e80000 x3d800000}}} {t {{x41300000 x4408eab0}} {{x41300000 x43e3aaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush318 512 catmullrom {cc {f 2080} {px x41300000 {x4404c000 x43a40000 x3d07fff9} {x440ec000 x43a78000 x3d47fff9}}} {t {{x41300000 x4409c000}} {{x41300000 x43a5c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush317 512 catmullrom {cc {f 2080} {px x41300000 {x4404c000 x43f20000 x3c980007} {x440c0000 x43da0000 x3d27fff9} {x440f0000 x43ce0000 x3ec0fffc} {x440f8000 x43ca8000 x3ed9fff8} {x44110000 x43c40000 x3edc0011} {x4411c000 x43bf8000 x3edc7ffe} {x4412c000 x43ba8000 x3edd000d} {x4412c000 x43b78000 x3edf7ff1} {x44134000 x43b30000 x3ee1fff8} {x44138000 x43b08000 x3ee28006} {x44138000 x43ac0000 x3ee3ffef} {x44124000 x43aa0000 x3ee67ff6} {x44108000 x43a88000 x3ee8800f} {x440f0000 x43a68000 x3ee3ffef} {x440b8000 x43a48000 x3ecf7ff1} {x440a4000 x43a48000 x3c9fffe5}}} {t {{x41300000 x440f93f8}} {{x41300000 x43bab810}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3ec7ae14 g x3ec7ae14 b x3ec7ae14 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush316 512 catmullrom {cc {f 2080} {px x41300000 {x44198000 x43fa0000 x3cf7ffec} {x44190000 x43fb0000 x3d1bfff6} {x441a4000 x43fd0000 x3ec2fff3} {x44230000 x44030000 x3edc0011} {x44218000 x44018000 x3ee9fff8} {x441f4000 x44004000 x3eeafff3} {x441e0000 x43ff8000 x3ee9fff8} {x441d8000 x43fe8000 x3eea8006} {x441ec000 x4400c000 x3eea8006} {x44230000 x44038000 x3ef3ffef} {x4424c000 x44044000 x3ef80000} {x4424c000 x4405c000 x3ef9fff8} {x44244000 x4408c000 x3efc0011} {x44228000 x440e4000 x3efd7ffa} {x44220000 x4411c000 x3eff7ff1} {x44220000 x44140000 x3eff7ff1} {x44218000 x44140000 x3f00e001} {x44218000 x44164000 x3f006003} {x4420c000 x44198000 x3f006003} {x441f4000 x441e8000 x3f006003} {x441f4000 x441d8000 x3f031fff} {x44220000 x44138000 x3f025ffa} {x44254000 x44084000 x3f049ff9} {x4428c000 x43fd0000 x3f04e001} {x44294000 x43fa0000 x3f046003} {x442a0000 x43f58000 x3f041ffb} {x442a8000 x43f50000 x3f036007} {x442b0000 x43f30000 x3f036007} {x442c0000 x43ee8000 x3f036007} {x442c4000 x43ec8000 x3f01dffc} {x442dc000 x43e78000 x3efc0011} {x442e4000 x43e58000 x3eed000d} {x442f0000 x43e30000 x3eed000d} {x442f0000 x43e20000 x3edafff3} {x442f8000 x43e00000 x3eda8006} {x44314000 x43da0000 x3ed3ffef} {x4431c000 x43d70000 x3ed1fff8} {x4431c000 x43d60000 x3df80022}}} {t {{x41300000 x442590d5}} {{x41300000 x440175e3}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3df5c28f g x3df5c28f b x3df5c28f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush315 512 catmullrom {cc {f 2080} {px x41300000 {x440c8000 x440ec000 x3cd80007} {x440c0000 x440f8000 x3d0ffff3} {x440f8000 x44084000 x3eaf0004} {x44134000 x44028000 x3eb3ffef} {x44190000 x43ef8000 x3ecf0004} {x441ac000 x43e78000 x3ee28006} {x441c8000 x43df0000 x3ee3ffef} {x441c8000 x43de8000 x3ee70004} {x441d0000 x43db8000 x3ee70004} {x441c8000 x43dd8000 x3ee60008} {x441a0000 x43e80000 x3ee80000} {x4417c000 x43f40000 x3ee8800f} {x44138000 x44030000 x3ee9800a} {x44110000 x44084000 x3ee9fff8} {x440dc000 x440f0000 x3ee9800a} {x440cc000 x44110000 x3ee9800a} {x440d4000 x4411c000 x3ee80000} {x440e4000 x440f8000 x3ee8800f} {x44134000 x4404c000 x3ee8800f} {x4416c000 x43fc0000 x3eed000d} {x441c4000 x43e48000 x3ef5000d} {x441d8000 x43db8000 x3f00e001} {x441e8000 x43d70000 x3f01a006} {x441d8000 x43da0000 x3f025ffa} {x44180000 x43ee8000 x3f02a002} {x44138000 x4400c000 x3f02dff8} {x440dc000 x440e4000 x3f02dff8} {x440c8000 x44110000 x3f031fff} {x440c8000 x44108000 x3f03e005} {x440e4000 x440d4000 x3f036007} {x44150000 x43ff8000 x3f036007} {x44198000 x43f10000 x3f055ffe} {x441d0000 x43e48000 x3f055ffe} {x441c4000 x43e58000 x3da7fff9}}} {t {{x41300000 x44155873}} {{x41300000 x43fda1ec}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3df5c28f g x3df5c28f b x3df5c28f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush314 512 catmullrom {cc {f 2080} {px x41300000 {x440cc000 x440c8000 x3cc00000} {x441d8000 x43d60000 x3d07fff9} {x441d0000 x43d90000 x3ef38002} {x441bc000 x43db8000 x3edf7ff1} {x441b4000 x43dc8000 x3d980007}}} {t {{x41300000 x44194000}} {{x41300000 x43e66666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3df5c28f g x3df5c28f b x3df5c28f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush313 512 catmullrom {cc {f 2080} {px x41300000 {x43fa0000 x43b40000 x3c9fffe5} {x440b0000 x43a10000 x3d13fffd} {x4412c000 x43a48000 x3eb0fffc} {x44138000 x43ad0000 x3ed38002} {x44110000 x43bb0000 x3ed70004} {x440ec000 x43c18000 x3ee9800a} {x440ec000 x43c28000 x3ef0fffc} {x440f8000 x43bf0000 x3ef0fffc} {x440f8000 x43ba8000 x3ef60008} {x440f8000 x43b68000 x3eef7ff1} {x440f8000 x43b88000 x3eee7ff6} {x440ec000 x43c28000 x3ef60008} {x440e4000 x43c70000 x3efafff3} {x440c8000 x43d18000 x3efa8006} {x440b0000 x43d60000 x3efa8006} {x44084000 x43de8000 x3ef77ff1} {x44078000 x43e30000 x3ee0fffc} {x44054000 x43eb0000 x3ed1fff8} {x44044000 x43ee8000 x3ebd000d} {x44018000 x43fd0000 x3eb28006} {x44004000 x44018000 x3e9f7ff1} {x43fe0000 x44044000 x3d860002}}} {t {{x41300000 x440a9a2d}} {{x41300000 x43cd345a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3df5c28f g x3df5c28f b x3df5c28f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush312 512 catmullrom {cc {f 2080} {px x41300000 {x4405c000 x43f30000 x3cf0000d} {x44044000 x43ed8000 x3d1bfff6} {x44038000 x43f20000 x3e88800f} {x4403c000 x43f50000 x3ea60008} {x44054000 x43f08000 x3eb2fff3} {x4409c000 x43e00000 x3eb9fff8} {x440b8000 x43d80000 x3e980000} {x440cc000 x43d10000 x3e960008} {x440ec000 x43c70000 x3e93ffef} {x440f0000 x43c18000 x3e947ffe} {x44110000 x43bb0000 x3e967ff6} {x44108000 x43b78000 x3ea1800a} {x440f8000 x43b18000 x3ea8800f} {x440ec000 x43ab0000 x3eb3ffef} {x440e4000 x43a48000 x3ec0fffc} {x440d4000 x43a20000 x3ecc0011} {x440a4000 x43a10000 x3ed3ffef} {x44068000 x43a40000 x3eeafff3} {x4400c000 x43a90000 x3eee0008} {x44004000 x43aa0000 x3eee7ff6} {x4403c000 x43a58000 x3ee8fffc} {x4404c000 x43a40000 x3ed8fffc} {x4403c000 x43a78000 x3ed77ff1} {x43fe8000 x43ac0000 x3ed9fff8} {x43f68000 x43af8000 x3eda8006} {x43f58000 x43af8000 x3ed77ff1} {x43f88000 x43b08000 x3ed1fff8} {x43f98000 x43b18000 x3ecc7ffe} {x43f68000 x43ae8000 x3ebe7ff6} {x43f58000 x43af8000 x3eb0fffc} {x43f58000 x43b20000 x3eb00000} {x43f78000 x43b20000 x3ea0fffc} {x43f68000 x43b20000 x3df5ffe7} {x43f68000 x43b30000 0}}} {t {{x41300000 x4404ba5e}} {{x41300000 x43bc1e14}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3df5c28f g x3df5c28f b x3df5c28f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush311 512 catmullrom {cc {f 2080} {px x41300000 {x4404c000 x43f40000 x3ca7fff9} {x44060000 x43f08000 x3d180007} {x4408c000 x43e38000 x3e2effe3} {x440b0000 x43d90000 x3e80800f} {x440c8000 x43d48000 x3e828006} {x440c0000 x43d38000 x3e870004} {x440c8000 x43cc8000 x3e88800f} {x440cc000 x43c88000 x3e81fff8} {x440e4000 x43c38000 x3e730015} {x440ec000 x43c08000 x3e4e0008} {x440f8000 x43b98000 x3e55ffe7} {x440f8000 x43b60000 x3e7a0019} {x44100000 x43b20000 x3e8a8006} {x44100000 x43af8000 x3ea0800f} {x44100000 x43aa0000 x3ead7ffa} {x440f0000 x43a68000 x3ec28006} {x440a8000 x43a58000 x3ed67ff6} {x44084000 x43a68000 x3ee57ffa} {x44054000 x43a90000 x3eec7ffe} {x4404c000 x43ac0000 x3eed000d} {x44038000 x43b18000 x3eed000d} {x44030000 x43b20000 x3eed7ffa} {x44054000 x43ae8000 x3eed000d} {x44078000 x43aa0000 x3eed000d} {x440c0000 x43a58000 x3eed000d} {x440d4000 x43a58000 x3eed000d} {x44108000 x43a88000 x3eed000d} {x44114000 x43ad0000 x3eed000d} {x44108000 x43b50000 x3eec7ffe} {x440f0000 x43ba8000 x3ee9800a} {x440ec000 x43c18000 x3ee2fff3} {x440ec000 x43c38000 x3ebd000d} {x440ec000 x43cc8000 x3ea28006} {x440d4000 x43d00000 x3e580022} {x440a8000 x43d90000 x3e5afff3} {x440a4000 x43dc8000 x3e65000d} {x4408c000 x43e00000 x3e7afff3} {x44080000 x43e48000 x3e8e0008} {x44080000 x43e68000 x3e8d7ffa} {x44078000 x43e68000 x3e92fff3} {x44080000 x43eb0000 x3e91fff8} {x44084000 x43ec8000 x3e8e0008} {x44080000 x43ec8000 x3e8e7ff6} {x44080000 x43ed8000 x3ddc0011} {x44078000 x43f08000 x3df9ffd6} {x44078000 x43f10000 x3dfc0011} {x44060000 x43f10000 x3da20005}}} {t {{x41300000 x440ac158}} {{x41300000 x43c8c979}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3df5c28f g x3df5c28f b x3df5c28f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush310 512 catmullrom {cc {f 2080} {px x41300000 {x42e00000 x44110000 x3cc00000} {x42ee0000 x44014000 x3ce0001b}}} {t {{x41300000 x42e70000}} {{x41300000 x44092000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush309 512 catmullrom {cc {f 2080} {px x41300000 {x43050000 x441d0000 x3cf0000d} {x430b0000 x44164000 x3d180007}}} {t {{x41300000 x43080000}} {{x41300000 x4419a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush308 512 catmullrom {cc {f 2080} {px x41300000 {x42aa0000 x44434000 x3c800000} {x42dc0000 x442e8000 x3d04000a}}} {t {{x41300000 x42c30000}} {{x41300000 x4438e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush307 512 catmullrom {cc {f 2080} {px x41300000 {x42680000 x446a0000 x3c800000} {x42860000 x445d8000 x3d000000} {x42900000 x44588000 x3e2e0008} {x42900000 x44590000 x3e23ffef} {x42940000 x444d4000 x3e2e0008} {x429a0000 x44494000 x3d400000}}} {t {{x41300000 x428c0000}} {{x41300000 x4457eab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush306 512 catmullrom {cc {f 2080} {px x41300000 {x43bf8000 x447b0000 x3d27fff9} {x43c08000 x447c8000 x3e2a0019} {x43bf0000 x447c8000 0}}} {t {{x41300000 x43bfaaa0}} {{x41300000 x447c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush305 512 catmullrom {cc {f 2080} {px x41300000 {x43630000 x4470c000 x3cc00000} {x43610000 x44730000 x3d30000d} {x435d0000 x4474c000 x3e1cffeb} {x434d0000 x447e4000 x3e4afff3}}} {t {{x41300000 x435b8000}} {{x41300000 x4475b000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush304 512 catmullrom {cc {f 2080} {px x41300000 {x438d8000 x44674000 x3cc00000} {x438d8000 x4466c000 x3d24000a} {x438a8000 x446b0000 x3e25000d} {x438b8000 x445fc000 x3eb9fff8} {x43938000 x44514000 x3ee70004} {x439c8000 x443d8000 x3ee8800f} {x43a30000 x44330000 x3ee8fffc} {x43a78000 x4429c000 x3ee8800f} {x43a88000 x44278000 x3ebf7ff1} {x43a90000 x44260000 x3c980007}}} {t {{x41300000 x43994ccd}} {{x41300000 x44482ccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush303 512 catmullrom {cc {f 2080} {px x41300000 {x43818000 x444a8000 x3c8ffff3} {x43828000 x444a8000 x3d27fff9} {x43928000 x4439c000 x3df00043} {x43958000 x44364000 x3e947ffe} {x43980000 x443c0000 x3e99fff8} {x43a00000 x444d4000 x3eb00000} {x43a20000 x44514000 x3ec77ff1} {x43a20000 x4451c000 x3ecd7ffa} {x439e8000 x44540000 x3eb1800a} {x43958000 x44620000 x3eaf7ff1} {x43948000 x44668000 x3eb3ffef} {x43938000 x44714000 x3eab8002} {x43920000 x44738000 x3d860002}}} {t {{x41300000 x4395626f}} {{x41300000 x4452a75c}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush302 512 catmullrom {cc {f 2080} {px x41300000 {x44dc4000 x42bc0000 x3d47fff9} {x44e58000 x42860000 x3e1afff3} {x44e58000 x42440000 x3ec8fffc}}} {t {{x41300000 x44e26a8f}} {{x41300000 x428c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush301 512 catmullrom {cc {f 2080} {px x41300000 {x44cfa000 x430c0000 x3d4c0003} {x44d60000 x42d80000 x3e330015} {x44d78000 x42ca0000 x3d33fffd}}} {t {{x41300000 x44d46000}} {{x41300000 x42e8aa7f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush300 512 catmullrom {cc {f 2080} {px x41300000 {x4499e000 x40800000 x3d4ffff3} {x449e6000 xc0000000 x3d64000a}}} {t {{x41300000 x449c2000}} {{x41300000 1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush299 512 catmullrom {cc {f 2080} {px x41300000 {x44800000 x42ce0000 x3df40032} {x448e0000 x42080000 x3e58fffc}}} {t {{x41300000 x44870000}} {{x41300000 x42890000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush298 512 catmullrom {cc {f 2080} {px x41300000 {x44684000 x42440000 x3d70000d} {x446b4000 x42aa0000 x3e11fff8} {x446a0000 x42be0000 x3eba8006} {x44698000 x42ce0000 x3ee9800a} {x4466c000 x430b0000 x3ee9fff8} {x4466c000 x430e0000 x3ee9fff8} {x44690000 x43100000 x3ede7ff6}}} {t {{x41300000 x4468c927}} {{x41300000 x42d84937}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush297 512 catmullrom {cc {f 2080} {px x41300000 {x44404000 x42180000 x3ccffff3} {x44434000 x41500000 x3dfc0011} {x44420000 xc1800000 x3edf7ff1} {x4444c000 xc0800000 x3ee0800f} {x44498000 xc1500000 x3edf7ff1} {x4451c000 xc2080000 x3ee0fffc}}} {t {{x41300000 x44464000}} {{x41300000 xc02aaab9}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush296 512 catmullrom {cc {f 2080} {px x41300000 {x44340000 x434a0000 x3d07fff9} {x442dc000 x42900000 x3d180007} {x442c4000 x427c0000 x3e0a0019} {x44284000 x42000000 x3e100000} {x4427c000 x41b00000 x3dd1fff8}}} {t {{x41300000 x442c6666}} {{x41300000 x429c6666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush295 512 catmullrom {cc {f 2080} {px x41300000 {x44410000 x43510000 x3d53fffd} {x44364000 x43070000 x3d33fffd} {x4435c000 x43070000 x3df00043} {x44354000 x43140000 x3d8c0003}}} {t {{x41300000 x44389000}} {{x41300000 x431cc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush294 512 catmullrom {cc {f 2080} {px x41300000 {x4447c000 x439c8000 x3cd80007} {x44484000 x43968000 x3d2c0003} {x4447c000 x43958000 x3e4e0008} {x44460000 x438e0000 x3e4e0008} {x44450000 x438d8000 0}}} {t {{x41300000 x4446f333}} {{x41300000 x43940000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush293 512 catmullrom {cc {f 2080} {px x41300000 {x443d0000 x43c50000 x3cd80007} {x443d0000 x43bc0000 x3d0ffff3} {x443bc000 x43ba8000 x3e6cffeb} {x4439c000 x43b18000 x3e92fff3} {x4439c000 x43b60000 x3e900000} {x44388000 x43b78000 x3e5afff3} {x44374000 x43b50000 x3e91800a} {x44338000 x43ae8000 x3e9a8006} {x44330000 x43b08000 x3e9d000d} {x44348000 x43ca8000 x3e9b8002} {x4435c000 x43d48000 x3e9a8006} {x44354000 x43cc8000 x3ea00000} {x44330000 x43c70000 x3ea77ff1} {x4432c000 x43c88000 x3eac0011} {x44330000 x43d00000 x3eaa8006} {x442e4000 x43b20000 x3eac0011} {x442b0000 x439c8000 x3e7afff3} {x4424c000 x43880000 x3e330015}}} {t {{x41300000 x4434c396}} {{x41300000 x43b9c72b}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush292 512 catmullrom {cc {f 2080} {px x41300000 {x4442c000 x440b0000 x3d4c0003} {x443ec000 x44158000 x3e03ffef} {x443e4000 x4416c000 x3ea1800a} {x443d0000 x44188000 x3e947ffe}}} {t {{x41300000 x443f3000}} {{x41300000 x4413f000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush291 512 catmullrom {cc {f 2080} {px x41300000 {x444d4000 x43f78000 x3c880014} {x444d4000 x43f58000 x3df00043} {x444b8000 x43f30000 x3e7afff3} {x444c4000 x43f68000 x3e8e0008} {x444c4000 x43f88000 x3e960008} {x444c4000 x43ef8000 x3eb1800a} {x444d4000 x43ee8000 x3eb00000} {x444dc000 x43ee8000 x3eb0fffc} {x444e8000 x43ed8000 x3e9f0004} {x444e0000 x43ec8000 x3df00043} {x444e0000 x43e90000 x3e61001d} {x444e0000 x43e80000 x3e8c7ffe} {x444dc000 x43e80000 x3ecc0011} {x444e0000 x43ee8000 x3ecd7ffa} {x444e8000 x43f08000 x3ed1800a} {x4450c000 x43f20000 x3ed1fff8} {x44504000 x43f40000 x3edafff3} {x444f0000 x43f78000 x3ee2fff3} {x444e0000 x43fd0000 x3ee3ffef} {x444dc000 x43f98000 x3ee67ff6} {x444e8000 x43f68000 x3ee77ff1} {x444e8000 x43f78000 x3ee67ff6} {x444bc000 x43fc0000 x3ed67ff6} {x444a8000 x43fe0000 x3d53fffd}}} {t {{x41300000 x444da550}} {{x41300000 x43f31000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush290 512 catmullrom {cc {f 2080} {px x41300000 {x44b0e000 x442dc000 x3d000000} {x44acc000 x44380000 x3e51001d}}} {t {{x41300000 x44aed000}} {{x41300000 x4432e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush289 512 catmullrom {cc {f 2080} {px x41300000 {x44ab0000 x441e0000 x3d0c0003} {x44ab0000 x441ec000 x3d1bfff6} {x44ab0000 x44218000 x3d44000a} {x44abe000 x44260000 x3e030015}}} {t {{x41300000 x44ab3800}} {{x41300000 x44211000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush288 512 catmullrom {cc {f 2080} {px x41300000 {x449d8000 x43e80000 x3e8b8002} {x449b8000 x43da0000 x3ea8800f} {x44a18000 x43da0000 x3ed47ffe} {x44a4e000 x43d18000 x3ebf0004} {x44ab4000 x43ca8000 x3e95000d} {x44ab8000 x43c88000 x3ed57ffa} {x44abe000 x43bf8000 x3eda8006} {x44acc000 x43bf8000 x3cf0000d} {x44ad8000 x43b88000 x3e7c0011} {x44af4000 x43b30000 x3eb9800a} {x44af8000 x43b20000 0}}} {t {{x41300000 x44a845c3}} {{x41300000 x43c8745a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush287 512 catmullrom {cc {f 2080} {px x41300000 {x44c4a000 x4462c000 x3d04000a} {x44c46000 x44668000 0}}} {t {{x41300000 x44c48000}} {{x41300000 x4464a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush286 512 catmullrom {cc {f 2080} {px x41300000 {x44c8c000 x442e8000 x3d64000a} {x44ca4000 x44398000 x3d8dfffb}}} {t {{x41300000 x44c98000}} {{x41300000 x44340000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush285 512 catmullrom {cc {f 2080} {px x41300000 {x44e1a000 x444f0000 x3d27fff9} {x44e30000 x4455c000 x3dfdffc5} {x44e30000 x4459c000 x3ea38002} {x44e8a000 x44650000 x3eae0008} {x44e92000 x4467c000 x3e860008} {x44ed6000 x446fc000 x3df5ffe7} {x44ebc000 x446d8000 x3e4c0011}}} {t {{x41300000 x44e736b8}} {{x41300000 x446136d9}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush284 512 catmullrom {cc {f 2080} {px x41300000 {x44f16000 x43d18000 x3d180007} {x44efe000 x43d00000 x3d5bfff6}}} {t {{x41300000 x44f0a000}} {{x41300000 x43d0c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush283 512 catmullrom {cc {f 2080} {px x41300000 {x44f22000 x43340000 x3d07fff9} {x44f30000 x43260000 x3d30000d}}} {t {{x41300000 x44f29000}} {{x41300000 x432d0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush282 512 catmullrom {cc {f 2080} {px x41300000 {x44ef6000 x43710000 x3cd80007} {x44f02000 x43610000 x3d2c0003}}} {t {{x41300000 x44efc000}} {{x41300000 x43690000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush281 512 catmullrom {cc {f 2080} {px x41300000 {x44eb6000 x43910000 x3ce0001b} {x44ece000 x43818000 x3d580007}}} {t {{x41300000 x44ec2000}} {{x41300000 x43894000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush280 512 catmullrom {cc {f 2080} {px x41300000 {x44e6e000 x43bc0000 x3d200000} {x44e72000 x43bc0000 x3e100000} {x44e80000 x43b60000 x3e500000} {x44e9c000 x439e8000 x3e88fffc} {x44ea0000 x439a0000 0}}} {t {{x41300000 x44e8599a}} {{x41300000 x43ae199a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush279 512 catmullrom {cc {f 2080} {px x41300000 {x44bf8000 x433b0000 x3d1bfff6} {x44bda000 x43290000 x3d7bfff6} {x44c06000 x42d40000 x3d180007} {x44c02000 x426c0000 x3e23ffef} {x44c10000 x42240000 x3d70000d}}} {t {{x41300000 x44bfb99a}} {{x41300000 x42e0cccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush278 512 catmullrom {cc {f 2080} {px x41300000 {x44bb6000 x43980000 x3c800000} {x44bba000 x43818000 x3d44000a}}} {t {{x41300000 x44bb8000}} {{x41300000 x438cc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush277 512 catmullrom {cc {f 2080} {px x41300000 {x44b9a000 x43f58000 x3d33fffd} {x44b90000 x43fe0000 x3dfdffc5} {x44b90000 x43fb0000 x3e600000} {x44bac000 x43b50000 x3e670004} {x44bb4000 x43a78000 x3c400036}}} {t {{x41300000 x44b9eccd}} {{x41300000 x43dbcccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush276 512 catmullrom {cc {f 2080} {px x41300000 {x44d4e000 x435c0000 x3d1bfff6} {x44ce2000 x439b0000 x3dadfffb} {x44cba000 x43ba8000 x3e8c7ffe} {x44cba000 x43bc0000 x3e25ffe7} {x44c8c000 x43c38000 x3cc80014}}} {t {{x41300000 x44cd6666}} {{x41300000 x43a70000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush275 512 catmullrom {cc {f 2080} {px x41300000 {x43780000 x43100000 x3d1bfff6} {x43710000 x43220000 x3d27fff9} {x43968000 x429e0000 x3e6a0019} {x43980000 x42580000 x3e970004} {x43848000 x42a60000 x3ea28006} {x438d8000 x42820000 x3ec00000} {x43968000 x41b00000 x3ec2fff3} {x438d8000 x41c80000 x3ec70004} {x436f0000 x422c0000 x3ec1fff8} {x43770000 x42000000 x3ebe7ff6} {x43770000 x41300000 x3eb80000} {x43680000 x41300000 x3eb8fffc} {x43440000 x41c80000 x3eb8800f} {x43580000 x41300000 x3eb8800f} {x437e0000 xc2100000 x3eb70004} {x437e0000 xc1f80000 x3eb38002} {x43970000 xc1800000 x3e91800a} {x43ae8000 xc1600000 x3d7bfff6} {x43b60000 xc1b00000 x3d67fff9} {x43c08000 xc2340000 x3e8f7ff1} {x43cb8000 xc27c0000 x3e880000}}} {t {{x41300000 x438ce7ae}} {{x41300000 x41cdb6e3}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush274 512 catmullrom {cc {f 2080} {px x41300000 {x43f08000 x43ef8000 x3d2c0003} {x44100000 x43770000 x3e4c0011}}} {t {{x41300000 x44042000}} {{x41300000 x43b58000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush273 512 catmullrom {cc {f 2080} {px x41300000 {x43d38000 x4404c000 x3c60001b} {x43d48000 x44020000 x3d0ffff3} {x43d58000 x44014000 x3df00043} {x43c98000 x440c0000 x3df5ffe7} {x43bf8000 x44138000 x3e700000} {x43c40000 x44110000 x3e980000} {x43bf0000 x44150000 x3e960008} {x43ba8000 x4417c000 x3ea3ffef} {x43c80000 x440f8000 x3eb57ffa} {x43d48000 x4409c000 x3eb67ff6} {x43c28000 x4411c000 x3eb70004} {x43bc0000 x44150000 x3e99800a} {x43bd0000 x44140000 x3c980007}}} {t {{x41300000 x43c713b6}} {{x41300000 x440e4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush272 512 catmullrom {cc {f 2080} {px x41300000 {x43fa0000 x43c80000 x3ca7fff9} {x43d80000 x4408c000 x3d27fff9} {x43d58000 x44084000 x3e01fff8} {x43d48000 x44080000 x3e100000} {x43cf0000 x440a4000 x3e400000} {x43d28000 x44054000 x3e3afff3}}} {t {{x41300000 x43da4000}} {{x41300000 x44021550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush271 512 catmullrom {cc {f 2080} {px x41300000 {x44030000 x43ce0000 x3cf0000d} {x44078000 x43ac0000 x3d47fff9}}} {t {{x41300000 x44054000}} {{x41300000 x43bd0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush270 512 catmullrom {cc {f 2080} {px x41300000 {x43f08000 x43f68000 x3d13fffd} {x43f08000 x43fe0000 x3da00000} {x43fd0000 x43e10000 x3e89fff8} {x44038000 x43d00000 x3dd5ffe7}}} {t {{x41300000 x43f94000}} {{x41300000 x43e96000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush269 512 catmullrom {cc {f 2080} {px x41300000 {x43de8000 x447b0000 x3d1bfff6} {x43df0000 x44778000 x3d380007} {x43dc8000 x44668000 x3e35ffe7} {x43da8000 x445fc000 x3ea0fffc} {x43da8000 x445dc000 x3e9d7ffa} {x43d80000 x445ac000 x3e55000d} {x43d70000 x444cc000 x3e630015} {x43d80000 x4448c000 x3e68fffc} {x43dd8000 x44428000 x3e500000} {x43e00000 x44398000 x3e51fff8} {x43de8000 x442f0000 x3e6e0008} {x43df0000 x442cc000 x3e7effe3} {x43e10000 x44260000 x3e800000} {x43e48000 x44190000 x3e80fffc} {x43e78000 x44114000 x3e5a0019}}} {t {{x41300000 x43ddbbc7}} {{x41300000 x4447621d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush268 512 catmullrom {cc {f 2080} {px x41300000 {x4471c000 x443d0000 x3d1bfff6} {x446f8000 x44410000 x3db3fffd} {x446b4000 x4447c000 x3e9f0004}}} {t {{x41300000 x446ed550}} {{x41300000 x4441eab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush267 512 catmullrom {cc {f 2080} {px x41300000 {x4474c000 x44648000 x3d2c0003} {x44764000 x44650000 x3d580007} {x44788000 x44650000 x3e48fffc} {x44754000 x445b4000 x3eb0fffc} {x44768000 x445d0000 x3e8f7ff1} {x44738000 x445dc000 x3e880000} {x4471c000 x445c8000 x3e8c0011} {x446e8000 x44620000 x3e91800a} {x446b4000 x44644000 x3ea8800f} {x446bc000 x44608000 x3eac0011} {x446cc000 x445d8000 x3ea77ff1} {x446cc000 x4459c000 x3ea2fff3} {x446d4000 x4454c000 x3d900000} {x44738000 x444a0000 x3e0cffeb} {x4475c000 x44484000 x3dee0008} {x447a4000 x44444000 x3e03ffef} {x4478c000 x44408000 x3eb3ffef}}} {t {{x41300000 x4472a5a2}} {{x41300000 x44591a5e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush266 512 catmullrom {cc {f 2080} {px x41300000 {x4492e000 x444b8000 x3d44000a} {x44936000 x444bc000 x3e7c0011} {x4493a000 x444c4000 x3ec38002} {x44950000 x444d4000 x3edc7ffe} {x44948000 x444f0000 x3f052008} {x4494c000 x4451c000 x3f04e001} {x44964000 x44564000 x3f049ff9} {x44956000 x44514000 x3f092008} {x44948000 x44530000 x3f0a2004} {x44936000 x4459c000 x3f092008} {x44928000 x445ec000 x3f092008} {x44928000 x445e4000 x3f07e005} {x44920000 x445e4000 x3f065ffa} {x44920000 x44618000 x3f07e005} {x4490e000 x44620000 x3f0a2004} {x44900000 x445d0000 x3f101ffb} {x448f6000 x44514000 x3f112008} {x448f6000 x4451c000 x3f125ffa} {x448f6000 x44564000 x3f11a006} {x448fc000 x44500000 x3f112008} {x44908000 x4444c000 x3f0ea002} {x448f8000 x44420000 x3f06dff8} {x44904000 x44404000 x3f06a002} {x4491a000 x443fc000 x3f062004} {x44928000 x443ac000 x3f065ffa} {x4493e000 x443a4000 x3ee77ff1} {x4498c000 x44460000 x3edf7ff1} {x44998000 x444a8000 x3edd7ffa} {x44988000 x44470000 x3ee60008} {x44982000 x443fc000 x3ee70004} {x44974000 x44398000 x3ee0800f} {x44974000 x443a4000 x3e960008} {x44974000 x443b4000 x3dbdfffb}}} {t {{x41300000 x449385c3}} {{x41300000 x444cfe14}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3b83126f g x3b83126f b x3b83126f ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush265 512 catmullrom {cc {f 2080} {px x41300000 {x44830000 x44494000 x3e938002} {x44830000 x44498000 x3eac7ffe} {x4480c000 x44500000 x3ef67ff6}}} {t {{x41300000 x44824000}} {{x41300000 x444b9550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3da3d70a g x3da3d70a b x3da3d70a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush264 512 catmullrom {cc {f 2080} {px x41300000 {x4471c000 x44674000 x3d73fffd} {x44730000 x44660000 x3de2003b} {x447e4000 x4459c000 x3eee0008} {x44812000 x4455c000 x3f125ffa} {x44812000 x4454c000 x3f16a002} {x44812000 x44548000 x3f176007} {x44828000 x444e8000 x3f16dff8} {x44832000 x444e0000 x3f0adff8} {x44828000 x444f8000 x3e03ffef}}} {t {{x41300000 x447f551f}} {{x41300000 x44575550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3da3d70a g x3da3d70a b x3da3d70a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush263 512 catmullrom {cc {f 2080} {px x41300000 {x44936000 x44554000 x3d580007} {x44936000 x44564000 x3e51001d} {x44948000 x445d8000 x3eac0011} {x4493e000 x445d0000 0}}} {t {{x41300000 x4493c800}} {{x41300000 x44598000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3da3d70a g x3da3d70a b x3da3d70a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush262 512 catmullrom {cc {f 2080} {px x41300000 {x44994000 x443b4000 x3da20005} {x44994000 x4436c000 x3e48fffc} {x449a6000 x44390000 x3efb8002} {x44990000 x44348000 x3f139ffd} {x44994000 x4435c000 x3f0b6007} {x4499e000 x44338000 x3f07e005} {x4499a000 x44338000 0}}} {t {{x41300000 x4499847b}} {{x41300000 x4436524e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3da3d70a g x3da3d70a b x3da3d70a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush261 512 catmullrom {cc {f 2080} {px x41300000 {x448f8000 x44594000 x3c6fffd8} {x448f8000 x445a4000 x3d0ffff3} {x448ee000 x44600000 x3d1bfff6} {x448ea000 x44618000 x3e67ffde} {x44900000 x445c8000 x3f07e005} {x44932000 x444f0000 x3f186003} {x4494c000 x44498000 x3f1aa002} {x44956000 x44484000 x3f1ce001} {x44962000 x444a0000 x3f1da006} {x4495e000 x44468000 x3f1e5ffa} {x44956000 x44444000 x3f22dff8} {x44976000 x4448c000 x3f22a002} {x4497a000 x44470000 x3f22a002} {x4497a000 x4443c000 x3f21dffc} {x44976000 x44434000 0}}} {t {{x41300000 x4493cf0a}} {{x41300000 x444ec883}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3da3d70a g x3da3d70a b x3da3d70a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush260 512 catmullrom {cc {f 2080} {px x41300000 {x44acc000 x43730000 x3de3ffef} {x44ad4000 x43680000 x3e98fffc} {x44b02000 x43420000 x3f041ffb}}} {t {{x41300000 x44ae0a8f}} {{x41300000 x435f0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3da3d70a g x3da3d70a b x3da3d70a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush259 512 catmullrom {cc {f 2080} {px x41300000 {x44a44000 x43a58000 x3d800000} {x44a40000 x43a78000 x3d960002} {x44a3c000 x43a88000 x3e370004} {x44a5e000 x439c8000 x3ed8fffc} {x44a64000 x43980000 x3f0d2008} {x44a7e000 x438c8000 x3f0fe005} {x44ab4000 x43780000 x3f162004} {x44ac2000 x436f0000 x3f1f1fff} {x44ad4000 x43630000 x3f21dffc} {x44ad8000 x435f0000 x3f22dff8} {x44adc000 x435f0000 x3f231fff} {x44adc000 x435d0000 x3edafff3} {x44ade000 x435d0000 0}}} {t {{x41300000 x44a98000}} {{x41300000 x4386bb23}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3da3d70a g x3da3d70a b x3da3d70a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush258 512 catmullrom {cc {f 2080} {px x41300000 {x44ae2000 x43510000 x3c800000} {x44ae2000 x434b0000 x3d2c0003}}} {t {{x41300000 x44ae2000}} {{x41300000 x434e0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush257 512 catmullrom {cc {f 2080} {px x41300000 {x44aa2000 x43828000 x3d33fffd} {x44adc000 x43680000 x3e2c0011} {x44b02000 x43390000 x3ec8fffc} {x44b06000 x43380000 x3eb8800f} {x44af4000 x43440000 x3e0afff3}}} {t {{x41300000 x44ae5333}} {{x41300000 x4353999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush256 512 catmullrom {cc {f 2080} {px x41300000 {x44a5a000 x43b30000 x3ce0001b} {x44a56000 x43b30000 x3d13fffd} {x44a52000 x43b30000 x3d30000d} {x44a68000 x43a78000 x3e8f7ff1} {x44a72000 x43a30000 x3ed80000} {x44a96000 x43948000 x3ed80000} {x44ae2000 x43750000 x3ed2fff3} {x44b00000 x43580000 x3ecb8002} {x44b36000 x43340000 x3ec1800a} {x44b38000 x43300000 0}}} {t {{x41300000 x44aad000}} {{x41300000 x438e7333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43490000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Smear28 512 catmullrom {cc {f 2080} {px x41300000 {x44ab8000 x43750000 x3d70000d} {x44aa6000 x43828000 x3e838002} {x44a7e000 x439a0000 x3edafff3} {x44a82000 x439a0000 x3f25dffc} {x44ab0000 x438a8000 x3f286003} {x44aac000 x43898000 x3f2aa002} {x44a64000 x43a00000 x3f2aa002} {x44a3c000 x43b30000 x3f2da006} {x44a3c000 x43b50000 x3f31a006} {x44a4c000 x43b18000 x3f381ffb} {x44a8c000 x43a00000 x3f389ff9} {x44aa6000 x43980000 x3f38e001} {x44a94000 x439d8000 x3f1b6007}}} {t {{x41300000 x44a83148}} {{x41300000 x439a276d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear27 512 catmullrom {cc {f 2080} {px x41300000 {x44b4e000 x42980000 x3d980007} {x44b6e000 x423c0000 x3eb57ffa}}} {t {{x41300000 x44b5e000}} {{x41300000 x42760000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear26 512 catmullrom {cc {f 2080} {px x41300000 {x449d8000 x43360000 x3edc0011} {x44a40000 x43140000 x3ee67ff6}}} {t {{x41300000 x44a0c000}} {{x41300000 x43250000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear25 512 catmullrom {cc {f 2080} {px x41300000 {x449d0000 x42c60000 x3db80007} {x449d0000 x42be0000 x3ead000d} {x449e2000 x42600000 x3ebe0008} {x449e6000 x41c80000 x3ee9fff8} {x449ce000 x41900000 x3ed00000} {x44998000 x41b00000 x3ecf7ff1}}} {t {{x41300000 x449cd000}} {{x41300000 x42520000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear24 512 catmullrom {cc {f 2080} {px x41300000 {x448d4000 x43460000 x3d380007} {x448e6000 x43380000 x3ebc0011} {x448f6000 x43220000 x3f0a5ffa}}} {t {{x41300000 x448e5571}} {{x41300000 x4335553f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear23 512 catmullrom {cc {f 2080} {px x41300000 {x44836000 x43030000 x3e27ffde} {x44836000 x43050000 x3ec00000} {x44874000 x43630000 x3ee3ffef} {x4488a000 x439e8000 x3f3ea002} {x4487e000 x439b8000 x3f452008} {x44878000 x43838000 x3f44e001} {x44874000 x43780000 x3f452008} {x4486c000 x43710000 x3f452008} {x44874000 x43610000 x3f1c1ffb} {x44874000 x435f0000 x3dc3fffd}}} {t {{x41300000 x4486a666}} {{x41300000 x4367e666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear22 512 catmullrom {cc {f 2080} {px x41300000 {x4486c000 x43580000 x3dc7fff9} {x44874000 x43580000 x3eac7ffe} {x44890000 x43360000 x3ef28006} {x448a2000 x43120000 x3f2be005} {x44890000 x43120000 x3f255ffe} {x44886000 x43190000 x3ee28006} {x4482c000 x43680000 x3ee8800f} {x44828000 x43938000 x3f2a5ffa} {x44842000 x43a48000 x3f431fff} {x44836000 x43a58000 x3f492008} {x44812000 x43980000 x3f4e5ffa} {x4480e000 x43958000 x3f4f6007} {x4480e000 x439b8000 x3f4f1fff} {x44816000 x43a48000 x3f506003} {x4481e000 x43a10000 x3f50e001} {x4483a000 x43800000 x3f56a002} {x44832000 x43870000 x3f581ffb} {x44828000 x43928000 x3f592008} {x4482c000 x43948000 x3f592008} {x44868000 x434d0000 x3f59dffc} {x44854000 x43510000 x3f5a2004} {x44836000 x43580000 x3f589ff9} {x44844000 x43460000 x3f52dff8} {x44848000 x435f0000 x3f3f9ffd} {x4482c000 x43900000 x3f3c9ff9} {x4481e000 x43bb0000 x3f3f6007} {x44820000 x43bf0000 x3f47e005} {x44830000 x43d00000 x3f481ffb} {x44828000 x43d28000 x3f2aa002} {x44824000 x43d18000 0}}} {t {{x41300000 x4483fccd}} {{x41300000 x4389f76d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear21 512 catmullrom {cc {f 2080} {px x41300000 {x44800000 x42d00000 x3d900000} {x44808000 x42c60000 x3ea80000} {x44836000 x42200000 x3f041ffb} {x4483a000 x41600000 x3f1d2008} {x44848000 x40e00000 x3f092008} {x4484c000 x40a00000 0}}} {t {{x41300000 x4482ca8f}} {{x41300000 x4233554d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear20 512 catmullrom {cc {f 2080} {px x41300000 {x44674000 x436c0000 x3ee8800f} {x44684000 x43660000 x3f0d2008}}} {t {{x41300000 x4467c000}} {{x41300000 x43690000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear19 512 catmullrom {cc {f 2080} {px x41300000 {x446a0000 x43300000 x3ead7ffa} {x446a8000 x43320000 x3ecf0004} {x446b4000 x43410000 x3f186003} {x446a0000 x43120000 x3f19a006} {x446c4000 x431b0000 x3f181ffb} {x446b4000 x433b0000 x3f179ffd} {x446bc000 x43390000 x3f1f9ffd} {x446a8000 x43320000 x3f21a006} {x446a0000 x43320000 0}}} {t {{x41300000 x446ad550}} {{x41300000 x432f1c6a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear18 512 catmullrom {cc {f 2080} {px x41300000 {x445c0000 x42820000 x3d4c0003} {x44594000 x42900000 x3e6c0011} {x445c0000 x42c20000 x3ea28006} {x445f4000 x42580000 x3f1d2008} {x445ec000 x426c0000 x3d83fffd}}} {t {{x41300000 x445ca666}} {{x41300000 x428acccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear17 512 catmullrom {cc {f 2080} {px x41300000 {x44210000 x43420000 x3e48fffc} {x44244000 x43260000 x3e928006} {x442e8000 x42680000 x3ec1800a}}} {t {{x41300000 x44269550}} {{x41300000 x430b553f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear16 512 catmullrom {cc {f 2080} {px x41300000 {x4405c000 x44138000 x3e100000} {x44190000 x43af8000 x3ea60008} {x441c8000 x43980000 x3f101ffb}}} {t {{x41300000 x4413c000}} {{x41300000 x43cf8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear15 512 catmullrom {cc {f 2080} {px x41300000 {x43f50000 x43fe0000 x3e7effe3} {x43fe0000 x43a10000 x3ebb8002} {x44044000 x43900000 x3f165ffa}}} {t {{x41300000 x43fe8000}} {{x41300000 x43ba5560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear14 512 catmullrom {cc {f 2080} {px x41300000 {x43cf0000 x44148000 x3e9c0011} {x43da8000 x44094000 x3ec9800a} {x43ec8000 x44028000 x3f281ffb}}} {t {{x41300000 x43dcaaa0}} {{x41300000 x440ac000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear13 512 catmullrom {cc {f 2080} {px x41300000 {x43a68000 x4459c000 x3cc00000} {x43880000 x44474000 x3e67ffde} {x43a58000 x44474000 x3f0c6003} {x439b8000 x443f4000 x3f1f6007} {x43880000 x4435c000 x3f2adff8} {x438b8000 x44338000 x3f3c9ff9} {x43990000 x442d4000 x3f3ea002} {x439d8000 x4428c000 x3f4aa002} {x43980000 x441fc000 x3f4ce001} {x439a0000 x441f4000 x3f4aa002} {x43a00000 x44204000 x3eef7ff1}}} {t {{x41300000 x43985168}} {{x41300000 x4434e8b4}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear12 512 catmullrom {cc {f 2080} {px x41300000 {x43b08000 x443fc000 x3d200000} {x43b18000 x44404000 x3e48fffc} {x43b40000 x444bc000 x3ec38002} {x43c08000 x44618000 x3f0f6007} {x43c60000 x446b0000 x3f239ffd} {x43c98000 x44768000 x3f262004} {x43c80000 x44778000 x3f115ffe} {x43bf0000 x44788000 x3f0d5ffe} {x43ad8000 x44788000 x3f0ddffc} {x43a30000 x447c8000 x3f0ea002} {x43ab0000 x44800000 x3f0e2004} {x43af8000 x4480c000 x3ec28006}}} {t {{x41300000 x43b75560}} {{x41300000 x4469c550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear11 512 catmullrom {cc {f 2080} {px x41300000 {x44028000 x4420c000 x3e05ffe7} {x43fb0000 x442c4000 x3e80fffc} {x43fa0000 x44308000 x3f215ffe} {x43f98000 x444c4000 x3f252008} {x43f40000 x446c4000 x3f2aa002} {x43f30000 x44738000 x3f2ddffc} {x43f40000 x44778000 x3f239ffd}}} {t {{x41300000 x43f8edb2}} {{x41300000 x444ddb75}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear10 512 catmullrom {cc {f 2080} {px x41300000 {x4424c000 x44514000 x3dcc0003} {x44014000 x44720000 x3e7effe3} {x43f30000 x447e4000 x3f14e001} {x43ef8000 x44800000 x3ed9fff8}}} {t {{x41300000 x4405d000}} {{x41300000 x44706000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear9 512 catmullrom {cc {f 2080} {px x41300000 {x44410000 x446d8000 x3d900000} {x443c0000 x44764000 x3e8afff3} {x44330000 x44856000 x3f01a006} {x44324000 x44856000 0}}} {t {{x41300000 x44389000}} {{x41300000 x447e5000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear8 512 catmullrom {cc {f 2080} {px x41300000 {x443e0000 x443d0000 x3d47fff9} {x44388000 x4442c000 x3d9c0003} {x44388000 x4443c000 x3ece7ff6} {x44444000 x442d4000 x3eeb8002} {x44624000 x44084000 x3f431fff} {x446bc000 x43fa0000 x3f539ffd} {x4475c000 x43e00000 x3f576007} {x44768000 x43df0000 x3f5d5ffe} {x446a8000 x43f78000 x3f5e2004} {x445a4000 x44190000 x3f5c9ff9} {x4439c000 x44470000 x3f595ffe} {x4432c000 x4454c000 x3f512008} {x44244000 x446f8000 x3f4b6007} {x44220000 x44754000 x3f465ffa} {x441f4000 x447f4000 x3f462004} {x441ec000 x44804000 x3f441ffb} {x441e8000 x44816000 x3f441ffb} {x441ec000 x4483e000 x3f431fff} {x441f4000 x4484c000 x3f0e2004} {x441fc000 x44850000 0}}} {t {{x41300000 x443e5ccd}} {{x41300000 x4446d333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear7 512 catmullrom {cc {f 2080} {px x41300000 {x441a0000 x42a20000 x3ea1800a} {x44188000 x42ee0000 x3ec8fffc} {x441c4000 x437c0000 x3f1aa002} {x4423c000 x43a68000 x3f395ffe} {x4436c000 x43ef8000 x3f3ea002} {x443b4000 x43ff8000 x3f479ffd} {x44468000 x44198000 x3f49a006} {x44494000 x4427c000 x3f4c6003} {x444a8000 x4429c000 x3ede0008}}} {t {{x41300000 x4431a396}} {{x41300000 x43cfb8d5}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear6 512 catmullrom {cc {f 2080} {px x41300000 {x442d4000 x41b00000 x3d7bfff6} {x44434000 x43030000 x3e8e7ff6} {x444cc000 x43540000 x3f339ffd} {x445a4000 x43860000 x3f431fff} {x446fc000 x43ad8000 x3f4d2008} {x44770000 x43bd0000 x3f565ffa} {x44812000 x43d48000 x3f59a006} {x44832000 x43e00000 x3f59dffc} {x4483a000 x43e58000 x3f552008}}} {t {{x41300000 x44651c6a}} {{x41300000 x439571cb}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear5 512 catmullrom {cc {f 2080} {px x41300000 {x44180000 x42200000 x3e0afff3} {x44188000 x42100000 x3e9b8002} {x441b4000 x42180000 x3eb0fffc} {x442b0000 x430b0000 x3f14e001} {x443d8000 x43710000 x3f32dff8} {x444f0000 x43b30000 x3f3ea002} {x44554000 x43c50000 x3f4c1ffb} {x445b4000 x43df0000 x3f4f1fff} {x44620000 x4400c000 x3f501ffb} {x44650000 x4404c000 x3f4e2004} {x44648000 x4404c000 x3d93fffd}}} {t {{x41300000 x4442d74c}} {{x41300000 x4394974c}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear4 512 catmullrom {cc {f 2080} {px x41300000 {x431b0000 x43900000 x3da20005} {x42fc0000 x43ad8000 x3eac7ffe} {x429e0000 x43db8000 x3f3a5ffa} {x42740000 x43f78000 x3f4a5ffa} {x42200000 x440a8000 x3f4e5ffa} {x42100000 x440ec000 x3f49dffc} {x42100000 x44134000 x3f3b6007} {x42180000 x44124000 x3ec5000d}}} {t {{x41300000 x428ec000}} {{x41300000 x43f1c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear3 512 catmullrom {cc {f 2080} {px x41300000 {x42180000 x44794000 x3d0c0003} {x42180000 x44780000 x3e300000} {x41b80000 x44608000 x3eed000d} {x41c80000 x44378000 x3f192008}}} {t {{x41300000 x41f80000}} {{x41300000 x44625000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear2 512 catmullrom {cc {f 2080} {px x41300000 {x423c0000 x443e4000 x3d27fff9} {x42580000 x44254000 x3e65ffe7} {x42680000 x44020000 x3f306003} {x42600000 x43e10000 x3f362004} {x42500000 x43c08000 x3f381ffb} {x42580000 x43bc0000 x3f1da006} {x42500000 x43ba8000 x3e07ffde}}} {t {{x41300000 x4255248f}} {{x41300000 x43fbdb64}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear1 512 catmullrom {cc {f 2080} {px x41300000 {x43200000 x444e8000 x3cf7ffec} {x43200000 x444f0000 x3d33fffd} {x431e0000 x444b0000 x3ecafff3} {x43240000 x443fc000 x3f11a006} {x43320000 x442a8000 x3f209ff9} {x43380000 x44220000 x3f2aa002} {x43380000 x44110000 x3f2edff8} {x43390000 x440b0000 x3f341ffb} {x43420000 x44030000 x3f346003} {x43440000 x44018000 x3f2c9ff9} {x43410000 x44014000 x3f0e2004}}} {t {{x41300000 x4331d168}} {{x41300000 x4424f45a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43170000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Blur2 512 catmullrom {cc {f 2080} {px x41300000 {x42980000 x44764000 x3db00000} {x42980000 x44778000 x3ea38002} {x42940000 x4478c000 x3ec9fff8} {x42e60000 x44620000 x3f1f6007} {x42e60000 x445d0000 x3f341ffb} {x42b40000 x44720000 x3f3a2004} {x42a60000 x44720000 x3f3b9ffd} {x42ee0000 x445ec000 x3f3c9ff9} {x42ce0000 x4468c000 x3f3f6007} {x42b80000 x44754000 x3f3ddffc} {x42d40000 x44668000 x3f3e2004} {x43070000 x44594000 x3f3f6007} {x42f20000 x445fc000 x3f32a002} {x43000000 x444e8000 x3f1b1fff} {x42f40000 x44420000 x3f2e2004} {x42d00000 x443f4000 x3f365ffa} {x42d40000 x44498000 x3f37e005} {x42e00000 x443ac000 x3f3aa002} {x42c60000 x44364000 x3f3ddffc} {x42e20000 x4448c000 x3f3f6007} {x43150000 x44470000 x3f3ea002} {x43240000 x44300000 x3f3f9ffd} {x430b0000 x44254000 x3f41a006} {x43000000 x4417c000 x3f41a006} {x42f40000 x4417c000 x3f35a006} {x42ac0000 x44268000 x3f125ffa} {x42880000 x442c4000 x3eee7ff6} {x41b80000 x44554000 x3f049ff9} {x41d80000 x446f0000 x3f165ffa} {x41a00000 x447a4000 x3f1c1ffb} {x41900000 x446e0000 x3f26a002} {x41900000 x443ec000 x3f2ddffc} {x41900000 x44380000 x3f376007} {x41b80000 x44278000 x3f392008} {x423c0000 x440b8000 x3f3b6007} {x426c0000 x4403c000 x3f3d5ffe} {x426c0000 x43f88000 x3f3e2004} {x42580000 x43fc0000 x3ea00000}}} {t {{x41300000 x42ae4361}} {{x41300000 x4447e1aa}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x430b0000 bt x40000000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 x41700000 tt x41a00000 nv x40000000 view2 x40000000}} {cubiccurve Blur1 512 catmullrom {cc {f 2080} {px x41300000 {x42ce0000 x44728000 x3d900000} {x42d00000 x44730000 x3e860008} {x42ca0000 x44738000 x3eaafff3} {x42d00000 x44738000 x3eee0008} {x42ce0000 x44730000 x3f2b6007} {x42ce0000 x44728000 x3f2f9ffd} {x42ca0000 x4471c000 x3f079ffd}}} {t {{x41300000 x42cd6d91}} {{x41300000 x4472d24e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a bt x40000000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 x41700000 tt x41a00000 nv x40000000 view2 x40000000}} {cubiccurve Brush255 512 catmullrom {cc {f 2080} {px x41300000 {x44268000 x43e90000 x3e828006} {x44220000 x43f88000 x3e730015}}} {t {{x41300000 x44244000}} {{x41300000 x43f0c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush254 512 catmullrom {cc {f 2080} {px x41300000 {x442a0000 x43ca8000 x3d200000} {x442a8000 x43c98000 x3d380007} {x442c0000 x43c88000 x3e55000d} {x442cc000 x43c88000 x3e838002} {x442c0000 x43c70000 x3ef38002} {x442b0000 x43cb8000 x3ef2fff3} {x442a8000 x43cc8000 x3efc7ffe} {x44294000 x43ce0000 x3efe0008} {x44294000 x43d10000 x3ef77ff1} {x44278000 x43cd0000 x3ef00000} {x4427c000 x43d18000 x3ee77ff1} {x4428c000 x43d28000 x3ed1800a} {x44284000 x43d28000 x3e070004} {x4428c000 x43da0000 x3e11001d}}} {t {{x41300000 x4429e000}} {{x41300000 x43cdc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush253 512 catmullrom {cc {f 2080} {px x41300000 {x44350000 x43838000 x3cf7ffec} {x44348000 x43838000 x3da20005} {x4431c000 x437e0000 x3e61001d}}} {t {{x41300000 x4433c000}} {{x41300000 x43820000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush252 512 catmullrom {cc {f 2080} {px x41300000 {x444a8000 x43a68000 x3cf7ffec} {x444e8000 x439e8000 x3d27fff9}}} {t {{x41300000 x444c8000}} {{x41300000 x43a28000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush251 512 catmullrom {cc {f 2080} {px x41300000 {x44420000 x44004000 x3d13fffd} {x4444c000 x43f78000 x3d47fff9}}} {t {{x41300000 x44436000}} {{x41300000 x43fc0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush250 512 catmullrom {cc {f 2080} {px x41300000 {x4435c000 x4411c000 x3d7bfff6} {x44374000 x4411c000 x3e130015}}} {t {{x41300000 x44368000}} {{x41300000 x4411c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush249 512 catmullrom {cc {f 2080} {px x41300000 {x445fc000 x441e8000 x3d73fffd} {x44618000 x441ac000 x3e6effe3} {x44620000 x441a0000 x3e3e0008} {x44624000 x44190000 x3cc00000}}} {t {{x41300000 x44616000}} {{x41300000 x441b1000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush248 512 catmullrom {cc {f 2080} {px x41300000 {x44580000 x441ac000 x3d07fff9} {x44588000 x4417c000 x3d13fffd} {x44590000 x44164000 0}}} {t {{x41300000 x44588000}} {{x41300000 x44184000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush247 512 catmullrom {cc {f 2080} {px x41300000 {x4454c000 x44244000 x3cb0000d} {x44564000 x441e8000 x3d1bfff6}}} {t {{x41300000 x44558000}} {{x41300000 x44216000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush246 512 catmullrom {cc {f 2080} {px x41300000 {x4444c000 x44494000 x3d13fffd} {x44468000 x44498000 x3d33fffd} {x44474000 x44460000 x3e1e0008} {x4447c000 x44410000 x3e5afff3} {x4447c000 x443d8000 x3e9d000d} {x4447c000 x443e4000 x3e900000} {x4448c000 x44444000 x3e8a8006} {x444a0000 x443d0000 x3e977ff1} {x444bc000 x4435c000 x3e98fffc} {x444b8000 x443a4000 x3e91800a} {x444a8000 x443e0000 x3e947ffe} {x444c4000 x44398000 x3eb00000} {x444d4000 x44374000 x3eb28006} {x44500000 x442f8000 x3eb28006} {x44504000 x442f8000 x3eaafff3} {x44504000 x4430c000 x3ea60008} {x44514000 x442e8000 x3e9f0004} {x44530000 x44284000 x3e80fffc}}} {t {{x41300000 x444b5c6a}} {{x41300000 x443a71cb}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush245 512 catmullrom {cc {f 2080} {px x41300000 {x44450000 x44570000 x3c6fffd8} {x44444000 x4451c000 x3c800000}}} {t {{x41300000 x4444a000}} {{x41300000 x44546000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush244 512 catmullrom {cc {f 2080} {px x41300000 {x4443c000 x44658000 x3ccffff3} {x4443c000 x44650000 x3d4c0003} {x4444c000 x445a4000 x3db80007} {x44460000 x445fc000 x3d9dfffb} {x44470000 x44634000 x3e38fffc} {x44484000 x445e4000 x3e6c0011}}} {t {{x41300000 x44459550}} {{x41300000 x44610000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush243 512 catmullrom {cc {f 2080} {px x41300000 {x444e0000 x445fc000 x3ca7fff9} {x444dc000 x445f4000 x3c8ffff3}}} {t {{x41300000 x444de000}} {{x41300000 x445f8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush242 512 catmullrom {cc {f 2080} {px x41300000 {x444c4000 x44634000 x3d4ffff3} {x444cc000 x4462c000 x3cd80007} {x444d4000 x4462c000 0}}} {t {{x41300000 x444cc000}} {{x41300000 x4462eab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush241 512 catmullrom {cc {f 2080} {px x41300000 {x44ed2000 x446b4000 x3da3fffd} {x44ece000 x446b4000 x3e88800f}}} {t {{x41300000 x44ed0000}} {{x41300000 x446b4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush240 512 catmullrom {cc {f 2080} {px x41300000 {x449e6000 x44658000 x3d380007} {x449ee000 x44660000 x3e4c0011}}} {t {{x41300000 x449ea000}} {{x41300000 x4465c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush239 512 catmullrom {cc {f 2080} {px x41300000 {x44aca000 x44354000 x3cc80014} {x44ad0000 x44374000 x3ccffff3}}} {t {{x41300000 x44acd000}} {{x41300000 x44364000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush238 512 catmullrom {cc {f 2080} {px x41300000 {x44a72000 x44374000 x3d3bfff6} {x44a96000 x44330000 x3de3ffef}}} {t {{x41300000 x44a84000}} {{x41300000 x44352000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush237 512 catmullrom {cc {f 2080} {px x41300000 {x44a44000 x443d0000 x3ce7fff9} {x44a48000 x443d0000 x3d33fffd} {x44a4e000 x443c8000 x3e730015} {x44a56000 x44398000 x3e947ffe}}} {t {{x41300000 x44a4c000}} {{x41300000 x443c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush236 512 catmullrom {cc {f 2080} {px x41300000 {x44d0c000 x443f4000 x3d820005} {x44d1c000 x443d0000 x3e11001d}}} {t {{x41300000 x44d14000}} {{x41300000 x443e2000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush235 512 catmullrom {cc {f 2080} {px x41300000 {x44d72000 x445b4000 x3d4c0003} {x44d6a000 x445a4000 x3df80022} {x44d6a000 x44594000 x3ec2fff3} {x44d6e000 x4459c000 x3e07ffde} {x44d6e000 x44590000 x3e5e0008}}} {t {{x41300000 x44d6d333}} {{x41300000 x4459e666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush234 512 catmullrom {cc {f 2080} {px x41300000 {x44e18000 x43bc0000 x3e45ffe7} {x44e30000 x43b40000 x3ed0800f}}} {t {{x41300000 x44e24000}} {{x41300000 x43b80000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush233 512 catmullrom {cc {f 2080} {px x41300000 {x44ee4000 x43270000 x3e31001d} {x44ef0000 x431d0000 x3eb3ffef}}} {t {{x41300000 x44eea000}} {{x41300000 x43220000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush232 512 catmullrom {cc {f 2080} {px x41300000 {x44e96000 x422c0000 x3e0e0008} {x44e9c000 x42240000 x3e977ff1} {x44e98000 x42000000 x3e88fffc} {x44e98000 x42080000 x3ce0001b} {x44ebc000 x41f80000 x3d83fffd} {x44ec4000 x41e80000 0}}} {t {{x41300000 x44ea5a8f}} {{x41300000 x420c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush231 512 catmullrom {cc {f 2080} {px x41300000 {x44d92000 x438f0000 x3d64000a} {x44da0000 x438a8000 x3d64000a}}} {t {{x41300000 x44d99000}} {{x41300000 x438cc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush230 512 catmullrom {cc {f 2080} {px x41300000 {x44d5c000 x43970000 x3d70000d} {x44d66000 x43958000 x3e7c0011}}} {t {{x41300000 x44d61000}} {{x41300000 x43964000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush229 512 catmullrom {cc {f 2080} {px x41300000 {x44cb6000 x43af8000 x3d53fffd} {x44cba000 x43ae8000 x3dcfffbd} {x44cbe000 x43ac0000 x3e838002} {x44cc2000 x43ad8000 x3e99800a} {x44cc4000 x43ad8000 x3d9c0003} {x44ccc000 x43ad0000 x3e89fff8} {x44ccc000 x43ac0000 x3d180007}}} {t {{x41300000 x44cc1b85}} {{x41300000 x43ad6db2}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush228 512 catmullrom {cc {f 2080} {px x41300000 {x44b9a000 x43380000 x3cb0000d} {x44b9e000 x433d0000 x3dfc0011} {x44bac000 x43390000 x3e838002}}} {t {{x41300000 x44ba1571}} {{x41300000 x433a0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush227 512 catmullrom {cc {f 2080} {px x41300000 {x44a9e000 x43e68000 x3d47fff9} {x44a88000 x43e90000 x3d47fff9} {x44a84000 x43ea0000 x3e83ffef} {x44a84000 x43ec0000 x3e9d7ffa}}} {t {{x41300000 x44a8b800}} {{x41300000 x43e96000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush226 512 catmullrom {cc {f 2080} {px x41300000 {x44af4000 x43e20000 x3d24000a} {x44ae6000 x43eb0000 x3e0e0008} {x44af8000 x43ea0000 x3e91fff8}}} {t {{x41300000 x44af0a8f}} {{x41300000 x43e7aaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush225 512 catmullrom {cc {f 2080} {px x41300000 {x44c80000 x44524000 x3d3bfff6} {x44c8c000 x44514000 x3e1effe3} {x44c92000 x4450c000 x3ecf0004} {x44c8e000 x44504000 x3cd80007}}} {t {{x41300000 x44c8b000}} {{x41300000 x44512000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush224 512 catmullrom {cc {f 2080} {px x41300000 {x44b88000 x44740000 x3d0ffff3} {x44b96000 x44740000 x3d2c0003} {x44bbe000 x44728000 x3ea5000d} {x44bc2000 x44714000 x3e9a8006} {x44bd0000 x4470c000 x3d4c0003}}} {t {{x41300000 x44baf99a}} {{x41300000 x44728000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush223 512 catmullrom {cc {f 2080} {px x41300000 {x44adc000 x4474c000 x3d53fffd} {x44ae6000 x4474c000 x3e13ffef} {x44ade000 x44744000 x3e53ffef}}} {t {{x41300000 x44ae0000}} {{x41300000 x44749550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush222 512 catmullrom {cc {f 2080} {px x41300000 {x44594000 x44754000 x3d600000} {x44530000 x4474c000 x3d6c0003}}} {t {{x41300000 x44562000}} {{x41300000 x44750000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush221 512 catmullrom {cc {f 2080} {px x41300000 {x44674000 x44740000 x3ce7fff9} {x44660000 x44754000 x3d1bfff6}}} {t {{x41300000 x4466a000}} {{x41300000 x4474a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush220 512 catmullrom {cc {f 2080} {px x41300000 {x4474c000 x44728000 x3d4c0003} {x446f8000 x44744000 x3d4ffff3}}} {t {{x41300000 x44722000}} {{x41300000 x44736000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush219 512 catmullrom {cc {f 2080} {px x41300000 {x447b8000 x44714000 x3d70000d} {x44794000 x44730000 x3e25000d}}} {t {{x41300000 x447a6000}} {{x41300000 x44722000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush218 512 catmullrom {cc {f 2080} {px x41300000 {x44848000 x446b0000 x3d0c0003} {x44836000 x446cc000 x3d13fffd} {x44820000 x446e8000 x3d380007}}} {t {{x41300000 x44834a8f}} {{x41300000 x446cc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush217 512 catmullrom {cc {f 2080} {px x41300000 {x44720000 x44660000 x3d1bfff6} {x4478c000 x445fc000 x3d380007} {x4478c000 x445ac000 x3ed38002} {x447a4000 x445b4000 x3d1bfff6} {x447ac000 x445ac000 x3cc00000}}} {t {{x41300000 x4478199a}} {{x41300000 x445e199a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush216 512 catmullrom {cc {f 2080} {px x41300000 {x446e8000 x44650000 x3c800000} {x446cc000 x44684000 x3d0ffff3} {x446f0000 x446a8000 x3e92fff3}}} {t {{x41300000 x446e1550}} {{x41300000 x4467eab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush215 512 catmullrom {cc {f 2080} {px x41300000 {x44650000 x4447c000 x3d33fffd} {x4463c000 x4448c000 x3e25000d}}} {t {{x41300000 x44646000}} {{x41300000 x44484000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush214 512 catmullrom {cc {f 2080} {px x41300000 {x44644000 x44450000 x3d04000a} {x44644000 x44460000 x3e100000}}} {t {{x41300000 x44644000}} {{x41300000 x44458000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush213 512 catmullrom {cc {f 2080} {px x41300000 {x4471c000 x442c4000 x3d27fff9} {x4471c000 x442e4000 x3d580007}}} {t {{x41300000 x4471c000}} {{x41300000 x442d4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush212 512 catmullrom {cc {f 2080} {px x41300000 {x44704000 x44374000 x3cf7ffec} {x446f8000 x44374000 x3db00000} {x446d8000 x44390000 x3e2e0008} {x446d4000 x44388000 x3e877ff1} {x446d8000 x44364000 x3e5afff3} {x44714000 x44300000 x3e4e0008} {x44720000 x442d4000 x3d27fff9} {x44728000 x442d4000 x3d820005} {x44728000 x442b8000 x3eb47ffe} {x44728000 x442b0000 x3d4c0003} {x44730000 x442b8000 x3d70000d} {x44728000 x442b8000 x3ed38002} {x4471c000 x442b8000 x3d70000d}}} {t {{x41300000 x4470c4ee}} {{x41300000 x4430c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush211 512 catmullrom {cc {f 2080} {px x41300000 {x44976000 x43800000 x3d780007} {x44990000 x43730000 x3e8e0008}}} {t {{x41300000 x44983000}} {{x41300000 x43798000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush210 512 catmullrom {cc {f 2080} {px x41300000 {x448ae000 x43910000 x3cf0000d} {x44924000 x43880000 x3d53fffd}}} {t {{x41300000 x448e9000}} {{x41300000 x438c8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush209 512 catmullrom {cc {f 2080} {px x41300000 {x44868000 x438f0000 x3da20005} {x44882000 x438e0000 x3e870004}}} {t {{x41300000 x44875000}} {{x41300000 x438e8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush208 512 catmullrom {cc {f 2080} {px x41300000 {x44820000 x438a8000 x3d5bfff6} {x44842000 x438d8000 x3dce0008}}} {t {{x41300000 x44831000}} {{x41300000 x438c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush207 512 catmullrom {cc {f 2080} {px x41300000 {x446b0000 x42180000 x3d1bfff6}}} {t {{x41300000 x446b0000}} {{x41300000 x42180000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush206 512 catmullrom {cc {f 2080} {px x41300000 {x44660000 x43610000 x3d6c0003} {x4466c000 x435c0000 x3d200000}}} {t {{x41300000 x44666000}} {{x41300000 x435e8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush205 512 catmullrom {cc {f 2080} {px x41300000 {x4462c000 x43660000 x3e947ffe} {x4462c000 x43680000 x3eb8fffc}}} {t {{x41300000 x4462c000}} {{x41300000 x43670000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush204 512 catmullrom {cc {f 2080} {px x41300000 {x446cc000 x43030000 x3d580007} {x446d4000 x43070000 x3e0afff3} {x446d8000 x43090000 x3e43ffef} {x446cc000 x43090000 x3e75ffe7} {x446b4000 x43090000 x3c800000}}} {t {{x41300000 x446cb333}} {{x41300000 x43076666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush203 512 catmullrom {cc {f 2080} {px x41300000 {x44578000 x42860000 x3d07fff9} {x44588000 x42860000 x3d33fffd} {x44588000 x42740000 x3e9c0011}}} {t {{x41300000 x44582ab0}} {{x41300000 x42820000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush202 512 catmullrom {cc {f 2080} {px x41300000 {x44634000 x429e0000 x3d1bfff6} {x44650000 x42a60000 x3d33fffd} {x44660000 x42a60000 x3c6fffd8} {x4466c000 x42ac0000 x3da60002}}} {t {{x41300000 x44654000}} {{x41300000 x42a58000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush201 512 catmullrom {cc {f 2080} {px x41300000 {x44690000 x43b98000 x3c6fffd8} {x446d4000 x43ba8000 x3cd80007}}} {t {{x41300000 x446b2000}} {{x41300000 x43ba0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush200 512 catmullrom {cc {f 2080} {px x41300000 {x44644000 x43c40000 x3ce7fff9} {x44648000 x43c18000 x3d2c0003}}} {t {{x41300000 x44646000}} {{x41300000 x43c2c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush199 512 catmullrom {cc {f 2080} {px x41300000 {x444a0000 x440ec000 x3d5bfff6} {x444b0000 x440f0000 x3e4a0019} {x444a0000 x440f0000 x3e51fff8} {x4448c000 x44100000 x3bc0000b}}} {t {{x41300000 x4449f000}} {{x41300000 x440f3000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush198 512 catmullrom {cc {f 2080} {px x41300000 {x4431c000 x43f30000 x3d3bfff6} {x44354000 x44004000 x3dc7fff9} {x44380000 x4404c000 x3ddc0011}}} {t {{x41300000 x44350000}} {{x41300000 x43ff0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush197 512 catmullrom {cc {f 2080} {px x41300000 {x4428c000 x43b30000 x3cd80007} {x44284000 x43d80000 x3d27fff9} {x442b0000 x43e38000 x3da7fff9}}} {t {{x41300000 x44295550}} {{x41300000 x43cf8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush196 512 catmullrom {cc {f 2080} {px x41300000 {x441f4000 x43968000 x3d04000a} {x44234000 x43a20000 x3d380007} {x4424c000 x43a48000 0}}} {t {{x41300000 x44226ab0}} {{x41300000 x439f0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush195 512 catmullrom {cc {f 2080} {px x41300000 {x444e0000 x43ca8000 x3c6fffd8} {x4450c000 x43d90000 x3d27fff9}}} {t {{x41300000 x444f6000}} {{x41300000 x43d1c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush194 512 catmullrom {cc {f 2080} {px x41300000 {x442e4000 x43290000 x3d400000} {x44314000 x433b0000 x3d580007} {x44374000 x435f0000 x3e88fffc} {x4439c000 x43730000 x3ea0fffc} {x443ec000 x43890000 x3ea1fff8} {x44418000 x438d8000 x3e9d7ffa} {x44428000 x438f0000 x3e99fff8} {x44428000 x43938000 x3e82fff3} {x4443c000 x439f8000 x3e570004} {x44458000 x43a30000 x3e580022} {x44460000 x43a88000 x3e580022} {x44460000 x43aa0000 x3e55000d} {x44484000 x43b40000 x3e570004} {x4448c000 x43b60000 x3e1effe3} {x4448c000 x43b68000 x3e15000d} {x44494000 x43bb0000 x3d70000d} {x44498000 x43bf0000 x3cf7ffec} {x444a0000 x43c08000 x3dddffc5} {x444b8000 x43c50000 x3dc7fff9} {x444c4000 x43c70000 x3db3fffd} {x444cc000 x43c80000 0}}} {t {{x41300000 x44435550}} {{x41300000 x439f9e77}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush193 512 catmullrom {cc {f 2080} {px x41300000 {x4444c000 x430c0000 x3d24000a} {x44498000 x43610000 x3d600000} {x444a0000 x436a0000 x3eb3ffef} {x444d4000 x43780000 x3eb38002} {x444dc000 x437c0000 x3eb0fffc} {x444f0000 x43870000 x3e847ffe}}} {t {{x41300000 x444b0ab0}} {{x41300000 x43642ac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush192 512 catmullrom {cc {f 2080} {px x41300000 {x441a0000 x42ea0000 x3cc00000} {x441a0000 x42fc0000 x3d0ffff3} {x44220000 x43260000 x3eaafff3} {x44218000 x43220000 x3ea9fff8} {x441d8000 x42fc0000 x3ea60008} {x441c4000 x42d00000 x3ead000d} {x44188000 x42880000 x3eac7ffe} {x44174000 x422c0000 x3eae7ff6} {x4415c000 x41b80000 x3eae7ff6} {x44148000 x41600000 x3ea60008} {x4415c000 x41300000 x3e7e0008} {x4416c000 x40a00000 x3e61001d} {x441d8000 x42100000 x3e1afff3} {x44278000 x42440000 x3e21001d} {x44258000 x42080000 x3e93ffef} {x44258000 x42200000 x3eac0011} {x442cc000 x42980000 x3eac7ffe} {x442f8000 x42980000 x3eb28006} {x44294000 x42600000 x3eb2fff3} {x442c0000 x42900000 x3eb1800a} {x44314000 x42940000 x3e9c0011} {x442c4000 x42480000 x3e67ffde} {x44270000 x41e80000 x3e980000} {x44278000 x41c80000 x3e9afff3} {x442c0000 x41f80000 x3e9d7ffa} {x442e4000 x41b00000 x3e970004} {x442c4000 x41800000 x3e870004} {x442f0000 x42080000 x3e867ff6} {x44348000 x42240000 x3e6c0011} {x44354000 x42240000 x3e89fff8} {x44378000 x422c0000 x3e90800f} {x44374000 x42200000 x3e900000} {x443ac000 x42900000 x3e81800a} {x443e4000 x42b00000 x3d73fffd} {x44404000 x42dc0000 x3d200000} {x4442c000 x43030000 x3d1bfff6}}} {t {{x41300000 x44286c6a}} {{x41300000 x427a1c78}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush191 512 catmullrom {cc {f 2080} {px x41300000 {x43de8000 x43d80000 x3d0ffff3} {x43e00000 x43d90000 x3d33fffd} {x43e78000 x43d60000 x3db9fffe}}} {t {{x41300000 x43e20000}} {{x41300000 x43d7aaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush190 512 catmullrom {cc {f 2080} {px x41300000 {x440f8000 x43f30000 x3d0ffff3} {x44134000 x43ed8000 x3d44000a}}} {t {{x41300000 x44116000}} {{x41300000 x43f04000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush189 512 catmullrom {cc {f 2080} {px x41300000 {x440a4000 x43f30000 x3d200000} {x440c0000 x43f08000 x3e15ffe7} {x440c8000 x43ed8000 x3e070004}}} {t {{x41300000 x440b9550}} {{x41300000 x43f05560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush188 512 catmullrom {cc {f 2080} {px x41300000 {x43cf0000 x440d4000 x3d1bfff6} {x43d00000 x440dc000 x3d3bfff6} {x43d10000 x440b0000 x3e700000} {x43d00000 x44054000 x3e860008} {x43d10000 x44004000 x3e8c7ffe} {x43d38000 x43f98000 x3e928006} {x43d60000 x43f20000 x3e92fff3} {x43d80000 x43e20000 x3e93ffef}}} {t {{x41300000 x43d25000}} {{x41300000 x44024800}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush187 512 catmullrom {cc {f 2080} {px x41300000 {x43c70000 x441c4000 x3d70000d} {x43c38000 x44234000 x3e41fff8}}} {t {{x41300000 x43c54000}} {{x41300000 x441fc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush186 512 catmullrom {cc {f 2080} {px x41300000 {x43db8000 x4411c000 x3ca7fff9} {x43dc8000 x44124000 x3d04000a} {x43d90000 x44138000 x3eba8006} {x43d90000 x44190000 x3eb1fff8} {x43d48000 x441a0000 x3eb47ffe} {x43cb8000 x441f4000 x3eb57ffa}}} {t {{x41300000 x43d70000}} {{x41300000 x4416f550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush185 512 catmullrom {cc {f 2080} {px x41300000 {x4411c000 x437a0000 x3d580007} {x440f8000 x438d8000 x3d70000d}}} {t {{x41300000 x4410a000}} {{x41300000 x43854000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush184 512 catmullrom {cc {f 2080} {px x41300000 {x440a4000 x43920000 x3cc00000} {x440cc000 x438b8000 x3d0ffff3}}} {t {{x41300000 x440b8000}} {{x41300000 x438ec000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush183 512 catmullrom {cc {f 2080} {px x41300000 {x43f88000 x43a30000 x3d64000a} {x4400c000 x439f8000 x3e18fffc} {x4403c000 x439d8000 x3e21fff8}}} {t {{x41300000 x44004000}} {{x41300000 x43a00000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush182 512 catmullrom {cc {f 2080} {px x41300000 {x43f10000 x43920000 x3d67fff9} {x43dd8000 x43a90000 x3e3cffeb}}} {t {{x41300000 x43e74000}} {{x41300000 x439d8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush181 512 catmullrom {cc {f 2080} {px x41300000 {x4403c000 x43870000 x3d400000} {x44030000 x43850000 x3d8c0003}}} {t {{x41300000 x44036000}} {{x41300000 x43860000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush180 512 catmullrom {cc {f 2080} {px x41300000 {x43f40000 x433b0000 x3cc00000} {x43fd0000 x43410000 x3d24000a} {x43ff8000 x43390000 x3e65000d}}} {t {{x41300000 x43fad560}} {{x41300000 x433c553f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush179 512 catmullrom {cc {f 2080} {px x41300000 {x43e38000 x435c0000 x3d27fff9} {x43eb0000 x43560000 x3d4ffff3} {x43ec8000 x43530000 x3e33ffef} {x43f10000 x433f0000 x3e25000d} {x43f30000 x43380000 x3c8ffff3}}} {t {{x41300000 x43ec999a}} {{x41300000 x434c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush178 512 catmullrom {cc {f 2080} {px x41300000 {x42a60000 x41500000 x3d400000} {x42a60000 x41600000 x3e18fffc}}} {t {{x41300000 x42a60000}} {{x41300000 x41580000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush177 512 catmullrom {cc {f 2080} {px x41300000 {x42ac0000 x42b40000 x3d13fffd} {x42bc0000 x42b80000 x3d5bfff6}}} {t {{x41300000 x42b40000}} {{x41300000 x42b60000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush176 512 catmullrom {cc {f 2080} {px x41300000 {x42bc0000 x42ca0000 x3d900000} {x42bc0000 x42c60000 x3e63ffef} {x42bc0000 x42c20000 x3eb0800f} {x42b40000 x42bc0000 x3e6cffeb}}} {t {{x41300000 x42ba0000}} {{x41300000 x42c38000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush175 512 catmullrom {cc {f 2080} {px x41300000 {x42ee0000 x43530000 x3d1bfff6} {x42f20000 x43580000 x3e530015}}} {t {{x41300000 x42f00000}} {{x41300000 x43558000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush174 512 catmullrom {cc {f 2080} {px x41300000 {x43898000 x42200000 x3c980007} {x438a8000 x42100000 x3ce7fff9} {x43910000 x41a00000 x3ce7fff9} {x43948000 x41300000 x3d2c0003}}} {t {{x41300000 x438e6000}} {{x41300000 x41d60000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush173 512 catmullrom {cc {f 2080} {px x41300000 {x431d0000 x42ee0000 x3cd80007} {x431b0000 x42f40000 x3d3bfff6} {x43200000 x42f80000 x3e500000} {x43290000 x42f20000 x3e8d7ffa}}} {t {{x41300000 x43204000}} {{x41300000 x42f30000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush172 512 catmullrom {cc {f 2080} {px x41300000 {x43580000 x427c0000 x3d27fff9} {x43610000 x426c0000 x3d4ffff3} {x43630000 x42680000 x3e6e0008} {x43818000 x41e80000 x3e6e0008} {x43848000 x41c80000 x3d1bfff6}}} {t {{x41300000 x436e6666}} {{x41300000 x423b3333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush171 512 catmullrom {cc {f 2080} {px x41300000 {x434f0000 x41f80000 x3d0c0003} {x43440000 x422c0000 x3e6cffeb} {x43530000 x41b80000 x3eb60008} {x43560000 x41100000 x3eab8002} {x43390000 x41900000 x3eae0008} {x431b0000 x41e80000 x3e6c0011} {x43070000 x41e80000 x3e43ffef} {x430b0000 x41d80000 x3d7bfff6} {x42fc0000 x42080000 x3e880000} {x42e20000 x42180000 x3ea8800f} {x42e60000 x41b80000 x3ea38002} {x42e00000 x41b80000 x3e98fffc} {x42e20000 x41d80000 x3e9a8006}}} {t {{x41300000 x431b7646}} {{x41300000 x41d9d8ae}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush170 512 catmullrom {cc {f 2080} {px x41300000 {x43ba8000 x43b18000 x3e75000d} {x43bc0000 x43af8000 x3eaf0004}}} {t {{x41300000 x43bb4000}} {{x41300000 x43b08000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush169 512 catmullrom {cc {f 2080} {px x41300000 {x43b88000 x43d60000 x3d180007} {x43be0000 x43d48000 x3d64000a} {x43c60000 x43d38000 x3ed38002} {x43ce0000 x43d18000 x3da20005} {x43d00000 x43d00000 x3e838002} {x43d10000 x43d00000 x3e2afff3} {x43d80000 x43d10000 x3e330015} {x43df0000 x43cf0000 x3e967ff6}}} {t {{x41300000 x43cc5000}} {{x41300000 x43d1f000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush168 512 catmullrom {cc {f 2080} {px x41300000 {x439a0000 x43d80000 x3cd80007} {x439a0000 x43d60000 x3d1bfff6} {x43968000 x43d58000 x3e8b8002} {x43928000 x43d70000 x3ec8800f} {x43920000 x43d70000 x3f01dffc} {x43928000 x43d58000 x3f022004} {x439d8000 x43d58000 x3f001ffb} {x43a78000 x43d60000 x3e41001d} {x43ab0000 x43d60000 0}}} {t {{x41300000 x439ad560}} {{x41300000 x43d6472b}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush167 512 catmullrom {cc {f 2080} {px x41300000 {x43870000 x4466c000 x3cf7ffec} {x43860000 x446a8000 x3d580007}}} {t {{x41300000 x43868000}} {{x41300000 x4468a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush166 512 catmullrom {cc {f 2080} {px x41300000 {x438c8000 x44650000 x3ca7fff9} {x43870000 x44660000 x3d0ffff3}}} {t {{x41300000 x4389c000}} {{x41300000 x44658000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush165 512 catmullrom {cc {f 2080} {px x41300000 {x43928000 x443e0000 x3d0c0003} {x43900000 x445b8000 x3d27fff9}}} {t {{x41300000 x43914000}} {{x41300000 x444cc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush164 512 catmullrom {cc {f 2080} {px x41300000 {x43970000 x445c8000 x3c880014} {x43980000 x445c8000 x3d30000d} {x439a0000 x445c8000 x3d99fffe} {x439c8000 x445b4000 x3e31fff8} {x439a0000 x44530000 x3e91800a} {x43990000 x444d4000 x3ea9800a} {x439b0000 x444cc000 x3e9c0011} {x439b8000 x444cc000 x3e960008} {x43990000 x4448c000 x3e970004} {x43980000 x44468000 x3e928006} {x43958000 x443f4000 x3e92fff3} {x43958000 x443d0000 x3e3effe3} {x43948000 x443b4000 x3e41fff8} {x43928000 x44388000 x3e3cffeb} {x43938000 x44364000 x3d30000d}}} {t {{x41300000 x4397d560}} {{x41300000 x444aaab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush163 512 catmullrom {cc {f 2080} {px x41300000 {x43b50000 x44524000 x3c60001b} {x43b40000 x44540000 x3d0ffff3} {x43ad0000 x4454c000 x3d47fff9}}} {t {{x41300000 x43b20000}} {{x41300000 x4453aab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush162 512 catmullrom {cc {f 2080} {px x41300000 {x43b18000 x4456c000 x3d0ffff3} {x43af8000 x445a4000 x3d400000}}} {t {{x41300000 x43b08000}} {{x41300000 x44588000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush161 512 catmullrom {cc {f 2080} {px x41300000 {x43c28000 x441c4000 x3cb7ffec} {x43bf8000 x442e8000 x3d24000a} {x43c08000 x44338000 x3e89fff8} {x43bf8000 x44390000 x3ea38002} {x43be0000 x443e4000 x3ea1fff8} {x43bd0000 x4442c000 x3e070004} {x43bd0000 x44450000 x3de3ffef} {x43bb0000 x44450000 x3ea57ffa} {x43bc0000 x44458000 x3ec38002} {x43bd0000 x44484000 x3ebc7ffe} {x43bc0000 x444b8000 x3eb9fff8} {x43bc0000 x444cc000 x3ebc7ffe} {x43ba8000 x44500000 x3e900000} {x43b98000 x44530000 x3db9fffe} {x43b60000 x4454c000 x3cf0000d}}} {t {{x41300000 x43bccccd}} {{x41300000 x4442221d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush160 512 catmullrom {cc {f 2080} {px x41300000 {x43be0000 x442c0000 x3d2c0003} {x43c18000 x44278000 x3d47fff9}}} {t {{x41300000 x43bfc000}} {{x41300000 x4429c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush159 512 catmullrom {cc {f 2080} {px x41300000 {x43ae8000 x44300000 x3ca7fff9} {x43b30000 x442f0000 x3d0ffff3} {x43b30000 x442e8000 x3d73fffd} {x43b30000 x442e4000 x3ca7fff9}}} {t {{x41300000 x43b1e000}} {{x41300000 x442ef000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush158 512 catmullrom {cc {f 2080} {px x41300000 {x43968000 x44308000 x3d1bfff6} {x43970000 x4430c000 x3d400000} {x43980000 x44308000 x3e9c0011} {x439a0000 x442f8000 x3ebb8002} {x439c8000 x44300000 x3ebd000d} {x43a10000 x442f0000 x3eaf7ff1}}} {t {{x41300000 x439a2aa0}} {{x41300000 x44300ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e7ae148 g x3e7ae148 b x3e7ae148 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42a60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush157 512 catmullrom {cc {f 2080} {px x41300000 {x43980000 x441d0000 x3d780007} {x43990000 x441d8000 x3e9afff3} {x439b0000 x441e0000 x3eb60008} {x439a0000 x441e0000 x3d24000a}}} {t {{x41300000 x43998000}} {{x41300000 x441da000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42540000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush156 512 catmullrom {cc {f 2080} {px x41300000 {x43a58000 x4404c000 x3d6c0003} {x43a58000 x44054000 x3e960008} {x43a40000 x44054000 x3da7fff9}}} {t {{x41300000 x43a50000}} {{x41300000 x44051550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42540000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush155 512 catmullrom {cc {f 2080} {px x41300000 {x43300000 x43fa0000 x3d24000a} {x43320000 x43fb0000 x3d9c0003} {x43360000 x43fa0000 x3e43ffef} {x43360000 x43f88000 x3df00043} {x43380000 x43f98000 x3c000000}}} {t {{x41300000 x43346666}} {{x41300000 x43f9cccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42540000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush154 512 catmullrom {cc {f 2080} {px x41300000 {x43270000 x44140000 x3d400000} {x43270000 x44158000 x3e43ffef} {x43260000 x44148000 x3eb38002}}} {t {{x41300000 x4326aac1}} {{x41300000 x4414aab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42540000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush153 512 catmullrom {cc {f 2080} {px x41300000 {x427c0000 x43f20000 x3d24000a} {x42740000 x43f40000 x3d44000a}}} {t {{x41300000 x42780000}} {{x41300000 x43f30000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42540000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush152 512 catmullrom {cc {f 2080} {px x41300000 {x42200000 x44068000 x3d47fff9} {x42240000 x44068000 x3d89fffe} {x42240000 x4405c000 x3e88800f}}} {t {{x41300000 x4222aab3}} {{x41300000 x44064000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42540000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush151 512 catmullrom {cc {f 2080} {px x41300000 {x429a0000 x44070000 x3d64000a} {x429e0000 x44078000 x3e25ffe7} {x42a60000 x4408c000 x3e7afff3} {x42b00000 x44068000 x3ea57ffa} {x42b00000 x4405c000 x3e8c0011} {x42b00000 x44070000 x3e83ffef}}} {t {{x41300000 x42a7aaa6}} {{x41300000 x44071550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42540000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush150 512 catmullrom {cc {f 2080} {px x41300000 {x431b0000 x443d8000 x3d30000d} {x431d0000 x443d8000 x3e08fffc} {x431d0000 x443ac000 x3e51fff8} {x431b0000 x44380000 x3e400000}}} {t {{x41300000 x431c0000}} {{x41300000 x443b7000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42100000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush149 512 catmullrom {cc {f 2080} {px x41300000 {x43150000 x44460000 x3d24000a} {x42fc0000 x445f4000 x3d33fffd} {x42dc0000 x44634000 x3e99800a} {x42ce0000 x4468c000 x3e9a8006} {x42b00000 x44704000 x3e9afff3} {x429e0000 x44714000 x3e90800f} {x42860000 x44744000 x3e957ffa} {x42740000 x44768000 x3e7c0011}}} {t {{x41300000 x42c3c000}} {{x41300000 x4467b000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42100000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush148 512 catmullrom {cc {f 2080} {px x41300000 {x43190000 x4443c000 x3d0ffff3} {x43150000 x4442c000 x3d27fff9}}} {t {{x41300000 x43170000}} {{x41300000 x44434000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42100000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush147 512 catmullrom {cc {f 2080} {px x41300000 {x42b40000 x44434000 x3d24000a} {x42b40000 x4442c000 x3d380007} {x42b40000 x44428000 x3e11fff8} {x42b80000 x4442c000 x3e2cffeb} {x42c60000 x444a0000 x3e7c0011} {x42c60000 x444c4000 x3e780022} {x42ca0000 x444f0000 x3e2effe3} {x42d80000 x44514000 x3e55000d} {x42f20000 x4455c000 x3e55ffe7} {x42f80000 x4456c000 x3e838002} {x43050000 x4451c000 x3e8e7ff6} {x430b0000 x444f0000 x3d64000a} {x430c0000 x444e8000 x3d8c0003} {x430e0000 x444e8000 x3d99fffe} {x430e0000 x444f0000 x3d000000} {x43120000 x444b8000 x3d53fffd} {x43140000 x44474000 x3cc80014}}} {t {{x41300000 x42ebc396}} {{x41300000 x444c1a5e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42100000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush146 512 catmullrom {cc {f 2080} {px x41300000 {x42480000 x44380000 x3d04000a} {x42480000 x442f8000 x3d4ffff3} {x42440000 x44300000 x3e2cffeb} {x42180000 x443d0000 x3e27ffde} {x42100000 x44410000 x3e43ffef} {x42340000 x44388000 x3e81fff8} {x42500000 x44300000 x3e880000} {x42480000 x442dc000 x3e7effe3} {x423c0000 x442c4000 x3e6cffeb} {x42340000 x442b0000 x3e5effe3} {x42200000 x44270000 x3e61fff8} {x42080000 x44234000 x3e1c0011} {x41f80000 x441d8000 x3e170004} {x41f80000 x441c8000 0}}} {t {{x41300000 x422adb71}} {{x41300000 x442e3b75}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42100000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush145 512 catmullrom {cc {f 2080} {px x41300000 {x41c80000 x44600000 x3cc00000} {x41d80000 x445c8000 x3d7bfff6} {x42000000 x44548000 x3de7ffde} {x42600000 x443e0000 x3e67ffde} {x42680000 x443c0000 x3e3e0008} {x42600000 x443c0000 x3de7ffde} {x42680000 x443ac000 x3d180007} {x42860000 x44364000 x3df9ffd6} {x42820000 x44354000 x3dddffc5}}} {t {{x41300000 x4245554d}} {{x41300000 x4445071b}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42100000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush144 512 catmullrom {cc {f 2080} {px x41300000 {x42180000 x444c4000 x3d000000} {x42080000 x4455c000 x3d380007}}} {t {{x41300000 x42100000}} {{x41300000 x44510000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42100000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush143 512 catmullrom {cc {f 2080} {px x41300000 {x42240000 x446e0000 x3d24000a} {x42200000 x446e0000 x3d44000a} {x42200000 x446d8000 x3de00000} {x42100000 x44668000 x3e75000d} {x42000000 x44608000 x3e93ffef} {x41d80000 x44524000 x3ea38002} {x41e80000 x444e0000 x3ea9800a} {x41e80000 x444f8000 x3e9f0004} {x41d80000 x44500000 x3e8d000d} {x41d80000 x444e8000 x3e8b8002} {x41e80000 x444c4000 x3e8e7ff6} {x42000000 x44470000 x3e90fffc} {x42080000 x4444c000 x3e95000d} {x42080000 x44458000 x3e93ffef} {x42000000 x44470000 x3e870004} {x42080000 x44494000 x3df80022}}} {t {{x41300000 x4202c000}} {{x41300000 x4454c800}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42100000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush142 512 catmullrom {cc {f 2080} {px x41300000 {x42240000 x44410000 x3cb7ffec} {x42240000 x44408000 x3d5bfff6} {x423c0000 x443e4000 x3dee0008} {x42580000 x44398000 x3e35ffe7}}} {t {{x41300000 x42370000}} {{x41300000 x443e5000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush141 512 catmullrom {cc {f 2080} {px x41300000 {x42000000 x444a0000 x3ce7fff9} {x42100000 x44474000 x3d000000}}} {t {{x41300000 x42080000}} {{x41300000 x4448a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush140 512 catmullrom {cc {f 2080} {px x41300000 {x42180000 x444d4000 x3ca7fff9} {x42200000 x444c4000 x3d44000a} {x42240000 x44484000 x3e7e0008}}} {t {{x41300000 x421eaab3}} {{x41300000 x444b4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush139 512 catmullrom {cc {f 2080} {px x41300000 {x42200000 x44570000 x3cd80007} {x42180000 x44548000 x3d1bfff6}}} {t {{x41300000 x421c0000}} {{x41300000 x4455c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush138 512 catmullrom {cc {f 2080} {px x41300000 {x41d80000 x446f0000 x3cf0000d} {x42100000 x44704000 x3d2c0003} {x42080000 x446b0000 x3dfc0011} {x42000000 x44634000 x3df40032} {x42180000 x44580000 x3df40032} {x42200000 x44570000 0}}} {t {{x41300000 x420a0000}} {{x41300000 x4464c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush137 512 catmullrom {cc {f 2080} {px x41300000 {x43410000 x4475c000 x3dce0008} {x43390000 x44754000 x3e857ffa} {x43390000 x44738000 x3eae0008} {x433d0000 x44720000 x3e8e0008}}} {t {{x41300000 x433c0000}} {{x41300000 x44742000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush136 512 catmullrom {cc {f 2080} {px x41300000 {x42f40000 x44778000 x3d27fff9} {x430b0000 x447b8000 x3d7bfff6}}} {t {{x41300000 x43028000}} {{x41300000 x44798000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush135 512 catmullrom {cc {f 2080} {px x41300000 {x430c0000 x446e8000 x3d0ffff3} {x43070000 x44730000 x3d900000} {x43030000 x44730000 x3e938002} {x43020000 x44740000 x3e5afff3} {x42ee0000 x4479c000 x3e63ffef} {x42ea0000 x44794000 x3e88fffc} {x42ea0000 x44780000 x3dcfffbd}}} {t {{x41300000 x42fe0000}} {{x41300000 x4475124e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush134 512 catmullrom {cc {f 2080} {px x41300000 {x43270000 x44660000 x3d7bfff6} {x43260000 x44660000 x3e0afff3} {x431e0000 x44668000 x3e55000d} {x43190000 x44668000 x3e80800f} {x43120000 x446bc000 x3e9c7ffe} {x430b0000 x446f0000 x3e9d000d}}} {t {{x41300000 x431ad53f}} {{x41300000 x4468a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3edc28f6 g x3edc28f6 b x3edc28f6 ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush133 512 catmullrom {cc {f 2080} {px x41300000 {x44514000 x44198000 x3d07fff9} {x44514000 x44188000 x3eac0011} {x44514000 x44190000 x3ecb8002} {x44514000 x44188000 x3efd7ffa} {x4450c000 x4417c000 x3ef8800f}}} {t {{x41300000 x44512666}} {{x41300000 x4418a666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush132 512 catmullrom {cc {f 2080} {px x41300000 {x44378000 x442f8000 x3c8ffff3} {x4432c000 x443d0000 x3d24000a} {x44324000 x443c8000 x3e670004} {x4430c000 x443bc000 x3e48fffc} {x44300000 x44408000 x3e960008} {x442dc000 x44434000 x3e900000}}} {t {{x41300000 x4431d550}} {{x41300000 x443c1550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush131 512 catmullrom {cc {f 2080} {px x41300000 {x443d0000 x4423c000 x3c6fffd8} {x443d8000 x4423c000 x3ce7fff9} {x443d8000 x44234000 x3d0ffff3} {x443d8000 x44230000 x3d27fff9} {x443bc000 x44258000 x3e4cffeb} {x443ac000 x44254000 x3edf7ff1} {x443c0000 x44230000 x3ec0800f} {x443a4000 x44254000 x3e75ffe7} {x4436c000 x442e8000 x3eab8002} {x4436c000 x442f8000 0}}} {t {{x41300000 x443b2ccd}} {{x41300000 x44264666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush130 512 catmullrom {cc {f 2080} {px x41300000 {x44314000 x43f50000 x3d24000a} {x44300000 x43f30000 x3e01fff8} {x442dc000 x43f08000 x3e93ffef} {x442d4000 x43e90000 x3e960008} {x442cc000 x43dc8000 x3e8c0011} {x442c4000 x43db8000 x3ce7fff9}}} {t {{x41300000 x442e3550}} {{x41300000 x43e99560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush129 512 catmullrom {cc {f 2080} {px x41300000 {x442c0000 x44100000 x3d200000} {x442cc000 x44100000 x3d44000a} {x442e4000 x440d4000 x3eb70004}}} {t {{x41300000 x442d0000}} {{x41300000 x440f1550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush128 512 catmullrom {cc {f 2080} {px x41300000 {x442f8000 x440c8000 x3c8ffff3} {x442e8000 x440d4000 x3d0c0003} {x442e4000 x440e4000 x3d04000a} {x442cc000 x44108000 x3d04000a}}} {t {{x41300000 x442e4000}} {{x41300000 x440e2000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush127 512 catmullrom {cc {f 2080} {px x41300000 {x43f50000 x44698000 x3d5bfff6}}} {t {{x41300000 x43f50000}} {{x41300000 x44698000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush126 512 catmullrom {cc {f 2080} {px x41300000 {x440ec000 x44580000 x3d70000d} {x44084000 x44588000 x3dc60002}}} {t {{x41300000 x440b8000}} {{x41300000 x44584000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush125 512 catmullrom {cc {f 2080} {px x41300000 {x43fd0000 x444a0000 x3d0c0003} {x43fc0000 x44498000 x3d13fffd} {x43fc0000 x44468000 x3d1bfff6} {x43fc0000 x4447c000 x3e0a0019} {x43fe8000 x444bc000 x3e78fffc} {x43fe8000 x444a8000 x3e977ff1} {x4403c000 x444c4000 x3da3fffd} {x44080000 x44500000 x3da9fffe} {x440b8000 x444f8000 x3e15000d} {x440c8000 x44500000 x3e5c0011} {x440cc000 x44500000 x3e6cffeb} {x440e4000 x4450c000 x3e770004} {x440d4000 x444f8000 x3e99800a} {x440e4000 x44528000 x3e21001d} {x440e4000 x4454c000 x3e430015} {x440ec000 x44564000 x3be00005}}} {t {{x41300000 x4406e3f8}} {{x41300000 x444e1800}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush124 512 catmullrom {cc {f 2080} {px x41300000 {x43ff8000 x44524000 x3cb0000d} {x44004000 x44528000 x3e13ffef} {x43fe8000 x44514000 x3e8f0004} {x43ff8000 x44570000 x3e838002} {x43fe8000 x4456c000 x3e95000d} {x43fe8000 x4455c000 x3e8e7ff6} {x43fe0000 x4456c000 x3e860008} {x43fc0000 x445b8000 x3e8d7ffa} {x43fc0000 x445dc000 x3e67ffde} {x43fc0000 x445c8000 x3e48fffc}}} {t {{x41300000 x43fe199a}} {{x41300000 x44570000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush123 512 catmullrom {cc {f 2080} {px x41300000 {x44164000 x44420000 x3d44000a} {x44150000 x44444000 x3e500000}}} {t {{x41300000 x4415a000}} {{x41300000 x44432000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush122 512 catmullrom {cc {f 2080} {px x41300000 {x44140000 x44210000 x3d400000} {x44148000 x44258000 x3e55ffe7} {x44150000 x44260000 x3cf7ffec} {x44158000 x4424c000 x3e4effe3} {x44158000 x4427c000 x3ed70004}}} {t {{x41300000 x4414e666}} {{x41300000 x44250000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush121 512 catmullrom {cc {f 2080} {px x41300000 {x440d4000 x440e4000 x3d180007} {x440dc000 x440f8000 x3d380007} {x440c0000 x44198000 x3d3bfff6} {x440c0000 x441ac000 x3d64000a}}} {t {{x41300000 x440cc000}} {{x41300000 x44148000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush120 512 catmullrom {cc {f 2080} {px x41300000 {x440a4000 x43fd0000 x3cb0000d} {x440a4000 x4403c000 x3d0c0003} {x440c8000 x4408c000 x3d380007} {x440c8000 x44084000 x3e3cffeb} {x440dc000 x440a4000 x3d07fff9} {x440d4000 x44094000 x3e43ffef} {x440d4000 x44068000 x3e15000d} {x440d4000 x4404c000 x3b800000}}} {t {{x41300000 x440c6000}} {{x41300000 x44064000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush119 512 catmullrom {cc {f 2080} {px x41300000 {x440cc000 x43c88000 x3c60001b} {x440d4000 x43bc0000 x3cc00000} {x440dc000 x43b78000 x3d44000a} {x440cc000 x43af8000 x3d47fff9}}} {t {{x41300000 x440d2000}} {{x41300000 x43bae000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush118 512 catmullrom {cc {f 2080} {px x41300000 {x44068000 x43e10000 x3c8ffff3} {x44030000 x43f40000 x3c9fffe5} {x43fb0000 x44038000 x3dce0008} {x43f78000 x44078000 x3e25ffe7} {x43f68000 x44078000 x3e4effe3} {x43f10000 x4409c000 x3e4cffeb} {x43f08000 x440a8000 x3e51001d} {x43ea0000 x440ec000 x3e58fffc} {x43e90000 x440ec000 x3e8f7ff1} {x43ec0000 x440dc000 x3dd80022}}} {t {{x41300000 x43f60ccd}} {{x41300000 x44060ccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush117 512 catmullrom {cc {f 2080} {px x41300000 {x44020000 x43fe8000 x3d07fff9} {x44054000 x43f68000 x3d27fff9} {x44080000 x43e80000 x3e03ffef} {x44084000 x43e20000 x3df9ffd6} {x44080000 x43dc8000 x3e947ffe} {x4408c000 x43d60000 x3e3c0011} {x44094000 x43d38000 x3d400000} {x440a8000 x43cd0000 x3ca7fff9}}} {t {{x41300000 x44078000}} {{x41300000 x43e24000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush116 512 catmullrom {cc {f 2080} {px x41300000 {x43f68000 x435c0000 x3cf0000d} {x43f98000 x433f0000 x3d0ffff3} {x43f98000 x43380000 x3c880014}}} {t {{x41300000 x43f88000}} {{x41300000 x4346553f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush115 512 catmullrom {cc {f 2080} {px x41300000 {x43d18000 x43a68000 x3c880014} {x43d28000 x43a88000 x3d27fff9}}} {t {{x41300000 x43d20000}} {{x41300000 x43a78000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush114 512 catmullrom {cc {f 2080} {px x41300000 {x43eb0000 x43828000 x3ca7fff9} {x43ec0000 x43838000 x3d44000a}}} {t {{x41300000 x43eb8000}} {{x41300000 x43830000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush113 512 catmullrom {cc {f 2080} {px x41300000 {x43d60000 x43870000 x3cc00000} {x43dc8000 x43848000 x3cf7ffec}}} {t {{x41300000 x43d94000}} {{x41300000 x4385c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush112 512 catmullrom {cc {f 2080} {px x41300000 {x43bf8000 x43ab0000 x3d180007} {x43bf8000 x43ac0000 x3d400000} {x43c28000 x43ab0000 x3e13ffef} {x43cc8000 x43990000 x3e8b8002} {x43c88000 x43938000 x3e430015} {x43c50000 x43948000 x3e6c0011} {x43c70000 x43928000 x3e6effe3} {x43c80000 x438a8000 x3e3a0019}}} {t {{x41300000 x43c55000}} {{x41300000 x439c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush111 512 catmullrom {cc {f 2080} {px x41300000 {x43c08000 x43190000 x3d0c0003} {x43d60000 x42ce0000 x3d1bfff6}}} {t {{x41300000 x43cb4000}} {{x41300000 x43000000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush110 512 catmullrom {cc {f 2080} {px x41300000 {x43b98000 x43320000 x3dcc0003} {x43b98000 x432f0000 x3e7effe3} {x43ba8000 x432d0000 x3e91800a} {x43bf0000 x431b0000 x3e91800a}}} {t {{x41300000 x43bb2000}} {{x41300000 x432a4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush109 512 catmullrom {cc {f 2080} {px x41300000 {x43898000 x43a58000 x3d04000a} {x43860000 x43b18000 x3d1bfff6} {x43838000 x43b78000 x3e0cffeb} {x43818000 x43be0000 x3cf0000d}}} {t {{x41300000 x43852000}} {{x41300000 x43b32000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush108 512 catmullrom {cc {f 2080} {px x41300000 {x43a48000 x43750000 x3d1bfff6} {x439f8000 x43800000 x3d67fff9} {x43948000 x438c8000 x3eb70004} {x43938000 x438d8000 x3d600000} {x43900000 x43948000 x3e53ffef} {x43900000 x43980000 x3d6c0003}}} {t {{x41300000 x43975560}} {{x41300000 x438ad560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush107 512 catmullrom {cc {f 2080} {px x41300000 {x43c88000 x43100000 x3d2c0003} {x43c38000 x431e0000 x3d8c0003} {x43be0000 x43200000 x3e31001d}}} {t {{x41300000 x43c35560}} {{x41300000 x431a0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush106 512 catmullrom {cc {f 2080} {px x41300000 {x4400c000 x42a60000 x3da20005} {x44018000 x429e0000 x3ea0800f} {x44028000 x42ac0000 x3eb60008} {x4400c000 x42b00000 x3ea47ffe} {x43fe8000 x42b40000 0}}} {t {{x41300000 x4400f333}} {{x41300000 x42aa6666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush105 512 catmullrom {cc {f 2080} {px x41300000 {x43e78000 x41d80000 x3d89fffe} {x43e68000 x41d80000 x3e55000d} {x43e80000 x41900000 x3ea1fff8} {x43e78000 x41f80000 x3ed77ff1} {x43e48000 x41b00000 x3ecc7ffe} {x43e20000 x41f80000 x3e5cffeb}}} {t {{x41300000 x43e60000}} {{x41300000 x41d00000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush104 512 catmullrom {cc {f 2080} {px x41300000 {x437e0000 x42500000 x3cd80007} {x43838000 x42240000 x3d200000} {x438b8000 x41b80000 x3d27fff9}}} {t {{x41300000 x4384aaa0}} {{x41300000 x421aaab3}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush103 512 catmullrom {cc {f 2080} {px x41300000 {x43560000 x42a20000 x3d33fffd} {x436a0000 x42820000 x3d44000a} {x436f0000 x42440000 x3e6cffeb}}} {t {{x41300000 x43650000}} {{x41300000 x42820000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush102 512 catmullrom {cc {f 2080} {px x41300000 {x43340000 x41600000 x3d87fff9} {x43390000 x41300000 x3e33ffef}}} {t {{x41300000 x43368000}} {{x41300000 x41480000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush101 512 catmullrom {cc {f 2080} {px x41300000 {x42500000 x42940000 x3d70000d} {x423c0000 x42880000 x3e03ffef} {x42200000 x427c0000 x3e867ff6} {x422c0000 x42880000 x3e847ffe}}} {t {{x41300000 x42360000}} {{x41300000 x42888000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush100 512 catmullrom {cc {f 2080} {px x41300000 {x42ac0000 x42000000 x3d8dfffb} {x42bc0000 xc1300000 x3dac0003}}} {t {{x41300000 x42b40000}} {{x41300000 x41280000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush99 512 catmullrom {cc {f 2080} {px x41300000 {x42e00000 x42b80000 x3d89fffe} {x42dc0000 x42600000 x3d960002}}} {t {{x41300000 x42de0000}} {{x41300000 x42940000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush98 512 catmullrom {cc {f 2080} {px x41300000 {x43120000 x43070000 x3d2c0003} {x43150000 x43090000 x3d580007} {x43170000 x430e0000 x3e75ffe7} {x431e0000 x430c0000 x3e7cffeb} {x43140000 x43090000 x3e11fff8} {x42f80000 x43030000 x3dfc0011}}} {t {{x41300000 x43120000}} {{x41300000 x43090000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush97 512 catmullrom {cc {f 2080} {px x41300000 {x41d80000 x43b68000 x3d73fffd} {x41f80000 x43b60000 x3e33ffef} {x41f80000 x43b50000 x3e8a8006} {x42000000 x43b40000 x3dac0003}}} {t {{x41300000 x41f20000}} {{x41300000 x43b56000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush96 512 catmullrom {cc {f 2080} {px x41300000 {x41f80000 x43808000 x3d0c0003} {x42000000 x43800000 x3d70000d} {x42500000 x43770000 x3d89fffe} {x423c0000 x43808000 x3ebc7ffe} {x42480000 x437e0000 x3ebd7ffa}}} {t {{x41300000 x4229999a}} {{x41300000 x437e3333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush95 512 catmullrom {cc {f 2080} {px x41300000 {x434a0000 x43c70000 x3e8d000d} {x43460000 x43c60000 x3eb77ff1} {x43480000 x43c60000 0}}} {t {{x41300000 x43480000}} {{x41300000 x43c65560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush94 512 catmullrom {cc {f 2080} {px x41300000 {x42dc0000 x43d48000 x3d89fffe} {x42dc0000 x43d58000 x3d960002} {x42dc0000 x43d60000 x3e65ffe7} {x42d80000 x43d48000 x3ede0008} {x42e00000 x43d48000 x3eee7ff6} {x42f20000 x43d58000 x3ede0008} {x42f40000 x43d28000 x3ee0fffc} {x42f80000 x43d28000 0}}} {t {{x41300000 x42e54000}} {{x41300000 x43d47000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush93 512 catmullrom {cc {f 2080} {px x41300000 {x44d58000 x44578000 x3ce0001b} {x44d66000 x44588000 x3d0ffff3} {x44d6e000 x44590000 x3e2e0008}}} {t {{x41300000 x44d64000}} {{x41300000 x44585550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush92 512 catmullrom {cc {f 2080} {px x41300000 {x44cc8000 x44338000 x3d000000} {x44cc2000 x443fc000 x3d30000d} {x44cc2000 x44314000 x3dc3fffd}}} {t {{x41300000 x44cc4000}} {{x41300000 x4436d550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush91 512 catmullrom {cc {f 2080} {px x41300000 {x44cc2000 x44398000 x3cf7ffec} {x44cc8000 x44380000 x3d13fffd} {x44cd0000 x4430c000 x3dfc0011}}} {t {{x41300000 x44cc8a8f}} {{x41300000 x44361550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush90 512 catmullrom {cc {f 2080} {px x41300000 {x44c68000 x44554000 x3d67fff9} {x44c5c000 x445b4000 x3d780007} {x44c58000 x445b8000 x3cb7ffec}}} {t {{x41300000 x44c5ea8f}} {{x41300000 x44595550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush89 512 catmullrom {cc {f 2080} {px x41300000 {x44c6e000 x4450c000 x3d67fff9} {x44c6a000 x4451c000 x3d780007} {x44c68000 x44540000 x3e270004}}} {t {{x41300000 x44c6aa8f}} {{x41300000 x44522ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush88 512 catmullrom {cc {f 2080} {px x41300000 {x44c8e000 x44450000 x3c8ffff3} {x44c8e000 x4444c000 x3cd80007} {x44c8e000 x44460000 x3d180007} {x44c8e000 x4448c000 x3e980000} {x44c8c000 x444a0000 x3e1effe3} {x44c88000 x444c4000 x3ea0fffc} {x44c80000 x44500000 x3e928006} {x44c7a000 x4450c000 x3e92fff3} {x44c72000 x4450c000 x3d73fffd}}} {t {{x41300000 x44c86385}} {{x41300000 x444ab1cb}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush87 512 catmullrom {cc {f 2080} {px x41300000 {x44dfe000 x43958000 x3d400000} {x44dfe000 x43968000 x3de3ffef} {x44e30000 x439d8000 x3ecb8002}}} {t {{x41300000 x44e0ea8f}} {{x41300000 x43988000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush86 512 catmullrom {cc {f 2080} {px x41300000 {x44dec000 x438c8000 x3c800000} {x44df0000 x438c8000 x3d0c0003}}} {t {{x41300000 x44dee000}} {{x41300000 x438c8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush85 512 catmullrom {cc {f 2080} {px x41300000 {x44dd6000 x438c8000 x3d400000} {x44dde000 x438b8000 x3d83fffd} {x44dd6000 x438b8000 x3ec2fff3} {x44dd6000 x438c8000 0}}} {t {{x41300000 x44dd8000}} {{x41300000 x438c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42c60000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush84 512 catmullrom {cc {f 2080} {px x41300000 {x44b72000 x43420000 x3d960002} {x44b7e000 x433b0000 x3eb9800a}}} {t {{x41300000 x44b78000}} {{x41300000 x433e8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush83 512 catmullrom {cc {f 2080} {px x41300000 {x44b2a000 x427c0000 x3d0c0003} {x44b38000 x42600000 x3dd40032}}} {t {{x41300000 x44b31000}} {{x41300000 x426e0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush82 512 catmullrom {cc {f 2080} {px x41300000 {x44b4a000 x42e60000 x3d000000} {x44b36000 x42ee0000 x3d04000a} {x44b00000 x42f80000 x3cf7ffec} {x44b06000 x42f80000 x3ede7ff6} {x44b02000 x42f40000 x3d200000}}} {t {{x41300000 x44b1b333}} {{x41300000 x42f1999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush81 512 catmullrom {cc {f 2080} {px x41300000 {x44b48000 x43070000 x3cf0000d} {x44b4e000 x43050000 x3e2a0019} {x44b52000 x43020000 x3ea38002} {x44b4e000 x43050000 x3e82fff3} {x44b5c000 x42fc0000 x3e770004} {x44b5c000 x42f80000 0}}} {t {{x41300000 x44b52571}} {{x41300000 x43022ac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush80 512 catmullrom {cc {f 2080} {px x41300000 {x4470c000 x446a8000 x3d27fff9} {x44704000 x44690000 x3d67fff9}}} {t {{x41300000 x44708000}} {{x41300000 x4469c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush79 512 catmullrom {cc {f 2080} {px x41300000 {x446b4000 x44738000 x3d87fff9} {x446bc000 x44740000 x3e5effe3} {x446b0000 x44738000 x3bc0000b}}} {t {{x41300000 x446b5550}} {{x41300000 x4473aab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush78 512 catmullrom {cc {f 2080} {px x41300000 {x446d8000 x446f8000 x3d24000a} {x446f8000 x44704000 x3d47fff9} {x446d8000 x4470c000 x3e2e0008}}} {t {{x41300000 x446e2ab0}} {{x41300000 x44702ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush77 512 catmullrom {cc {f 2080} {px x41300000 {x446f0000 x4462c000 x3cf7ffec} {x446fc000 x445fc000 x3d33fffd} {x446e0000 x4463c000 x3e9e7ff6} {x446fc000 x4466c000 x3eaa8006} {x44704000 x44668000 x3ea80000} {x44698000 x446cc000 x3ea3ffef}}} {t {{x41300000 x446e6000}} {{x41300000 x44656000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush76 512 catmullrom {cc {f 2080} {px x41300000 {x44780000 x44648000 x3d0c0003} {x447b0000 x44624000 x3d1bfff6} {x447c0000 x44618000 x3da60002} {x447c0000 x44620000 x3e9d7ffa} {x44788000 x44610000 x3ecc7ffe} {x44780000 x44620000 x3ec1800a} {x44768000 x4463c000 x3ec0800f} {x44744000 x4462c000 x3e78fffc}}} {t {{x41300000 x4478c800}} {{x41300000 x44627800}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush75 512 catmullrom {cc {f 2080} {px x41300000 {x447ac000 x4455c000 x3cf0000d} {x447b8000 x44554000 x3d1bfff6} {x44794000 x44580000 x3e71fff8} {x44788000 x4459c000 x3e600000} {x44794000 x44594000 x3e6cffeb} {x447c0000 x44570000 x3e957ffa} {x447d0000 x44564000 x3e95000d} {x447c0000 x4456c000 x3e7afff3} {x447c0000 x44570000 x3e7effe3} {x447dc000 x44554000 x3eaafff3} {x447f8000 x44538000 x3ea57ffa} {x447ec000 x4454c000 x3e8e7ff6} {x447d4000 x44564000 x3e9d000d} {x447e4000 x4454c000 x3eb00000} {x44808000 x44528000 x3e8e0008}}} {t {{x41300000 x447c7333}} {{x41300000 x4456221d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush74 512 catmullrom {cc {f 2080} {px x41300000 {x4428c000 x44704000 x3d180007} {x4427c000 x4471c000 x3d380007} {x44270000 x44728000 x3e31001d} {x44270000 x4474c000 x3e530015}}} {t {{x41300000 x4427a000}} {{x41300000 x44725000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush73 512 catmullrom {cc {f 2080} {px x41300000 {x442dc000 x44644000 x3d1bfff6} {x44314000 x445ec000 x3d380007} {x4431c000 x445d8000 x3dfc0011} {x44348000 x44590000 x3e0cffeb} {x44340000 x44594000 x3d07fff9}}} {t {{x41300000 x4431d99a}} {{x41300000 x445d599a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush72 512 catmullrom {cc {f 2080} {px x41300000 {x44294000 x4468c000 x3d0ffff3} {x44260000 x44728000 x3d400000} {x4423c000 x447a4000 x3d70000d} {x44218000 x447b8000 x3e55000d} {x441e8000 x447c8000 x3e500000} {x441d8000 x44800000 x3e4e0008} {x441d8000 x447f4000 x3e6a0019} {x441d8000 x447ec000 0}}} {t {{x41300000 x44217000}} {{x41300000 x44797000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush71 512 catmullrom {cc {f 2080} {px x41300000 {x441d8000 x44768000 x3c800000} {x44204000 x44770000 x3d380007} {x44254000 x446b0000 x3e070004} {x44260000 x44704000 x3e31fff8} {x4427c000 x44600000 x3ec67ff6} {x4427c000 x44648000 x3ea77ff1} {x44270000 x44728000 x3ea70004} {x44278000 x44738000 x3ea80000} {x4429c000 x446a0000 x3ea77ff1} {x4429c000 x44648000 x3df40032}}} {t {{x41300000 x4425d99a}} {{x41300000 x446cf99a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush70 512 catmullrom {cc {f 2080} {px x41300000 {x44198000 x44780000 x3d180007} {x44190000 x44788000 x3d3bfff6} {x44180000 x447c0000 x3dd80022} {x44188000 x447c8000 x3e130015} {x441a4000 x447b0000 x3e6cffeb} {x441c8000 x44780000 x3e3a0019}}} {t {{x41300000 x4419a000}} {{x41300000 x447a0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush69 512 catmullrom {cc {f 2080} {px x41300000 {x440b8000 x447d4000 x3cf0000d} {x44084000 x447f4000 x3d0c0003} {x44044000 x4480c000 x3d7bfff6}}} {t {{x41300000 x44080000}} {{x41300000 x447f551f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush68 512 catmullrom {cc {f 2080} {px x41300000 {x441a0000 x445b4000 x3ce0001b} {x44174000 x44634000 x3d200000} {x44140000 x4467c000 x3ece0008} {x44138000 x4468c000 x3ecd7ffa} {x44114000 x446d8000 x3ec8fffc} {x44108000 x446e8000 x3ecc7ffe} {x440f8000 x446fc000 x3ecd000d} {x440ec000 x44740000 x3ec60008} {x440dc000 x44744000 x3ec1800a} {x440dc000 x44768000 x3eb1800a} {x440c8000 x447a4000 x3eb9800a} {x4409c000 x447dc000 x3ebafff3} {x4409c000 x447d0000 x3eb70004} {x440c0000 x4478c000 x3e5e0008}}} {t {{x41300000 x4410048b}} {{x41300000 x4470848b}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush67 512 catmullrom {cc {f 2080} {px x41300000 {x442c0000 x440dc000 x3e170004} {x442c0000 x440ec000 x3ee28006}}} {t {{x41300000 x442c0000}} {{x41300000 x440e4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush66 512 catmullrom {cc {f 2080} {px x41300000 {x44100000 x4428c000 x3d73fffd} {x440f8000 x4428c000 x3e7c0011} {x44100000 x4428c000 x3e8d000d}}} {t {{x41300000 x440fd550}} {{x41300000 x4428c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush65 512 catmullrom {cc {f 2080} {px x41300000 {x44134000 x440f8000 x3d9c0003} {x4412c000 x440f8000 x3eac0011} {x44114000 x44110000 x3ed00000} {x44110000 x44140000 x3ec70004} {x44100000 x44140000 x3ef28006}}} {t {{x41300000 x4411a666}} {{x41300000 x4411999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush64 512 catmullrom {cc {f 2080} {px x41300000 {x44070000 x43fe0000 x3d67fff9} {x44078000 x43fc0000 x3d8c0003} {x44080000 x43fe8000 x3e9c0011}}} {t {{x41300000 x44078000}} {{x41300000 x43fd8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush63 512 catmullrom {cc {f 2080} {px x41300000 {x441e0000 x43e30000 x3d180007} {x441d8000 x43e30000 x3d33fffd} {x441c8000 x43e38000 x3d920005} {x441ac000 x43e38000 x3ea67ff6} {x441a0000 x43e68000 x3f025ffa} {x44188000 x43e90000 x3f02dff8}}} {t {{x41300000 x441b8ab0}} {{x41300000 x43e4c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush62 512 catmullrom {cc {f 2080} {px x41300000 {x43d18000 x4403c000 x3d73fffd} {x43d18000 x44054000 x3e81800a}}} {t {{x41300000 x43d18000}} {{x41300000 x44048000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush61 512 catmullrom {cc {f 2080} {px x41300000 {x43c40000 x441e8000 x3d87fff9} {x43c70000 x441e0000 x3e0cffeb} {x43c60000 x441d8000 x3e730015}}} {t {{x41300000 x43c5aaa0}} {{x41300000 x441e0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush60 512 catmullrom {cc {f 2080} {px x41300000 {x43970000 x441c4000 x3d24000a} {x43980000 x441e8000 x3e4effe3}}} {t {{x41300000 x43978000}} {{x41300000 x441d6000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush59 512 catmullrom {cc {f 2080} {px x41300000 {x439c8000 x441bc000 x3d780007} {x439b0000 x441bc000 x3d87fff9} {x43980000 x441d8000 x3dc00000} {x43970000 x441c4000 x3eb70004}}} {t {{x41300000 x4399a000}} {{x41300000 x441c5000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush58 512 catmullrom {cc {f 2080} {px x41300000 {x43a30000 x44080000 x3d33fffd} {x43a10000 x4408c000 x3d5bfff6} {x43a20000 x44078000 x3ed9800a} {x43a20000 x4409c000 x3e4c0011}}} {t {{x41300000 x43a20000}} {{x41300000 x44088000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush57 512 catmullrom {cc {f 2080} {px x41300000 {x43900000 x43f08000 x3da20005} {x438e0000 x43f30000 x3e2e0008} {x438e0000 x43f40000 x3e55ffe7}}} {t {{x41300000 x438eaaa0}} {{x41300000 x43f28000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush56 512 catmullrom {cc {f 2080} {px x41300000 {x43420000 x4400c000 x3d89fffe} {x43410000 x44014000 x3d9dfffb} {x433b0000 x44020000 x3e4e0008} {x43380000 x44028000 x3ea9800a} {x43380000 x44020000 0}}} {t {{x41300000 x433c6666}} {{x41300000 x4401b333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush55 512 catmullrom {cc {f 2080} {px x41300000 {x43650000 x43e38000 x3df5ffe7} {x43630000 x43e48000 x3e8d000d} {x435f0000 x43e38000 x3ea5000d} {x435d0000 x43e78000 x3e5a0019} {x43630000 x43e68000 x3e9e7ff6} {x43630000 x43e48000 x3dcc0003}}} {t {{x41300000 x4361aac1}} {{x41300000 x43e50000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43010000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush54 512 catmullrom {cc {f 2080} {px x41300000 {x43c80000 x43b08000 x3e2afff3} {x43c70000 x43b18000 x3e82fff3}}} {t {{x41300000 x43c78000}} {{x41300000 x43b10000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x431c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush53 512 catmullrom {cc {f 2080} {px x41300000 {x43e90000 x439c8000 x3d780007} {x43ea0000 x439e8000 x3d83fffd} {x43ea0000 x439c8000 x3eb2fff3} {x43e68000 x439f8000 x3e95000d} {x43e68000 x43a40000 x3eb9800a} {x43e58000 x43a30000 x3cf0000d}}} {t {{x41300000 x43e7eaa0}} {{x41300000 x439faaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x431c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush52 512 catmullrom {cc {f 2080} {px x41300000 {x43ce0000 x43990000 x3d3bfff6} {x43cd0000 x439b0000 x3df80022} {x43cc8000 x43970000 x3ec80000} {x43cb8000 x43980000 x3eab8002} {x43ce0000 x43948000 x3ed2fff3} {x43ce0000 x43938000 x3ebb8002}}} {t {{x41300000 x43cd2aa0}} {{x41300000 x43972aa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x431c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush51 512 catmullrom {cc {f 2080} {px x41300000 {x43c28000 x43b50000 x3d3bfff6} {x43c38000 x43b30000 x3d53fffd}}} {t {{x41300000 x43c30000}} {{x41300000 x43b40000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x431c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush50 512 catmullrom {cc {f 2080} {px x41300000 {x4417c000 x42940000 x3d89fffe} {x44198000 x42940000 x3e08fffc} {x44114000 x42b80000 x3e730015} {x44114000 x42ce0000 x3c800000}}} {t {{x41300000 x4414f000}} {{x41300000 x42ab8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush49 512 catmullrom {cc {f 2080} {px x41300000 {x4427c000 x42180000 x3d47fff9} {x442e8000 x41600000 x3e15ffe7} {x44324000 x41b00000 x3e9a8006} {x4435c000 x41b80000 x3e977ff1} {x4436c000 x41300000 x3e9c0011} {x44388000 x41300000 x3e98800f} {x443a4000 x41100000 x3e98fffc}}} {t {{x41300000 x4433648b}} {{x41300000 x4192491d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush48 512 catmullrom {cc {f 2080} {px x41300000 {x441c4000 x42740000 x3d400000} {x441c8000 x42740000 x3da60002} {x441d8000 x429a0000 x3e530015} {x44234000 x431d0000 x3e8a8006} {x44234000 x43270000 x3e67ffde} {x44230000 x43340000 x3e07ffde} {x4423c000 x434f0000 x3e81fff8} {x44244000 x435a0000 x3e88fffc} {x44254000 x43630000 x3e8c7ffe} {x44270000 x437a0000 x3e90fffc}}} {t {{x41300000 x44220000}} {{x41300000 x43208000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush47 512 catmullrom {cc {f 2080} {px x41300000 {x441ec000 x422c0000 x3db9fffe} {x441e8000 x422c0000 x3e4c0011} {x441f4000 x42340000 x3e6a0019} {x44258000 x42b00000 x3e98fffc} {x442c4000 x43030000 x3ec1800a} {x44340000 x42e60000 x3eb0800f} {x44354000 x42d00000 x3eb1800a} {x44398000 x42fc0000 x3ead000d} {x4439c000 x42fc0000 x3eac7ffe} {x4435c000 x42d00000 x3eaf7ff1} {x44338000 x42bc0000 x3eb47ffe} {x4430c000 x42ac0000 x3eb60008} {x44330000 x42d40000 x3eb0fffc} {x4436c000 x430e0000 x3eaf7ff1} {x44380000 x43120000 x3eb2fff3} {x44350000 x42fc0000 x3eb8800f} {x4436c000 x43090000 x3eb77ff1} {x443c8000 x43380000 x3eb57ffa} {x44404000 x43480000 x3eb67ff6} {x443ec000 x43300000 x3eb77ff1} {x443d0000 x43240000 x3eb57ffa} {x443d0000 x43260000 x3eb80000} {x443fc000 x43440000 x3eb0fffc} {x44408000 x43560000 x3eac0011} {x44418000 x43580000 x3e630015} {x44450000 x436a0000 x3e4effe3} {x44460000 x436e0000 x3b40000b}}} {t {{x41300000 x443617ae}} {{x41300000 x430ae396}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e828f5c g x3e828f5c b x3e828f5c ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush46 512 catmullrom {cc {f 2080} {px x41300000 {x44294000 x437c0000 x3d33fffd} {x44270000 x43650000 x3d53fffd} {x44268000 x435d0000 x3ec8fffc} {x44260000 x436c0000 x3ec77ff1} {x4427c000 x43710000 x3ebf7ff1} {x44278000 x432b0000 x3ec47ffe}}} {t {{x41300000 x44275550}} {{x41300000 x43610000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush45 512 catmullrom {cc {f 2080} {px x41300000 {x443c8000 x43660000 x3e05000d} {x443e0000 x436e0000 x3e73ffef} {x443fc000 x436f0000 x3e8e7ff6} {x44350000 x435f0000 x3eb60008} {x4430c000 x434f0000 x3ecd000d} {x442dc000 x43440000 x3da20005}}} {t {{x41300000 x4437a000}} {{x41300000 x435e2ac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush44 512 catmullrom {cc {f 2080} {px x41300000 {x444b8000 x436c0000 x3d4c0003} {x444c4000 x43860000 x3d87fff9}}} {t {{x41300000 x444be000}} {{x41300000 x437c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush43 512 catmullrom {cc {f 2080} {px x41300000 {x44484000 x435f0000 x3d87fff9} {x444a0000 x43660000 x3e75000d} {x444b8000 x43770000 x3ebd000d}}} {t {{x41300000 x4449eab0}} {{x41300000 x4369553f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush42 512 catmullrom {cc {f 2080} {px x41300000 {x44268000 x42c20000 x3d0ffff3} {x44260000 x42ca0000 x3d4c0003} {x44260000 x42c60000 x3e90800f} {x442a8000 x428c0000 x3e9d7ffa} {x442a0000 x429e0000 x3f0be005} {x442a0000 x42f40000 x3f0d2008} {x442e4000 x42c60000 x3f186003} {x442b8000 x42be0000 x3f1edff8} {x442dc000 x43090000 x3f252008} {x44300000 x42e60000 x3f24e001} {x442b0000 x42bc0000 x3f286003} {x442cc000 x43000000 x3f2c9ff9} {x44338000 x43150000 x3f2be005} {x442f0000 x42d40000 x3f2be005} {x442e8000 x42d00000 x3f2c6003} {x44388000 x43100000 x3f28e001} {x443bc000 x43070000 x3f1c9ff9} {x44374000 x42c20000 x3f101ffb} {x4439c000 x42f20000 x3f0f6007} {x44418000 x432d0000 x3f0d5ffe} {x4444c000 x433f0000 x3f0ddffc} {x4442c000 x43320000 x3f0ddffc} {x44434000 x43320000 x3ec2fff3} {x44450000 x434f0000 x3ea9800a} {x44450000 x43510000 x3e857ffa} {x44468000 x435f0000 x3e838002} {x44470000 x43660000 x3d64000a}}} {t {{x41300000 x44351ed9}} {{x41300000 x4308553f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush41 512 catmullrom {cc {f 2080} {px x41300000 {x44060000 x42b00000 x3d2c0003} {x44068000 x42b40000 x3e1afff3} {x44080000 x429e0000 x3ed80000} {x44080000 x429a0000 x3efb8002} {x44044000 x42b80000 x3ef8fffc} {x44044000 x42b00000 x3f071fff} {x44070000 x42900000 x3f071fff} {x4405c000 x42b00000 x3f06dff8} {x44054000 x42dc0000 x3f0a2004} {x4409c000 x42ca0000 x3f192008} {x44108000 x42a60000 x3f179ffd}}} {t {{x41300000 x440762e1}} {{x41300000 x42b00000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush40 512 catmullrom {cc {f 2080} {px x41300000 {x43d18000 x43a68000 x3d47fff9} {x43d38000 x43a88000 x3e15ffe7} {x43d10000 x43a68000 x3f015ffe} {x43c60000 x439d8000 x3f146003} {x43cc8000 x43a10000 x3f215ffe} {x43db8000 x43900000 x3f252008} {x43df0000 x438a8000 x3f2be005} {x43df0000 x43870000 x3f2edff8} {x43e00000 x43850000 x3f2e2004} {x43e48000 x43770000 x3f189ff9}}} {t {{x41300000 x43d70ccd}} {{x41300000 x43956666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush39 512 catmullrom {cc {f 2080} {px x41300000 {x43d80000 x43c98000 x3d780007} {x43e20000 x43c50000 x3e91800a}}} {t {{x41300000 x43dd0000}} {{x41300000 x43c74000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush38 512 catmullrom {cc {f 2080} {px x41300000 {x43bf8000 x43ca8000 x3d53fffd} {x43bf0000 x43cf0000 x3e5afff3} {x43bd0000 x43cf0000 x3ea9fff8} {x43ba8000 x43d10000 x3ecf0004} {x43bd0000 x43d10000 x3f149ff9} {x43c28000 x43d10000 x3f17e005} {x43c40000 x43ce0000 x3f1c9ff9} {x43c88000 x43ce0000 x3f1c1ffb} {x43cf0000 x43cb8000 x3f0e2004} {x43d00000 x43cb8000 0}}} {t {{x41300000 x43c34ccd}} {{x41300000 x43ce4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush37 512 catmullrom {cc {f 2080} {px x41300000 {x43b78000 x4462c000 x3dc20005} {x43b60000 x44660000 x3eb1800a} {x43b40000 x4467c000 x3f162004}}} {t {{x41300000 x43b5d560}} {{x41300000 x44658000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush36 512 catmullrom {cc {f 2080} {px x41300000 {x43928000 x44530000 x3e31fff8} {x43920000 x44538000 x3ec77ff1} {x43900000 x44528000 x3f006003} {x43928000 x44530000 x3f06a002}}} {t {{x41300000 x4391c000}} {{x41300000 x44530000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush35 512 catmullrom {cc {f 2080} {px x41300000 {x43c38000 x4439c000 x3d70000d} {x43c18000 x443c0000 x3d800000} {x43c08000 x443e4000 x3eef7ff1} {x43b98000 x44420000 x3f195ffe} {x43b78000 x444b8000 x3ef47ffe} {x43bb0000 x444f8000 x3f012008} {x43b98000 x44504000 x3f165ffa} {x43b98000 x4455c000 x3f149ff9} {x43b68000 x44564000 x3d53fffd}}} {t {{x41300000 x43bbe396}} {{x41300000 x44489550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush34 512 catmullrom {cc {f 2080} {px x41300000 {x439f8000 x4435c000 x3dc3fffd} {x43a00000 x4435c000 x3e9d000d} {x439c8000 x4435c000 x3f02a002} {x439b0000 x44374000 x3e80fffc} {x439b0000 x4436c000 x3f10e001} {x43980000 x4435c000 x3f1ce001}}} {t {{x41300000 x439c5560}} {{x41300000 x44362ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush33 512 catmullrom {cc {f 2080} {px x41300000 {x43c28000 x441fc000 x3d87fff9} {x43c40000 x441f4000 x3e48fffc} {x43c50000 x441f4000 x3eeb8002} {x43c60000 x441f4000 x3f15a006} {x43c60000 x441fc000 x3f1a5ffa} {x43c60000 x4420c000 x3f1aa002} {x43c38000 x441fc000 x3ef8fffc}}} {t {{x41300000 x43c4b6e9}} {{x41300000 x441fadb2}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush32 512 catmullrom {cc {f 2080} {px x41300000 {x43980000 x44190000 x3d99fffe} {x43990000 x44198000 x3de00000} {x43958000 x441a4000 x3ea00000} {x43958000 x441b4000 x3ecc7ffe} {x43970000 x44190000 x3eff0004} {x43970000 x441a0000 x3efe7ff6} {x43970000 x441ac000 x3eed7ffa}}} {t {{x41300000 x43970000}} {{x41300000 x4419f6d9}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43430000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush31 512 catmullrom {cc {f 2080} {px x41300000 {x43a90000 x4404c000 x3db9fffe} {x43a90000 x44054000 x3e0effe3} {x43a90000 x44060000 x3eae7ff6} {x43a90000 x4403c000 x3ef8800f} {x43a58000 x44054000 x3eee7ff6} {x43a78000 x4405c000 x3ef8800f} {x43aa0000 x4404c000 x3d580007}}} {t {{x41300000 x43a86db2}} {{x41300000 x4405124e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x428e0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush30 512 catmullrom {cc {f 2080} {px x41300000 {x43ce0000 x44204000 x3d27fff9} {x43ce0000 x44210000 x3d780007} {x43cf0000 x441f4000 x3edafff3} {x43ce0000 x441e8000 x3ef47ffe} {x43c98000 x44218000 x3ef47ffe} {x43c98000 x44220000 x3f041ffb} {x43ca8000 x44204000 x3ef77ff1}}} {t {{x41300000 x43cc5b64}} {{x41300000 x4420648b}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x428e0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush29 512 catmullrom {cc {f 2080} {px x41300000 {x43968000 x441fc000 x3dadfffb} {x43970000 x441ec000 x3ece0008} {x43980000 x441f4000 x3ed28006} {x43980000 x441ec000 x3ee3ffef} {x439a0000 x441d0000 x3ef60008} {x439a0000 x441e8000 x3eea8006} {x439a0000 x441e0000 x3eb8800f}}} {t {{x41300000 x43988000}} {{x41300000 x441e924e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x428e0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush28 512 catmullrom {cc {f 2080} {px x41300000 {x43990000 x440f0000 x3de6002a} {x439b0000 x44110000 x3de6002a} {x43a20000 x440b8000 x3ec28006} {x43a10000 x440b0000 x3ecf7ff1} {x43a48000 x440a4000 x3ee9800a} {x43a10000 x440c0000 x3ef38002} {x43a00000 x440c8000 0}}} {t {{x41300000 x439f8000}} {{x41300000 x440cc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x422c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush27 512 catmullrom {cc {f 2080} {px x41300000 {x43cb8000 x4424c000 x3d73fffd} {x43c88000 x4423c000 x3d780007} {x43c88000 x4424c000 x3ea0fffc} {x43c60000 x441fc000 x3ede0008} {x43c60000 x44220000 x3ecc0011} {x43c60000 x44228000 x3e6effe3}}} {t {{x41300000 x43c7c000}} {{x41300000 x4422eab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x422c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush26 512 catmullrom {cc {f 2080} {px x41300000 {x43990000 x441f4000 x3d13fffd} {x43990000 x441fc000 x3d8c0003} {x43990000 x441f4000 x3e977ff1} {x43990000 x441ec000 x3ebd7ffa} {x439a0000 x441fc000 x3eb47ffe} {x439b0000 x441ec000 x3eb8800f} {x439b0000 x441e8000 0}}} {t {{x41300000 x4399b6e9}} {{x41300000 x441f248b}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x422c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush25 512 catmullrom {cc {f 2080} {px x41300000 {x44a28000 x44620000 x3ca7fff9} {x44a2e000 x44620000 x3d5bfff6} {x44a3c000 x44610000 x3dd1fff8} {x44a64000 x4467c000 x3e800000} {x44a72000 x446d8000 x3e82fff3}}} {t {{x41300000 x44a48000}} {{x41300000 x44654000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush24 512 catmullrom {cc {f 2080} {px x41300000 {x4487e000 x43920000 x3d1bfff6} {x448c0000 x43838000 x3d820005} {x448b8000 x43958000 x3e6a0019} {x448d8000 x43800000 x3e9b8002} {x448d4000 x43800000 x3e877ff1} {x448f6000 x43730000 x3e3a0019} {x44912000 x43650000 x3e380022}}} {t {{x41300000 x448cf23d}} {{x41300000 x43834917}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush23 512 catmullrom {cc {f 2080} {px x41300000 {x44830000 x43928000 x3d27fff9} {x44878000 x438d8000 x3d53fffd}}} {t {{x41300000 x44854000}} {{x41300000 x43900000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush22 512 catmullrom {cc {f 2080} {px x41300000 {x44778000 x43ae8000 x3cf0000d} {x4478c000 x43ab0000 x3d2c0003} {x447c0000 x43a58000 x3d400000} {x44800000 x43a30000 x3d380007} {x4481a000 x439e8000 x3d3bfff6}}} {t {{x41300000 x447cb333}} {{x41300000 x43a68000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush21 512 catmullrom {cc {f 2080} {px x41300000 {x446bc000 x43bc0000 x3d0ffff3} {x446c4000 x43bf0000 x3d380007} {x44740000 x43bd0000 x3e870004} {x4475c000 x43b20000 x3da7fff9}}} {t {{x41300000 x44707000}} {{x41300000 x43ba8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush20 512 catmullrom {cc {f 2080} {px x41300000 {x4444c000 x4431c000 x3d99fffe} {x444cc000 x44218000 x3e15ffe7}}} {t {{x41300000 x4448c000}} {{x41300000 x4429a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush19 512 catmullrom {cc {f 2080} {px x41300000 {x44866000 x44728000 x3d04000a} {x4487a000 x44714000 x3d27fff9} {x44856000 x446d8000 x3e80fffc} {x44800000 x446d8000 x3e9c0011} {x446f8000 x44728000 x3ea67ff6} {x446e8000 x4474c000 x3ea0800f} {x44660000 x446b0000 x3e977ff1} {x44570000 x44668000 x3e800000} {x444dc000 x44660000 x3e80fffc} {x444a8000 x44624000 x3dc00000} {x443d0000 x44564000 x3e2c0011} {x443ac000 x44538000 x3e45ffe7} {x443c8000 x44538000 x3e48fffc} {x443ac000 x444b8000 x3e45000d} {x443ac000 x44484000 0}}} {t {{x41300000 x445e1de3}} {{x41300000 x44634000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush18 512 catmullrom {cc {f 2080} {px x41300000 {x44d42000 x443c8000 x3d47fff9} {x44d40000 x44404000 x3e070004} {x44d06000 x44350000 x3ec2fff3} {x44ce6000 x44314000 x3e7c0011} {x44cb0000 x44340000 x3e900000}}} {t {{x41300000 x44d06000}} {{x41300000 x4437cccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush17 512 catmullrom {cc {f 2080} {px x41300000 {x44f54000 x4455c000 x3d0c0003} {x44f58000 x44564000 x3d4c0003} {x44f50000 x445b8000 x3e51001d} {x44f2c000 x44658000 x3ebe7ff6} {x44f16000 x446b0000 x3ec8fffc} {x44eb6000 x4466c000 x3ebd000d} {x44e80000 x44648000 x3eae7ff6} {x44e46000 x44644000 x3eb3ffef} {x44e1a000 x44610000 x3eb28006} {x44dda000 x44554000 x3eb3ffef} {x44dcc000 x44540000 x3e99800a} {x44dc0000 x44540000 x3c980007}}} {t {{x41300000 x44e9a28f}} {{x41300000 x445dd000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush16 512 catmullrom {cc {f 2080} {px x41300000 {x44f08000 x44060000 x3cf7ffec} {x44f1e000 x44228000 x3d70000d}}} {t {{x41300000 x44f13000}} {{x41300000 x44144000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush15 512 catmullrom {cc {f 2080} {px x41300000 {x44eae000 x43a40000 x3d33fffd} {x44ea0000 x43ab0000 x3d780007} {x44e8e000 x43b98000 x3e81fff8} {x44ec4000 x43ce0000 x3ec28006} {x44ef2000 x43d18000 x3eca8006} {x44f02000 x43fe0000 x3ec9fff8}}} {t {{x41300000 x44ec3571}} {{x41300000 x43c65560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush14 512 catmullrom {cc {f 2080} {px x41300000 {x44f14000 x426c0000 x3dc60002} {x44f14000 x42680000 x3e7afff3} {x44f1a000 x42240000 x3e9f0004} {x44f3a000 x40800000 x3ebd000d} {x44f38000 0 x3d83fffd}}} {t {{x41300000 x44f24000}} {{x41300000 x4201999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush13 512 catmullrom {cc {f 2080} {px x41300000 {x44ca4000 x43a48000 x3da9fffe} {x44f6e000 x435a0000 x3e870004} {x44f78000 x431b0000 x3e65000d}}} {t {{x41300000 x44e83571}} {{x41300000 x436a0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush12 512 catmullrom {cc {f 2080} {px x41300000 {x44c38000 x42ac0000 x3d0c0003} {x44c58000 x42180000 x3d580007}}} {t {{x41300000 x44c48000}} {{x41300000 x42780000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush11 512 catmullrom {cc {f 2080} {px x41300000 {x44a16000 x43f40000 x3d900000} {x44a24000 x43fc0000 x3e5cffeb} {x44b32000 x43e20000 x3ea1fff8} {x44bc6000 x43db8000 x3ea67ff6} {x44bac000 x43c08000 x3ead000d} {x44b7e000 x43bd0000 x3ea67ff6} {x44aea000 x43b50000 x3ea00000} {x44a8c000 x43970000 x3e71fff8} {x44b0a000 x438c8000 x3ea1fff8} {x44ba8000 x43800000 x3e9d000d} {x44b8c000 x436c0000 x3c980007} {x44ad4000 x43410000 x3d800000} {x44a7a000 x43440000 x3e2a0019} {x44a68000 x43750000 x3e5e0008} {x44a7a000 x436f0000 x3e58fffc} {x44ac6000 x43320000 x3e8d000d} {x44b06000 x432d0000 x3e7e0008} {x44bea000 x43050000 x3e330015} {x44bfc000 x42ea0000 x3e11001d} {x44c10000 x42d40000 x3db60002}}} {t {{x41300000 x44b19b33}} {{x41300000 x438d9333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush10 512 catmullrom {cc {f 2080} {px x41300000 {x44aca000 x44070000 x3d7bfff6} {x44abe000 x44028000 x3e2afff3} {x44aa6000 x43fe0000 x3dadfffb}}} {t {{x41300000 x44aba000}} {{x41300000 x4402d550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush9 512 catmullrom {cc {f 2080} {px x41300000 {x44974000 x441a4000 x3d820005} {x44974000 x441d0000 x3dd80022} {x44962000 x44220000 x3e1c0011} {x449ac000 x4430c000 x3e89fff8} {x449f8000 x44388000 x3e98800f} {x44a8c000 x44350000 x3ea0fffc} {x44ad8000 x4424c000 x3e9d7ffa}}} {t {{x41300000 x449e723d}} {{x41300000 x44289b75}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush8 512 catmullrom {cc {f 2080} {px x41300000 {x44378000 x44494000 x3da20005} {x443bc000 x44578000 x3e31001d}}} {t {{x41300000 x4439a000}} {{x41300000 x44506000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush7 512 catmullrom {cc {f 2080} {px x41300000 {x44564000 x43e20000 x3e3effe3} {x4463c000 x43ca8000 x3e91fff8}}} {t {{x41300000 x445d0000}} {{x41300000 x43d64000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush6 512 catmullrom {cc {f 2080} {px x41300000 {x442e4000 x445a4000 x3e5afff3} {x442f0000 x44590000 x3e65ffe7} {x443ac000 x44228000 x3e6c0011} {x443f4000 x43fa0000 x3ed1fff8} {x44420000 x43db8000 x3ec8fffc} {x44474000 x43b18000 x3ebd7ffa} {x4448c000 x43a40000 x3eb9fff8} {x44468000 x43a10000 x3d07fff9}}} {t {{x41300000 x443df800}} {{x41300000 x44077800}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush5 512 catmullrom {cc {f 2080} {px x41300000 {x4403c000 x446fc000 x3ccffff3} {x44018000 x44690000 x3e71001d} {x4403c000 x441e0000 x3edf7ff1} {x441ac000 x439f8000 x3f06dff8} {x4423c000 x43800000 x3eff0004} {x4427c000 x43510000 x3ee38002}}} {t {{x41300000 x44128ab0}} {{x41300000 x4409cab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush4 512 catmullrom {cc {f 2080} {px x41300000 {x43b50000 x4480e000 x3e61fff8} {x43ab0000 x4478c000 x3e860008} {x43a88000 x44740000 x3ee9fff8} {x439f8000 x44514000 x3ef2fff3} {x43b40000 x4404c000 x3f0adff8} {x43d48000 x43b20000 x3f195ffe} {x44038000 x43240000 x3f181ffb} {x440e4000 x42ca0000 x3f112008} {x441ac000 xc0800000 x3f089ff9} {x44244000 xc2440000 x3ee5000d} {x442a8000 xc2980000 x3e5e0008}}} {t {{x41300000 x43ec45c3}} {{x41300000 x43dd0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush3 512 catmullrom {cc {f 2080} {px x41300000 {x43240000 x4400c000 x3e100000} {x43460000 x43d28000 x3e41001d} {x43b40000 x43140000 x3e99800a} {x43ce0000 x426c0000 x3ece7ff6} {x43e78000 xc1500000 x3ed80000}}} {t {{x41300000 x439fb333}} {{x41300000 x43620000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush2 512 catmullrom {cc {f 2080} {px x41300000 {x430e0000 x44866000 x3d44000a} {x43100000 x4486c000 x3e3cffeb} {x43120000 x44868000 x3e838002} {x43100000 x44832000 x3ea0fffc} {x43020000 x445dc000 x3ed9800a} {x430c0000 x443d0000 x3f0d2008} {x43170000 x4431c000 x3f131fff} {x437a0000 x43ef8000 x3f149ff9} {x43ad0000 x439a0000 x3f1c9ff9} {x43e58000 x43050000 x3f1e2004} {x43e90000 x42ea0000 x3f1a5ffa} {x43f58000 x428c0000 x3f1a2004} {x440f8000 xc1500000 x3f17e005} {x441a0000 xc2440000 x3f0ddffc} {x44278000 xc2b00000 x3f041ffb} {x442b0000 xc2ca0000 x3ec67ff6}}} {t {{x41300000 x43ad87f0}} {{x41300000 x43ea0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {px x41300000 {x42b40000 x4478c000 x3d4c0003} {x42b80000 x44788000 x3e1c0011} {x42b80000 x44634000 x3ebb8002} {x42940000 x44418000 x3ef57ffa} {x42480000 x44068000 x3f086003} {x426c0000 x43e48000 x3f181ffb} {x42b40000 x43970000 x3f18e001} {x42d40000 x43730000 x3f1da006} {x43020000 x42f80000 x3f1d5ffe} {x43030000 x42860000 x3f1be005} {x431e0000 xc0e00000 x3f1b9ffd} {x43320000 xc2480000 x3f18e001} {x43630000 xc2ca0000 x3f181ffb} {x43660000 xc2d40000 x3cb0000d}}} {t {{x41300000 x42f3dba6}} {{x41300000 x43b78917}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3dd70a3d g x3dd70a3d b x3dd70a3d ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x43f40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}}}}}} toolbox {selectAll { { selectAll bs 151 src 1 str 1 ssx 1 ssy 1 sf 1 ep1 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createOpenSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush r 0.39 g 0.39 b 0.39 opc 0.3 bs 49 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 11 ltm 11 ltt 0 tt 14 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur bs 139 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 11 ltm 11 tt 20 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear bs 151 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 11 ltm 11 ltt 0 tt 25 } } } toolbar_brush_size 151 toolbar_brush_hardness 0.200000003 toolbar_lifetime_start 11 toolbar_lifetime_end 11 toolbar_effect_parameter1 1 toolbar_paint_source fg toolbar_source_transform_scale {1 1} toolbar_source_transform_center {960 540} color {0.2450000048 0.2450000048 0.2450000048 1} colorOverlay {0 0 0 0} opacity 0.3000000119 lifetime_type "all frames" lifetime_start 11 lifetime_end 11 motionblur_on true brush_size 83 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_translate_round false source_black_outside true name RotoPaint6 xpos 2100 ypos 14820 disable {{parent.RotoPaint5.disable}} } FrameHold { name FrameHold1 xpos 2100 ypos 14875 } Noise { inputs 0 size 7.6 center {960 540} name Noise3 xpos 2398 ypos 14787 } Noise { inputs 0 size 185 center {960 540} name Noise1 xpos 2398 ypos 14749 } push $Ne1809000 RotoPaint { cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 0} {t x44700000 x44070000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush213 512 catmullrom {cc {f 2080} {px x42780000 {x42c40000 x44150000 1} {x42880000 x44168000 x3ef53d4f} {x41b00000 x44198000 x3f25a96a} {x42000000 x44198000 x3f29ea7b} {x42c80000 x44150000 x3f39ee7c} {x43200000 x44110000 x3f43b0ec} {x43cd0000 x44008000 x3f51344d} {x44460000 x43d40000 x3f5af6be} {x445a0000 x43cb0000 x3f5ab6ae} {x44888000 x43ae0000 x3f3f6fdc} {x448fc000 x43980000 x3e703c0f}}} {tx x42780000 x43da0000 x43fe745d} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush212 512 catmullrom {cc {f 2080} {px x42780000 {xc2a80000 x43f50000 1} {xc28c0000 x43f50000 x3ef83e10} {xc2400000 x43f50000 x3efdbf70} {x42a80000 x43ec0000 x3f14e539} {x43120000 x43e80000 x3f23a8ea} {x43910000 x43dc0000 x3f41304c} {x43de0000 x43d00000 x3f5334cd} {x443a0000 x43b60000 x3f62789e} {x44490000 x43b00000 x3f62789e} {x44710000 x43970000 x3f44310c} {x447c8000 x438c0000 0}}} {tx x42780000 x43c2ba2f x43cf45d1} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush211 512 catmullrom {cc {f 2080} {px x42780000 {x42600000 x43d90000 1} {x43100000 x43cc0000 x3f24691a} {x43780000 x43c50000 x3f3feffc} {x439a0000 x43c20000 x3f4b32cd} {x440f0000 x43bc0000 x3f5a368e} {x44420000 x43bc0000 x3f30ec3b} {x444d0000 x43bf0000 0}}} {tx x42780000 x43d0db6e x43c50000} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush210 512 catmullrom {cc {f 2080} {px x42780000 {x44038000 x43820000 1} {x43fa0000 x437c0000 x3f0f23c9} {x43cd0000 x435c0000 x3f18a62a} {x43ba0000 x43500000 x3f1de77a} {x43910000 x433c0000 x3f2aaaab} {x42f00000 x430c0000 x3f3b6edc} {x42a40000 x43000000 x3f3d2f4c} {xc1a00000 x42c80000 x3f24a92a} {xc2080000 x42d40000 0}}} {tx x42780000 x43798e39 x43320000} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush209 512 catmullrom {cc {f 2080} {px x42780000 {x44c8c000 x445d0000 1} {x44ca0000 x44600000 x3ec0300c} {x44ca0000 x44608000 x3ed5354d} {x44c58000 x445d8000 x3f1765d9} {x44b9c000 x44500000 x3f2a2a8b} {x44a1c000 x44308000 x3f41705c} {x449a0000 x44258000 x3f46318c} {x44690000 x43eb0000 x3f4df37d} {x44288000 x43940000 x3f50b42d} {x441b0000 x43830000 x3f51745d} {x43fb0000 x43320000 x3f4bb2ed} {x44060000 x43380000 x3e8d2349}}} {tx x42780000 x448ea555 x44150aab} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush208 512 catmullrom {cc {f 2080} {px x42780000 {x44dac000 x446c0000 1} {x44d80000 x446a0000 x3efebfb0} {x44d18000 x44660000 x3f0721c8} {x44cd8000 x44630000 x3f18661a} {x44c20000 x445b0000 x3f386e1c} {x44ba8000 x44558000 x3f41b06c} {x449c8000 x443d0000 x3f5c771e} {x444f0000 x440b0000 x3f6dbb6f} {x44368000 x43fc0000 x3f6e3b8f} {x43d00000 x43a70000 x3f5ef7be} {x438c0000 x437a0000 x3f0ee3b9} {x43890000 x43720000 0}}} {tx x42780000 x448de555 x44285555} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush207 512 catmullrom {cc {f 2080} {px x42780000 {x440a8000 x44608000 1} {x44120000 x44648000 x3f14a529} {x44420000 x44738000 x3f24290a} {x44528000 x44770000 x3f372dcb} {x44884000 x44810000 x3f55755d} {x44a78000 x44858000 x3f57f5fd} {x44c1c000 x44878000 x3f396e5c} {x44c50000 x44880000 x3f1da76a} {x44c7c000 x44880000 0}}} {tx x42780000 x4489a38e x447db8e4} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush206 512 catmullrom {cc {f 2080} {px x42780000 {x43480000 x443e0000 1} {x43240000 x443d8000 x3f06e1b8} {x42d00000 x443d0000 x3ee9ba6f} {x42c40000 x443d8000 x3f106419} {x42ec0000 x44428000 x3f2769da} {x434e0000 x444b8000 x3f36edbb} {x44060000 x44630000 x3f42f0bc} {x441f8000 x44680000 x3f4af2bd} {x4486c000 x447c0000 x3f5ff7fe} {x44bbc000 x44824000 x3f4f33cd} {x44c14000 x44824000 x3f3cef3c} {x44c58000 x44818000 x3f18a62a} {x44c74000 x44808000 0}}} {tx x42780000 x443413b1 x445f6276} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush205 512 catmullrom {cc {f 2080} {px x42780000 {x42d00000 x445a8000 1} {x43200000 x445a8000 1} {x43680000 x445a8000 x3edfb7ee} {x43cb0000 x445a8000 x3f106419} {x43fb0000 x445a8000 x3f1ea7aa} {x442c0000 x445a8000 x3f20a82a} {x44550000 x44588000 0}}} {tx x42780000 x43d24925 x445a36db} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush204 512 catmullrom {cc {f 2080} {px x42780000 {xc3480000 x445e0000 1} {xc36c0000 x445d8000 x3ee2388e} {xc3620000 x445d8000 x3f05a168} {xc3260000 x445d8000 x3f1364d9} {xc2f00000 x445d8000 x3f1a268a} {xc2700000 x445d8000 x3f20280a} {x41000000 x445e0000 x3f2beafb} {x42ac0000 x445e8000 x3f346d1b} {x43280000 x44600000 x3f3b6edc} {x437a0000 x44608000 x3f44f13c} {x43f60000 x44638000 x3f4eb3ad} {x442e8000 x44640000 x3f2b6adb} {x44338000 x44648000 x3f08a229} {x44348000 x44648000 0}}} {tx x42780000 x43186db7 x445fedb7} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush203 512 catmullrom {cc {f 2080} {px x42780000 {x43940000 x44438000 x3e46318c} {x438e0000 x44480000 x3e46318c} {x43890000 x444d0000 x3e812048} {x43880000 x444f8000 x3ea0280a} {x43880000 x44550000 x3ec9324d} {x438a0000 x44590000 x3f006018} {x43900000 x445a8000 x3f0de379} {x43c00000 x44550000 x3f35ed7b} {x44038000 x443e0000 x3f3b2ecc} {x441a0000 x44318000 x3eeebbaf} {x441c8000 x44310000 x3e89a269}}} {tx x42780000 x43bb0000 x444945d1} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush202 512 catmullrom {cc {f 2080} {px x42780000 {x44230000 x444a0000 1} {x44200000 x444b0000 x3e693a4f} {x44198000 x444c8000 x3e22288a} {x44158000 x444c8000 0}}} {tx x42780000 x441c8000 x444b8000} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush201 512 catmullrom {cc {f 2080} {px x42780000 {x43880000 x43b90000 1} {x43830000 x43b90000 x3ef33ccf} {x43830000 x43ba0000 x3ee7b9ee} {x43c00000 x43dd0000 x3f0e6399} {x44060000 x43fe0000 x3f2368da} {x44610000 x44220000 x3f39ae6c} {x44760000 x442a0000 x3f39ae6c} {x44934000 x44380000 x3e49324d}}} {tx x42780000 x44155000 x4400f000} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush200 512 catmullrom {cc {f 2080} {px x42780000 {x43b60000 x43620000 1} {x43a30000 x435a0000 x3f35ad6b} {x43920000 x43600000 x3f362d8b} {x43a40000 x43830000 x3f3a2e8c} {x44100000 x43cc0000 x3f3c6f1c} {x44250000 x43e30000 x3f3c2f0c} {x44800000 x441d0000 x3f3caf2c} {x44a38000 x443a0000 x3f1f27ca} {x44a80000 x443d8000 x3efebfb0} {x44aac000 x443f8000 0}}} {tx x42780000 x443db333 x43ea6666} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush199 512 catmullrom {cc {f 2080} {px x42780000 {x43880000 x43080000 1} {x43780000 x43040000 1} {x435c0000 x43040000 x3f2deb7b} {x43720000 x43120000 x3f2fabeb} {x43c20000 x43660000 x3f322c8b} {x44200000 x43b30000 x3f2e2b8b} {x44814000 x44068000 x3f312c4b} {x448d0000 x440f8000 x3f2e2b8b} {x44a9c000 x44258000 x3ea1a86a} {x44ac0000 x44260000 0}}} {tx x42780000 x442ca666 x43b2999a} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush198 512 catmullrom {cc {f 2080} {px x42780000 {x44970000 x43880000 1} {x44944000 x43840000 x3e4d334d} {x448c0000 x43740000 x3e85a168} {x44860000 x43680000 x3ea5a96a} {x446c8000 x434a0000 x3efbbef0} {x445a0000 x43380000 x3f11e479} {x44308000 x430e0000 x3f2769da} {x44198000 x42ec0000 x3f34ed3b} {x43740000 x41c00000 x3f5d374e} {x432a0000 x41000000 x3f62789e} {xc2600000 xc2480000 x3f69ba6f} {xc2e00000 xc2780000 x3f687a1f} {xc1a00000 xc1d00000 x3f25695a} {x41c00000 xc1400000 x3efebfb0} {x42900000 x40800000 0}}} {tx x42780000 x4406199a x42cdddde} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush197 512 catmullrom {cc {f 2080} {px x42780000 {x44650000 x43320000 1} {x44580000 x432a0000 x3eb0ac2b} {x44400000 x43180000 x3eb12c4b} {x44350000 x43100000 x3ebfafec} {x441f8000 x42f80000 x3eedbb6f} {x44158000 x42e80000 x3f01a068} {x44020000 x42c40000 x3f14a529} {x43f40000 x42b80000 x3f18a62a} {x43c10000 x42a00000 x3f152549} {x43ba0000 x42a00000 x3f106419} {x43b60000 x42a80000 x3efcbf30} {x43cd0000 x42c40000 0}}} {tx x42780000 x4412d555 x42ec0000} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush196 512 catmullrom {cc {f 2080} {px x42780000 {x44bbc000 x43bb0000 1} {x44bb0000 x43b90000 x3f056158} {x44bd8000 x43970000 x3f326c9b} {x44c10000 x436c0000 x3f41705c} {x44c88000 x42d00000 x3f50b42d} {x44ce8000 x41a00000 x3f58761e} {x44d00000 x40800000 x3f57b5ed} {x44d34000 xc1400000 x3f396e5c} {x44d1c000 x41600000 x3e773dcf}}} {tx x42780000 x44c74000 x431ce38e} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush195 512 catmullrom {cc {f 2080} {px x42780000 {x44c2c000 x438f0000 x3f17e5f9} {x44c20000 x43840000 1} {x44c30000 x43780000 x3f17e5f9} {x44c94000 x433e0000 x3f34ed3b} {x44ce8000 x43180000 x3f44310c} {x44d38000 x42ec0000 x3f48320d} {x44d58000 x42d00000 x3f48721d} {x44db8000 x42800000 x3f3eefbc} {x44dc4000 x42900000 x3eeabaaf} {x44dac000 x42a40000 0}}} {tx x42780000 x44cf8000 x431e0000} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush194 512 catmullrom {cc {f 2080} {px x42780000 {x44cd4000 x43cc0000 1} {x44cd4000 x43c70000 1} {x44cf4000 x43b90000 x3ed1344d} {x44d1c000 x43b00000 x3f00e038} {x44d78000 x43a00000 x3f1e679a} {x44db0000 x43970000 x3f286a1b} {x44e5c000 x43800000 x3f39ee7c} {x44f20000 x434a0000 x3f3cef3c} {x44f44000 x43300000 x3f09a269} {x44f04000 x43360000 0}}} {tx x42780000 x44ddd333 x43944ccd} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush193 512 catmullrom {cc {f 2080} {px x42780000 {x44c80000 x44020000 1} {x44c90000 x44020000 x3ec2b0ac} {x44ca4000 x44020000 x3ec5314c} {x44cdc000 x44020000 x3f026098} {x44d20000 x44020000 x3f1fa7ea} {x44d48000 x44010000 x3f2a2a8b} {x44dd0000 x43ea0000 x3f3def7c} {x44e68000 x43bf0000 x3f40300c} {x44e8c000 x43b30000 x3f3d2f4c} {x44ef0000 x43970000 x3f2368da} {x44f18000 x43920000 x3f13a4e9} {x44f58000 x43900000 0}}} {tx x42780000 x44dc2555 x43d8eaab} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush192 512 catmullrom {cc {f 2080} {px x42780000 {x44a08000 x43ad0000 1} {x449f4000 x43ac0000 x3f19264a} {x449ec000 x43ac0000 x3f086219} {x44a0c000 x43b20000 x3ef43d0f} {x44b2c000 x43d10000 x3f046118} {x44c1c000 x43e60000 x3f06e1b8} {x44c94000 x43f20000 x3f0da369} {x44e40000 x440a8000 x3f19665a} {x44f34000 x44150000 x3f0761d8} {x44f48000 x44170000 0}}} {tx x42780000 x44c0e000 x43e14ccd} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush191 512 catmullrom {cc {f 2080} {px x42780000 {x44a38000 x43ba0000 x3e0a2289} {x449d0000 x43b00000 x3e162589} {x448b4000 x43960000 x3ea9aa6b} {x44870000 x43900000 x3ec7b1ec} {x44840000 x438c0000 x3ee6398e} {x44828000 x438a0000 x3efb3ed0} {x44898000 x43920000 x3ee739ce} {x448c8000 x43960000 x3ed5b56d} {x449b8000 x43aa0000 x3ea92a4b} {x44ac0000 x43c20000 x3ef6bdaf} {x44b0c000 x43ca0000 x3f0c6319} {x44c88000 x43ec0000 x3f2d6b5b} {x44e54000 x440b0000 x3f2ceb3b} {x44ed0000 x44100000 x3f28aa2b} {x45010000 x441b0000 x3f0da369} {x4501a000 x441b0000 0}}} {tx x42780000 x44b07800 x43c92000} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush190 512 catmullrom {cc {f 2080} {px x42780000 {x44460000 x439a0000 x3eddb76e} {x44450000 x43950000 1} {x44430000 x43910000 x3edf37ce} {x44428000 x43880000 x3f1be6fa} {x44588000 x43980000 x3f27e9fa} {x44668000 x43a30000 x3f27e9fa} {x44988000 x43d90000 x3f20a82a} {x44bc0000 x44018000 x3f20681a} {x44c30000 x44050000 x3f1de77a} {x44d18000 x440b0000 x3f05a168} {x44d24000 x44090000 x3eaf2bcb} {x44d0c000 x44048000 0}}} {tx x42780000 x44945000 x43ccd555} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush189 512 catmullrom {cc {f 2080} {px x42780000 {x44b88000 x443a0000 1} {x44bb8000 x443c8000 x3eac2b0b} {x44bcc000 x443d8000 x3ed9b66e} {x44bc8000 x443d8000 x3f0de379} {x44bb8000 x443c8000 x3f106419} {x44ae8000 x44310000 x3f14a529} {x44948000 x44160000 x3f18661a} {x448c0000 x440d0000 x3f1b26ca} {x44548000 x43d10000 x3f2aeabb} {x44258000 x43960000 x3f1d675a} {x441e8000 x438e0000 x3f16a5a9} {x44138000 x43820000 x3ebd2f4c} {x44230000 x43920000 x3e87a1e8} {x442f0000 x43a00000 0}}} {tx x42780000 x44887b6e x44062db7} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush188 512 catmullrom {cc {f 2080} {px x42780000 {x44a28000 x44230000 1} {x44a40000 x442a8000 x3ea5a96a} {x44a58000 x442d0000 x3ea9aa6b} {x44a90000 x44310000 x3ead2b4b} {x44ad8000 x44350000 x3ead2b4b} {x44b6c000 x443a8000 x3ea1284a} {x44b90000 x443c0000 x3e9fa7ea} {x44c18000 x44408000 x3ea1284a} {x44c48000 x44438000 x3ead2b4b} {x44bf0000 x44420000 x3ed1344d} {x44bbc000 x44400000 x3ed2348d} {x44a68000 x44300000 x3ed2b4ad} {x4485c000 x44158000 x3ec4b12c} {x44770000 x440e0000 x3ec6b1ac} {x44318000 x43eb0000 x3ed334cd} {x441a0000 x43da0000 0}}} {tx x42780000 x44a00800 x44293000} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush187 512 catmullrom {cc {f 2080} {px x42780000 {x44668000 x43d00000 1} {x44668000 x43d30000 x3f02e0b8} {x44680000 x43d80000 x3eceb3ad} {x44848000 x43eb0000 x3e753d4f} {x44904000 x43f70000 x3e703c0f} {x449b8000 x44010000 x3e703c0f} {x44a00000 x44038000 x3e4b32cd}}} {tx x42780000 x44861b6e x43ea0000} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush186 512 catmullrom {cc {f 2080} {px x42780000 {x443f8000 x43c50000 1} {x44390000 x43c00000 x3e7d3f50} {x44308000 x43ba0000 x3eb92e4c} {x442e8000 x43b80000 x3ed2b4ad} {x442d8000 x43b40000 x3ef93e50} {x44360000 x43b00000 x3f0da369} {x44490000 x43ae0000 x3f06a1a8} {x444f0000 x43af0000 x3eeebbaf} {x44650000 x43b40000 x3dc6318c} {x446c8000 x43b30000 x3e3f2fcc} {x446d0000 x43b00000 x3e7d3f50} {x44728000 x43a60000 x3ec6b1ac} {x44820000 x43a30000 x3ee83a0f} {x44850000 x43a30000 x3ee3b8ee} {x448cc000 x43a90000 0}}} {tx x42780000 x44583bbc x43b15555} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush185 512 catmullrom {cc {f 2080} {px x42780000 {x44140000 x43c50000 1} {x44198000 x43ca0000 x3ee0b82e} {x443a0000 x43de0000 x3ef5bd6f} {x44498000 x43e60000 x3f0e2389} {x446f0000 x43fb0000 x3f296a5b} {x449ec000 x440f8000 x3f352d4b} {x44bb8000 x44180000 x3eb4ad2b} {x44bec000 x44180000 x3e3e2f8c}}} {tx x42780000 x447a4000 x43f9a000} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush184 512 catmullrom {cc {f 2080} {px x42780000 {x44068000 x43ad0000 x3e2d2b4b} {x44030000 x43aa0000 x3ead2b4b} {x44010000 x43a90000 x3ec6b1ac} {x44070000 x43b20000 x3eefbbef} {x440e0000 x43b90000 x3efdbf70} {x44228000 x43cc0000 x3f06a1a8} {x442f0000 x43d70000 x3f09e279} {x445f0000 x43fa0000 x3f25294a} {x44708000 x44020000 x3f2769da} {x44938000 x440f8000 x3ec6b1ac}}} {tx x42780000 x4430c000 x43d1199a} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush183 512 catmullrom {cc {f 2080} {px x42780000 {x43b00000 x438c0000 x3e6739ce} {x43c20000 x43980000 x3e8320c8} {x43fd0000 x43b80000 x3ee2b8ae} {x441b8000 x43d20000 x3effbff0} {x442b0000 x43e00000 x3f05e178} {x44498000 x43f80000 x3eea3a8f} {x44580000 x44018000 0}}} {tx x42780000 x4416c925 x43ca6db7} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush182 512 catmullrom {cc {f 2080} {px x42780000 {x43ef0000 x44030000 x3e3f2fcc} {x43ec0000 x43f70000 x3eb0ac2b} {x43e80000 x43e30000 x3ed735cd} {x43e40000 x43d60000 x3eecbb2f} {x43e00000 x43c70000 x3f0a2289} {x43da0000 x43ba0000 1} {x43be0000 x43840000 x3f1f27ca} {x43a80000 x43440000 x3f1ce73a} {x43a70000 x433e0000 x3f112449} {x43a40000 x43380000 0}}} {tx x42780000 x43ce999a x43af3333} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush181 512 catmullrom {cc {f 2080} {px x42780000 {x44020000 x44128000 x3dc8320d} {x44010000 x44120000 x3e46318c} {x43fe0000 x44100000 x3e733ccf} {x43fd0000 x440f0000 x3e8ca329} {x43fb0000 x440c8000 x3ea4290a} {x43f70000 x44098000 x3eb5ad6b} {x43ec0000 x43fd0000 x3ee1384e} {x43e80000 x43f40000 x3eef3bcf} {x43d00000 x43c20000 x3f0e2389} {x43b40000 x43980000 x3f122489} {x43b00000 x43940000 x3f0ba2e9} {x43af0000 x438f0000 0}}} {tx x42780000 x43e38000 x43ed6aab} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush180 512 catmullrom {cc {f 2080} {px x42780000 {x44310000 x443e0000 1} {x44318000 x443e0000 x3e693a4f} {x44318000 x443f0000 x3e902409} {x44318000 x443e0000 x3e9f27ca} {x44300000 x443a0000 x3eb12c4b} {x442b0000 x44308000 x3ed1344d} {x44270000 x442a0000 x3ee2b8ae} {x440f0000 x44030000 x3f13e4f9} {x43dd0000 x43ac0000 x3f21685a} {x43a60000 x43400000 x3f1b26ca} {x439e0000 x43280000 x3f15a569} {x43980000 x43180000 x3f102409} {x43960000 x43080000 x3e87a1e8}}} {tx x42780000 x4409b13b x4400a762} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush179 512 catmullrom {cc {f 2080} {px x42780000 {x44400000 x44458000 1} {x443e0000 x44428000 x3e713c4f} {x443c0000 x443f0000 x3e91a469} {x44310000 x442e0000 x3ec7b1ec} {x44260000 x441d0000 x3ee0b82e} {x441f0000 x44138000 x3ef53d4f} {x440f0000 x43fa0000 x3f06e1b8} {x43d20000 x43960000 x3f0c6319} {x43bf0000 x43800000 x3f0be2f9} {x43950000 x430e0000 x3eeabaaf} {x43900000 x42ec0000 0}}} {tx x42780000 x440e0000 x43fcd174} {a r 0 g 0 b 0 ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush178 512 catmullrom {cc {f 2080} {px x42780000 {xc44f8000 x44510000 x3ec1b06c}}} {tx x42780000 xc44f8000 x44510000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush177 512 catmullrom {cc {f 2080} {px x42780000 {x42f40000 x434c0000 1} {x42ec0000 x434e0000 x3de4390e} {x42c40000 x43500000 x3e82a0a8} {x42ac0000 x43540000 x3ea2a8aa} {x42a80000 x43540000 x3eb0ac2b} {x42bc0000 x43560000 x3ed735cd} {x435a0000 x43700000 x3edf37ce} {x43840000 x437a0000 x3edf37ce} {x43e30000 x43910000 x3dca328d}}} {tx x42780000 x432ae38e x436238e4} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush176 512 catmullrom {cc {f 2080} {px x42780000 {x435c0000 x42780000 1} {x43780000 x428c0000 x3e292a4b} {x438a0000 x42980000 x3e44310c} {x43cc0000 x42d00000 x3e6a3a8f}}} {tx x42780000 x43900000 x429c0000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush175 512 catmullrom {cc {f 2080} {px x42780000 {x43380000 x43360000 1} {x43380000 x43320000 x3e8fa3e9} {x433e0000 x430c0000 x3ea2a8aa} {x433e0000 x42e80000 x3ea7a9ea} {x433e0000 x41d00000 x3eadab6b} {x43380000 xc2800000 x3eb2acab} {x43340000 xc3140000 x3d0c2309}}} {tx x42780000 x433a0000 x4275b6db} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush174 512 catmullrom {cc {f 2080} {px x42780000 {x43240000 x42680000 1} {x43240000 x42700000 x3e312c4b} {x43200000 x42700000 x3e52348d} {x431e0000 x42700000 x3e5e378e} {x431c0000 x42700000 x3e6a3a8f} {x431a0000 x42680000 x3e743d0f} {x43100000 x42480000 x3e8721c8} {x42e80000 x42080000 x3e8721c8} {x42dc0000 x41e00000 x3e773dcf} {x42d40000 x41d00000 x3e44310c} {x42d00000 x41b00000 0}}} {tx x42780000 x430ba2e9 x423ba2e9} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush173 512 catmullrom {cc {f 2080} {px x42780000 {x44e8c000 x43ee0000 x3cf03c0f} {x44e90000 x43ee0000 x3e58360e} {x44ea0000 x43ec0000 x3e812048} {x44ec8000 x43e90000 x3e98260a} {x44ef0000 x43e40000 x3e9a268a} {x44f10000 x43e30000 x3e96a5a9} {x44f40000 x43e20000 x3dfc3f10}}} {tx x42780000 x44ed2db7 x43e84925} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush172 512 catmullrom {cc {f 2080} {px x42780000 {x44e38000 x43980000 1} {x44e48000 x439d0000 x3e91a469} {x44e60000 x43a00000 x3e912449} {x44e98000 x43a60000 x3e2a2a8b} {x44ed8000 x43ae0000 x3da6298a}}} {tx x42780000 x44e76666 x43a1cccd} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush171 512 catmullrom {cc {f 2080} {px x42780000 {x44b20000 x42b80000 1} {x44b24000 x42b80000 x3ea1a86a} {x44b38000 x42b00000 x3ea6a9aa} {x44b50000 x42b00000 x3eaa2a8b} {x44ba4000 x42a80000 x3ea6a9aa} {x44bb8000 x42a40000 x3e9aa6aa} {x44bcc000 x42a00000 0}}} {tx x42780000 x44b6c000 x42ad2492} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush170 512 catmullrom {cc {f 2080} {px x42780000 {x447e0000 x42680000 1} {x44814000 x42700000 x3eacab2b} {x44918000 x42a80000 x3eb0ac2b} {x449c8000 x42c40000 x3eb8ae2c} {x44adc000 x42ec0000 x3e52348d}}} {tx x42780000 x44926666 x42a73333} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush169 512 catmullrom {cc {f 2080} {px x42780000 {x44650000 x42480000 1} {x44648000 x42380000 x3ce0380e}}} {tx x42780000 x4464c000 x42400000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush168 512 catmullrom {cc {f 2080} {px x42780000 {x44728000 x42900000 1} {x446d8000 x42800000 0}}} {tx x42780000 x44700000 x42880000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush167 512 catmullrom {cc {f 2080} {px x42780000 {x449d8000 x43360000 1} {x44a0c000 x433e0000 x3e4f33cd} {x44a50000 x43440000 x3e54350d} {x44ba8000 x43740000 x3eba2e8c} {x44c48000 x43840000 x3ea92a4b} {x44c7c000 x43890000 0}}} {tx x42780000 x44b1aaab x43610000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush166 512 catmullrom {cc {f 2080} {px x42780000 {x449c4000 x43500000 1} {x449ec000 x435a0000 x3e93a4e9} {x44a24000 x43660000 x3e93a4e9} {x44b0c000 x438a0000 x3ea1284a} {x44bc0000 x439b0000 x3ea92a4b} {x44cb8000 x43b30000 x3e5c370e}}} {tx x42780000 x44ae4000 x43855555} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush165 512 catmullrom {cc {f 2080} {px x42780000 {x44b44000 x43b30000 1} {x44b44000 x43960000 x3e952549} {x44b50000 x435a0000 x3e842108} {x44b54000 x43440000 x3e2a2a8b}}} {tx x42780000 x44b4b000 x43860000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush164 512 catmullrom {cc {f 2080} {px x42780000 {x44d3c000 x4485c000 1} {x44df0000 x44880000 x3e5f37ce} {x44ea8000 x44890000 x3df83e10}}} {tx x42780000 x44df1555 x44879555} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush163 512 catmullrom {cc {f 2080} {px x42780000 {x448d4000 x446f0000 1} {x448a4000 x446d0000 x3eb02c0b} {x44870000 x446b0000 x3ef8be30} {x448a4000 x446f0000 x3f03a0e8} {x44918000 x44750000 x3f05a168} {x4495c000 x44788000 x3f05e178} {x44adc000 x44848000 x3f07a1e8} {x44c60000 x448b4000 x3ea5a96a} {x44ca0000 x448bc000 x3e002008}}} {tx x42780000 x449df8e4 x447bd555} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush162 512 catmullrom {cc {f 2080} {px x42780000 {x44380000 x44540000 1} {x44330000 x44520000 1} {x441f0000 x444c0000 x3eaf2bcb} {x441b8000 x444b8000 x3ed1b46d} {x44210000 x444d0000 x3ee5394e} {x44460000 x44570000 x3f012048} {x44828000 x44618000 x3f096259} {x448a8000 x44640000 x3f096259} {x44a1c000 x44680000 x3e842108}}} {tx x42780000 x4452e38e x44570000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush161 512 catmullrom {cc {f 2080} {px x42780000 {x44218000 x44300000 x3e5c370e} {x44220000 x44308000 0}}} {tx x42780000 x4421c000 x44304000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush160 512 catmullrom {cc {f 2080} {px x42780000 {x440d8000 x44378000 1} {x44370000 x44488000 x3e25294a} {x44440000 x444c8000 x3e25294a} {x44510000 x44500000 x3e0b22c9}}} {tx x42780000 x44366000 x44472000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush159 512 catmullrom {cc {f 2080} {px x42780000 {x43c50000 x441f8000 1} {x43d60000 x44250000 x3d862188}}} {tx x42780000 x43cd8000 x44224000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush158 512 catmullrom {cc {f 2080} {px x42780000 {x43480000 x44080000 1} {x43540000 x440a0000 x3e0d2349} {x437a0000 x44108000 x3e793e50} {x439d0000 x44198000 x3e95a569} {x44008000 x44318000 x3e9ea7aa} {x440f0000 x44370000 x3e9ca72a} {x441c0000 x443c8000 0}}} {tx x42780000 x43bfdb6e x44202492} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush157 512 catmullrom {cc {f 2080} {px x42780000 {x44060000 x44420000 1} {x44090000 x44430000 x3e8aa2a9} {x440e0000 x44450000 x3e882209} {x44100000 x44450000 x3e8a2289} {x44110000 x44450000 x3e9324c9} {x44110000 x44438000 x3e9fa7ea} {x440d8000 x443d8000 x3eb8ae2c} {x43f20000 x442d8000 x3eb62d8b} {x43e20000 x44278000 x3eb0ac2b} {x43980000 x440d0000 x3e98260a} {x433e0000 x43f80000 x3e312c4b}}} {tx x42780000 x43f4ba2f x44332e8c} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush156 512 catmullrom {cc {f 2080} {px x42780000 {x444e0000 x44260000 1} {x444b8000 x44218000 x3f04a128} {x44430000 x44168000 x3f04e138} {x44370000 x440b0000 x3f06e1b8} {x44300000 x44048000 x3f09a269} {x441f0000 x43ef0000 x3f0da369} {x43ee0000 x43bb0000 x3f066198} {x43da0000 x43b20000 x3ef9be70} {x43bc0000 x43a60000 0}}} {tx x42780000 x44208000 x43fc1c72} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush155 512 catmullrom {cc {f 2080} {px x42780000 {x441f0000 x44288000 1} {x441f8000 x44060000 x3ebdaf6c} {x440f0000 x43c80000 x3ebbaeec} {x43f70000 x43a20000 x3eb8ae2c} {x43d90000 x43940000 0}}} {tx x42780000 x440ab333 x43df0000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush154 512 catmullrom {cc {f 2080} {px x42780000 {x43fd0000 x43c50000 1} {x43f20000 x43d20000 x3ed6b5ad} {x43ec0000 x43e60000 x3ed735cd} {x43ec0000 x43f20000 x3ed9b66e} {x43f20000 x44060000 x3ede378e} {x43fa0000 x440c0000 x3ee1384e} {x440f0000 x441e8000 x3ee1384e} {x44280000 x44310000 x3eb0ac2b} {x443a8000 x443e0000 x3eac2b0b} {x443c8000 x44408000 x3ea729ca} {x44370000 x44430000 x3dae2b8b} {x44330000 x44430000 0}}} {tx x42780000 x44142000 x4417caab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush153 512 catmullrom {cc {f 2080} {px x42780000 {x446f8000 x44188000 1} {x44678000 x44130000 x3ef8be30} {x444b8000 x43fe0000 x3efb3ed0} {x44410000 x43f00000 x3f02e0b8} {x44290000 x43d10000 x3f0b22c9} {x441b8000 x43c10000 x3f0e6399} {x43ca0000 x438f0000 x3f17a5e9} {x43820000 x437a0000 x3eb8ae2c} {x43700000 x437a0000 x3de4390e}}} {tx x42780000 x441d8e39 x43d1c71c} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush152 512 catmullrom {cc {f 2080} {px x42780000 {x444f0000 x44190000 1} {x44548000 x44110000 x3e51344d} {x44690000 x43fa0000 x3ea1284a} {x44708000 x43f00000 x3ea8aa2b} {x447e8000 x43e20000 x3e9e278a} {x44854000 x43d80000 x3e46318c} {x44880000 x43d70000 0}}} {tx x42780000 x4470db6e x43f90000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush151 512 catmullrom {cc {f 2080} {px x42780000 {x43b30000 x44330000 1} {x43bb0000 x44310000 x3e8ca329} {x43d10000 x44290000 x3ec6b1ac} {x44070000 x440a0000 x3f0d2349} {x440f0000 x44020000 x3f14a529} {x442d0000 x43d20000 x3f156559} {x44400000 x43bf0000 0}}} {tx x42780000 x4404edb7 x440dedb7} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush150 512 catmullrom {cc {f 2080} {px x42780000 {x43c20000 x43ae0000 1} {x43b80000 x43a70000 x3e93a4e9} {x43ae0000 x439b0000 x3ea6a9aa} {x43b60000 x439d0000 x3eaa2a8b} {x43c00000 x43a30000 x3eaa2a8b} {x43e50000 x43d10000 x3e862188} {x43f70000 x44068000 x3e9c270a} {x43fa0000 x440d8000 x3ea9aa6b} {x43f80000 x441f0000 x3ec0300c} {x43f40000 x441f0000 x3eaa2a8b} {x44070000 x44068000 x3ea92a4b} {x440f0000 x43fd0000 x3ebd2f4c} {x44318000 x43c50000 x3ec3b0ec} {x444c0000 x43b00000 x3e8d2349} {x444f0000 x43b00000 x3e5a368e} {x44510000 x43b40000 0}}} {tx x42780000 x44063800 x43d88000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush149 512 catmullrom {cc {f 2080} {px x42780000 {x44008000 x43e00000 1} {x44070000 x43d40000 x3e9aa6aa} {x44160000 x43bf0000 x3eb5ad6b} {x44250000 x43b00000 x3eb9ae6c} {x44380000 x43aa0000 x3e912449} {x44420000 x43b00000 0}}} {tx x42780000 x441f6aab x43bf8000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush148 512 catmullrom {cc {f 2080} {px x42780000 {x43340000 x43df0000 1} {x43320000 x43e50000 1} {x43380000 x43e80000 x3ea0280a} {x435c0000 x43ef0000 x3ea4290a} {x43880000 x43f80000 x3eb82e0c} {x43bc0000 x44070000 x3ec9b26d} {x440b0000 x441d0000 x3e99264a} {x44150000 x44228000 x3e6a3a8f} {x441d0000 x44280000 0}}} {tx x42780000 x43b138e4 x440638e4} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush147 512 catmullrom {cc {f 2080} {px x42780000 {x438f0000 x43d40000 1} {x43970000 x43cd0000 x3e9a268a} {x43a30000 x43c20000 x3ec2b0ac} {x43d60000 x439a0000 x3ef9be70} {x43f80000 x437c0000 x3ef6bdaf} {x44168000 x43340000 x3ebeafac} {x441b0000 x432a0000 x3ea8aa2b} {x441e8000 x43280000 0}}} {tx x42780000 x43e6e000 x438fc000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush146 512 catmullrom {cc {f 2080} {px x42780000 {x43af0000 x43bf0000 1} {x43c50000 x43c80000 x3e91a469} {x44090000 x43f00000 x3ebd2f4c} {x44228000 x44068000 x3ea4290a} {x442e8000 x440d8000 0}}} {tx x42780000 x44040000 x43ec999a} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush145 512 catmullrom {cc {f 2080} {px x42780000 {x43970000 x44080000 1} {x43b80000 x43f40000 x3eb8ae2c} {x43e30000 x43d70000 x3eecbb2f} {x43fa0000 x43ca0000 x3efabeb0} {x44130000 x43b50000 x3f012048} {x441d0000 x43ad0000 x3f006018} {x442f0000 x43a20000 0}}} {tx x42780000 x43fcdb6e x43cf0000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush144 512 catmullrom {cc {f 2080} {px x42780000 {x43b80000 x441b0000 1} {x43c70000 x44140000 1} {x43f10000 x44040000 x3ee338ce} {x44040000 x43f70000 x3ef4bd2f} {x441b0000 x43dd0000 x3f0320c8} {x44260000 x43d20000 x3f0320c8} {x44408000 x43bf0000 x3eea3a8f} {x44510000 x43bb0000 x3e1b26ca}}} {tx x42780000 x4411d000 x43f0c000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush143 512 catmullrom {cc {f 2080} {px x42780000 {x43e40000 x44258000 1} {x43f70000 x44220000 x3e8a2289} {x441c0000 x440e0000 x3eb6adab} {x44278000 x44070000 x3eb8ae2c} {x443a0000 x43f50000 x3eb2acab} {x44488000 x43e40000 x3e90a429} {x44528000 x43d90000 0}}} {tx x42780000 x44256db7 x4407a492} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush142 512 catmullrom {cc {f 2080} {px x42780000 {x43980000 x43f80000 1} {x43920000 x43f70000 x3e7a3e90} {x43940000 x43fa0000 x3ea3a8ea} {x43a90000 x44030000 x3eadab6b} {x44090000 x44190000 x3eddb76e} {x441a0000 x441f8000 x3ee83a0f} {x445d0000 x44368000 x3edeb7ae} {x44740000 x443c8000 0}}} {tx x42780000 x4404f000 x44146000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush141 512 catmullrom {cc {f 2080} {px x42780000 {x43880000 x43e90000 1} {x43940000 x43f10000 x3e9da76a} {x43b60000 x44000000 x3eaf2bcb} {x44168000 x44150000 x3eb92e4c} {x44278000 x441a0000 x3ebbaeec} {x44640000 x442e0000 x3ea2a8aa} {x446f0000 x44310000 0}}} {tx x42780000 x44116db7 x44119249} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush140 512 catmullrom {cc {f 2080} {px x42780000 {x43ad0000 x43d90000 1} {x43be0000 x43e40000 x3ea1284a} {x43dd0000 x43f40000 x3eb9ae6c} {x44100000 x440a0000 x3ef4bd2f} {x44470000 x44248000 x3f0ae2b9} {x44570000 x442a8000 x3f0c6319} {x44814000 x44380000 x3dda368e}}} {tx x42780000 x441e5b6e x440f1249} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush139 512 catmullrom {cc {f 2080} {px x42780000 {x442e8000 x44098000 1} {x44250000 x44050000 x3dac2b0b} {x44210000 x44030000 x3df03c0f} {x44190000 x43fd0000 x3e3d2f4c} {x440f8000 x43f10000 x3e6b3acf} {x44158000 x43f60000 x3e6338ce} {x441d0000 x43fd0000 x3e6739ce} {x444e0000 x44130000 x3e59364e} {x44858000 x442a0000 x3e19264a}}} {tx x42780000 x442f2aab x44070000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush138 512 catmullrom {cc {f 2080} {px x42780000 {x441a0000 x43c80000 x3eb9ae6c} {x441b8000 x43e30000 1} {x44240000 x43ef0000 x3eb2acab} {x443f0000 x44068000 x3e8ca329}}} {tx x42780000 x44262000 x43e9c000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush137 512 catmullrom {cc {f 2080} {px x42780000 {x446a0000 x43f70000 x3eee3b8f} {x444b8000 x43e80000 x3ef2bcaf} {x44468000 x43e50000 x3ee0380e} {x44480000 x43e50000 x3daa2a8b}}} {tx x42780000 x44510000 x43ea4000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush136 512 catmullrom {cc {f 2080} {px x42780000 {x44a34000 x441e8000 1} {x449f8000 x441b0000 x3e65394e} {x44968000 x44110000 x3e9a268a} {x44918000 x440c8000 x3eadab6b} {x44860000 x44020000 x3ed8360e} {x44720000 x43ef0000 x3ee6398e} {x44640000 x43e40000 x3ee7b9ee} {x44330000 x43bc0000 x3eed3b4f} {x441c0000 x43af0000 x3e9c270a} {x441c0000 x43b20000 x3e122489}}} {tx x42780000 x4476a666 x43f6999a} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush135 512 catmullrom {cc {f 2080} {px x42780000 {x44b5c000 x443d8000 1} {x44b60000 x443d8000 x3e46318c} {x44b60000 x443d0000 x3e8ea3a9} {x44b60000 x443b0000 x3e9c270a} {x44b54000 x44380000 x3ea328ca} {x44af4000 x442b0000 x3eb92e4c} {x44ac4000 x44250000 x3ebc2f0c} {x449b0000 x44060000 x3edcb72e} {x44860000 x43cc0000 x3f0b62d9} {x4480c000 x43be0000 x3f0ba2e9} {x445f0000 x439a0000 x3ecd334d} {x445a0000 x43950000 0}}} {tx x42780000 x449de555 x44127555} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush134 512 catmullrom {cc {f 2080} {px x42780000 {x44c5c000 x444e8000 x3e282a0b} {x44c58000 x444e0000 x3ea92a4b} {x44c4c000 x444c8000 x3eb7adeb} {x44c18000 x44470000 x3ecd334d} {x44b50000 x44348000 x3effbff0} {x44b08000 x442e0000 x3f05a168} {x44a20000 x44188000 x3f09a269} {x449d8000 x44110000 x3f07e1f8} {x44990000 x440a0000 x3f006018} {x44914000 x43fa0000 0}}} {tx x42780000 x44b01333 x442d199a} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush133 512 catmullrom {cc {f 2080} {px x42780000 {x4495c000 x441b8000 1} {x44958000 x441b8000 1} {x4498c000 x441e0000 x3e95a569} {x449f4000 x44230000 x3ea0280a} {x44b08000 x44308000 x3dde378e}}} {tx x42780000 x449d8ccd x4421b333} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush132 512 catmullrom {cc {f 2080} {px x42780000 {x44930000 x441d0000 1} {x44958000 x441f0000 x3e4a328d} {x449ac000 x44228000 x3e56358d} {x44a0c000 x44250000 x3e4d334d} {x44a3c000 x44260000 0}}} {tx x42780000 x449b2666 x4421e666} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush131 512 catmullrom {cc {f 2080} {px x42780000 {x446e0000 x44210000 1} {x44768000 x441f0000 x3ea5a96a} {x4480c000 x441d0000 x3ed4b52d} {x44938000 x441b0000 x3f086219} {x449a0000 x441b0000 x3f086219} {x44a50000 x441b0000 x3ef1bc6f} {x44adc000 x441b0000 0}}} {tx x42780000 x449076db x441cb6db} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush130 512 catmullrom {cc {f 2080} {px x42780000 {x44760000 x44320000 1} {x44788000 x44320000 x3eb92e4c} {x4480c000 x44308000 x3ecd334d} {x44904000 x442a8000 x3ee0b82e} {x44948000 x44290000 x3ee0b82e} {x44a08000 x44260000 0}}} {tx x42780000 x448a3555 x442d0000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush129 512 catmullrom {cc {f 2080} {px x42780000 {x44368000 x442b8000 1} {x443f8000 x441f0000 x3ebc2f0c} {x444a0000 x440c0000 x3ee8ba2f} {x445a8000 x43c70000 x3ebeafac} {x445c0000 x43b50000 x3e59364e}}} {tx x42780000 x444ae666 x4404199a} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush128 512 catmullrom {cc {f 2080} {px x42780000 {x443e0000 x44300000 1} {x44408000 x442c0000 x3e9725c9} {x44438000 x44278000 x3ec0300c} {x444b8000 x44198000 x3efbbef0} {x444f8000 x44120000 x3f05a168} {x44570000 x44020000 x3f08a229} {x44590000 x43d00000 x3ed9b66e} {x44588000 x43c70000 x3eb2acab} {x44570000 x43be0000 0}}} {tx x42780000 x444dd555 x440a2aab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush127 512 catmullrom {cc {f 2080} {px x42780000 {x444c8000 x44360000 1} {x444c8000 x44368000 x3e84a128} {x444e8000 x44318000 x3ed334cd} {x44510000 x442c0000 x3ee338ce} {x44558000 x441c8000 x3ef23c8f} {x44600000 x43f40000 x3ec9b26d} {x44610000 x43e50000 x3ea6298a} {x44620000 x43d80000 0}}} {tx x42780000 x44562000 x4417e000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush126 512 catmullrom {cc {f 2080} {px x42780000 {x44b78000 x441c8000 1} {x44ba8000 x44030000 x3ea6a9aa} {x44bbc000 x43fe0000 0}}} {tx x42780000 x44b9eaab x440a2aab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush125 512 catmullrom {cc {f 2080} {px x42780000 {x44a70000 x44220000 1} {x44a7c000 x441c8000 x3eb5ad6b} {x44a88000 x44170000 x3ebaaeac} {x44acc000 x440a0000 x3ee7b9ee} {x44ae8000 x44070000 x3ef5bd6f} {x44b24000 x44030000 x3ee739ce} {x44b50000 x44020000 x3dde378e}}} {tx x42780000 x44acd249 x440f5b6e} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush124 512 catmullrom {cc {f 2080} {px x42780000 {x449d0000 x44180000 1} {x449dc000 x440f0000 x3ebeafac} {x44a08000 x44010000 x3ead2b4b} {x44a10000 x43fe0000 x3e8320c8} {x44a18000 x43fb0000 0}}} {tx x42780000 x449f8ccd x44074ccd} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush123 512 catmullrom {cc {f 2080} {px x42780000 {x44934000 x441f8000 1} {x44948000 x441b0000 x3eba2e8c} {x44958000 x44158000 x3ec0b02c} {x44978000 x440a0000 x3ed2348d} {x44988000 x44050000 x3ed2348d} {x44998000 x43fb0000 x3eb02c0b} {x449ac000 x43f20000 x3dba2e8c}}} {tx x42780000 x44971249 x440c36db} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush122 512 catmullrom {cc {f 2080} {px x42780000 {x44760000 x44348000 1} {x44780000 x44300000 x3ec0b02c} {x447b8000 x442b0000 x3eeabaaf} {x44800000 x44250000 x3f06a1a8} {x4482c000 x441e0000 x3f122489} {x448d8000 x44018000 x3f14a529} {x4491c000 x43e50000 0}}} {tx x42780000 x44834000 x441c5b6e} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush121 512 catmullrom {cc {f 2080} {px x42780000 {x446c8000 x44498000 1} {x446f8000 x44438000 x3e8721c8} {x44780000 x44320000 x3eba2e8c} {x44814000 x441e0000 x3ed1b46d} {x448a0000 x43f20000 x3ea729ca} {x448b4000 x43e40000 x3e64390e}}} {tx x42780000 x44801555 x44215555} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush120 512 catmullrom {cc {f 2080} {px x42780000 {x44560000 x44458000 1} {x44590000 x44410000 x3eac2b0b} {x44630000 x44318000 x3ee2b8ae} {x446e0000 x441d0000 x3ef63d8f} {x4480c000 x43eb0000 x3eb02c0b} {x44828000 x43dc0000 x3e0c2309}}} {tx x42780000 x446bc000 x441ec000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush119 512 catmullrom {cc {f 2080} {px x42780000 {x444d0000 x44330000 1} {x44548000 x44270000 x3e882209} {x445e0000 x44160000 x3e8d2349} {x44670000 x44040000 x3e812048} {x446d8000 x43e50000 0}}} {tx x42780000 x445d999a x44148000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush118 512 catmullrom {cc {f 2080} {px x42780000 {x440a0000 x44458000 1} {x440c0000 x44458000 x3e46318c} {x44108000 x44438000 x3e6739ce} {x44198000 x443d8000 x3ea2288a} {x44330000 x442b0000 x3f002008} {x446d8000 x44138000 x3f11e479} {x447e8000 x440f8000 x3f106419} {x449b8000 x44020000 x3d862188}}} {tx x42780000 x4442c000 x442b8000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush117 512 catmullrom {cc {f 2080} {px x42780000 {x43ae0000 x441c0000 1} {x43ae0000 x441e0000 x3e753d4f} {x43c10000 x44228000 x3e7b3ed0} {x43ec0000 x442a8000 x3ea5a96a} {x443e0000 x44400000 x3f0de379} {x44548000 x44460000 x3f12a4a9} {x44930000 x44570000 x3ec4b12c} {x44998000 x44588000 0}}} {tx x42780000 x442e0000 x44379000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush116 512 catmullrom {cc {f 2080} {px x42780000 {x440a8000 x44218000 1} {x44158000 x44258000 x3ea8aa2b} {x443f0000 x44320000 x3eea3a8f} {x444f8000 x44368000 x3efc3f10} {x44618000 x443a8000 x3f02a0a8} {x44848000 x44430000 x3f0721c8} {x448e4000 x44470000 x3f0721c8} {x44a58000 x444f8000 0}}} {tx x42780000 x44601000 x44387000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush115 512 catmullrom {cc {f 2080} {px x42780000 {x42ec0000 x44550000 1} {x432a0000 x445a8000 x3e5334cd} {x43af0000 x446a8000 x3ebe2f8c} {x43d20000 x446f8000 x3edbb6ee} {x440d0000 x44798000 x3ef0bc2f} {x442c0000 x44810000 x3eea3a8f} {x44390000 x44828000 x3eb7adeb} {x44438000 x44838000 0}}} {tx x42780000 x43ef8000 x44722000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush114 512 catmullrom {cc {f 2080} {px x42780000 {xc2bc0000 x44710000 x3e5334cd} {xc2680000 x44708000 x3e95a569} {x40000000 x44708000 x3ec5314c} {x42bc0000 x44708000 x3ee739ce} {x43140000 x44708000 x3efebfb0} {x434e0000 x44708000 x3f0761d8} {x43850000 x44708000 x3f092249} {x43fe0000 x446c0000 x3ec0b02c} {x440c0000 x446a0000 0}}} {tx x42780000 x43355555 x446f5555} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush113 512 catmullrom {cc {f 2080} {px x42780000 {x431e0000 x44520000 1} {x432a0000 x44410000 x3ea3a8ea} {x43400000 x442d0000 x3eb5ad6b} {x43580000 x44160000 x3ebeafac} {x43640000 x440a8000 x3eb8ae2c} {x437e0000 x43ee0000 0}}} {tx x42780000 x434b0000 x4423eaab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush112 512 catmullrom {cc {f 2080} {px x42780000 {xc31a0000 x44338000 1} {xc3140000 x44348000 x3eb12c4b} {xc3040000 x44350000 x3eb12c4b} {xc2d80000 x44370000 x3ebc2f0c} {xc2a00000 x44398000 x3ecbb2ed} {xc2180000 x443c8000 x3ed334cd} {x40800000 x443f8000 x3ed5b56d} {x42d40000 x44460000 x3ed7b5ed} {x435a0000 x444b8000 x3ed9364e} {x43d80000 x44510000 x3e60380e}}} {tx x42780000 x41200000 x443e0000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush111 512 catmullrom {cc {f 2080} {px x42780000 {xc2e80000 x44070000 1} {xc2bc0000 x44060000 1} {xc1d00000 x44030000 x3ed8360e} {x428c0000 x43fe0000 x3efbbef0} {x42f80000 x43fc0000 x3f0761d8} {x433c0000 x43f80000 x3f0b22c9} {x437c0000 x43f50000 x3f0b22c9} {x43f50000 x43e80000 x3d962589}}} {tx x42780000 x42de0000 x43fde000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush110 512 catmullrom {cc {f 2080} {px x42780000 {xc2100000 x43d90000 1} {xc2380000 x43da0000 x3e5d374e} {xc2500000 x43da0000 x3e9fa7ea} {xc2600000 x43dc0000 x3eca328d} {xc2480000 x43dd0000 x3edeb7ae} {xc2100000 x43de0000 x3ee93a4f} {xc1600000 x43df0000 x3efabeb0} {x41800000 x43e00000 x3f0360d8} {x42dc0000 x43e30000 x3f10e439} {x43720000 x43e50000 x3f18e63a} {x440c0000 x43e80000 x3f0ae2b9} {x441d0000 x43e80000 x3ed1b46d} {x442d0000 x43e60000 0}}} {tx x42780000 x43169d8a x43e013b1} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush109 512 catmullrom {cc {f 2080} {px x42780000 {x43fe0000 x43c80000 1} {x43fe0000 x43ca0000 x3e9aa6aa} {x44008000 x43ca0000 x3ebaaeac} {x44040000 x43c60000 x3ed2348d} {x440f8000 x43ba0000 x3efbbef0} {x443d0000 x43980000 x3f1fa7ea} {x447f0000 x437e0000 x3f25294a} {x4486c000 x43720000 x3f1de77a} {x44928000 x435c0000 0}}} {tx x42780000 x4438f1c7 x43a671c7} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush108 512 catmullrom {cc {f 2080} {px x42780000 {x43ec0000 x434e0000 1} {x43f40000 x434c0000 x3e0f23c9} {x43fc0000 x434a0000 x3e54350d} {x441c0000 x433e0000 x3ebc2f0c} {x44348000 x43380000 x3edfb7ee} {x44728000 x43360000 x3ecd334d} {x447f8000 x43360000 x3e9ba6ea}}} {tx x42780000 x442b8000 x4340db6e} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush107 512 catmullrom {cc {f 2080} {px x42780000 {x43cb0000 x43200000 1} {x43ce0000 x43260000 x3e4a328d} {x43d60000 x432c0000 x3e49324d} {x43de0000 x43340000 x3e50340d} {x43fe0000 x434c0000 x3eba2e8c} {x44070000 x43560000 x3edc370e} {x443a0000 x43840000 x3f0ba2e9} {x44780000 x439c0000 x3efa3e90} {x44828000 x43a10000 x3ed5354d} {x44880000 x43a40000 0}}} {tx x42780000 x44252666 x43683333} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush106 512 catmullrom {cc {f 2080} {px x42780000 {x44450000 x44018000 1} {x44420000 x44000000 x3e4a328d} {x443e0000 x43fc0000 x3e6b3acf} {x442b8000 x43df0000 x3eaf2bcb} {x441e0000 x43c70000 x3ecdb36d} {x44150000 x43b90000 x3edab6ae} {x43ce0000 x436c0000 x3ee7b9ee} {x43680000 x42d80000 x3e46318c}}} {tx x42780000 x44189000 x43c14000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush105 512 catmullrom {cc {f 2080} {px x42780000 {x42200000 x42a40000 1} {x42380000 x42b00000 x3e22288a} {x42d00000 x43060000 x3e97a5e9} {x43300000 x43340000 x3ed1344d} {x43640000 x43500000 x3ee8ba2f} {x44040000 x43ad0000 x3f0721c8} {x444c0000 x43df0000 x3e9f27ca}}} {tx x42780000 x438a6db7 x43540000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush104 512 catmullrom {cc {f 2080} {px x42780000 {x434e0000 x43af0000 1} {x43740000 x43ba0000 x3e3e2f8c} {x43ac0000 x43d30000 x3e9f27ca} {x43ec0000 x43ee0000 x3ec0b02c} {x44080000 x43fb0000 x3ec6318c} {x443f8000 x440f8000 0}}} {tx x42780000 x43d6aaab x43e0aaab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush103 512 catmullrom {cc {f 2080} {px x42780000 {xc28c0000 x42f40000 x3dee3b8f} {xc2880000 x42f40000 x3e352d4b} {xc2780000 x43000000 x3e783e10} {xc2500000 x430c0000 x3ea729ca} {xc2380000 x43120000 x3ec0b02c} {xc2100000 x431e0000 x3edab6ae} {xc1c00000 x432a0000 x3ef0bc2f} {x41200000 x434e0000 x3f0ca329} {x42800000 x43820000 x3f1aa6aa} {x43060000 x43a20000 x3f21284a} {x439e0000 x43e60000 x3f1b26ca} {x43b90000 x43f70000 0}}} {tx x42780000 x4232aaab x43638000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush102 512 catmullrom {cc {f 2080} {px x42780000 {xc1c00000 x43020000 1} {xc0800000 x43040000 x3e842108} {x42480000 x43060000 x3ea7a9ea} {x42f00000 x43080000 x3ec5314c} {x431e0000 x430c0000 x3ec9324d} {x43940000 x43140000 x3e7b3ed0}}} {tx x42780000 x42c6aaab x4308aaab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush101 512 catmullrom {cc {f 2080} {px x42780000 {x42480000 x430e0000 1} {x42400000 x430e0000 x3e372dcb} {x42380000 x43100000 x3e8a2289} {x42300000 x43100000 x3ea2288a} {x42200000 x43120000 x3ee7b9ee} {x42100000 x43140000 x3ef53d4f} {x40800000 x43200000 x3f012048} {xc0800000 x43240000 x3f01a068} {xc2000000 x43280000 x3f016058} {xc2080000 x432a0000 x3efebfb0} {xc1c00000 x43280000 x3efcbf30} {x42940000 x43000000 x3f046118} {x437e0000 x42a80000 x3f0aa2a9} {x439a0000 x42980000 x3f0a6299} {x43b20000 x428c0000 x3f062188} {x43c70000 x42880000 x3ee93a4f} {x43d80000 x42780000 0}}} {tx x42780000 x42ead2d3 x43007878} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush100 512 catmullrom {cc {f 2080} {px x42780000 {x438a0000 x43060000 1} {x43880000 x43080000 x3e89a269} {x43880000 x43060000 x3eb5ad6b} {x438b0000 x43000000 x3ec8320d} {x43900000 x42e80000 x3ee4b92e} {x43ac0000 x41e00000 x3f0e2389} {x43cb0000 xc2480000 x3ee83a0f} {x43d20000 xc2800000 x3eccb32d} {x43df0000 xc2ac0000 0}}} {tx x42780000 x43a6c71c x42538e39} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush99 512 catmullrom {cc {f 2080} {px x42780000 {x43580000 x43300000 1} {x43640000 x43180000 x3ec1b06c} {x436e0000 x43060000 x3ed8360e} {x437a0000 x42e80000 x3edfb7ee} {x43830000 x42bc0000 x3edfb7ee} {x439e0000 x41800000 x3ea729ca} {x43ad0000 xc1600000 0}}} {tx x42780000 x43849249 x42c09249} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush98 512 catmullrom {cc {f 2080} {px x42780000 {x44818000 x43180000 1} {x44814000 x43180000 x3e802008} {x44824000 x43180000 x3e98260a} {x44840000 x43180000 x3eaaaaab} {x448a0000 x43200000 x3ecd334d} {x449bc000 x43380000 x3ef03c0f} {x44a10000 x43400000 x3ef03c0f} {x44b20000 x43540000 x3e6e3b8f}}} {tx x42780000 x44903800 x43298000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush97 512 catmullrom {cc {f 2080} {px x42780000 {x44850000 x43860000 1} {x4485c000 x43830000 x3e60380e} {x44884000 x43720000 x3e8c2309} {x448c0000 x43540000 x3ebe2f8c} {x448e8000 x433e0000 x3ed9364e} {x4497c000 x42ac0000 x3f012048} {x44a18000 xc0800000 x3e5d374e}}} {tx x42780000 x448eadb7 x43336db7} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush96 512 catmullrom {cc {f 2080} {px x42780000 {x4491c000 x437a0000 1} {x44920000 x43720000 x3e46318c} {x44938000 x43540000 x3e902409} {x44944000 x43440000 x3e902409} {x44964000 x432c0000 x3e102409}}} {tx x42780000 x44938ccd x43566666} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush95 512 catmullrom {cc {f 2080} {px x42780000 {x44640000 x42d00000 1} {x44630000 x42c80000 0}}} {tx x42780000 x44638000 x42cc0000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush94 512 catmullrom {cc {f 2080} {px x42780000 {x442c0000 x41c00000 1} {x44330000 x42080000 x3e51344d} {x443b0000 x42380000 x3e5334cd} {x44588000 x42a40000 x3e7e3f90} {x446c8000 x42d00000 x3e882209} {x44750000 x42e00000 x3e882209} {x44800000 x42f80000 0}}} {tx x42780000 x44552492 x42964925} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush93 512 catmullrom {cc {f 2080} {px x42780000 {x44610000 x42c00000 1} {x44678000 x42d00000 x3d802008}}} {tx x42780000 x44644000 x42c80000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush92 512 catmullrom {cc {f 2080} {px x42780000 {x43c10000 x41d00000 1} {x43ca0000 x41e00000 x3e743d0f} {x44048000 x42200000 x3edc370e} {x441b0000 x42400000 x3ef9be70} {x44460000 x42500000 x3ee9ba6f} {x444f8000 x42500000 x3ea9aa6b} {x44578000 x42500000 0}}} {tx x42780000 x441e0000 x422a4925} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush91 512 catmullrom {cc {f 2080} {px x42780000 {x43720000 xc1800000 1} {x437e0000 xc0000000 x3e6739ce} {x438a0000 x41000000 x3e8ca329} {x439b0000 x41b00000 x3e9ea7aa} {x43b30000 x42080000 x3eb62d8b} {x43fc0000 x42a80000 x3eea3a8f} {x440d0000 x42d00000 x3ef3bcef} {x444c0000 x43320000 x3f022088} {x445a0000 x43400000 x3eee3b8f} {x446c8000 x434e0000 0}}} {tx x42780000 x44008ccd x42a20000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush90 512 catmullrom {cc {f 2080} {px x42780000 {x44be0000 x440c0000 x3e52348d} {x44be0000 x440b0000 x3e802008} {x44c14000 x44010000 x3eb02c0b} {x44c30000 x43f60000 x3ebdaf6c} {x44c68000 x43d30000 x3ed3b4ed} {x44cac000 x43a80000 x3eedbb6f} {x44d20000 x43040000 x3efcbf30} {x44d38000 x42a00000 x3efb3ed0} {x44d9c000 xc2d40000 x3ea92a4b} {x44dcc000 xc3260000 0}}} {tx x42780000 x44caf333 x438d199a} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush89 512 catmullrom {cc {f 2080} {px x42780000 {x44c1c000 x442d8000 1} {x44c18000 x442e0000 x3dee3b8f} {x44c28000 x442e0000 x3e6d3b4f} {x44c44000 x442d8000 x3e89a269} {x44c94000 x442b0000 x3eb7adeb} {x44d18000 x44270000 x3ede378e} {x44e5c000 x441f0000 x3ec9324d} {x44eb0000 x441d0000 x3e9ea7aa} {x44efc000 x441b8000 0}}} {tx x42780000 x44d25c72 x44272aab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush88 512 catmullrom {cc {f 2080} {px x42780000 {xc2300000 x441f8000 1} {xc2300000 x44218000 x3e9b26ca} {xc2100000 x44230000 x3e9f27ca} {x42200000 x442d0000 x3ec6b1ac} {x42b00000 x44310000 x3ed5354d} {x43100000 x44360000 x3ee2388e} {x43500000 x443b0000 x3ee739ce} {x438b0000 x44408000 x3ee9ba6f} {x44050000 x44510000 x3ef0bc2f} {x446c8000 x44650000 x3e8d2349} {x44828000 x44690000 x3de2388e}}} {tx x42780000 x438f745d x443bdd17} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush87 512 catmullrom {cc {f 2080} {px x42780000 {xc0800000 x441f0000 x3e362d8b} {xc0000000 x441f0000 x3e4d334d} {x41400000 x44210000 x3e9725c9} {x41d00000 x44228000 x3ea5a96a} {x42e80000 x442b8000 x3ecab2ad} {x43a80000 x443f8000 x3efb3ed0} {x43c80000 x44440000 x3f0320c8} {x44260000 x44540000 x3d48320d}}} {tx x42780000 x43418000 x44309000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush86 512 catmullrom {cc {f 2080} {px x42780000 {xc1400000 x44330000 x3b802008}}} {tx x42780000 xc1400000 x44330000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush85 512 catmullrom {cc {f 2080} {px x42780000 {x41200000 x44550000 1} {x42100000 x44518000 1} {x42e80000 x444a0000 x3ebcaf2c} {x434e0000 x44438000 x3ecd334d} {x437c0000 x44408000 x3edbb6ee} {x43c20000 x44378000 x3e9a268a} {x43cc0000 x44360000 0}}} {tx x42780000 x434a4925 x4444db6e} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush84 512 catmullrom {cc {f 2080} {px x42780000 {x41b00000 x445c0000 1} {x42200000 x445a8000 x3dee3b8f} {x42ac0000 x44578000 0}}} {tx x42780000 x42455555 x445a0000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush83 512 catmullrom {cc {f 2080} {px x42780000 {x42600000 x44630000 1} {x42500000 x44630000 x3e952549} {x42480000 x44630000 x3e9a268a} {x42480000 x44638000 x3eaeabab} {x42600000 x44650000 x3eaf2bcb} {x42780000 x44680000 x3eb02c0b} {x43000000 x44770000 x3eb12c4b} {x43620000 x44850000 x3eb62d8b} {x437e0000 x44870000 x3eb2acab} {x43a20000 x448b8000 0}}} {tx x42780000 x42fb999a x44732666} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush82 512 catmullrom {cc {f 2080} {px x42780000 {xc30c0000 x44708000 1} {xc3140000 x44700000 x3e8721c8} {xc31c0000 x44700000 x3ebfafec} {xc3120000 x44700000 x3ede378e} {xc2bc0000 x44700000 x3eedbb6f} {xc0800000 x446f8000 x3f05a168} {x42600000 x446f8000 x3f0e2389} {x43340000 x446f8000 x3f13e4f9} {x43c20000 x44700000 x3eaeabab} {x43d20000 x44708000 0}}} {tx x42780000 x420e6666 x446ff333} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush81 512 catmullrom {cc {f 2080} {px x42780000 {x44198000 x448d4000 x3dfc3f10} {x441a0000 x448d4000 x3e3a2e8c} {x441b0000 x448d4000 x3e59364e} {x441b8000 x448d0000 x3e842108} {x441c8000 x448bc000 x3ea2288a} {x44220000 x44884000 x3ecab2ad} {x44288000 x44820000 x3ee4390e} {x44318000 x44760000 x3eef3bcf} {x443a0000 x446a0000 x3eee3b8f} {x44498000 x445b8000 x3e7a3e90}}} {tx x42780000 x44270000 x44840ccd} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush80 512 catmullrom {cc {f 2080} {px x42780000 {x440d0000 x44768000 1} {x44128000 x446f8000 x3e8721c8} {x442a8000 x44530000 x3e9e278a} {x443b0000 x443f0000 x3e9324c9} {x44490000 x442d0000 0}}} {tx x42780000 x44293333 x44543333} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush79 512 catmullrom {cc {f 2080} {px x42780000 {x447f8000 x447e8000 x3e0d2349} {x447f8000 x447d0000 x3e52348d} {x447f8000 x44710000 x3eb42d0b} {x447f0000 x44698000 x3ec7b1ec} {x447e8000 x44550000 x3ee9ba6f} {x447d0000 x44240000 x3f09e279} {x447c8000 x43e60000 x3ef0bc2f} {x447e8000 x43ce0000 x3ec2308c} {x44808000 x43b80000 0}}} {tx x42780000 x447ec71c x443971c7} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush78 512 catmullrom {cc {f 2080} {px x42780000 {x44450000 x445b8000 1} {x44438000 x445b8000 x3e392e4c} {x44410000 x445b0000 x3e85a168} {x44410000 x445a8000 x3e952549} {x44420000 x445a0000 x3eaaaaab} {x44438000 x445a0000 x3eb42d0b} {x444d0000 x445a8000 x3ecdb36d} {x44648000 x445d8000 x3ef43d0f} {x446f0000 x445e8000 x3f0761d8} {x4495c000 x44690000 x3f2328ca} {x44ae0000 x44708000 x3eb5ad6b} {x44b14000 x44710000 0}}} {tx x42780000 x446ce000 x44602000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush77 512 catmullrom {cc {f 2080} {px x42780000 {x43560000 x43a90000 1} {x43880000 x43ba0000 x3eaaaaab} {x43b90000 x43d40000 x3ed7b5ed} {x43d70000 x43e30000 x3eedbb6f} {x443f8000 x44108000 x3f092249} {x44904000 x442a8000 x3f0fa3e9} {x44b98000 x443a8000 x3e9b26ca}}} {tx x42780000 x44278000 x44005b6e} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush76 512 catmullrom {cc {f 2080} {px x42780000 {x442c0000 x43d90000 1} {x44300000 x43dc0000 x3e8e2389} {x443b0000 x43e30000 x3ea328ca} {x444e0000 x43ea0000 x3ed1344d} {x44588000 x43ef0000 x3ee9ba6f} {x44874000 x43fd0000 x3f18661a} {x44a04000 x44030000 x3efa3e90} {x44a3c000 x44030000 x3ea729ca}}} {tx x42780000 x446a8000 x43ef4000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush75 512 catmullrom {cc {f 2080} {px x42780000 {x43680000 x43940000 x3eb8ae2c} {x43680000 x43950000 x3ec4b12c} {x43830000 x439e0000 x3ec4b12c} {x43a10000 x43ad0000 x3ec9324d} {x43b40000 x43b60000 x3ecd334d} {x44188000 x43e30000 x3f02e0b8} {x44720000 x44090000 x3f0fe3f9} {x4483c000 x440d0000 x3f0ba2e9} {x449d8000 x44150000 0}}} {tx x42780000 x441338e4 x43d21c72} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush74 512 catmullrom {cc {f 2080} {px x42780000 {x43e30000 x43de0000 1} {x43f60000 x43e60000 x3e9725c9} {x440e0000 x43f00000 x3ec0b02c} {x442c0000 x43fd0000 x3ee5394e} {x443e0000 x44030000 x3ee7b9ee} {x44858000 x44130000 x3dfe3f90}}} {tx x42780000 x4427eaab x43fa2aab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush73 512 catmullrom {cc {f 2080} {px x42780000 {x43920000 x43d30000 1} {x43980000 x43d30000 x3dc6318c}}} {tx x42780000 x43950000 x43d30000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush72 512 catmullrom {cc {f 2080} {px x42780000 {x43900000 x43e40000 1} {x439b0000 x43e00000 x3e9f27ca} {x43b80000 x43d80000 x3ea2a8aa} {x43ca0000 x43d60000 x3eaaaaab} {x43f50000 x43ce0000 x3ec4b12c} {x442d0000 x43c70000 x3ed1b46d} {x44550000 x43ca0000 x3e753d4f}}} {tx x42780000 x43f32492 x43d4b6db} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush71 512 catmullrom {cc {f 2080} {px x42780000 {x43a20000 x43b40000 1} {x43a70000 x43b40000 x3eab2acb} {x43ad0000 x43b50000 x3eaeabab} {x43b80000 x43b60000 x3ebdaf6c} {x43ec0000 x43b60000 x3edbb6ee} {x44018000 x43b80000 x3eeabaaf} {x442d8000 x43bb0000 x3ea5a96a} {x44350000 x43bb0000 0}}} {tx x42780000 x43ec4000 x43b6e000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush70 512 catmullrom {cc {f 2080} {px x42780000 {x43da0000 x43840000 1} {x43dd0000 x43880000 x3e002008} {x43e20000 x43910000 x3e4731cc} {x43ea0000 x43a00000 x3e8721c8} {x44050000 x43c70000 x3e9ea7aa} {x440a8000 x43d20000 x3e9ea7aa} {x44138000 x43e00000 0}}} {tx x42780000 x43f82492 x43ac4925} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush69 512 catmullrom {cc {f 2080} {px x42780000 {x44158000 x443d0000 1} {x44160000 x443d0000 1} {x44168000 x443d8000 x3e64390e} {x44180000 x44378000 x3ef63d8f} {x44180000 x44338000 x3efcbf30} {x44180000 x442e8000 x3f016058} {x44160000 x44188000 x3f0ca329} {x440d8000 x43dc0000 x3f17e5f9} {x44098000 x43c50000 x3f17e5f9} {x43ee0000 x436e0000 x3f09a269} {x43d90000 x432c0000 x3ebc2f0c} {x43d80000 x432c0000 x3e91a469} {x43d80000 x43320000 0}}} {tx x42780000 x4408cec5 x43fec4ec} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush68 512 catmullrom {cc {f 2080} {px x42780000 {x44008000 x44378000 1} {x44030000 x44380000 x3dbe2f8c} {x44090000 x44390000 x3d922489} {x440a8000 x44390000 x3d302c0b} {x440c8000 x44390000 x3d042108} {x440d8000 x44390000 x3cc8320d} {x44108000 x443a0000 x3cb82e0c} {x44130000 x443b0000 0}}} {tx x42780000 x440a9000 x44391000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush67 512 catmullrom {cc {f 2080} {px x42780000 {x43eb0000 x441f0000 1} {x43ee0000 x441d0000 x3de4390e} {x43f80000 x440b0000 x3e9aa6aa} {x43fd0000 x43f70000 x3eadab6b} {x44010000 x43b30000 x3ecd334d} {x44010000 x43a10000 x3ed0340d} {x43fa0000 x43420000 x3ece338d} {x43fd0000 x43260000 x3d8c2309}}} {tx x42780000 x43f92000 x43d1a000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush66 512 catmullrom {cc {f 2080} {px x42780000 {x43980000 x441c0000 x3e94a529} {x439c0000 x441b0000 x3e97a5e9} {x43a10000 x44188000 x3e9ba6ea} {x43c00000 x43fd0000 x3ed0b42d} {x43ca0000 x43ea0000 x3edab6ae} {x43f40000 x43940000 x3ef23c8f} {x440f0000 x431a0000 x3ef1bc6f} {x44130000 x43020000 x3ee83a0f} {x441b8000 x42c00000 0}}} {tx x42780000 x43de0000 x43c2aaab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush65 512 catmullrom {cc {f 2080} {px x42780000 {x432a0000 x440c8000 x3de4390e} {x43320000 x44098000 x3e842108} {x434c0000 x44038000 x3eb92e4c} {x43620000 x43fc0000 x3ed2b4ad} {x43a80000 x43b80000 x3f00a028} {x43e00000 x43480000 x3f09a269} {x43ef0000 x431e0000 x3f09a269} {x44120000 x41e00000 x3ed0b42d} {x44170000 x41200000 0}}} {tx x42780000 x43b35555 x43a171c7} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush64 512 catmullrom {cc {f 2080} {px x42780000 {xc2180000 x439a0000 1} {xc0000000 x43960000 x3e9b26ca} {x42c40000 x438e0000 x3ece338d} {x43640000 x43890000 x3eecbb2f} {x43f60000 x438e0000 x3ef33ccf} {x440a0000 x43900000 x3ecdb36d} {x44180000 x43940000 0}}} {tx x42780000 x438a6db7 x43914925} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush63 512 catmullrom {cc {f 2080} {px x42780000 {0 x43a20000 x3e802008} {x41400000 x43a20000 x3e9ea7aa} {x42800000 x43a10000 x3ecc330d} {x43180000 x439e0000 x3ef43d0f} {x434c0000 x439d0000 x3f006018} {x43e20000 x439c0000 x3f19264a} {x44370000 x43a60000 x3f152549} {x44468000 x43a90000 x3f012048} {x44540000 x43ae0000 0}}} {tx x42780000 x43b50000 x43a2c71c} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush62 512 catmullrom {cc {f 2080} {px x42780000 {xc1000000 x43c50000 1} {x42000000 x43c00000 x3e9c270a} {x430e0000 x43b80000 x3eb5ad6b} {x438c0000 x43b20000 x3ed5354d} {x441a0000 x43af0000 x3ef4bd2f} {x44308000 x43b00000 x3ef4bd2f} {x447c0000 x43ba0000 x3dac2b0b}}} {tx x42780000 x43c64925 x43b80000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush61 512 catmullrom {cc {f 2080} {px x42780000 {xc2680000 x43cc0000 x3e743d0f} {xc2680000 x43cd0000 x3e90a429} {xc1c00000 x43d00000 x3e94a529} {xc1200000 x43d00000 x3e97a5e9} {x40800000 x43d00000 x3e9e278a} {x41c00000 x43ce0000 x3ea3a8ea} {x42380000 x43cc0000 x3eab2acb} {x42900000 x43ca0000 x3eb4ad2b} {x43580000 x43ba0000 x3ee338ce} {x43c50000 x43b00000 x3ef53d4f} {x43d80000 x43b00000 x3eeb3acf} {x43fa0000 x43af0000 0}}} {tx x42780000 x43002aab x43c48000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush60 512 catmullrom {cc {f 2080} {px x42780000 {x43fa0000 x44808000 x3d50340d} {x43fa0000 x4480c000 x3e8a2289} {x43f60000 x44800000 x3ec8b22d} {x43f20000 x447e8000 x3ecdb36d} {x43d40000 x446c0000 x3ed6b5ad} {x43a00000 x44400000 x3f066198} {x43900000 x44318000 x3f086219} {x431e0000 x43ee0000 x3f04e138} {x42c80000 x43880000 x3eaeabab} {x42c00000 x43680000 x3e8aa2a9} {x42c00000 x434a0000 0}}} {tx x42780000 x439d2e8c x442f1746} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush59 512 catmullrom {cc {f 2080} {px x42780000 {x438b0000 x43960000 1} {x43880000 x43b90000 x3e5a368e} {x43860000 x43e60000 x3e802008} {x438e0000 x440e0000 x3e882209} {x43970000 x441c8000 x3e892249} {x43d40000 x44510000 x3ea1284a} {x44048000 x446d0000 0}}} {tx x42780000 x43a86db7 x4412b6db} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush58 512 catmullrom {cc {f 2080} {px x42780000 {x438a0000 x443f0000 x3da4290a} {x438c0000 x443e0000 x3e18260a} {x43940000 x44360000 x3e93a4e9} {x439b0000 x44290000 x3ebdaf6c} {x43af0000 x44018000 x3efbbef0} {x43b60000 x43eb0000 x3f0360d8} {x43d70000 x43860000 x3f09a269} {x43fb0000 x42f40000 x3eb8ae2c} {x44018000 x42d40000 x3e812048}}} {tx x42780000 x43b8c71c x43f51c72} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush57 512 catmullrom {cc {f 2080} {px x42780000 {x435a0000 x44278000 x3ce83a0f} {x435a0000 x44260000 x3e112449} {x435a0000 x44220000 x3e713c4f} {x435a0000 x441b0000 x3eaaaaab} {x437e0000 x43f70000 x3ef43d0f} {x43860000 x43df0000 x3efdbf70} {x43a40000 x436e0000 x3f1765d9} {x43cd0000 x42680000 x3f18a62a} {x43d70000 x41c00000 x3f1364d9} {x43ee0000 xc2080000 0}}} {tx x42780000 x4397e666 x43bf6666} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush56 512 catmullrom {cc {f 2080} {px x42780000 {x43b40000 x44090000 1} {x43b60000 x44008000 x3e882209} {x43bc0000 x43d90000 x3ea2a8aa} {x43c10000 x43ac0000 x3eb82e0c} {x43c70000 x432c0000 x3eca328d} {x43ca0000 x430e0000 x3ebe2f8c} {x43ce0000 x42d00000 0}}} {tx x42780000 x43c0db6e x43a14925} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush55 512 catmullrom {cc {f 2080} {px x42780000 {x435a0000 x43900000 1} {x43680000 x438f0000 x3e6d3b4f} {x437e0000 x438c0000 x3e743d0f} {x439b0000 x43860000 x3e892249} {x43ad0000 x43850000 x3e8e2389} {x43c10000 x43830000 x3e9725c9} {x44160000 x43800000 x3ed0b42d} {x44250000 x43800000 x3ed3b4ed} {x44558000 x43860000 x3e8ea3a9} {x445d8000 x43880000 0}}} {tx x42780000 x43ed4ccd x4387199a} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush54 512 catmullrom {cc {f 2080} {px x42780000 {x44158000 x43100000 1} {x44158000 x43120000 x3e6739ce} {x44168000 x43180000 x3e7e3f90} {x441e8000 x431e0000 x3ea4290a} {x442d8000 x43200000 x3ec7b1ec} {x445d8000 x432a0000 x3f062188} {x446b0000 x432c0000 x3f062188} {x44900000 x43360000 x3e912449}}} {tx x42780000 x443ec000 x43208000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush53 512 catmullrom {cc {f 2080} {px x42780000 {x44578000 x43700000 1} {x44530000 x436c0000 x3dda368e} {x44500000 x43680000 x3dfe3f90} {x444c8000 x43660000 x3e5e378e} {x44518000 x43720000 x3ea8aa2b} {x44558000 x437a0000 x3eb62d8b} {x445b8000 x43820000 x3ebbaeec} {x44620000 x43860000 x3ebbaeec} {x447e8000 x439c0000 x3ea5294a} {x44860000 x43a30000 0}}} {tx x42780000 x445f0000 x4381cccd} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush52 512 catmullrom {cc {f 2080} {px x42780000 {x44988000 x43600000 1} {x4497c000 x435c0000 x3ea2288a} {x44974000 x435a0000 x3ea5a96a} {x449ac000 x43700000 x3eb3aceb} {x449c8000 x437a0000 x3e892249} {x449e8000 x43800000 0}}} {tx x42780000 x449a3555 x436aaaab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush51 512 catmullrom {cc {f 2080} {px x42780000 {x44878000 x433e0000 1} {x44874000 x43380000 x3e20280a} {x44880000 x43360000 x3e2a2a8b} {x448b8000 x433c0000 x3e1f27ca} {x448d8000 x43420000 x3e1c270a} {x44934000 x43540000 x3c882209}}} {tx x42780000 x448b2aab x433faaab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush50 512 catmullrom {cc {f 2080} {px x42780000 {x446a0000 x42f80000 1} {x44730000 x43100000 x3e362d8b} {x44858000 x43440000 x3e2b2acb} {x448e8000 x436c0000 x3e5d374e} {x449d4000 x43950000 x3e9b26ca} {x449f4000 x43980000 x3e9b26ca} {x449dc000 x43920000 x3d64390e} {x449b8000 x438b0000 x3ce0380e} {x44980000 x43840000 0}}} {tx x42780000 x4490071c x436d5555} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush49 512 catmullrom {cc {f 2080} {px x42780000 {x445e8000 x42f00000 1} {x44608000 x42f40000 x3e753d4f} {x44640000 x43020000 x3e773dcf} {x44680000 x43100000 x3e793e50} {x447e0000 x43440000 x3e793e50} {x44838000 x435a0000 x3e793e50} {x44944000 x43950000 x3e8fa3e9} {x4497c000 x439e0000 x3e8aa2a9} {x449d8000 x43aa0000 0}}} {tx x42780000 x4481f1c7 x43515555} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush48 512 catmullrom {cc {f 2080} {px x42780000 {x446e0000 x43540000 1} {x44720000 x43600000 x3e56358d} {x44768000 x436e0000 x3e862188} {x447c8000 x437e0000 x3e97a5e9} {x448a0000 x439a0000 x3ebaaeac} {x4491c000 x43a70000 x3ec2308c} {x449a0000 x43b30000 x3d60380e}}} {tx x42780000 x448476db x4389b6db} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush47 512 catmullrom {cc {f 2080} {px x42780000 {x44934000 x43a80000 1} {x44908000 x439a0000 x3dd2348d}}} {tx x42780000 x4491e000 x43a10000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush46 512 catmullrom {cc {f 2080} {px x42780000 {x44ab4000 x43e60000 1} {x44a88000 x43ce0000 x3ea729ca} {x44a7c000 x43c40000 x3eb62d8b} {x44a68000 x43b60000 x3ec6318c} {x44a58000 x43a90000 x3ece338d} {x44a1c000 x436c0000 x3eceb3ad} {x449f8000 x43320000 x3e5a368e}}} {tx x42780000 x44a5d249 x43aa0000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush45 512 catmullrom {cc {f 2080} {px x42780000 {x44a80000 x43f50000 1} {x44a58000 x43e20000 x3e54350d} {x44a24000 x43ca0000 x3e8e2389} {x449e8000 x43ad0000 x3ead2b4b} {x44934000 x43420000 x3ed334cd} {x44904000 x431c0000 x3ed7b5ed} {x44898000 x42100000 x3ece338d} {x44898000 x41000000 0}}} {tx x42780000 x44989800 x43826000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush44 512 catmullrom {cc {f 2080} {px x42780000 {x44c2c000 x44248000 1} {x44c28000 x44248000 1} {x44c18000 x44240000 x3e743d0f} {x44c04000 x44218000 x3e952549} {x44bf8000 x441f8000 x3e9fa7ea} {x44ba0000 x44108000 x3eba2e8c} {x44af4000 x43ea0000 x3ed0b42d} {x449c0000 x438c0000 x3eddb76e} {x44948000 x43420000 0}}} {tx x42780000 x44b55c72 x4404aaab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush43 512 catmullrom {cc {f 2080} {px x42780000 {x44930000 x437c0000 1} {x44940000 x43840000 x3dc6318c} {x44980000 x43950000 x3e3e2f8c} {x449f8000 x43ac0000 x3e8aa2a9} {x44b84000 x43f60000 x3ee0380e} {x44d54000 x44160000 x3ee739ce} {x44db8000 x441b8000 x3ed735cd} {x44e58000 x44228000 0}}} {tx x42780000 x44b5a000 x43dc2000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush42 512 catmullrom {cc {f 2080} {px x42780000 {x44bcc000 x443c0000 1} {x44bc8000 x443c0000 x3e793e50} {x44bd4000 x443c8000 x3ea5294a} {x44bf0000 x443d0000 x3ead2b4b} {x44c1c000 x443e0000 x3ebeafac} {x44d38000 x44468000 x3efabeb0} {x44d98000 x44498000 x3f002008} {x44f00000 x44558000 x3e6e3b8f}}} {tx x42780000 x44ca8800 x4442a000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush41 512 catmullrom {cc {f 2080} {px x42780000 {x44b68000 x44170000 1} {x44b68000 x44190000 x3e54350d} {x44b9c000 x441e8000 x3e862188} {x44bf8000 x44270000 x3ea92a4b} {x44d3c000 x44430000 x3ed0340d} {x44e88000 x44608000 x3ed5354d} {x44ed4000 x44678000 x3ed5354d} {x44fa0000 x44768000 x3ec3b0ec} {x44fd8000 x44798000 x3eb7adeb} {x45014000 x447e8000 0}}} {tx x42780000 x44da9333 x444b199a} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush40 512 catmullrom {cc {f 2080} {px x42780000 {x44b40000 x44798000 1} {x44b40000 x447a0000 x3e5735cd} {x44b40000 x44790000 x3e882209} {x44b50000 x44770000 x3e9a268a} {x44bd4000 x445d0000 x3ebbaeec} {x44c4c000 x44400000 x3ec4310c} {x44ca0000 x44330000 0}}} {tx x42780000 x44bb0000 x4462c925} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush39 512 catmullrom {cc {f 2080} {px x42780000 {x4498c000 x446d8000 1} {x44980000 x446d8000 x3de0380e} {x44970000 x446d0000 x3e20280a} {x4495c000 x446c0000 x3e42308c} {x44950000 x446a8000 x3e5a368e} {x44914000 x44608000 x3e95a569} {x448d4000 x44438000 x3ea328ca} {x448a8000 x44248000 x3e842108} {x448a8000 x441e8000 x3e282a0b}}} {tx x42780000 x449271c7 x4455f1c7} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush38 512 catmullrom {cc {f 2080} {px x42780000 {x447a0000 x44240000 1} {x447f8000 x44240000 1} {x4483c000 x44240000 x3eaf2bcb} {x44884000 x44240000 x3ec8b22d} {x44930000 x44258000 x3ee0380e} {x449e8000 x44280000 x3ee5394e} {x44a80000 x442b0000 x3ed0b42d} {x44ac0000 x442c0000 x3ea2288a} {x44ae8000 x442d0000 0}}} {tx x42780000 x4494f8e4 x4427471c} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush37 512 catmullrom {cc {f 2080} {px x42780000 {x44798000 x44260000 1} {x44768000 x44270000 x3da0280a} {x44720000 x44270000 x3d2c2b0b} {x446c0000 x44270000 x3d302c0b} {x44680000 x44260000 x3d8a2289} {x44570000 x44200000 x3e282a0b} {x44450000 x44198000 x3e4d334d} {x44410000 x44188000 x3e5334cd} {x44380000 x44150000 x3e87a1e8} {x443d0000 x44160000 x3e9ca72a} {x44560000 x441f8000 x3ec7b1ec} {x44608000 x44230000 x3edb36ce} {x448bc000 x44350000 x3f0a6299} {x44a88000 x44428000 x3ec9b26d} {x44adc000 x44440000 x3e8721c8}}} {tx x42780000 x446f199a x44262222} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush36 512 catmullrom {cc {f 2080} {px x42780000 {x447c0000 x44060000 1} {x447c0000 x44070000 x3dc0300c} {x447d0000 x44098000 x3e6e3b8f} {x447e0000 x440c8000 x3e822088} {x4480c000 x44120000 x3dc8320d}}} {tx x42780000 x447db333 x440a999a} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush35 512 catmullrom {cc {f 2080} {px x42780000 {x44690000 x43f70000 1} {x446a8000 x43fb0000 x3e2f2bcb} {x446d0000 x43fe0000 x3e5334cd} {x44738000 x44048000 x3e95a569} {x44780000 x44080000 x3eaf2bcb} {x447e0000 x440c8000 x3ec0300c} {x44824000 x44110000 x3ed2b4ad} {x448a0000 x441c0000 x3eeb3acf} {x44998000 x44340000 x3eeabaaf} {x449d0000 x443a0000 x3ed5354d} {x44a38000 x44470000 0}}} {tx x42780000 x448562e9 x44161746} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush34 512 catmullrom {cc {f 2080} {px x42780000 {x44020000 x430e0000 1} {x44020000 x43200000 x3e96a5a9} {x44070000 x43440000 x3e9da76a} {x44128000 x43720000 x3ea3a8ea} {x44378000 x43b60000 x3ed1344d} {x44428000 x43c70000 x3ed1b46d} {x446a0000 x44030000 x3e5e378e} {x44720000 x44090000 0}}} {tx x42780000 x442e7000 x43a0e000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush33 512 catmullrom {cc {f 2080} {px x42780000 {x44160000 x43c20000 1} {x44170000 x43c00000 x3ea0280a} {x441b0000 x43bc0000 x3ea9aa6b} {x44270000 x43b50000 x3ec6318c} {x44360000 x43ae0000 x3ed2b4ad} {x44570000 x43a90000 x3eceb3ad} {x445e0000 x43a90000 x3ec6b1ac} {x44700000 x43ac0000 0}}} {tx x42780000 x44394000 x43b3e000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush32 512 catmullrom {cc {f 2080} {px x42780000 {x440d8000 x44170000 1} {x440d8000 x44180000 x3e693a4f} {x440d8000 x44168000 x3e9fa7ea} {x440e0000 x44140000 x3eae2b8b} {x44100000 x44108000 x3eb9ae6c} {x441e0000 x43e50000 x3ef23c8f} {x442d8000 x43950000 x3f12e4b9} {x443c8000 x432c0000 x3f152549} {x44400000 x431c0000 x3f122489} {x44470000 x43100000 x3dae2b8b}}} {tx x42780000 x44222666 x43d2999a} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush31 512 catmullrom {cc {f 2080} {px x42780000 {x43f20000 x441f0000 1} {x43ef0000 x44218000 x3e9ba6ea} {x43ee0000 x44228000 x3ec1b06c} {x43f00000 x441e8000 x3eefbbef} {x43f40000 x441a0000 x3efc3f10} {x44000000 x440e0000 x3f06e1b8} {x44138000 x43d00000 x3f17e5f9} {x44260000 x437a0000 x3f1ce73a} {x442a8000 x43580000 x3f1da76a} {x44370000 x43100000 x3f0fe3f9} {x443a0000 x43180000 0}}} {tx x42780000 x440fdd17 x43e00000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush30 512 catmullrom {cc {f 2080} {px x42780000 {x44120000 x44190000 1} {x44128000 x44130000 x3e5735cd} {x44128000 x440c8000 x3e5735cd} {x440c8000 x43fa0000 x3e9ea7aa} {x440a8000 x43f20000 x3e9ea7aa} {x44070000 x43e50000 0}}} {tx x42780000 x440e2aab x44058000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush29 512 catmullrom {cc {f 2080} {px x42780000 {x43fb0000 x443d0000 x3e61384e} {x43fb0000 x443c8000 x3e7e3f90} {x43fb0000 x44390000 x3e952549} {x43fb0000 x44330000 x3ea729ca} {x43fb0000 x442e8000 x3eae2b8b} {x44010000 x44190000 x3ebdaf6c} {x44030000 x44090000 x3ebaaeac} {x44038000 x44070000 x3ea2a8aa} {x44040000 x44070000 0}}} {tx x42780000 x43ffc71c x44240000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush28 512 catmullrom {cc {f 2080} {px x42780000 {x44078000 x447a0000 1} {x44080000 x447b0000 x3dc6318c} {x44080000 x447b8000 x3e19264a} {x44070000 x44798000 x3e8a2289} {x44050000 x44780000 x3e94a529} {x44038000 x44708000 x3ea4290a} {x44018000 x44548000 x3ec1b06c} {x44018000 x444a0000 x3ec6318c} {x43fc0000 x44190000 x3eca328d} {x43f70000 x43df0000 x3dd6358d}}} {tx x42780000 x44038ccd x4458f333} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush27 512 catmullrom {cc {f 2080} {px x42780000 {x43fd0000 x446f0000 1} {x43fc0000 x446f8000 x3e2d2b4b} {x43fa0000 x446f8000 x3e8a2289} {x43fa0000 x446e0000 x3eb5ad6b} {x43fb0000 x446c0000 x3ebc2f0c} {x44038000 x44618000 x3eccb32d} {x44170000 x443f8000 x3ef7bdef} {x441c0000 x44350000 x3f00a028} {x442e0000 x440d8000 x3f04e138} {x443a0000 x43e90000 x3eb62d8b} {x443f0000 x43de0000 0}}} {tx x42780000 x44130ba3 x444445d1} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush26 512 catmullrom {cc {f 2080} {px x42780000 {x446d8000 x448a0000 x3daa2a8b} {x446d0000 x448a0000 x3e1324c9} {x446c8000 x4489c000 x3e392e4c} {x446c8000 x44898000 x3e49324d} {x446a8000 x44878000 x3e6a3a8f} {x44678000 x44848000 x3e91a469} {x44638000 x44800000 x3eb02c0b} {x44608000 x447b8000 x3ebc2f0c} {x445d0000 x44760000 x3ec4b12c} {x44580000 x44708000 x3ecc330d} {x44438000 x445d0000 x3ec6318c} {x443a8000 x44570000 0}}} {tx x42780000 x445fb555 x447fb555} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush25 512 catmullrom {cc {f 2080} {px x42780000 {x44610000 x44670000 1} {x44610000 x44678000 x3e162589} {x44648000 x446d0000 x3dfa3e90} {x446e0000 x44770000 x3e49324d} {x44760000 x447f8000 x3e94a529} {x44770000 x44808000 x3e99264a} {x44788000 x44814000 x3e9ba6ea} {x44740000 x44808000 0}}} {tx x42780000 x446dc000 x4476d000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush24 512 catmullrom {cc {f 2080} {px x42780000 {x44040000 x446d8000 1} {x440c0000 x446b0000 1} {x44158000 x44698000 x3e6d3b4f} {x443b0000 x44608000 x3ea8aa2b} {x44578000 x445a8000 x3ed2348d} {x4488c000 x444e0000 x3ee338ce} {x44a30000 x44488000 x3db82e0c}}} {tx x42780000 x444b5b6e x445e36db} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush23 512 catmullrom {cc {f 2080} {px x42780000 {x43d80000 x44710000 1} {x43e30000 x446e0000 x3e892249} {x44018000 x44680000 x3eb42d0b} {x44158000 x44640000 x3ec4b12c} {x443d0000 x445e0000 x3ebaaeac} {x44458000 x445d8000 x3ea328ca} {x44510000 x445c0000 0}}} {tx x42780000 x441c9249 x4464edb7} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush22 512 catmullrom {cc {f 2080} {px x42780000 {x43da0000 x447f8000 1} {x43e30000 x447e0000 x3e86a1a8} {x43fc0000 x44788000 x3eb62d8b} {x440f0000 x44728000 x3ed9b66e} {x44188000 x446f8000 x3ee0b82e} {x44398000 x44678000 x3ed735cd} {x44468000 x44668000 0}}} {tx x42780000 x4412db6e x44732492} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush21 512 catmullrom {cc {f 2080} {px x42780000 {x43600000 x4485c000 1} {x435c0000 x44860000 x3e352d4b} {x435c0000 x4486c000 x3e87a1e8} {x43720000 x44850000 x3ec9324d} {x43820000 x44838000 x3ed9364e} {x438b0000 x44818000 x3eddb76e} {x43960000 x447f8000 x3edf37ce} {x43c10000 x44728000 x3ecd334d} {x43cb0000 x44700000 x3eb7adeb} {x43d90000 x446c8000 0}}} {tx x42780000 x43948000 x44806000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush20 512 catmullrom {cc {f 2080} {px x42780000 {x43a80000 x44760000 x3e703c0f} {x43aa0000 x44770000 x3e8a2289} {x43be0000 x447c8000 x3eacab2b} {x43d00000 x4480c000 x3ebc2f0c} {x43da0000 x44820000 x3ebfafec} {x43f60000 x44844000 0}}} {tx x42780000 x43c80000 x447e9555} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush19 512 catmullrom {cc {f 2080} {px x42780000 {x42200000 x444f0000 1} {x42100000 x444e8000 x3d962589} {x42000000 x444e0000 x3e4f33cd} {x42680000 x44510000 x3e902409} {x43020000 x44590000 x3ea7a9ea} {x431e0000 x445d0000 x3eb0ac2b} {x43620000 x44638000 x3ec5314c} {x43850000 x44678000 x3ece338d} {x43d80000 x44780000 x3edeb7ae} {x43ec0000 x447a0000 x3ed6b5ad} {x44188000 x447f0000 x3daa2a8b}}} {tx x42780000 x435fa2e9 x44615174} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush18 512 catmullrom {cc {f 2080} {px x42780000 {x42d80000 x445a8000 1} {x42c80000 x44590000 x3d282a0b} {x42c00000 x44580000 x3d18260a} {x42b00000 x44570000 x3c40300c}}} {tx x42780000 x42c40000 x4458a000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush17 512 catmullrom {cc {f 2080} {px x42780000 {xc0000000 x445a8000 1} {xc1000000 x445a8000 x3e743d0f} {xc1200000 x445a8000 x3e9a268a} {xc1000000 x445a8000 x3e9b26ca} {x41200000 x445a8000 x3e9da76a} {x41800000 x445a8000 x3ea0280a} {x42200000 x44580000 x3ebc2f0c} {x431a0000 x444c0000 x3ef23c8f} {x43980000 x44428000 x3f006018} {x43ac0000 x44410000 x3f03a0e8} {x43f60000 x443e0000 x3f06e1b8} {x44138000 x443e0000 0}}} {tx x42780000 x43202aab x44503555} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush16 512 catmullrom {cc {f 2080} {px x42780000 {xc2600000 x44230000 1} {xc2600000 x44220000 x3e783e10} {xc2100000 x441f8000 x3e94a529} {x40800000 x441c0000 x3eb0ac2b} {x42080000 x44198000 x3eb8ae2c} {x428c0000 x44170000 x3ebc2f0c} {x42d80000 x44140000 x3ec6318c} {x43950000 x44070000 x3edfb7ee} {x43af0000 x44038000 x3ee4390e} {x44130000 x43de0000 x3eef3bcf} {x44480000 x43bb0000 x3ebfafec} {x44560000 x43b20000 0}}} {tx x42780000 x4376aaab x4409c000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush15 512 catmullrom {cc {f 2080} {px x42780000 {x41200000 x440f8000 x3e693a4f} {x41b00000 x440e0000 x3ea1284a} {x42400000 x440d0000 x3ec2308c} {x43000000 x44098000 x3ed3b4ed} {x43120000 x44098000 x3ebe2f8c} {x43240000 x44098000 0}}} {tx x42780000 x42acaaab x440bd555} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush14 512 catmullrom {cc {f 2080} {px x42780000 {x430e0000 x443d0000 x3e6e3b8f} {x430e0000 x443a0000 x3e90a429} {x43120000 x44378000 x3e9b26ca} {x431a0000 x44348000 x3ea328ca} {x43480000 x44210000 x3eaf2bcb} {x43580000 x441a0000 x3eb2acab} {x438f0000 x43eb0000 x3ec1b06c} {x43ae0000 x439b0000 x3ebeafac} {x43bf0000 x43660000 0}}} {tx x42780000 x43600000 x44112aab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush13 512 catmullrom {cc {f 2080} {px x42780000 {x43890000 x441c0000 1} {x438f0000 x441b8000 x3e6b3acf} {x43960000 x44198000 x3e8b22c9} {x43ac0000 x44158000 x3eb5ad6b} {x43c70000 x440f8000 x3ebfafec} {x44070000 x44000000 x3ec0b02c} {x44128000 x43f50000 x3ec0b02c} {x44440000 x43c00000 x3ed334cd} {x44758000 x43850000 x3eeebbaf} {x44908000 x43280000 x3ee739ce} {x4494c000 x43140000 x3edeb7ae} {x449d4000 x43000000 x3e6b3acf}}} {tx x42780000 x4428b555 x43d5aaab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush12 512 catmullrom {cc {f 2080} {px x42780000 {x44e54000 x44470000 1} {x44e48000 x44470000 x3e4d334d} {x44e3c000 x44470000 x3e6d3b4f} {x44e18000 x44470000 x3ea6a9aa} {x44e0c000 x44480000 x3ead2b4b} {x44de4000 x44488000 x3ebc2f0c} {x44d64000 x44490000 x3ed1b46d} {x44c68000 x44490000 x3edcb72e} {x44c14000 x44488000 x3eddb76e} {x44a88000 x44450000 x3ee0380e} {x448a0000 x443d8000 x3ee3b8ee} {x44814000 x443b0000 x3ee4390e} {x443f8000 x442d8000 x3eedbb6f} {x43fc0000 x441f8000 x3eedbb6f} {x43e00000 x441d0000 x3ee83a0f} {x43920000 x44168000 x3e93a4e9} {x43860000 x44160000 0}}} {tx x42780000 x449de969 x443a0f0f} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush11 512 catmullrom {cc {f 2080} {px x42780000 {x448bc000 x44860000 1} {x448cc000 x44860000 x3e6338ce} {x44900000 x44858000 x3e952549} {x44928000 x44854000 x3e9f27ca} {x44988000 x4483c000 x3ea7a9ea} {x44a80000 x44800000 x3eb3aceb} {x44acc000 x447e0000 x3eb6adab} {x44c28000 x44768000 x3ebc2f0c} {x44da8000 x44708000 x3ec0300c} {x44eb8000 x446d0000 x3d962589}}} {tx x42780000 x44ab4666 x4480599a} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush10 512 catmullrom {cc {f 2080} {px x42780000 {x44e14000 x44540000 1} {x44e14000 x44500000 x3d942509} {x44e24000 x444e0000 x3d9e278a} {x44e2c000 x444d0000 x3d9e278a} {x44e3c000 x444c8000 0}}} {tx x42780000 x44e24000 x444f199a} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush9 512 catmullrom {cc {f 2080} {px x42780000 {x44de4000 x44710000 x3de0380e} {x44de0000 x44710000 x3e352d4b} {x44de4000 x44728000 x3e6d3b4f} {x44df0000 x44738000 x3e922489} {x44df8000 x44760000 x3ea1284a} {x44e50000 x44838000 x3eab2acb} {x44ea0000 x448bc000 x3e952549} {x44ebc000 x448e4000 0}}} {tx x42780000 x44e27800 x447f2000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush8 512 catmullrom {cc {f 2080} {px x42780000 {x44c28000 x44450000 1} {x44c14000 x44430000 x3d342d0b} {x44bec000 x44400000 x3dd4350d} {x44bd0000 x443d8000 x3e122489} {x44bc0000 x443d0000 x3e4f33cd} {x44bd4000 x44400000 x3e5735cd} {x44c40000 x444c8000 x3e952549} {x44c70000 x44520000 x3e9da76a} {x44d48000 x446b0000 x3ec0300c} {x44e18000 x44820000 x3ebdaf6c} {x44eb4000 x448bc000 x3d703c0f}}} {tx x42780000 x44c92e8c x44550ba3} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush7 512 catmullrom {cc {f 2080} {px x42780000 {x44b38000 x445e8000 1} {x44b48000 x445d8000 x3e892249} {x44bb8000 x445a8000 x3eb5ad6b} {x44be8000 x44590000 x3ec1304c} {x44c1c000 x44580000 x3ec5314c} {x44c50000 x44570000 x3ec7b1ec} {x44cb8000 x44548000 x3ec9324d} {x44d3c000 x44530000 0}}} {tx x42780000 x44c10000 x4458c000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush6 512 catmullrom {cc {f 2080} {px x42780000 {x44b68000 x44380000 1} {x44b60000 x44380000 x3e64390e} {x44b60000 x44390000 x3e802008} {x44b60000 x443b0000 x3e922489} {x44b78000 x44438000 x3eaaaaab} {x44bec000 x445b0000 x3ee4390e} {x44c58000 x44780000 x3ee93a4f} {x44c88000 x44858000 0}}} {tx x42780000 x44bb9800 x4450b000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush5 512 catmullrom {cc {f 2080} {px x42780000 {x449c0000 x44720000 1} {x449dc000 x446c8000 x3e5e378e} {x44a28000 x445d8000 x3e783e10} {x44a88000 x444a0000 x3e8da369} {x44ac4000 x443f0000 x3ea92a4b} {x44bcc000 x440c8000 x3efc3f10} {x44d1c000 x43a60000 x3f096259} {x44d70000 x43890000 x3f09a269} {x44e74000 x428c0000 x3efb3ed0} {x44ee0000 xc1b00000 0}}} {tx x42780000 x44bdf99a x440bb333} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush4 512 catmullrom {cc {f 2080} {px x42780000 {x449c8000 x43c00000 1} {x449c0000 x43bc0000 x3e49324d} {x449b8000 x43b80000 x3e8da369} {x449b8000 x43b60000 x3ead2b4b} {x449d8000 x43c60000 x3ee7b9ee} {x44a94000 x43fe0000 x3f0de379} {x44cc8000 x44360000 x3f23a8ea} {x44ea8000 x44580000 x3f16a5a9} {x44fd0000 x44690000 x3dc6318c}}} {tx x42780000 x44b678e4 x4408aaab} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush3 512 catmullrom {cc {f 2080} {px x42780000 {x44958000 x447b8000 1} {x44974000 x44790000 x3e292a4b} {x44994000 x44760000 x3e65394e} {x449c0000 x44720000 x3e8721c8} {x44a28000 x44668000 x3eae2b8b} {x44b20000 x44430000 x3ef33ccf} {x44b68000 x44378000 x3effbff0} {x44cc0000 x44040000 x3f14e539} {x44e2c000 x43960000 x3f19665a} {x44f78000 x42d00000 x3eccb32d} {x44fd8000 x428c0000 0}}} {tx x42780000 x44bbb45d x44280000} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush2 512 catmullrom {cc {f 2080} {px x42780000 {x44288000 x443f0000 x3e042108} {x442a8000 x443f0000 x3e6338ce} {x44300000 x443d0000 x3e8b22c9} {x44338000 x443c0000 x3e91a469} {x44488000 x44310000 x3e9ca72a} {x44710000 x441e0000 x3ea6298a} {x44930000 x440f8000 x3ec1304c} {x44b0c000 x44080000 x3ebd2f4c} {x44b8c000 x44080000 x3eba2e8c} {x44d90000 x44080000 x3e8721c8} {x44ee8000 x44060000 x3c302c0b}}} {tx x42780000 x448b45d1 x4421c5d1} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {px x42780000 {x42800000 x43500000 x3d0c2309} {x42800000 x43560000 x3d8e2389} {x42800000 x43620000 x3e102409} {x428c0000 x43720000 x3e6e3b8f} {x42900000 x43800000 x3e922489} {x42e00000 x43b60000 x3efa3e90} {x43740000 x44188000 x3f0ca329} {x43c10000 x444f0000 x3f07e1f8} {x44060000 x44788000 x3ee93a4f} {x440f0000 x44800000 x3ebc2f0c} {x44168000 x44830000 0}}} {tx x42780000 x437d45d1 x4408ae8c} {a ro 0 go 0 bo 0 ao 0 opc x3f000000 bs x40a00000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x42780000 ltm x42780000 tt x41880000}}}}}} toolbox {brush { { selectAll r 0 g 0 b 0 opc 0.5 bs 5 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createOpenSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush r 0 g 0 b 0 opc 0.5 bs 5 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 62 ltm 62 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_paint_color {0 0 0 1} toolbar_opacity 0.5 toolbar_brush_size 5 toolbar_brush_hardness 0.200000003 toolbar_lifetime_type single toolbar_lifetime_start 62 toolbar_lifetime_end 62 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {960 540} colorOverlay {0 0 0 0} opacity 0.5 lifetime_type "all frames" lifetime_start 62 lifetime_end 62 brush_size 5 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint7 xpos 2300 ypos 14735 disable {{"parent.lensDirtPicker == 2 ? 0 : 1"}} } Merge2 { inputs 2 operation multiply name Merge14 xpos 2300 ypos 14777 } Merge2 { inputs 2 operation multiply name Merge15 xpos 2300 ypos 14815 } Sharpen { name Sharpen1 xpos 2300 ypos 14848 } FrameHold { name FrameHold2 xpos 2300 ypos 14917 } push $Ne1809000 RotoPaint { cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 512} {t x44768000 x43fd0000} {a} {cubiccurve Blur1 512 catmullrom {cc {f 2080} {px x41300000 {x42380000 x446b8000 x3c980007} {x42380000 x446c0000 x3d200000} {x42400000 x446b8000 x3e21001d} {x42300000 x44644000 x3edafff3} {x42380000 x44644000 x3f03e005} {x42380000 x446b8000 x3f0ddffc} {x42280000 x44694000 x3f1fe005} {x42400000 x4461c000 x3f225ffa} {x42300000 x44650000 x3f241ffb} {x42140000 x446e8000 x3f24e001} {x42240000 x44680000 x3f2a5ffa} {x42300000 x44614000 x3f2c9ff9} {x42140000 x4466c000 x3f2d5ffe} {x42080000 x446e0000 x3f2da006} {x421c0000 x4464c000 x3f2ea002} {x42400000 x445c4000 x3f2e2004} {x42280000 x445c8000 x3f2da006} {x42080000 x445b0000 x3f2ddffc} {x41980000 x44578000 x3f2ce001} {x41200000 x44578000 x3f2d5ffe} {x41200000 x44598000 x3f2c9ff9} {x42240000 x44664000 x3f2c9ff9} {x424c0000 x446f4000 x3f2c9ff9} {x40000000 x44754000 x3f2c9ff9} {xc1880000 x4474c000 x3f2da006} {x41100000 x447a0000 x3f2c9ff9} {x41a00000 x447ac000 x3f2b9ffd} {x42700000 x44798000 x3f2c1ffb} {x42240000 x44740000 x3f2d5ffe} {x41100000 x44774000 x3f2ddffc} {x42580000 x44808000 x3f2c9ff9} {x429a0000 x447d4000 x3f2d5ffe} {x41d00000 x4478c000 x3f309ff9} {x42300000 x447fc000 x3f312008} {x42a00000 x44820000 x3f2f9ffd} {x42a00000 x447fc000 x3f31a006} {x427c0000 x44828000 x3f336007} {x42540000 x4483c000 x3f322004} {x41f80000 x4486c000 x3f322004} {x42000000 x44876000 x3f2fe005} {x42440000 x44836000 x3f265ffa} {x42540000 x4480c000 x3d780007}}} {t {{x41300000 x421e617c}} {{x41300000 x44709862}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42b60000 bt x40000000 bu 1 src 1 spx 0 spy 0 sb 1 ltn x421c0000 ltm x421c0000 ep1 x41700000 tt x41a00000 nv x40000000 view2 x40000000}} {cubiccurve Brush262 512 catmullrom {cc {f 2080} {px x41300000 {x44ee4000 x43880000 x3d1bfff6} {x44ee0000 x438c8000 x3d27fff9}}} {t {{x41300000 x44ee2000}} {{x41300000 x438a4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush261 512 catmullrom {cc {f 2080} {px x41300000 {x44eea000 x43450000 x3d27fff9} {x44ee6000 x43450000 x3cb0000d}}} {t {{x41300000 x44ee8000}} {{x41300000 x43450000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush260 512 catmullrom {cc {f 2080} {px x41300000 {x44ee4000 x42e40000 x3ccffff3} {x44ef4000 x42ea0000 x3d000000}}} {t {{x41300000 x44eec000}} {{x41300000 x42e70000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush259 512 catmullrom {cc {f 2080} {px x41300000 {x44f6c000 xc1000000 x3ce7fff9} {x44f6c000 xc1200000 x3ce0001b}}} {t {{x41300000 x44f6c000}} {{x41300000 xc1100000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush258 512 catmullrom {cc {f 2080} {px x41300000 {x44f2a000 x42e80000 x3c880014} {x44f34000 x42be0000 x3c9fffe5} {x44f32000 x42880000 x3d0c0003} {x44f2e000 x427c0000 x3e977ff1} {x44f2a000 x42540000 x3eaa8006} {x44f24000 x42140000 x3eaf7ff1} {x44f28000 x41b00000 x3ea1fff8} {x44f2a000 x41600000 x3e770004} {x44f2a000 x40a00000 x3e48fffc} {x44f2e000 x40000000 x3e4e0008} {x44f34000 xc1600000 x3e58fffc} {x44f32000 xc1880000 x3e65000d}}} {t {{x41300000 x44f2d000}} {{x41300000 x42140000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush257 512 catmullrom {cc {f 2080} {px x41300000 {x44cbc000 x43d80000 x3cf0000d} {x44cca000 x43d58000 x3d87fff9}}} {t {{x41300000 x44cc3000}} {{x41300000 x43d6c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush256 512 catmullrom {cc {f 2080} {px x41300000 {x44bee000 x43340000 x3ca7fff9} {x44bea000 x43360000 x3cb0000d} {x44bea000 x433b0000 x3ca7fff9} {x44bee000 x43420000 x3bc0000b} {x44bee000 x43450000 x3d04000a}}} {t {{x41300000 x44bec666}} {{x41300000 x433c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush255 512 catmullrom {cc {f 2080} {px x41300000 {x44ba2000 x427c0000 x3cc80014} {x44bb0000 x42b40000 x3cd80007}}} {t {{x41300000 x44ba9000}} {{x41300000 x42990000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush254 512 catmullrom {cc {f 2080} {px x41300000 {x44b70000 xc0e00000 x3c8ffff3} {x44b6c000 xc0000000 x3cd80007} {x44b72000 x41400000 x3dddffc5} {x44b7a000 x41b00000 x3e070004} {x44b7e000 x41d80000 x3debffce} {x44b80000 x42000000 x3d000000}}} {t {{x41300000 x44b76571}} {{x41300000 x41600000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush253 512 catmullrom {cc {f 2080} {px x41300000 {x449f6000 x444f0000 x3ca7fff9} {x449f2000 x44528000 x3cf7ffec} {x449f0000 x44564000 x3d4ffff3} {x449f2000 x44584000 x3d3bfff6} {x449f2000 x445bc000 x3d000000} {x449f2000 x445d8000 x3d180007} {x449f0000 x4460c000 x3d30000d}}} {t {{x41300000 x449f2000}} {{x41300000 x44584927}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush252 512 catmullrom {cc {f 2080} {px x41300000 {x44a28000 x44138000 x3cb7ffec} {x44a26000 x44140000 x3d27fff9}}} {t {{x41300000 x44a27000}} {{x41300000 x4413c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush251 512 catmullrom {cc {f 2080} {px x41300000 {x44a0e000 x440e8000 x3d0c0003} {x44a12000 x440f4000 x3d30000d} {x44a14000 x440f4000 x3e200000} {x44a14000 x44100000 x3e41001d}}} {t {{x41300000 x44a12000}} {{x41300000 x440f4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush250 512 catmullrom {cc {f 2080} {px x41300000 {x44a00000 x4409c000 x3c6fffd8} {x44a08000 x440c4000 x3c980007}}} {t {{x41300000 x44a04000}} {{x41300000 x440b0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush249 512 catmullrom {cc {f 2080} {px x41300000 {x449fc000 x43d38000 x3cb7ffec} {x44a04000 x43de8000 x3cd80007} {x44a04000 x43e70000 x3e1cffeb} {x44a00000 x43e90000 x3e4effe3} {x449fc000 x43f30000 x3e4c0011} {x449fc000 x43f80000 x3e3cffeb} {x449fc000 x44004000 x3e3cffeb} {x449fc000 x44014000 x3e3effe3} {x449fa000 x44018000 x3e3e0008} {x44a00000 x44044000 x3e3cffeb} {x44a00000 x44058000 x3e33ffef} {x449fc000 x44078000 x3e1e0008} {x449fc000 x44080000 x3b9ffffb}}} {t {{x41300000 x449fe000}} {{x41300000 x43f909db}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush248 512 catmullrom {cc {f 2080} {px x41300000 {x44950000 x434e0000 x3c8ffff3} {x44952000 x434e0000 x3d000000}}} {t {{x41300000 x44951000}} {{x41300000 x434e0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush247 512 catmullrom {cc {f 2080} {px x41300000 {x449da000 x43050000 x3d0ffff3} {x449da000 x43030000 x3d900000} {x449e2000 x43030000 x3e130015} {x449e2000 x43010000 0}}} {t {{x41300000 x449de000}} {{x41300000 x43030000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush246 512 catmullrom {cc {f 2080} {px x41300000 {x449f2000 x42300000 x3c9fffe5} {x44a00000 x42080000 x3d000000} {x44a08000 x41700000 x3df00043}}} {t {{x41300000 x449fe000}} {{x41300000 x41f80000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush245 512 catmullrom {cc {f 2080} {px x41300000 {x4498c000 x41000000 x3d380007} {x44990000 x41000000 x3e0cffeb} {x4499a000 x40e00000 x3e27ffde} {x449a4000 xc0000000 x3e400000} {x449a8000 0 x3e3cffeb} {x449ac000 x40a00000 x3e380022} {x449a8000 x40a00000 x3e41001d}}} {t {{x41300000 x4499e948}} {{x41300000 x408db6d8}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush244 512 catmullrom {cc {f 2080} {px x41300000 {x43710000 x40a00000 x3d83fffd} {x43760000 x40a00000 x3ddc0011}}} {t {{x41300000 x43738000}} {{x41300000 x40a00000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush243 512 catmullrom {cc {f 2080} {px x41300000 {x43470000 x42300000 x3ce0001b} {x43530000 x42240000 x3d0ffff3} {x43560000 x42100000 x3db3fffd}}} {t {{x41300000 x43500000}} {{x41300000 x4221554d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush242 512 catmullrom {cc {f 2080} {px x41300000 {x41e80000 x431c0000 x3d9c0003} {x41f80000 x43190000 x3e35ffe7} {x42000000 x43160000 x3dc3fffd}}} {t {{x41300000 x41f55567}} {{x41300000 x43190000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush241 512 catmullrom {cc {f 2080} {px x41300000 {x42700000 x43690000 x3d400000} {x42540000 x434f0000 x3e0effe3}}} {t {{x41300000 x42620000}} {{x41300000 x435c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush240 512 catmullrom {cc {f 2080} {px x41300000 {x42960000 x43aa0000 x3cb0000d} {x429a0000 x43a78000 x3d33fffd}}} {t {{x41300000 x42980000}} {{x41300000 x43a8c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush239 512 catmullrom {cc {f 2080} {px x41300000 {x41d00000 x43dd0000 x3ce0001b} {x41d00000 x43dc0000 x3d200000} {x42080000 x43d70000 x3e0c0011} {x42380000 x43d00000 x3e100000} {x42300000 x43cd0000 x3e03ffef} {x42140000 x43cd8000 x3e070004} {x41d80000 x43d30000 x3e0afff3} {x42080000 x43d30000 x3e07ffde} {x42400000 x43d00000 x3e01001d}}} {t {{x41300000 x420f1c78}} {{x41300000 x43d39c6a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush238 512 catmullrom {cc {f 2080} {px x41300000 {x41f80000 x440a8000 x3d0ffff3} {x41f80000 x440a0000 x3d380007} {x42000000 x44074000 x3d64000a} {x42300000 x44048000 x3dfc0011}}} {t {{x41300000 x420a0000}} {{x41300000 x44081000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush237 512 catmullrom {cc {f 2080} {px x41300000 {x428e0000 x44470000 x3c9fffe5} {x42880000 x4444c000 x3ce0001b}}} {t {{x41300000 x428b0000}} {{x41300000 x4445e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush236 512 catmullrom {cc {f 2080} {px x41300000 {x427c0000 x44528000 x3ce7fff9} {x42680000 x4450c000 x3d0c0003}}} {t {{x41300000 x42720000}} {{x41300000 x4451a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush235 512 catmullrom {cc {f 2080} {px x41300000 {x41d80000 x44534000 x3cb0000d} {x41f80000 x44518000 x3cd80007}}} {t {{x41300000 x41e80000}} {{x41300000 x44526000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush234 512 catmullrom {cc {f 2080} {px x41300000 {x41d80000 x44578000 x3ca7fff9} {x41d80000 x44568000 x3d7bfff6} {x41b00000 x44550000 x3db20005}}} {t {{x41300000 x41caaa99}} {{x41300000 x44565550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush233 512 catmullrom {cc {f 2080} {px x41300000 {x41d00000 x4460c000 x3cb0000d} {x41c00000 x4460c000 x3d30000d} {x41e80000 x44614000 x3d83fffd} {x41f80000 x44614000 x3e070004} {x41e80000 x445f4000 x3e380022} {x41f80000 x445d0000 x3cf0000d}}} {t {{x41300000 x41e2aa99}} {{x41300000 x44600ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush232 512 catmullrom {cc {f 2080} {px x41300000 {x42300000 x44784000 x3d1bfff6} {x421c0000 x44770000 x3dcfffbd} {x42140000 x44760000 x3e130015} {x42000000 x44754000 x3e21fff8} {x42240000 x44768000 x3e4effe3} {x42580000 x44790000 x3e65000d} {x42280000 x4475c000 x3e9c7ffe} {x421c0000 x44748000 x3ea0800f} {x42240000 x44754000 x3ea5000d} {x421c0000 x44760000 x3ea80000} {x42140000 x4474c000 x3ea38002} {x421c0000 x44738000 x3c400036}}} {t {{x41300000 x4221554d}} {{x41300000 x4475fab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush231 512 catmullrom {cc {f 2080} {px x41300000 {x42960000 x44790000 x3d0c0003} {x428c0000 x4475c000 x3d70000d} {x42a40000 x4477c000 x3e8d000d} {x42ae0000 x44790000 x3e8e7ff6} {x42920000 x4475c000 x3ea8800f} {x42820000 x44740000 x3eaa8006} {x42820000 x44754000 x3ea5000d} {x42680000 x44748000 x3ea1fff8} {x42680000 x44730000 x3e07ffde}}} {t {{x41300000 x428caaa6}} {{x41300000 x44760000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush230 512 catmullrom {cc {f 2080} {px x41300000 {x42000000 x446f4000 x3cd80007} {x42080000 x446fc000 x3d600000} {x42080000 x446e8000 x3dd1fff8} {x42080000 x446fc000 x3db3fffd} {x41c00000 x44768000 x3dc00000} {x41b00000 x44784000 x3dc20005} {x41c00000 x44774000 x3da00000} {x41e80000 x4477c000 x3c8ffff3} {x41d80000 x44774000 x3d30000d} {x41c00000 x44774000 x3e27ffde} {x41600000 x44784000 x3e3cffeb} {x41700000 x44798000 x3e4effe3} {x41880000 x4478c000 x3e500000} {x41400000 x44784000 x3e6a0019} {x41700000 x447b8000 x3e75ffe7} {x41e80000 x447d0000 x3e71fff8} {x42240000 x447a4000 x3e6afff3} {x42280000 x447a0000 0}}} {t {{x41300000 x41d071de}} {{x41300000 x4476b8e5}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush229 512 catmullrom {cc {f 2080} {px x41300000 {x43a90000 x445f4000 x3cb7ffec} {x43a60000 x4455c000 x3cd80007}}} {t {{x41300000 x43a78000}} {{x41300000 x445a8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush228 512 catmullrom {cc {f 2080} {px x41300000 {x43a40000 x44798000 x3cc00000} {x43990000 x44738000 x3d580007} {x43958000 x446f4000 x3dddffc5} {x43950000 x446e0000 x3dddffc5} {x438c8000 x44694000 x3dddffc5} {x438a8000 x44680000 x3dddffc5} {x43840000 x4463c000 x3de7ffde} {x43810000 x44620000 x3df1fff8} {x43780000 x445e4000 x3df00043} {x43750000 x445c4000 x3df00043} {x43730000 x445bc000 x3d89fffe} {x43730000 x445b0000 0}}} {t {{x41300000 x43891560}} {{x41300000 x4466e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush227 512 catmullrom {cc {f 2080} {px x41300000 {x43b60000 x44710000 x3d1bfff6} {x43b50000 x44710000 x3d93fffd} {x43b60000 x44710000 x3dadfffb} {x43bb0000 x446fc000 x3de00000} {x43bc8000 x446ec000 0}}} {t {{x41300000 x43b8199a}} {{x41300000 x44704ccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush226 512 catmullrom {cc {f 2080} {px x41300000 {x44108000 x44550000 x3d180007} {x440ec000 x4458c000 x3d73fffd} {x440cc000 x445c4000 x3e130015} {x440c4000 x445dc000 x3dbdfffb}}} {t {{x41300000 x440e1000}} {{x41300000 x4459f000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush225 512 catmullrom {cc {f 2080} {px x41300000 {x44060000 x44468000 x3ca7fff9} {x44048000 x44474000 x3d400000} {x4403c000 x4447c000 x3d89fffe} {x44064000 x44488000 x3d200000} {x44088000 x44488000 x3da9fffe} {x440cc000 x44498000 x3d93fffd}}} {t {{x41300000 x4406f550}} {{x41300000 x44480000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush224 512 catmullrom {cc {f 2080} {px x41300000 {x44034000 x44430000 x3d1bfff6} {x44044000 x44440000 x3d380007}}} {t {{x41300000 x4403c000}} {{x41300000 x44438000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush223 512 catmullrom {cc {f 2080} {px x41300000 {x43f40000 x44330000 x3c60001b} {x43f80000 x44348000 x3d200000} {x43fd8000 x44388000 x3d53fffd}}} {t {{x41300000 x43f88000}} {{x41300000 x44355550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush222 512 catmullrom {cc {f 2080} {px x41300000 {x43db8000 x4442c000 x3ccffff3} {x43ea0000 x4441c000 x3d0ffff3} {x43ec8000 x44408000 x3da7fff9}}} {t {{x41300000 x43e60000}} {{x41300000 x4441aab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush221 512 catmullrom {cc {f 2080} {px x41300000 {x43d80000 x44330000 x3d000000} {x43d98000 x44314000 x3d960002} {x43d80000 x442f8000 x3df00043} {x43d90000 x44300000 x3e170004} {x43d98000 x44308000 x3e170004} {x43d80000 x44358000 x3e18fffc} {x43d60000 x44378000 x3e1e0008} {x43d48000 x443cc000 x3e1cffeb} {x43d48000 x443d8000 x3d7bfff6}}} {t {{x41300000 x43d771cb}} {{x41300000 x4434d550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush220 512 catmullrom {cc {f 2080} {px x41300000 {x43b60000 x43cd0000 x3ca7fff9} {x43b60000 x43cd8000 x3d780007} {x43b38000 x43c80000 x3d8dfffb}}} {t {{x41300000 x43b52aa0}} {{x41300000 x43cb8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush219 512 catmullrom {cc {f 2080} {px x41300000 {x43b60000 x43d10000 x3ccffff3} {x43b70000 x43cf8000 0}}} {t {{x41300000 x43b68000}} {{x41300000 x43d04000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush218 512 catmullrom {cc {f 2080} {px x41300000 {x43b88000 x43e80000 x3cf0000d} {x43b88000 x43e40000 x3d27fff9} {x43b78000 x43dd0000 x3dfc0011}}} {t {{x41300000 x43b82aa0}} {{x41300000 x43e30000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush217 512 catmullrom {cc {f 2080} {px x41300000 {x43c38000 x43ef0000 x3d0c0003} {x43c00000 x43ed0000 x3d0ffff3}}} {t {{x41300000 x43c1c000}} {{x41300000 x43ee0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush216 512 catmullrom {cc {f 2080} {px x41300000 {x43b60000 x43f90000 x3d400000} {x43b78000 x43f78000 x3db20005}}} {t {{x41300000 x43b6c000}} {{x41300000 x43f84000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush215 512 catmullrom {cc {f 2080} {px x41300000 {x43bd8000 x441dc000 x3d2c0003} {x43be8000 x441c8000 x3d380007} {x43bf0000 x441cc000 x3dcfffbd} {x43be8000 x441b8000 x3e3cffeb} {x43b88000 x44174000 x3e51fff8} {x43b40000 x44124000 x3e80fffc} {x43b18000 x440fc000 x3e867ff6} {x43ae8000 x440b8000 x3e870004} {x43ae8000 x440a0000 x3e780022} {x43ae8000 x44094000 x3e5afff3} {x43ad8000 x4408c000 x3e11fff8} {x43ac8000 x44064000 x3e15ffe7} {x43ac8000 x44058000 x3e0a0019} {x43ac8000 x44050000 0}}} {t {{x41300000 x43b3db64}} {{x41300000 x44104927}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush214 512 catmullrom {cc {f 2080} {px x41300000 {x449e4000 x427c0000 x3cd80007} {x449ec000 x42740000 x3d980007}}} {t {{x41300000 x449e8000}} {{x41300000 x42780000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush213 512 catmullrom {cc {f 2080} {px x41300000 {x44986000 x41000000 x3cb7ffec} {x44986000 x40e00000 x3db3fffd}}} {t {{x41300000 x44986000}} {{x41300000 x40f00000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush212 512 catmullrom {cc {f 2080} {px x41300000 {x44a00000 x42880000 x3c880014} {x44a00000 x428c0000 x3ce0001b} {x44a08000 x42740000 x3de3ffef} {x44a0a000 x42600000 x3dfc0011} {x44a00000 x42240000 x3dfc0011} {x44a00000 x42080000 x3e170004} {x44a08000 x41d00000 x3e170004} {x44a08000 x41880000 x3e0cffeb} {x44a04000 x41400000 x3e100000} {x44a04000 x41200000 x3df40032} {x44a04000 x41000000 x3dc20005}}} {t {{x41300000 x44a042e1}} {{x41300000 x42128bac}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush211 512 catmullrom {cc {f 2080} {px x41300000 {x44a26000 x43d90000 x3cd80007} {x44a26000 x43d80000 x3d04000a} {x44a28000 x43d48000 x3d0ffff3} {x44a28000 x43cd0000 x3e100000} {x44a28000 x43c98000 x3e670004} {x44a26000 x43c28000 x3e67ffde} {x44a26000 x43bd8000 x3e6a0019} {x44a28000 x43b88000 x3e6a0019} {x44a28000 x43b40000 x3e65000d} {x44a28000 x43ae0000 x3e530015} {x44a28000 x43ac8000 x3e0c0011} {x44a30000 x43a68000 x3d83fffd}}} {t {{x41300000 x44a28000}} {{x41300000 x43c0caa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush210 512 catmullrom {cc {f 2080} {px x41300000 {x44a12000 x44130000 x3d07fff9} {x44a18000 x44128000 x3d200000} {x44a1c000 x44128000 x3e58fffc} {x44a1e000 x4411c000 x3e45ffe7} {x44a1e000 x44110000 x3df00043} {x44a1e000 x44108000 0}}} {t {{x41300000 x44a1aa8f}} {{x41300000 x4411e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush209 512 catmullrom {cc {f 2080} {px x41300000 {x44a4e000 x44314000 x3c880014} {x44a52000 x44300000 x3d0ffff3} {x44a56000 x442ec000 x3e7cffeb} {x44a52000 x442ec000 0}}} {t {{x41300000 x44a52000}} {{x41300000 x442fb000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush208 512 catmullrom {cc {f 2080} {px x41300000 {x44a08000 x444b4000 x3c8ffff3} {x44a08000 x44490000 x3cd80007} {x44a08000 x44484000 x3d0ffff3}}} {t {{x41300000 x44a08000}} {{x41300000 x44498000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush207 512 catmullrom {cc {f 2080} {px x41300000 {x44a00000 x445c8000 x3c9fffe5} {x44a00000 x445a0000 x3cf0000d} {x44a00000 x44580000 x3d380007} {x44a00000 x44550000 x3d24000a} {x44a00000 x44534000 x3d4c0003} {x44a04000 x44518000 x3d3bfff6} {x44a04000 x4450c000 x3d580007} {x44a04000 x444f8000 x3d580007} {x44a04000 x444f0000 0}}} {t {{x41300000 x44a01c7b}} {{x41300000 x44546396}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush206 512 catmullrom {cc {f 2080} {px x41300000 {x44a00000 x44710000 x3c8ffff3} {x44a00000 x446fc000 x3cc00000} {x44a00000 x446e0000 x3ca7fff9}}} {t {{x41300000 x44a00000}} {{x41300000 x446f9550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush205 512 catmullrom {cc {f 2080} {px x41300000 {x44a00000 x44784000 x3cc00000} {x44a00000 x4477c000 x3ce7fff9} {x44a00000 x4475c000 x3d04000a}}} {t {{x41300000 x44a00000}} {{x41300000 x44774000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e8f5c29 bs x42fa0000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush204 512 catmullrom {cc {f 2080} {px x41300000 {x44f38000 x44770000 x3d580007} {x44f46000 x44754000 x3d64000a} {x44f50000 x44738000 x3de3ffef}}} {t {{x41300000 x44f44a8f}} {{x41300000 x44754000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush203 512 catmullrom {cc {f 2080} {px x41300000 {x44d70000 x4464c000 x3c800000} {x44d6a000 x44644000 x3d200000} {x44d70000 x4464c000 x3d99fffe}}} {t {{x41300000 x44d6e000}} {{x41300000 x44649550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush202 512 catmullrom {cc {f 2080} {px x41300000 {x44e14000 x44770000 x3cb7ffec} {x44e18000 x44774000 x3d47fff9}}} {t {{x41300000 x44e16000}} {{x41300000 x44772000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush201 512 catmullrom {cc {f 2080} {px x41300000 {x44df8000 x44730000 x3d400000} {x44dee000 x4474c000 x3d4c0003}}} {t {{x41300000 x44df3000}} {{x41300000 x4473e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush200 512 catmullrom {cc {f 2080} {px x41300000 {x44e76000 x446fc000 x3d04000a} {x44e6a000 x446f4000 x3d27fff9} {x44e58000 x446fc000 x3d70000d} {x44e5e000 x44718000 x3e51001d} {x44e5e000 x44700000 x3e55000d} {x44e66000 x446cc000 x3e580022} {x44e8c000 x446b0000 x3e48fffc} {x44e9c000 x446b8000 x3e48fffc} {x44ea2000 x4469c000 x3e45ffe7} {x44ea0000 x4469c000 0}}} {t {{x41300000 x44e7a000}} {{x41300000 x446d8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush199 512 catmullrom {cc {f 2080} {px x41300000 {x44f08000 x44620000 x3ce0001b} {x44efe000 x44644000 x3cf0000d} {x44efc000 x4466c000 x3c8ffff3} {x44efc000 x44688000 x3d33fffd} {x44efc000 x446a4000 x3d64000a} {x44f02000 x446c0000 x3d6c0003} {x44f02000 x446cc000 x3db3fffd} {x44efe000 x446ec000 x3ddc0011} {x44ef4000 x44700000 x3dea0019} {x44ef8000 x44724000 x3df5ffe7} {x44f06000 x44738000 x3dea0019} {x44f14000 x4474c000 x3dea0019} {x44f10000 x44754000 x3e100000} {x44f08000 x44774000 x3e03ffef} {x44f06000 x44784000 x3de7ffde} {x44f0c000 x447b4000 x3dc7fff9} {x44f14000 x447d4000 x3dbc0003} {x44f14000 x447dc000 0}}} {t {{x41300000 x44f04a8f}} {{x41300000 x4470b550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush198 512 catmullrom {cc {f 2080} {px x41300000 {x44efe000 x44498000 x3cc00000} {x44f08000 x44504000 x3d07fff9} {x44f08000 x44554000 x3d600000} {x44f08000 x445d0000 x3da20005}}} {t {{x41300000 x44f05800}} {{x41300000 x44530000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush197 512 catmullrom {cc {f 2080} {px x41300000 {x44ef4000 x44454000 x3c9fffe5} {x44ef8000 x44454000 x3cb0000d}}} {t {{x41300000 x44ef6000}} {{x41300000 x44454000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush196 512 catmullrom {cc {f 2080} {px x41300000 {x44f06000 x44578000 x3c60001b} {x44f06000 x4458c000 x3c60001b} {x44f08000 x445a8000 x3d30000d} {x44f08000 x445bc000 x3d4c0003} {x44f08000 x445dc000 x3d5bfff6} {x44f08000 x445e4000 x3d7bfff6} {x44f06000 x445d8000 x3d4c0003} {x44f06000 x445c8000 x3d13fffd} {x44f06000 x44578000 x3d13fffd} {x44f06000 x44540000 x3d93fffd} {x44f02000 x444fc000 x3d920005} {x44f02000 x444e0000 x3db3fffd} {x44f02000 x444c0000 x3db20005} {x44efe000 x444b8000 x3db3fffd} {x44efe000 x444ac000 x3db3fffd} {x44f02000 x444ac000 x3d9c0003} {x44f02000 x444a4000 x3d47fff9}}} {t {{x41300000 x44f045c3}} {{x41300000 x4454878d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush195 512 catmullrom {cc {f 2080} {px x41300000 {x44efe000 x44350000 x3c6fffd8} {x44efe000 x4433c000 x3d07fff9} {x44f02000 x44320000 x3d27fff9} {x44efe000 x442b4000 x3d4ffff3} {x44efc000 x442a0000 x3d47fff9} {x44ef8000 x44294000 x3d4c0003} {x44efc000 x44280000 x3d47fff9} {x44efc000 x44294000 x3d9dfffb} {x44efc000 x44298000 x3de00000} {x44efe000 x442dc000 x3df00043} {x44efe000 x442f8000 x3e0c0011} {x44efe000 x4433c000 x3e0cffeb} {x44efe000 x4436c000 x3e0e0008} {x44efe000 x44394000 x3e0effe3} {x44efe000 x443a8000 x3e0afff3} {x44efc000 x443b0000 x3e0afff3} {x44efc000 x443d0000 x3e0afff3} {x44efc000 x443ec000 x3df40032} {x44efc000 x443f4000 x3dd80022} {x44efc000 x44418000 x3dd80022} {x44efc000 x44430000 x3d24000a} {x44efc000 x4444c000 x3cf0000d}}} {t {{x41300000 x44efce66}} {{x41300000 x443508b4}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush194 512 catmullrom {cc {f 2080} {px x41300000 {x44f02000 x443e0000 x3c9fffe5} {x44efe000 x443a4000 x3cc80014}}} {t {{x41300000 x44f00000}} {{x41300000 x443c2000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush193 512 catmullrom {cc {f 2080} {px x41300000 {x44f02000 x443a8000 x3c8ffff3} {x44f02000 x443e0000 x3cf0000d} {x44f06000 x443e0000 x3cc00000}}} {t {{x41300000 x44f03571}} {{x41300000 x443cd550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush192 512 catmullrom {cc {f 2080} {px x41300000 {x44efc000 x43fb8000 x3c6fffd8} {x44f02000 x44020000 x3cf0000d} {x44f02000 x44064000 x3d9c0003} {x44efe000 x440a8000 x3df5ffe7} {x44efe000 x44100000 x3dfc0011} {x44efc000 x44130000 x3dfdffc5} {x44ef8000 x44174000 x3dfc0011} {x44ef4000 x44190000 x3e08fffc} {x44ef4000 x441c0000 x3e11001d} {x44ef4000 x441d4000 x3e130015} {x44ef4000 x441fc000 x3e170004} {x44ef4000 x44210000 x3e070004} {x44ef0000 x4423c000 x3ddc0011} {x44ef4000 x44264000 x3cd80007} {x44ef4000 x44294000 x3c30000d} {x44ef4000 x442bc000 x3c880014} {x44ef8000 x442e4000 x3c6fffd8} {x44ef8000 x44308000 x3c980007} {x44ef8000 x44328000 x3c800000}}} {t {{x41300000 x44ef8000}} {{x41300000 x441baf2b}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush191 512 catmullrom {cc {f 2080} {px x41300000 {x44ef4000 x441a4000 x3ce7fff9} {x44ef4000 x4419c000 x3d27fff9} {x44ef8000 x44198000 x3d24000a}}} {t {{x41300000 x44ef5571}} {{x41300000 x4419d550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush190 512 catmullrom {cc {f 2080} {px x41300000 {x44efe000 x44114000 x3cc80014} {x44efe000 x4411c000 x3d04000a} {x44efc000 x44130000 x3d0c0003} {x44ef8000 x4414c000 x3d1bfff6} {x44ef8000 x44170000 x3d2c0003} {x44ef4000 x44190000 x3d4c0003} {x44ef4000 x4419c000 x3d580007}}} {t {{x41300000 x44ef923d}} {{x41300000 x441536d9}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush189 512 catmullrom {cc {f 2080} {px x41300000 {x44f1e000 x42300000 x3ca7fff9} {x44f20000 x421c0000 x3d04000a} {x44f20000 x42100000 x3d24000a} {x44f20000 x41980000 x3d400000} {x44f20000 x41600000 x3df9ffd6} {x44f24000 x41200000 x3e130015} {x44f24000 x41000000 x3e130015} {x44f2a000 x40a00000 x3e11fff8} {x44f2e000 x40400000 x3e13ffef} {x44f3c000 x40400000 x3e130015} {x44f42000 x40e00000 x3de7ffde} {x44f4a000 x41a00000 x3dddffc5} {x44f4c000 x41d00000 x3de7ffde} {x44f50000 x42080000 x3dee0008} {x44f50000 x42240000 x3df1fff8} {x44f50000 x42400000 x3debffce} {x44f4c000 x42540000 x3dddffc5} {x44f4a000 x42580000 x3dadfffb} {x44f4a000 x42680000 x3d83fffd}}} {t {{x41300000 x44f37ae1}} {{x41300000 x41dbca23}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush188 512 catmullrom {cc {f 2080} {px x41300000 {x44f10000 x429c0000 x3c9fffe5} {x44f10000 x42980000 x3ce0001b} {x44f10000 x428c0000 x3d04000a} {x44f1a000 x42440000 x3d27fff9}}} {t {{x41300000 x44f12800}} {{x41300000 x42888000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush187 512 catmullrom {cc {f 2080} {px x41300000 {x44f10000 x42d60000 x3cb7ffec} {x44f10000 x42d20000 x3cf0000d} {x44f10000 x42c80000 x3d04000a} {x44f10000 x42bc0000 x3d1bfff6}}} {t {{x41300000 x44f10000}} {{x41300000 x42cb0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush186 512 catmullrom {cc {f 2080} {px x41300000 {x44f08000 x43858000 x3c880014} {x44f08000 x43820000 x3ce7fff9} {x44f08000 x43760000 x3d0c0003} {x44f08000 x43700000 x3d07fff9} {x44f0c000 x436c0000 x3c30000d}}} {t {{x41300000 x44f08ccd}} {{x41300000 x4379cccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush185 512 catmullrom {cc {f 2080} {px x41300000 {x44ef4000 x439d0000 x3c60001b} {x44ef4000 x439e0000 x3c9fffe5} {x44ef8000 x439c8000 x3e530015} {x44efe000 x439a0000 x3e80800f} {x44f06000 x43950000 x3e4afff3} {x44f08000 x43918000 x3e1a0019} {x44f10000 x438b8000 x3dfc0011} {x44f14000 x438b8000 0}}} {t {{x41300000 x44f02000}} {{x41300000 x4395e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush184 512 catmullrom {cc {f 2080} {px x41300000 {x44f10000 x43ea8000 x3c6fffd8} {x44f08000 x43e80000 x3c880014}}} {t {{x41300000 x44f0c000}} {{x41300000 x43e94000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush183 512 catmullrom {cc {f 2080} {px x41300000 {x44ef8000 x4409c000 x3c60001b} {x44efc000 x44080000 x3c4ffff3} {x44efe000 x44060000 x3c000000} {x44f02000 x44050000 x3be00005}}} {t {{x41300000 x44efd000}} {{x41300000 x44073000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush182 512 catmullrom {cc {f 2080} {px x41300000 {x44f06000 x446e0000 x3c60001b} {x44f02000 x446c0000 x3c800000} {x44efc000 x4469c000 x3cf0000d}}} {t {{x41300000 x44f01571}} {{x41300000 x446beab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush181 512 catmullrom {cc {f 2080} {px x41300000 {x44e96000 x446e0000 x3cc00000} {x44e96000 x446d8000 x3d04000a} {x44e8e000 x446d4000 x3c980007}}} {t {{x41300000 x44e93571}} {{x41300000 x446d9550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush180 512 catmullrom {cc {f 2080} {px x41300000 {x44e04000 x44790000 x3cc00000} {x44e0e000 x44798000 x3d0ffff3} {x44e0a000 x4478c000 x3e1a0019}}} {t {{x41300000 x44e09571}} {{x41300000 x44791550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush179 512 catmullrom {cc {f 2080} {px x41300000 {x448b0000 x44760000 x3d980007} {x448ac000 x44760000 x3d920005}}} {t {{x41300000 x448ae000}} {{x41300000 x44760000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush178 512 catmullrom {cc {f 2080} {px x41300000 {x44982000 x446fc000 x3ca7fff9} {x44980000 x446fc000 x3cd80007} {x44974000 x446ec000 x3d0ffff3}}} {t {{x41300000 x4497ca8f}} {{x41300000 x446f6ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush177 512 catmullrom {cc {f 2080} {px x41300000 {x4489c000 x44660000 x3cf0000d} {x44894000 x44660000 x3cf7ffec} {x44892000 x44658000 x3d13fffd}}} {t {{x41300000 x44896000}} {{x41300000 x4465d550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush176 512 catmullrom {cc {f 2080} {px x41300000 {x445f4000 x442a8000 x3c8ffff3} {x445e4000 x442a0000 x3d1bfff6} {x445b0000 x44284000 x3df40032} {x445bc000 x4428c000 x3df00043} {x445c8000 x44294000 0}}} {t {{x41300000 x445cf333}} {{x41300000 x4429599a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush175 512 catmullrom {cc {f 2080} {px x41300000 {x446ec000 x44294000 x3ca7fff9} {x446ec000 x4428c000 x3d000000} {x446ec000 x44264000 x3d3bfff6} {x446f4000 x44268000 x3d13fffd} {x446f4000 x44270000 x3d200000} {x446e8000 x44264000 x3da7fff9}}} {t {{x41300000 x446ee000}} {{x41300000 x44275550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush174 512 catmullrom {cc {f 2080} {px x41300000 {x44bee000 x440ec000 x3c880014} {x44bf8000 x44100000 x3cf0000d}}} {t {{x41300000 x44bf3000}} {{x41300000 x440f6000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush173 512 catmullrom {cc {f 2080} {px x41300000 {x44b76000 x440c4000 x3cd80007} {x44b76000 x440bc000 x3dc00000} {x44b7a000 x440bc000 x3dd80022} {x44b80000 x440cc000 x3da00000}}} {t {{x41300000 x44b79800}} {{x41300000 x440c2000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush172 512 catmullrom {cc {f 2080} {px x41300000 {x44c1c000 x43840000 x3c6fffd8}}} {t {{x41300000 x44c1c000}} {{x41300000 x43840000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush171 512 catmullrom {cc {f 2080} {px x41300000 {x44be0000 x43550000 x3d07fff9} {x44be4000 x43580000 x3cf0000d} {x44be6000 x435b0000 0}}} {t {{x41300000 x44be3571}} {{x41300000 x43580000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush170 512 catmullrom {cc {f 2080} {px x41300000 {x44bc8000 x43280000 x3c8ffff3} {x44bce000 x43320000 x3d000000} {x44bd8000 x433e0000 x3d200000}}} {t {{x41300000 x44bcf571}} {{x41300000 x4332aac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush169 512 catmullrom {cc {f 2080} {px x41300000 {x44bd6000 x43120000 x3c8ffff3}}} {t {{x41300000 x44bd6000}} {{x41300000 x43120000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush168 512 catmullrom {cc {f 2080} {px x41300000 {x44b8e000 x42b00000 x3c9fffe5} {x44b92000 x42ae0000 x3cd80007} {x44b94000 x42b80000 x3db60002} {x44b92000 x42b40000 x3dfc0011} {x44b8a000 x42b80000 x3df5ffe7} {x44b8a000 x42be0000 x3dc7fff9} {x44b8e000 x42c20000 x3b40000b}}} {t {{x41300000 x44b8edc3}} {{x41300000 x42b7248f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush167 512 catmullrom {cc {f 2080} {px x41300000 {x44cc0000 x42240000 x3cf7ffec} {x44cc0000 x42000000 x3d04000a} {x44cc4000 x41d00000 x3e2e0008} {x44cc4000 x42000000 x3d67fff9} {x44cce000 x41c00000 x3d89fffe} {x44cd0000 x41b00000 x3dce0008}}} {t {{x41300000 x44cc6571}} {{x41300000 x41ec0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush166 512 catmullrom {cc {f 2080} {px x41300000 {x44be4000 x42380000 x3cc80014} {x44bdc000 x42380000 x3cf7ffec} {x44bcc000 x42440000 x3d980007} {x44bd6000 x42140000 x3df1fff8} {x44be6000 x41e80000 x3e15ffe7} {x44bfe000 x41d80000 x3e15000d} {x44c04000 x41d80000 x3e130015} {x44c1c000 x41b00000 x3e130015} {x44c1c000 x41980000 x3e15ffe7} {x44c32000 x41700000 x3e0effe3} {x44c3e000 x41700000 x3d33fffd}}} {t {{x41300000 x44bfeb85}} {{x41300000 x41f17454}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush165 512 catmullrom {cc {f 2080} {px x41300000 {x44c16000 x42c20000 x3ce0001b} {x44c1a000 x42be0000 x3d07fff9} {x44c10000 x42b40000 x3e270004} {x44c10000 x42b80000 x3e21fff8} {x44c0c000 x42b40000 x3debffce} {x44c08000 x42b40000 0}}} {t {{x41300000 x44c10a8f}} {{x41300000 x42b8aaa6}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush164 512 catmullrom {cc {f 2080} {px x41300000 {x44cb0000 x432a0000 x3cb0000d} {x44cb6000 x43280000 x3cf0000d} {x44cbc000 x43250000 x3d2c0003}}} {t {{x41300000 x44cb6000}} {{x41300000 x4327aac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush163 512 catmullrom {cc {f 2080} {px x41300000 {x44c80000 x43060000 x3d44000a} {x44c82000 x43030000 x3d9c0003}}} {t {{x41300000 x44c81000}} {{x41300000 x43048000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush162 512 catmullrom {cc {f 2080} {px x41300000 {x44c90000 x43050000 x3cd80007} {x44c8a000 x43010000 x3d99fffe} {x44c82000 x43000000 x3d67fff9} {x44c80000 x43010000 x3c8ffff3}}} {t {{x41300000 x44c87000}} {{x41300000 x4301c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush161 512 catmullrom {cc {f 2080} {px x41300000 {x44dae000 x40e00000 x3d04000a} {x44db8000 x40400000 x3d89fffe}}} {t {{x41300000 x44db3000}} {{x41300000 x40a00000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush160 512 catmullrom {cc {f 2080} {px x41300000 {x44da0000 x41a00000 x3d07fff9} {x44da4000 x41200000 x3d33fffd} {x44da4000 x40e00000 x3c6fffd8}}} {t {{x41300000 x44da2a8f}} {{x41300000 x41455532}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush159 512 catmullrom {cc {f 2080} {px x41300000 {x44d7e000 x42ae0000 x3d000000} {x44d86000 x42a60000 x3d07fff9} {x44d9a000 x42a60000 x3dc60002} {x44da0000 x42a00000 x3e33ffef} {x44d9a000 x42880000 x3e3a0019} {x44d92000 x42880000 x3e100000}}} {t {{x41300000 x44d91a8f}} {{x41300000 x429c555a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush158 512 catmullrom {cc {f 2080} {px x41300000 {x44d00000 x42d20000 x3ca7fff9} {x44d00000 x42d00000 x3ce7fff9} {x44cfe000 x42c60000 x3e330015}}} {t {{x41300000 x44cff571}} {{x41300000 x42cd5581}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush157 512 catmullrom {cc {f 2080} {px x41300000 {x44d52000 x43030000 x3c980007} {x44d5c000 x43010000 x3cf0000d} {x44d5a000 x42f80000 x3e11001d} {x44d5c000 x43000000 x3dd9ffd6} {x44d60000 x43030000 x3dadfffb} {x44d56000 x42f80000 x3dd5ffe7} {x44d4c000 x42f40000 x3dd5ffe7} {x44d48000 x42f80000 0}}} {t {{x41300000 x44d55c29}} {{x41300000 x42fd4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush156 512 catmullrom {cc {f 2080} {px x41300000 {x44dcc000 x438a8000 x3ce7fff9} {x44dcc000 x43898000 x3d1bfff6} {x44dd0000 x43880000 x3e05000d} {x44dd0000 x43848000 x3e89fff8} {x44dd0000 x43830000 x3e8afff3} {x44dd4000 x43848000 x3e4e0008} {x44dd0000 x43840000 x3dd80022} {x44dd0000 x43810000 x3ca7fff9}}} {t {{x41300000 x44dcf800}} {{x41300000 x4385a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush155 512 catmullrom {cc {f 2080} {px x41300000 {x44db4000 x43530000 x3c6fffd8} {x44dbc000 x43550000 x3d33fffd} {x44dc0000 x43580000 x3d580007} {x44dc2000 x43580000 x3da7fff9} {x44dc0000 x435d0000 x3ce7fff9}}} {t {{x41300000 x44dbd333}} {{x41300000 x43576666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush154 512 catmullrom {cc {f 2080} {px x41300000 {x44dae000 x43470000 x3cd80007} {x44da8000 x43400000 x3d04000a}}} {t {{x41300000 x44dab000}} {{x41300000 x43438000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush153 512 catmullrom {cc {f 2080} {px x41300000 {x44db8000 x43320000 x3c980007} {x44db8000 x43390000 x3cc80014} {x44db4000 x43360000 x3cb0000d}}} {t {{x41300000 x44db6a8f}} {{x41300000 x4335aac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush152 512 catmullrom {cc {f 2080} {px x41300000 {x44e70000 x43690000 x3c9fffe5} {x44e74000 x43670000 x3cf7ffec} {x44e76000 x435f0000 x3d13fffd} {x44e76000 x435d0000 x3d27fff9} {x44e7a000 x435f0000 x3c4ffff3} {x44e7e000 x43600000 x3d47fff9} {x44e80000 x435a0000 x3dfc0011} {x44e88000 x43560000 x3df9ffd6}}} {t {{x41300000 x44e7a000}} {{x41300000 x435f6000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush151 512 catmullrom {cc {f 2080} {px x41300000 {x44e2c000 x43bb0000 x3cb0000d} {x44e30000 x43bb0000 x3d07fff9} {x44e28000 x43b60000 x3e31001d} {x44e28000 x43b40000 x3e3a0019} {x44e2c000 x43b50000 x3e070004} {x44e30000 x43b70000 x3df00043} {x44e30000 x43b50000 x3e27ffde} {x44e30000 x43b38000 x3c4ffff3}}} {t {{x41300000 x44e2d000}} {{x41300000 x43b69000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush150 512 catmullrom {cc {f 2080} {px x41300000 {x44d92000 x43ae0000 x3d07fff9} {x44d92000 x43ad8000 x3d30000d} {x44d92000 x43ac8000 x3e400000} {x44d92000 x43ab8000 0}}} {t {{x41300000 x44d92000}} {{x41300000 x43ace000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush149 512 catmullrom {cc {f 2080} {px x41300000 {x44dae000 x43c50000 x3c9fffe5} {x44db2000 x43c50000 x3d0ffff3} {x44db4000 x43c38000 x3e99800a}}} {t {{x41300000 x44db1571}} {{x41300000 x43c48000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush148 512 catmullrom {cc {f 2080} {px x41300000 {x44d90000 x43f50000 x3d04000a} {x44d8c000 x43f58000 x3d27fff9} {x44d7e000 x43f18000 x3e600000} {x44d82000 x43f30000 x3e73ffef} {x44d82000 x43f28000 x3eb28006} {x44d82000 x43f18000 x3eb1fff8} {x44d88000 x43f40000 x3e9c0011} {x44d86000 x43f30000 x3ea70004} {x44d82000 x43f30000 0}}} {t {{x41300000 x44d85571}} {{x41300000 x43f338d5}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush147 512 catmullrom {cc {f 2080} {px x41300000 {x44e54000 x44058000 x3d0c0003} {x44e58000 x44058000 x3db20005} {x44e58000 x44050000 x3eb28006} {x44e5c000 x44050000 x3e1effe3} {x44e5e000 x44050000 x3e35000d} {x44e62000 x44048000 x3e9f7ff1} {x44e5e000 x44044000 0}}} {t {{x41300000 x44e5b23d}} {{x41300000 x4404f6d9}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush146 512 catmullrom {cc {f 2080} {px x41300000 {x44d56000 x44644000 x3d380007} {x44d52000 x44644000 x3e530015} {x44d52000 x4464c000 x3db9fffe} {x44d5a000 x4464c000 x3e05000d}}} {t {{x41300000 x44d55000}} {{x41300000 x44648000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush145 512 catmullrom {cc {f 2080} {px x41300000 {x44d9c000 x44248000 x3cf0000d} {x44d9c000 x44240000 x3d1bfff6} {x44d9c000 x44234000 x3d4c0003} {x44d9a000 x4422c000 x3ed70004} {x44d96000 x4422c000 x3ea1800a} {x44d9a000 x44234000 x3e470004} {x44d96000 x4422c000 x3d33fffd}}} {t {{x41300000 x44d99b85}} {{x41300000 x4423524e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush144 512 catmullrom {cc {f 2080} {px x41300000 {x44da4000 x44348000 x3d27fff9} {x44daa000 x44358000 x3d4c0003} {x44da8000 x44358000 x3eb67ff6} {x44da8000 x44350000 x3e8e7ff6} {x44da4000 x44350000 x3e4c0011} {x44da8000 x44358000 x3e0effe3} {x44da4000 x44358000 x3ecf0004}}} {t {{x41300000 x44da6948}} {{x41300000 x443536d9}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush143 512 catmullrom {cc {f 2080} {px x41300000 {x44d30000 x44438000 x3d0ffff3} {x44d30000 x44430000 x3d33fffd} {x44d30000 x44438000 0}}} {t {{x41300000 x44d30000}} {{x41300000 x44435550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush142 512 catmullrom {cc {f 2080} {px x41300000 {x44ba2000 x44218000 x3d180007} {x44ba6000 x44218000 x3d47fff9} {x44baa000 x4420c000 x3e330015} {x44ba6000 x441f0000 x3e63ffef} {x44baa000 x441fc000 x3e5e0008} {x44baa000 x44204000 x3e92fff3} {x44ba6000 x441f8000 x3e88fffc}}} {t {{x41300000 x44ba723d}} {{x41300000 x4420524e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush141 512 catmullrom {cc {f 2080} {px x41300000 {x44b3c000 x44268000 x3d04000a} {x44b38000 x44268000 x3d24000a} {x44b36000 x44268000 x3ec00000} {x44b36000 x44264000 x3ebd000d}}} {t {{x41300000 x44b38000}} {{x41300000 x44267000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush140 512 catmullrom {cc {f 2080} {px x41300000 {x44ac2000 x441b0000 x3d0ffff3} {x44ac8000 x441c0000 x3d580007} {x44ac2000 x441c0000 x3ede0008}}} {t {{x41300000 x44ac4000}} {{x41300000 x441baab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush139 512 catmullrom {cc {f 2080} {px x41300000 {x44ae4000 x440cc000 x3c800000} {x44ae4000 x440d0000 x3d0ffff3} {x44ade000 x440cc000 x3ebc0011}}} {t {{x41300000 x44ae2000}} {{x41300000 x440cd550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush138 512 catmullrom {cc {f 2080} {px x41300000 {x44a90000 x44020000 x3db20005} {x44a92000 x44028000 x3dc3fffd} {x44a92000 x44030000 x3e1effe3}}} {t {{x41300000 x44a91571}} {{x41300000 x44028000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush137 512 catmullrom {cc {f 2080} {px x41300000 {x44b10000 x43fb8000 x3d1bfff6} {x44b1a000 x43fc8000 x3d780007} {x44b1e000 x43fc8000 x3ec9800a} {x44b1e000 x43fd8000 0}}} {t {{x41300000 x44b19800}} {{x41300000 x43fc8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush136 512 catmullrom {cc {f 2080} {px x41300000 {x44b00000 x43ea0000 x3db3fffd} {x44afc000 x43ea0000 x3dc20005} {x44af8000 x43ea0000 x3e83ffef} {x44afc000 x43ec8000 x3e45000d}}} {t {{x41300000 x44afc000}} {{x41300000 x43eaa000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush135 512 catmullrom {cc {f 2080} {px x41300000 {x44b38000 x43d80000 x3d580007} {x44b3c000 x43d80000 x3da7fff9} {x44b3c000 x43d70000 x3e967ff6} {x44b38000 x43d70000 x3e31001d} {x44b3c000 x43d80000 x3e18fffc} {x44b3c000 x43d90000 x3e230015}}} {t {{x41300000 x44b3aa8f}} {{x41300000 x43d7d560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush134 512 catmullrom {cc {f 2080} {px x41300000 {x44bb0000 x43e40000 x3eb38002} {x44ba6000 x43e10000 x3eb57ffa}}} {t {{x41300000 x44bab000}} {{x41300000 x43e28000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush133 512 catmullrom {cc {f 2080} {px x41300000 {x44bea000 x43f18000 x3c6fffd8} {x44bea000 x43f28000 x3d2c0003} {x44be4000 x43f08000 x3eac0011}}} {t {{x41300000 x44be8000}} {{x41300000 x43f18000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush132 512 catmullrom {cc {f 2080} {px x41300000 {x44bd6000 x43ff0000 x3cc00000} {x44bdc000 x44000000 x3d0ffff3} {x44bdc000 x43ff0000 x3e8e7ff6} {x44bdc000 x43fc8000 x3ec00000} {x44bdc000 x43fb8000 x3bc0000b}}} {t {{x41300000 x44bdaccd}} {{x41300000 x43fe0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush131 512 catmullrom {cc {f 2080} {px x41300000 {x44d1c000 x4406c000 x3d4c0003} {x44d18000 x44058000 x3e977ff1} {x44d18000 x44050000 x3ed0800f} {x44d1c000 x44058000 x3dce0008}}} {t {{x41300000 x44d1a000}} {{x41300000 x4405b000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush130 512 catmullrom {cc {f 2080} {px x41300000 {x44cf4000 x44188000 x3d33fffd} {x44cf4000 x44190000 x3d860002} {x44cf0000 x44174000 x3e8f0004} {x44cf6000 x4417c000 x3e6cffeb} {x44cfe000 x4417c000 x3e6afff3} {x44cfe000 x44174000 0}}} {t {{x41300000 x44cf7000}} {{x41300000 x4417eab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush129 512 catmullrom {cc {f 2080} {px x41300000 {x44cdc000 x44278000 x3d1bfff6} {x44cdc000 x44280000 x3d380007} {x44cdc000 x4428c000 x3dbc0003} {x44cd8000 x44284000 x3e71fff8} {x44cd4000 x44278000 x3ed9800a} {x44cdc000 x44284000 x3ed3ffef} {x44cde000 x44284000 x3ed9800a} {x44cde000 x4425c000 x3ee1800a}}} {t {{x41300000 x44cdb000}} {{x41300000 x4427c800}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush128 512 catmullrom {cc {f 2080} {px x41300000 {x44c8a000 x4436c000 x3d13fffd} {x44c86000 x44364000 x3e5afff3} {x44c86000 x44360000 x3ed67ff6} {x44c8a000 x44360000 x3ecc0011} {x44c86000 x44358000 0}}} {t {{x41300000 x44c8799a}} {{x41300000 x4436199a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush127 512 catmullrom {cc {f 2080} {px x41300000 {x44bfe000 x442dc000 x3d44000a} {x44bf8000 x442dc000 x3dd40032} {x44bf4000 x442d0000 x3e9a8006} {x44bfa000 x442dc000 x3e880000} {x44bee000 x442c0000 x3eb1fff8} {x44bea000 x442b4000 x3e9afff3} {x44bee000 x442bc000 x3d400000}}} {t {{x41300000 x44bf3b85}} {{x41300000 x442cc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3ec28f5c bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush126 512 catmullrom {cc {f 2080} {px x41300000 {x44b88000 x435d0000 x3da60002} {x44b80000 x435f0000 x3dd9ffd6} {x44b80000 x435d0000 x3ebb8002} {x44b7e000 x435a0000 x3eb57ffa} {x44b7e000 x435b0000 x3e2afff3} {x44b7e000 x435d0000 x3e230015}}} {t {{x41300000 x44b80571}} {{x41300000 x435c8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush125 512 catmullrom {cc {f 2080} {px x41300000 {x44b8e000 x43a30000 x3dadfffb} {x44b8a000 x43a28000 x3dcc0003} {x44b80000 x43a08000 x3df5ffe7} {x44b7e000 x43a00000 x3de6002a} {x44b80000 x43a18000 x3e03ffef} {x44b7e000 x43a18000 x3e75ffe7} {x44b7a000 x439f0000 x3e82fff3}}} {t {{x41300000 x44b82000}} {{x41300000 x43a1249c}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush124 512 catmullrom {cc {f 2080} {px x41300000 {x44d2a000 x43840000 x3d07fff9} {x44d2a000 x43858000 x3d6c0003} {x44d34000 x43858000 x3d99fffe} {x44d38000 x43858000 x3da9fffe} {x44d34000 x43848000 x3e58fffc} {x44d2c000 x43830000 x3e75000d} {x44d2a000 x43848000 x3e630015} {x44d2a000 x43858000 0}}} {t {{x41300000 x44d2e800}} {{x41300000 x4384c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush123 512 catmullrom {cc {f 2080} {px x41300000 {x44f68000 x440d0000 x3d200000} {x44f6c000 x440e0000 x3d89fffe} {x44f68000 x440cc000 x3eaafff3} {x44f6c000 x440a8000 x3ead7ffa} {x44f6c000 x44094000 x3eac7ffe} {x44f6c000 x440a0000 x3e9afff3} {x44f68000 x440b8000 x3e9a8006} {x44f68000 x440b0000 x3ea28006} {x44f6e000 x44078000 x3e9b8002}}} {t {{x41300000 x44f6a70a}} {{x41300000 x440b0e35}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush122 512 catmullrom {cc {f 2080} {px x41300000 {x44700000 x43c00000 x3cd80007} {x44710000 x43c10000 x3d13fffd} {x44708000 x43bf8000 x3ea9fff8} {x44700000 x43bf8000 0}}} {t {{x41300000 x44706000}} {{x41300000 x43c00000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush121 512 catmullrom {cc {f 2080} {px x41300000 {x4487c000 x43b18000 x3d04000a} {x44876000 x43b10000 x3e95000d} {x4487a000 x43b18000 x3e977ff1} {x4487a000 x43b10000 x3eb00000} {x44872000 x43b00000 x3eb0800f}}} {t {{x41300000 x44878000}} {{x41300000 x43b10000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush120 512 catmullrom {cc {f 2080} {px x41300000 {x44b80000 x435f0000 x3ccffff3} {x44b76000 x435d0000 x3ce7fff9}}} {t {{x41300000 x44b7b000}} {{x41300000 x435e0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush119 512 catmullrom {cc {f 2080} {px x41300000 {x44d26000 x43890000 x3cf0000d} {x44d26000 x43880000 x3e180022} {x44d26000 x43890000 x3c400036} {x44d26000 x43898000 x3d5bfff6} {x44d2a000 x43880000 x3e33ffef} {x44d26000 x43890000 x3b40000b}}} {t {{x41300000 x44d26a8f}} {{x41300000 x4388c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush118 512 catmullrom {cc {f 2080} {px x41300000 {x44b76000 x43a30000 x3ce7fff9} {x44b76000 x43a40000 x3d07fff9} {x44b7a000 x43a30000 x3c0ffffd}}} {t {{x41300000 x44b77571}} {{x41300000 x43a35560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush117 512 catmullrom {cc {f 2080} {px x41300000 {x448ce000 x43d90000 x3ce0001b} {x448ce000 x43d80000 x3d0ffff3} {x448ce000 x43d90000 x3ea57ffa} {x448ce000 x43d80000 x3eab8002} {x448ce000 x43d70000 x3ea70004}}} {t {{x41300000 x448ce000}} {{x41300000 x43d83333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush116 512 catmullrom {cc {f 2080} {px x41300000 {x448f4000 x44048000 x3cb7ffec} {x448fa000 x44050000 x3d24000a} {x448fe000 x44048000 x3e180022} {x44902000 x44034000 x3e9a8006} {x44904000 x44030000 x3ea0800f} {x44904000 x44044000 x3e870004} {x44908000 x4403c000 x3e8a8006} {x44908000 x44020000 x3dc60002}}} {t {{x41300000 x44900c29}} {{x41300000 x4403c800}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush115 512 catmullrom {cc {f 2080} {px x41300000 {x44770000 x44520000 x3ccffff3} {x44774000 x44520000 x3d0ffff3} {x4477c000 x44528000 x3d33fffd} {x44784000 x44528000 x3e980000} {x44784000 x44520000 x3e99fff8} {x44784000 x44518000 x3e9a8006} {x44788000 x44518000 x3e960008} {x44788000 x44520000 x3e967ff6} {x44790000 x44528000 x3d1bfff6} {x44790000 x4452c000 0}}} {t {{x41300000 x44782ccd}} {{x41300000 x44522000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush114 512 catmullrom {cc {f 2080} {px x41300000 {x444c8000 x44598000 x3cd80007} {x444cc000 x44598000 x3d0ffff3} {x444d4000 x44594000 x3e73ffef} {x444dc000 x44594000 x3e73ffef} {x444c8000 x4458c000 x3e8a8006}}} {t {{x41300000 x444cf333}} {{x41300000 x44594000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush113 512 catmullrom {cc {f 2080} {px x41300000 {x43c48000 x44658000 x3d900000} {x43c50000 x44658000 x3d9c0003} {x43c50000 x44660000 x3eac7ffe}}} {t {{x41300000 x43c4d560}} {{x41300000 x4465aab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush112 512 catmullrom {cc {f 2080} {px x41300000 {x43e68000 x44584000 x3ccffff3} {x43e80000 x44584000 x3d000000} {x43ea8000 x44580000 x3d53fffd} {x43ea0000 x44578000 x3e9c0011} {x43ea0000 x44584000 x3ea0800f} {x43ea8000 x44594000 x3e90fffc} {x43eb8000 x4458c000 x3c9fffe5} {x43ea8000 x44594000 0}}} {t {{x41300000 x43e9b000}} {{x41300000 x44587000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush111 512 catmullrom {cc {f 2080} {px x41300000 {x43d60000 x44358000 x3cd80007}}} {t {{x41300000 x43d60000}} {{x41300000 x44358000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush110 512 catmullrom {cc {f 2080} {px x41300000 {x43f78000 x44188000 x3d4c0003} {x43f78000 x44190000 x3e83ffef} {x43f68000 x44198000 x3e99fff8}}} {t {{x41300000 x43f72aa0}} {{x41300000 x44190000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush109 512 catmullrom {cc {f 2080} {px x41300000 {x43f18000 x44278000 x3c6fffd8} {x43f18000 x44284000 x3d07fff9} {x43f08000 x44284000 x3ea60008} {x43ef8000 x44284000 x3ea0800f} {x43ef8000 x4428c000 x3e8c7ffe} {x43f08000 x4428c000 x3e91800a} {x43f08000 x44284000 x3e9f0004} {x43f08000 x44280000 x3b800000}}} {t {{x41300000 x43f08000}} {{x41300000 x44284000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush108 512 catmullrom {cc {f 2080} {px x41300000 {x43858000 x44004000 x3ccffff3} {x43858000 x4400c000 x3d2c0003}}} {t {{x41300000 x43858000}} {{x41300000 x44008000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush107 512 catmullrom {cc {f 2080} {px x41300000 {x43ae0000 x43f78000 x3cb7ffec} {x43ad8000 x43f80000 x3d1bfff6} {x43a90000 x43f68000 x3ec1fff8} {x43a88000 x43fa0000 x3eb57ffa} {x43a68000 x43fa0000 x3ecafff3} {x43a30000 x43fa0000 x3ecafff3} {x43a30000 x43fb8000 x3ebe7ff6} {x43a28000 x43fb8000 x3e80fffc}}} {t {{x41300000 x43a78000}} {{x41300000 x43f96000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush106 512 catmullrom {cc {f 2080} {px x41300000 {x43ac8000 x43ea0000 x3d1bfff6} {x43ad8000 x43ea0000 x3dd1fff8} {x43ad8000 x43ea8000 x3ead000d}}} {t {{x41300000 x43ad2aa0}} {{x41300000 x43ea2aa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush105 512 catmullrom {cc {f 2080} {px x41300000 {x43d88000 x44028000 x3d200000} {x43d88000 x44034000 x3d4c0003} {x43d88000 x44030000 x3eb57ffa} {x43d88000 x44034000 x3c4ffff3} {x43d98000 x44044000 x3ca7fff9} {x43d98000 x4403c000 x3da60002}}} {t {{x41300000 x43d8d560}} {{x41300000 x44035550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush104 512 catmullrom {cc {f 2080} {px x41300000 {x43e58000 x43c50000 x3d27fff9} {x43e48000 x43c60000 x3e6a0019} {x43e40000 x43c70000 x3e3a0019} {x43e30000 x43c80000 x3ccffff3}}} {t {{x41300000 x43e44000}} {{x41300000 x43c68000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush103 512 catmullrom {cc {f 2080} {px x41300000 {x43d88000 x43e20000 x3cc00000} {x43d98000 x43e08000 x3d1bfff6} {x43d98000 x43df8000 x3e877ff1} {x43d88000 x43df8000 x3e99800a} {x43d98000 x43e18000 x3e99800a} {x43d88000 x43df8000 x3eb28006} {x43d88000 x43de0000 x3e80fffc}}} {t {{x41300000 x43d8edb2}} {{x41300000 x43e0124e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush102 512 catmullrom {cc {f 2080} {px x41300000 {x43d48000 x43920000 x3c880014} {x43d70000 x438d0000 x3cc80014} {x43d70000 x438c8000 x3eaafff3} {x43d70000 x438b8000 x3eac7ffe} {x43d70000 x43898000 x3e8d000d} {x43d70000 x43890000 x3e3cffeb}}} {t {{x41300000 x43d69560}} {{x41300000 x438c4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush101 512 catmullrom {cc {f 2080} {px x41300000 {x43c38000 x439a8000 x3c8ffff3} {x43c48000 x439a0000 x3cf0000d}}} {t {{x41300000 x43c40000}} {{x41300000 x439a4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush100 512 catmullrom {cc {f 2080} {px x41300000 {x43c38000 x43a28000 x3d07fff9} {x43c28000 x43a00000 x3d380007} {x43c28000 x439f0000 x3dadfffb} {x43c38000 x439e0000 x3d99fffe} {x43c38000 x439c8000 x3e8e7ff6} {x43c28000 x439b8000 x3e2afff3}}} {t {{x41300000 x43c30000}} {{x41300000 x439e9560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush99 512 catmullrom {cc {f 2080} {px x41300000 {x43cb0000 x43b78000 x3ccffff3} {x43cd0000 x43b78000 x3d180007} {x43cc0000 x43b50000 x3e63ffef} {x43cb0000 x43b40000 x3e55000d} {x43cc0000 x43b40000 x3e31001d} {x43cb0000 x43b40000 x3e7effe3} {x43ca8000 x43b18000 x3e828006} {x43ca8000 x43b28000 x3ca7fff9} {x43ca8000 x43b18000 x3c1ffffb}}} {t {{x41300000 x43cb472b}} {{x41300000 x43b42aa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush98 512 catmullrom {cc {f 2080} {px x41300000 {x43aa0000 x43c80000 x3cc00000} {x43ab0000 x43c80000 x3d27fff9} {x43ab8000 x43c70000 x3e8afff3} {x43ac8000 x43c60000 x3e928006} {x43ad8000 x43c70000 x3e55000d} {x43ae0000 x43c80000 x3dfc0011} {x43ae0000 x43c70000 0}}} {t {{x41300000 x43ac5b64}} {{x41300000 x43c74917}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush97 512 catmullrom {cc {f 2080} {px x41300000 {x43a00000 x43a60000 x3d47fff9} {x43a08000 x43a68000 x3e98fffc} {x43a00000 x43a68000 x3ee60008} {x43a00000 x43a78000 x3d1bfff6} {x43a08000 x43a88000 x3e88fffc}}} {t {{x41300000 x43a03333}} {{x41300000 x43a70000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush96 512 catmullrom {cc {f 2080} {px x41300000 {x43858000 x439a0000 x3d380007} {x43880000 x439a8000 x3e0cffeb} {x43898000 x439a8000 x3eb0800f}}} {t {{x41300000 x4387aaa0}} {{x41300000 x439a5560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush95 512 catmullrom {cc {f 2080} {px x41300000 {x439d0000 x438f0000 x3d4c0003} {x439c8000 x438f0000 x3e8f0004} {x439c8000 x438f8000 x3ea9800a} {x439d0000 x438f8000 x3ebc7ffe} {x439c8000 x438e0000 x3eb57ffa}}} {t {{x41300000 x439cb333}} {{x41300000 x438f0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush94 512 catmullrom {cc {f 2080} {px x41300000 {x434f0000 x43820000 x3cb7ffec} {x43540000 x43830000 x3d24000a} {x43560000 x43808000 x3e8b8002} {x43540000 x437f0000 x3cf0000d} {x43530000 x437f0000 x3b40000b}}} {t {{x41300000 x43533333}} {{x41300000 x4380e666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush93 512 catmullrom {cc {f 2080} {px x41300000 {x438e0000 x43830000 x3cb0000d} {x438f0000 x43840000 x3d1bfff6} {x438f0000 x43830000 x3eab8002} {x438f8000 x43848000 x3e9afff3}}} {t {{x41300000 x438ee000}} {{x41300000 x4383a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush92 512 catmullrom {cc {f 2080} {px x41300000 {x41e80000 x42ae0000 x3d30000d} {x41e80000 x42aa0000 x3e530015} {x41d80000 x42ae0000 x3ec67ff6} {x41d80000 x42b40000 x3ea3ffef} {x41d00000 x42b00000 x3d24000a}}} {t {{x41300000 x41dccccd}} {{x41300000 x42aecccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush91 512 catmullrom {cc {f 2080} {px x41300000 {x41000000 x422c0000 x3cf0000d} {x41000000 x42240000 x3e0a0019} {x40e00000 x42140000 x3e970004} {x40400000 x42140000 x3e65000d} {x40400000 x422c0000 x3e6c0011} {x40a00000 x42240000 x3eac7ffe} {x40e00000 x42100000 x3eb8800f} {x41000000 x42100000 x3e3effe3}}} {t {{x41300000 x40c40000}} {{x41300000 x421d0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush90 512 catmullrom {cc {f 2080} {px x41300000 {x43750000 x41400000 x3d1bfff6}}} {t {{x41300000 x43750000}} {{x41300000 x41400000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush89 512 catmullrom {cc {f 2080} {px x41300000 {x43400000 x421c0000 x3d27fff9} {x43560000 x41e80000 x3e48fffc} {x43560000 x41d80000 x3d44000a} {x43620000 x41c00000 x3d1bfff6} {x43700000 x41880000 x3e21fff8} {x43710000 x41700000 x3e970004}}} {t {{x41300000 x435d2ac1}} {{x41300000 x41c95567}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush88 512 catmullrom {cc {f 2080} {px x41300000 {x43080000 x41a00000 x3cf0000d} {x43080000 x41b00000 x3d1bfff6} {x43080000 x41d00000 x3d33fffd} {x430b0000 x41d00000 x3e63ffef} {x430d0000 x41b00000 x3eb8800f} {x430f0000 x41980000 x3eb67ff6} {x430f0000 x41b00000 x3ea28006} {x43140000 x41980000 x3ea8800f} {x43190000 x41400000 x3ebb8002} {x43190000 x41600000 x3d4ffff3}}} {t {{x41300000 x430ecccd}} {{x41300000 x41a1999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush87 512 catmullrom {cc {f 2080} {px x41300000 {x42da0000 x42a00000 x3d0ffff3} {x42da0000 x429c0000 x3d580007} {x42cc0000 x42a40000 x3eb00000}}} {t {{x41300000 x42d55581}} {{x41300000 x42a00000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush86 512 catmullrom {cc {f 2080} {px x41300000 {x42f20000 x42600000 x3d0ffff3} {x42f80000 x42600000 x3d580007} {x42f40000 x42700000 x3e9c0011}}} {t {{x41300000 x42f4aa7f}} {{x41300000 x4265554d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush85 512 catmullrom {cc {f 2080} {px x41300000 {x430d0000 x41e80000 x3cd80007} {x43100000 x41c00000 x3d0ffff3} {x43100000 x41b00000 x3bc0000b}}} {t {{x41300000 x430f0000}} {{x41300000 x41c80000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush84 512 catmullrom {cc {f 2080} {px x41300000 {x42ae0000 x41200000 x3ca7fff9} {x42ae0000 x41400000 x3d0ffff3} {x42a00000 x41100000 x3d2c0003} {x42980000 x41600000 x3e8d000d} {x42960000 x41b00000 x3e8d7ffa} {x42a60000 x41700000 x3e947ffe} {x42ae0000 x41400000 x3e83ffef} {x42ae0000 x41200000 0}}} {t {{x41300000 x42a58000}} {{x41300000 x41500000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush83 512 catmullrom {cc {f 2080} {px x41300000 {x41600000 x43dc0000 x3d27fff9} {x41400000 x43dc0000 x3d47fff9}}} {t {{x41300000 x41500000}} {{x41300000 x43dc0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush82 512 catmullrom {cc {f 2080} {px x41300000 {x421c0000 x43de0000 x3d1bfff6} {x42240000 x43de8000 x3e33ffef} {x42280000 x43df8000 x3e80800f}}} {t {{x41300000 x4222aab3}} {{x41300000 x43deaaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush81 512 catmullrom {cc {f 2080} {px x41300000 {x41f80000 x43bd8000 x3d400000} {x42000000 x43bf8000 x3e93ffef} {x42100000 x43bf8000 x3ea80000}}} {t {{x41300000 x42040000}} {{x41300000 x43bed560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush80 512 catmullrom {cc {f 2080} {px x41300000 {x41200000 x438b8000 x3d64000a} {x41000000 x438b8000 x3d4ffff3}}} {t {{x41300000 x41100000}} {{x41300000 x438b8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush79 512 catmullrom {cc {f 2080} {px x41300000 {x42380000 x43750000 x3c8ffff3} {x42400000 x43730000 x3d380007} {x42400000 x43750000 x3c880014}}} {t {{x41300000 x423d554d}} {{x41300000 x4374553f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush78 512 catmullrom {cc {f 2080} {px x41300000 {x42000000 x435b0000 x3d13fffd} {x42000000 x43580000 x3d400000} {x41f80000 x435f0000 x3e400000} {x41f80000 x43690000 x3d0c0003} {x41e80000 x43670000 x3e9d000d} {x42000000 x436b0000 x3e81800a} {x42080000 x436c0000 x3ca7fff9} {x42080000 x436e0000 x3c800000}}} {t {{x41300000 x41ff0000}} {{x41300000 x4364e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush77 512 catmullrom {cc {f 2080} {px x41300000 {x41a00000 x43330000 x3cc00000} {x41b00000 x43360000 x3d3bfff6} {x41d80000 x43380000 x3e828006} {x41d00000 x43420000 x3ce7fff9}}} {t {{x41300000 x41be0000}} {{x41300000 x4338c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush76 512 catmullrom {cc {f 2080} {px x41300000 {x41d80000 x43470000 x3cb0000d} {x41d80000 x43420000 x3d0ffff3} {x41c00000 x43340000 x3de7ffde}}} {t {{x41300000 x41d00000}} {{x41300000 x433f0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush75 512 catmullrom {cc {f 2080} {px x41300000 {x430b0000 x43200000 x3d04000a} {x430d0000 x43220000 x3d53fffd}}} {t {{x41300000 x430c0000}} {{x41300000 x43210000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush74 512 catmullrom {cc {f 2080} {px x41300000 {x42ee0000 x43080000 x3c980007} {x42ea0000 x430a0000 x3d8c0003} {x42e40000 x43080000 x3ec0fffc} {x42e00000 x43060000 x3ec9800a} {x42da0000 x43030000 x3ec9fff8} {x42d60000 x43010000 x3ec9fff8} {x42da0000 x43080000 x3ec60008} {x42e40000 x430f0000 x3ec60008} {x42ea0000 x430f0000 x3ec38002} {x42f20000 x430b0000 x3ec60008} {x42f20000 x430d0000 x3ec38002} {x42f80000 x43140000 x3ec2fff3} {x42fc0000 x43160000 x3ea9800a} {x42fe0000 x43160000 x3d0ffff3}}} {t {{x41300000 x42e9dba6}} {{x41300000 x430b922d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx 0 spy 0 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush73 512 catmullrom {cc {f 2080} {px x41300000 {x434d0000 x42d00000 x3d0ffff3} {x43510000 x42dc0000 x3d580007} {x43530000 x42e60000 x3dd80022}}} {t {{x41300000 x4350553f}} {{x41300000 x42db5581}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush72 512 catmullrom {cc {f 2080} {px x41300000 {x436f0000 x42880000 x3d000000} {x43710000 x42940000 x3d47fff9} {x436a0000 x429e0000 x3eaafff3} {x435c0000 x42bc0000 x3e9f7ff1} {x43530000 x42c60000 x3d73fffd}}} {t {{x41300000 x43650000}} {{x41300000 x42a5999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush71 512 catmullrom {cc {f 2080} {px x41300000 {x43440000 x41600000 x3d0ffff3} {x43440000 x41900000 x3d30000d}}} {t {{x41300000 x43440000}} {{x41300000 x41800000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush70 512 catmullrom {cc {f 2080} {px x41300000 {x43410000 x42100000 x3cc00000} {x43440000 x42180000 x3d0c0003} {x43440000 x41d80000 x3d4ffff3}}} {t {{x41300000 x43430000}} {{x41300000 x4206aab3}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush69 512 catmullrom {cc {f 2080} {px x41300000 {x43780000 x41300000 x3ce7fff9} {x43770000 x41300000 x3d27fff9}}} {t {{x41300000 x43778000}} {{x41300000 x41300000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush68 512 catmullrom {cc {f 2080} {px x41300000 {x43828000 x41900000 x3cf7ffec} {x43828000 x41a00000 x3d33fffd} {x43818000 x41a00000 x3e83ffef} {x437e0000 x41800000 x3ea5000d}}} {t {{x41300000 x43816000}} {{x41300000 x41940000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush67 512 catmullrom {cc {f 2080} {px x41300000 {x43948000 x42340000 x3ccffff3} {x43958000 x42340000 x3d200000} {x43928000 x42480000 x3e5e0008} {x438d8000 x42580000 x3eb0800f} {x438a8000 x42600000 x3e9f7ff1} {x438b8000 x42680000 x3e65000d} {x438a8000 x42680000 x3e6e0008} {x43870000 x426c0000 x3e8a8006} {x43870000 x427c0000 x3e8c7ffe}}} {t {{x41300000 x438d6396}} {{x41300000 x4258e388}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush66 512 catmullrom {cc {f 2080} {px x41300000 {x43cd0000 x42580000 x3d89fffe} {x43ce0000 x42500000 x3e9a8006}}} {t {{x41300000 x43cd8000}} {{x41300000 x42540000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush65 512 catmullrom {cc {f 2080} {px x41300000 {x43ae8000 x42440000 x3cf0000d} {x43b08000 x42480000 x3d600000} {x43b18000 x42180000 x3e73ffef} {x43b08000 x42000000 x3e9d000d} {x43ae8000 x42080000 x3e9b8002} {x43af8000 x42100000 x3e9d7ffa} {x43ae8000 x41c80000 x3eae0008} {x43aa0000 x41900000 x3eb28006} {x43a68000 x41500000 x3eb70004} {x43a88000 x41900000 x3eb1fff8} {x43b18000 x41300000 x3eb1fff8} {x43b40000 x40a00000 x3ea57ffa} {x43b68000 x41900000 x3e75000d} {x43ba8000 x41a00000 x3e870004} {x43bf0000 x41500000 x3e9a8006} {x43bf8000 x41300000 x3ea3ffef} {x43c28000 x41500000 x3e98fffc} {x43c38000 x41100000 x3e8d7ffa} {x43c50000 x40a00000 x3d980007}}} {t {{x41300000 x43b48d71}} {{x41300000 x41b00000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush64 512 catmullrom {cc {f 2080} {px x41300000 {x43a88000 x42b40000 x3cc00000} {x43a78000 x42b00000 x3d27fff9} {x43a88000 x42b00000 x3e15000d}}} {t {{x41300000 x43a82aa0}} {{x41300000 x42b1555a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush63 512 catmullrom {cc {f 2080} {px x41300000 {x43b50000 x42fc0000 x3ccffff3} {x43b30000 x42f20000 x3d27fff9} {x43b20000 x42ea0000 x3ec5000d} {x43b40000 x42ea0000 x3e15000d} {x43b40000 x42e20000 x3d1bfff6} {x43b20000 x42e20000 x3da20005} {x43af8000 x42e00000 x3d900000}}} {t {{x41300000 x43b2c917}} {{x41300000 x42ea0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush62 512 catmullrom {cc {f 2080} {px x41300000 {x43d48000 x43260000 x3d24000a} {x43d48000 x43270000 x3d6c0003} {x43d58000 x43270000 x3e4cffeb} {x43d58000 x43290000 x3e967ff6} {x43d28000 x431e0000 x3ebc0011} {x43d18000 x43220000 x3ec0800f} {x43d00000 x431d0000 x3eca8006} {x43cb8000 x431d0000 x3ec00000}}} {t {{x41300000 x43d27000}} {{x41300000 x4322e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush61 512 catmullrom {cc {f 2080} {px x41300000 {x43cc8000 x43380000 x3ce7fff9} {x43cd0000 x43360000 x3d380007} {x43cb8000 x43340000 x3e91800a} {x43cc8000 x43360000 x3eb80000} {x43cd0000 x43340000 x3dc60002}}} {t {{x41300000 x43cc8000}} {{x41300000 x4335999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush60 512 catmullrom {cc {f 2080} {px x41300000 {x43a58000 x43290000 x3d04000a} {x43a78000 x432b0000 x3d400000} {x43a78000 x432d0000 x3d7bfff6} {x43a68000 x43320000 x3e670004} {x43a78000 x43390000 x3e700000} {x43aa0000 x433d0000 x3d1bfff6} {x43a90000 x433f0000 x3e870004} {x43a58000 x43460000 x3eb9fff8} {x43a48000 x434f0000 x3ebc0011} {x43a78000 x43580000 x3eb5000d} {x43a90000 x43580000 x3eb5000d} {x43aa0000 x435a0000 x3eb8fffc} {x43ab0000 x435d0000 x3eb9800a} {x43ac0000 x43610000 x3e1c0011}}} {t {{x41300000 x43a8124e}} {{x41300000 x4344edd3}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush59 512 catmullrom {cc {f 2080} {px x41300000 {x439c8000 x43150000 x3d04000a} {x439d8000 x43120000 x3d380007}}} {t {{x41300000 x439d0000}} {{x41300000 x43138000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush58 512 catmullrom {cc {f 2080} {px x41300000 {x43970000 x43090000 x3d200000} {x43970000 x430b0000 x3d5bfff6} {x43970000 x430c0000 x3e900000} {x43990000 x43100000 x3e7effe3} {x439a0000 x43100000 0}}} {t {{x41300000 x43980000}} {{x41300000 x430ccccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush57 512 catmullrom {cc {f 2080} {px x41300000 {x43818000 x43120000 x3ccffff3} {x43838000 x430e0000 x3d3bfff6} {x43850000 x430b0000 x3e0e0008} {x43880000 x430c0000 x3d900000} {x438a8000 x43070000 x3e90800f} {x438a8000 x43030000 x3ec8800f} {x438c8000 x43070000 x3ea77ff1}}} {t {{x41300000 x43875b64}} {{x41300000 x430a4937}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush56 512 catmullrom {cc {f 2080} {px x41300000 {x438b8000 x43510000 x3d04000a} {x43898000 x434d0000 x3ec9fff8} {x43890000 x43510000 x3eca8006} {x438a8000 x43530000 x3ebb8002}}} {t {{x41300000 x438a2000}} {{x41300000 x43508000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush55 512 catmullrom {cc {f 2080} {px x41300000 {x437c0000 x43390000 x3d1bfff6} {x437a0000 x43380000 x3d44000a} {x437c0000 x43390000 x3e9c7ffe} {x437e0000 x43390000 x3ed77ff1} {x437e0000 x43340000 x3ed9fff8} {x437e0000 x43380000 x3ecafff3} {x437e0000 x43390000 x3d800000}}} {t {{x41300000 x437cdb64}} {{x41300000 x43380000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush54 512 catmullrom {cc {f 2080} {px x41300000 {x43510000 x43828000 x3d07fff9} {x43510000 x43808000 x3d47fff9} {x43510000 x43818000 x3e880000}}} {t {{x41300000 x43510000}} {{x41300000 x43818000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush53 512 catmullrom {cc {f 2080} {px x41300000 {x43270000 x43360000 x3d2c0003} {x432d0000 x43320000 x3d53fffd} {x43300000 x43300000 x3e4e0008} {x43320000 x432b0000 x3e900000} {x43340000 x43270000 x3e83ffef} {x43360000 x43290000 0}}} {t {{x41300000 x43300000}} {{x41300000 x432dd53f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush52 512 catmullrom {cc {f 2080} {px x41300000 {x43190000 x43610000 x3d04000a} {x431e0000 x43630000 x3d27fff9} {x43290000 x435d0000 x3d67fff9} {x43270000 x435c0000 x3e430015} {x43200000 x435f0000 x3e5afff3} {x43200000 x43650000 x3e7afff3} {x43240000 x435c0000 x3e877ff1} {x43240000 x43580000 x3e8c7ffe} {x43200000 x435a0000 x3e780022}}} {t {{x41300000 x4321aac1}} {{x41300000 x435e1c6a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush51 512 catmullrom {cc {f 2080} {px x41300000 {x42b80000 x43880000 x3d4c0003} {x42bc0000 x43870000 x3d89fffe} {x42b80000 x43860000 x3e0afff3}}} {t {{x41300000 x42b9555a}} {{x41300000 x43870000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush50 512 catmullrom {cc {f 2080} {px x41300000 {x42c20000 x439b0000 x3d0c0003} {x42c20000 x439b8000 x3d33fffd} {x42c60000 x439b8000 x3d600000} {x42ce0000 x439b0000 x3e35ffe7} {x42ca0000 x43990000 x3e75ffe7} {x42ca0000 x439b0000 x3e65000d}}} {t {{x41300000 x42c7555a}} {{x41300000 x439ad560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush49 512 catmullrom {cc {f 2080} {px x41300000 {x41b80000 x439f8000 x3c8ffff3} {x41b80000 x43a00000 x3d30000d} {x41b80000 x439f8000 x3e3e0008} {x41a00000 x439e8000 x3e41001d} {x41900000 x439f8000 x3e3cffeb} {x41c80000 x439f8000 x3e400000} {x41f80000 x439c8000 x3e41001d} {x41e80000 x439b8000 x3e0cffeb} {x41b00000 x439c8000 x3e330015} {x41b00000 x439d8000 x3e3cffeb}}} {t {{x41300000 x41bccccd}} {{x41300000 x439e4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush48 512 catmullrom {cc {f 2080} {px x41300000 {x40a00000 x43da0000 x3ccffff3} {x41100000 x43d90000 x3d3bfff6}}} {t {{x41300000 x40e00000}} {{x41300000 x43d98000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush47 512 catmullrom {cc {f 2080} {px x41300000 {x41a00000 x43d90000 x3d27fff9} {x41a00000 x43da0000 x3d580007} {x41900000 x43da0000 x3e0afff3}}} {t {{x41300000 x419aaa99}} {{x41300000 x43d9aaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush46 512 catmullrom {cc {f 2080} {px x41300000 {x42600000 x43e00000 x3c800000} {x42740000 x43e00000 x3d1bfff6} {x427c0000 x43e00000 x3e25000d}}} {t {{x41300000 x42700000}} {{x41300000 x43e00000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush45 512 catmullrom {cc {f 2080} {px x41300000 {x42dc0000 x43e10000 x3cc00000} {x42ee0000 x43e20000 x3d13fffd} {x42f40000 x43de8000 x3e80fffc} {x42ee0000 x43de8000 x3e6afff3} {x42ea0000 x43df0000 x3e6a0019} {x42e60000 x43df0000 x3cf0000d}}} {t {{x41300000 x42ea0000}} {{x41300000 x43dfaaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush44 512 catmullrom {cc {f 2080} {px x41300000 {x43540000 x43db8000 x3c6fffd8} {x434f0000 x43dc8000 x3ce0001b} {x434d0000 x43de8000 x3df80022} {x43510000 x43dd8000 x3e670004} {x435c0000 x43da8000 x3e7e0008} {x43580000 x43da0000 x3e7e0008} {x43510000 x43da8000 x3e7cffeb} {x434d0000 x43dc8000 x3e7a0019} {x434d0000 x43de8000 x3e78fffc} {x43510000 x43dd8000 x3e75ffe7} {x434d0000 x43dd8000 x3e2e0008}}} {t {{x41300000 x435145e3}} {{x41300000 x43dc745a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush43 512 catmullrom {cc {f 2080} {px x41300000 {x43540000 x43da8000 x3cd80007} {x43560000 x43da8000 x3d33fffd} {x435a0000 x43da8000 x3e61fff8} {x43580000 x43da8000 x3df9ffd6}}} {t {{x41300000 x43570000}} {{x41300000 x43da8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush42 512 catmullrom {cc {f 2080} {px x41300000 {x43770000 x43d90000 x3cf7ffec} {x437a0000 x43d90000 x3d27fff9}}} {t {{x41300000 x43788000}} {{x41300000 x43d90000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush41 512 catmullrom {cc {f 2080} {px x41300000 {x43730000 x43cc8000 x3d0ffff3} {x43750000 x43cc8000 x3d4c0003} {x43750000 x43cb8000 x3e58fffc} {x436e0000 x43cc8000 x3e877ff1} {x436e0000 x43ce0000 x3e83ffef} {x43710000 x43cd0000 x3e8d000d} {x43730000 x43ce0000 x3e90fffc} {x43780000 x43cd0000 x3ea5000d} {x43780000 x43ce0000 x3e98fffc} {x43770000 x43ce0000 x3e630015} {x43730000 x43ce0000 x3e35ffe7} {x43710000 x43ce0000 x3d920005} {x43710000 x43d18000 x3d900000} {x43750000 x43d28000 x3e03ffef} {x43780000 x43d48000 x3e0a0019}}} {t {{x41300000 x4373999a}} {{x41300000 x43ce5dd3}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush40 512 catmullrom {cc {f 2080} {px x41300000 {x43480000 x43aa0000 x3cb0000d} {x43380000 x43a88000 x3d0c0003} {x43360000 x43a88000 x3dadfffb} {x43390000 x43a90000 x3dd1fff8} {x43460000 x43aa0000 x3dd80022} {x43460000 x43a68000 x3e23ffef} {x43440000 x43a88000 x3e1e0008} {x43460000 x43aa0000 x3e15ffe7} {x43510000 x43ac0000 x3e15ffe7} {x43560000 x43ac0000 x3e1afff3} {x435f0000 x43ac0000 x3e1e0008} {x435f0000 x43ad8000 x3e1a0019} {x43610000 x43b18000 x3e180022} {x43660000 x43b20000 x3e18fffc} {x43680000 x43af8000 x3e2cffeb} {x43680000 x43b08000 x3e330015} {x43650000 x43b30000 x3e33ffef} {x43630000 x43b40000 x3e3a0019}}} {t {{x41300000 x4352472b}} {{x41300000 x43ac9c6a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush39 512 catmullrom {cc {f 2080} {px x41300000 {x43030000 x43bf0000 x3c8ffff3} {x43050000 x43bf0000 x3ce0001b} {x43030000 x43bc0000 x3e430015} {x43030000 x43bb0000 x3e4cffeb} {x43030000 x43be0000 x3e6cffeb} {x43050000 x43bf8000 x3e89800a} {x43070000 x43ba8000 x3e95000d} {x43070000 x43b78000 x3e99fff8} {x43070000 x43b60000 x3e9b8002} {x43070000 x43b50000 x3e957ffa} {x430c0000 x43b20000 x3e91800a} {x430e0000 x43b18000 x3e88800f} {x430e0000 x43ae8000 x3e877ff1} {x43120000 x43ad0000 x3e780022} {x43100000 x43ac0000 x3e7cffeb} {x43090000 x43ad8000 x3e80fffc} {x43070000 x43ad8000 x3e6e0008} {x43100000 x43a90000 x3de00000} {x43120000 x43a68000 x3ca7fff9} {x43120000 x43a48000 x3c1ffffb}}} {t {{x41300000 x4309999a}} {{x41300000 x43b3accd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3f333333 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush38 512 catmullrom {cc {f 2080} {px x41300000 {x42e20000 x44094000 x3c980007} {x42ca0000 x44038000 x3d1bfff6} {x42d80000 x44020000 x3e43ffef} {x42dc0000 x43fe0000 x3e4effe3} {x42c20000 x43fc0000 x3e5c0011} {x42c60000 x43fe0000 x3e770004} {x42d40000 x43ff8000 x3e75000d} {x42d80000 x43fe8000 x3d24000a} {x42d00000 x43fe0000 x3ccffff3}}} {t {{x41300000 x42d238d5}} {{x41300000 x4400f8e5}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush37 512 catmullrom {cc {f 2080} {px x41300000 {x42ea0000 x440d4000 x3ca7fff9} {x42e60000 x440e4000 x3cf7ffec}}} {t {{x41300000 x42e80000}} {{x41300000 x440dc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush36 512 catmullrom {cc {f 2080} {px x41300000 {x42a60000 x44100000 x3cf0000d} {x42aa0000 x44100000 x3d33fffd} {x42c20000 x44108000 x3d580007} {x42e20000 x440f0000 x3df40032} {x42ea0000 x440e4000 x3c4ffff3}}} {t {{x41300000 x42c60000}} {{x41300000 x440f8ccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush35 512 catmullrom {cc {f 2080} {px x41300000 {x43580000 x44004000 x3d07fff9} {x435a0000 x44004000 x3dd5ffe7}}} {t {{x41300000 x43590000}} {{x41300000 x44004000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush34 512 catmullrom {cc {f 2080} {px x41300000 {x43850000 x43ff8000 x3d07fff9} {x43850000 x44004000 x3d53fffd} {x43838000 x44004000 x3e6c0011} {x43828000 x44004000 x3d99fffe}}} {t {{x41300000 x43840000}} {{x41300000 x44002000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush33 512 catmullrom {cc {f 2080} {px x41300000 {x43610000 x440b8000 x3cd80007} {x43630000 x440b0000 x3d27fff9} {x43630000 x440a8000 x3e61001d} {x43650000 x440a4000 x3e877ff1} {x43660000 x4409c000 x3e870004} {x43680000 x44094000 x3e81fff8} {x436a0000 x44094000 x3de00000}}} {t {{x41300000 x4365249c}} {{x41300000 x440a36d9}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush32 512 catmullrom {cc {f 2080} {px x41300000 {x43a40000 x44260000 x3d1bfff6} {x43a58000 x4424c000 x3d64000a}}} {t {{x41300000 x43a4c000}} {{x41300000 x44256000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush31 512 catmullrom {cc {f 2080} {px x41300000 {x43970000 x44270000 x3d0ffff3} {x43970000 x4427c000 x3d4ffff3} {x43980000 x4428c000 x3e35000d} {x439a0000 x44284000 x3e7e0008}}} {t {{x41300000 x43980000}} {{x41300000 x4427f000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush30 512 catmullrom {cc {f 2080} {px x41300000 {x43968000 x44150000 x3c6fffd8} {x43968000 x44140000 x3cd80007} {x43968000 x44138000 x3e07ffde} {x43958000 x44140000 x3e947ffe} {x43958000 x44148000 x3d3bfff6}}} {t {{x41300000 x4396199a}} {{x41300000 x44143333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush29 512 catmullrom {cc {f 2080} {px x41300000 {x438a8000 x441b4000 x3ce7fff9} {x438b8000 x441c4000 x3d2c0003} {x438c8000 x441bc000 x3e31fff8} {x438a8000 x441b4000 x3e80fffc} {x438a8000 x441c8000 x3e73ffef} {x438b8000 x441c4000 x3d000000}}} {t {{x41300000 x438b2aa0}} {{x41300000 x441be000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush28 512 catmullrom {cc {f 2080} {px x41300000 {x43a68000 x4430c000 x3d2c0003} {x43a78000 x44308000 x3d580007}}} {t {{x41300000 x43a70000}} {{x41300000 x4430a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush27 512 catmullrom {cc {f 2080} {px x41300000 {x43a88000 x44350000 x3d73fffd} {x43a78000 x44324000 x3e6cffeb} {x43a68000 x44324000 0}}} {t {{x41300000 x43a78000}} {{x41300000 x44332ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush26 512 catmullrom {cc {f 2080} {px x41300000 {x439a0000 x44408000 x3cf0000d} {x439c8000 x44404000 x3d580007} {x43a10000 x443d0000 x3e070004} {x43a10000 x443c0000 x3e05ffe7} {x43a10000 x443c8000 x3e000000} {x43a20000 x443c8000 x3e1c0011} {x43a40000 x443ac000 x3e45ffe7} {x43a40000 x44398000 x3d64000a}}} {t {{x41300000 x43a07000}} {{x41300000 x443ce000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush25 512 catmullrom {cc {f 2080} {px x41300000 {x439f8000 x44540000 x3cd80007} {x439d8000 x44540000 x3d64000a} {x439b0000 x44528000 x3e81fff8} {x439c8000 x44528000 x3e6effe3} {x439d8000 x44524000 x3d73fffd}}} {t {{x41300000 x439d3333}} {{x41300000 x44530ccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush24 512 catmullrom {cc {f 2080} {px x41300000 {x43850000 x444dc000 x3d30000d} {x43880000 x44500000 x3d64000a} {x43890000 x44500000 x3e15ffe7} {x43880000 x44504000 x3d960002}}} {t {{x41300000 x43878000}} {{x41300000 x444f8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush23 512 catmullrom {cc {f 2080} {px x41300000 {x43818000 x44484000 x3ca7fff9} {x43808000 x44494000 x3d1bfff6} {x43808000 x444b0000 x3d87fff9}}} {t {{x41300000 x4380d560}} {{x41300000 x44498000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush22 512 catmullrom {cc {f 2080} {px x41300000 {x43780000 x4443c000 x3c980007} {x43780000 x44444000 x3d200000} {x437a0000 x44458000 x3d53fffd} {x43770000 x44450000 x3e0cffeb} {x43770000 x44460000 x3dd1fff8} {x437a0000 x4447c000 x3e070004} {x437c0000 x4447c000 x3e05ffe7} {x437e0000 x44484000 x3e03ffef} {x43808000 x4448c000 x3da20005} {x43818000 x4448c000 0}}} {t {{x41300000 x437b3333}} {{x41300000 x44469333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush21 512 catmullrom {cc {f 2080} {px x41300000 {x434a0000 x44460000 x3c800000} {x434a0000 x44470000 x3cf0000d} {x434b0000 x4447c000 x3e070004} {x434d0000 x44468000 x3e838002} {x434f0000 x44460000 x3e80fffc} {x43540000 x44474000 x3e780022} {x43580000 x4444c000 x3e78fffc} {x435a0000 x44444000 0}}} {t {{x41300000 x43502000}} {{x41300000 x44463000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush20 512 catmullrom {cc {f 2080} {px x41300000 {x42e00000 x4420c000 x3d0ffff3} {x42e20000 x4420c000 x3d4ffff3} {x42ea0000 x441ec000 x3debffce}}} {t {{x41300000 x42e40000}} {{x41300000 x44201550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush19 512 catmullrom {cc {f 2080} {px x41300000 {x43190000 x44450000 x3cb7ffec} {x431e0000 x4443c000 x3d24000a} {x43270000 x443e4000 x3d580007} {x43290000 x443d0000 x3d4c0003} {x43200000 x44408000 x3d200000} {x431d0000 x4442c000 x3dcc0003} {x43220000 x44428000 x3de3ffef} {x43260000 x443f4000 x3e0e0008} {x43260000 x443d8000 x3e0effe3} {x43220000 x443e4000 x3e11fff8} {x43220000 x443d8000 x3e2effe3} {x43270000 x443ac000 x3e27ffde} {x43290000 x44388000 x3e01001d} {x43290000 x44378000 x3e030015} {x432b0000 x44350000 x3e030015} {x43290000 x4432c000 x3e05ffe7} {x43270000 x442f8000 x3e070004} {x43240000 x442e4000 x3e0a0019} {x431d0000 x442cc000 x3e180022} {x43190000 x442c0000 x3e23ffef} {x43170000 x442a8000 x3e21001d} {x43190000 x4429c000 x3e0cffeb} {x431b0000 x44284000 x3dce0008} {x431b0000 x44270000 x3d04000a} {x43170000 x44244000 x3d27fff9} {x43150000 x44234000 x3d900000} {x43150000 x44220000 x3d900000} {x43150000 x4420c000 x3cc80014} {x43120000 x441e0000 x3c9fffe5}}} {t {{x41300000 x431f845a}} {{x41300000 x44338d3f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush18 512 catmullrom {cc {f 2080} {px x41300000 {x43070000 x447d0000 x3cd80007} {x43070000 x447dc000 x3d0ffff3} {x43070000 x447ec000 x3dd1fff8} {x430b0000 x447d0000 x3e25000d} {x43140000 x44778000 x3e23ffef} {x43150000 x44740000 x3dc00000} {x43190000 x446e0000 x3da20005} {x431b0000 x446a0000 x3e1c0011} {x43190000 x44684000 x3e3cffeb} {x43150000 x44698000 x3e4c0011} {x43100000 x446f0000 x3e4c0011} {x43120000 x44738000 x3e4c0011} {x43120000 x44730000 x3e4e0008} {x43120000 x44714000 x3e53ffef} {x43140000 x446b0000 x3e370004} {x43140000 x44660000 x3e01001d} {x43150000 x4462c000 x3e0a0019} {x43140000 x44624000 x3e05ffe7} {x43100000 x445fc000 x3dfc0011} {x430e0000 x445d8000 x3dd9ffd6} {x430e0000 x445ac000 x3ddc0011} {x430b0000 x4459c000 x3dd80022} {x43090000 x44580000 x3dd80022} {x43070000 x4456c000 x3d4ffff3} {x43000000 x44548000 x3d1bfff6} {x43000000 x44540000 x3bc0000b}}} {t {{x41300000 x430f1d71}} {{x41300000 x446949db}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush17 512 catmullrom {cc {f 2080} {px x41300000 {x42000000 x445b8000 x3d0ffff3} {x42080000 x445c0000 x3d47fff9} {x42100000 x445c0000 x3de3ffef} {x42100000 x445e4000 x3e070004} {x42100000 x44608000 x3e370004} {x42100000 x4463c000 x3e48fffc} {x42100000 x44660000 x3e51001d} {x42100000 x4467c000 x3e51fff8} {x42080000 x4467c000 x3e65000d} {x42100000 x44660000 x3e75000d} {x42100000 x44650000 x3e730015} {x42240000 x44620000 x3e71fff8} {x422c0000 x44600000 x3e65ffe7} {x42340000 x445dc000 x3e470004} {x42340000 x445d0000 x3da60002} {x42340000 x445c0000 x3d64000a} {x42340000 x445d0000 x3d93fffd} {x42340000 x44600000 x3e4effe3} {x42200000 x44634000 x3e95000d} {x42180000 x44674000 x3e99fff8} {x42180000 x4467c000 x3e9c0011} {x42180000 x44644000 x3ea38002} {x42200000 x445fc000 x3e9b8002} {x42180000 x445d8000 x3e8f7ff1} {x42180000 x445ec000 x3e98800f} {x42100000 x44610000 x3eb0fffc} {x42180000 x445ec000 x3ec1fff8} {x42200000 x445b8000 x3eac7ffe} {x42200000 x445c8000 x3e9d7ffa} {x42200000 x445f4000 x3ea28006} {x42240000 x445dc000 x3ea67ff6} {x422c0000 x445ac000 x3e5afff3} {x422c0000 x445b8000 x3e23ffef} {x422c0000 x445c0000 x3e55000d} {x422c0000 x445ec000 x3e63ffef} {x42340000 x44634000 x3e8b8002} {x42180000 x446b4000 x3e92fff3} {x42080000 x446e0000 x3e95000d} {x42000000 x446e0000 x3e980000} {x42080000 x446b4000 x3e90800f} {x42180000 x4463c000 x3e730015} {x42180000 x44600000 x3e1c0011} {x42200000 x445fc000 x3e3a0019} {x42100000 x44618000 x3e83ffef} {x42080000 x44658000 x3e98fffc} {x42100000 x44690000 x3ea57ffa} {x42000000 x446d8000 x3ea80000} {x42000000 x446e8000 x3ea80000} {x42100000 x446b0000 x3ea67ff6} {x42180000 x44698000 x3e4afff3} {x42000000 x446d8000 x3e55000d} {x41e80000 x44704000 x3e80fffc} {x41e80000 x4470c000 x3e81fff8} {x41f80000 x446f8000 x3e5afff3} {x42100000 x44714000 x3e41fff8} {x42340000 x44744000 x3e4a0019} {x42340000 x44730000 x3e43ffef} {x422c0000 x44728000 x3ddc0011} {x423c0000 x44754000 x3dcc0003} {x42600000 x44780000 x3df00043} {x42580000 x44764000 x3df40032} {x42480000 x4475c000 x3d24000a} {x42500000 x4478c000 x3de6002a} {x42680000 x447a4000 x3e3a0019} {x42480000 x44768000 x3e61001d} {x422c0000 x44764000 x3e51001d} {x42340000 x4478c000 x3e83ffef} {x42480000 x4479c000 x3e9c0011} {x422c0000 x4475c000 x3ea5000d} {x42080000 x4474c000 x3ea67ff6} {x42100000 x44788000 x3eac7ffe} {x422c0000 x447ac000 x3eb80000} {x42340000 x44770000 x3eb8fffc} {x42200000 x44754000 x3eb38002} {x42100000 x44788000 x3eb3ffef} {x42240000 x447b0000 x3ebd000d} {x422c0000 x4478c000 x3ebc0011} {x42180000 x44764000 x3eb0800f} {x41f80000 x44794000 x3eb38002} {x42100000 x447c8000 x3ec70004} {x423c0000 x447b8000 x3ec77ff1} {x42340000 x44788000 x3ec00000} {x42180000 x44780000 x3ebf0004} {x42200000 x44794000 x3ec5000d} {x42680000 x447d0000 x3ec70004} {x42820000 x447b8000 x3ec8fffc} {x423c0000 x44770000 x3ec8fffc} {x42200000 x44768000 x3ec8fffc} {x42580000 x447ac000 x3ec60008} {x428c0000 x447d4000 x3ec77ff1} {x42aa0000 x447c8000 x3ec77ff1} {x427c0000 x44794000 x3ecd7ffa} {x42500000 x44794000 x3ed1fff8} {x42860000 x447c8000 x3ecf0004} {x42ac0000 x447ec000 x3ece7ff6} {x429a0000 x447d0000 x3ed00000} {x42180000 x44780000 x3ed28006} {x41b00000 x4475c000 x3eaafff3}}} {t {{x41300000 x422a491d}} {{x41300000 x446cdeb8}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 ds 1 dh 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush16 512 catmullrom {cc {f 2080} {px x41300000 {x42940000 x445e4000 x3c6fffd8} {x42a20000 x445d8000 x3d04000a} {x42aa0000 x445c0000 x3e2afff3} {x42aa0000 x445b4000 x3e63ffef} {x42aa0000 x445c0000 x3e070004} {x42aa0000 x445d8000 x3e1effe3} {x42a60000 x445c8000 x3e41001d}}} {t {{x41300000 x42a5248f}} {{x41300000 x445cb6d9}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush15 512 catmullrom {cc {f 2080} {px x41300000 {x422c0000 x4456c000 x3d07fff9} {x422c0000 x44588000 x3d30000d} {x42340000 x4459c000 x3e13ffef} {x42340000 x44594000 x3e31fff8} {x422c0000 x44570000 x3e200000} {x42340000 x44570000 x3d47fff9} {x42340000 x44578000 x3d47fff9} {x423c0000 x44594000 x3d4c0003} {x42440000 x44594000 x3e130015}}} {t {{x41300000 x42340000}} {{x41300000 x44584000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush14 512 catmullrom {cc {f 2080} {px x41300000 {x42340000 x445ac000 x3c980007} {x42340000 x44594000 x3d180007} {x42340000 x44588000 x3d1bfff6}}} {t {{x41300000 x42340000}} {{x41300000 x44598000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush13 512 catmullrom {cc {f 2080} {px x41300000 {x42100000 x44554000 x3c60001b} {x42080000 x44564000 x3d27fff9} {x42100000 x44564000 x3c0ffffd} {x42100000 x44578000 x3be00005} {x42180000 x44594000 x3d64000a} {x42180000 x445a4000 x3c8ffff3}}} {t {{x41300000 x4211554d}} {{x41300000 x44577550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush12 512 catmullrom {cc {f 2080} {px x41300000 {x41e80000 x444e8000 x3c800000} {x41e80000 x444f8000 x3c880014}}} {t {{x41300000 x41e80000}} {{x41300000 x444f0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush11 512 catmullrom {cc {f 2080} {px x41300000 {x41c80000 x444b0000 x3c6fffd8} {x41d80000 x444c4000 x3cb7ffec} {x41e80000 x444d4000 x3affffd5}}} {t {{x41300000 x41d80000}} {{x41300000 x444c2ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush10 512 catmullrom {cc {f 2080} {px x41300000 {x41c80000 x44458000 x3d4ffff3} {x41a00000 x44474000 x3d7bfff6} {x41900000 x4448c000 x3cb0000d}}} {t {{x41300000 x41a80000}} {{x41300000 x44472ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush9 512 catmullrom {cc {f 2080} {px x41300000 {x41b00000 x44420000 x3d0ffff3} {x41b80000 x44420000 x3d44000a} {x41a00000 x44434000 x3e400000} {x41900000 x44444000 x3e65000d} {x41800000 x44450000 x3e770004} {x41b00000 x44450000 x3e6c0011} {x41f80000 x4444c000 x3e2c0011} {x41e80000 x44450000 x3d33fffd} {x41d80000 x44450000 0}}} {t {{x41300000 x41b8e388}} {{x41300000 x4444071b}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush8 512 catmullrom {cc {f 2080} {px x41300000 {x40800000 x44268000 x3d0ffff3} {x40800000 x4423c000 x3d47fff9}}} {t {{x41300000 x40800000}} {{x41300000 x44252000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush7 512 catmullrom {cc {f 2080} {px x41300000 {x40a00000 x442f8000 x3ce0001b} {x40a00000 x442c0000 x3d4c0003} {x40800000 x4428c000 x3d3bfff6}}} {t {{x41300000 x4095555c}} {{x41300000 x442c1550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush6 512 catmullrom {cc {f 2080} {px x41300000 {x41e80000 x44364000 x3c60001b} {x41f80000 x44364000 x3d0ffff3} {x41d80000 x44340000 x3ea9fff8} {x41100000 x44308000 x3e65000d} {x40e00000 x44300000 x3c000000}}} {t {{x41300000 x41a4cccd}} {{x41300000 x44336666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush5 512 catmullrom {cc {f 2080} {px x41300000 {x42880000 x443d0000 x3d180007} {x428c0000 x443d8000 x3ddc0011} {x428c0000 x443c8000 x3e55000d} {x42880000 x443c0000 x3e58fffc} {x428c0000 x443d0000 x3e5cffeb} {x42900000 x443bc000 x3e900000} {x428c0000 x443a4000 x3e83ffef} {x42820000 x443bc000 x3e81fff8} {x42680000 x443d0000 x3e83ffef} {x42680000 x443c0000 0}}} {t {{x41300000 x4285cccd}} {{x41300000 x443c4666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush4 512 catmullrom {cc {f 2080} {px x41300000 {x42440000 x4423c000 x3c6fffd8} {x423c0000 x4420c000 x3ca7fff9} {x423c0000 x441b4000 x3d24000a} {x423c0000 x441ac000 x3d2c0003}}} {t {{x41300000 x423e0000}} {{x41300000 x441ea000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush3 512 catmullrom {cc {f 2080} {px x41300000 {x42600000 x44284000 x3cc00000} {x42600000 x44294000 x3d27fff9} {x42500000 x442e4000 x3d7bfff6} {x42480000 x442e8000 x3da7fff9}}} {t {{x41300000 x42560000}} {{x41300000 x442b9000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush2 512 catmullrom {cc {f 2080} {px x41300000 {x42240000 x44148000 x3d0c0003} {x423c0000 x44158000 x3d400000} {x42480000 x44174000 x3e200000} {x42500000 x44198000 x3e1e0008} {x42600000 x441d0000 x3e15000d} {x426c0000 x441fc000 x3cb7ffec} {x426c0000 x44218000 x3c6fffd8}}} {t {{x41300000 x42500000}} {{x41300000 x441a6db2}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {px x41300000 {x42680000 x4408c000 x3ca7fff9} {x427c0000 x44094000 x3d180007} {x426c0000 x44068000 x3ea0fffc} {x42600000 x44070000 x3ea67ff6} {x42600000 x440a8000 x3ead000d} {x42740000 x440b8000 x3eb28006} {x42880000 x44084000 x3eb47ffe} {x42740000 x4408c000 x3eb70004} {x42600000 x440d4000 x3eb9800a} {x42680000 x440e4000 x3ec28006} {x42740000 x440b8000 x3ec60008} {x426c0000 x440c8000 x3ec47ffe} {x42600000 x440ec000 x3ec47ffe} {x426c0000 x440dc000 x3ec60008} {x426c0000 x4408c000 x3ec0fffc} {x42580000 x44068000 x3ec0fffc} {x426c0000 x4405c000 x3ec00000} {x428c0000 x4405c000 x3ebc7ffe} {x42b00000 x44070000 x3ebe0008} {x42b80000 x4408c000 x3ec00000} {x42bc0000 x440a8000 x3ec2fff3} {x42ca0000 x440a8000 x3ec57ffa} {x42d40000 x440b8000 x3ec60008} {x42e00000 x440a8000 x3ec67ff6} {x42e00000 x4409c000 x3ec8fffc} {x42dc0000 x440a4000 x3ec77ff1} {x42e00000 x440c8000 x3ec67ff6} {x42e20000 x440c0000 x3ec60008} {x42e60000 x440a8000 x3ec8800f} {x42e20000 x440a4000 x3ec9fff8} {x42d40000 x44080000 x3eca8006} {x42b00000 x44038000 x3ecd000d} {x42a20000 x44014000 x3ecc7ffe} {x42940000 x44018000 x3ece7ff6} {x42900000 x44018000 x3ed0800f} {x42880000 x44020000 x3ed0800f} {x42680000 x44044000 x3ed00000} {x42500000 x44060000 x3ecf7ff1} {x42440000 x44078000 x3eb9800a}}} {t {{x41300000 x42994831}} {{x41300000 x4408a26f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42a20000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}}}}}} toolbox {blur { { selectAll bs 91 src 1 str 1 ssx 1 ssy 1 sf 1 ep1 15 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createOpenSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush opc 0.28 bs 125 dh 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 11 ltm 11 ltt 0 tt 14 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur bs 91 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 11 ltm 11 tt 23 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_size 91 toolbar_brush_hardness 0.200000003 toolbar_lifetime_type single toolbar_lifetime_start 11 toolbar_lifetime_end 11 toolbar_effect_parameter1 15 toolbar_paint_source fg toolbar_source_transform_scale {1 1} toolbar_source_transform_center {960 540} colorOverlay {0 0 0 0} paint_source foreground lifetime_type "all frames" lifetime_start 39 lifetime_end 39 motionblur_on true brush_type blur brush_size 91 brush_spacing 0.05000000075 brush_hardness 0.200000003 effect_parameter1 15 source_translate_round false source_black_outside true name RotoPaint1 xpos 1907 ypos 14782 disable {{"parent.lensDirtPicker == 1 ? 0 : 1"}} } RotoPaint { cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 512} {t x44768000 x43fd0000} {a} {cubiccurve Burn19 512 catmullrom {cc {f 2080} {px x41300000 {x44a2c000 x43f28000 x3e100000} {x44abc000 x43fe0000 0}}} {t {{x41300000 x44a74000}} {{x41300000 x43f84000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Burn18 512 catmullrom {cc {f 2080} {px x41300000 {x43640000 x43310000 x3d600000} {x436b0000 x43310000 x3e3cffeb} {x43510000 x42920000 x3e670004} {x433e0000 xc2d00000 x3ecf0004} {x43440000 xc30f0000 x3eeafff3} {x433d0000 xc34f0000 x3ed38002}}} {t {{x41300000 x434fd53f}} {{x41300000 xc0900000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Burn17 512 catmullrom {cc {f 2080} {px x41300000 {x43420000 x43958000 x3ca7fff9} {x43380000 x437f0000 x3d000000} {x430f0000 x42f80000 x3e960008} {x43010000 x428e0000 x3ecd7ffa} {x42ee0000 xc1200000 x3ed0fffc} {x42ae0000 xc2a40000 x3ec1fff8} {x429c0000 xc2ae0000 0}}} {t {{x41300000 x43056dd3}} {{x41300000 x42a2db71}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Burn16 512 catmullrom {cc {f 2080} {px x41300000 {x43ab8000 x447c8000 x3d180007} {x43980000 x44710000 x3dddffc5} {x43898000 x44600000 x3e67ffde} {x43940000 x44688000 x3e92fff3} {x43be8000 x44836000 x3e8e7ff6} {x43980000 x446e8000 x3e9e7ff6} {x43980000 x44694000 x3ed1fff8} {x43a40000 x44748000 x3ed0fffc} {x43c00000 x44846000 x3ec8800f} {x438c8000 x44724000 x3ec2fff3} {x43a00000 x44806000 x3eca8006} {x43b40000 x44876000 x3ea1fff8}}} {t {{x41300000 x43a1aaa0}} {{x41300000 x4476f550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Burn15 512 catmullrom {cc {f 2080} {px x41300000 {x43cd0000 x4483c000 x3c6fffd8} {x43cd8000 x44840000 x3d07fff9} {x43c20000 x4481a000 x3df80022} {x43920000 x445b4000 x3ec2fff3} {x43870000 x44488000 x3f02a002} {x43700000 x442d8000 x3f07e005} {x43700000 x44300000 x3ebd000d} {x43710000 x44328000 0}}} {t {{x41300000 x439bc000}} {{x41300000 x4458d000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Burn14 512 catmullrom {cc {f 2080} {px x41300000 {x43cd0000 x447d4000 x3d5bfff6} {x43bd8000 x4474c000 x3e0e0008} {x43980000 x44570000 x3eb57ffa} {x43858000 x44460000 x3eed000d} {x43560000 x4423c000 x3ef8fffc} {x43510000 x441b8000 x3efa8006} {x43580000 x44174000 x3ec2fff3}}} {t {{x41300000 x438ec917}} {{x41300000 x44455b75}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Burn13 512 catmullrom {cc {f 2080} {px x41300000 {x43898000 x44760000 x3d0ffff3} {x431c0000 x44300000 x3e15ffe7}}} {t {{x41300000 x43578000}} {{x41300000 x44530000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Burn12 512 catmullrom {cc {f 2080} {px x41300000 {x442c8000 x43710000 x3d8dfffb} {x442d8000 x436c0000 x3e85000d} {x441c8000 x42c20000 x3e98800f} {x44190000 xc30d0000 x3efd7ffa} {x441a4000 xc3400000 x3e9a8006}}} {t {{x41300000 x4421f333}} {{x41300000 x4240cccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Burn11 512 catmullrom {cc {f 2080} {px x41300000 {x4492e000 x42be0000 x3e9a8006} {x44942000 x42580000 x3ea77ff1} {x4498a000 xc2d00000 x3eac7ffe} {x4498a000 xc2f40000 0}}} {t {{x41300000 x44961000}} {{x41300000 xc19a0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Burn10 512 catmullrom {cc {f 2080} {px x41300000 {x44846000 x435d0000 x3d67fff9} {x4488e000 x42da0000 x3eb77ff1} {x448f8000 xc2b00000 x3ee70004} {x44904000 xc3250000 x3ef67ff6}}} {t {{x41300000 x448b4000}} {{x41300000 x419a0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Burn9 512 catmullrom {cc {f 2080} {px x41300000 {x44424000 x43730000 x3d13fffd} {x444e8000 x438e0000 x3dd40032} {x445b0000 x431e0000 x3ec5000d} {x445e4000 x42a00000 x3f0fe005} {x44664000 xc28c0000 x3f1b6007} {x44630000 xc3100000 x3f1c6003}}} {t {{x41300000 x44588ab0}} {{x41300000 x42b7aaa6}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Burn8 512 catmullrom {cc {f 2080} {px x41300000 {x44cfa000 x4487c000 x3d6c0003} {x44cca000 x44858000 x3e4effe3} {x44c8c000 x445f8000 x3ec77ff1} {x44c90000 x44454000 x3efd7ffa} {x44cb0000 x4406c000 x3ef9fff8}}} {t {{x41300000 x44cb6666}} {{x41300000 x445acccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Burn7 512 catmullrom {cc {f 2080} {px x41300000 {x44b7a000 x447dc000 x3c6fffd8} {x44b7e000 x44810000 x3ce7fff9} {x44b80000 x44824000 x3e0e0008} {x44b66000 x447a4000 x3ee9fff8} {x44b4e000 x44568000 x3f0f9ffd} {x44b76000 x441dc000 x3f215ffe} {x44b7a000 x440d8000 x3f225ffa} {x44bc0000 x43e40000 x3f15dffc} {x44bd2000 x43de0000 0}}} {t {{x41300000 x44b851ec}} {{x41300000 x4443b1cb}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Burn6 512 catmullrom {cc {f 2080} {px x41300000 {x44ef4000 x4478c000 x3d13fffd} {x44eda000 x44730000 x3e3a0019} {x44e88000 x44444000 x3ef1800a} {x44e7a000 x44280000 x3f0b6007} {x44e88000 x43ca8000 x3f0adff8} {x44f06000 x42be0000 x3ef57ffa} {x44f16000 x42820000 0}}} {t {{x41300000 x44ec76b8}} {{x41300000 x440e76d9}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Burn5 512 catmullrom {cc {f 2080} {px x41300000 {x44dde000 x44754000 x3cb0000d} {x44de0000 x44774000 x3cc80014} {x44df6000 x447e8000 x3dd1fff8} {x44d9c000 x446cc000 x3ed1fff8} {x44d74000 x444fc000 x3f1fe005} {x44d96000 x43d80000 x3f341ffb} {x44dde000 x43490000 x3f381ffb} {x44de4000 xc2540000 x3f2f6007} {x44e00000 xc2ea0000 x3f092008} {x44e1e000 xc3450000 x3ee1fff8} {x44e28000 xc36c0000 x3dd1fff8}}} {t {{x41300000 x44dda5c3}} {{x41300000 x43da0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Burn4 512 catmullrom {cc {f 2080} {px x41300000 {x44c2e000 x447f8000 x3d83fffd} {x44c1c000 x447dc000 x3e45ffe7} {x44c16000 x4464c000 x3f036007} {x44c3c000 x444c0000 x3f30e001} {x44cb2000 x44198000 x3f389ff9} {x44d3e000 x437d0000 x3f3c9ff9} {x44d82000 xc0000000 x3f36a002} {x44db2000 xc2aa0000 x3f2c9ff9} {x44df8000 xc33e0000 x3f279ffd} {x44e1e000 xc3908000 x3f1b6007} {x44e1a000 xc3930000 0}}} {t {{x41300000 x44d15d1f}} {{x41300000 x43ab974c}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Burn3 512 catmullrom {cc {f 2080} {px x41300000 {x44b9c000 x447c8000 x3d820005} {x44b84000 x4475c000 x3e6e0008} {x44b58000 x44440000 x3f1da006} {x44b58000 x44298000 x3f395ffe} {x44b5c000 x43b60000 x3f3c6003} {x44b7e000 x438c8000 x3f3f9ffd} {x44bd2000 x428c0000 x3f3ddffc} {x44bf4000 x41600000 x3f331fff} {x44c42000 xc29c0000 x3f2f9ffd} {x44c6e000 xc34f0000 x3f201ffb} {x44c98000 xc3880000 x3f02a002}}} {t {{x41300000 x44bcae66}} {{x41300000 x43a4dd0e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Burn2 512 catmullrom {cc {f 2080} {px x41300000 {x44790000 x44674000 x3e9d000d} {x44710000 x445ec000 x3eb47ffe} {x4452c000 x4417c000 x3f092008} {x4447c000 x43ef8000 x3f26a002} {x443cc000 x432c0000 x3f2b9ffd} {x443b0000 x42be0000 x3f2a5ffa} {x443ec000 xc1e80000 x3f29dffc} {x4447c000 xc31b0000 x3f231fff} {x44510000 xc34f0000 x3f179ffd} {x444e8000 xc3100000 x3f015ffe} {x444f8000 xc0000000 x3eff0004} {x44584000 x43c70000 x3f03e005} {x445f4000 x44094000 x3f0f9ffd} {x44784000 x4444c000 x3f131fff} {x44892000 x447a4000 x3f16a002} {x44846000 x446e0000 x3f1b6007} {x4481e000 x445b0000 x3f2b1fff} {x447b8000 x4419c000 x3f2ea002} {x447fc000 x432d0000 x3f306003} {x4481e000 xc2000000 x3f29dffc} {x44862000 xc2e80000 x3f1ce001} {x44854000 xc2a60000 x3f13e005} {x44862000 x42b80000 x3f152008} {x44864000 x43f40000 x3f1c1ffb} {x448ce000 x444f0000 x3f209ff9} {x4496a000 x4474c000 x3f27e005} {x448fe000 x445c4000 x3f286003} {x448f0000 x441c0000 x3f362004} {x448fe000 x440d0000 x3f3adff8} {x448fe000 x43918000 x3f395ffe} {x4496e000 x42e80000 x3f389ff9} {x449c6000 xc1400000 x3f25dffc} {x44a1e000 xc2c80000 x3f11dffc} {x44a34000 xc2f40000 x3d580007}}} {t {{x41300000 x447d499a}} {{x41300000 x43b612d1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Burn1 512 catmullrom {cc {f 2080} {px x41300000 {x44690000 x44738000 x3e070004} {x44628000 x446fc000 x3e8f7ff1} {x444cc000 x44410000 x3f046003} {x44408000 x442a0000 x3f26a002} {x4431c000 x44018000 x3f2fe005} {x442b4000 x43940000 x3f371fff} {x442a8000 x432f0000 x3f39a006} {x442a0000 x43010000 x3f34e001} {x44270000 x42240000 x3f346003} {x44280000 xc28e0000 x3f322004} {x44294000 xc3250000 x3f281ffb} {x442a0000 xc32c0000 x3f201ffb} {x44248000 xc30d0000 x3f11a006} {x44220000 x42da0000 x3f11a006} {x44298000 x43fb0000 x3f146003} {x443a8000 x4439c000 x3f176007} {x444e0000 x44740000 x3f1be005} {x4453c000 x4480c000 x3f192008} {x4452c000 x4484c000 x3f19dffc} {x443e8000 x446fc000 x3f1d2008} {x441a4000 x442b4000 x3f22a002} {x44108000 x440a8000 x3f2be005} {x44088000 x43a50000 x3f2da006} {x43fb0000 x428c0000 x3f2e5ffa} {x43f68000 xc2700000 x3f2be005} {x43ff0000 xc31b0000 x3f271fff} {x44020000 xc3430000 x3f1c1ffb} {x44004000 xc34f0000 x3f149ff9}}} {t {{x41300000 x442b224e}} {{x41300000 x43b9adb2}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e800000 g x3e800000 b x3e800000 ro 0 go 0 bo 0 ao 0 opc x3e4ccccd bs x440d4000 bm x40400000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41980000 nv x40000000 view2 x40000000}} {cubiccurve Brush132 512 catmullrom {cc {f 2080} {px x41300000 {x433b0000 x44388000 x3cc80014} {x434e0000 x444a4000 x3d30000d} {x434e0000 x444cc000 x3b9ffffb}}} {t {{x41300000 x4347aac1}} {{x41300000 x44452ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush131 512 catmullrom {cc {f 2080} {px x41300000 {x42f20000 x4400c000 x3c8ffff3} {x42f80000 x44028000 x3c8ffff3} {x433b0000 x44264000 x3d3bfff6} {x43380000 x44284000 x3d0c0003}}} {t {{x41300000 x431a0000}} {{x41300000 x44147000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush130 512 catmullrom {cc {f 2080} {px x41300000 {x4484a000 x41200000 x3cf7ffec} {x44886000 x40a00000 x3e3effe3} {x44894000 x40a00000 x3d30000d}}} {t {{x41300000 x44876a8f}} {{x41300000 x40d5555c}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush129 512 catmullrom {cc {f 2080} {px x41300000 {x44430000 x43490000 x3ce0001b} {x44468000 x43390000 x3d27fff9} {x444d4000 x43280000 x3e100000} {x4453c000 x42b40000 x3e3e0008} {x445d0000 x428c0000 x3e9a8006} {x44620000 x42740000 x3e99fff8} {x4469c000 x42380000 x3e9a8006} {x4469c000 x42140000 x3e99fff8} {x44554000 x424c0000 x3e700000} {x444a4000 x42820000 x3e860008} {x44408000 x42880000 x3e857ffa} {x443e0000 x42680000 x3e8e7ff6} {x44454000 x42000000 x3e9e7ff6} {x444a0000 x41980000 x3e9a8006} {x444cc000 x40e00000 x3e580022}}} {t {{x41300000 x4450777d}} {{x41300000 x429a6666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush128 512 catmullrom {cc {f 2080} {px x41300000 {x44408000 x43640000 x3c6fffd8} {x44418000 x435d0000 0}}} {t {{x41300000 x44410000}} {{x41300000 x43608000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush127 512 catmullrom {cc {f 2080} {px x41300000 {x4422c000 x44374000 x3cf0000d} {x44218000 x443e8000 x3d9c0003} {x44240000 x44430000 x3da3fffd}}} {t {{x41300000 x4422c000}} {{x41300000 x443d9550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush126 512 catmullrom {cc {f 2080} {px x41300000 {x44094000 x43908000 x3cf0000d} {x4408c000 x439c8000 x3d27fff9} {x440a8000 x43b18000 x3e05ffe7} {x440cc000 x43bd8000 x3e100000} {x440e0000 x43cd0000 x3e100000} {x44100000 x43d98000 x3e21001d} {x440f4000 x43ee0000 x3e300000} {x440b8000 x43f78000 x3e400000} {x4409c000 x44060000 x3e51001d} {x44094000 x440a0000 x3e470004} {x440a8000 x440ec000 x3df40032} {x440d0000 x44124000 x3d24000a} {x440e0000 x44140000 0}}} {t {{x41300000 x440be26f}} {{x41300000 x43e64eb8}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush125 512 catmullrom {cc {f 2080} {px x41300000 {x43e70000 x43380000 x3cf7ffec} {x43f08000 x430f0000 x3d07fff9} {x43f90000 x42d20000 x3e0effe3} {x44080000 x42100000 x3e15000d} {x440c4000 x42240000 x3e4cffeb} {x4411c000 x424c0000 x3e100000} {x44130000 x42600000 x3d64000a} {x44124000 x42ae0000 x3d67fff9}}} {t {{x41300000 x44067000}} {{x41300000 x42afc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush124 512 catmullrom {cc {f 2080} {px x41300000 {x43a00000 x42fc0000 x3d87fff9} {x43a08000 x42f20000 x3d24000a} {x43a00000 x43100000 x3dddffc5} {x43a28000 x43360000 x3e8f7ff1} {x43b28000 x437c0000 x3e9afff3} {x43b50000 x43840000 x3e977ff1} {x43c00000 x43950000 x3e960008} {x43c50000 x43930000 x3e1e0008} {x43d48000 x437a0000 x3e11fff8} {x43da8000 x43670000 x3c6fffd8}}} {t {{x41300000 x43b64000}} {{x41300000 x43583333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush123 512 catmullrom {cc {f 2080} {px x41300000 {x43010000 x42ea0000 x3ca7fff9} {x43060000 x43030000 x3d04000a} {x43120000 x431e0000 x3e05000d} {x43160000 x432c0000 x3e25000d} {x431e0000 x43490000 x3e81800a} {x43280000 x435f0000 x3e957ffa} {x43310000 x43810000 x3e960008} {x433b0000 x438c8000 x3e9c7ffe} {x434a0000 x439b8000 x3e9d7ffa} {x434e0000 x43a18000 x3e9d7ffa} {x43640000 x43b28000 x3e9e0008} {x436e0000 x43b88000 x3e9afff3} {x43730000 x43c10000 x3e9b8002} {x43840000 x43cb0000 x3e9d7ffa} {x438d0000 x43d60000 x3e967ff6} {x438f0000 x43dc0000 x3e8afff3} {x439e0000 x43ef8000 x3e900000} {x43a50000 x43f80000 x3e89fff8} {x43a88000 x44018000 x3e89fff8} {x43af0000 x44074000 x3e89fff8} {x43ba0000 x440f4000 x3e877ff1} {x43be8000 x44140000 x3e27ffde} {x43d20000 x4420c000 x3df9ffd6} {x43d80000 x4423c000 0}}} {t {{x41300000 x437faac1}} {{x41300000 x43bcb560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush122 512 catmullrom {cc {f 2080} {px x41300000 {xc2380000 x42c80000 x3d24000a} {xc2240000 x42cc0000 x3e03ffef} {xc2080000 x42b40000 x3ea67ff6} {xc1e80000 x42880000 x3ed67ff6} {xc1400000 x42140000 x3edf7ff1} {x40000000 x41d80000 x3ee28006} {x41b00000 x40e00000 x3ee38002} {x41e80000 x40000000 x3ee3ffef} {x42740000 xc1400000 x3ee28006} {x42aa0000 xc1880000 x3edafff3} {x42be0000 0 x3edc0011} {x42b40000 x41a00000 x3edafff3} {x42880000 x42300000 x3ede0008} {x42840000 x42280000 x3ee28006} {x42ae0000 x41f80000 x3ee28006} {x42d20000 x41c00000 x3ee0fffc} {x42e00000 x41a00000 x3e35ffe7}}} {t {{x41300000 x421b4b44}} {{x41300000 x4209a5af}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush121 512 catmullrom {cc {f 2080} {px x41300000 {x41100000 x4471c000 x3d000000} {x40000000 x446cc000 x3d960002} {xc1000000 x44650000 x3e8c7ffe} {xc1f80000 x445b0000 x3ece0008} {xc2140000 x4458c000 x3ef28006} {xc2140000 x445a0000 x3ef60008} {xc2000000 x44630000 x3f00e001} {xc0e00000 x4471c000 x3eff0004} {x40000000 x4475c000 x3efc7ffe} {x40400000 x44760000 x3efc0011} {xc1000000 x44708000 x3efc0011} {xc1b00000 x44650000 x3f006003} {xc1a00000 x44664000 x3f012008} {xc0a00000 x4474c000 x3f006003} {x41100000 x447dc000 x3efc7ffe} {x40000000 x447d4000 x3efd7ffa} {xc1400000 x44784000 x3efe0008} {xc2100000 x446f4000 x3f006003} {xc1d80000 x44730000 x3f00e001} {x41200000 x4480c000 x3f001ffb} {x41980000 x44820000 x3efd7ffa} {xc1200000 x4477c000 x3eff0004} {xc1980000 x44748000 x3f012008} {x40000000 x447d4000 x3f01a006} {x41b00000 x44832000 x3f006003} {x42080000 x4485a000 x3eff7ff1} {x41f80000 x44846000 x3eb0fffc}}} {t {{x41300000 xc0c4bda5}} {{x41300000 x44730000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush120 512 catmullrom {cc {f 2080} {px x41300000 {x42ee0000 x447c8000 x3d04000a} {x42f20000 x447c8000 x3d64000a} {x43010000 x447d0000 x3d600000} {x42c80000 x44790000 x3e88fffc} {x429a0000 x44774000 x3edf0004} {x42540000 x44774000 x3ee28006} {x42300000 x44770000 x3ee1800a} {x42280000 x44770000 0}}} {t {{x41300000 x42ab4000}} {{x41300000 x44797000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush119 512 catmullrom {cc {f 2080} {px x41300000 {x42ee0000 x447ac000 x3d27fff9} {x42c60000 x4477c000 x3e1c0011} {x42700000 x4474c000 x3eab8002} {x424c0000 x4474c000 x3ed0800f} {x42400000 x44730000 x3ebd000d}}} {t {{x41300000 x4296cccd}} {{x41300000 x44763333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush118 512 catmullrom {cc {f 2080} {px x41300000 {x43bb0000 x447b4000 x3cc00000} {x43bd8000 x447b4000 x3df1fff8} {x43b18000 x447a0000 x3ed1800a} {x43a78000 x4478c000 x3edf7ff1} {x43a68000 x447c0000 x3ee0800f} {x43b18000 x447d0000 x3edb8002} {x43ca8000 x44798000 x3edb8002} {x43d70000 x44784000 x3ee00000} {x43b98000 x44774000 x3ee1fff8} {x43af0000 x44770000 x3ee57ffa} {x439b8000 x44740000 x3ee9fff8} {x43978000 x44738000 x3cd80007}}} {t {{x41300000 x43b33560}} {{x41300000 x4478d000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush117 512 catmullrom {cc {f 2080} {px x41300000 {x43d00000 x44738000 x3d04000a} {x43d38000 x44748000 x3d53fffd} {x43c28000 x4481a000 x3db80007}}} {t {{x41300000 x43ccaaa0}} {{x41300000 x44791550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush116 512 catmullrom {cc {f 2080} {px x41300000 {x44c3c000 x44768000 x3ce7fff9} {x44bf4000 x4477c000 x3da20005} {x44be4000 x447b4000 x3eb0fffc} {x44b98000 x44784000 x3ed47ffe} {x44c4a000 x447c8000 x3ef0800f} {x44c12000 x447ac000 x3ef60008} {x44bf8000 x44802000 x3ef77ff1}}} {t {{x41300000 x44c00000}} {{x41300000 x447a770a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush115 512 catmullrom {cc {f 2080} {px x41300000 {x44cde000 x4477c000 x3da9fffe} {x44cb2000 x44784000 x3dc3fffd}}} {t {{x41300000 x44cc8000}} {{x41300000 x44780000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush114 512 catmullrom {cc {f 2080} {px x41300000 {x44fce000 x4475c000 x3d200000} {x44fc4000 x44770000 x3d33fffd}}} {t {{x41300000 x44fc9000}} {{x41300000 x44766000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush113 512 catmullrom {cc {f 2080} {px x41300000 {x44d0e000 x44488000 x3c980007} {x44d0e000 x444b8000 x3d200000} {x44d26000 x44570000 x3e18fffc} {x44d6e000 x445f8000 x3e900000} {x44d9a000 x44628000 x3e900000} {x44e40000 x446d4000 x3e9e0008} {x44e4a000 x446d8000 x3ece0008} {x44e8e000 x446d8000 x3eda8006} {x44ea6000 x446d8000 x3ef47ffe} {x44f02000 x446e0000 x3efa8006} {x44f2a000 x446f4000 x3f006003} {x44f10000 x44718000 x3f04e001} {x44f32000 x44784000 x3f03e005} {x44f2a000 x447b4000 x3f041ffb} {x44f62000 x447e4000 x3f01dffc} {x44f76000 x447c8000 x3d000000}}} {t {{x41300000 x44e67800}} {{x41300000 x4469fc08}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush112 512 catmullrom {cc {f 2080} {px x41300000 {x44e28000 x44000000 x3c980007} {x44e24000 x4409c000 x3d0ffff3}}} {t {{x41300000 x44e26000}} {{x41300000 x4404e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush111 512 catmullrom {cc {f 2080} {px x41300000 {x44c7c000 x43908000 x3d0c0003} {x44c9a000 x43780000 x3e03ffef} {x44c7c000 x432a0000 x3e2a0019} {x44c4a000 x42f80000 x3e80fffc} {x44c42000 x42b00000 x3e83ffef}}} {t {{x41300000 x44c6c666}} {{x41300000 x4337cccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush110 512 catmullrom {cc {f 2080} {px x41300000 {x44a08000 x44504000 x3cf0000d} {x44a1c000 x44468000 x3db20005} {x44a22000 x443ec000 x3e938002} {x44a2c000 x44358000 x3eaf0004} {x44a34000 x442f8000 x3eb80000} {x44a36000 x44294000 x3eb9fff8} {x44a36000 x44224000 x3ebb8002} {x44a36000 x441c0000 x3ec00000} {x44a30000 x44154000 x3ecafff3} {x44a2c000 x440ec000 x3ed28006} {x44a26000 x44088000 x3ed70004} {x44a26000 x44030000 x3ed9800a} {x44a28000 x43fb0000 x3edd7ffa} {x44a2c000 x43f18000 x3edf0004} {x44a34000 x43e80000 x3edf7ff1} {x44a36000 x43df8000 x3ee0800f} {x44a3a000 x43d60000 x3ee0fffc} {x44a40000 x43cd8000 x3ee0fffc} {x44a40000 x43c48000 x3ee1800a} {x44a44000 x43bc0000 x3ee28006} {x44a48000 x43b40000 x3ee3ffef} {x44a4c000 x43ac8000 x3ee47ffe} {x44a4e000 x43a68000 x3ee57ffa} {x44a52000 x43a08000 x3ee60008} {x44a52000 x439a8000 x3ee60008} {x44a52000 x43958000 x3ee67ff6} {x44a4e000 x43908000 x3ee57ffa} {x44a48000 x438a8000 x3ee57ffa} {x44a40000 x43848000 x3ee57ffa} {x44a3a000 x437c0000 x3ee60008} {x44a34000 x43700000 x3ee70004} {x44a28000 x43640000 x3ee70004} {x44a22000 x43580000 x3ee80000} {x44a14000 x434c0000 x3ee8800f} {x44a08000 x43400000 x3ee8800f} {x449fa000 x43360000 x3ee57ffa} {x449e4000 x432a0000 x3ee57ffa} {x449d4000 x431e0000 x3ee57ffa} {x449c0000 x43100000 x3ee60008} {x449a8000 x43030000 x3ee67ff6} {x4498c000 x42ea0000 x3ee70004} {x44972000 x42d20000 x3ee9800a} {x44956000 x42b80000 x3eeb8002} {x44942000 x42a40000 x3eeb8002} {x44934000 x42920000 x3eeb8002} {x44926000 x42820000 x3ee8800f} {x4491c000 x42680000 x3ede0008} {x44916000 x424c0000 x3eca8006} {x4490c000 x42300000 x3ea70004} {x44902000 x42140000 x3e2c0011} {x448f4000 x41f80000 x3d44000a} {x448e2000 x41c00000 0}}} {t {{x41300000 x449edccd}} {{x41300000 x43a56c4a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x44214000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush109 512 catmullrom {cc {f 2080} {px x41300000 {x44014000 x447a0000 x3d000000} {x43fc8000 x44770000 x3de2003b} {x43e70000 x44690000 x3e78fffc} {x43d70000 x445dc000 x3e92fff3} {x43b70000 x44474000 x3e9f0004} {x43a88000 x443cc000 x3eae0008} {x43908000 x44298000 x3eb1fff8} {x43868000 x44224000 x3eb9fff8} {x436e0000 x44158000 x3eb9fff8} {x43620000 x44114000 x3eb70004} {x433d0000 x44064000 x3eb60008} {x431c0000 x43f78000 x3eaf7ff1} {x42c20000 x43cf8000 x3ea80000} {x428c0000 x43b88000 x3ea8fffc} {x41200000 x43710000 x3e9a8006} {x40a00000 x43490000 x3d27fff9}}} {t {{x41300000 x43823000}} {{x41300000 x441e2c08}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x43b70000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush108 512 catmullrom {cc {f 2080} {px x41300000 {x438f8000 x4477c000 x3d89fffe} {x43820000 x44718000 x3e580022} {x43170000 x44518000 x3eae7ff6} {x42b40000 x443c4000 x3ee0fffc} {x41400000 x441a4000 x3ef77ff1} {xc1980000 x440b8000 x3f086003} {xc2380000 x43ed0000 x3f0c6003} {xc24c0000 x43d38000 x3f0e5ffa} {xc2680000 x43c28000 x3f089ff9}}} {t {{x41300000 x428b1c78}} {{x41300000 x4426eab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x43b70000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Smear69 512 catmullrom {cc {f 2080} {px x41300000 {x42f20000 x440c4000 x3e4a0019} {x42f80000 x440d0000 x3ea77ff1} {x43050000 x44078000 x3ef2fff3} {x43080000 x44044000 x3f076007} {x430b0000 x44004000 x3f0adff8} {x430a0000 x44004000 x3f0d2008} {x43000000 x4400c000 x3ef28006}}} {t {{x41300000 x43034937}} {{x41300000 x440576d9}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear68 512 catmullrom {cc {f 2080} {px x41300000 {x42a60000 x44094000 x3d400000} {x42a40000 x44094000 x3e1cffeb} {x428e0000 x440a8000 x3e700000} {x42740000 x44138000 x3f036007} {x42820000 x441e0000 x3f246003} {x42be0000 x4430c000 x3f2b1fff} {x42c60000 x4433c000 x3f322004} {x42c20000 x44380000 x3f34e001} {x42c20000 x44390000 x3f365ffa} {x42c60000 x44394000 x3f36a002} {x42c20000 x44390000 x3ec77ff1} {x42be0000 x44388000 x3dc7fff9}}} {t {{x41300000 x42ad8000}} {{x41300000 x44269000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear67 512 catmullrom {cc {f 2080} {px x41300000 {x44b44000 x43de8000 x3e200000} {x44b3c000 x43e30000 x3eb57ffa} {x44b38000 x43e90000 x3ee1800a}}} {t {{x41300000 x44b3d571}} {{x41300000 x43e38000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear66 512 catmullrom {cc {f 2080} {px x41300000 {x44b80000 x43a30000 x3cb7ffec} {x44b80000 x43a50000 x3dfdffc5} {x44b7a000 x43a90000 x3ec9fff8} {x44b44000 x43bb0000 x3f049ff9} {x44b3c000 x43bc8000 x3f189ff9} {x44b32000 x43be8000 x3f18e001} {x44b2e000 x43be8000 x3f112008} {x44b2c000 x43be8000 x3ee1800a}}} {t {{x41300000 x44b50c29}} {{x41300000 x43b48000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear65 512 catmullrom {cc {f 2080} {px x41300000 {x44b5c000 x43600000 x3cd80007} {x44b66000 x43600000 x3d3bfff6} {x44b6c000 x435d0000 x3eb57ffa} {x44b72000 x43620000 x3ee0fffc} {x44b72000 x43690000 x3eec7ffe} {x44b62000 x43700000 x3f05a006} {x44b58000 x43760000 x3f0edff8} {x44b44000 x43830000 x3f0fe005} {x44b3c000 x43858000 x3f136007} {x44b2e000 x438d0000 x3f149ff9} {x44b2c000 x438f8000 x3f162004} {x44b28000 x43920000 x3f16a002} {x44b2c000 x43918000 x3ef9fff8}}} {t {{x41300000 x44b4e4cd}} {{x41300000 x437d7646}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear64 512 catmullrom {cc {f 2080} {px x41300000 {x44baa000 x42240000 x3e4afff3} {x44ba2000 x42400000 x3ea67ff6} {x44bb0000 x42580000 x3ed5000d} {x44bb6000 x42580000 x3ed0800f}}} {t {{x41300000 x44bac800}} {{x41300000 x42450000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear63 512 catmullrom {cc {f 2080} {px x41300000 {x44a2c000 x42d20000 x3d580007} {x44a30000 x42d20000 x3de3ffef} {x44a28000 x42bc0000 x3ec70004} {x44a04000 x42540000 x3efb8002} {x449f6000 x42240000 x3f0a2004} {x449e4000 x42000000 x3f0c6003} {x449e4000 x41f80000 x3f0edff8} {x449d4000 x41a00000 x3f0f6007} {x449ca000 x41400000 x3f101ffb} {x449fc000 x41000000 x3f0f6007} {x44a22000 x40a00000 x3f0ea002} {x44a12000 x40000000 x3f0f9ffd} {x44a04000 0 x3f0f9ffd} {x449ec000 xc0000000 x3f0fe005} {x449f2000 xc0000000 x3f089ff9} {x44a12000 xc0000000 x3ef60008} {x44a34000 xc0000000 x3ec77ff1}}} {t {{x41300000 x44a03852}} {{x41300000 x41eb4b5e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear62 512 catmullrom {cc {f 2080} {px x41300000 {x44868000 x42e80000 x3e3a0019} {x44864000 x42f80000 x3e91800a} {x44876000 x43200000 x3ed0800f} {x4487c000 x43280000 x3ee1800a} {x44884000 x432d0000 x3d960002}}} {t {{x41300000 x4487399a}} {{x41300000 x43143333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear61 512 catmullrom {cc {f 2080} {px x41300000 {x44710000 x42a00000 x3df00043} {x44710000 x42a60000 x3e88800f} {x446fc000 x42c80000 x3eaafff3} {x446fc000 x43160000 x3ee67ff6} {x446f4000 x43310000 x3f071fff} {x446ec000 x433d0000 x3f0adff8} {x446f4000 x43440000 x3f0e5ffa} {x446fc000 x434e0000 x3f0f9ffd} {x446fc000 x434f0000 x3f10e001}}} {t {{x41300000 x446fce35}} {{x41300000 x431a38d5}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Blur6 512 catmullrom {cc {f 2080} {px x41300000 {x44802000 x42740000 x3d920005} {x447dc000 x429c0000 x3e530015} {x44832000 x42440000 x3ef80000} {x4488e000 xc1f80000 x3f179ffd} {x4488a000 x41980000 x3f231fff} {x44872000 x426c0000 x3f236007} {x448fa000 x42540000 x3f239ffd} {x448ca000 x41c00000 x3f29a006} {x44798000 x42f20000 x3f2c1ffb} {x446d4000 x433d0000 x3f2edff8} {x44548000 x43640000 x3f2d5ffe} {x44470000 x435f0000 x3f352008} {x443ec000 x436c0000 x3e400000}}} {t {{x41300000 x4479c4ee}} {{x41300000 x42c9624e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43360000 bt x40000000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 x41700000 tt x41a00000 nv x40000000 view2 x40000000}} {cubiccurve Blur5 512 catmullrom {cc {f 2080} {px x41300000 {x4460c000 x443cc000 x3ed28006} {x445f8000 x443b0000 x3eee7ff6} {x44594000 x442e4000 x3f092008} {x445a8000 x442e4000 x3f2c1ffb} {x44608000 x44394000 x3f3adff8} {x445ec000 x44418000 x3f441ffb} {x44578000 x44314000 x3f636007} {x445f4000 x44344000 x3f64e001} {x4460c000 x4444c000 x3f652008} {x445bc000 x443bc000 x3f69a006} {x445e4000 x442dc000 x3f72a002} {x44688000 x44444000 x3f731fff} {x446c0000 x444b4000 x3f701ffb} {x4461c000 x442e4000 x3f731fff} {x4464c000 x4428c000 x3f722004} {x4467c000 x443d8000 x3f71a006} {x446c4000 x444ac000 x3f6fe005} {x44680000 x44390000 x3f725ffa} {x44608000 x442dc000 x3f739ffd} {x445c8000 x443d8000 x3f73e005} {x44608000 x44490000 x3f715ffe} {x44608000 x44534000 x3f706003} {x44600000 x44550000 x3f70e001} {x44638000 x44578000 x3f4c9ff9}}} {t {{x41300000 x44613800}} {{x41300000 x443d4550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43360000 bt x40000000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 x41700000 tt x41a00000 nv x40000000 view2 x40000000}} {cubiccurve Blur4 512 catmullrom {cc {f 2080} {px x41300000 {x44674000 x44454000 x3e770004} {x44608000 x443fc000 x3ea38002} {x44608000 x44410000 x3f071fff} {x44630000 x44418000 x3f16a002} {x4452c000 x4430c000 x3f289ff9} {x44614000 x443d8000 x3f30e001} {x44578000 x44364000 x3f34e001} {x4452c000 x44300000 x3f425ffa} {x4464c000 x443e8000 x3f431fff} {x44600000 x443c4000 x3f43e005} {x44570000 x44300000 x3f45a006} {x4469c000 x443e0000 x3f492008} {x44520000 x44330000 x3f4a5ffa} {x44584000 x44330000 x3f4da006} {x4467c000 x443d0000 x3f581ffb} {x4452c000 x44328000 x3f60e001} {x44608000 x44374000 x3f61dffc} {x44694000 x443b0000 x3f652008} {x444e0000 x4428c000 x3f70e001} {x445a0000 x442f8000 x3f72dff8} {x44598000 x442f0000 x3f731fff} {x444fc000 x44294000 x3f752008} {x44690000 x44394000 x3f749ff9} {x445ec000 x44334000 x3f786003} {x444e8000 x44278000 1} {x445b0000 x442e4000 1} {x4461c000 x442f0000 1} {x445dc000 x44204000 1} {x4467c000 x4425c000 x3d13fffd}}} {t {{x41300000 x445cf093}} {{x41300000 x44348f6d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43360000 bt x40000000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 x41700000 tt x41a00000 nv x40000000 view2 x40000000}} {cubiccurve Smear60 512 catmullrom {cc {f 2080} {px x41300000 {x44594000 x44390000 x3d53fffd} {x445a8000 x443b0000 x3e51fff8} {x44608000 x44400000 x3ee1800a} {x44620000 x44410000 x3f041ffb} {x44658000 x44424000 x3f089ff9} {x44660000 x44424000 x3f09a006} {x4466c000 x44424000 x3f0a2004} {x44674000 x44424000 x3f0a2004} {x44688000 x44418000 x3f0a2004} {x44688000 x44410000 x3f0b6007} {x44674000 x44408000 x3f0b6007}}} {t {{x41300000 x4463a2e1}} {{x41300000 x4440174c}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear59 512 catmullrom {cc {f 2080} {px x41300000 {x4436c000 x44030000 x3d400000} {x44364000 x44048000 x3e0cffeb} {x44378000 x44140000 x3ed47ffe} {x443e0000 x441fc000 x3f1aa002} {x444e8000 x442d0000 x3f2b1fff} {x4452c000 x4431c000 x3f38e001} {x44578000 x44388000 x3f3c6003} {x445c4000 x44400000 x3f406003}}} {t {{x41300000 x4446f000}} {{x41300000 x44225000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear58 512 catmullrom {cc {f 2080} {px x41300000 {x440d0000 x44280000 x3dfc0011} {x440cc000 x4428c000 x3e977ff1} {x440a8000 x442dc000 x3ea67ff6} {x440d0000 x443e0000 x3edf7ff1} {x440d8000 x44424000 x3f05a006} {x440ec000 x444b4000 x3f095ffe} {x4412c000 x44570000 x3f0c6003} {x44144000 x445d0000 x3f139ffd} {x4414c000 x445e4000 x3f131fff}}} {t {{x41300000 x440f4000}} {{x41300000 x44432396}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear57 512 catmullrom {cc {f 2080} {px x41300000 {x441f0000 x43fc8000 x3d8dfffb} {x441b8000 x44028000 x3eb8fffc} {x4414c000 x44168000 x3f08e001} {x44114000 x44248000 x3f1aa002} {x440d0000 x44314000 x3f241ffb} {x440e0000 x44388000 x3f26a002} {x44114000 x4444c000 x3f276007} {x440f4000 x444d4000 x3f295ffe} {x440f4000 x444f8000 x3f2b1fff} {x440fc000 x444f0000 x3f2aa002} {x440f4000 x44498000 x3f2b6007} {x4412c000 x44320000 x3f2d5ffe} {x441ac000 x441c8000 x3f30e001} {x441e8000 x44168000 x3f322004} {x4422c000 x440fc000 x3f325ffa} {x44280000 x4403c000 x3f32dff8} {x44294000 x44014000 x3f346003} {x442f8000 x43ec8000 x3f349ff9} {x442f0000 x43ea8000 x3f371fff} {x442c0000 x43ef8000 x3f37e005} {x44234000 x4406c000 x3f381ffb} {x44198000 x44218000 x3f37e005} {x44170000 x442a8000 x3f36a002} {x44160000 x44378000 x3f365ffa} {x44154000 x4444c000 x3f34e001} {x44140000 x44498000 x3f336007} {x44144000 x44520000 x3f32dff8} {x44130000 x44540000 x3f32a002} {x44108000 x445b4000 x3f32a002} {x44108000 x445d0000 x3f2ea002} {x44100000 x445ec000 x3f189ff9}}} {t {{x41300000 x4418c635}} {{x41300000 x442bef7d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear56 512 catmullrom {cc {f 2080} {px x41300000 {x44174000 x43f40000 x3d400000} {x4417c000 x43f30000 x3e0c0011} {x44188000 x43f28000 x3e99fff8} {x441c0000 x43e10000 x3eb8800f} {x441cc000 x43c10000 x3f0edff8} {x441c0000 x43ba0000 x3f1edff8} {x44188000 x43b00000 x3f212008} {x440f4000 x439b8000 x3f239ffd} {x440cc000 x43920000 x3f29dffc} {x440c4000 x438f8000 x3f2b6007} {x440c4000 x43898000 x3f2be005} {x44064000 x436c0000 x3f2d2008} {x43fb8000 x434a0000 x3f2ea002} {x43f28000 x433e0000 x3f2f1fff} {x43ee0000 x43390000 x3f2f9ffd} {x43eb8000 x43280000 x3f2f6007} {x43f08000 x431c0000 x3f2e5ffa} {x43f90000 x43030000 x3f2ea002} {x44000000 x42c80000 x3f2edff8} {x43fe0000 x42d00000 x3f11a006}}} {t {{x41300000 x4409f333}} {{x41300000 x438d6666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear55 512 catmullrom {cc {f 2080} {px x41300000 {x441c0000 x43e48000 x3d4ffff3} {x441ac000 x43e90000 x3e6afff3} {x441dc000 x43e40000 x3eef7ff1} {x44254000 x43d80000 x3f25dffc} {x44350000 x43bf8000 x3f32a002} {x443d8000 x43b70000 x3f41dffc} {x444ac000 x43ac8000 x3f439ffd} {x445a8000 x439b8000 x3f462004} {x44600000 x43918000 x3f47e005} {x44600000 x43908000 x3f479ffd} {x44608000 x43908000 x3f45a006} {x44600000 x43918000 x3f455ffe} {x445bc000 x43968000 x3f455ffe} {x4453c000 x43a40000 x3f431fff} {x444dc000 x43b10000 x3f3f6007} {x443cc000 x43cf8000 x3f3ea002} {x44388000 x43d70000 x3f3ce001} {x44344000 x43de8000 x3f3be005} {x442bc000 x43f18000 x3f395ffe} {x4425c000 x43fd8000 x3f28e001}}} {t {{x41300000 x44408333}} {{x41300000 x43bef99a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear54 512 catmullrom {cc {f 2080} {px x41300000 {x44a1e000 x41000000 x3d7bfff6} {x44a1c000 x41880000 x3e38fffc} {x44a0e000 x42400000 x3ebe7ff6} {x44a0e000 x428c0000 x3eca8006} {x44a08000 x42c20000 x3ee0fffc} {x44a00000 x42e00000 x3ef5000d} {x449fc000 x430f0000 x3ef60008} {x449fa000 x43190000 x3efa8006} {x44a08000 x433d0000 x3efb8002} {x44a08000 x43450000 x3efd7ffa} {x44a08000 x436c0000 x3efe0008} {x44a08000 x43750000 x3eff0004} {x44a18000 x43868000 x3eff7ff1} {x44a26000 x438b8000 x3eff0004} {x44a2c000 x43950000 x3eff0004} {x44a2c000 x439a0000 x3f001ffb} {x44a26000 x43aa0000 x3f006003} {x44a18000 x43ae0000 x3f02dff8} {x449f6000 x43c10000 x3f041ffb} {x449f0000 x43c50000 x3f06dff8} {x44a00000 x43d48000 x3f08e001} {x44a12000 x43db8000 x3f0adff8} {x44a1e000 x43e90000 x3f0b9ffd} {x44a22000 x43ef0000 x3f0e5ffa} {x44a0e000 x4400c000 x3f0ea002} {x44a04000 x44074000 x3f152008} {x44a04000 x44128000 x3f162004} {x449fc000 x4414c000 x3f171fff} {x44a00000 x441f0000 x3f179ffd} {x449fc000 x44220000 x3f179ffd} {x44a12000 x442ac000 x3f17e005} {x44a26000 x442dc000 x3f17e005} {x44a40000 x44334000 x3f179ffd} {x44a3a000 x44344000 x3f18e001} {x44a2c000 x4439c000 x3f18e001} {x44a22000 x443d8000 x3f192008} {x44a14000 x4444c000 x3f19dffc} {x44a18000 x44488000 x3f1a2004} {x449f2000 x444f8000 x3f1a5ffa} {x449e8000 x44520000 x3f1aa002} {x449ec000 x445bc000 x3f1a5ffa} {x449e8000 x445d8000 x3f1a2004} {x449f6000 x4463c000 x3f1a2004} {x449ec000 x44658000 x3f19a006} {x449b2000 x4469c000 x3f192008} {x449ae000 x446cc000 x3f186003} {x449b6000 x4474c000 x3f181ffb} {x449c0000 x4477c000 x3f171fff} {x449ce000 x447f0000 x3f16dff8}}} {t {{x41300000 x44a04dc3}} {{x41300000 x4402248b}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear53 512 catmullrom {cc {f 2080} {px x41300000 {x44f10000 x44700000 x3d1bfff6} {x44f14000 x446fc000 x3d30000d} {x44f10000 x446c4000 x3e45000d} {x44ef8000 x443c4000 x3ee1800a} {x44ef0000 x442f8000 x3f236007} {x44ef0000 x442e4000 x3f239ffd} {x44ef0000 x442c8000 x3f239ffd} {x44ef4000 x442b4000 x3f236007} {x44ef8000 x441f0000 x3f236007} {x44efc000 x4417c000 x3f23e005} {x44efc000 x44158000 x3f246003} {x44ef8000 x440cc000 x3f246003} {x44efc000 x440a0000 x3f249ff9} {x44f02000 x44030000 x3f24e001} {x44f06000 x43f68000 x3f252008} {x44f08000 x43e58000 x3f252008} {x44f0c000 x43df8000 x3f24e001} {x44f14000 x43cf8000 x3f24e001} {x44f1a000 x43c98000 x3f23e005} {x44f1e000 x43b70000 x3f231fff} {x44f20000 x43b38000 x3f22a002} {x44f20000 x43b00000 x3f225ffa} {x44f24000 x439d0000 x3f222004} {x44f24000 x43958000 x3f1ea002} {x44f20000 x43880000 x3f1e5ffa} {x44f20000 x43820000 x3f1e5ffa} {x44f20000 x43730000 x3f1e5ffa} {x44f24000 x434a0000 x3f1da006} {x44f1e000 x432c0000 x3f1ce001} {x44f1e000 x431b0000 x3f1b9ffd} {x44f16000 x42f80000 x3f1b9ffd} {x44f16000 x42da0000 x3f1b6007} {x44f1a000 x42580000 x3f1b1fff} {x44f24000 x41d00000 x3f19dffc} {x44f34000 xc0a00000 x3f192008} {x44f42000 xc1700000 x3f16dff8} {x44f6c000 xc2380000 x3f13e005} {x44f7a000 xc2700000 x3f0ce001} {x44f94000 xc2a60000 x3f009ff9}}} {t {{x41300000 x44f19614}} {{x41300000 x43c2b148}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear52 512 catmullrom {cc {f 2080} {px x41300000 {x44ef4000 x44760000 x3d580007} {x44ef8000 x44738000 x3d4c0003} {x44efc000 x4472c000 0}}} {t {{x41300000 x44ef8000}} {{x41300000 x44741550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear51 512 catmullrom {cc {f 2080} {px x41300000 {x44e80000 x44694000 x3d800000} {x44e74000 x446c0000 x3e2a0019} {x44e4a000 x44724000 x3eb9800a} {x44e40000 x44740000 x3eeb8002} {x44e36000 x44754000 x3edc7ffe}}} {t {{x41300000 x44e57333}} {{x41300000 x44702666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear50 512 catmullrom {cc {f 2080} {px x41300000 {x44d08000 x441e0000 x3d400000} {x44d08000 x441f0000 x3df1fff8} {x44d00000 x44254000 x3e870004} {x44cfe000 x44314000 x3ee70004} {x44d04000 x44388000 x3f00e001} {x44d04000 x443e8000 x3f039ffd} {x44d04000 x443f4000 x3f039ffd} {x44d00000 x443fc000 x3eef7ff1}}} {t {{x41300000 x44d033d7}} {{x41300000 x44313000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear49 512 catmullrom {cc {f 2080} {px x41300000 {x44bb4000 x44254000 x3d27fff9} {x44bb4000 x44264000 x3ebd000d} {x44ba0000 x442e4000 x3f101ffb} {x44baa000 x44348000 x3f16dff8} {x44bbe000 x443d8000 x3f15dffc} {x44bba000 x4441c000 x3ef47ffe} {x44bb6000 x4442c000 0}}} {t {{x41300000 x44bb247b}} {{x41300000 x44349b75}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear48 512 catmullrom {cc {f 2080} {px x41300000 {x44ba6000 x43d30000 x3d9c0003} {x44bb0000 x43d90000 x3e55000d} {x44bb0000 x43e90000 x3ec0800f} {x44bb0000 x43fe0000 x3ef1800a} {x44bb0000 x44014000 x3ee57ffa}}} {t {{x41300000 x44bae000}} {{x41300000 x43eab333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear47 512 catmullrom {cc {f 2080} {px x41300000 {x44af4000 x43e20000 x3d800000} {x44afc000 x43df8000 x3d9dfffb} {x44b02000 x43df8000 x3e21fff8} {x44b02000 x43e08000 x3e91fff8} {x44afc000 x43ea8000 x3ed47ffe} {x44af4000 x43fb8000 x3f06dff8} {x44aee000 x440cc000 x3f0f9ffd} {x44aea000 x44108000 x3f176007} {x44ae8000 x4417c000 x3f192008} {x44ae8000 x441a4000 x3f19dffc} {x44aea000 x441d4000 x3f19dffc} {x44aee000 x441c8000 x3edc7ffe}}} {t {{x41300000 x44af3000}} {{x41300000 x44051000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear46 512 catmullrom {cc {f 2080} {px x41300000 {x44708000 x4420c000 x3d5bfff6} {x446fc000 x44234000 x3e6cffeb} {x446d4000 x442b4000 x3ec60008} {x446b0000 x44358000 x3ee38002}}} {t {{x41300000 x446e2000}} {{x41300000 x44293000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear45 512 catmullrom {cc {f 2080} {px x41300000 {x44578000 x44468000 x3d820005} {x44580000 x44468000 x3dc7fff9} {x445a8000 x44444000 x3e58fffc} {x445f8000 x44400000 x3ef38002} {x44600000 x443fc000 x3ebc7ffe}}} {t {{x41300000 x445b8000}} {{x41300000 x44436666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear44 512 catmullrom {cc {f 2080} {px x41300000 {x4455c000 x442f8000 x3c980007} {x44570000 x442dc000 x3db20005} {x44578000 x442d8000 x3eb0800f} {x44594000 x4428c000 x3ec38002} {x445a0000 x44248000 x3edafff3}}} {t {{x41300000 x4457e666}} {{x41300000 x442b3333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear43 512 catmullrom {cc {f 2080} {px x41300000 {x44598000 x44360000 x3d70000d} {x44644000 x442a8000 x3da7fff9} {x4464c000 x442a0000 x3ec60008}}} {t {{x41300000 x4460d550}} {{x41300000 x442e2ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear42 512 catmullrom {cc {f 2080} {px x41300000 {x444c8000 x443c4000 x3dc60002} {x444e0000 x443a8000 x3e73ffef} {x4458c000 x442f8000 x3ee47ffe} {x445a8000 x442d8000 x3f0c6003} {x445b0000 x442dc000 x3ebd7ffa}}} {t {{x41300000 x4454f333}} {{x41300000 x44338000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear41 512 catmullrom {cc {f 2080} {px x41300000 {x44510000 x44300000 x3d64000a} {x44674000 x44264000 x3d9c0003}}} {t {{x41300000 x445c2000}} {{x41300000 x442b2000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear40 512 catmullrom {cc {f 2080} {px x41300000 {x44550000 x44250000 x3d2c0003} {x4455c000 x44254000 x3d44000a} {x44554000 x44240000 x3d980007}}} {t {{x41300000 x44555550}} {{x41300000 x4424c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear39 512 catmullrom {cc {f 2080} {px x41300000 {x445d0000 x443d0000 x3d180007} {x445d0000 x443b0000 x3d70000d} {x445ec000 x442ec000 x3d8dfffb} {x445dc000 x442c8000 x3e3effe3} {x445d0000 x44320000 x3eff0004} {x44600000 x444cc000 x3f09a006} {x44628000 x44554000 x3f0f1fff} {x4461c000 x445bc000 x3ef9fff8}}} {t {{x41300000 x445ef800}} {{x41300000 x44406000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear38 512 catmullrom {cc {f 2080} {px x41300000 {x445d8000 x442d8000 x3c60001b} {x445dc000 x44300000 x3d4c0003} {x445f4000 x4430c000 x3e43ffef} {x445f8000 x442dc000 x3ed5000d} {x44644000 x44220000 x3efd000d} {x44650000 x441e0000 x3f052008} {x44628000 x441ac000 x3f05a006} {x4461c000 x441b8000 x3f086003} {x445f4000 x44268000 x3f089ff9} {x445ec000 x442e4000 x3f095ffe} {x44620000 x44460000 x3f092008} {x4461c000 x444a4000 x3f089ff9} {x44600000 x444e0000 x3f03e005}}} {t {{x41300000 x4460b625}} {{x41300000 x442f2c4a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear37 512 catmullrom {cc {f 2080} {px x41300000 {x4467c000 x44268000 x3d33fffd} {x4467c000 x442a0000 x3db80007} {x44628000 x442d0000 x3ebd000d} {x44600000 x442bc000 x3ef47ffe} {x44628000 x442f8000 x3ef70004} {x44650000 x4430c000 x3f086003} {x446a4000 x44298000 x3f0fe005} {x44688000 x44268000 x3f162004} {x445d0000 x442c8000 x3f18e001} {x445b4000 x44314000 x3f189ff9} {x445d0000 x443b0000 x3f186003} {x445f4000 x443a8000 x3f1da006} {x4463c000 x4433c000 x3f215ffe} {x44628000 x44308000 x3f271fff} {x445a8000 x4431c000 x3f28e001} {x445a0000 x44390000 x3f27e005} {x44614000 x44418000 x3f25dffc} {x44644000 x443f4000 x3f276007} {x44660000 x44328000 x3f2b1fff} {x44608000 x442dc000 x3f2f9ffd} {x44580000 x442f8000 x3f306003} {x44578000 x44314000 x3f2edff8} {x445b0000 x4439c000 x3f2e2004} {x44658000 x443c4000 x3f2be005} {x4472c000 x442d0000 x3f306003} {x446f4000 x44298000 x3f341ffb} {x44638000 x442ec000 x3f341ffb} {x44680000 x44374000 x3f322004} {x446c4000 x4436c000 x3f309ff9} {x4477c000 x442e4000 x3f31dffc} {x44774000 x442c8000 x3f341ffb} {x44738000 x442f8000 x3f341ffb} {x4472c000 x44320000 x3eb77ff1}}} {t {{x41300000 x44650ba6}} {{x41300000 x44318ba6}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear36 512 catmullrom {cc {f 2080} {px x41300000 {x44802000 x445e4000 x3e8c0011} {x44814000 x44774000 x3e9d7ffa}}} {t {{x41300000 x4480b000}} {{x41300000 x446ac000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear35 512 catmullrom {cc {f 2080} {px x41300000 {x4481e000 x445a0000 x3e670004} {x44836000 x4461c000 x3ea80000} {x44840000 x4463c000 x3efd7ffa} {x44864000 x446b8000 x3efd7ffa}}} {t {{x41300000 x4483e000}} {{x41300000 x4462c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear34 512 catmullrom {cc {f 2080} {px x41300000 {x44810000 x445e4000 x3e938002} {x44842000 x4466c000 x3eb28006} {x4484a000 x44678000 x3ef1800a}}} {t {{x41300000 x44834000}} {{x41300000 x44642ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear33 512 catmullrom {cc {f 2080} {px x41300000 {x447d4000 x44548000 x3e01fff8} {x447dc000 x4455c000 x3e500000} {x4481e000 x445d8000 x3ec5000d} {x44850000 x44644000 x3f149ff9} {x44846000 x44644000 x3f0c6003} {x44840000 x44644000 x3eb2fff3}}} {t {{x41300000 x44822000}} {{x41300000 x445e1550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear32 512 catmullrom {cc {f 2080} {px x41300000 {x4481a000 x445a0000 x3e73ffef} {x4481a000 x445b0000 x3ea00000} {x44816000 x445e4000 x3ebc7ffe} {x44816000 x44638000 x3ef60008} {x447f0000 x44600000 x3f006003} {x44802000 x4464c000 x3efe0008} {x44806000 x44650000 x3f136007} {x44808000 x44614000 x3f155ffe} {x44810000 x44600000 x3f152008} {x44816000 x445f8000 x3f155ffe} {x44810000 x44600000 x3f195ffe} {x447fc000 x44608000 x3f19a006} {x44802000 x44628000 x3f19dffc} {x44820000 x44658000 x3f192008} {x44850000 x44678000 x3f1b1fff} {x44850000 x44650000 x3f225ffa} {x44836000 x44608000 x3f252008} {x44828000 x4463c000 x3f29dffc} {x44842000 x446fc000 x3f2a5ffa} {x4485e000 x4475c000 x3f295ffe} {x4486c000 x447ac000 x3f276007} {x44868000 x447ac000 0}}} {t {{x41300000 x4482519a}} {{x41300000 x4465574c}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear31 512 catmullrom {cc {f 2080} {px x41300000 {x447e4000 x4455c000 x3db9fffe} {x447e8000 x44594000 x3e51fff8} {x447f0000 x445d0000 x3edf0004} {x447d4000 x445b4000 x3efa8006} {x447dc000 x445b4000 x3efafff3} {x447fc000 x44608000 x3efc0011} {x447f0000 x44614000 x3f0b9ffd} {x447a4000 x4460c000 x3f0ce001} {x447b4000 x44614000 x3f0d2008} {x447f8000 x44630000 x3f0d2008} {x44814000 x4461c000 x3f0e2004} {x44806000 x445d0000 x3f109ff9} {x447b4000 x445d0000 x3f122004} {x44784000 x445f8000 x3f11a006} {x44790000 x44614000 x3f10e001} {x44790000 x44638000 x3f109ff9} {x44798000 x44660000 x3f115ffe}}} {t {{x41300000 x447cfc29}} {{x41300000 x445f03c7}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear30 512 catmullrom {cc {f 2080} {px x41300000 {x4484a000 x445bc000 x3db9fffe} {x44842000 x445bc000 x3e55000d} {x4483c000 x445bc000 x3e8e7ff6} {x44824000 x445b0000 x3eae7ff6} {x447e8000 x445a0000 x3ef8800f} {x447ac000 x44598000 x3f07e005} {x447b8000 x445b4000 x3f0b1fff} {x447d4000 x445c4000 x3f0d2008} {x447c8000 x44570000 x3f12dff8} {x447c0000 x4455c000 x3f14e001} {x447c0000 x44570000 x3f162004} {x447c0000 x4458c000 x3f176007} {x447d0000 x445d0000 x3f179ffd} {x447d4000 x445d0000 x3f179ffd} {x447d0000 x44598000 x3f189ff9} {x447c0000 x44598000 x3f1adff8} {x447e4000 x44644000 x3f1aa002} {x44820000 x4463c000 x3f186003} {x44840000 x445e4000 x3f19dffc} {x447fc000 x445c8000 x3f1c6003} {x447e8000 x445dc000 x3f1b6007} {x447dc000 x44614000 x3f1aa002} {x447dc000 x4461c000 x3f0ea002} {x447dc000 x44614000 0}}} {t {{x41300000 x447f8ae1}} {{x41300000 x445c5000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear29 512 catmullrom {cc {f 2080} {px x41300000 {x44608000 x44374000 x3e1c0011} {x4460c000 x44328000 x3e63ffef} {x445f4000 x442ac000 x3eff0004} {x445ec000 x442a0000 x3f03e005} {x445e4000 x44298000 x3f05a006} {x445dc000 x44294000 x3f086003} {x445dc000 x44298000 x3f0a2004} {x445d8000 x442d8000 x3f0a5ffa} {x445dc000 x442f0000 x3f0a2004} {x445f8000 x442bc000 x3f0a2004} {x445f8000 x44294000 x3f0b6007} {x445ec000 x44294000 x3f0c9ff9} {x445dc000 x442a0000 x3f071fff} {x445dc000 x442a8000 x3d0ffff3}}} {t {{x41300000 x445eadb2}} {{x41300000 x442c248b}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear28 512 catmullrom {cc {f 2080} {px x41300000 {x44650000 x44284000 x3d24000a} {x44638000 x44298000 x3d9c0003} {x4460c000 x442d0000 x3e80800f} {x44600000 x442f0000 x3f02a002} {x4460c000 x44380000 x3f0f6007} {x44600000 x44390000 x3f1ce001} {x445d0000 x44378000 x3f1d5ffe} {x445c8000 x44390000 x3f1da006} {x445bc000 x443bc000 x3f1da006} {x445b0000 x443bc000 x3f1d5ffe} {x445a8000 x443b8000 x3f081ffb} {x445a8000 x443b0000 0}}} {t {{x41300000 x445e9ab0}} {{x41300000 x44351ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear27 512 catmullrom {cc {f 2080} {px x41300000 {x442e4000 x44080000 x3e63ffef} {x442d8000 x44088000 x3e977ff1} {x4441c000 x44270000 x3efc7ffe} {x44474000 x442d0000 x3f3b9ffd} {x44658000 x44444000 x3f3d2008} {x4486c000 x44594000 x3f406003} {x44868000 x445a0000 x3e880000}}} {t {{x41300000 x44578927}} {{x41300000 x4431b6d9}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear26 512 catmullrom {cc {f 2080} {px x41300000 {x44280000 x43f28000 x3de00000} {x44268000 x43f58000 x3e88800f} {x442d8000 x440a8000 x3f015ffe} {x443c4000 x441a4000 x3f2e2004} {x446d8000 x443b8000 x3f3ea002} {x44846000 x44528000 x3f462004} {x4486c000 x44578000 x3f46a002} {x44892000 x44598000 x3f3e2004} {x448b0000 x44598000 x3f1ce001} {x448a8000 x4458c000 0}}} {t {{x41300000 x4465b99a}} {{x41300000 x44343333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear25 512 catmullrom {cc {f 2080} {px x41300000 {x44250000 x44060000 x3cf0000d} {x44250000 x44074000 x3e780022} {x4428c000 x44050000 x3eb67ff6} {x443ec000 x43de0000 x3f1b1fff} {x444f0000 x43c28000 x3f3d2008} {x44688000 x43a30000 x3f479ffd} {x4480c000 x43870000 x3f4e5ffa} {x44938000 x43560000 x3f53e005} {x44964000 x434f0000 x3f565ffa} {x44948000 x43560000 x3ed38002}}} {t {{x41300000 x4463e666}} {{x41300000 x43b7a666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear24 512 catmullrom {cc {f 2080} {px x41300000 {x442e4000 x44014000 x3d860002} {x442c8000 x44078000 x3e51fff8} {x44298000 x440ec000 x3ec38002} {x442a8000 x440fc000 x3f13e005} {x44334000 x43fb8000 x3f2d5ffe} {x44438000 x43d30000 x3f462004} {x44638000 x439d0000 x3f4fe005} {x447e4000 x43820000 x3f581ffb} {x448b0000 x43690000 x3f5b9ffd} {x44902000 x43550000 x3f5c9ff9} {x44912000 x434f0000 x3f5ce001} {x44916000 x434f0000 x3f58e001} {x4490e000 x43580000 x3f2be005} {x44904000 x435b0000 0}}} {t {{x41300000 x44697b75}} {{x41300000 x43b28917}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear23 512 catmullrom {cc {f 2080} {px x41300000 {x4471c000 x43c98000 x3d64000a} {x44710000 x43ca8000 x3e4c0011} {x446d4000 x43d20000 x3e80800f} {x446e8000 x43e70000 x3f071fff} {x446a4000 x43e20000 x3f1b6007} {x44600000 x43e90000 x3f246003} {x445f4000 x43fb0000 x3f29dffc} {x44608000 x440a8000 x3f2da006} {x44694000 x4414c000 x3f2c9ff9} {x4469c000 x44144000 0}}} {t {{x41300000 x44692666}} {{x41300000 x43f2999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear22 512 catmullrom {cc {f 2080} {px x41300000 {x44704000 x43b98000 x3d33fffd} {x446e8000 x43bc8000 x3e4effe3} {x44674000 x43ce8000 x3ef3ffef} {x44664000 x43de8000 x3f095ffe} {x44674000 x43de8000 x3c8ffff3}}} {t {{x41300000 x446a4ccd}} {{x41300000 x43cd199a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear21 512 catmullrom {cc {f 2080} {px x41300000 {x44886000 x43a68000 x3d2c0003} {x4487c000 x43aa0000 x3e51fff8} {x4485a000 x43b98000 x3edc7ffe} {x44838000 x43ca8000 x3f192008} {x447fc000 x43ec8000 x3f20e001} {x447e8000 x43f50000 x3f215ffe} {x447d0000 x43f80000 x3f16dff8}}} {t {{x41300000 x4483447b}} {{x41300000 x43cfb6e9}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear20 512 catmullrom {cc {f 2080} {px x41300000 {x448d8000 x43d70000 x3d07fff9} {x448d2000 x43d90000 x3dd5ffe7} {x448ac000 x43e20000 x3ef0fffc} {x44886000 x43f18000 x3f195ffe} {x4484e000 x440bc000 x3f25a006} {x44842000 x44114000 x3f27e005} {x4483c000 x44140000 x3f239ffd} {x4483c000 x44138000 x3ee5000d}}} {t {{x41300000 x4487c800}} {{x41300000 x4400c800}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear19 512 catmullrom {cc {f 2080} {px x41300000 {x44908000 x44000000 x3d70000d} {x44908000 x4403c000 x3e9d7ffa} {x448f4000 x44130000 x3f131fff} {x448d4000 x441e8000 x3f2fe005} {x448a6000 x44328000 x3f339ffd} {x44898000 x44388000 x3f34e001} {x4487a000 x44498000 x3f341ffb} {x44870000 x444c8000 x3f25dffc} {x44864000 x444dc000 x3f036007}}} {t {{x41300000 x448b5c7b}} {{x41300000 x442b1c6a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear18 512 catmullrom {cc {f 2080} {px x41300000 {x446ec000 x44254000 x3e23ffef} {x446f4000 x44294000 x3eb38002} {x446f4000 x44348000 x3f089ff9} {x44704000 x44388000 x3f192008} {x44704000 x443bc000 x3f125ffa}}} {t {{x41300000 x446f8ccd}} {{x41300000 x44317333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear17 512 catmullrom {cc {f 2080} {px x41300000 {x445ec000 x44298000 x3d33fffd} {x445dc000 x442bc000 x3e58fffc} {x445d8000 x44334000 x3f052008} {x445dc000 x44350000 x3f10e001} {x445e4000 x44348000 x3d67fff9}}} {t {{x41300000 x445e0000}} {{x41300000 x44306666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear16 512 catmullrom {cc {f 2080} {px x41300000 {x447a4000 x444e0000 x3d1bfff6} {x447ac000 x444f0000 x3e07ffde} {x4478c000 x44550000 x3f036007} {x4477c000 x445f8000 x3f1ea002} {x44770000 x44710000 x3f239ffd} {x44768000 x44754000 x3f25dffc} {x4477c000 x447ac000 x3f25dffc} {x44784000 x447ac000 x3d83fffd}}} {t {{x41300000 x44786000}} {{x41300000 x4465a800}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear15 512 catmullrom {cc {f 2080} {px x41300000 {x4452c000 x44568000 x3d07fff9} {x44520000 x44564000 x3e25ffe7} {x44504000 x4458c000 x3ee60008} {x444f8000 x445d0000 x3f162004} {x444e8000 x4469c000 x3f1f1fff} {x444fc000 x446e8000 x3f22dff8} {x4450c000 x447a4000 x3f236007} {x44504000 x447b8000 x3f0c6003} {x444f0000 x447b8000 x3dadfffb}}} {t {{x41300000 x44504e35}} {{x41300000 x446871cb}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear14 512 catmullrom {cc {f 2080} {px x41300000 {x444f0000 x44594000 x3cf0000d} {x444f0000 x446d4000 x3d33fffd} {x444c0000 x4475c000 x3f0f6007} {x444c0000 x447a0000 x3f095ffe} {x444b8000 x447ac000 x3d53fffd}}} {t {{x41300000 x444d199a}} {{x41300000 x44703333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear13 512 catmullrom {cc {f 2080} {px x41300000 {x42080000 x44694000 x3d70000d} {x42100000 x446ec000 x3d9dfffb} {x42400000 x447ac000 x3e63ffef}}} {t {{x41300000 x421d554d}} {{x41300000 x4470eab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear12 512 catmullrom {cc {f 2080} {px x41300000 {x42f80000 x440e8000 x3d64000a} {x42f40000 x44144000 x3e45ffe7} {x42c80000 x44278000 x3ee0800f} {x42ae0000 x44328000 x3eeb8002} {x429c0000 x443bc000 x3e91800a}}} {t {{x41300000 x42cc6666}} {{x41300000 x4424e666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear11 512 catmullrom {cc {f 2080} {px x41300000 {x42b40000 x43f68000 x3d180007} {x42b00000 x43fc8000 x3d2c0003} {x42ae0000 x44048000 x3df5ffe7} {x42a00000 x4408c000 x3ef0fffc} {x42600000 x44190000 x3f149ff9} {x42580000 x441dc000 x3f2e2004} {x42380000 x44254000 x3f2edff8} {x42000000 x44388000 x3f309ff9} {x41d80000 x44438000 x3f2fe005} {x41b00000 x44474000 x3f2e2004} {x41b00000 x444e0000 x3f2a2004} {x41b00000 x44534000 x3f0f6007}}} {t {{x41300000 x4250aab3}} {{x41300000 x4425f000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear10 512 catmullrom {cc {f 2080} {px x41300000 {x42840000 x43a90000 x3ce7fff9} {x429a0000 x43b00000 x3d400000} {x42b40000 x43b88000 x3ea9fff8} {x42cc0000 x43c28000 x3f041ffb} {x42d20000 x43cc0000 x3f081ffb} {x42c60000 x43c88000 x3ef47ffe} {x42c60000 x43c60000 x3d53fffd}}} {t {{x41300000 x42b6492a}} {{x41300000 x43bd8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear9 512 catmullrom {cc {f 2080} {px x41300000 {x42c20000 x42d00000 x3d04000a} {x42c80000 x42c80000 x3d2c0003} {x42dc0000 x43010000 x3ea1fff8} {x43080000 x434e0000 x3eff7ff1} {x43360000 x43ad8000 x3f095ffe} {x43400000 x43b88000 x3f006003} {x43420000 x43bd8000 x3da7fff9}}} {t {{x41300000 x43106dd3}} {{x41300000 x43696dd3}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear8 512 catmullrom {cc {f 2080} {px x41300000 {x42fc0000 x40a00000 x3dddffc5} {x43030000 x41a00000 x3e33ffef} {x43230000 x42cc0000 x3ee3ffef} {x43360000 x432f0000 x3f0c1ffb} {x43640000 x43a88000 x3f16dff8} {x43858000 x43c50000 x3f252008} {x43908000 x43d10000 x3f28e001} {x43a60000 x43e70000 x3f2a5ffa} {x43cb0000 x440c4000 x3f2aa002} {x43c28000 x44130000 x3f1aa002}}} {t {{x41300000 x437b4ccd}} {{x41300000 x4399199a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear7 512 catmullrom {cc {f 2080} {px x41300000 {x43ae8000 x40000000 x3d1bfff6} {x43b10000 x41b00000 x3dd1fff8} {x43c20000 x43030000 x3ecc0011} {x43d10000 x435a0000 x3f03e005} {x43db8000 x43b00000 x3f0a5ffa} {x43de0000 x43ba0000 x3f0a2004} {x43dc0000 x43bd8000 x3ed67ff6}}} {t {{x41300000 x43ca4917}} {{x41300000 x4352db64}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear6 512 catmullrom {cc {f 2080} {px x41300000 {x439d8000 x43390000 x3d64000a} {x439e0000 x434c0000 x3e35ffe7} {x43b00000 x43950000 x3ed60008} {x43c00000 x43b50000 x3f0b1fff} {x43d58000 x43ea8000 x3f15a006} {x43e90000 x440bc000 x3f206003} {x43e90000 x440e0000 x3f1ce001} {x43eb8000 x44110000 x3f0adff8} {x43eb8000 x44100000 x3d67fff9}}} {t {{x41300000 x43cbc72b}} {{x41300000 x43d32aa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear5 512 catmullrom {cc {f 2080} {px x41300000 {x43d48000 x43ef0000 x3d920005} {x43d38000 x43ef8000 x3e9afff3} {x43d30000 x43f80000 x3ebc0011} {x43db8000 x440b8000 x3f05dffc} {x43e30000 x4417c000 x3f1be005} {x43ee0000 x44270000 x3f1edff8} {x43ef8000 x44298000 x3f1be005}}} {t {{x41300000 x43deb6e9}} {{x41300000 x440d924e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear4 512 catmullrom {cc {f 2080} {px x41300000 {x43a68000 x43de8000 x3d13fffd} {x43a68000 x43e20000 x3e31001d} {x43a88000 x43f28000 x3ede0008} {x43b28000 x44028000 x3f16dff8} {x43c60000 x44114000 x3f222004} {x43c88000 x44140000 x3f23e005} {x43cb0000 x4417c000 x3f241ffb} {x43cc0000 x4419c000 x3f236007} {x43cc0000 x44190000 x3e55ffe7}}} {t {{x41300000 x43bbb8d5}} {{x41300000 x44086ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear3 512 catmullrom {cc {f 2080} {px x41300000 {x439f0000 x4439c000 x3d1bfff6} {x43a08000 x443b0000 x3e28fffc} {x43aa0000 x4444c000 x3efb8002} {x43b18000 x444c0000 x3f1b1fff} {x43b88000 x44504000 x3f1e5ffa} {x43b88000 x444fc000 x3e75ffe7}}} {t {{x41300000 x43acaaa0}} {{x41300000 x44464000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear2 512 catmullrom {cc {f 2080} {px x41300000 {x43920000 x444c0000 x3d3bfff6} {x43990000 x444f8000 x3e45ffe7} {x43a78000 x44594000 x3eee7ff6} {x43ac8000 x445f4000 x3f0a5ffa} {x43b18000 x44650000 x3f101ffb} {x43b28000 x44664000 x3f11a006} {x43b28000 x44660000 x3ef2fff3}}} {t {{x41300000 x43a7a49c}} {{x41300000 x445c2db2}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear1 512 catmullrom {cc {f 2080} {px x41300000 {x43510000 x44474000 x3d04000a} {x43550000 x4447c000 x3d380007} {x43550000 x444a4000 x3ebc0011} {x435f0000 x444e8000 x3efd7ffa} {x437f0000 x44584000 x3f049ff9} {x43810000 x445a8000 x3f0b6007} {x43810000 x445bc000 x3f0c9ff9}}} {t {{x41300000 x4368b6c9}} {{x41300000 x4450e48b}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43290000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Blur3 512 catmullrom {cc {f 2080} {px x41300000 {x43840000 x444c0000 x3dbdfffb} {x43870000 x444f8000 x3e900000} {x437a0000 x444c0000 x3f0edff8} {x43660000 x44488000 x3f131fff} {x43660000 x444c0000 x3f1aa002} {x435f0000 x444b8000 x3f252008} {x43710000 x44518000 x3f24e001} {x437a0000 x445a8000 x3f0ea002}}} {t {{x41300000 x4374c000}} {{x41300000 x444e7000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43100000 bt x40000000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 x41700000 tt x41a00000 nv x40000000 view2 x40000000}} {cubiccurve Blur2 512 catmullrom {cc {f 2080} {px x41300000 {x43200000 x44358000 x3d3bfff6} {x431c0000 x443bc000 x3dfc0011} {x43270000 x443d8000 x3ebb8002} {x43270000 x44390000 x3f079ffd} {x43140000 x4428c000 x3f0adff8} {x43170000 x442b4000 x3ed5000d}}} {t {{x41300000 x431e2ac1}} {{x41300000 x4434a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43100000 bt x40000000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 x41700000 tt x41a00000 nv x40000000 view2 x40000000}} {cubiccurve Blur1 512 catmullrom {cc {f 2080} {px x41300000 {x430f0000 x44768000 x3d1bfff6} {x430a0000 x447a4000 x3d8dfffb} {x430a0000 x44718000 x3eae0008} {x431c0000 x44680000 x3eec0011} {x43190000 x44694000 x3ef00000} {x43120000 x446fc000 x3ef1fff8} {x43120000 x44718000 x3ef1fff8} {x430d0000 x446c4000 x3ef5000d} {x430b0000 x4464c000 x3f009ff9} {x43060000 x445a0000 x3f022004} {x43050000 x44620000 x3f036007} {x430a0000 x446b8000 x3f02a002} {x42f20000 x445c4000 x3f05a006} {x42f80000 x44584000 x3f076007} {x42f40000 x445c4000 x3f065ffa} {x42e40000 x445c8000 x3f05a006} {x42cc0000 x44510000 x3f052008} {x42b40000 x443f4000 x3ecafff3}}} {t {{x41300000 x43041c6a}} {{x41300000 x4464271b}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x43100000 bt x40000000 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 x41700000 tt x41a00000 nv x40000000 view2 x40000000}} {cubiccurve Brush107 512 catmullrom {cc {f 2080} {px x41300000 {x43030000 x44650000 x3d47fff9} {x42f20000 x4461c000 x3d8c0003} {x42f80000 x44630000 x3e68fffc} {x430b0000 x44694000 x3e85000d} {x430a0000 x44710000 x3e8b8002} {x430a0000 x44724000 x3e8f0004} {x43120000 x447a0000 x3e8f0004} {x430d0000 x447b8000 x3da7fff9}}} {t {{x41300000 x4306c000}} {{x41300000 x446d7800}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush106 512 catmullrom {cc {f 2080} {px x41300000 {x438c8000 x445e4000 x3d580007} {x438e0000 x445d8000 x3d93fffd} {x438f8000 x44644000 x3e8f0004} {x438e0000 x44690000 x3e960008} {x43940000 x446c4000 x3e95000d} {x439a8000 x44748000 x3e938002} {x43a18000 x44790000 x3e92fff3}}} {t {{x41300000 x43936db2}} {{x41300000 x44698927}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush105 512 catmullrom {cc {f 2080} {px x41300000 {x437a0000 x44468000 x3d27fff9} {x43760000 x444c0000 x3d27fff9} {x437a0000 x44578000 x3d3bfff6}}} {t {{x41300000 x4378aac1}} {{x41300000 x444e0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush104 512 catmullrom {cc {f 2080} {px x41300000 {x436b0000 x442ac000 x3d89fffe} {x436b0000 x442a8000 x3e380022} {x43600000 x44264000 x3e780022} {x43670000 x44294000 x3ea38002} {x437a0000 x442dc000 x3eb3ffef} {x43760000 x442a0000 x3ec38002} {x43730000 x44294000 x3ecd7ffa} {x43820000 x442dc000 x3ecb8002} {x43930000 x44388000 x3ec77ff1} {x43920000 x443fc000 x3ec3ffef} {x438f8000 x443fc000 0}}} {t {{x41300000 x437e45e3}} {{x41300000 x442f974c}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush103 512 catmullrom {cc {f 2080} {px x41300000 {x43000000 x43e10000 x3d83fffd} {x43010000 x43e10000 x3e2a0019} {x43080000 x43e80000 x3e61001d} {x43170000 x43f30000 x3e857ffa}}} {t {{x41300000 x43080000}} {{x41300000 x43e74000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush102 512 catmullrom {cc {f 2080} {px x41300000 {x428e0000 x43a30000 x3d27fff9} {x42820000 x439f0000 x3d89fffe} {x42820000 x43858000 x3e9e7ff6} {x427c0000 x43830000 x3eaafff3} {x42740000 x43808000 x3eab8002} {x42680000 x43848000 x3eac7ffe} {x42600000 x43880000 x3eaa8006} {x42300000 x436e0000 x3eac7ffe} {x41e80000 x435d0000 x3ead7ffa} {x40a00000 x43400000 x3eae7ff6} {x40400000 x433d0000 x3e98800f} {x40400000 x433b0000 x3e0effe3}}} {t {{x41300000 x422e554d}} {{x41300000 x43798000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush101 512 catmullrom {cc {f 2080} {px x41300000 {x43a60000 x427c0000 x3dc00000} {x43af0000 x41d00000 x3e11fff8}}} {t {{x41300000 x43aa8000}} {{x41300000 x42320000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush100 512 catmullrom {cc {f 2080} {px x41300000 {x43340000 x430b0000 x3d000000} {x433d0000 x43010000 x3d33fffd} {x433e0000 x42b00000 x3e61001d} {x433d0000 x42b00000 x3e92fff3} {x43440000 x42d00000 x3e957ffa} {x43450000 x42980000 x3ebd000d} {x43310000 x42400000 x3ebf7ff1} {x432c0000 x426c0000 x3eb9fff8} {x432f0000 x426c0000 x3eb5000d} {x432a0000 x42400000 x3eb70004} {x430b0000 x41700000 x3eb77ff1} {x42fc0000 xc0000000 x3eaafff3} {x42d60000 xc1e80000 x3e81800a}}} {t {{x41300000 x4329c4dd}} {{x41300000 x427cec57}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush99 512 catmullrom {cc {f 2080} {px x41300000 {x43780000 x43a68000 x3d53fffd} {x43760000 x43a60000 0}}} {t {{x41300000 x43770000}} {{x41300000 x43a64000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush98 512 catmullrom {cc {f 2080} {px x41300000 {x43ac8000 x43c70000 x3d2c0003} {x43a50000 x43c70000 x3da7fff9} {x43a30000 x43b98000 x3e80fffc} {x43a28000 x43b38000 x3e700000} {x439c8000 x43b40000 x3e270004}}} {t {{x41300000 x43a3e666}} {{x41300000 x43bc999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush97 512 catmullrom {cc {f 2080} {px x41300000 {x44e70000 x43cd8000 x3d53fffd} {x44e66000 x43d30000 x3e51fff8} {x44e62000 x43d60000 0}}} {t {{x41300000 x44e68000}} {{x41300000 x43d22aa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush96 512 catmullrom {cc {f 2080} {px x41300000 {x44e0a000 x432d0000 x3d380007} {x44dde000 x43700000 x3d64000a} {x44de0000 x43750000 x3dbc0003} {x44de8000 x43810000 x3dbc0003} {x44df8000 x438c8000 x3d900000} {x44e06000 x438e0000 x3d93fffd} {x44e4e000 x43a30000 x3da20005} {x44e66000 x43a50000 x3dadfffb} {x44e62000 x43a88000 x3dac0003}}} {t {{x41300000 x44e15c7b}} {{x41300000 x438971cb}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush95 512 catmullrom {cc {f 2080} {px x41300000 {x44e52000 x41c00000 x3d07fff9} {x44e52000 x41d80000 x3d30000d} {x44e48000 x42400000 x3e030015} {x44e54000 x42de0000 x3e5c0011} {x44e6a000 x42e40000 x3e4c0011} {x44e88000 x42be0000 x3e51fff8} {x44e9c000 x42b00000 x3e580022} {x44ed0000 x428c0000 x3e5e0008} {x44ee4000 x42540000 x3e81fff8} {x44eda000 x42100000 x3e838002} {x44ed2000 x42140000 x3affffd5}}} {t {{x41300000 x44e8fd1f}} {{x41300000 x427fa2eb}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush94 512 catmullrom {cc {f 2080} {px x41300000 {x44d70000 x42380000 x3d89fffe} {x44d7c000 x42440000 x3e6a0019} {x44d6e000 x41f80000 x3e7cffeb} {x44d42000 x41a00000 x3e85000d} {x44d3a000 x42600000 x3e90fffc} {x44d4c000 x42820000 x3e900000} {x44d5a000 x42380000 x3e91800a} {x44d52000 x42140000 x3e947ffe} {x44d44000 x426c0000 x3e938002} {x44d42000 x42960000 x3e8f0004} {x44d44000 x42d60000 x3e8f7ff1} {x44d4e000 x42da0000 x3e8e0008} {x44d5c000 x42de0000 x3e8e7ff6} {x44d6a000 x42fc0000 x3e8c0011}}} {t {{x41300000 x44d556b8}} {{x41300000 x4285db71}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush93 512 catmullrom {cc {f 2080} {px x41300000 {x44d86000 x426c0000 x3d07fff9} {x44d8c000 x42380000 x3d200000} {x44d92000 x42100000 x3d200000}}} {t {{x41300000 x44d8c000}} {{x41300000 x423c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42e40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush92 512 catmullrom {cc {f 2080} {px x41300000 {x44e44000 x42b40000 x3cb7ffec} {x44e62000 x42600000 x3d580007}}} {t {{x41300000 x44e53000}} {{x41300000 x42920000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42e40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush91 512 catmullrom {cc {f 2080} {px x41300000 {x44cf4000 x42f40000 x3dd1fff8} {x44cfe000 x42e80000 x3e430015} {x44d0e000 x42a60000 x3e5afff3} {x44d20000 x427c0000 x3e700000} {x44d2c000 x42f80000 x3e7a0019} {x44d7e000 x43340000 x3e838002} {x44da0000 x43120000 x3e8c7ffe} {x44db8000 x42c20000 x3ea67ff6} {x44dbc000 x42b00000 x3ea80000} {x44db8000 x42bc0000 x3ea8800f} {x44dbc000 x42c20000 x3ea57ffa} {x44de0000 x42440000 x3ea67ff6} {x44e06000 x41e80000 x3ea67ff6} {x44e06000 x42400000 x3e35ffe7} {x44e0e000 x42b80000 x3e35000d} {x44e24000 x42d00000 x3c800000}}} {t {{x41300000 x44d97000}} {{x41300000 x42bf8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42e40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush90 512 catmullrom {cc {f 2080} {px x41300000 {x44c1c000 x42ae0000 x3d2c0003} {x44c2e000 x42980000 x3d33fffd} {x44c4c000 x42140000 x3e3cffeb} {x44c5a000 x41980000 x3e4c0011} {x44c60000 x41400000 x3e48fffc} {x44c64000 x41400000 0}}} {t {{x41300000 x44c48a8f}} {{x41300000 x42220000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42e40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush89 512 catmullrom {cc {f 2080} {px x41300000 {x44bd6000 x43690000 x3d73fffd} {x44bd6000 x43650000 x3e11001d} {x44bd6000 x43690000 x3de2003b}}} {t {{x41300000 x44bd6000}} {{x41300000 x4367aac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42e40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush88 512 catmullrom {cc {f 2080} {px x41300000 {x44bee000 x438f0000 x3d04000a} {x44be6000 x438c8000 0}}} {t {{x41300000 x44bea000}} {{x41300000 x438dc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42e40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush87 512 catmullrom {cc {f 2080} {px x41300000 {x44ca4000 x43bc0000 x3d7bfff6} {x44c2a000 x43ac8000 x3dd9ffd6} {x44c1c000 x43ab0000 0}}} {t {{x41300000 x44c4e000}} {{x41300000 x43b12aa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42e40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush86 512 catmullrom {cc {f 2080} {px x41300000 {x44cce000 x43e08000 x3dee0008} {x44cd4000 x43de8000 x3e1cffeb} {x44ce2000 x43d60000 x3e21fff8} {x44cd0000 x43bf8000 x3e35000d}}} {t {{x41300000 x44cd5000}} {{x41300000 x43d52000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42e40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush85 512 catmullrom {cc {f 2080} {px x41300000 {x44d60000 x43e20000 x3c6fffd8} {x44d5a000 x43e08000 x3cb0000d} {x44d48000 x43e48000 x3d0c0003} {x44d1c000 x43de0000 x3dfc0011}}} {t {{x41300000 x44d47800}} {{x41300000 x43e14000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42e40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush84 512 catmullrom {cc {f 2080} {px x41300000 {x44d96000 x43f50000 x3c6fffd8} {x44d9c000 x43f40000 x3d000000} {x44d9a000 x43f40000 x3e960008} {x44d82000 x43ee0000 x3e9c7ffe} {x44d92000 x43ef8000 x3e9f0004} {x44d9a000 x43f18000 x3e9f0004} {x44d9c000 x43ee0000 x3ea28006} {x44d88000 x43ec8000 x3eae7ff6} {x44d96000 x43eb8000 x3eaf7ff1} {x44d90000 x43e80000 x3eb3ffef} {x44d78000 x43e70000 x3ead000d} {x44d70000 x43e70000 x3b800000}}} {t {{x41300000 x44d8e571}} {{x41300000 x43ee0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42e40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush83 512 catmullrom {cc {f 2080} {px x41300000 {x44d14000 x44044000 x3cb7ffec} {x44d0a000 x4400c000 x3d44000a} {x44cfa000 x43f68000 x3e500000} {x44d00000 x43fc8000 x3e61fff8} {x44d00000 x43f78000 x3e55000d} {x44d0e000 x43fb0000 x3e3afff3} {x44d12000 x43fb0000 x3e31001d} {x44d1c000 x43fc8000 x3de00000}}} {t {{x41300000 x44d0a800}} {{x41300000 x43fce000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42e40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush82 512 catmullrom {cc {f 2080} {px x41300000 {x44cdc000 x44034000 x3d1bfff6} {x44cd4000 x4400c000 x3d400000} {x44cd4000 x43fd8000 x3dfc0011} {x44cd8000 x43f50000 x3e01001d}}} {t {{x41300000 x44cd7000}} {{x41300000 x43fea000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42e40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush81 512 catmullrom {cc {f 2080} {px x41300000 {x44ce6000 x4411c000 x3c8ffff3} {x44d00000 x440e8000 x3ca7fff9} {x44cf4000 x440cc000 x3ddc0011} {x44ce8000 x440cc000 x3dc20005} {x44cf6000 x440d8000 x3dc60002} {x44d04000 x44080000 x3e180022} {x44cec000 x44034000 x3e430015} {x44ce8000 x44034000 x3e03ffef}}} {t {{x41300000 x44cf2000}} {{x41300000 x440ab800}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42e40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush80 512 catmullrom {cc {f 2080} {px x41300000 {x44e96000 x44328000 x3cc80014} {x44e9c000 x44314000 x3d04000a} {x44e6a000 x4430c000 x3db9fffe} {x44e9c000 x443d8000 x3e07ffde} {x44eaa000 x44348000 x3e400000} {x44ea6000 x44328000 x3e500000} {x44e84000 x442ac000 x3e51fff8}}} {t {{x41300000 x44e94000}} {{x41300000 x4432d24e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42e40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush79 512 catmullrom {cc {f 2080} {px x41300000 {x44e98000 x444b8000 x3ca7fff9} {x44e80000 x44460000 x3d33fffd} {x44e76000 x4441c000 x3e15ffe7}}} {t {{x41300000 x44e84a8f}} {{x41300000 x44466ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42e40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush78 512 catmullrom {cc {f 2080} {px x41300000 {x44d26000 x44584000 x3d0c0003} {x44d2a000 x44584000 x3d70000d} {x44d12000 x44580000 x3e45ffe7} {x44d08000 x445a8000 x3e770004} {x44cf4000 x44598000 x3e98800f} {x44d14000 x445b0000 x3e5a0019} {x44d1c000 x445a0000 x3e15ffe7}}} {t {{x41300000 x44d1447b}} {{x41300000 x44595b75}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42e40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush77 512 catmullrom {cc {f 2080} {px x41300000 {x44c80000 x444fc000 x3d8c0003} {x44c78000 x4450c000 x3dadfffb} {x44c94000 x444f8000 x3e71001d} {x44ca4000 x444b8000 x3e9c0011} {x44ca8000 x444c8000 x3e9e7ff6} {x44cba000 x444c0000 x3e938002} {x44cc0000 x44498000 x3e6afff3}}} {t {{x41300000 x44c9e000}} {{x41300000 x444d5b75}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42e40000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush76 512 catmullrom {cc {f 2080} {px x41300000 {x44cc0000 x4460c000 x3c60001b} {x44cac000 x44678000 x3d64000a} {x44cb0000 x446cc000 x3d600000} {x44cc6000 x446ec000 x3dfdffc5} {x44cc6000 x446d8000 x3e0afff3}}} {t {{x41300000 x44cbb333}} {{x41300000 x4469d99a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42b80000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush75 512 catmullrom {cc {f 2080} {px x41300000 {x44c50000 x44410000 x3d4c0003} {x44c50000 x44400000 x3d7bfff6} {x44c98000 x444cc000 x3dddffc5} {x44c94000 x444d4000 x3e2afff3} {x44c5e000 x444f0000 x3e2c0011} {x44c80000 x4455c000 x3e21001d} {x44cac000 x44554000 x3e48fffc}}} {t {{x41300000 x44c7a000}} {{x41300000 x444c248b}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42b80000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush74 512 catmullrom {cc {f 2080} {px x41300000 {x44c28000 x444c0000 x3cb7ffec} {x44c16000 x44444000 x3d400000}}} {t {{x41300000 x44c1f000}} {{x41300000 x44482000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42b80000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush73 512 catmullrom {cc {f 2080} {px x41300000 {x44c16000 x44568000 x3d200000} {x44c12000 x44564000 x3d53fffd} {x44bdc000 x4455c000 x3da20005} {x44be6000 x44584000 x3d9c0003} {x44bee000 x44594000 x3da3fffd} {x44bea000 x44584000 0}}} {t {{x41300000 x44bf5a8f}} {{x41300000 x44576000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42b80000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush72 512 catmullrom {cc {f 2080} {px x41300000 {x44efc000 x43d90000 x3cd80007} {x44efc000 x43dc0000 x3d07fff9} {x44ef4000 x43ef8000 x3d07fff9} {x44eee000 x43fa0000 x3dc00000} {x44eee000 x440a8000 x3df00043} {x44ee6000 x44110000 x3e230015} {x44eda000 x44174000 x3db3fffd}}} {t {{x41300000 x44eeedc3}} {{x41300000 x44004927}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42b80000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush71 512 catmullrom {cc {f 2080} {px x41300000 {x44f14000 x43580000 x3cc00000} {x44f20000 x43420000 x3ce7fff9} {x44f2e000 x43120000 x3d67fff9} {x44f20000 x42e40000 x3d13fffd} {x44f1a000 x42b80000 x3d4c0003}}} {t {{x41300000 x44f1f333}} {{x41300000 x43186666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42b80000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush70 512 catmullrom {cc {f 2080} {px x41300000 {x44ef8000 x43f30000 x3cd80007} {x44f02000 x43e30000 x3cf0000d} {x44f06000 x43d00000 x3d180007} {x44f06000 x43cb0000 x3dddffc5} {x44f06000 x43bb0000 x3df00043} {x44f06000 x43b28000 x3dea0019} {x44f0c000 x43a28000 x3dea0019} {x44f10000 x439a8000 x3dea0019} {x44f10000 x438e0000 x3dcc0003} {x44f16000 x43858000 x3dd9ffd6} {x44f1a000 x43710000 x3dc7fff9} {x44f1e000 x43670000 x3d580007} {x44f24000 x43550000 x3c8ffff3}}} {t {{x41300000 x44f0d8a4}} {{x41300000 x43a7ceb8}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42b80000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush69 512 catmullrom {cc {f 2080} {px x41300000 {x44a14000 x43930000 x3cc00000} {x44a1c000 x438b8000 x3d07fff9} {x44a22000 x43730000 x3e4e0008} {x44a26000 x435b0000 x3e71001d} {x44a22000 x432d0000 x3e71001d} {x44a28000 x43140000 x3e75ffe7} {x44a36000 x42da0000 x3e75000d} {x44a36000 x42a60000 x3e730015} {x44a3e000 x42280000 x3e65ffe7} {x44a44000 x41d00000 x3e5a0019} {x44a5c000 xc0a00000 x3e27ffde}}} {t {{x41300000 x44a2fa3d}} {{x41300000 x4312747b}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42b80000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush68 512 catmullrom {cc {f 2080} {px x41300000 {x44a34000 x44188000 x3d47fff9} {x44a1c000 x44204000 x3e000000} {x44a26000 x44250000 x3e88800f} {x44a26000 x44294000 x3e860008} {x44a1c000 x442f0000 x3e7e0008} {x44a18000 x443a8000 x3e80fffc} {x44a18000 x443d8000 x3e7c0011} {x44a1c000 x44454000 x3e6cffeb} {x44a14000 x444ac000 x3e3cffeb} {x44a1e000 x44510000 x3dadfffb}}} {t {{x41300000 x44a1f000}} {{x41300000 x4434b333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42b80000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush67 512 catmullrom {cc {f 2080} {px x41300000 {x44a14000 x44088000 x3cb7ffec} {x44a0e000 x44074000 x3ce7fff9} {x44a0a000 x44074000 x3cc00000} {x449fc000 x440b8000 x3e3a0019} {x44a00000 x440bc000 x3e928006} {x44a12000 x440cc000 x3e91800a} {x44a22000 x440e8000 x3e8d000d} {x44a1e000 x440e8000 x3e90fffc} {x44a22000 x44114000 x3df5ffe7} {x44a1e000 x44138000 x3db3fffd}}} {t {{x41300000 x44a1299a}} {{x41300000 x440c799a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42b80000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush66 512 catmullrom {cc {f 2080} {px x41300000 {x44912000 x4409c000 x3d0c0003} {x4490e000 x440a8000 x3dddffc5} {x44908000 x440e8000 x3eb0800f}}} {t {{x41300000 x4490d571}} {{x41300000 x440b9550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42b80000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush65 512 catmullrom {cc {f 2080} {px x41300000 {x448f0000 x4400c000 x3d0ffff3} {x448f4000 x44018000 x3d33fffd} {x448f8000 x44034000 x3e47ffde} {x448ec000 x44028000 x3e68fffc} {x448ec000 x44048000 x3e6e0008} {x448ea000 x44060000 x3e730015} {x448e2000 x44088000 x3e75000d} {x448ea000 x44094000 x3e3e0008} {x448ea000 x4409c000 x3e35ffe7} {x448ea000 x440a8000 x3e4afff3} {x448e6000 x440bc000 x3e580022} {x448e0000 x440c4000 x3e7e0008} {x448e0000 x440f4000 x3e81800a} {x448d8000 x440f4000 x3e7c0011} {x448d8000 x44110000 x3be00005}}} {t {{x41300000 x448e7bd7}} {{x41300000 x44088883}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42b80000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush64 512 catmullrom {cc {f 2080} {px x41300000 {x448e2000 x43d10000 x3cf7ffec} {x448e0000 x43d60000 x3d0ffff3} {x448e0000 x43d70000 0}}} {t {{x41300000 x448e0a8f}} {{x41300000 x43d4aaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x430a0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush63 512 catmullrom {cc {f 2080} {px x41300000 {x448a6000 x43bc8000 x3cf0000d} {x448a8000 x43bd8000 x3d27fff9} {x448a8000 x43bf8000 x3e5cffeb}}} {t {{x41300000 x448a7571}} {{x41300000 x43bdd560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x430a0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush62 512 catmullrom {cc {f 2080} {px x41300000 {x4481a000 x43b00000 x3cd80007} {x4481e000 x43b10000 x3d0ffff3} {x44838000 x43b28000 x3e67ffde} {x44858000 x43b10000 x3e7c0011} {x4486c000 x43ae0000 x3e670004} {x44864000 x43b10000 x3e18fffc} {x4485a000 x43b18000 x3e1afff3} {x44858000 x43b18000 x3e31001d} {x4485a000 x43b28000 x3e2e0008} {x44862000 x43b28000 x3e58fffc} {x44872000 x43b00000 x3e600000} {x44864000 x43b00000 x3d4c0003} {x44862000 x43b10000 0}}} {t {{x41300000 x448538a4}} {{x41300000 x43b0f625}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x430a0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush61 512 catmullrom {cc {f 2080} {px x41300000 {x44842000 x43360000 x3cf0000d} {x4484a000 x43340000 x3d1bfff6} {x44842000 x43340000 x3e80800f} {x44842000 x43360000 x3affffd5}}} {t {{x41300000 x44844000}} {{x41300000 x43350000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x430a0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush60 512 catmullrom {cc {f 2080} {px x41300000 {x44862000 x42de0000 x3d200000} {x44864000 x42e40000 x3ddc0011} {x44864000 x42ee0000 x3e100000}}} {t {{x41300000 x44863571}} {{x41300000 x42e55581}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43520000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush59 512 catmullrom {cc {f 2080} {px x41300000 {x4485e000 x42920000 x3ccffff3} {x44862000 x42920000 x3d1bfff6} {x44862000 x428c0000 x3e0e0008} {x44854000 x426c0000 x3e5a0019} {x4484e000 x42880000 x3e100000} {x4484e000 x42980000 x3e070004} {x44850000 x42920000 x3e2e0008} {x44850000 x42980000 x3e2e0008} {x44850000 x42a00000 x3e2afff3} {x4484e000 x42a40000 x3e21001d} {x4484e000 x42a00000 x3cc80014}}} {t {{x41300000 x448542e1}} {{x41300000 x429345d6}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43520000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush58 512 catmullrom {cc {f 2080} {px x41300000 {x44704000 x42fc0000 x3dea0019} {x44740000 x42f40000 x3e05ffe7}}} {t {{x41300000 x44722000}} {{x41300000 x42f80000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43900000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush57 512 catmullrom {cc {f 2080} {px x41300000 {x446ec000 x42240000 x3d4c0003} {x44718000 x42140000 x3de7ffde} {x4471c000 x42100000 x3e2afff3} {x44710000 x42240000 x3e1effe3} {x446ec000 x42580000 x3db20005} {x44704000 x42be0000 x3dc7fff9}}} {t {{x41300000 x44705550}} {{x41300000 x424aaab3}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43900000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush56 512 catmullrom {cc {f 2080} {px x41300000 {x4460c000 x41d80000 x3ce0001b} {x445d8000 x41f80000 x3d0ffff3} {x4458c000 x42140000 x3de7ffde} {x44594000 x41200000 x3e100000} {x44578000 xc0000000 x3e1e0008} {x44554000 x41000000 x3e25000d} {x44548000 x41400000 x3e25000d} {x44554000 x41200000 x3e25000d} {x4458c000 x40000000 x3df80022}}} {t {{x41300000 x4458d550}} {{x41300000 x41700000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43900000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush55 512 catmullrom {cc {f 2080} {px x41300000 {x43f58000 x42960000 x3cd80007} {x43f68000 x42980000 x3d180007} {x43f90000 x427c0000 x3e5afff3} {x43f58000 x42820000 x3e4cffeb} {x43fa0000 x42580000 x3e200000}}} {t {{x41300000 x43f74ccd}} {{x41300000 x42853333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43900000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush54 512 catmullrom {cc {f 2080} {px x41300000 {x44334000 x41700000 x3c6fffd8} {x44364000 x40a00000 x3ca7fff9}}} {t {{x41300000 x4434c000}} {{x41300000 x41200000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43900000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush53 512 catmullrom {cc {f 2080} {px x41300000 {x4422c000 x42820000 x3d000000} {x44280000 x42280000 x3df9ffd6} {x44278000 xc0000000 x3e100000} {x4428c000 x40400000 x3c8ffff3}}} {t {{x41300000 x4426c000}} {{x41300000 x41d80000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43900000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush52 512 catmullrom {cc {f 2080} {px x41300000 {x43f58000 xc0400000 x3dac0003} {x43e40000 xc1880000 x3e2effe3} {x43f80000 xc1b00000 x3e11fff8}}} {t {{x41300000 x43f08000}} {{x41300000 xc1600000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43900000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush51 512 catmullrom {cc {f 2080} {px x41300000 {x443b0000 x43848000 x3c6fffd8} {x443f4000 x43780000 x3c880014} {x4445c000 x43650000 x3cc00000} {x44460000 x43650000 x3e370004} {x44330000 x43810000 x3e4a0019} {x442ac000 x43908000 x3e7c0011} {x44280000 x43a28000 x3e7c0011} {x44278000 x43a50000 x3e7afff3} {x44268000 x43a60000 x3e78fffc} {x44264000 x43a40000 x3e1effe3} {x442dc000 x43858000 x3dfdffc5} {x44314000 x43710000 x3dea0019} {x44308000 x433e0000 x3de7ffde} {x442d8000 x432d0000 x3e61001d} {x44220000 x430a0000 x3e5e0008} {x4428c000 x43250000 x3e92fff3} {x442ac000 x430b0000 x3e857ffa} {x44248000 x42e40000 x3e99fff8} {x441a4000 x43050000 x3e9f0004} {x44188000 x43200000 x3e9b8002} {x44210000 x42e80000 x3e977ff1} {x441e8000 x428e0000 x3e9a8006} {x4411c000 x42240000 x3e9afff3} {x440f4000 x42080000 x3e938002} {x4414c000 x41200000 x3e8b8002} {x4414c000 xc0a00000 x3e5afff3} {x440b8000 xc21c0000 x3e35000d}}} {t {{x41300000 x44271550}} {{x41300000 x433112f2}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43900000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush50 512 catmullrom {cc {f 2080} {px x41300000 {x44454000 x43620000 x3da60002} {x44438000 x43650000 x3d99fffe} {x44424000 x436b0000 0}}} {t {{x41300000 x4443aab0}} {{x41300000 x43660000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43900000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush49 512 catmullrom {cc {f 2080} {px x41300000 {x4482c000 x43c60000 x3c6fffd8} {x44836000 x43b60000 x3cb0000d}}} {t {{x41300000 x44831000}} {{x41300000 x43be0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43900000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush48 512 catmullrom {cc {f 2080} {px x41300000 {x44912000 x445c8000 x3ce0001b} {x44912000 x445d8000 x3d64000a} {x44912000 x445e4000 x3d83fffd} {x44902000 x44630000 x3dc9fffe}}} {t {{x41300000 x4490e000}} {{x41300000 x445ed000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43900000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush47 512 catmullrom {cc {f 2080} {px x41300000 {x44938000 x44484000 x3d200000} {x44938000 x44474000 x3d400000} {x44960000 x443a4000 x3dd9ffd6} {x4496e000 x44334000 x3dd80022}}} {t {{x41300000 x4494f800}} {{x41300000 x443f4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43900000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush46 512 catmullrom {cc {f 2080} {px x41300000 {x44824000 x44470000 x3d27fff9} {x44820000 x44474000 x3dadfffb} {x44846000 x443f4000 x3e08fffc} {x4486c000 x44328000 x3e55000d} {x448b4000 x441f0000 x3e5afff3} {x448be000 x441a4000 x3e81800a} {x448e6000 x440fc000 x3e828006} {x448ea000 x440e0000 x3e80800f} {x448f0000 x440d0000 x3e400000}}} {t {{x41300000 x44892a8f}} {{x41300000 x44278e35}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43900000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush45 512 catmullrom {cc {f 2080} {px x41300000 {x4491c000 x44198000 x3cf7ffec} {x44920000 x4419c000 x3d24000a} {x4491c000 x441e8000 x3dadfffb} {x44918000 x44204000 0}}} {t {{x41300000 x4491c000}} {{x41300000 x441c8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush44 512 catmullrom {cc {f 2080} {px x41300000 {x448a6000 x4436c000 x3d400000} {x448dc000 x4431c000 x3d73fffd}}} {t {{x41300000 x448c1000}} {{x41300000 x44344000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush43 512 catmullrom {cc {f 2080} {px x41300000 {x445d0000 x44748000 x3cc80014} {x44628000 x4477c000 x3db3fffd} {x44658000 x447a4000 x3dce0008} {x44650000 x447a4000 0}}} {t {{x41300000 x44628000}} {{x41300000 x44783000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush42 512 catmullrom {cc {f 2080} {px x41300000 {x444ac000 x44678000 x3ce0001b} {x444b8000 x446a8000 x3d0ffff3} {x4456c000 x4471c000 x3d0ffff3}}} {t {{x41300000 x444f0000}} {{x41300000 x446beab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush41 512 catmullrom {cc {f 2080} {px x41300000 {x443bc000 x4450c000 x3d3bfff6} {x4439c000 x44534000 x3d47fff9} {x44380000 x445d0000 x3d4c0003}}} {t {{x41300000 x4439d550}} {{x41300000 x4455aab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush40 512 catmullrom {cc {f 2080} {px x41300000 {x443a4000 x44484000 x3d83fffd} {x443bc000 x44458000 x3dd1fff8} {x4439c000 x4442c000 x3e15ffe7} {x4436c000 x44438000 x3e400000} {x44390000 x444f8000 x3e5cffeb} {x44394000 x44520000 x3e5afff3} {x443c4000 x44504000 x3e300000}}} {t {{x41300000 x4439db75}} {{x41300000 x4449f6d9}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush39 512 catmullrom {cc {f 2080} {px x41300000 {x44570000 x44108000 x3da00000} {x44660000 x43fa0000 x3dac0003} {x44614000 x44030000 x3e3c0011} {x44614000 x4403c000 x3e5effe3} {x44630000 x44004000 x3e75ffe7} {x44628000 x4400c000 x3e7effe3} {x44644000 x44048000 x3e45ffe7} {x44690000 x44014000 x3de2003b} {x446a4000 x43ff0000 0}}} {t {{x41300000 x44632ab0}} {{x41300000 x4402f1cb}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush38 512 catmullrom {cc {f 2080} {px x41300000 {x44b18000 x435d0000 x3d0c0003} {x44b1a000 x43600000 x3d27fff9} {x44b0c000 x43750000 x3d89fffe}}} {t {{x41300000 x44b14a8f}} {{x41300000 x43660000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush37 512 catmullrom {cc {f 2080} {px x41300000 {x44b10000 x433d0000 x3cf7ffec} {x44b10000 x43420000 0}}} {t {{x41300000 x44b10000}} {{x41300000 x433f8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush36 512 catmullrom {cc {f 2080} {px x41300000 {x44b14000 x41200000 x3d180007} {x44b0c000 x41600000 x3d53fffd} {x44b0c000 x42280000 x3dadfffb} {x44b06000 x429c0000 x3e01001d}}} {t {{x41300000 x44b0c800}} {{x41300000 x42100000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush35 512 catmullrom {cc {f 2080} {px x41300000 {x44dde000 x42140000 x3c880014} {x44de0000 x421c0000 x3ca7fff9} {x44dec000 x426c0000 x3cd80007} {x44e1e000 x42380000 x3d1bfff6} {x44e1a000 x42000000 x3e9d000d} {x44e14000 x41d00000 x3e500000}}} {t {{x41300000 x44dfe571}} {{x41300000 x421f554d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush34 512 catmullrom {cc {f 2080} {px x41300000 {x44d34000 x42880000 x3c8ffff3} {x44d3e000 x42680000 x3ce7fff9} {x44d44000 x42600000 0}}} {t {{x41300000 x44d3ca8f}} {{x41300000 x4272aab3}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush33 512 catmullrom {cc {f 2080} {px x41300000 {x44d00000 x434c0000 x3c9fffe5} {x44d12000 x433b0000 x3d0c0003} {x44d5c000 x43050000 x3d200000}}} {t {{x41300000 x44d24a8f}} {{x41300000 x432eaac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush32 512 catmullrom {cc {f 2080} {px x41300000 {x44da0000 x44110000 x3c8ffff3} {x44db4000 x440fc000 x3d4ffff3} {x44dde000 x43fe0000 x3e500000} {x44db8000 x43e58000 x3e870004} {x44dae000 x43df8000 x3e88800f} {x44da0000 x43ca8000 x3e828006} {x44d96000 x43c20000 x3c400036}}} {t {{x41300000 x44dafb85}} {{x41300000 x43f0249c}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush31 512 catmullrom {cc {f 2080} {px x41300000 {x44b98000 x44184000 x3d04000a} {x44b8e000 x44190000 x3d3bfff6} {x44b66000 x44188000 x3d580007} {x44b98000 x440fc000 x3e45ffe7} {x44be0000 x44048000 x3e98fffc} {x44c12000 x43ea0000 x3ea1fff8} {x44c12000 x43e68000 x3ea0fffc} {x44c10000 x43e20000 x3e9a8006} {x44bb6000 x43cf8000 x3e88fffc} {x44ba0000 x43ca8000 x3e270004} {x44b94000 x43c80000 x3dd1fff8}}} {t {{x41300000 x44bbd47b}} {{x41300000 x43fbae98}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush30 512 catmullrom {cc {f 2080} {px x41300000 {x44c08000 x440c4000 x3d0ffff3} {x44c50000 x44014000 x3d4c0003} {x44c8c000 x43e58000 x3e03ffef} {x44c9a000 x43d38000 x3e1c0011} {x44c98000 x43c20000 x3e1cffeb}}} {t {{x41300000 x44c6accd}} {{x41300000 x43eacccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush29 512 catmullrom {cc {f 2080} {px x41300000 {x44ef8000 x446e0000 x3d960002} {x44eda000 x44688000 x3e25000d}}} {t {{x41300000 x44ee9000}} {{x41300000 x446b4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush28 512 catmullrom {cc {f 2080} {px x41300000 {x44cfa000 x4477c000 x3da7fff9} {x44d22000 x447b4000 x3e1cffeb} {x44d6a000 x447a4000 x3e6cffeb}}} {t {{x41300000 x44d2ca8f}} {{x41300000 x4479c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush27 512 catmullrom {cc {f 2080} {px x41300000 {x44b6c000 x44550000 x3d8dfffb} {x44b68000 x44578000 x3db9fffe} {x44b4e000 x445d8000 x3de2003b} {x44af2000 x4469c000 x3e0effe3} {x44aa4000 x446cc000 x3e730015} {x44aa4000 x446e0000 x3e6effe3} {x44aa6000 x44718000 x3e65ffe7} {x44a96000 x44768000 x3e63ffef}}} {t {{x41300000 x44af3000}} {{x41300000 x4466d000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush26 512 catmullrom {cc {f 2080} {px x41300000 {x44cb6000 x44240000 x3cb7ffec} {x44c2e000 x4433c000 x3d7bfff6}}} {t {{x41300000 x44c72000}} {{x41300000 x442be000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush25 512 catmullrom {cc {f 2080} {px x41300000 {x44ce8000 x441e8000 x3c9fffe5} {x44cd4000 x44204000 x3c4ffff3}}} {t {{x41300000 x44cde000}} {{x41300000 x441f6000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush24 512 catmullrom {cc {f 2080} {px x41300000 {x44ebe000 x44138000 x3ca7fff9} {x44efe000 x440c4000 x3d27fff9} {x44f1e000 x44060000 x3e9a8006}}} {t {{x41300000 x44ef3571}} {{x41300000 x440c9550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush23 512 catmullrom {cc {f 2080} {px x41300000 {x44ea6000 x446c0000 x3d4ffff3} {x44eb0000 x446a8000 x3d9dfffb} {x44ed6000 x44498000 x3e45ffe7} {x44ef4000 x44390000 x3edafff3} {x44f02000 x44344000 x3edd000d} {x44f2e000 x442b4000 x3edd000d} {x44f38000 x44294000 x3e98800f} {x44f4a000 x44250000 x3e500000}}} {t {{x41300000 x44efa3d7}} {{x41300000 x4440d800}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush22 512 catmullrom {cc {f 2080} {px x41300000 {x44d96000 x443b8000 x3c8ffff3} {x44e2c000 x44380000 x3ce7fff9}}} {t {{x41300000 x44de1000}} {{x41300000 x4439c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush21 512 catmullrom {cc {f 2080} {px x41300000 {x44dd4000 x446ec000 x3d800000} {x44d1c000 x44650000 x3d93fffd} {x44c50000 x445c8000 x3e770004} {x44c24000 x445a0000 x3ebb8002} {x44c12000 x4455c000 x3ec1fff8} {x44c04000 x4452c000 x3ec60008} {x44bfa000 x444ac000 x3ec9800a} {x44c38000 x44498000 x3ecd7ffa} {x44cd8000 x44430000 x3eb57ffa}}} {t {{x41300000 x44c8070a}} {{x41300000 x445671cb}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x4424c000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush20 512 catmullrom {cc {f 2080} {px x41300000 {x44f2e000 x44308000 x3c6fffd8} {x44f42000 x44440000 x3d4c0003} {x44f3c000 x444cc000 x3e01001d} {x44f32000 x44540000 x3e81fff8} {x44f32000 x4455c000 x3e53ffef} {x44f24000 x445c8000 x3e570004} {x44f20000 x44620000 x3e7c0011} {x44f16000 x446b8000 x3e3effe3}}} {t {{x41300000 x44f2d3d7}} {{x41300000 x4452a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43a18000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush19 512 catmullrom {cc {f 2080} {px x41300000 {x44f14000 x4423c000 x3ce7fff9} {x44f14000 x44248000 x3d30000d} {x44f1a000 x442a0000 x3d53fffd}}} {t {{x41300000 x44f16000}} {{x41300000 x44261550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43a18000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush18 512 catmullrom {cc {f 2080} {px x41300000 {x44f14000 x44004000 x3ce7fff9} {x44f0c000 x44020000 x3d13fffd} {x44f06000 x4408c000 x3dea0019} {x44f08000 x440f4000 x3d53fffd}}} {t {{x41300000 x44f0b800}} {{x41300000 x44069000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43a18000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush17 512 catmullrom {cc {f 2080} {px x41300000 {x44f32000 x43450000 x3cd80007} {x44f2a000 x436e0000 x3d07fff9} {x44f16000 x43a00000 x3e1effe3}}} {t {{x41300000 x44f26000}} {{x41300000 x437baac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43a18000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush16 512 catmullrom {cc {f 2080} {px x41300000 {x44f24000 x42300000 x3d07fff9} {x44f2a000 x42300000 x3d33fffd} {x44f2a000 x42400000 x3de00000}}} {t {{x41300000 x44f28000}} {{x41300000 x4235554d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43a18000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush15 512 catmullrom {cc {f 2080} {px x41300000 {x44ea0000 x41400000 x3c800000} {x44eb8000 x41200000 x3c8ffff3}}} {t {{x41300000 x44eac000}} {{x41300000 x41300000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43a18000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush14 512 catmullrom {cc {f 2080} {px x41300000 {x44dfc000 x42d20000 x3d0ffff3} {x44e0a000 x42b80000 x3d1bfff6} {x44e1e000 x428c0000 x3d27fff9}}} {t {{x41300000 x44e0c000}} {{x41300000 x42b20000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43a18000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush13 512 catmullrom {cc {f 2080} {px x41300000 {x44d18000 x41b00000 x3c8ffff3} {x44d22000 x41c00000 x3cf7ffec} {x44d2a000 x42100000 x3e0afff3} {x44d30000 x428c0000 x3e270004} {x44d34000 x42b40000 x3e1cffeb} {x44d5c000 x42f20000 x3e1c0011} {x44d6e000 x43000000 x3db80007}}} {t {{x41300000 x44d396b8}} {{x41300000 x428c492a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43a18000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush12 512 catmullrom {cc {f 2080} {px x41300000 {x44c12000 x43700000 x3ca7fff9} {x44c10000 x43780000 x3cc00000} {x44c1a000 x43940000 x3cc00000} {x44c16000 x439a0000 x3e100000} {x44c16000 x439d0000 x3dbc0003}}} {t {{x41300000 x44c14ccd}} {{x41300000 x438c999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43a18000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush11 512 catmullrom {cc {f 2080} {px x41300000 {x44b6c000 x41980000 x3c6fffd8} {x44b80000 x42400000 x3d0ffff3} {x44bba000 x42bc0000 x3db9fffe} {x44bc0000 x42d20000 x3dd1fff8} {x44bc8000 x42ea0000 x3d87fff9}}} {t {{x41300000 x44ba2ccd}} {{x41300000 x42993333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43a18000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush10 512 catmullrom {cc {f 2080} {px x41300000 {x43f80000 x4433c000 x3d0ffff3} {x43fc8000 x44408000 x3d4c0003} {x43fc8000 x4442c000 x3e7c0011} {x44034000 x4452c000 x3e7c0011} {x44058000 x445a8000 x3e89fff8} {x4414c000 x44730000 x3e957ffa} {x44168000 x44774000 x3db9fffe}}} {t {{x41300000 x44065b75}} {{x41300000 x44545b75}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43838000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush9 512 catmullrom {cc {f 2080} {px x41300000 {x43b38000 x441e8000 x3d0ffff3} {x43b78000 x4420c000 x3d27fff9} {x43ce8000 x44298000 x3e938002}}} {t {{x41300000 x43bdd560}} {{x41300000 x4422eab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43838000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush8 512 catmullrom {cc {f 2080} {px x41300000 {x43f40000 x44074000 x3d0ffff3} {x43f28000 x43fa0000 x3d33fffd} {x43f50000 x43de0000 x3e15ffe7} {x43f58000 x43c98000 x3e81800a} {x43f58000 x43a18000 x3e967ff6}}} {t {{x41300000 x43f48000}} {{x41300000 x43dd199a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43838000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush7 512 catmullrom {cc {f 2080} {px x41300000 {x43c70000 x43b28000 x3cc00000} {x43c70000 x43bf8000 x3d0ffff3} {x43c80000 x43d98000 x3e03ffef} {x43c80000 x43dd0000 x3e9e0008} {x43d20000 x43f18000 x3e9e7ff6} {x43da8000 x43ff0000 x3e99800a} {x43ec8000 x4411c000 x3e957ffa} {x43ed0000 x4417c000 x3e9c7ffe} {x43ec8000 x44218000 x3e9e0008} {x43eb8000 x44268000 x3e92fff3}}} {t {{x41300000 x43d93333}} {{x41300000 x43ff999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43838000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush6 512 catmullrom {cc {f 2080} {px x41300000 {x43b40000 x42580000 x3e3afff3} {x43b60000 x42680000 x3e430015} {x43b70000 x430d0000 x3e43ffef} {x43c28000 x43530000 x3e838002} {x43c10000 x43870000 x3e2afff3}}} {t {{x41300000 x43ba8000}} {{x41300000 x4312cccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43838000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush5 512 catmullrom {cc {f 2080} {px x41300000 {x43870000 x43810000 x3d580007} {x437a0000 x43400000 x3e31fff8} {x436c0000 x430b0000 x3e33ffef} {x435d0000 x42b00000 x3e67ffde} {x43580000 x42680000 x3e82fff3} {x43450000 x40a00000 x3e847ffe} {x43450000 xc1200000 x3e947ffe} {x435b0000 xc21c0000 x3e938002}}} {t {{x41300000 x4361c000}} {{x41300000 x42acc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43838000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush4 512 catmullrom {cc {f 2080} {px x41300000 {x42100000 x43230000 x3c8ffff3} {x42100000 x43220000 x3c9fffe5} {x42240000 x43310000 x3ccffff3} {x42580000 x43690000 x3dd9ffd6} {x42740000 x437c0000 x3dfdffc5} {x42aa0000 x439c8000 x3e01001d} {x42c20000 x43af0000 x3dfdffc5} {x42f20000 x43c60000 x3de7ffde} {x43000000 x43cd0000 x3cc00000}}} {t {{x41300000 x429271c4}} {{x41300000 x438871cb}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43838000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush3 512 catmullrom {cc {f 2080} {px x41300000 {x43aa0000 x44630000 x3ccffff3} {x439a8000 x44504000 x3d33fffd} {x43890000 x443b8000 x3de3ffef} {x43808000 x44250000 x3e500000} {x437a0000 x441e8000 x3e15ffe7} {x43760000 x441b0000 x3b40000b}}} {t {{x41300000 x438baaa0}} {{x41300000 x44378ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43838000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush2 512 catmullrom {cc {f 2080} {px x41300000 {x43a88000 x4480c000 x3d920005} {x43a08000 x44754000 x3e23ffef} {x43710000 x44598000 x3ea28006} {x435f0000 x444cc000 x3eca8006} {x43580000 x44468000 x3ebe0008}}} {t {{x41300000 x4385cccd}} {{x41300000 x4460b333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43838000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {px x41300000 {x42c80000 x44810000 x3d580007} {x42be0000 x447dc000 x3d83fffd} {x42aa0000 x446e0000 x3e5c0011} {x429c0000 x44680000 x3ea9fff8} {x42880000 x44568000 x3eb8fffc} {x42840000 x44510000 x3ec77ff1} {x42400000 x44424000 x3ecafff3} {x42400000 x443e8000 x3edf7ff1} {x42140000 x4430c000 x3ee0fffc} {x42000000 x442c8000 x3eec0011} {x41600000 x441d4000 x3ef0800f} {xc1000000 x44124000 x3ef1fff8} {xc1980000 x44048000 x3ef47ffe} {xc1e80000 x43fd8000 x3edf0004} {xc2440000 x43e80000 x3edc0011}}} {t {{x41300000 x4216eee6}} {{x41300000 x443bdde3}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3f0ccccd g x3f0ccccd b x3f0ccccd ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x43838000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}}}}}} toolbox {burn { { selectAll r 0.25 g 0.25 b 0.25 opc 0.2 bs 565 bm 3 src 1 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createOpenSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush r 0.55 g 0.55 b 0.55 opc 0.05 bs 645 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 11 ltm 11 ltt 0 tt 14 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn r 0.25 g 0.25 b 0.25 opc 0.2 bs 565 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 11 ltm 11 tt 22 } { blur bs 182 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 11 ltm 11 tt 20 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear bs 169 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 11 ltm 11 tt 22 } } } toolbar_blending_mode color-burn toolbar_paint_color {0.25 0.25 0.25 1} toolbar_opacity 0.200000003 toolbar_brush_size 565 toolbar_brush_hardness 0.200000003 toolbar_lifetime_type single toolbar_lifetime_start 11 toolbar_lifetime_end 11 toolbar_paint_source fg toolbar_source_transform_scale {1 1} toolbar_source_transform_center {960 540} colorOverlay {0 0 0 0} paint_source foreground lifetime_type "all frames" lifetime_start 39 lifetime_end 39 motionblur_on true brush_type smear brush_size 169 brush_spacing 0.05000000075 brush_hardness 0.200000003 effect_parameter1 1 source_translate_round false source_black_outside true name RotoPaint2 xpos 1907 ypos 14835 disable {{"parent.lensDirtPicker == 1 ? 0 : 1"}} } FrameHold { name FrameHold3 xpos 1907 ypos 14881 } push $Ne1809000 RotoPaint { cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 512} {t x44768000 x43fd0000} {a opc x3f19999a} {cubiccurve Smear70 512 catmullrom {cc {f 2080} {px x41300000 {x4495e000 x426c0000 x3d6c0003} {x44964000 x42600000 x3e93ffef} {x4494c000 x42a60000 x3ee3ffef} {x44944000 x42ca0000 x3d9dfffb}}} {t {{x41300000 x44954800}} {{x41300000 x42958000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear69 512 catmullrom {cc {f 2080} {px x41300000 {x44812000 x430c0000 x3d83fffd} {x44820000 x43120000 x3e9afff3} {x44824000 x43140000 x3f101ffb} {x44836000 x432b0000 x3f115ffe} {x4483a000 x43360000 x3e48fffc}}} {t {{x41300000 x4482799a}} {{x41300000 x431d6666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear68 512 catmullrom {cc {f 2080} {px x41300000 {x44330000 x43030000 x3f01dffc} {x44348000 x434b0000 x3f06a002} {x4436c000 x43510000 x3dc60002}}} {t {{x41300000 x4434c000}} {{x41300000 x43350000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear67 512 catmullrom {cc {f 2080} {px x41300000 {x43f40000 x43270000 x3e1effe3} {x43ed8000 x433f0000 x3e7effe3} {x43e30000 x435d0000 x3ee9fff8} {x43e48000 x435c0000 0}}} {t {{x41300000 x43ea4000}} {{x41300000 x4347c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear66 512 catmullrom {cc {f 2080} {px x41300000 {x43030000 x4400c000 x3ce0001b} {x432b0000 x4408c000 x3d27fff9}}} {t {{x41300000 x43170000}} {{x41300000 x4404c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear65 512 catmullrom {cc {f 2080} {px x41300000 {x42e00000 x44030000 x3cf0000d} {x42f80000 x44014000 x3cc80014}}} {t {{x41300000 x42ec0000}} {{x41300000 x44022000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear64 512 catmullrom {cc {f 2080} {px x41300000 {x42b40000 x43f58000 x3ccffff3} {x42aa0000 x43fe0000 x3db00000} {x42680000 x440f0000 x3e860008} {x42480000 x4412c000 x3ed28006}}} {t {{x41300000 x428d8000}} {{x41300000 x4406e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear63 512 catmullrom {cc {f 2080} {px x41300000 {x43a10000 x4442c000 x3d04000a} {x43a10000 x4443c000 x3d180007} {x43a00000 x44494000 x3ed1800a} {x43a30000 x444f0000 x3eec0011}}} {t {{x41300000 x43a14000}} {{x41300000 x4447b000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear62 512 catmullrom {cc {f 2080} {px x41300000 {x44278000 x4430c000 x3d600000} {x4428c000 x444dc000 x3e3a0019} {x4427c000 x444dc000 x3c800000}}} {t {{x41300000 x44280000}} {{x41300000 x44441550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear61 512 catmullrom {cc {f 2080} {px x41300000 {x441f4000 x4439c000 x3d33fffd} {x44230000 x4442c000 x3e5afff3} {x4423c000 x44474000 x3ed77ff1}}} {t {{x41300000 x44220000}} {{x41300000 x44414000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear60 512 catmullrom {cc {f 2080} {px x41300000 {x44578000 x441c8000 x3d7bfff6} {x44580000 x4429c000 x3e2c0011} {x4455c000 x4431c000 x3ee00000}}} {t {{x41300000 x44571550}} {{x41300000 x44280000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear59 512 catmullrom {cc {f 2080} {px x41300000 {x44554000 x441c8000 x3d2c0003} {x4454c000 x44204000 x3e25000d} {x4456c000 x442e4000 x3efd7ffa} {x44564000 x44324000 x3ed3ffef}}} {t {{x41300000 x4455c000}} {{x41300000 x44275000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear58 512 catmullrom {cc {f 2080} {px x41300000 {x44554000 x44204000 x3d180007} {x44554000 x4420c000 x3e1afff3} {x44588000 x442b0000 x3e99800a} {x44578000 x442c0000 x3be00005}}} {t {{x41300000 x4456a000}} {{x41300000 x44260000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear57 512 catmullrom {cc {f 2080} {px x41300000 {x44804000 x443b4000 x3d30000d} {x44808000 x443d0000 x3d44000a} {x44804000 x443e4000 x3ecb8002}}} {t {{x41300000 x44805571}} {{x41300000 x443cd550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear56 512 catmullrom {cc {f 2080} {px x41300000 {x4475c000 x44258000 x3dd80022} {x44720000 x442e8000 x3e8e0008}}} {t {{x41300000 x4473e000}} {{x41300000 x442a0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear55 512 catmullrom {cc {f 2080} {px x41300000 {x44824000 x44258000 x3d33fffd} {x44836000 x442b0000 x3d64000a}}} {t {{x41300000 x4482d000}} {{x41300000 x44284000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear54 512 catmullrom {cc {f 2080} {px x41300000 {x44820000 x441ec000 x3d5bfff6} {x44820000 x44220000 x3e65000d} {x4482c000 x4429c000 x3eff0004} {x4482c000 x442c4000 x3f09a006} {x4482c000 x442c0000 0}}} {t {{x41300000 x44827333}} {{x41300000 x4426f333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear53 512 catmullrom {cc {f 2080} {px x41300000 {x4481e000 x44234000 x3d13fffd} {x44820000 x4423c000 x3d53fffd} {x44820000 x44254000 x3ecf0004} {x44820000 x44260000 x3f071fff} {x44824000 x44284000 x3f0aa002} {x44832000 x442f8000 x3f0c6003} {x44832000 x44308000 x3e88fffc}}} {t {{x41300000 x448256b8}} {{x41300000 x44285b75}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear52 512 catmullrom {cc {f 2080} {px x41300000 {x447d4000 x441c8000 x3d64000a} {x44804000 x44294000 x3e3a0019} {x44808000 x44308000 x3f11a006} {x4480c000 x44314000 x3eb28006}}} {t {{x41300000 x44800800}} {{x41300000 x4429e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear51 512 catmullrom {cc {f 2080} {px x41300000 {x44f16000 x441e0000 x3dcc0003} {x44f16000 x44220000 x3e8e7ff6} {x44f10000 x44260000 x3ee38002}}} {t {{x41300000 x44f14000}} {{x41300000 x44220000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear50 512 catmullrom {cc {f 2080} {px x41300000 {x44f46000 x44038000 x3c800000} {x44f42000 x4404c000 x3d27fff9} {x44f3e000 x44068000 x3ee0fffc} {x44f3e000 x44124000 x3f041ffb} {x44f38000 x4417c000 x3eee7ff6}}} {t {{x41300000 x44f3f333}} {{x41300000 x440b599a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear49 512 catmullrom {cc {f 2080} {px x41300000 {x44f30000 x433b0000 x3c8ffff3} {x44f34000 x43420000 x3d0ffff3} {x44f28000 x436c0000 x3eda8006} {x44f1a000 x43928000 x3efe7ff6} {x44f16000 x43990000 x3eaf7ff1}}} {t {{x41300000 x44f2599a}} {{x41300000 x43733333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear48 512 catmullrom {cc {f 2080} {px x41300000 {x44f2c000 x43480000 x3d860002} {x44f2c000 x435d0000 x3e6cffeb} {x44f30000 x437c0000 x3efa8006} {x44f50000 x43958000 x3f05dffc} {x44f54000 x439f8000 x3f0a5ffa} {x44f50000 x439e8000 0}}} {t {{x41300000 x44f3f571}} {{x41300000 x43860000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear47 512 catmullrom {cc {f 2080} {px x41300000 {x4439c000 x43580000 x3ed57ffa} {x44324000 x43990000 x3edafff3}}} {t {{x41300000 x44360000}} {{x41300000 x43828000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear46 512 catmullrom {cc {f 2080} {px x41300000 {x44420000 x434d0000 x3df5ffe7} {x44420000 x43910000 x3ead7ffa} {x44408000 x43920000 0}}} {t {{x41300000 x44418000}} {{x41300000 x43832aa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear45 512 catmullrom {cc {f 2080} {px x41300000 {x44658000 x41c80000 x3d180007} {x44644000 x41f80000 x3d3bfff6} {x44634000 x42180000 x3e1c0011} {x44624000 x42820000 x3e770004} {x44608000 x42c20000 x3edafff3}}} {t {{x41300000 x44632666}} {{x41300000 x424ccccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear44 512 catmullrom {cc {f 2080} {px x41300000 {x4480e000 x426c0000 x3ce0001b} {x44808000 x429e0000 x3d33fffd} {x447dc000 x43020000 x3edc0011} {x447dc000 x43070000 x3d93fffd}}} {t {{x41300000 x447f9000}} {{x41300000 x42c98000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear43 512 catmullrom {cc {f 2080} {px x41300000 {x44936000 x43650000 x3d180007} {x44936000 x43660000 x3e530015} {x4492e000 x43a00000 x3ea9fff8}}} {t {{x41300000 x44933571}} {{x41300000 x4381d560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear42 512 catmullrom {cc {f 2080} {px x41300000 {x449f4000 x433b0000 x3cb0000d} {x449ee000 x433d0000 x3d33fffd} {x449e2000 x43420000 x3ecd7ffa} {x449d0000 x438b8000 x3ef8fffc} {x449e2000 x439b0000 x3f022004}}} {t {{x41300000 x449e4666}} {{x41300000 x4367cccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear41 512 catmullrom {cc {f 2080} {px x41300000 {x44b2a000 x42200000 x3d9c0003} {x44b02000 x42d00000 x3e18fffc} {x44ad8000 x43100000 x3e8f7ff1}}} {t {{x41300000 x44b01571}} {{x41300000 x42c00000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear40 512 catmullrom {cc {f 2080} {px x41300000 {x44bde000 x42100000 x3d13fffd} {x44bbe000 x42940000 x3db9fffe} {x44bb6000 x43020000 x3f04e001} {x44bb4000 x43000000 0}}} {t {{x41300000 x44bc1800}} {{x41300000 x42b80000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear39 512 catmullrom {cc {f 2080} {px x41300000 {x44d02000 x430c0000 x3cf7ffec} {x44d02000 x43140000 x3d1bfff6} {x44d06000 x43140000 x3e99800a} {x44ce8000 x43440000 x3efa8006} {x44cd4000 x436e0000 x3f0ddffc} {x44ccc000 x43800000 x3e3cffeb}}} {t {{x41300000 x44ceda8f}} {{x41300000 x433baac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear38 512 catmullrom {cc {f 2080} {px x41300000 {x44f3a000 x445f4000 x3ede0008} {x44f5e000 x44690000 x3ef9800a}}} {t {{x41300000 x44f4c000}} {{x41300000 x44642000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear37 512 catmullrom {cc {f 2080} {px x41300000 {x44ede000 x44658000 x3d67fff9} {x44ed6000 x44668000 x3e170004} {x44ed2000 x446cc000 x3f106003} {x44ede000 x446f0000 x3f12a002}}} {t {{x41300000 x44ed9000}} {{x41300000 x4469f000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear36 512 catmullrom {cc {f 2080} {px x41300000 {x44e4e000 x443fc000 x3d24000a} {x44e42000 x44404000 x3e15ffe7} {x44e30000 x444e0000 x3f041ffb} {x44e30000 x44524000 x3f155ffe}}} {t {{x41300000 x44e3c000}} {{x41300000 x44481000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear35 512 catmullrom {cc {f 2080} {px x41300000 {x44d54000 x444bc000 x3d4c0003} {x44d40000 x4454c000 x3d67fff9} {x44d54000 x44650000 x3f181ffb} {x44d58000 x4467c000 x3f041ffb}}} {t {{x41300000 x44d50000}} {{x41300000 x445b5000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear34 512 catmullrom {cc {f 2080} {px x41300000 {x41e80000 x43910000 x3d580007} {x41d80000 x439b0000 x3e75000d} {x42000000 x43a58000 x3ecd7ffa}}} {t {{x41300000 x41eaaa99}} {{x41300000 x439b2aa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear33 512 catmullrom {cc {f 2080} {px x41300000 {x438d8000 x42aa0000 x3d53fffd} {x438e0000 x42b80000 x3e88fffc} {x43900000 x42d40000 x3ef1800a} {x43920000 x42e20000 x3e070004}}} {t {{x41300000 x438f6000}} {{x41300000 x42c60000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear32 512 catmullrom {cc {f 2080} {px x41300000 {x43300000 x43660000 x3d4c0003} {x432f0000 x436e0000 x3e75ffe7} {x432f0000 x436f0000 x3ee1800a} {x43300000 x437c0000 x3ef28006} {x43340000 x43870000 x3f041ffb} {x43340000 x43898000 x3e900000}}} {t {{x41300000 x43310000}} {{x41300000 x437aaac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear31 512 catmullrom {cc {f 2080} {px x41300000 {x43300000 x437c0000 x3d1bfff6} {x432f0000 x43808000 x3e4afff3} {x43300000 x43838000 x3ec5000d} {x432d0000 x43910000 x3f05a006} {x432d0000 x43938000 x3eaa8006}}} {t {{x41300000 x432e999a}} {{x41300000 x4387b333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear30 512 catmullrom {cc {f 2080} {px x41300000 {x41800000 x44038000 x3d780007} {x41600000 x4403c000 x3e33ffef} {x41500000 x44044000 x3e9b8002} {x41100000 x440c0000 x3eb9fff8} {x41300000 x4416c000 x3ef5000d}}} {t {{x41300000 x4149999a}} {{x41300000 x44094000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear29 512 catmullrom {cc {f 2080} {px x41300000 {x431d0000 x43e30000 x3d13fffd} {x43170000 x43ea0000 x3e61fff8} {x431e0000 x43f78000 x3f0a5ffa} {x431d0000 x44030000 x3f0ddffc} {x43190000 x44030000 0}}} {t {{x41300000 x431b3333}} {{x41300000 x43f68000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear28 512 catmullrom {cc {f 2080} {px x41300000 {x43710000 x43920000 x3d33fffd} {x43710000 x43968000 x3e6effe3} {x436e0000 x43ad8000 x3f092008} {x436c0000 x43b88000 x3f0b9ffd} {x436c0000 x43b78000 0}}} {t {{x41300000 x436e6666}} {{x41300000 x43a7999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear27 512 catmullrom {cc {f 2080} {px x41300000 {x44044000 x42d80000 x3dbdfffb} {x44014000 x430e0000 x3e8d000d}}} {t {{x41300000 x4402c000}} {{x41300000 x42fa0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear26 512 catmullrom {cc {f 2080} {px x41300000 {x43ec8000 x42e60000 x3d200000} {x43e90000 x42fc0000 x3e55000d} {x43e58000 x43190000 x3ef70004} {x43e68000 x431e0000 x3e9d000d}}} {t {{x41300000 x43e86000}} {{x41300000 x430a0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear25 512 catmullrom {cc {f 2080} {px x41300000 {x445f4000 x43390000 x3d27fff9} {x445dc000 x43560000 x3e48fffc}}} {t {{x41300000 x445e8000}} {{x41300000 x43478000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear24 512 catmullrom {cc {f 2080} {px x41300000 {x447d4000 x43848000 x3ca7fff9} {x447d4000 x43850000 x3d1bfff6} {x447dc000 x43870000 x3ecd7ffa} {x447c0000 x43a48000 x3f0a2004} {x447d0000 x43b18000 x3f125ffa} {x447c8000 x43b18000 x3d83fffd}}} {t {{x41300000 x447cf51f}} {{x41300000 x43995560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear23 512 catmullrom {cc {f 2080} {px x41300000 {x448c2000 x43c98000 x3d0ffff3} {x448b8000 x43c98000 x3df80022} {x448b4000 x43c98000 x3d8dfffb}}} {t {{x41300000 x448ba000}} {{x41300000 x43c98000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear22 512 catmullrom {cc {f 2080} {px x41300000 {x443d8000 x43aa0000 x3d0ffff3} {x443e4000 x43b18000 x3e2c0011} {x443ec000 x43bb0000 x3eec7ffe} {x443e4000 x43be0000 x3da7fff9}}} {t {{x41300000 x443e3000}} {{x41300000 x43b52000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear21 512 catmullrom {cc {f 2080} {px x41300000 {x4424c000 x43eb0000 x3d0c0003} {x4424c000 x43ec0000 x3d4c0003} {x44244000 x43fc0000 x3eff0004} {x4423c000 x43ff8000 x3ed70004}}} {t {{x41300000 x44246000}} {{x41300000 x43f4a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear20 512 catmullrom {cc {f 2080} {px x41300000 {x443ec000 x43f58000 x3cb0000d} {x443ec000 x43f50000 x3d04000a} {x443f4000 x43fe8000 x3d0ffff3} {x443f4000 x44070000 x3f0a2004} {x443f4000 x44080000 x3e90800f}}} {t {{x41300000 x443f0ccd}} {{x41300000 x4400b333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear19 512 catmullrom {cc {f 2080} {px x41300000 {x44330000 x43ed8000 x3d3bfff6} {x44340000 x43f30000 x3e98fffc} {x44374000 x43fe8000 x3f012008} {x443a4000 x44060000 x3f0d2008} {x443a4000 x44068000 x3d8c0003}}} {t {{x41300000 x4436f333}} {{x41300000 x43fe6666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear18 512 catmullrom {cc {f 2080} {px x41300000 {x442f0000 x43f58000 x3d13fffd} {x442f0000 x43f68000 x3d580007} {x442f8000 x44018000 x3f05dffc} {x44338000 x4409c000 x3f186003} {x44330000 x4409c000 x3eb1800a}}} {t {{x41300000 x4430cccd}} {{x41300000 x44023333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear17 512 catmullrom {cc {f 2080} {px x41300000 {x44278000 x44108000 x3dc7fff9} {x44278000 x4411c000 x3e9d7ffa} {x44268000 x4417c000 x3edd000d} {x44260000 x44190000 x3eea8006}}} {t {{x41300000 x4426e000}} {{x41300000 x4414c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear16 512 catmullrom {cc {f 2080} {px x41300000 {x4430c000 x44284000 x3d580007} {x4430c000 x442f0000 x3e75000d} {x442f8000 x44374000 x3f065ffa}}} {t {{x41300000 x44305550}} {{x41300000 x442f8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear15 512 catmullrom {cc {f 2080} {px x41300000 {x44294000 x442e8000 x3d3bfff6} {x4428c000 x4430c000 x3e41001d} {x44284000 x44314000 x3ee5000d} {x4428c000 x443c0000 x3ef57ffa} {x442a0000 x44420000 x3f11dffc} {x442a0000 x44418000 x3d000000}}} {t {{x41300000 x44292ab0}} {{x41300000 x44380000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear14 512 catmullrom {cc {f 2080} {px x41300000 {x444a8000 x442b8000 x3d900000} {x44498000 x44324000 x3ea1800a} {x44494000 x4436c000 x3eee7ff6}}} {t {{x41300000 x4449c000}} {{x41300000 x44318000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear13 512 catmullrom {cc {f 2080} {px x41300000 {x44564000 x442f0000 x3d13fffd} {x44570000 x44338000 x3e28fffc} {x44570000 x44374000 x3ee77ff1} {x4456c000 x44378000 0}}} {t {{x41300000 x4456c000}} {{x41300000 x44345000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear12 512 catmullrom {cc {f 2080} {px x41300000 {x44620000 x445e4000 x3d3bfff6} {x44608000 x4468c000 x3dc60002}}} {t {{x41300000 x44614000}} {{x41300000 x44638000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear11 512 catmullrom {cc {f 2080} {px x41300000 {x44620000 x44594000 x3d2c0003} {x44620000 x4459c000 x3e61fff8} {x44620000 x445a4000 x3eb80000} {x44610000 x44648000 x3ee2fff3} {x44624000 x446e8000 x3f22dff8} {x44620000 x446e0000 0}}} {t {{x41300000 x4461e000}} {{x41300000 x44626000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear10 512 catmullrom {cc {f 2080} {px x41300000 {x44634000 x4459c000 x3cf0000d} {x4463c000 x445b4000 x3d33fffd} {x4462c000 x445d8000 x3f006003} {x4463c000 x4467c000 x3f1da006} {x44650000 x44684000 x3ee28006}}} {t {{x41300000 x4463b333}} {{x41300000 x44608000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear9 512 catmullrom {cc {f 2080} {px x41300000 {x448b0000 x445c8000 x3d600000} {x448b4000 x445d0000 x3e90800f} {x448b4000 x4462c000 x3ebc7ffe} {x448b0000 x446cc000 x3f115ffe} {x448a6000 x446f0000 x3f13e005}}} {t {{x41300000 x448af99a}} {{x41300000 x4464cccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear8 512 catmullrom {cc {f 2080} {px x41300000 {x44740000 x44570000 x3d27fff9} {x44738000 x44594000 x3e31001d} {x44728000 x445f4000 x3f022004} {x44754000 x446cc000 x3f15dffc} {x44764000 x446e0000 x3e68fffc}}} {t {{x41300000 x44744ccd}} {{x41300000 x44620ccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear7 512 catmullrom {cc {f 2080} {px x41300000 {x44618000 x4459c000 x3ca7fff9} {x44610000 x445b4000 x3d1bfff6} {x44618000 x445f4000 x3ed47ffe} {x44608000 x44658000 x3f1e2004} {x445f4000 x44704000 x3f25dffc} {x445fc000 x44744000 x3f252008} {x44600000 x44738000 x3cd80007}}} {t {{x41300000 x44608000}} {{x41300000 x44671b75}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear6 512 catmullrom {cc {f 2080} {px x41300000 {x44820000 x44364000 x3d70000d} {x44820000 x44374000 x3e9f0004} {x44812000 x443c8000 x3f065ffa} {x44808000 x44460000 x3f1ce001} {x44800000 x444b0000 x3f1ea002}}} {t {{x41300000 x44812000}} {{x41300000 x443f0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear5 512 catmullrom {cc {f 2080} {px x41300000 {x447c8000 x441d0000 x3cf7ffec} {x447b8000 x441e8000 x3d30000d} {x447b0000 x441fc000 x3edb8002} {x447a4000 x442a0000 x3f09dffc} {x44794000 x44340000 x3f1da006} {x4478c000 x44378000 x3f209ff9} {x44794000 x44378000 x3f1c6003} {x4478c000 x44378000 x3f176007} {x4478c000 x4436c000 x3ebe0008}}} {t {{x41300000 x447a0000}} {{x41300000 x442d2ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x432c0000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear4 512 catmullrom {cc {f 2080} {px x41300000 {x4481e000 x441a4000 x3d580007} {x44800000 x442b8000 x3e870004} {x44800000 x4430c000 x3f11a006}}} {t {{x41300000 x4480a000}} {{x41300000 x44278000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42b80000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear3 512 catmullrom {cc {f 2080} {px x41300000 {x447d4000 x4416c000 x3cb7ffec} {x447dc000 x44190000 x3d200000} {x447c8000 x441d0000 x3ef1800a} {x447b0000 x442c4000 x3f0a2004} {x447b8000 x44350000 x3f171fff} {x447b8000 x44380000 x3f19dffc} {x447b8000 x44390000 x3f149ff9} {x447b0000 x44390000 x3d7bfff6}}} {t {{x41300000 x447c0000}} {{x41300000 x442b0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42b80000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear2 512 catmullrom {cc {f 2080} {px x41300000 {x445f4000 x44218000 x3d27fff9} {x445f4000 x442b0000 x3e847ffe} {x445f4000 x4432c000 x3f21dffc} {x445dc000 x44348000 x3f206003}}} {t {{x41300000 x445ee000}} {{x41300000 x442cf000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42b80000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Smear1 512 catmullrom {cc {f 2080} {px x41300000 {x4456c000 x44158000 x3d04000a} {x4456c000 x4416c000 x3d380007} {x4455c000 x441d8000 x3ef77ff1} {x44548000 x44234000 x3f155ffe} {x44530000 x44258000 x3f179ffd} {x44530000 x44260000 x3da3fffd}}} {t {{x41300000 x4454f550}} {{x41300000 x441ec000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 bs x42b80000 bt 1 bu 1 src 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 ep1 1 tt x41b00000 nv x40000000 view2 x40000000}} {cubiccurve Brush437 512 catmullrom {cc {f 2080} {px x41300000 {x44a2e000 x439e8000 x3ed9800a} {x44a32000 x439e8000 x3ee1fff8}}} {t {{x41300000 x44a30000}} {{x41300000 x439e8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush436 512 catmullrom {cc {f 2080} {px x41300000 {x448a6000 x439b8000 x3d000000} {x448a6000 x439c8000 x3d33fffd}}} {t {{x41300000 x448a6000}} {{x41300000 x439c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush435 512 catmullrom {cc {f 2080} {px x41300000 {x4487a000 x43a40000 x3d6c0003} {x4488a000 x43a48000 x3da20005} {x44894000 x43a58000 x3ea3ffef} {x44898000 x43a58000 x3edc7ffe} {x4489c000 x43a48000 x3ee70004} {x4489c000 x43a20000 x3ee9fff8} {x4489c000 x439f8000 x3eec0011} {x4489c000 x439c8000 x3ee3ffef} {x44898000 x43990000 x3eba8006} {x4489c000 x43980000 0}}} {t {{x41300000 x44895333}} {{x41300000 x43a0b333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush434 512 catmullrom {cc {f 2080} {px x41300000 {x44886000 x41d80000 x3d200000} {x4488c000 x41d80000 x3e2c0011} {x44890000 x41d80000 x3ec3ffef} {x44894000 x41d80000 x3ede7ff6} {x44890000 x41c80000 x3ef8800f} {x4488a000 x41b00000 x3eb80000} {x44882000 x41b00000 0}}} {t {{x41300000 x4488bb85}} {{x41300000 x41ca491d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush433 512 catmullrom {cc {f 2080} {px x41300000 {x44836000 x42980000 x3d27fff9} {x44832000 x42980000 x3e070004} {x44836000 x42980000 x3e9a8006} {x44836000 x42940000 x3ea1fff8} {x44832000 x42900000 x3e4effe3}}} {t {{x41300000 x44834666}} {{x41300000 x4295999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush432 512 catmullrom {cc {f 2080} {px x41300000 {x44364000 x41100000 x3cb7ffec} {x4435c000 x40e00000 x3d0ffff3}}} {t {{x41300000 x44360000}} {{x41300000 x41000000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush431 512 catmullrom {cc {f 2080} {px x41300000 {x44470000 x43190000 x3d67fff9} {x4447c000 x43190000 x3ea1fff8} {x4447c000 x43170000 x3f071fff} {x44474000 x43150000 0}}} {t {{x41300000 x44477000}} {{x41300000 x43178000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush430 512 catmullrom {cc {f 2080} {px x41300000 {x44410000 x42a20000 x3d180007} {x44420000 x42a20000 x3e18fffc} {x44420000 x429e0000 x3e9f7ff1} {x44420000 x429a0000 x3ea38002} {x44428000 x428c0000 x3ea47ffe} {x44428000 x42940000 x3ce7fff9}}} {t {{x41300000 x44420000}} {{x41300000 x429a0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush429 512 catmullrom {cc {f 2080} {px x41300000 {x44548000 x43340000 x3e730015} {x4454c000 x43380000 x3eb38002} {x44554000 x43390000 x3f022004} {x4454c000 x43390000 x3ee28006}}} {t {{x41300000 x4454d000}} {{x41300000 x43378000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush428 512 catmullrom {cc {f 2080} {px x41300000 {x444dc000 x42c60000 x3d04000a} {x444dc000 x42be0000 x3d2c0003} {x444e0000 x42ca0000 x3ea9800a} {x444e0000 x42ce0000 x3eed000d} {x444dc000 x42d40000 x3edf7ff1} {x444dc000 x42dc0000 x3cd80007} {x444dc000 x42e00000 0}}} {t {{x41300000 x444dd24e}} {{x41300000 x42cf6d91}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush427 512 catmullrom {cc {f 2080} {px x41300000 {x44608000 x42000000 x3d13fffd} {x44608000 x42080000 x3e05ffe7} {x44610000 x42100000 x3ecd7ffa} {x44618000 x42100000 x3eb57ffa} {x44608000 x42100000 x3e88800f} {x44600000 x42100000 x3c60001b} {x445f4000 x42180000 0}}} {t {{x41300000 x446076d9}} {{x41300000 x420db6e3}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush426 512 catmullrom {cc {f 2080} {px x41300000 {x44634000 x43220000 x3d0ffff3} {x44634000 x431b0000 x3e8f7ff1}}} {t {{x41300000 x44634000}} {{x41300000 x431e8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush425 512 catmullrom {cc {f 2080} {px x41300000 {x44634000 x43560000 x3cf0000d} {x4463c000 x43560000 x3d47fff9} {x44644000 x435a0000 x3e4afff3} {x44648000 x435a0000 x3e9d7ffa} {x44648000 x435c0000 x3eba8006} {x44644000 x435a0000 x3ec57ffa} {x44648000 x435a0000 x3ebe7ff6} {x44650000 x435a0000 x3e95000d} {x44650000 x43580000 x3b800000}}} {t {{x41300000 x44645550}} {{x41300000 x43591c6a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush424 512 catmullrom {cc {f 2080} {px x41300000 {x44634000 x439d8000 x3c9fffe5} {x44658000 x43958000 x3d4ffff3} {x44648000 x43920000 x3ec47ffe} {x4463c000 x43900000 x3ec0800f}}} {t {{x41300000 x44644000}} {{x41300000 x43954000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush423 512 catmullrom {cc {f 2080} {px x41300000 {x445f4000 x43da8000 x3cf7ffec} {x445f4000 x43db8000 x3d1bfff6} {x44600000 x43db8000 x3d8c0003} {x44600000 x43dc8000 x3e31001d} {x44608000 x43dc8000 x3e63ffef} {x44610000 x43db8000 x3e867ff6} {x44610000 x43da8000 x3e960008} {x44618000 x43d80000 x3e98fffc} {x44618000 x43d70000 x3e970004} {x44618000 x43d58000 x3e91800a} {x44618000 x43d10000 x3e88fffc} {x44618000 x43ce0000 x3e770004} {x44620000 x43cc8000 x3e78fffc} {x44620000 x43c98000 x3e7a0019} {x44620000 x43c50000 x3e7c0011} {x44620000 x43c38000 x3e7e0008} {x44620000 x43c18000 x3e800000} {x44620000 x43bf8000 x3e828006} {x44624000 x43bf0000 x3e8d000d} {x44624000 x43be0000 x3e92fff3} {x44624000 x43bc0000 x3e9a8006} {x44624000 x43ba8000 x3ea38002} {x44624000 x43b98000 x3ea47ffe} {x44624000 x43b68000 x3ea5000d} {x44624000 x43b50000 x3ea5000d} {x44624000 x43b40000 x3ea38002} {x44624000 x43b20000 x3ea0fffc} {x4462c000 x43b18000 x3e9f0004} {x4462c000 x43b08000 x3ea00000} {x44634000 x43ad8000 x3ea0800f} {x44634000 x43ac0000 x3ea1800a} {x4462c000 x43aa0000 x3ea0fffc} {x44624000 x43a78000 x3e960008} {x44624000 x43a58000 x3da20005} {x44620000 x43a48000 0}}} {t {{x41300000 x4461c581}} {{x41300000 x43c28b02}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush422 512 catmullrom {cc {f 2080} {px x41300000 {x44878000 x43d28000 x3cc00000} {x4487a000 x43d38000 x3d0c0003} {x4487a000 x43d48000 x3eb8fffc} {x4487a000 x43d38000 x3ef70004} {x4487e000 x43d38000 x3ef8800f} {x4487a000 x43d10000 x3ef8800f} {x4487a000 x43cf0000 x3ef47ffe} {x44878000 x43ce0000 x3ef38002} {x4487a000 x43ce0000 x3ef77ff1} {x4487a000 x43cf0000 x3f006003} {x4487a000 x43d18000 x3f065ffa} {x4487a000 x43d38000 x3f0edff8} {x4487e000 x43d58000 x3f11a006} {x4487e000 x43d60000 x3f131fff} {x4487a000 x43d70000 x3f146003} {x4487a000 x43d80000 x3f149ff9} {x4487a000 x43d70000 x3f14e001} {x4487e000 x43d70000 x3f155ffe} {x4487e000 x43d60000 x3f155ffe} {x44882000 x43d48000 x3f152008} {x44886000 x43d28000 x3f13e005} {x4488c000 x43cf0000 x3f11dffc} {x44890000 x43cc8000 x3f0f6007} {x44894000 x43ca8000 x3f0f9ffd} {x4489c000 x43c70000 x3f0f9ffd} {x4489e000 x43c60000 x3f0f6007} {x448a2000 x43c50000 x3f0edff8} {x448a6000 x43c50000 x3f0f1fff} {x448aa000 x43c40000 x3f106003} {x448b0000 x43c40000 x3f10e001} {x448b4000 x43c38000 x3f106003} {x448bc000 x43c18000 x3f11dffc} {x448d2000 x43be0000 x3f131fff} {x448dc000 x43bc0000 x3f12a002} {x448e4000 x43ba8000 x3f10e001} {x448ea000 x43ba8000 x3f02dff8} {x448e6000 x43bb0000 0}}} {t {{x41300000 x44894dc3}} {{x41300000 x43cc67cf}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush421 512 catmullrom {cc {f 2080} {px x41300000 {x44808000 x44380000 x3cf0000d} {x44804000 x44380000 x3dc60002} {x44808000 x44380000 x3e11fff8} {x4480c000 x44380000 x3e21fff8} {x4480e000 x44380000 x3e3afff3} {x44812000 x44380000 x3e3cffeb} {x44812000 x44388000 x3e41001d} {x44812000 x44380000 x3e470004} {x4480e000 x44380000 x3e45000d} {x44812000 x44380000 x3e43ffef} {x44816000 x44380000 x3e51001d} {x44816000 x44388000 x3e870004} {x44816000 x44380000 x3e980000} {x44812000 x44380000 x3e99fff8} {x44812000 x44378000 x3e98fffc} {x4481a000 x44374000 x3e957ffa} {x4481e000 x44374000 x3e947ffe} {x44824000 x44378000 x3e93ffef} {x44828000 x44378000 x3e90fffc} {x44828000 x44374000 x3dfc0011}}} {t {{x41300000 x448144cd}} {{x41300000 x4437dccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush420 512 catmullrom {cc {f 2080} {px x41300000 {x44878000 x44600000 x3d0ffff3} {x44886000 x44610000 x3dd40032} {x448a6000 x44600000 x3eb0fffc} {x448ae000 x445fc000 x3ebe0008} {x448b8000 x445e4000 x3eaafff3} {x448c0000 x445dc000 0}}} {t {{x41300000 x448a1a8f}} {{x41300000 x445f7550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush419 512 catmullrom {cc {f 2080} {px x41300000 {x44944000 x445b4000 x3d44000a} {x44948000 x445b8000 x3dc60002} {x44944000 x445c0000 x3ec00000} {x44944000 x445b8000 x3ed67ff6}}} {t {{x41300000 x44945000}} {{x41300000 x445b9000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush418 512 catmullrom {cc {f 2080} {px x41300000 {x44968000 x444cc000 x3de00000} {x44968000 x444c4000 x3e67ffde} {x44964000 x444bc000 x3e967ff6} {x44968000 x444c4000 x3e93ffef}}} {t {{x41300000 x44967000}} {{x41300000 x444c4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush417 512 catmullrom {cc {f 2080} {px x41300000 {x4491c000 x444dc000 x3dcfffbd} {x4491a000 x444dc000 x3df00043} {x4491a000 x444e0000 x3e170004} {x4491c000 x444e8000 x3e6a0019} {x44920000 x444f0000 x3e6afff3} {x44924000 x444f0000 x3e5c0011} {x4492c000 x444f8000 x3e1c0011} {x4492e000 x444f8000 x3d9c0003} {x4492e000 x444f0000 0}}} {t {{x41300000 x44922a8f}} {{x41300000 x444eaab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush416 512 catmullrom {cc {f 2080} {px x41300000 {x448ee000 x44340000 x3d960002} {x448e6000 x44348000 x3e2e0008} {x448e6000 x44340000 x3ec2fff3} {x448e6000 x44338000 x3ec80000} {x448e4000 x44330000 x3ec60008} {x448dc000 x44314000 x3eb1fff8} {x448d8000 x44308000 x3e130015} {x448d8000 x442f8000 0}}} {t {{x41300000 x448e2000}} {{x41300000 x44328800}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush415 512 catmullrom {cc {f 2080} {px x41300000 {x44924000 x443c0000 x3df1fff8} {x44928000 x443c0000 x3e4a0019} {x44928000 x443c8000 x3e847ffe} {x4492c000 x443d8000 x3e8d000d}}} {t {{x41300000 x44928000}} {{x41300000 x443c8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush414 512 catmullrom {cc {f 2080} {px x41300000 {x44932000 x4444c000 x3d30000d} {x4493e000 x44450000 x3dd1fff8} {x44944000 x44450000 x3df1fff8} {x4493e000 x4444c000 x3ea0fffc} {x4493a000 x4444c000 x3eaafff3} {x44936000 x44444000 x3eaf0004} {x44932000 x44444000 x3eb0fffc} {x4492e000 x44444000 x3eb0fffc} {x4492e000 x4444c000 x3eb0fffc} {x44932000 x4444c000 x3ecf0004} {x44936000 x4444c000 x3ea80000} {x4493e000 x44444000 x3e01fff8}}} {t {{x41300000 x4493728f}} {{x41300000 x4444a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush413 512 catmullrom {cc {f 2080} {px x41300000 {x44f2c000 x444cc000 x3d1bfff6} {x44f34000 x444cc000 x3d53fffd} {x44f38000 x444cc000 x3e8e7ff6} {x44f3a000 x444c4000 x3eb70004} {x44f42000 x444c4000 x3ee70004} {x44f46000 x444c4000 x3e93ffef}}} {t {{x41300000 x44f39a8f}} {{x41300000 x444c8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush412 512 catmullrom {cc {f 2080} {px x41300000 {x44f26000 x445d0000 x3c8ffff3} {x44f28000 x445d0000 x3d6c0003} {x44f30000 x445d0000 x3e98800f} {x44f34000 x445dc000 x3ecf7ff1} {x44f30000 x445ec000 x3edd7ffa} {x44f30000 x445f4000 x3ed9800a} {x44f38000 x445fc000 x3ed9fff8} {x44f38000 x44600000 x3ede0008} {x44f3a000 x44608000 x3ee57ffa} {x44f38000 x44608000 x3eea8006} {x44f34000 x44608000 x3ee8fffc} {x44f30000 x44600000 x3e700000}}} {t {{x41300000 x44f32000}} {{x41300000 x445f0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush411 512 catmullrom {cc {f 2080} {px x41300000 {x44eaa000 x44620000 x3d99fffe} {x44eaa000 x44610000 x3d9c0003}}} {t {{x41300000 x44eaa000}} {{x41300000 x44618000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush410 512 catmullrom {cc {f 2080} {px x41300000 {x44e2c000 x44618000 x3c6fffd8} {x44e50000 x44618000 x3d9dfffb}}} {t {{x41300000 x44e3e000}} {{x41300000 x44618000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush409 512 catmullrom {cc {f 2080} {px x41300000 {x44e22000 x4463c000 x3d200000} {x44e1e000 x44634000 x3d70000d} {x44e22000 x4462c000 x3e21001d} {x44e26000 x4462c000 x3ee3ffef} {x44e26000 x44624000 x3e27ffde} {x44e26000 x44620000 x3b9ffffb}}} {t {{x41300000 x44e23571}} {{x41300000 x4462cab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush408 512 catmullrom {cc {f 2080} {px x41300000 {x44de8000 x44720000 x3d64000a} {x44dec000 x44720000 x3e200000} {x44de8000 x44714000 x3ed8800f} {x44de8000 x4470c000 x3ec47ffe} {x44df4000 x44704000 x3eb0fffc}}} {t {{x41300000 x44deb333}} {{x41300000 x44714000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush407 512 catmullrom {cc {f 2080} {px x41300000 {x44dcc000 x44744000 x3cd80007} {x44dec000 x4474c000 x3d64000a} {x44df0000 x44744000 x3e91fff8} {x44df0000 x44738000 x3e970004} {x44de4000 x44728000 x3d27fff9}}} {t {{x41300000 x44de599a}} {{x41300000 x4473d99a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush406 512 catmullrom {cc {f 2080} {px x41300000 {x44dda000 x44794000 x3d7bfff6} {x44dde000 x44794000 x3d8dfffb}}} {t {{x41300000 x44ddc000}} {{x41300000 x44794000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush405 512 catmullrom {cc {f 2080} {px x41300000 {x44d7c000 x447b0000 x3d73fffd} {x44d92000 x44794000 x3da3fffd}}} {t {{x41300000 x44d87000}} {{x41300000 x447a2000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush404 512 catmullrom {cc {f 2080} {px x41300000 {x44d1e000 x447b8000 x3d30000d} {x44d26000 x447b0000 x3db20005} {x44d30000 x4479c000 x3e5cffeb} {x44d34000 x4479c000 x3e2cffeb} {x44d38000 x44794000 0}}} {t {{x41300000 x44d2cccd}} {{x41300000 x447a4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush403 512 catmullrom {cc {f 2080} {px x41300000 {x44cd6000 x44770000 x3d900000} {x44cd4000 x44770000 x3da60002} {x44cd6000 x44770000 x3db00000} {x44cd6000 x44778000 x3e1a0019} {x44cda000 x44778000 x3e700000} {x44cda000 x44780000 x3e8a8006} {x44cde000 x44780000 x3e977ff1} {x44cde000 x44788000 x3eac7ffe} {x44ce2000 x44778000 x3ec0800f} {x44ce2000 x44770000 x3ec28006} {x44ce6000 x44764000 x3ec1fff8} {x44ce8000 x44754000 x3ec0fffc} {x44cf4000 x44730000 x3eb3ffef} {x44cf8000 x4471c000 x3e3a0019} {x44cfe000 x4470c000 x3e230015} {x44d06000 x446fc000 x3dfc0011}}} {t {{x41300000 x44ce4800}} {{x41300000 x4475bc08}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush402 512 catmullrom {cc {f 2080} {px x41300000 {x44cd0000 x445a4000 x3d7bfff6} {x44cd4000 x445ac000 x3d67fff9} {x44cda000 x445ac000 x3ea5000d} {x44cde000 x445ac000 0}}} {t {{x41300000 x44cd7000}} {{x41300000 x445aa000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush401 512 catmullrom {cc {f 2080} {px x41300000 {x44d34000 x444e8000 x3d5bfff6} {x44d38000 x444f0000 x3d73fffd} {x44d42000 x444f8000 x3e3e0008} {x44d46000 x444f8000 x3e7c0011} {x44d4a000 x44500000 x3e81fff8} {x44d4e000 x44504000 x3e80800f} {x44d52000 x4450c000 x3e15ffe7} {x44d52000 x44514000 x3d89fffe}}} {t {{x41300000 x44d46000}} {{x41300000 x444fd800}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush400 512 catmullrom {cc {f 2080} {px x41300000 {x44c72000 x44474000 x3d4c0003} {x44c72000 x4447c000 x3d7bfff6} {x44c72000 x44474000 x3ece0008}}} {t {{x41300000 x44c72000}} {{x41300000 x44476ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush399 512 catmullrom {cc {f 2080} {px x41300000 {x44bc6000 x444b0000 x3d8c0003} {x44bc8000 x444b0000 x3e95000d} {x44bc6000 x444a8000 x3eda8006} {x44bc8000 x444a8000 x3ee9800a} {x44bd4000 x444a8000 x3ee9800a} {x44bd8000 x444a8000 x3ee8fffc} {x44bda000 x444a8000 x3ee9fff8} {x44bda000 x444a0000 x3ed1800a} {x44bda000 x44498000 x3e33ffef} {x44bda000 x44494000 0}}} {t {{x41300000 x44bd199a}} {{x41300000 x444a5333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush398 512 catmullrom {cc {f 2080} {px x41300000 {x44b8c000 x443e0000 x3d6c0003} {x44b88000 x443e0000 x3e3cffeb} {x44b88000 x443e4000 x3eb2fff3} {x44b8c000 x443ec000 x3e23ffef}}} {t {{x41300000 x44b8a000}} {{x41300000 x443e4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush397 512 catmullrom {cc {f 2080} {px x41300000 {x44a90000 x44484000 x3ce7fff9} {x44a8c000 x44484000 x3d860002} {x44a88000 x4448c000 x3d920005} {x44a88000 x44494000 x3da00000} {x44a8c000 x44494000 x3db20005} {x44a88000 x44494000 x3ea1fff8} {x44a84000 x44494000 x3ea38002} {x44a88000 x44494000 x3ea28006} {x44a8c000 x44494000 x3ea1800a} {x44a90000 x4448c000 0}}} {t {{x41300000 x44a8a666}} {{x41300000 x4448f333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush396 512 catmullrom {cc {f 2080} {px x41300000 {x44b96000 x44174000 x3d380007} {x44b92000 x4416c000 x3e630015} {x44b96000 x4415c000 x3e570004} {x44b9a000 x44150000 x3e8b8002} {x44b9e000 x44150000 x3ec00000} {x44ba2000 x44150000 x3d400000}}} {t {{x41300000 x44b99571}} {{x41300000 x4415cab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush395 512 catmullrom {cc {f 2080} {px x41300000 {x44b38000 x44188000 x3d0c0003} {x44b3c000 x44188000 x3d4c0003} {x44b44000 x44188000 x3e80800f} {x44b48000 x44180000 x3ef00000} {x44b48000 x4417c000 x3ea9800a}}} {t {{x41300000 x44b4199a}} {{x41300000 x44184000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush394 512 catmullrom {cc {f 2080} {px x41300000 {x44a64000 x442f0000 x3d73fffd} {x44a60000 x442f0000 x3d960002} {x44a60000 x442f8000 x3e25000d} {x44a64000 x442f8000 x3e938002} {x44a64000 x442f0000 x3ebe7ff6} {x44a60000 x442f0000 x3ebe0008} {x44a60000 x442e8000 x3ebb8002} {x44a64000 x442e8000 x3eb9800a} {x44a68000 x442e8000 x3eb8800f} {x44a68000 x442f0000 x3eb8800f} {x44a68000 x442e8000 x3ebf7ff1} {x44a68000 x442e4000 x3ebafff3} {x44a6c000 x442e4000 x3ea2fff3} {x44a72000 x442dc000 x3e430015}}} {t {{x41300000 x44a65948}} {{x41300000 x442ebb75}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush393 512 catmullrom {cc {f 2080} {px x41300000 {x44aac000 x441f4000 x3d800000} {x44aa8000 x441f4000 x3db9fffe} {x44aac000 x441f4000 x3ec1800a} {x44ab0000 x441f4000 x3edafff3} {x44ab4000 x441f4000 x3edf7ff1} {x44ab8000 x441f4000 x3ee28006} {x44ab8000 x441e8000 x3ee3ffef} {x44aba000 x441e8000 x3ee2fff3} {x44ab8000 x441e0000 x3edf0004} {x44aba000 x441e0000 x3ed9800a} {x44abe000 x441d8000 x3edafff3} {x44ac2000 x441d8000 x3edc7ffe} {x44ac6000 x441d0000 x3edd000d} {x44aca000 x441d0000 x3ed57ffa} {x44acc000 x441d0000 x3eb47ffe} {x44ad0000 x441d0000 x3e130015}}} {t {{x41300000 x44abac29}} {{x41300000 x441e3800}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush392 512 catmullrom {cc {f 2080} {px x41300000 {x44aa2000 x44150000 x3db20005} {x44aa6000 x4415c000 x3e2cffeb} {x44aa2000 x4415c000 x3ef00000} {x44aa6000 x4415c000 0}}} {t {{x41300000 x44aa4000}} {{x41300000 x44159000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush391 512 catmullrom {cc {f 2080} {px x41300000 {x44a4e000 x440ec000 x3d44000a} {x44a48000 x440ec000 x3da7fff9} {x44a4e000 x440d4000 x3ee0fffc} {x44a60000 x440e4000 x3e01001d}}} {t {{x41300000 x44a51000}} {{x41300000 x440e4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush390 512 catmullrom {cc {f 2080} {px x41300000 {x43290000 x42900000 x3d7bfff6} {x43410000 x42500000 x3e78fffc}}} {t {{x41300000 x43350000}} {{x41300000 x42780000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush389 512 catmullrom {cc {f 2080} {px x41300000 {x42ea0000 x42ee0000 x3d920005} {x43020000 x42e00000 x3e857ffa} {x430e0000 x42c20000 x3e9afff3} {x431e0000 x42900000 x3e5a0019}}} {t {{x41300000 x4308c000}} {{x41300000 x42c80000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush388 512 catmullrom {cc {f 2080} {px x41300000 {x426c0000 x430b0000 x3d53fffd} {x42980000 x43030000 x3e41001d}}} {t {{x41300000 x42870000}} {{x41300000 x43070000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush387 512 catmullrom {cc {f 2080} {px x41300000 {x42100000 x43150000 x3ce0001b} {x42180000 x43150000 x3d33fffd} {x42200000 x43150000 x3eb1800a} {x42440000 x43100000 x3edafff3}}} {t {{x41300000 x42230000}} {{x41300000 x4313c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush386 512 catmullrom {cc {f 2080} {px x41300000 {x42d80000 x436e0000 x3ca7fff9} {x42d80000 x43680000 0}}} {t {{x41300000 x42d80000}} {{x41300000 x436b0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush385 512 catmullrom {cc {f 2080} {px x41300000 {x439d8000 x4408c000 x3d27fff9} {x439e8000 x44084000 x3ce0001b}}} {t {{x41300000 x439e0000}} {{x41300000 x44088000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush384 512 catmullrom {cc {f 2080} {px x41300000 {x43970000 x44080000 x3d30000d} {x439a0000 x44078000 x3d44000a}}} {t {{x41300000 x43988000}} {{x41300000 x4407c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush383 512 catmullrom {cc {f 2080} {px x41300000 {x438b8000 x44070000 x3d1bfff6} {x438d8000 x44084000 x3d4ffff3} {x438e0000 x44080000 x3d7bfff6}}} {t {{x41300000 x438d0000}} {{x41300000 x4407c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush382 512 catmullrom {cc {f 2080} {px x41300000 {x43880000 x4404c000 x3d380007} {x43890000 x4405c000 x3e0a0019}}} {t {{x41300000 x43888000}} {{x41300000 x44054000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush381 512 catmullrom {cc {f 2080} {px x41300000 {x436c0000 x44020000 x3c980007} {x43710000 x44028000 x3cf0000d} {x43818000 x44028000 x3d380007} {x43818000 x44030000 0}}} {t {{x41300000 x4378c000}} {{x41300000 x44028000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush380 512 catmullrom {cc {f 2080} {px x41300000 {x432f0000 x4403c000 x3d30000d} {x43460000 x44018000 x3d820005}}} {t {{x41300000 x433a8000}} {{x41300000 x4402a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush379 512 catmullrom {cc {f 2080} {px x41300000 {x43220000 x4404c000 x3d960002} {x43260000 x4404c000 x3d9dfffb}}} {t {{x41300000 x43240000}} {{x41300000 x4404c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush378 512 catmullrom {cc {f 2080} {px x41300000 {x43090000 x439e8000 x3e4e0008} {x43090000 x439f8000 x3eb38002}}} {t {{x41300000 x43090000}} {{x41300000 x439f0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush377 512 catmullrom {cc {f 2080} {px x41300000 {x43920000 x43c18000 x3d87fff9} {x43920000 x43c28000 x3e400000} {x43928000 x43c28000 x3e99800a}}} {t {{x41300000 x43922aa0}} {{x41300000 x43c22aa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush376 512 catmullrom {cc {f 2080} {px x41300000 {x42f40000 x437e0000 x3e25000d}}} {t {{x41300000 x42f40000}} {{x41300000 x437e0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush375 512 catmullrom {cc {f 2080} {px x41300000 {x42ea0000 x43910000 x3d7bfff6} {x42e60000 x43900000 x3e33ffef}}} {t {{x41300000 x42e80000}} {{x41300000 x43908000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush374 512 catmullrom {cc {f 2080} {px x41300000 {x437a0000 x43c18000 x3d83fffd} {x43770000 x43c18000 x3e47ffde}}} {t {{x41300000 x43788000}} {{x41300000 x43c18000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush373 512 catmullrom {cc {f 2080} {px x41300000 {x437a0000 x43ae8000 x3cf7ffec} {x43800000 x43af8000 x3d600000}}} {t {{x41300000 x437d0000}} {{x41300000 x43af0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush372 512 catmullrom {cc {f 2080} {px x41300000 {x437e0000 x43b60000 x3d400000} {x437e0000 x43b50000 x3d4c0003} {x437e0000 x43b30000 x3d27fff9}}} {t {{x41300000 x437e0000}} {{x41300000 x43b4aaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush371 512 catmullrom {cc {f 2080} {px x41300000 {x436f0000 x43b60000 x3db20005} {x43710000 x43b98000 x3e3a0019}}} {t {{x41300000 x43700000}} {{x41300000 x43b7c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush370 512 catmullrom {cc {f 2080} {px x41300000 {x435d0000 x43a48000 x3cc80014} {x43630000 x43a78000 x3d33fffd}}} {t {{x41300000 x43600000}} {{x41300000 x43a60000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush369 512 catmullrom {cc {f 2080} {px x41300000 {x43410000 x43a40000 x3d67fff9} {x43460000 x43a48000 x3e200000} {x434a0000 x43a48000 x3dee0008}}} {t {{x41300000 x4345aac1}} {{x41300000 x43a45560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush368 512 catmullrom {cc {f 2080} {px x41300000 {x432d0000 x43b40000 x3d4c0003} {x432d0000 x43b50000 x3d67fff9} {x432d0000 x43b40000 x3e8f0004}}} {t {{x41300000 x432d0000}} {{x41300000 x43b45560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush367 512 catmullrom {cc {f 2080} {px x41300000 {x43020000 x43a88000 x3d0ffff3}}} {t {{x41300000 x43020000}} {{x41300000 x43a88000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush366 512 catmullrom {cc {f 2080} {px x41300000 {x42f40000 x43ad8000 x3d400000} {x43000000 x43ad8000 x3d64000a}}} {t {{x41300000 x42fa0000}} {{x41300000 x43ad8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush365 512 catmullrom {cc {f 2080} {px x41300000 {x42dc0000 x43b18000 x3cf7ffec} {x42e00000 x43b18000 x3d580007}}} {t {{x41300000 x42de0000}} {{x41300000 x43b18000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush364 512 catmullrom {cc {f 2080} {px x41300000 {x42600000 x43c98000 x3d99fffe} {x42600000 x43ca8000 x3dd1fff8} {x42820000 x43cb8000 x3e27ffde}}} {t {{x41300000 x426c0000}} {{x41300000 x43ca8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush363 512 catmullrom {cc {f 2080} {px x41300000 {x42900000 x43b08000 x3d5bfff6} {x428c0000 x43ae8000 x3d8dfffb} {x428c0000 x43ad8000 x3e170004}}} {t {{x41300000 x428d555a}} {{x41300000 x43aed560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush362 512 catmullrom {cc {f 2080} {px x41300000 {x41c80000 x43b60000 x3c8ffff3} {x41f80000 x43b60000 x3d8dfffb} {x42000000 x43b50000 x3e43ffef} {x42180000 x43b60000 x3e45000d} {x423c0000 x43b30000 x3e4effe3}}} {t {{x41300000 x420a6666}} {{x41300000 x43b53333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush361 512 catmullrom {cc {f 2080} {px x41300000 {x440d4000 x4408c000 x3d0ffff3} {x440a4000 x44030000 x3d89fffe}}} {t {{x41300000 x440bc000}} {{x41300000 x4405e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush360 512 catmullrom {cc {f 2080} {px x41300000 {x44100000 x440dc000 x3d27fff9} {x44100000 x440c0000 x3d4ffff3} {x44100000 x440b0000 x3c980007}}} {t {{x41300000 x44100000}} {{x41300000 x440c4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush359 512 catmullrom {cc {f 2080} {px x41300000 {x44078000 x44134000 x3d400000} {x4409c000 x44114000 x3d4ffff3} {x4409c000 x440f0000 x3dc00000}}} {t {{x41300000 x44090000}} {{x41300000 x44112ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush358 512 catmullrom {cc {f 2080} {px x41300000 {x43d28000 x44348000 x3db3fffd} {x43ca8000 x44348000 x3dcc0003}}} {t {{x41300000 x43ce8000}} {{x41300000 x44348000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush357 512 catmullrom {cc {f 2080} {px x41300000 {x43ed8000 x44354000 x3dac0003} {x43e38000 x44350000 x3e4a0019}}} {t {{x41300000 x43e88000}} {{x41300000 x44352000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush356 512 catmullrom {cc {f 2080} {px x41300000 {x44070000 x44260000 x3d7bfff6} {x44068000 x4429c000 x3d9c0003} {x44070000 x442a0000 x3ed0800f} {x44078000 x442c0000 x3ed38002} {x44078000 x442cc000 x3ee5000d} {x44080000 x442cc000 x3ee2fff3} {x4403c000 x44308000 x3ee77ff1} {x44020000 x44330000 x3ee80000} {x44044000 x4431c000 x3ee3ffef} {x44060000 x4430c000 x3ed80000} {x44020000 x4431c000 x3ee2fff3} {x44030000 x44324000 x3ebd000d} {x44054000 x4430c000 x3e48fffc} {x43fe0000 x4432c000 x3ea60008} {x43f88000 x44330000 x3e18fffc}}} {t {{x41300000 x44045550}} {{x41300000 x442eeab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush355 512 catmullrom {cc {f 2080} {px x41300000 {x44038000 x441ac000 x3d0ffff3} {x44028000 x4416c000 x3d580007} {x4404c000 x44198000 x3edb8002} {x44054000 x441a0000 x3ede0008}}} {t {{x41300000 x44040000}} {{x41300000 x44194000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush354 512 catmullrom {cc {f 2080} {px x41300000 {x4404c000 x4403c000 x3d83fffd} {x4404c000 x44030000 x3dea0019} {x44020000 x43fe8000 x3e01fff8}}} {t {{x41300000 x4403d550}} {{x41300000 x44020000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush353 512 catmullrom {cc {f 2080} {px x41300000 {x4408c000 x44094000 x3d5bfff6} {x44068000 x4404c000 x3d900000}}} {t {{x41300000 x4407a000}} {{x41300000 x44070000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush352 512 catmullrom {cc {f 2080} {px x41300000 {x43fe0000 x44080000 x3df1fff8} {x43ff8000 x44030000 x3e25ffe7}}} {t {{x41300000 x43fec000}} {{x41300000 x44058000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush351 512 catmullrom {cc {f 2080} {px x41300000 {x43f78000 x44110000 x3ca7fff9} {x43f68000 x440dc000 x3d83fffd}}} {t {{x41300000 x43f70000}} {{x41300000 x440f6000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush350 512 catmullrom {cc {f 2080} {px x41300000 {x43ea0000 x44180000 x3db20005} {x43ed8000 x4417c000 x3e0c0011} {x43f50000 x4415c000 x3e200000}}} {t {{x41300000 x43eed560}} {{x41300000 x44172ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush349 512 catmullrom {cc {f 2080} {px x41300000 {x43e80000 x44330000 x3d820005} {x43f08000 x4432c000 x3d980007} {x44068000 x4430c000 x3e8e7ff6} {x4409c000 x442c0000 x3e91fff8} {x4409c000 x44278000 x3e947ffe} {x440a4000 x4423c000 x3e938002} {x440cc000 x441e8000 x3e95000d} {x440a8000 x44190000 x3ea2fff3} {x440a8000 x44174000 x3e9c7ffe} {x44078000 x44134000 x3e977ff1} {x44078000 x44110000 x3e98800f} {x44080000 x440c8000 x3e83ffef} {x4404c000 x44080000 x3e8afff3}}} {t {{x41300000 x44060000}} {{x41300000 x441f2c4a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush348 512 catmullrom {cc {f 2080} {px x41300000 {x43d60000 x442c0000 x3d70000d} {x43d80000 x442cc000 x3d960002} {x43ec0000 x442d4000 x3e857ffa} {x44038000 x442b0000 x3e8f7ff1} {x4404c000 x4427c000 x3e870004} {x44054000 x44270000 x3e43ffef} {x44068000 x44234000 x3e78fffc} {x4408c000 x44204000 x3ea0800f} {x44070000 x441d8000 x3eaafff3} {x44060000 x441c4000 x3ea1800a} {x4405c000 x44188000 x3e877ff1} {x44060000 x44150000 x3e870004} {x4404c000 x44124000 x3e8e7ff6} {x44028000 x440f0000 x3e33ffef} {x43ff8000 x440a8000 x3e2afff3} {x43fe8000 x440a4000 x3e01001d}}} {t {{x41300000 x44008c08}} {{x41300000 x441e0800}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush347 512 catmullrom {cc {f 2080} {px x41300000 {x4409c000 x41300000 x3cf0000d} {x440a4000 xc0a00000 x3dadfffb} {x440c0000 xc1c80000 x3e15ffe7}}} {t {{x41300000 x440aaab0}} {{x41300000 xc0caaaa4}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush346 512 catmullrom {cc {f 2080} {px x41300000 {x44020000 x43ae8000 x3d1bfff6} {x44020000 x43ad8000 x3da20005} {x44018000 x43a20000 x3da20005} {x44028000 x43958000 x3d07fff9} {x44028000 x43910000 x3dbc0003} {x44038000 x437c0000 x3e80fffc} {x44038000 x436a0000 x3e838002} {x44020000 x43580000 x3e31001d} {x44020000 x434d0000 x3d920005} {x4400c000 x43300000 x3d83fffd} {x44014000 x43240000 x3e15ffe7} {x44018000 x430e0000 x3d70000d} {x44020000 x43050000 x3e070004}}} {t {{x41300000 x440213b6}} {{x41300000 x4370d893}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush345 512 catmullrom {cc {f 2080} {px x41300000 {x43f58000 x42980000 x3d3bfff6} {x43fb0000 x41500000 x3d93fffd} {x43fb0000 x40e00000 x3c400036}}} {t {{x41300000 x43f92aa0}} {{x41300000 x42000000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush344 512 catmullrom {cc {f 2080} {px x41300000 {x43ef8000 x43340000 x3cc00000} {x43ed8000 x43220000 x3cc80014} {x43ef8000 x43120000 x3d73fffd} {x43f10000 x43070000 x3e25000d} {x43f20000 x42ea0000 x3dc00000} {x43f30000 x42d00000 x3d07fff9}}} {t {{x41300000 x43f06aa0}} {{x41300000 x430caac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush343 512 catmullrom {cc {f 2080} {px x41300000 {x43f10000 x43898000 x3c6fffd8} {x43ee8000 x43770000 x3ca7fff9} {x43ef8000 x43660000 x3d4ffff3} {x43ef8000 x43580000 x3d900000} {x43ef8000 x43530000 x3e130015}}} {t {{x41300000 x43ef999a}} {{x41300000 x436bcccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush342 512 catmullrom {cc {f 2080} {px x41300000 {x44d7c000 x43f20000 x3d180007} {x44d7c000 x43fc0000 x3d33fffd}}} {t {{x41300000 x44d7c000}} {{x41300000 x43f70000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush341 512 catmullrom {cc {f 2080} {px x41300000 {x44d7c000 x43d60000 x3d13fffd} {x44d80000 x43db8000 x3d27fff9} {x44d80000 x43e48000 x3d600000}}} {t {{x41300000 x44d7ea8f}} {{x41300000 x43dcaaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush340 512 catmullrom {cc {f 2080} {px x41300000 {x44d78000 x43bc0000 x3cd80007} {x44d78000 x43c80000 x3d53fffd} {x44d80000 x43d00000 x3e8e7ff6}}} {t {{x41300000 x44d7aa8f}} {{x41300000 x43c6aaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush339 512 catmullrom {cc {f 2080} {px x41300000 {x44d84000 x43898000 x3ce0001b} {x44d7c000 x43900000 x3d4ffff3} {x44d78000 x439d8000 x3df00043} {x44d76000 x43a00000 x3d920005} {x44d64000 x43ac0000 x3d180007} {x44d64000 x43b08000 x3e63ffef} {x44d60000 x43b18000 0}}} {t {{x41300000 x44d70dc3}} {{x41300000 x43a0b6e9}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush338 512 catmullrom {cc {f 2080} {px x41300000 {x44d8e000 x436e0000 x3d400000} {x44d8a000 x43780000 x3e200000} {x44d88000 x437a0000 x3e51001d} {x44d88000 x43780000 x3e98fffc} {x44d8a000 x437a0000 x3e9a8006} {x44d96000 x43750000 x3ea0800f} {x44d9a000 x436f0000 x3e9f0004} {x44d9a000 x43710000 x3e8b8002} {x44da0000 x436c0000 x3e90800f} {x44da8000 x436c0000 x3e9f7ff1} {x44da0000 x436e0000 x3ea67ff6} {x44d9c000 x43710000 x3eaf0004} {x44da8000 x436c0000 x3ecd7ffa} {x44dac000 x436f0000 x3ec47ffe} {x44da4000 x43730000 x3ec1fff8} {x44d92000 x437a0000 x3d7bfff6}}} {t {{x41300000 x44d989ec}} {{x41300000 x43726000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush337 512 catmullrom {cc {f 2080} {px x41300000 {x44dc4000 x426c0000 x3d000000} {x44d9c000 x42f20000 x3d83fffd} {x44da0000 x42f40000 x3c9fffe5} {x44da8000 x43030000 x3d3bfff6} {x44da0000 x430e0000 x3e11fff8} {x44d9c000 x43150000 x3e670004} {x44d9c000 x431b0000 x3e9afff3} {x44d9c000 x43290000 x3e200000} {x44d9a000 x43290000 x3e9c0011} {x44da0000 x43340000 x3e9c7ffe} {x44da0000 x43320000 x3eae0008} {x44da0000 x43440000 x3e95000d} {x44d9c000 x43460000 x3d400000}}} {t {{x41300000 x44da1614}} {{x41300000 x43177646}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush336 512 catmullrom {cc {f 2080} {px x41300000 {x44dc4000 x42b40000 x3d1bfff6} {x44dc0000 x42740000 x3d400000} {x44dc4000 x426c0000 x3e68fffc} {x44dc4000 x42600000 x3e31001d}}} {t {{x41300000 x44dc3000}} {{x41300000 x42850000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush335 512 catmullrom {cc {f 2080} {px x41300000 {x44dba000 x42200000 x3d2c0003} {x44dc0000 x41b00000 x3da60002} {x44dc4000 x41100000 x3e0e0008} {x44dc4000 x40e00000 x3e25000d} {x44dc4000 x40a00000 x3de3ffef}}} {t {{x41300000 x44dc1333}} {{x41300000 x4184cccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush334 512 catmullrom {cc {f 2080} {px x41300000 {x44dac000 x433d0000 x3ca7fff9} {x44da8000 x43410000 x3d04000a} {x44da4000 x43460000 x3d3bfff6} {x44da0000 x43360000 x3e270004} {x44da0000 x43100000 x3e8d000d} {x44da8000 x42dc0000 x3e99fff8} {x44dac000 x42d00000 x3e8e7ff6} {x44dac000 x42be0000 x3e88fffc} {x44dac000 x42b00000 x3e5cffeb} {x44dae000 x42aa0000 x3e530015} {x44db2000 x429e0000 x3e3e0008} {x44db2000 x428c0000 x3e18fffc} {x44db2000 x42860000 x3e21fff8} {x44db6000 x42860000 x3d860002} {x44db2000 x42740000 x3cf0000d} {x44dae000 x42580000 x3d0ffff3}}} {t {{x41300000 x44dabe14}} {{x41300000 x42df4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush333 512 catmullrom {cc {f 2080} {px x41300000 {x44db2000 x42a20000 x3c6fffd8} {x44dae000 x42600000 x3cf0000d} {x44db2000 x42100000 x3db3fffd} {x44db2000 x41f80000 x3d64000a} {x44db6000 x41500000 x3d860002} {x44dbe000 xc0000000 x3d8dfffb} {x44dc0000 xc1800000 x3d900000} {x44dc0000 xc1a00000 x3d53fffd}}} {t {{x41300000 x44db7000}} {{x41300000 x41b30000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush332 512 catmullrom {cc {f 2080} {px x41300000 {x44dae000 x42e00000 x3ca7fff9} {x44db2000 x42d00000 x3c880014}}} {t {{x41300000 x44db0000}} {{x41300000 x42d80000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush331 512 catmullrom {cc {f 2080} {px x41300000 {x44d9c000 x43320000 x3d1bfff6} {x44d9a000 x43220000 x3d9c0003}}} {t {{x41300000 x44d9b000}} {{x41300000 x432a0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush330 512 catmullrom {cc {f 2080} {px x41300000 {x44d76000 x43c80000 x3d04000a} {x44d7c000 x43c40000 x3d400000} {x44d78000 x43b18000 x3e3e0008} {x44d8a000 x439c8000 x3e870004} {x44d9a000 x43870000 x3e89fff8} {x44da0000 x43750000 x3e960008} {x44da0000 x435f0000 x3e947ffe} {x44da0000 x43540000 x3e8e7ff6} {x44da0000 x434d0000 x3e3effe3} {x44da0000 x43460000 x3dc20005} {x44d9c000 x433b0000 x3e3a0019}}} {t {{x41300000 x44d925c3}} {{x41300000 x43885d0e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush329 512 catmullrom {cc {f 2080} {px x41300000 {x44d1e000 x438f0000 x3d53fffd} {x44d14000 x43968000 x3e2effe3} {x44d14000 x439a0000 x3d64000a}}} {t {{x41300000 x44d17571}} {{x41300000 x43952aa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush328 512 catmullrom {cc {f 2080} {px x41300000 {x44d14000 x43730000 x3d180007} {x44d18000 x437a0000 x3d44000a} {x44d1c000 x43870000 x3e90fffc}}} {t {{x41300000 x44d18000}} {{x41300000 x437e553f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush327 512 catmullrom {cc {f 2080} {px x41300000 {x44d30000 x43360000 x3d33fffd} {x44d34000 x43200000 x3d64000a} {x44d40000 x42f40000 x3d0ffff3} {x44d40000 x42ea0000 x3db00000} {x44d42000 x42c60000 x3dadfffb} {x44d42000 x429e0000 x3da00000} {x44d4a000 x42600000 x3da00000} {x44d4a000 x42180000 x3da20005} {x44d52000 x41b80000 x3da20005} {x44d52000 x41100000 x3db3fffd} {x44d5c000 xc0a00000 x3d9dfffb} {x44d66000 xc1c80000 x3da9fffe} {x44d6a000 xc1f80000 x3c60001b}}} {t {{x41300000 x44d4ac29}} {{x41300000 x427d89d5}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush326 512 catmullrom {cc {f 2080} {px x41300000 {x44d2e000 x43650000 x3cf0000d} {x44d2e000 x43530000 x3d580007} {x44d2e000 x434f0000 x3d04000a}}} {t {{x41300000 x44d2e000}} {{x41300000 x4357aac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush325 512 catmullrom {cc {f 2080} {px x41300000 {x44d2a000 x43808000 x3d24000a} {x44d2e000 x436a0000 x3d580007} {x44d2e000 x43680000 x3b9ffffb}}} {t {{x41300000 x44d2ca8f}} {{x41300000 x43710000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush324 512 catmullrom {cc {f 2080} {px x41300000 {x44d26000 x43910000 x3ce7fff9} {x44d2a000 x43900000 x3d1bfff6} {x44d22000 x43880000 x3ea1fff8} {x44d22000 x43850000 x3ca7fff9}}} {t {{x41300000 x44d25000}} {{x41300000 x438b8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush323 512 catmullrom {cc {f 2080} {px x41300000 {x43dd8000 x441d8000 x3ce7fff9} {x43db8000 x44188000 x3d900000} {x43db8000 x44174000 x3b40000b}}} {t {{x41300000 x43dc2aa0}} {{x41300000 x4419c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush322 512 catmullrom {cc {f 2080} {px x41300000 {x43dc8000 x442cc000 x3c980007} {x43dd8000 x44284000 x3d93fffd}}} {t {{x41300000 x43dd0000}} {{x41300000 x442a8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush321 512 catmullrom {cc {f 2080} {px x41300000 {x43d60000 x444a0000 x3d67fff9} {x43d90000 x44494000 x3d860002}}} {t {{x41300000 x43d78000}} {{x41300000 x4449a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush320 512 catmullrom {cc {f 2080} {px x41300000 {x43d70000 x44540000 x3d6c0003} {x43d70000 x44528000 x3d93fffd}}} {t {{x41300000 x43d70000}} {{x41300000 x44534000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush319 512 catmullrom {cc {f 2080} {px x41300000 {x43d60000 x4459c000 x3d3bfff6} {x43d60000 x445b4000 x3d47fff9} {x43d60000 x44594000 x3ea8fffc}}} {t {{x41300000 x43d60000}} {{x41300000 x445a1550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush318 512 catmullrom {cc {f 2080} {px x41300000 {x43d18000 x446a0000 x3d04000a} {x43d28000 x446b4000 x3d33fffd} {x43d18000 x446b0000 x3eae0008} {x43d18000 x446a8000 x3e9f0004} {x43d38000 x446b4000 x3ea0800f} {x43d28000 x44684000 x3edf7ff1} {x43d38000 x4468c000 x3ee0fffc} {x43d18000 x44658000 x3eec0011} {x43d28000 x44668000 x3eea8006} {x43d28000 x44648000 x3eee7ff6} {x43d38000 x4463c000 x3e7c0011}}} {t {{x41300000 x43d268b4}} {{x41300000 x44684ba6}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush317 512 catmullrom {cc {f 2080} {px x41300000 {x43d00000 x44770000 x3ce0001b} {x43d10000 x44754000 x3d07fff9} {x43d18000 x44740000 x3e71fff8} {x43d18000 x44744000 x3e68fffc} {x43d38000 x44714000 x3e98800f}}} {t {{x41300000 x43d18000}} {{x41300000 x4474599a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush316 512 catmullrom {cc {f 2080} {px x41300000 {x43cb8000 x447e4000 x3d1bfff6} {x43cc8000 x447e4000 x3d44000a} {x43cd0000 x447d0000 x3df5ffe7}}} {t {{x41300000 x43cc5560}} {{x41300000 x447dd51f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush315 512 catmullrom {cc {f 2080} {px x41300000 {x43d10000 x446fc000 x3d2c0003}}} {t {{x41300000 x43d10000}} {{x41300000 x446fc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush314 512 catmullrom {cc {f 2080} {px x41300000 {x43d18000 x446b4000 x3d30000d} {x43d00000 x446b4000 x3d47fff9}}} {t {{x41300000 x43d0c000}} {{x41300000 x446b4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush313 512 catmullrom {cc {f 2080} {px x41300000 {x43d70000 x44588000 x3d04000a} {x43d70000 x445c0000 x3d0ffff3} {x43d58000 x445ec000 x3e100000} {x43d48000 x44610000 x3d0ffff3} {x43d38000 x44618000 x3d000000} {x43d28000 x44644000 x3dc60002} {x43d28000 x44650000 x3e1effe3} {x43d28000 x44668000 x3e18fffc} {x43d18000 x44684000 x3e170004} {x43d10000 x4468c000 x3e25ffe7}}} {t {{x41300000 x43d3c000}} {{x41300000 x44624000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush312 512 catmullrom {cc {f 2080} {px x41300000 {x43d70000 x444a0000 x3d07fff9} {x43d80000 x4448c000 x3d64000a} {x43d90000 x443f4000 x3d860002} {x43d80000 x44364000 x3dd80022}}} {t {{x41300000 x43d80000}} {{x41300000 x44421000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush311 512 catmullrom {cc {f 2080} {px x41300000 {x43da8000 x44340000 x3ccffff3} {x43db8000 x442d4000 x3d580007} {x43db8000 x442a8000 x3df1fff8} {x43da8000 x44268000 x3df5ffe7} {x43da8000 x44254000 x3db9fffe}}} {t {{x41300000 x43dae666}} {{x41300000 x442b199a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush310 512 catmullrom {cc {f 2080} {px x41300000 {x43cf0000 x44816000 x3d07fff9} {x43d18000 x44800000 x3d44000a} {x43d28000 x447c0000 x3df40032} {x43d28000 x44778000 x3e4c0011} {x43d38000 x4475c000 x3e4cffeb} {x43d38000 x44738000 x3e4afff3} {x43d28000 x44714000 x3e4c0011} {x43d28000 x446f0000 x3e4c0011} {x43d28000 x446c4000 x3e45ffe7} {x43d38000 x4468c000 x3e300000} {x43d28000 x4463c000 x3e08fffc} {x43d28000 x44608000 x3e07ffde} {x43d28000 x445d0000 x3de6002a} {x43d38000 x445b4000 x3dd9ffd6} {x43d48000 x44564000 x3de6002a} {x43d60000 x44538000 x3e030015} {x43d70000 x444f8000 x3e03ffef} {x43d80000 x444d4000 x3e1a0019} {x43d80000 x444b0000 x3e1c0011} {x43d70000 x44494000 x3e13ffef} {x43d70000 x4448c000 x3c8ffff3}}} {t {{x41300000 x43d3e7ae}} {{x41300000 x44640927}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs 1 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush309 512 catmullrom {cc {f 2080} {px x41300000 {x43d38000 x447d0000 x3cd80007} {x43d38000 x447a4000 x3ce0001b} {x43d38000 x44788000 x3d0c0003}}} {t {{x41300000 x43d38000}} {{x41300000 x447a951f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush308 512 catmullrom {cc {f 2080} {px x41300000 {x440dc000 x43d38000 x3d73fffd} {x440e4000 x43d58000 x3d47fff9}}} {t {{x41300000 x440e0000}} {{x41300000 x43d48000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush307 512 catmullrom {cc {f 2080} {px x41300000 {x44070000 x43d28000 x3d000000} {x44068000 x43d38000 x3d1bfff6} {x44078000 x43d58000 x3e400000}}} {t {{x41300000 x44070000}} {{x41300000 x43d3d560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush306 512 catmullrom {cc {f 2080} {px x41300000 {x440d4000 x43d48000 x3ce0001b}}} {t {{x41300000 x440d4000}} {{x41300000 x43d48000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush305 512 catmullrom {cc {f 2080} {px x41300000 {x44038000 x43c98000 x3d07fff9} {x44068000 x43cd0000 x3d380007}}} {t {{x41300000 x44050000}} {{x41300000 x43cb4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush304 512 catmullrom {cc {f 2080} {px x41300000 {x43fa0000 x43be0000 x3cb0000d} {x43fa0000 x43bd0000 x3d1bfff6} {x43fb0000 x43be0000 x3e6effe3} {x4400c000 x43c70000 x3e877ff1} {x44020000 x43c80000 x3e3cffeb} {x44020000 x43c88000 x3a7ffff7}}} {t {{x41300000 x43fec000}} {{x41300000 x43c2c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush303 512 catmullrom {cc {f 2080} {px x41300000 {x44140000 x43c20000 x3d73fffd} {x4414c000 x43c40000 x3e05000d} {x4414c000 x43c30000 x3e977ff1}}} {t {{x41300000 x44148000}} {{x41300000 x43c30000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush302 512 catmullrom {cc {f 2080} {px x41300000 {x44130000 x43ae0000 x3d000000} {x44134000 x43ae0000 x3d4c0003} {x44134000 x43af0000 x3e81fff8}}} {t {{x41300000 x44132ab0}} {{x41300000 x43ae5560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush301 512 catmullrom {cc {f 2080} {px x41300000 {x4459c000 x437b0000 x3e33ffef} {x445a4000 x437e0000 x3e7effe3} {x445a8000 x43800000 x3e88800f}}} {t {{x41300000 x445a2ab0}} {{x41300000 x437daac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush300 512 catmullrom {cc {f 2080} {px x41300000 {x4456c000 x43a98000 x3d87fff9} {x44578000 x43a90000 x3d83fffd} {x44580000 x43a80000 x3e8d7ffa}}} {t {{x41300000 x44576ab0}} {{x41300000 x43a8d560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush299 512 catmullrom {cc {f 2080} {px x41300000 {x4471c000 x439f0000 x3d0ffff3} {x44724000 x43a00000 x3e6c0011} {x44724000 x439f0000 x3eb9fff8}}} {t {{x41300000 x44721550}} {{x41300000 x439f5560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush298 512 catmullrom {cc {f 2080} {px x41300000 {x44860000 x43ae0000 x3d13fffd} {x44864000 x43ae8000 x3d800000} {x44864000 x43af8000 x3e9f0004}}} {t {{x41300000 x44862a8f}} {{x41300000 x43aeaaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush297 512 catmullrom {cc {f 2080} {px x41300000 {x44828000 x43cc0000 x3d1bfff6} {x44828000 x43cc8000 x3d47fff9} {x44828000 x43cd8000 x3e6a0019} {x44830000 x43cc8000 x3e730015} {x4482e000 x43cc0000 x3e55ffe7}}} {t {{x41300000 x4482accd}} {{x41300000 x43cc8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush296 512 catmullrom {cc {f 2080} {px x41300000 {x44816000 x43db8000 x3c880014} {x44818000 x43d98000 x3d33fffd} {x44818000 x43da0000 x3da9fffe} {x4481c000 x43da0000 x3e0afff3} {x4481c000 x43d98000 x3e27ffde} {x44818000 x43d80000 x3cf0000d}}} {t {{x41300000 x44819000}} {{x41300000 x43d9c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush295 512 catmullrom {cc {f 2080} {px x41300000 {x44c26000 x42920000 x3dbc0003} {x44c36000 x42680000 x3e8b8002}}} {t {{x41300000 x44c2e000}} {{x41300000 x42830000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush294 512 catmullrom {cc {f 2080} {px x41300000 {x44b16000 x42900000 x3cb7ffec} {x44b18000 x428c0000 x3d33fffd} {x44b1e000 x428a0000 x3dc00000}}} {t {{x41300000 x44b19571}} {{x41300000 x428caaa6}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush293 512 catmullrom {cc {f 2080} {px x41300000 {x44b6c000 x42d20000 x3db9fffe} {x44b58000 x42cc0000 x3e83ffef}}} {t {{x41300000 x44b62000}} {{x41300000 x42cf0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush292 512 catmullrom {cc {f 2080} {px x41300000 {x44b34000 x42e00000 x3d93fffd} {x44b58000 x42e60000 x3e1effe3} {x44b54000 x42e40000 x3c0ffffd}}} {t {{x41300000 x44b4aa8f}} {{x41300000 x42e35581}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush291 512 catmullrom {cc {f 2080} {px x41300000 {x44a9e000 x430a0000 x3d04000a} {x44a9e000 x430b0000 x3d27fff9} {x44a9e000 x430d0000 x3e21001d} {x44aa6000 x430a0000 x3e928006}}} {t {{x41300000 x44aa0000}} {{x41300000 x430b0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush290 512 catmullrom {cc {f 2080} {px x41300000 {x44ab6000 x43200000 x3e270004} {x44ab6000 x431f0000 x3ea57ffa} {x44ab0000 x431a0000 x3eb0fffc} {x44aac000 x43190000 0}}} {t {{x41300000 x44ab2000}} {{x41300000 x431c8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush289 512 catmullrom {cc {f 2080} {px x41300000 {x44a02000 x43590000 x3da60002} {x449fe000 x435b0000 x3e470004} {x44a1a000 x435b0000 x3e960008}}} {t {{x41300000 x44a08a8f}} {{x41300000 x435a553f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush288 512 catmullrom {cc {f 2080} {px x41300000 {x44ac4000 x43590000 x3d0ffff3} {x44ad0000 x43590000 x3e11001d} {x44ac4000 x435b0000 x3ed77ff1}}} {t {{x41300000 x44ac8000}} {{x41300000 x4359aac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush287 512 catmullrom {cc {f 2080} {px x41300000 {x44bde000 x433b0000 x3d8c0003} {x44bdc000 x433d0000 x3e960008}}} {t {{x41300000 x44bdd000}} {{x41300000 x433c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush286 512 catmullrom {cc {f 2080} {px x41300000 {x44b42000 x43610000 x3d000000} {x44b40000 x435f0000 x3ddc0011} {x44b54000 x435f0000 x3e91fff8} {x44b5a000 x435e0000 0}}} {t {{x41300000 x44b4c000}} {{x41300000 x435f4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush285 512 catmullrom {cc {f 2080} {px x41300000 {x44c02000 x43bd8000 x3da3fffd} {x44bfc000 x43be8000 x3e81fff8} {x44c02000 x43be8000 x3ed38002}}} {t {{x41300000 x44c00000}} {{x41300000 x43be2aa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush284 512 catmullrom {cc {f 2080} {px x41300000 {x44bd2000 x43ab0000 x3cc80014} {x44bd6000 x43ab8000 x3e3afff3} {x44bd2000 x43ab0000 x3e9d7ffa} {x44bd6000 x43ab8000 x3dd40032}}} {t {{x41300000 x44bd4000}} {{x41300000 x43ab4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush283 512 catmullrom {cc {f 2080} {px x41300000 {x44d3e000 x434c0000 x3d30000d} {x44d40000 x434c0000 x3e9d000d}}} {t {{x41300000 x44d3f000}} {{x41300000 x434c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush282 512 catmullrom {cc {f 2080} {px x41300000 {x44d64000 x41c80000 x3e967ff6} {x44d62000 x41b00000 x3ea77ff1}}} {t {{x41300000 x44d63000}} {{x41300000 x41bc0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush281 512 catmullrom {cc {f 2080} {px x41300000 {x44c8a000 x421c0000 x3cf0000d} {x44ca4000 x421c0000 x3d200000}}} {t {{x41300000 x44c97000}} {{x41300000 x421c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush280 512 catmullrom {cc {f 2080} {px x41300000 {x44d44000 x41900000 x3d580007} {x44d40000 x41980000 x3e31001d} {x44d1c000 x41c00000 x3e55ffe7}}} {t {{x41300000 x44d35571}} {{x41300000 x41a2aa99}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush279 512 catmullrom {cc {f 2080} {px x41300000 {x44d44000 x42400000 x3cf0000d} {x44d44000 x42380000 x3d24000a}}} {t {{x41300000 x44d44000}} {{x41300000 x423c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush278 512 catmullrom {cc {f 2080} {px x41300000 {x44d46000 x425c0000 x3d33fffd} {x44d4a000 x425c0000 x3e45ffe7} {x44d4c000 x425c0000 x3e9f0004} {x44d4a000 x42500000 x3eb67ff6} {x44d4a000 x424c0000 0}}} {t {{x41300000 x44d4999a}} {{x41300000 x42566666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42440000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush277 512 catmullrom {cc {f 2080} {px x41300000 {x44d6a000 x42100000 x3d67fff9} {x44d70000 x42100000 x3dadfffb}}} {t {{x41300000 x44d6d000}} {{x41300000 x42100000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x41d80000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush276 512 catmullrom {cc {f 2080} {px x41300000 {x44d50000 x42680000 x3ce0001b} {x44d4a000 x42640000 x3d0ffff3}}} {t {{x41300000 x44d4d000}} {{x41300000 x42660000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x41d80000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush275 512 catmullrom {cc {f 2080} {px x41300000 {x44d4a000 x42bc0000 x3cf0000d} {x44d58000 x42ae0000 x3db3fffd}}} {t {{x41300000 x44d51000}} {{x41300000 x42b50000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x41d80000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush274 512 catmullrom {cc {f 2080} {px x41300000 {x44d22000 x43040000 x3d0ffff3} {x44d38000 x42fc0000 x3e730015} {x44d46000 x42f20000 x3ecafff3}}} {t {{x41300000 x44d35571}} {{x41300000 x42fcaa7f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x41d80000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush273 512 catmullrom {cc {f 2080} {px x41300000 {x44d08000 x43290000 x3d1bfff6} {x44d14000 x43260000 x3d89fffe} {x44d28000 x43220000 x3eb38002} {x44d44000 x431c0000 x3eb8800f} {x44d4a000 x43190000 x3d0c0003}}} {t {{x41300000 x44d2a000}} {{x41300000 x43213333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x41d80000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush272 512 catmullrom {cc {f 2080} {px x41300000 {x44d34000 x42f80000 x3cf0000d} {x44d32000 x42fc0000 x3e300000} {x44d34000 x42f80000 x3eaa8006} {x44d40000 x42f20000 x3ebb8002} {x44d50000 x42ec0000 x3e857ffa}}} {t {{x41300000 x44d3b99a}} {{x41300000 x42f53333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x41d80000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush271 512 catmullrom {cc {f 2080} {px x41300000 {x44cf8000 x43340000 x3d27fff9} {x44cfc000 x43340000 x3d8c0003} {x44d10000 x432e0000 x3e857ffa} {x44d56000 x43170000 x3e9b8002}}} {t {{x41300000 x44d16800}} {{x41300000 x432b4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush270 512 catmullrom {cc {f 2080} {px x41300000 {x44cec000 x43280000 x3ccffff3} {x44cf0000 x43280000 x3d380007} {x44d20000 x431c0000 x3e5c0011} {x44d52000 x430a0000 x3ea9800a}}} {t {{x41300000 x44d13800}} {{x41300000 x431d8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush269 512 catmullrom {cc {f 2080} {px x41300000 {x44ca2000 x43280000 x3d87fff9} {x44c9e000 x432c0000 x3e27ffde}}} {t {{x41300000 x44ca0000}} {{x41300000 x432a0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush268 512 catmullrom {cc {f 2080} {px x41300000 {x44ca8000 x43130000 x3ca7fff9} {x44caa000 x43130000 x3d33fffd} {x44cb6000 x43110000 x3ec28006} {x44cbc000 x43100000 x3ec60008} {x44cbc000 x43130000 x3e6cffeb} {x44cba000 x43160000 x3e33ffef}}} {t {{x41300000 x44cb4571}} {{x41300000 x4312aac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush267 512 catmullrom {cc {f 2080} {px x41300000 {x44c8c000 x430e0000 x3cc00000} {x44c98000 x43130000 x3d0c0003}}} {t {{x41300000 x44c92000}} {{x41300000 x43108000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush266 512 catmullrom {cc {f 2080} {px x41300000 {x44d3a000 xc0c00000 x3d1bfff6} {x44d3e000 xc0c00000 x3d24000a} {x44d4a000 xc1000000 x3e8d7ffa} {x44d46000 xc0c00000 x3e31001d}}} {t {{x41300000 x44d42000}} {{x41300000 xc0d00000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush265 512 catmullrom {cc {f 2080} {px x41300000 {x44e90000 0 x3d7bfff6} {x44e9c000 xc0c00000 x3e857ffa}}} {t {{x41300000 x44e96000}} {{x41300000 xc0400000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush264 512 catmullrom {cc {f 2080} {px x41300000 {x44e16000 x41100000 x3d200000} {x44e2a000 x40800000 x3d400000} {x44e30000 x40400000 x3e8afff3}}} {t {{x41300000 x44e25571}} {{x41300000 x40aaaaa4}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush263 512 catmullrom {cc {f 2080} {px x41300000 {x44de0000 x40e00000 x3d44000a} {x44dfe000 x41100000 x3dce0008} {x44e00000 x41100000 x3c880014} {x44e04000 x41100000 0}}} {t {{x41300000 x44df8800}} {{x41300000 x41080000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush262 512 catmullrom {cc {f 2080} {px x41300000 {x44db8000 x40e00000 x3d0c0003} {x44db6000 x40e00000 x3d27fff9}}} {t {{x41300000 x44db7000}} {{x41300000 x40e00000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush261 512 catmullrom {cc {f 2080} {px x41300000 {x44da4000 x42340000 x3cd80007} {x44da6000 x42380000 x3e27ffde} {x44db2000 x42340000 x3ec57ffa} {x44db6000 x42280000 x3ed0800f} {x44dbe000 x422c0000 x3eb47ffe} {x44dc2000 x42280000 x3eb3ffef} {x44dc2000 x42140000 x3dc60002}}} {t {{x41300000 x44db523d}} {{x41300000 x422b6dac}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush260 512 catmullrom {cc {f 2080} {px x41300000 {x44e88000 x43020000 x3d70000d} {x44e9a000 x43020000 x3e88800f} {x44e96000 x43050000 x3dc3fffd}}} {t {{x41300000 x44e92a8f}} {{x41300000 x43030000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush259 512 catmullrom {cc {f 2080} {px x41300000 {x44e24000 x42ec0000 x3d13fffd} {x44e24000 x42f00000 x3e27ffde} {x44e34000 x42e00000 x3e870004} {x44e48000 x42e40000 x3e8e7ff6} {x44e5a000 x42e60000 x3e857ffa}}} {t {{x41300000 x44e39333}} {{x41300000 x42e7999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush258 512 catmullrom {cc {f 2080} {px x41300000 {x44f32000 x43380000 x3d27fff9} {x44f38000 x43380000 x3e23ffef} {x44f4e000 x43320000 x3e8e0008} {x44f6c000 x43280000 x3ec1800a} {x44f6e000 x43280000 0}}} {t {{x41300000 x44f50666}} {{x41300000 x43306666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush257 512 catmullrom {cc {f 2080} {px x41300000 {x44d8e000 x43790000 x3d2c0003} {x44d76000 x437c0000 x3de3ffef}}} {t {{x41300000 x44d82000}} {{x41300000 x437a8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush256 512 catmullrom {cc {f 2080} {px x41300000 {x44db6000 x436b0000 x3cc00000} {x44db6000 x436d0000 x3d27fff9} {x44db0000 x436e0000 x3e01fff8} {x44da6000 x436d0000 x3e0cffeb} {x44daa000 x436d0000 x3e01001d} {x44dac000 x436e0000 x3e770004} {x44da6000 x43700000 x3cb0000d}}} {t {{x41300000 x44dad6b8}} {{x41300000 x436d6dd3}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush255 512 catmullrom {cc {f 2080} {px x41300000 {x44f78000 x43370000 x3cb0000d} {x44f7a000 x43340000 x3d180007}}} {t {{x41300000 x44f79000}} {{x41300000 x43358000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush254 512 catmullrom {cc {f 2080} {px x41300000 {x44f50000 x433e0000 x3d400000} {x44f54000 x43430000 x3e2c0011} {x44f54000 x43440000 x3e7afff3} {x44f68000 x433e0000 x3e7cffeb} {x44f7a000 x43340000 x3e55ffe7}}} {t {{x41300000 x44f5eccd}} {{x41300000 x433e3333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush253 512 catmullrom {cc {f 2080} {px x41300000 {x44f5a000 x431f0000 x3d180007} {x44f5c000 x431d0000 x3df5ffe7}}} {t {{x41300000 x44f5b000}} {{x41300000 x431e0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush252 512 catmullrom {cc {f 2080} {px x41300000 {x44f02000 x43340000 x3d2c0003} {x44f08000 x43350000 x3e8e0008} {x44f18000 x43310000 x3e8e7ff6} {x44f1e000 x432f0000 x3e63ffef} {x44f20000 x43320000 x3e6a0019} {x44f20000 x43310000 x3e900000} {x44f26000 x432c0000 x3e90800f}}} {t {{x41300000 x44f17b85}} {{x41300000 x4331249c}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush251 512 catmullrom {cc {f 2080} {px x41300000 {x44d68000 x43c98000 x3d1bfff6} {x44d6e000 x43c90000 x3d3bfff6}}} {t {{x41300000 x44d6b000}} {{x41300000 x43c94000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush250 512 catmullrom {cc {f 2080} {px x41300000 {x44d4a000 x43ce0000 x3d0ffff3} {x44d4c000 x43ce0000 x3d33fffd} {x44d52000 x43cf0000 x3e83ffef} {x44d5e000 x43ca8000 x3ea1fff8}}} {t {{x41300000 x44d51800}} {{x41300000 x43cd6000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush249 512 catmullrom {cc {f 2080} {px x41300000 {x44d5c000 x43e40000 x3d33fffd} {x44d56000 x43e30000 x3e48fffc} {x44d58000 x43e28000 x3cf0000d} {x44d56000 x43e18000 x3ea00000} {x44d58000 x43e18000 x3e967ff6} {x44d5c000 x43e10000 x3e91800a} {x44d5c000 x43de0000 x3ea70004} {x44d5e000 x43de8000 x3e9d7ffa} {x44d5e000 x43df8000 x3e9c0011}}} {t {{x41300000 x44d5a385}} {{x41300000 x43e10e35}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush248 512 catmullrom {cc {f 2080} {px x41300000 {x44ce4000 x43e58000 x3d04000a} {x44ce6000 x43e58000 x3d1bfff6} {x44ce6000 x43e18000 x3e4c0011}}} {t {{x41300000 x44ce5571}} {{x41300000 x43e42aa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush247 512 catmullrom {cc {f 2080} {px x41300000 {x44cd2000 x43f50000 x3cf0000d} {x44cd4000 x43f50000 x3d30000d} {x44cd8000 x43f50000 x3e03ffef} {x44cda000 x43f50000 x3e9f0004} {x44cde000 x43f48000 x3e977ff1} {x44ce0000 x43f30000 x3cf7ffec}}} {t {{x41300000 x44cd9000}} {{x41300000 x43f49560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush246 512 catmullrom {cc {f 2080} {px x41300000 {x44e00000 x44770000 x3d9c0003} {x44e04000 x4477c000 x3e0afff3} {x44e04000 x44784000 x3e9c7ffe}}} {t {{x41300000 x44e02a8f}} {{x41300000 x4477aab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush245 512 catmullrom {cc {f 2080} {px x41300000 {x44e7e000 x4461c000 x3dc60002} {x44e7c000 x4461c000 x3df00043} {x44e84000 x44614000 x3e88fffc} {x44e96000 x44610000 x3e7afff3} {x44ea8000 x44614000 x3e55000d}}} {t {{x41300000 x44e8c000}} {{x41300000 x44616666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush244 512 catmullrom {cc {f 2080} {px x41300000 {x44e9a000 x44208000 x3d200000} {x44e9c000 x44208000 x3d820005} {x44ea0000 x44200000 x3ec38002} {x44ea2000 x441fc000 x3eb1fff8} {x44ea8000 x441fc000 x3eb00000} {x44ea6000 x44208000 x3e88800f}}} {t {{x41300000 x44ea1000}} {{x41300000 x44202ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush243 512 catmullrom {cc {f 2080} {px x41300000 {x44dbc000 x441fc000 x3d7bfff6} {x44dc4000 x44214000 x3e3effe3}}} {t {{x41300000 x44dc0000}} {{x41300000 x44208000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush242 512 catmullrom {cc {f 2080} {px x41300000 {x44d32000 x441e8000 x3d30000d} {x44d40000 x441e8000 x3d4c0003} {x44d4c000 x441e4000 x3e28fffc}}} {t {{x41300000 x44d3f571}} {{x41300000 x441e6ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush241 512 catmullrom {cc {f 2080} {px x41300000 {x44d04000 x44284000 x3d1bfff6} {x44d08000 x4428c000 x3d580007} {x44d0a000 x4428c000 x3e300000} {x44d0e000 x4428c000 x3e5c0011} {x44d0a000 x44278000 x3eaa8006} {x44d0a000 x4426c000 x3e65ffe7}}} {t {{x41300000 x44d09571}} {{x41300000 x44282000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush240 512 catmullrom {cc {f 2080} {px x41300000 {x44d68000 x442a4000 x3d24000a} {x44d6a000 x442a8000 x3d900000} {x44d7a000 x442a4000 x3e9b8002} {x44d8c000 x442a4000 x3e9b8002} {x44d8e000 x442a4000 x3e9c0011} {x44d88000 x4429c000 x3e6cffeb}}} {t {{x41300000 x44d7d000}} {{x41300000 x442a3550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush239 512 catmullrom {cc {f 2080} {px x41300000 {x44dd6000 x44398000 x3cb7ffec} {x44dd6000 x44394000 x3d600000} {x44ddc000 x44388000 x3ea8800f}}} {t {{x41300000 x44dd8000}} {{x41300000 x44391550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush238 512 catmullrom {cc {f 2080} {px x41300000 {x44d94000 x44428000 x3dd1fff8} {x44d92000 x44430000 x3de00000} {x44d9e000 x4441c000 x3eac7ffe}}} {t {{x41300000 x44d96a8f}} {{x41300000 x44426ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush237 512 catmullrom {cc {f 2080} {px x41300000 {x44e4e000 x443e8000 x3d1bfff6} {x44e46000 x443d0000 x3d6c0003} {x44e46000 x443c8000 x3e370004} {x44e48000 x443dc000 x3e6cffeb} {x44e4c000 x443ec000 x3ecf7ff1} {x44e52000 x443e0000 x3edf7ff1} {x44e5e000 x443dc000 x3e8e7ff6} {x44e60000 x443dc000 x3cc80014}}} {t {{x41300000 x44e4fc29}} {{x41300000 x443dc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush236 512 catmullrom {cc {f 2080} {px x41300000 {x44f2a000 x445e0000 x3d64000a} {x44f2a000 x445f8000 x3e170004} {x44f24000 x445fc000 x3eb80000} {x44f2a000 x44614000 x3e4afff3} {x44f2a000 x44634000 x3e900000}}} {t {{x41300000 x44f28ccd}} {{x41300000 x4460599a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush235 512 catmullrom {cc {f 2080} {px x41300000 {x44f72000 x444e8000 x3d380007} {x44f6e000 x444e4000 x3d960002} {x44f68000 x444d8000 x3dcc0003} {x44f62000 x444e8000 x3e9d7ffa} {x44f60000 x444e8000 x3ed38002} {x44f5a000 x444dc000 x3e55ffe7} {x44f60000 x444f4000 x3d04000a} {x44f60000 x44500000 0}}} {t {{x41300000 x44f64800}} {{x41300000 x444e8800}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush234 512 catmullrom {cc {f 2080} {px x41300000 {x44f2c000 x44164000 x3d70000d} {x44f2c000 x4416c000 x3d920005} {x44f30000 x4416c000 x3e8e7ff6} {x44f32000 x44178000 x3ebd000d} {x44f30000 x44178000 x3eff0004} {x44f2c000 x44178000 0}}} {t {{x41300000 x44f2e571}} {{x41300000 x44170ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush233 512 catmullrom {cc {f 2080} {px x41300000 {x44f48000 x4405c000 x3cd80007} {x44f4a000 x44044000 x3d70000d} {x44f50000 x44044000 x3e967ff6} {x44f54000 x44044000 x3edf0004} {x44f5a000 x44040000 x3ec8fffc} {x44f60000 x44050000 x3e9a8006} {x44f62000 x4405c000 x3e9e0008}}} {t {{x41300000 x44f54dc3}} {{x41300000 x4404c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush232 512 catmullrom {cc {f 2080} {px x41300000 {x44ec6000 x43db8000 x3d900000} {x44eca000 x43dc8000 x3e81fff8} {x44eca000 x43dd0000 x3ecc7ffe} {x44eca000 x43dc8000 x3f0b6007} {x44eca000 x43db8000 0}}} {t {{x41300000 x44ec9333}} {{x41300000 x43dc3333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush231 512 catmullrom {cc {f 2080} {px x41300000 {x44e7c000 x43cc8000 x3d900000} {x44e84000 x43cf8000 x3d8c0003} {x44e88000 x43cd8000 x3f171fff} {x44e84000 x43cc0000 x3e80fffc}}} {t {{x41300000 x44e83000}} {{x41300000 x43cd6000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush230 512 catmullrom {cc {f 2080} {px x41300000 {x44ea8000 x43c80000 x3d800000} {x44ea6000 x43c80000 x3d800000}}} {t {{x41300000 x44ea7000}} {{x41300000 x43c80000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush229 512 catmullrom {cc {f 2080} {px x41300000 {x44eb8000 x43c80000 x3dd9ffd6} {x44eba000 x43c80000 x3ebd7ffa} {x44eae000 x43c68000 x3f022004}}} {t {{x41300000 x44eb5571}} {{x41300000 x43c78000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush228 512 catmullrom {cc {f 2080} {px x41300000 {x44e64000 x43ab0000 x3d3bfff6} {x44e66000 x43ab8000 x3d73fffd} {x44e6c000 x43ab0000 x3ec57ffa} {x44e76000 x43a98000 x3ee0fffc} {x44e8a000 x43a98000 x3ece0008} {x44e8e000 x43a98000 0}}} {t {{x41300000 x44e76000}} {{x41300000 x43aa5560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush227 512 catmullrom {cc {f 2080} {px x41300000 {x44c0c000 x438d8000 x3ca7fff9} {x44c08000 x438e8000 x3d07fff9} {x44c06000 x438e8000 x3d24000a} {x44c08000 x438e8000 x3e5c0011} {x44c18000 x438e8000 x3ecc7ffe}}} {t {{x41300000 x44c0b99a}} {{x41300000 x438e4ccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush226 512 catmullrom {cc {f 2080} {px x41300000 {x44bcc000 x43220000 x3d4c0003} {x44bd2000 x43170000 x3e4a0019} {x44bd2000 x431a0000 x3e91fff8}}} {t {{x41300000 x44bd0000}} {{x41300000 x431baac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush225 512 catmullrom {cc {f 2080} {px x41300000 {x44bf6000 x43520000 x3d07fff9} {x44bfa000 x43520000 x3d1bfff6} {x44bfc000 x43520000 x3d1bfff6} {x44c00000 x43530000 x3d27fff9} {x44c02000 x434d0000 x3e400000} {x44c00000 x43470000 x3d0ffff3}}} {t {{x41300000 x44bfd000}} {{x41300000 x434f8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush224 512 catmullrom {cc {f 2080} {px x41300000 {x44b4c000 x43350000 x3c880014} {x44b52000 x43350000 x3d0ffff3} {x44b5a000 x43350000 x3e580022} {x44b5e000 x43310000 x3ed60008} {x44b76000 x43340000 x3e31001d} {x44b88000 x43350000 x3d780007}}} {t {{x41300000 x44b63571}} {{x41300000 x43342ac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush223 512 catmullrom {cc {f 2080} {px x41300000 {x44c30000 x42f20000 x3d000000} {x44c36000 x42f20000 x3db3fffd} {x44c3c000 x42f20000 x3e928006} {x44c3c000 x42f60000 x3e2e0008}}} {t {{x41300000 x44c37800}} {{x41300000 x42f30000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush222 512 catmullrom {cc {f 2080} {px x41300000 {x44c78000 x41400000 x3cc80014} {x44c80000 x41400000 x3d0ffff3}}} {t {{x41300000 x44c7c000}} {{x41300000 x41400000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush221 512 catmullrom {cc {f 2080} {px x41300000 {x44c68000 x41600000 x3d27fff9} {x44c62000 x41800000 x3e400000} {x44c68000 x41800000 x3e977ff1} {x44c68000 x41700000 x3e38fffc}}} {t {{x41300000 x44c66800}} {{x41300000 x41740000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush220 512 catmullrom {cc {f 2080} {px x41300000 {x44b76000 x41400000 x3d24000a} {x44b7c000 x41400000 x3e1effe3} {x44bd6000 x41e00000 x3e75ffe7} {x44be4000 x421c0000 x3e90800f}}} {t {{x41300000 x44bab000}} {{x41300000 x41b60000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush219 512 catmullrom {cc {f 2080} {px x41300000 {x44a80000 0 x3ce7fff9} {x44a86000 x40800000 x3d1bfff6} {x44a9e000 x41000000 x3e18fffc}}} {t {{x41300000 x44a8c000}} {{x41300000 x40800000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush218 512 catmullrom {cc {f 2080} {px x41300000 {x44aca000 x42100000 x3c8ffff3} {x44ada000 x42180000 x3d9dfffb} {x44b00000 x424c0000 x3e630015}}} {t {{x41300000 x44ae1571}} {{x41300000 x4226aab3}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush217 512 catmullrom {cc {f 2080} {px x41300000 {x44a3e000 x42ae0000 x3d000000} {x44a40000 x42b00000 x3d860002} {x44a44000 x42b00000 x3e730015} {x44a4c000 x42b00000 x3ea0fffc} {x44a50000 x42b80000 x3e9f0004} {x44a64000 x42bc0000 x3ea00000} {x44a70000 x42c60000 x3e9f7ff1}}} {t {{x41300000 x44a5047b}} {{x41300000 x42b5b6d6}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush216 512 catmullrom {cc {f 2080} {px x41300000 {x4499c000 x43830000 x3d4c0003} {x449a2000 x43830000 x3e61fff8} {x449a2000 x43828000 0}}} {t {{x41300000 x449a0000}} {{x41300000 x4382d560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush215 512 catmullrom {cc {f 2080} {px x41300000 {x449b6000 x433b0000 x3d47fff9} {x449b6000 x433d0000 x3e31001d} {x449bc000 x433b0000 x3e61fff8} {x449ce000 x43380000 x3e88800f} {x449de000 x433a0000 x3e82fff3}}} {t {{x41300000 x449c4000}} {{x41300000 x433a999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush214 512 catmullrom {cc {f 2080} {px x41300000 {x44920000 x435b0000 x3d1bfff6} {x44926000 x435b0000 x3e8d7ffa} {x44938000 x43560000 x3ed00000} {x44938000 x43580000 x3ea8fffc} {x44938000 x435e0000 x3e45ffe7}}} {t {{x41300000 x4492f99a}} {{x41300000 x435a0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush213 512 catmullrom {cc {f 2080} {px x41300000 {x44870000 x43140000 x3d27fff9} {x44872000 x43140000 x3e1effe3} {x4488a000 x43100000 x3e8f0004} {x44890000 x430e0000 x3df80022} {x44894000 x43100000 0}}} {t {{x41300000 x44883333}} {{x41300000 x43113333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush212 512 catmullrom {cc {f 2080} {px x41300000 {x4480a000 x42e80000 x3c980007} {x4480c000 x42e80000 x3d04000a} {x44810000 x42e40000 x3df80022} {x44812000 x42e40000 x3e58fffc} {x44812000 x42de0000 x3e9e7ff6} {x4481c000 x42d80000 x3ea0800f} {x44828000 x42e00000 x3ea0800f} {x44824000 x42e40000 x3e9f0004}}} {t {{x41300000 x448163d7}} {{x41300000 x42e24000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush211 512 catmullrom {cc {f 2080} {px x41300000 {x446b8000 x43a70000 x3d380007} {x446b8000 x43a80000 x3e5afff3} {x446c4000 x43a58000 x3e89fff8} {x446c4000 x43a50000 0}}} {t {{x41300000 x446be000}} {{x41300000 x43a66000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush210 512 catmullrom {cc {f 2080} {px x41300000 {x44770000 x43ae8000 x3d1bfff6} {x44778000 x43ae8000 x3e070004} {x4477c000 x43af8000 x3ea8fffc}}} {t {{x41300000 x44776ab0}} {{x41300000 x43aed560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush209 512 catmullrom {cc {f 2080} {px x41300000 {x447dc000 x438c0000 x3cc00000} {x447d0000 x438d8000 x3d13fffd} {x447dc000 x438c0000 x3ea60008} {x44804000 x438a8000 x3ebd000d} {x44818000 x438b8000 x3e9d7ffa} {x44812000 x438d0000 x3e580022}}} {t {{x41300000 x447fb51f}} {{x41300000 x438c1560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush208 512 catmullrom {cc {f 2080} {px x41300000 {x4485e000 x43f98000 x3cc80014} {x44860000 x43fa8000 x3d27fff9} {x4486c000 x43f90000 x3e4c0011}}} {t {{x41300000 x44863571}} {{x41300000 x43f9aaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush207 512 catmullrom {cc {f 2080} {px x41300000 {x4487c000 x43ce0000 x3c880014} {x4487e000 x43ce0000 x3d04000a} {x44884000 x43cf0000 x3e770004} {x44884000 x43cf8000 x3da3fffd}}} {t {{x41300000 x44880800}} {{x41300000 x43cea000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush206 512 catmullrom {cc {f 2080} {px x41300000 {x448de000 x43b58000 x3cd80007} {x448e2000 x43b58000 x3d27fff9} {x448e8000 x43b60000 x3e23ffef} {x448e8000 x43b30000 x3e960008} {x448ea000 x43b30000 x3e200000} {x448f6000 x43b40000 x3e63ffef}}} {t {{x41300000 x448e8000}} {{x41300000 x43b48000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush205 512 catmullrom {cc {f 2080} {px x41300000 {x44932000 x43dc8000 x3d400000} {x44932000 x43dd0000 x3e130015} {x4493e000 x43dd0000 x3e51fff8} {x44950000 x43db0000 x3e8b8002}}} {t {{x41300000 x4493c800}} {{x41300000 x43dc6000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush204 512 catmullrom {cc {f 2080} {px x41300000 {x44a40000 x43fd8000 x3d89fffe} {x44a46000 x44004000 x3e88800f}}} {t {{x41300000 x44a43000}} {{x41300000 x43ff0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush203 512 catmullrom {cc {f 2080} {px x41300000 {x449d8000 x43f00000 x3cc00000} {x449de000 x43f08000 x3e82fff3} {x449e6000 x43f00000 x3e977ff1} {x449ec000 x43f00000 0}}} {t {{x41300000 x449e2000}} {{x41300000 x43f02000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush202 512 catmullrom {cc {f 2080} {px x41300000 {x44aa6000 x43c08000 x3d27fff9} {x44aac000 x43bd8000 x3e100000} {x44ab0000 x43bd8000 x3d27fff9} {x44ab2000 x43bd8000 0}}} {t {{x41300000 x44aad000}} {{x41300000 x43be4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush201 512 catmullrom {cc {f 2080} {px x41300000 {x44a4c000 x43cb0000 x3d33fffd} {x44a50000 x43cb0000 x3df9ffd6} {x44a58000 x43ca8000 x3e430015} {x44a56000 x43ca8000 0}}} {t {{x41300000 x44a52800}} {{x41300000 x43cac000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush200 512 catmullrom {cc {f 2080} {px x41300000 {x449de000 x43c20000 x3cc00000} {x449e0000 x43c20000 x3d0c0003} {x449e6000 x43c20000 x3d380007} {x449ec000 x43bd8000 x3ea0800f} {x449f6000 x43bc0000 x3eb28006} {x44a04000 x43bd0000 x3e1afff3}}} {t {{x41300000 x449ec571}} {{x41300000 x43bf6aa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush199 512 catmullrom {cc {f 2080} {px x41300000 {x44be8000 x43ea0000 x3d400000} {x44bf4000 x43ea0000 x3e38fffc} {x44bfc000 x43e88000 x3ed28006}}} {t {{x41300000 x44bf2a8f}} {{x41300000 x43e98000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush198 512 catmullrom {cc {f 2080} {px x41300000 {x44b48000 x43ee8000 x3ce7fff9} {x44b46000 x43ee8000 x3d30000d} {x44b36000 x43f00000 x3e65000d} {x44b18000 x43f20000 x3ed67ff6} {x44b10000 x43f18000 x3edd7ffa} {x44b04000 x43f00000 x3e847ffe} {x44afe000 x43f00000 x3e6cffeb}}} {t {{x41300000 x44b22000}} {{x41300000 x43f0124e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush197 512 catmullrom {cc {f 2080} {px x41300000 {x44d80000 x44034000 x3d400000} {x44d80000 x44038000 x3e18fffc} {x44d88000 x44038000 x3e8a8006} {x44d8e000 x44040000 x3df5ffe7} {x44d8c000 x44044000 x3e90800f}}} {t {{x41300000 x44d86ccd}} {{x41300000 x4403b333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush196 512 catmullrom {cc {f 2080} {px x41300000 {x44cce000 x440f4000 x3c6fffd8} {x44cde000 x440f4000 x3d180007} {x44cea000 x440e8000 x3eb38002} {x44cf0000 x440e8000 x3eac0011} {x44d0a000 x44104000 x3e8f7ff1} {x44d08000 x44100000 x3dbc0003}}} {t {{x41300000 x44ceea8f}} {{x41300000 x440f4ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush195 512 catmullrom {cc {f 2080} {px x41300000 {x44c44000 x442c0000 x3ca7fff9} {x44c4e000 x442c0000 x3d07fff9} {x44c4e000 x442bc000 x3ea1800a} {x44c5a000 x442bc000 x3d900000}}} {t {{x41300000 x44c4e800}} {{x41300000 x442be000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush194 512 catmullrom {cc {f 2080} {px x41300000 {x44b9a000 x44374000 x3d200000} {x44b9c000 x4437c000 x3d30000d} {x44ba6000 x4437c000 x3e35ffe7} {x44bac000 x44370000 x3eb00000}}} {t {{x41300000 x44ba2000}} {{x41300000 x44377000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush193 512 catmullrom {cc {f 2080} {px x41300000 {x44d1a000 x44400000 x3d27fff9} {x44d20000 x44404000 x3db3fffd}}} {t {{x41300000 x44d1d000}} {{x41300000 x44402000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush192 512 catmullrom {cc {f 2080} {px x41300000 {x44d04000 x44428000 x3d07fff9} {x44d08000 x4441c000 x3e867ff6} {x44d14000 x44410000 x3e9a8006}}} {t {{x41300000 x44d0aa8f}} {{x41300000 x4441c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush191 512 catmullrom {cc {f 2080} {px x41300000 {x44d2c000 x444f0000 x3c980007} {x44d2e000 x444f0000 x3d13fffd} {x44d32000 x444e8000 x3e4afff3} {x44d38000 x444e4000 x3e9b8002} {x44d44000 x444e8000 x3e8e7ff6} {x44d52000 x444fc000 x3e80fffc} {x44d52000 x44514000 x3e7e0008} {x44d50000 x44524000 x3c8ffff3}}} {t {{x41300000 x44d3f800}} {{x41300000 x444f9000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush190 512 catmullrom {cc {f 2080} {px x41300000 {x44b70000 x44748000 x3da3fffd} {x44b72000 x44748000 x3e2effe3} {x44b76000 x44748000 x3e8a8006}}} {t {{x41300000 x44b72a8f}} {{x41300000 x44748000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush189 512 catmullrom {cc {f 2080} {px x41300000 {x44b0c000 x4467c000 x3d67fff9} {x44b0c000 x44680000 x3e13ffef}}} {t {{x41300000 x44b0c000}} {{x41300000 x4467e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush188 512 catmullrom {cc {f 2080} {px x41300000 {x44b5a000 x44580000 x3d27fff9}}} {t {{x41300000 x44b5a000}} {{x41300000 x44580000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush187 512 catmullrom {cc {f 2080} {px x41300000 {x44b72000 x444d0000 x3ce7fff9} {x44b72000 x44508000 x3d67fff9}}} {t {{x41300000 x44b72000}} {{x41300000 x444ec000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush186 512 catmullrom {cc {f 2080} {px x41300000 {x44b60000 x444f4000 x3cb0000d} {x44b64000 x444f4000 x3d1bfff6} {x44b6a000 x444e4000 x3dcc0003} {x44b6c000 x444cc000 x3e4effe3}}} {t {{x41300000 x44b66800}} {{x41300000 x444e6000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush185 512 catmullrom {cc {f 2080} {px x41300000 {x44a02000 x44688000 x3d820005} {x44a02000 x4468c000 x3d980007} {x44a04000 x44688000 x3da7fff9} {x44a0e000 x44674000 x3e43ffef} {x44a10000 x44670000 x3e3a0019} {x44a14000 x44670000 x3df5ffe7} {x44a1a000 x4467c000 x3df80022} {x44a1c000 x4467c000 x3e27ffde}}} {t {{x41300000 x44a0e000}} {{x41300000 x4467d000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush184 512 catmullrom {cc {f 2080} {px x41300000 {x44978000 x4459c000 x3ce7fff9} {x44972000 x4459c000 x3d30000d} {x44978000 x4459c000 x3da60002} {x4497e000 x4459c000 x3e200000} {x44978000 x44590000 x3c000000}}} {t {{x41300000 x44978000}} {{x41300000 x4459999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush183 512 catmullrom {cc {f 2080} {px x41300000 {x44938000 x4447c000 x3d44000a} {x4493c000 x4446c000 x3dd1fff8}}} {t {{x41300000 x4493a000}} {{x41300000 x44474000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush182 512 catmullrom {cc {f 2080} {px x41300000 {x448a2000 x44604000 x3d1bfff6} {x448a6000 x44604000 x3e2cffeb} {x448ac000 x44604000 x3e580022} {x448b2000 x445f0000 x3e700000}}} {t {{x41300000 x448a9800}} {{x41300000 x445ff000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush181 512 catmullrom {cc {f 2080} {px x41300000 {x44688000 x44778000 x3d67fff9} {x44688000 x44784000 x3d9dfffb} {x44694000 x44788000 0}}} {t {{x41300000 x4468c000}} {{x41300000 x44781550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush180 512 catmullrom {cc {f 2080} {px x41300000 {x44598000 x446a8000 x3da3fffd}}} {t {{x41300000 x44598000}} {{x41300000 x446a8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush179 512 catmullrom {cc {f 2080} {px x41300000 {x44364000 x445f0000 x3d4ffff3} {x44370000 x445f0000 x3d67fff9} {x44364000 x445ec000 x3e5c0011}}} {t {{x41300000 x44368000}} {{x41300000 x445eeab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush178 512 catmullrom {cc {f 2080} {px x41300000 {x44560000 x44430000 x3c6fffd8} {x44568000 x44430000 x3c8ffff3}}} {t {{x41300000 x44564000}} {{x41300000 x44430000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush177 512 catmullrom {cc {f 2080} {px x41300000 {x44500000 x44448000 x3d13fffd} {x44518000 x44440000 x3d380007} {x4452c000 x44438000 x3db00000}}} {t {{x41300000 x44516ab0}} {{x41300000 x44440000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush176 512 catmullrom {cc {f 2080} {px x41300000 {x44344000 x44124000 x3cd80007} {x44340000 x44118000 x3d07fff9}}} {t {{x41300000 x44342000}} {{x41300000 x4411e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush175 512 catmullrom {cc {f 2080} {px x41300000 {x4434c000 x44194000 x3d07fff9} {x4434c000 x44184000 x3d1bfff6}}} {t {{x41300000 x4434c000}} {{x41300000 x4418c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush174 512 catmullrom {cc {f 2080} {px x41300000 {x44310000 x4420c000 x3cd80007} {x4431c000 x44208000 x3d27fff9} {x44320000 x44208000 x3df9ffd6} {x44328000 x441fc000 x3df5ffe7}}} {t {{x41300000 x4431d000}} {{x41300000 x44206000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush173 512 catmullrom {cc {f 2080} {px x41300000 {x4432c000 x442b8000 x3cc00000} {x44320000 x442a4000 x3d180007} {x44328000 x442a8000 x3e370004} {x44334000 x442a8000 x3e5a0019} {x44344000 x44298000 x3e65ffe7} {x44358000 x4428c000 x3d53fffd} {x4435c000 x44288000 x3d7bfff6}}} {t {{x41300000 x4433b6d9}} {{x41300000 x4429edb2}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush172 512 catmullrom {cc {f 2080} {px x41300000 {x441a0000 x43ec0000 x3d27fff9} {x441a0000 x43ed0000 x3e2cffeb} {x441a0000 x43ee0000 x3e3cffeb}}} {t {{x41300000 x441a0000}} {{x41300000 x43ed0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush171 512 catmullrom {cc {f 2080} {px x41300000 {x43f80000 x43fd0000 x3d920005} {x43f90000 x43fd0000 x3e0a0019} {x43f78000 x43fa8000 x3e65ffe7} {x43f80000 x43fb0000 x3e99800a} {x43f98000 x43fc0000 0}}} {t {{x41300000 x43f86666}} {{x41300000 x43fbe666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush170 512 catmullrom {cc {f 2080} {px x41300000 {x44194000 x44070000 x3d400000} {x4419c000 x44070000 x3d4c0003}}} {t {{x41300000 x44198000}} {{x41300000 x44070000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush169 512 catmullrom {cc {f 2080} {px x41300000 {x43610000 x43d38000 x3da3fffd} {x43620000 x43d30000 x3e430015} {x43640000 x43d10000 x3e1effe3}}} {t {{x41300000 x4362553f}} {{x41300000 x43d28000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush168 512 catmullrom {cc {f 2080} {px x41300000 {x43938000 x43fd0000 x3d64000a} {x43950000 x43fd0000 x3da20005} {x43950000 x43fc0000 x3da7fff9} {x43950000 x43fa8000 x3dac0003} {x43948000 x43fa8000 0}}} {t {{x41300000 x4394999a}} {{x41300000 x43fbcccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush167 512 catmullrom {cc {f 2080} {px x41300000 {x424c0000 x437a0000 x3e2afff3} {x42080000 x43860000 x3e91800a}}} {t {{x41300000 x422a0000}} {{x41300000 x43818000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush166 512 catmullrom {cc {f 2080} {px x41300000 {x42d80000 x43440000 x3d04000a} {x42c00000 x434d0000 x3de3ffef} {x42b40000 x43500000 0}}} {t {{x41300000 x42c40000}} {{x41300000 x434b0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush165 512 catmullrom {cc {f 2080} {px x41300000 {x43a30000 x432c0000 x3d0c0003} {x43a38000 x432e0000 x3e0c0011} {x43a58000 x432f0000 x3e4effe3} {x43a68000 x432f0000 0}}} {t {{x41300000 x43a4a000}} {{x41300000 x432e0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush164 512 catmullrom {cc {f 2080} {px x41300000 {x43ba8000 x41200000 x3d33fffd} {x43bc0000 x41100000 x3e580022} {x43bb8000 x40c00000 x3e947ffe}}} {t {{x41300000 x43bb5560}} {{x41300000 x41055552}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush163 512 catmullrom {cc {f 2080} {px x41300000 {x43f68000 x42ba0000 x3d44000a} {x43f80000 x42ba0000 x3de3ffef} {x43f80000 x42bc0000 x3da00000}}} {t {{x41300000 x43f78000}} {{x41300000 x42baaaa6}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush162 512 catmullrom {cc {f 2080} {px x41300000 {x43e30000 x42640000 x3d04000a} {x43e60000 x42600000 x3d13fffd} {x43ec0000 x424c0000 x3e180022} {x43f20000 x42380000 x3e030015} {x43f78000 x42040000 x3e1a0019} {x43f78000 x42000000 0}}} {t {{x41300000 x43ee5560}} {{x41300000 x4237554d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush161 512 catmullrom {cc {f 2080} {px x41300000 {x44164000 x41d80000 x3d07fff9} {x44178000 x41d00000 x3d33fffd} {x44178000 x41d80000 x3e270004}}} {t {{x41300000 x44171550}} {{x41300000 x41d55567}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush160 512 catmullrom {cc {f 2080} {px x41300000 {x44280000 x42ae0000 x3d5bfff6} {x44280000 x42b00000 x3e51001d}}} {t {{x41300000 x44280000}} {{x41300000 x42af0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush159 512 catmullrom {cc {f 2080} {px x41300000 {x44268000 x42300000 x3cd80007} {x44278000 x42300000 x3d0ffff3} {x44290000 x42200000 x3ea80000} {x4429c000 x42200000 x3eb8800f} {x442a4000 x42300000 x3d13fffd}}} {t {{x41300000 x4428999a}} {{x41300000 x4229999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush158 512 catmullrom {cc {f 2080} {px x41300000 {x44398000 x40c00000 x3cc00000} {x443a0000 x40c00000 x3d580007} {x443a4000 x40800000 x3e730015}}} {t {{x41300000 x4439eab0}} {{x41300000 x40aaaaa4}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush157 512 catmullrom {cc {f 2080} {px x41300000 {x443f4000 x42960000 x3cc00000} {x443ec000 x42960000 x3d07fff9} {x443e8000 x42960000 x3e800000} {x443e8000 x42980000 x3e35ffe7} {x443e0000 x42960000 x3e55000d}}} {t {{x41300000 x443e999a}} {{x41300000 x42966666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush156 512 catmullrom {cc {f 2080} {px x41300000 {x44544000 x43460000 x3d30000d} {x44548000 x43460000 x3e700000} {x44554000 x43460000 x3e83ffef}}} {t {{x41300000 x4454aab0}} {{x41300000 x43460000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush155 512 catmullrom {cc {f 2080} {px x41300000 {x44424000 x43650000 x3d000000} {x44438000 x43650000 x3d04000a} {x4444c000 x43650000 x3dfc0011} {x44460000 x43620000 x3e867ff6}}} {t {{x41300000 x44442000}} {{x41300000 x43644000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush154 512 catmullrom {cc {f 2080} {px x41300000 {x44518000 x437d0000 x3d000000} {x44520000 x437f0000 x3d960002} {x4452c000 x437d0000 x3e9d7ffa}}} {t {{x41300000 x44521550}} {{x41300000 x437daac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush153 512 catmullrom {cc {f 2080} {px x41300000 {x44560000 x43858000 x3c8ffff3} {x44568000 x43860000 x3d0ffff3} {x44574000 x43858000 x3eb60008} {x44578000 x43858000 x3ea80000}}} {t {{x41300000 x4456d000}} {{x41300000 x4385a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush152 512 catmullrom {cc {f 2080} {px x41300000 {x44618000 x43c18000 x3d180007} {x4461c000 x43c18000 x3dd40032} {x44628000 x43bf0000 x3eaafff3} {x44628000 x43be0000 x3e580022}}} {t {{x41300000 x44621000}} {{x41300000 x43c00000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush151 512 catmullrom {cc {f 2080} {px x41300000 {x44470000 x43d10000 x3d200000} {x44478000 x43d08000 x3dddffc5} {x44484000 x43d00000 x3ed8fffc}}} {t {{x41300000 x44479550}} {{x41300000 x43d08000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush150 512 catmullrom {cc {f 2080} {px x41300000 {x44588000 x43e00000 x3d33fffd} {x4458c000 x43e00000 x3e55000d} {x44588000 x43df0000 x3eb9800a} {x44578000 x43de0000 x3c4ffff3}}} {t {{x41300000 x44585000}} {{x41300000 x43df4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush149 512 catmullrom {cc {f 2080} {px x41300000 {x44560000 x43fd8000 x3d180007} {x44570000 x43fd8000 x3d400000}}} {t {{x41300000 x44568000}} {{x41300000 x43fd8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush148 512 catmullrom {cc {f 2080} {px x41300000 {x44544000 x44008000 x3d27fff9} {x44550000 x44004000 x3e45ffe7} {x44554000 x44000000 x3eb80000} {x44550000 x43ff0000 x3c4ffff3}}} {t {{x41300000 x4454e000}} {{x41300000 x44001000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush147 512 catmullrom {cc {f 2080} {px x41300000 {x44224000 x436e0000 x3df5ffe7} {x44230000 x436b0000 x3e7afff3}}} {t {{x41300000 x4422a000}} {{x41300000 x436c8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush146 512 catmullrom {cc {f 2080} {px x41300000 {x44148000 x43940000 x3d70000d} {x4414c000 x43940000 x3ea8fffc} {x44154000 x43930000 x3e8e7ff6}}} {t {{x41300000 x4414d550}} {{x41300000 x4393aaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush145 512 catmullrom {cc {f 2080} {px x41300000 {x44130000 x43ac8000 x3d1bfff6} {x44130000 x43ac0000 x3e95000d}}} {t {{x41300000 x44130000}} {{x41300000 x43ac4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush144 512 catmullrom {cc {f 2080} {px x41300000 {x43eb0000 x43c70000 x3c800000} {x43eb8000 x43c78000 x3d180007} {x43eb8000 x43c80000 x3df5ffe7} {x43ed0000 x43c80000 x3eb38002} {x43ed8000 x43c80000 0}}} {t {{x41300000 x43ec199a}} {{x41300000 x43c7b333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush143 512 catmullrom {cc {f 2080} {px x41300000 {x43cd8000 x43828000 x3cb7ffec} {x43ce0000 x43828000 x3e11fff8}}} {t {{x41300000 x43cdc000}} {{x41300000 x43828000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush142 512 catmullrom {cc {f 2080} {px x41300000 {x43d98000 x438e0000 x3c8ffff3} {x43da0000 x438e0000 x3d1bfff6} {x43db8000 x438e0000 x3e71fff8}}} {t {{x41300000 x43da5560}} {{x41300000 x438e0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush141 512 catmullrom {cc {f 2080} {px x41300000 {x43e00000 x439d8000 x3d04000a} {x43e18000 x439d8000 x3e947ffe} {x43e18000 x439d0000 0}}} {t {{x41300000 x43e10000}} {{x41300000 x439d5560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush140 512 catmullrom {cc {f 2080} {px x41300000 {x43e00000 x43430000 x3d1bfff6} {x43e10000 x43440000 x3dadfffb} {x43e30000 x43430000 x3ea57ffa}}} {t {{x41300000 x43e15560}} {{x41300000 x4343553f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush139 512 catmullrom {cc {f 2080} {px x41300000 {x43f00000 x436a0000 x3c9fffe5} {x43ef0000 x436a0000 x3ce0001b} {x43f00000 x436a0000 x3e938002} {x43f00000 x43670000 x3ecd7ffa} {x43f20000 x43680000 x3ebe0008} {x43f38000 x436a0000 x3ea70004} {x43f38000 x43680000 x3e03ffef}}} {t {{x41300000 x43f1249c}} {{x41300000 x43690000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush138 512 catmullrom {cc {f 2080} {px x41300000 {x441cc000 x43250000 x3d44000a} {x441d0000 x43250000 x3e31001d}}} {t {{x41300000 x441ce000}} {{x41300000 x43250000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush137 512 catmullrom {cc {f 2080} {px x41300000 {x441ac000 x43060000 x3d0ffff3} {x441b4000 x43060000 x3d600000} {x441cc000 x43040000 x3eae0008} {x441d0000 x43040000 x3e9afff3} {x441d0000 x43060000 0}}} {t {{x41300000 x441c2666}} {{x41300000 x43053333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush136 512 catmullrom {cc {f 2080} {px x41300000 {x44148000 x42480000 x3d180007} {x44160000 x42400000 x3d3bfff6} {x44170000 x42340000 x3ec0800f} {x44178000 x42340000 0}}} {t {{x41300000 x44164000}} {{x41300000 x423c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush135 512 catmullrom {cc {f 2080} {px x41300000 {x44104000 x41400000 x3d33fffd} {x44110000 x41600000 x3d4c0003} {x4411c000 x41400000 x3e730015}}} {t {{x41300000 x44110000}} {{x41300000 x414aaace}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush134 512 catmullrom {cc {f 2080} {px x41300000 {x44094000 x41f00000 x3d27fff9} {x44098000 x41f00000 x3e7c0011} {x44098000 x41e00000 x3e880000} {x440a4000 x41e00000 x3e63ffef}}} {t {{x41300000 x4409a000}} {{x41300000 x41e80000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush133 512 catmullrom {cc {f 2080} {px x41300000 {x44034000 x429c0000 x3d24000a} {x44038000 x429c0000 x3d400000} {x44038000 x42980000 x3e90800f} {x44040000 x429c0000 x3e730015} {x44048000 x429c0000 x3e838002} {x44050000 x42980000 x3e880000} {x44050000 x42960000 x3e8c0011} {x44058000 x42960000 x3e030015}}} {t {{x41300000 x44044800}} {{x41300000 x42998000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42640000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush132 512 catmullrom {cc {f 2080} {px x41300000 {x44038000 x42fc0000 x3d1bfff6} {x44038000 x42f80000 x3ea70004} {x44034000 x42f80000 x3ec1800a} {x4402c000 x42f80000 x3ebf0004} {x44034000 x42f80000 x3eb60008} {x44038000 x42f60000 x3eb70004}}} {t {{x41300000 x44034ab0}} {{x41300000 x42f85581}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42780000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush131 512 catmullrom {cc {f 2080} {px x41300000 {x43e60000 x42e40000 x3cf0000d} {x43e40000 x42e00000 x3d07fff9} {x43e28000 x42dc0000 x3e51fff8} {x43e40000 x42dc0000 x3eac0011} {x43e60000 x42d80000 x3eb3ffef} {x43e70000 x42d40000 x3eb1fff8} {x43e70000 x42de0000 x3e98800f} {x43e60000 x42e40000 x3da3fffd}}} {t {{x41300000 x43e55000}} {{x41300000 x42dd4000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42800000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush130 512 catmullrom {cc {f 2080} {px x41300000 {x44088000 x43040000 x3d27fff9} {x44094000 x43040000 x3e1e0008} {x440a0000 x43040000 x3e81fff8} {x440a0000 x43020000 0}}} {t {{x41300000 x44097000}} {{x41300000 x43038000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42800000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush129 512 catmullrom {cc {f 2080} {px x41300000 {x44034000 x43040000 x3d200000} {x4405c000 x42f80000 x3d4c0003}}} {t {{x41300000 x44048000}} {{x41300000 x43000000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42800000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush128 512 catmullrom {cc {f 2080} {px x41300000 {x4402c000 x42f80000 x3cb0000d} {x44034000 x43010000 x3d04000a}}} {t {{x41300000 x44030000}} {{x41300000 x42fd0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42800000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush127 512 catmullrom {cc {f 2080} {px x41300000 {x42c40000 x432e0000 x3d2c0003} {x42cc0000 x432e0000 x3dd40032}}} {t {{x41300000 x42c80000}} {{x41300000 x432e0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42800000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush126 512 catmullrom {cc {f 2080} {px x41300000 {x427c0000 x43410000 x3c6fffd8} {x428a0000 x43410000 x3d180007} {x42940000 x43400000 x3d0ffff3}}} {t {{x41300000 x4289555a}} {{x41300000 x4340aac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42800000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush125 512 catmullrom {cc {f 2080} {px x41300000 {x42700000 x43760000 x3cf0000d} {x42680000 x43760000 x3d400000} {x42500000 x43760000 x3e15000d} {x42500000 x43730000 x3e27ffde}}} {t {{x41300000 x425e0000}} {{x41300000 x43754000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42800000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush124 512 catmullrom {cc {f 2080} {px x41300000 {x42a00000 x43760000 x3d04000a} {x42940000 x437f0000 x3d2c0003}}} {t {{x41300000 x429a0000}} {{x41300000 x437a8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42800000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush123 512 catmullrom {cc {f 2080} {px x41300000 {x43070000 x43560000 x3d0c0003} {x43040000 x43580000 x3de00000} {x42de0000 x435b0000 x3ea00000} {x42cc0000 x43610000 x3e970004} {x42c80000 x436e0000 x3e828006} {x42c60000 x436d0000 x3e81800a} {x42c00000 x436e0000 x3d0ffff3} {x42bc0000 x43730000 x3dee0008} {x42b40000 x43770000 x3d24000a}}} {t {{x41300000 x42d51cac}} {{x41300000 x4366c72b}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42800000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush122 512 catmullrom {cc {f 2080} {px x41300000 {x431f0000 x43930000 x3d13fffd} {x43200000 x43930000 x3d400000} {x43240000 x43918000 x3e7effe3} {x43250000 x43918000 x3e9a8006} {x432b0000 x43918000 x3e9f0004} {x432b0000 x43910000 x3d1bfff6}}} {t {{x41300000 x43250000}} {{x41300000 x4391eaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42800000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush121 512 catmullrom {cc {f 2080} {px x41300000 {x43e90000 x43c78000 x3d89fffe} {x43ea0000 x43c90000 x3eb0800f}}} {t {{x41300000 x43e98000}} {{x41300000 x43c84000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush120 512 catmullrom {cc {f 2080} {px x41300000 {x43d38000 x43b58000 x3d4ffff3} {x43d40000 x43b60000 x3ea38002} {x43d58000 x43b60000 x3ec2fff3} {x43d68000 x43b60000 x3e530015} {x43d88000 x43b90000 x3dd80022}}} {t {{x41300000 x43d5999a}} {{x41300000 x43b68000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush119 512 catmullrom {cc {f 2080} {px x41300000 {x43c18000 x438b0000 x3db80007} {x43c50000 x438b8000 x3e9c0011} {x43c38000 x438d0000 x3e400000}}} {t {{x41300000 x43c35560}} {{x41300000 x438bd560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush118 512 catmullrom {cc {f 2080} {px x41300000 {x43ae8000 x43890000 x3d0ffff3} {x43b00000 x43890000 x3d30000d} {x43b48000 x43878000 x3d83fffd} {x43b60000 x43870000 x3ea8800f} {x43b70000 x43858000 x3ec00000} {x43b88000 x43878000 x3e5effe3} {x43ba8000 x43888000 x3e67ffde}}} {t {{x41300000 x43b50000}} {{x41300000 x4387b6e9}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush117 512 catmullrom {cc {f 2080} {px x41300000 {x43930000 x43b60000 x3d73fffd} {x43920000 x43b60000 x3e5e0008}}} {t {{x41300000 x43928000}} {{x41300000 x43b60000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush116 512 catmullrom {cc {f 2080} {px x41300000 {x43950000 x43a80000 x3d5bfff6} {x43960000 x43a80000 x3eb1fff8} {x43968000 x43a90000 x3edc7ffe} {x43968000 x43ab0000 x3c980007} {x43950000 x43ac0000 x3e6e0008}}} {t {{x41300000 x4395cccd}} {{x41300000 x43a9999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush115 512 catmullrom {cc {f 2080} {px x41300000 {x43998000 x43978000 x3d27fff9} {x43998000 x43980000 x3e4c0011}}} {t {{x41300000 x43998000}} {{x41300000 x4397c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush114 512 catmullrom {cc {f 2080} {px x41300000 {x439d8000 x43870000 x3ce7fff9} {x439e0000 x43870000 x3d27fff9} {x439f8000 x43870000 x3e7effe3} {x43a10000 x43870000 x3ea9800a} {x43a30000 x43870000 x3d920005}}} {t {{x41300000 x439fcccd}} {{x41300000 x43870000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3dcccccd bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush113 512 catmullrom {cc {f 2080} {px x41300000 {x439e0000 x43840000 x3d13fffd} {x439e0000 x43848000 x3d1bfff6} {x439d8000 x43858000 x3db00000}}} {t {{x41300000 x439dd560}} {{x41300000 x4384aaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush112 512 catmullrom {cc {f 2080} {px x41300000 {x43a30000 x43670000 x3d000000} {x43a40000 x43670000 x3d1bfff6} {x43a50000 x43680000 x3e570004}}} {t {{x41300000 x43a40000}} {{x41300000 x4367553f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush111 512 catmullrom {cc {f 2080} {px x41300000 {x43830000 x436e0000 x3d64000a}}} {t {{x41300000 x43830000}} {{x41300000 x436e0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush110 512 catmullrom {cc {f 2080} {px x41300000 {x43830000 x43460000 x3d1bfff6} {x43858000 x43460000 x3e41001d} {x43878000 x43460000 x3e63ffef}}} {t {{x41300000 x43855560}} {{x41300000 x43460000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush109 512 catmullrom {cc {f 2080} {px x41300000 {x435b0000 x43190000 x3d180007} {x435c0000 x431a0000 x3e0c0011} {x435e0000 x431a0000 x3e61fff8}}} {t {{x41300000 x435c553f}} {{x41300000 x4319aac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush108 512 catmullrom {cc {f 2080} {px x41300000 {x40e00000 x42b80000 x3cc00000} {x40c00000 x42ba0000 x3d04000a} {x41200000 x42b80000 x3e93ffef}}} {t {{x41300000 x40f5555c}} {{x41300000 x42b8aaa6}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush107 512 catmullrom {cc {f 2080} {px x41300000 {x43b80000 x42c40000 x3d3bfff6} {x43b88000 x42c60000 x3d980007} {x43ba0000 x42c80000 x3ea0800f}}} {t {{x41300000 x43b8d560}} {{x41300000 x42c60000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush106 512 catmullrom {cc {f 2080} {px x41300000 {x43878000 x42bc0000 x3d0c0003} {x43888000 x42c00000 x3d1bfff6} {x438b8000 x42c00000 x3ea0800f} {x438d8000 x42bc0000 x3eb0fffc} {x43918000 x42b00000 x3ea70004} {x43930000 x42ae0000 x3e8b8002} {x43960000 x42b00000 x3e7afff3} {x43990000 x42b00000 x3e85000d} {x439c0000 x42b40000 x3e7afff3}}} {t {{x41300000 x4390f1cb}} {{x41300000 x42b671c4}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush105 512 catmullrom {cc {f 2080} {px x41300000 {x43610000 x40000000 x3d180007} {x436a0000 x40400000 x3dc00000} {x43760000 x40c00000 x3e5cffeb} {x43790000 x41000000 x3e48fffc} {x43770000 x41100000 0}}} {t {{x41300000 x43703333}} {{x41300000 x40b33333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush104 512 catmullrom {cc {f 2080} {px x41300000 {x43010000 x42580000 x3d180007} {x43060000 x42400000 x3e41fff8}}} {t {{x41300000 x43038000}} {{x41300000 x424c0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush103 512 catmullrom {cc {f 2080} {px x41300000 {x42c80000 x42400000 x3cf0000d} {x42da0000 x42480000 x3d0ffff3} {x42e00000 x424c0000 x3d380007} {x42e40000 x424c0000 0}}} {t {{x41300000 x42d98000}} {{x41300000 x42480000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush102 512 catmullrom {cc {f 2080} {px x41300000 {x42840000 x42000000 x3cf0000d} {x42860000 x42000000 x3d27fff9} {x42940000 x42000000 x3e61fff8} {x429c0000 x41f00000 x3e23ffef}}} {t {{x41300000 x428e8000}} {{x41300000 x41fc0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush101 512 catmullrom {cc {f 2080} {px x41300000 {x42c80000 x41100000 x3d04000a} {x42c80000 x41200000 x3d0c0003} {x42ce0000 x41200000 x3e370004} {x42d80000 x41100000 x3e43ffef} {x42e40000 x41100000 x3e45000d} {x42e00000 x41200000 x3de7ffde} {x42de0000 x41200000 0}}} {t {{x41300000 x42d5b6c9}} {{x41300000 x41192494}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush100 512 catmullrom {cc {f 2080} {px x41300000 {x42900000 x42b00000 x3c8ffff3} {x42900000 x42b40000 x3d07fff9} {x42960000 x42ac0000 x3e55000d} {x42980000 x42ac0000 x3e470004} {x42a20000 x42ae0000 x3e4c0011} {x42a40000 x42b00000 x3df00043}}} {t {{x41300000 x4298aaa6}} {{x41300000 x42af0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush99 512 catmullrom {cc {f 2080} {px x41300000 {x41980000 x43858000 x3d0ffff3} {x41a80000 x43858000 x3d3bfff6}}} {t {{x41300000 x41a00000}} {{x41300000 x43858000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush98 512 catmullrom {cc {f 2080} {px x41300000 {x41600000 x43970000 x3cf0000d} {x41600000 x43978000 x3d180007} {x41600000 x43970000 x3e4e0008} {x41800000 x43980000 x3ec0fffc} {x41f00000 x43970000 x3ed67ff6} {x42100000 x43940000 x3ea80000} {x42100000 x438f0000 x3dcc0003} {x42080000 x438e0000 x3e03ffef} {x42080000 x438d0000 0}}} {t {{x41300000 x41caaa99}} {{x41300000 x4393d560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush97 512 catmullrom {cc {f 2080} {px x41300000 {x43060000 x432c0000 x3d1bfff6} {x43020000 x432e0000 x3e07ffde} {x43010000 x432e0000 0}}} {t {{x41300000 x43030000}} {{x41300000 x432d553f}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush96 512 catmullrom {cc {f 2080} {px x41300000 {x43250000 x433a0000 x3d07fff9} {x431f0000 x43380000 x3e45ffe7} {x43100000 x433a0000 x3ea2fff3} {x430d0000 x433b0000 x3ea38002} {x43100000 x433e0000 x3ea0800f} {x43110000 x433e0000 0}}} {t {{x41300000 x4315aac1}} {{x41300000 x433b2ac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush95 512 catmullrom {cc {f 2080} {px x41300000 {x43410000 x43610000 x3d07fff9} {x433d0000 x43640000 x3d2c0003}}} {t {{x41300000 x433f0000}} {{x41300000 x43628000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush94 512 catmullrom {cc {f 2080} {px x41300000 {x43310000 x43640000 x3c980007} {x43350000 x43640000 x3d180007} {x433a0000 x43640000 x3ea38002} {x43370000 x43620000 x3eae7ff6} {x432f0000 x43620000 x3ecd7ffa} {x43260000 x43650000 x3ecf0004} {x43250000 x43680000 x3eca8006} {x43250000 x436b0000 x3eca8006} {x43240000 x436a0000 x3ec60008} {x43200000 x436d0000 x3ebf7ff1} {x43250000 x436a0000 x3e8b8002} {x43280000 x436a0000 0}}} {t {{x41300000 x432b4000}} {{x41300000 x4366eac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush93 512 catmullrom {cc {f 2080} {px x41300000 {x43580000 x43870000 x3cb7ffec} {x43590000 x43878000 x3d13fffd} {x43590000 x438a0000 x3e4effe3} {x435b0000 x438a0000 x3e80fffc} {x435c0000 x438b8000 x3e7effe3} {x43650000 x438c0000 x3e71001d} {x436a0000 x438b8000 x3e1c0011} {x43730000 x438e0000 x3cf0000d} {x43790000 x43900000 x3d860002} {x437d0000 x43900000 x3e45000d} {x43800000 x43910000 x3e857ffa} {x43840000 x43918000 x3e847ffe} {x43860000 x43920000 x3e838002} {x43878000 x43940000 x3e730015} {x43878000 x43930000 0}}} {t {{x41300000 x4371cccd}} {{x41300000 x438dcccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42140000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush92 512 catmullrom {cc {f 2080} {px x41300000 {x42d20000 x43a20000 x3c880014} {x42d80000 x43a20000 x3c0ffffd}}} {t {{x41300000 x42d50000}} {{x41300000 x43a20000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush91 512 catmullrom {cc {f 2080} {px x41300000 {x42c00000 x43a40000 x3ce7fff9} {x42c40000 x43a50000 x3d180007} {x42c40000 x43a30000 x3e980000} {x42c40000 x43a20000 x3b40000b}}} {t {{x41300000 x42c30000}} {{x41300000 x43a38000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush90 512 catmullrom {cc {f 2080} {px x41300000 {x43260000 x43c50000 x3d180007} {x43260000 x43c60000 x3e47ffde} {x432a0000 x43c50000 x3e9d7ffa} {x432c0000 x43c48000 x3e88800f} {x432e0000 x43c40000 x3c0ffffd}}} {t {{x41300000 x4329999a}} {{x41300000 x43c4e666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush89 512 catmullrom {cc {f 2080} {px x41300000 {x42de0000 x43cd8000 x3c6fffd8} {x42e00000 x43cd0000 x3cf0000d} {x42e40000 x43cd0000 x3e63ffef} {x42ea0000 x43ce0000 x3e83ffef} {x42f00000 x43ce0000 x3e83ffef} {x42e80000 x43cf0000 x3e838002} {x42e00000 x43d20000 x3e89fff8} {x42e40000 x43d30000 x3e88800f} {x42ec0000 x43d40000 x3e877ff1} {x42ea0000 x43d60000 x3e6cffeb} {x42ec0000 x43d68000 x3cb0000d}}} {t {{x41300000 x42e6ba5e}} {{x41300000 x43d0ba3d}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush88 512 catmullrom {cc {f 2080} {px x41300000 {x41e00000 x43f78000 x3c60001b} {x42000000 x43f60000 x3d1bfff6} {x42080000 x43f48000 x3e61001d} {x421c0000 x43f50000 x3e61001d} {x42300000 x43f60000 x3e7afff3} {x42300000 x43f50000 x3e8e7ff6} {x42400000 x43f60000 x3e600000} {x42480000 x43f70000 x3e65000d} {x42500000 x43f70000 x3e6a0019} {x42500000 x43f78000 x3d64000a}}} {t {{x41300000 x42293333}} {{x41300000 x43f62666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush87 512 catmullrom {cc {f 2080} {px x41300000 {x42840000 x440a0000 x3d0ffff3} {x42860000 x440a4000 x3d2c0003} {x42840000 x440a0000 0}}} {t {{x41300000 x4284aaa6}} {{x41300000 x440a1550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush86 512 catmullrom {cc {f 2080} {px x41300000 {x42100000 x440e8000 x3cc00000} {x42180000 x440e8000 x3d400000} {x42180000 x440ec000 x3e9c0011} {x42180000 x440e8000 x3dddffc5}}} {t {{x41300000 x42160000}} {{x41300000 x440e9000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush85 512 catmullrom {cc {f 2080} {px x41300000 {x41c80000 x4410c000 x3d000000} {x41d80000 x4410c000 x3d1bfff6} {x41f00000 x44100000 x3eac7ffe} {x41f00000 x440f8000 x3b40000b}}} {t {{x41300000 x41e00000}} {{x41300000 x44104000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush84 512 catmullrom {cc {f 2080} {px x41300000 {x41980000 x440f4000 x3d04000a} {x41980000 x440f8000 x3d2c0003} {x41900000 x440f8000 x3e730015} {x41b00000 x44104000 x3c8ffff3} {x41b00000 x44100000 x3ca7fff9}}} {t {{x41300000 x41a00000}} {{x41300000 x440fb333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush83 512 catmullrom {cc {f 2080} {px x41300000 {x42100000 x44038000 x3d400000} {x41900000 x44028000 x3e45000d} {x41700000 x44020000 x3eac7ffe}}} {t {{x41300000 x41b80000}} {{x41300000 x4402aab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush82 512 catmullrom {cc {f 2080} {px x41300000 {x42380000 x4408c000 x3c6fffd8} {x42300000 x44080000 x3d0ffff3} {x42300000 x44074000 x3c60001b}}} {t {{x41300000 x4232aab3}} {{x41300000 x44080000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush81 512 catmullrom {cc {f 2080} {px x41300000 {x42300000 x44098000 x3ce0001b} {x42340000 x440a0000 x3d04000a} {x42400000 x440a4000 x3e23ffef} {x42480000 x440a4000 x3e81800a} {x424c0000 x440a4000 x3e71001d} {x42500000 x440a4000 x3eb9fff8} {x42580000 x440a4000 x3eb9fff8} {x42640000 x440a0000 x3eba8006} {x42700000 x440a0000 x3eaf0004} {x42740000 x440ac000 x3e670004} {x42740000 x440b0000 x3e81800a} {x427c0000 x440ac000 x3e9f7ff1} {x42800000 x440a4000 x3e18fffc}}} {t {{x41300000 x425a762b}} {{x41300000 x440a44ee}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush80 512 catmullrom {cc {f 2080} {px x41300000 {x43bf0000 x446d8000 x3d30000d} {x43c00000 x446d8000 x3d200000}}} {t {{x41300000 x43bf8000}} {{x41300000 x446d8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush79 512 catmullrom {cc {f 2080} {px x41300000 {x43100000 x44608000 x3d0ffff3} {x43100000 x44610000 x3d2c0003} {x43100000 x44608000 x3d1bfff6} {x43130000 x44610000 x3cb0000d}}} {t {{x41300000 x4310c000}} {{x41300000 x4460c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush78 512 catmullrom {cc {f 2080} {px x41300000 {x43a88000 x445c0000 x3ccffff3} {x43aa0000 x445d4000 x3d6c0003}}} {t {{x41300000 x43a94000}} {{x41300000 x445ca000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush77 512 catmullrom {cc {f 2080} {px x41300000 {x43aa0000 x445d8000 x3db20005} {x43a80000 x445d4000 x3dddffc5} {x43a70000 x445d0000 x3dd1fff8} {x43a70000 x445c8000 x3b40000b}}} {t {{x41300000 x43a80000}} {{x41300000 x445d1000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush76 512 catmullrom {cc {f 2080} {px x41300000 {x43828000 x44588000 x3dadfffb} {x43828000 x44580000 x3da60002}}} {t {{x41300000 x43828000}} {{x41300000 x44584000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush75 512 catmullrom {cc {f 2080} {px x41300000 {x43730000 x4449c000 x3d900000} {x43710000 x444a0000 x3d900000}}} {t {{x41300000 x43720000}} {{x41300000 x4449e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush74 512 catmullrom {cc {f 2080} {px x41300000 {x436d0000 x44454000 x3d0ffff3} {x436b0000 x44454000 0}}} {t {{x41300000 x436c0000}} {{x41300000 x44454000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush73 512 catmullrom {cc {f 2080} {px x41300000 {x43400000 x443f8000 x3cb0000d} {x433e0000 x443f8000 x3d4c0003} {x433d0000 x443f4000 x3d7bfff6} {x43410000 x443f0000 x3dd1fff8} {x43430000 x443f0000 x3ddc0011} {x43430000 x443e0000 x3d07fff9}}} {t {{x41300000 x4340553f}} {{x41300000 x443f0ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush72 512 catmullrom {cc {f 2080} {px x41300000 {x43810000 x43d60000 x3c6fffd8} {x43840000 x43d38000 x3cc00000} {x43850000 x43d38000 x3e25000d}}} {t {{x41300000 x43835560}} {{x41300000 x43d45560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush71 512 catmullrom {cc {f 2080} {px x41300000 {x43680000 x43d90000 x3d07fff9} {x436a0000 x43d98000 x3d27fff9} {x436b0000 x43da0000 x3e2cffeb} {x436d0000 x43d98000 x3e61fff8}}} {t {{x41300000 x436a8000}} {{x41300000 x43d98000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush70 512 catmullrom {cc {f 2080} {px x41300000 {x43650000 x43ea0000 x3d0ffff3} {x436a0000 x43eb0000 x3dcc0003} {x436e0000 x43e90000 x3e01001d}}} {t {{x41300000 x4369aac1}} {{x41300000 x43ea0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush69 512 catmullrom {cc {f 2080} {px x41300000 {x43790000 x43ec0000 x3cc80014} {x43740000 x43eb0000 x3d200000} {x43740000 x43eb8000 x3d83fffd} {x43740000 x43ed0000 x3df40032} {x43730000 x43ed0000 x3e51001d} {x43760000 x43ec0000 x3e88800f} {x43790000 x43ec0000 x3e85000d}}} {t {{x41300000 x4375922d}} {{x41300000 x43ec124e}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x41880000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush68 512 catmullrom {cc {f 2080} {px x41300000 {x43a38000 x44040000 x3d27fff9} {x43a40000 x44040000 x3dadfffb} {x43a40000 x44048000 x3e3cffeb}}} {t {{x41300000 x43a3d560}} {{x41300000 x44042ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x420c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush67 512 catmullrom {cc {f 2080} {px x41300000 {x43ae8000 x440a0000 x3cf0000d} {x43af8000 x440a0000 x3e0a0019} {x43ae8000 x44094000 x3e7c0011} {x43ae8000 x44098000 x3cf0000d}}} {t {{x41300000 x43aec000}} {{x41300000 x4409b000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x420c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush66 512 catmullrom {cc {f 2080} {px x41300000 {x43ee8000 x44220000 x3cd80007} {x43ed8000 x44214000 x3d04000a} {x43ef0000 x4420c000 x3db9fffe} {x43f00000 x441f0000 x3e92fff3}}} {t {{x41300000 x43eec000}} {{x41300000 x4420c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush65 512 catmullrom {cc {f 2080} {px x41300000 {x43d88000 x441fc000 x3ca7fff9} {x43d98000 x441fc000 x3d200000} {x43db0000 x441f4000 x3e630015} {x43db8000 x441f0000 x3db3fffd}}} {t {{x41300000 x43da2000}} {{x41300000 x441f7000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush64 512 catmullrom {cc {f 2080} {px x41300000 {x43f60000 x44334000 x3c800000} {x43f60000 x44330000 x3ce0001b}}} {t {{x41300000 x43f60000}} {{x41300000 x44332000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush63 512 catmullrom {cc {f 2080} {px x41300000 {x43ed8000 x44338000 x3c9fffe5} {x43ed8000 x44348000 x3d0c0003} {x43ef0000 x44348000 x3e68fffc} {x43f00000 x44348000 x3d180007}}} {t {{x41300000 x43ee8000}} {{x41300000 x44344000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush62 512 catmullrom {cc {f 2080} {px x41300000 {x4428c000 x44640000 x3d33fffd} {x44290000 x44640000 x3d83fffd} {x44298000 x44638000 x3dadfffb}}} {t {{x41300000 x44291550}} {{x41300000 x4463d550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush61 512 catmullrom {cc {f 2080} {px x41300000 {x44178000 x4464c000 x3d7bfff6} {x44170000 x4464c000 x3da00000} {x44170000 x44648000 x3e928006}}} {t {{x41300000 x44172ab0}} {{x41300000 x4464aab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush60 512 catmullrom {cc {f 2080} {px x41300000 {x42c80000 x444f8000 x3d04000a} {x42c80000 x444e8000 x3d400000} {x42d40000 x444e4000 x3dadfffb} {x42d80000 x444e4000 x3cc80014}}} {t {{x41300000 x42cf0000}} {{x41300000 x444ea000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush59 512 catmullrom {cc {f 2080} {px x41300000 {x43b00000 x44530000 x3d780007} {x43af8000 x44530000 x3db80007}}} {t {{x41300000 x43afc000}} {{x41300000 x44530000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush58 512 catmullrom {cc {f 2080} {px x41300000 {x43fd8000 x445c8000 x3d44000a} {x43fe0000 x445c8000 x3da7fff9}}} {t {{x41300000 x43fdc000}} {{x41300000 x445c8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush57 512 catmullrom {cc {f 2080} {px x41300000 {x43e10000 x4443c000 x3d4c0003} {x43e18000 x4443c000 x3d64000a} {x43e28000 x44438000 x3e730015}}} {t {{x41300000 x43e1aaa0}} {{x41300000 x4443aab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush56 512 catmullrom {cc {f 2080} {px x41300000 {x43998000 x443f4000 x3d8c0003} {x439a8000 x443f4000 x3d9c0003} {x439d8000 x443e8000 x3e75ffe7} {x439d8000 x443e0000 0}}} {t {{x41300000 x439bc000}} {{x41300000 x443ec000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush55 512 catmullrom {cc {f 2080} {px x41300000 {x43680000 x441a0000 x3ccffff3} {x43680000 x441a8000 x3d0c0003} {x436a0000 x441a8000 x3e1c0011} {x43680000 x441ac000 x3e670004} {x436a0000 x441c0000 x3e960008}}} {t {{x41300000 x4368cccd}} {{x41300000 x441ac000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush54 512 catmullrom {cc {f 2080} {px x41300000 {x432c0000 x4417c000 x3cd80007} {x432b0000 x4417c000 x3d07fff9} {x432b0000 x44184000 x3e6e0008} {x43310000 x44178000 x3eb5000d} {x43380000 x4416c000 x3e9b8002}}} {t {{x41300000 x432f0000}} {{x41300000 x4417999a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush53 512 catmullrom {cc {f 2080} {px x41300000 {x43060000 x43f40000 x3d04000a} {x430a0000 x43f50000 x3d4c0003} {x43080000 x43f50000 x3d83fffd}}} {t {{x41300000 x43080000}} {{x41300000 x43f4aaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush52 512 catmullrom {cc {f 2080} {px x41300000 {x42bc0000 x43e88000 x3c980007} {x42ba0000 x43e88000 x3d4c0003} {x42b40000 x43eb0000 x3e89800a} {x42c60000 x43eb8000 x3e5c0011}}} {t {{x41300000 x42bc0000}} {{x41300000 x43e9e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush51 512 catmullrom {cc {f 2080} {px x41300000 {x43380000 x43f10000 x3d04000a} {x433a0000 x43f10000 x3d1bfff6}}} {t {{x41300000 x43390000}} {{x41300000 x43f10000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush50 512 catmullrom {cc {f 2080} {px x41300000 {x43130000 x43e20000 x3c800000} {x43140000 x43e00000 x3d30000d} {x43190000 x43e10000 x3dc00000} {x431a0000 x43e28000 x3e6cffeb} {x43200000 x43e70000 x3e730015} {x43220000 x43e90000 x3e67ffde} {x431f0000 x43e88000 x3dfdffc5} {x43200000 x43ea0000 x3d9dfffb} {x432b0000 x43ed0000 x3e15ffe7}}} {t {{x41300000 x431d1c6a}} {{x41300000 x43e5e396}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush49 512 catmullrom {cc {f 2080} {px x41300000 {x43b00000 x43da0000 x3d000000} {x43b00000 x43db0000 x3d27fff9} {x43b30000 x43e00000 x3e0c0011} {x43b28000 x43e10000 0}}} {t {{x41300000 x43b16000}} {{x41300000 x43dd8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush48 512 catmullrom {cc {f 2080} {px x41300000 {x43b28000 x43d60000 x3cb0000d} {x43b28000 x43d50000 x3d1bfff6} {x43b48000 x43d38000 x3e8f7ff1} {x43b80000 x43d30000 x3e9f0004} {x43b90000 x43d30000 x3e13ffef}}} {t {{x41300000 x43b54ccd}} {{x41300000 x43d4199a}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush47 512 catmullrom {cc {f 2080} {px x41300000 {x44118000 x43fd0000 x3d1bfff6} {x4411c000 x43fe0000 x3e0a0019} {x44124000 x43fe0000 x3c4ffff3}}} {t {{x41300000 x4411d550}} {{x41300000 x43fdaaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush46 512 catmullrom {cc {f 2080} {px x41300000 {x4416c000 x43ef0000 x3d04000a} {x4416c000 x43f00000 x3d1bfff6}}} {t {{x41300000 x4416c000}} {{x41300000 x43ef8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush45 512 catmullrom {cc {f 2080} {px x41300000 {x441b4000 x43de0000 x3d04000a} {x441b8000 x43df0000 x3d30000d} {x441d0000 x43df0000 x3ead7ffa} {x441f0000 x43df0000 x3eaf7ff1} {x44208000 x43df8000 x3d27fff9}}} {t {{x41300000 x441d7333}} {{x41300000 x43dee666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush44 512 catmullrom {cc {f 2080} {px x41300000 {x44050000 x43c60000 x3ca7fff9} {x44058000 x43c60000 x3d24000a} {x44068000 x43c60000 x3ea80000} {x4407c000 x43c70000 x3e55ffe7} {x44088000 x43c78000 x3d70000d}}} {t {{x41300000 x4406a666}} {{x41300000 x43c68000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush43 512 catmullrom {cc {f 2080} {px x41300000 {x4404c000 x43b28000 x3c6fffd8} {x44050000 x43b28000 x3d0ffff3} {x4404c000 x43b40000 x3eb38002} {x4404c000 x43b50000 x3a7ffff7}}} {t {{x41300000 x4404d000}} {{x41300000 x43b38000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush42 512 catmullrom {cc {f 2080} {px x41300000 {x44020000 x43a20000 x3d13fffd} {x44028000 x43a30000 x3dddffc5}}} {t {{x41300000 x44024000}} {{x41300000 x43a28000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush41 512 catmullrom {cc {f 2080} {px x41300000 {x4405c000 x43950000 x3cd80007} {x44068000 x43950000 x3d1bfff6} {x4407c000 x43950000 x3e21fff8} {x4407c000 x43960000 0}}} {t {{x41300000 x4406f000}} {{x41300000 x43954000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush40 512 catmullrom {cc {f 2080} {px x41300000 {x440f8000 x43840000 x3cd80007} {x44104000 x43840000 x3e92fff3} {x4410c000 x43830000 x3e99800a}}} {t {{x41300000 x44102ab0}} {{x41300000 x4383aaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush39 512 catmullrom {cc {f 2080} {px x41300000 {x443b0000 x43828000 x3d4ffff3} {x443b8000 x43828000 x3d900000} {x443bc000 x43828000 x3e9c7ffe}}} {t {{x41300000 x443b6ab0}} {{x41300000 x43828000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush38 512 catmullrom {cc {f 2080} {px x41300000 {x442f0000 x43840000 x3ce7fff9} {x442f8000 x43840000 x3d180007} {x44308000 x43840000 x3e870004} {x44314000 x43840000 0}}} {t {{x41300000 x44301000}} {{x41300000 x43840000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush37 512 catmullrom {cc {f 2080} {px x41300000 {x44358000 x43200000 x3cb0000d} {x4435c000 x43200000 x3d0ffff3} {x44370000 x431f0000 x3e4effe3}}} {t {{x41300000 x44361550}} {{x41300000 x431faac1}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush36 512 catmullrom {cc {f 2080} {px x41300000 {x44280000 x434c0000 x3cd80007} {x44280000 x434a0000 x3e89fff8} {x4428c000 x43470000 x3e900000} {x44290000 x43440000 x3dc60002}}} {t {{x41300000 x44287000}} {{x41300000 x43484000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush35 512 catmullrom {cc {f 2080} {px x41300000 {x4437c000 x43550000 x3cc00000} {x44380000 x43530000 x3d13fffd} {x44394000 x434f0000 x3e51fff8} {x443a4000 x434c0000 x3e6cffeb} {x443d0000 x434c0000 x3e67ffde} {x443f8000 x434d0000 x3e65ffe7} {x44404000 x434f0000 x3b40000b}}} {t {{x41300000 x443b6db2}} {{x41300000 x434f4937}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush34 512 catmullrom {cc {f 2080} {px x41300000 {x44388000 x43970000 x3cd80007} {x44390000 x43970000 x3d24000a} {x44394000 x43950000 x3e6a0019} {x443a0000 x43948000 x3e55000d}}} {t {{x41300000 x44393000}} {{x41300000 x4395e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush33 512 catmullrom {cc {f 2080} {px x41300000 {x44460000 x43a60000 x3ca7fff9} {x44464000 x43a50000 x3d04000a} {x4447c000 x43a30000 x3d1bfff6} {x44494000 x43a30000 x3d1bfff6} {x44494000 x43a20000 x3e90800f}}} {t {{x41300000 x4447b333}} {{x41300000 x43a3cccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush32 512 catmullrom {cc {f 2080} {px x41300000 {x44394000 x43ac0000 x3cb7ffec} {x44398000 x43ac0000 x3d200000} {x443a4000 x43ab0000 x3e8a8006} {x443b0000 x43a98000 x3ea2fff3} {x443d4000 x43a98000 x3e947ffe} {x443ec000 x43aa0000 x3c980007}}} {t {{x41300000 x443b5550}} {{x41300000 x43aaaaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush31 512 catmullrom {cc {f 2080} {px x41300000 {x442c8000 x43c90000 x3d04000a} {x442c8000 x43c80000 x3d27fff9} {x442cc000 x43c70000 x3e7e0008} {x442d4000 x43c60000 x3e8b8002} {x442e0000 x43c78000 x3e65000d}}} {t {{x41300000 x442d0000}} {{x41300000 x43c78000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush30 512 catmullrom {cc {f 2080} {px x41300000 {x4440c000 x43f00000 x3d0c0003} {x44430000 x43ef0000 x3dc9fffe} {x44430000 x43ee8000 x3e330015} {x44428000 x43f00000 x3e33ffef} {x44424000 x43f18000 x3e5afff3} {x4441c000 x43f18000 x3c980007}}} {t {{x41300000 x44423550}} {{x41300000 x43f01560}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush29 512 catmullrom {cc {f 2080} {px x41300000 {x44304000 x43e80000 x3cc80014} {x44304000 x43e90000 x3d000000} {x44304000 x43ea0000 x3d33fffd} {x44308000 x43e90000 x3e35000d} {x4431c000 x43e90000 x3e73ffef} {x44320000 x43ea0000 x3e730015} {x44310000 x43ec0000 x3e3c0011} {x442f0000 x43ed0000 x3e45000d} {x442f8000 x43ef0000 x3e4a0019} {x44308000 x43f10000 x3e600000} {x44308000 x43f18000 x3e5cffeb} {x442f8000 x43f30000 x3e61fff8} {x442f8000 x43f50000 x3e61fff8} {x442f0000 x43f50000 0}}} {t {{x41300000 x44304000}} {{x41300000 x43ed9b64}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush28 512 catmullrom {cc {f 2080} {px x41300000 {x44248000 x441e4000 x3d0c0003} {x44268000 x44200000 x3d400000}}} {t {{x41300000 x44258000}} {{x41300000 x441f2000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush27 512 catmullrom {cc {f 2080} {px x41300000 {x44200000 x441c0000 x3d07fff9} {x44208000 x441c0000 x3d27fff9} {x44218000 x441d0000 x3dce0008} {x44220000 x441d0000 x3dc3fffd} {x44230000 x441dc000 x3d9dfffb} {x4423c000 x441e4000 x3d820005}}} {t {{x41300000 x4421cab0}} {{x41300000 x441d0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush26 512 catmullrom {cc {f 2080} {px x41300000 {x4422c000 x44148000 x3ce0001b} {x44230000 x44140000 x3cf0000d} {x4423c000 x4413c000 x3dc60002} {x44250000 x44134000 x3e170004} {x4425c000 x44134000 x3e938002} {x44260000 x4413c000 x3d30000d}}} {t {{x41300000 x44246000}} {{x41300000 x4413c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush25 512 catmullrom {cc {f 2080} {px x41300000 {x43ed0000 x44350000 x3d1bfff6} {x43eb8000 x4434c000 x3d27fff9}}} {t {{x41300000 x43ec4000}} {{x41300000 x4434e000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush24 512 catmullrom {cc {f 2080} {px x41300000 {x440ac000 x44224000 x3d1bfff6} {x440ac000 x4422c000 x3da9fffe} {x440a4000 x4422c000 x3e3e0008}}} {t {{x41300000 x440a9550}} {{x41300000 x44229550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush23 512 catmullrom {cc {f 2080} {px x41300000 {x440c8000 x44194000 x3ca7fff9} {x440d4000 x44194000 x3d0ffff3} {x440f0000 x44184000 x3e400000} {x440f4000 x44184000 x3e470004}}} {t {{x41300000 x440e0000}} {{x41300000 x4418c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush22 512 catmullrom {cc {f 2080} {px x41300000 {x44014000 x440dc000 x3cf7ffec} {x44010000 x440c8000 x3d200000} {x44008000 x440b0000 x3d780007}}} {t {{x41300000 x4400eab0}} {{x41300000 x440c6ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush21 512 catmullrom {cc {f 2080} {px x41300000 {x44034000 x441c4000 x3cc80014} {x44038000 x441c0000 x3cf0000d} {x44040000 x4419c000 x3d33fffd} {x44040000 x44178000 x3d27fff9} {x44038000 x44118000 x3d27fff9} {x4402c000 x440f8000 x3d47fff9}}} {t {{x41300000 x44038000}} {{x41300000 x44171550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush20 512 catmullrom {cc {f 2080} {px x41300000 {x44028000 x441b8000 x3cc80014} {x4402c000 x441a8000 x3d27fff9} {x44040000 x44188000 x3d4c0003} {x44038000 x44178000 x3dd5ffe7} {x44034000 x44158000 x3dddffc5}}} {t {{x41300000 x44033333}} {{x41300000 x4418b333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush19 512 catmullrom {cc {f 2080} {px x41300000 {x43ff0000 x44244000 x3c800000} {x43ff8000 x44238000 x3ca7fff9} {x44014000 x44224000 x3d04000a}}} {t {{x41300000 x44002ab0}} {{x41300000 x44235550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush18 512 catmullrom {cc {f 2080} {px x41300000 {x43f90000 x44254000 x3cf7ffec} {x43fa8000 x44254000 x3d1bfff6} {x43fc0000 x44250000 x3d380007}}} {t {{x41300000 x43fa8000}} {{x41300000 x44252ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush17 512 catmullrom {cc {f 2080} {px x41300000 {x43e60000 x442a4000 x3c800000} {x43e70000 x442a4000 x3ccffff3} {x43ea0000 x442a4000 x3dac0003} {x43ed0000 x442a4000 x3e2cffeb} {x43f18000 x44290000 x3e2cffeb} {x43f18000 x4428c000 x3dea0019} {x43f20000 x44288000 x3ce7fff9}}} {t {{x41300000 x43ecb6e9}} {{x41300000 x44299b75}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush16 512 catmullrom {cc {f 2080} {px x41300000 {x440e8000 x44300000 x3d04000a} {x44104000 x44300000 x3d3bfff6} {x44124000 x442f8000 x3e7c0011}}} {t {{x41300000 x44105550}} {{x41300000 x442fd550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush15 512 catmullrom {cc {f 2080} {px x41300000 {x44244000 x44300000 x3d200000} {x44268000 x44300000 x3d4c0003} {x44298000 x442f8000 x3e770004}}} {t {{x41300000 x4426c000}} {{x41300000 x442fd550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush14 512 catmullrom {cc {f 2080} {px x41300000 {x44308000 x443f4000 x3d07fff9} {x44314000 x443f4000 x3d30000d} {x4432c000 x443f0000 x3e82fff3} {x44334000 x443f0000 0}}} {t {{x41300000 x4431f000}} {{x41300000 x443f2000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush13 512 catmullrom {cc {f 2080} {px x41300000 {x444d8000 x447b8000 x3dbc0003} {x444e0000 x447b8000 x3dc20005}}} {t {{x41300000 x444dc000}} {{x41300000 x447b8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush12 512 catmullrom {cc {f 2080} {px x41300000 {x44430000 x44620000 x3da20005} {x44428000 x44620000 x3db9fffe} {x44430000 x44620000 x3de3ffef} {x44440000 x44620000 x3e90800f} {x44448000 x44618000 x3e430015}}} {t {{x41300000 x44436666}} {{x41300000 x4461e666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush11 512 catmullrom {cc {f 2080} {px x41300000 {x443bc000 x44500000 x3d9dfffb} {x443d4000 x44500000 x3dcc0003} {x443ec000 x444f0000 x3e700000} {x443f4000 x444e8000 x3c0ffffd}}} {t {{x41300000 x443dc000}} {{x41300000 x444f6000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush10 512 catmullrom {cc {f 2080} {px x41300000 {x44734000 x44588000 x3c800000} {x4473c000 x44588000 x3d89fffe} {x44748000 x44580000 x3e977ff1} {x4474c000 x44580000 0}}} {t {{x41300000 x44741000}} {{x41300000 x44584000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush9 512 catmullrom {cc {f 2080} {px x41300000 {x445a4000 x44568000 x3d87fff9} {x445b0000 x44568000 x3da7fff9} {x445d4000 x44560000 x3e83ffef} {x445f8000 x44560000 x3e977ff1} {x44640000 x44560000 x3e9a8006} {x4467c000 x44568000 x3ea28006} {x44694000 x44578000 x3eae0008} {x44694000 x44580000 x3e0cffeb}}} {t {{x41300000 x44620800}} {{x41300000 x4456a000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush8 512 catmullrom {cc {f 2080} {px x41300000 {x44538000 x444c0000 x3d580007} {x44530000 x444b8000 x3e947ffe} {x4452c000 x444b8000 x3eb57ffa} {x44520000 x444c0000 x3eb9800a} {x44524000 x444c0000 x3eb70004} {x44520000 x444b4000 x3eb3ffef}}} {t {{x41300000 x44529550}} {{x41300000 x444bb550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x423c0000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush7 512 catmullrom {cc {f 2080} {px x41300000 {x44574000 x44338000 x3d4ffff3} {x44578000 x44338000 x3d64000a} {x44574000 x44338000 x3e03ffef} {x44570000 x44338000 x3e6e0008}}} {t {{x41300000 x44574000}} {{x41300000 x44338000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42540000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush6 512 catmullrom {cc {f 2080} {px x41300000 {x44550000 x442a8000 x3d33fffd} {x4452c000 x442a8000 x3e98fffc} {x44518000 x442a8000 x3e7effe3}}} {t {{x41300000 x44531550}} {{x41300000 x442a8000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42820000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush5 512 catmullrom {cc {f 2080} {px x41300000 {x445f0000 x4420c000 x3d44000a} {x445f8000 x4420c000 x3e15ffe7} {x445fc000 x44214000 x3e860008} {x44610000 x44218000 x3eb9fff8}}} {t {{x41300000 x445fd000}} {{x41300000 x44211000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42820000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush4 512 catmullrom {cc {f 2080} {px x41300000 {x44524000 x4416c000 x3cc00000} {x44520000 x4416c000 x3d380007} {x44538000 x4416c000 x3e75000d} {x44560000 x44164000 x3eb70004} {x44580000 x4414c000 x3ebd000d} {x44588000 x44140000 x3eac7ffe} {x4458c000 x44134000 x3e9d7ffa}}} {t {{x41300000 x4455924e}} {{x41300000 x44158000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42820000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush3 512 catmullrom {cc {f 2080} {px x41300000 {x4471c000 x44130000 x3d0c0003} {x44728000 x44130000 x3e2e0008} {x44754000 x44118000 x3ef1800a}}} {t {{x41300000 x44732ab0}} {{x41300000 x44128000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42820000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush2 512 catmullrom {cc {f 2080} {px x41300000 {x448cc000 x44190000 x3d2c0003} {x448d2000 x44190000 x3e2c0011} {x448d0000 x44190000 x3ee28006}}} {t {{x41300000 x448cf571}} {{x41300000 x44190000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42820000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {px x41300000 {x4473c000 x441c4000 x3cf0000d} {x44748000 x441cc000 x3d200000} {x4476c000 x441c4000 x3ec00000} {x44790000 x441c0000 x3eeb8002} {x447c0000 x441ac000 x3ef00000} {x447d0000 x441a8000 x3eed000d} {x447e4000 x441a0000 x3ee9800a} {x447f0000 x441a0000 x3ee57ffa} {x44800000 x441a0000 x3ee3ffef} {x44804000 x441a0000 x3ed80000} {x44808000 x441a8000 x3ed70004} {x44804000 x441a8000 x3d04000a}}} {t {{x41300000 x447c051f}} {{x41300000 x441af550}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a ro 0 go 0 bo 0 ao 0 opc x3e99999a bs x42820000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x41300000 ltm x41300000 tt x41600000 nv x40000000 view2 x40000000}}}}}} toolbox {smear { { selectAll bs 172 src 1 str 1 ssx 1 ssy 1 sf 1 ep1 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createOpenSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush opc 0.1 bs 37 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 11 ltm 11 ltt 0 tt 14 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear bs 172 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 11 ltm 11 tt 25 } } } toolbar_brush_size 172 toolbar_brush_hardness 0.200000003 toolbar_lifetime_type single toolbar_lifetime_start 11 toolbar_lifetime_end 11 toolbar_effect_parameter1 1 toolbar_paint_source fg toolbar_source_transform_scale {1 1} toolbar_source_transform_center {960 540} colorOverlay {0 0 0 0} paint_source foreground lifetime_type "all frames" lifetime_start 39 lifetime_end 39 motionblur_on true brush_type smear brush_size 172 brush_spacing 0.05000000075 brush_hardness 0.200000003 effect_parameter1 1 source_translate_round false source_black_outside true name RotoPaint3 xpos 1706 ypos 14767 disable {{"parent.lensDirtPicker == 0 ? 0 : 1"}} } RotoPaint { cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 512} {t x44768000 x43fd0000} {a opc x3ecccccd} {cubiccurve Brush26 512 catmullrom {cc {f 2080} {px x41300000 {x44cfe000 x44800000 x3d6c0003} {x44d06000 x44800000 0}}} {t {{x41300000 x44d02000}} {{x41300000 x44800000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush25 512 catmullrom {cc {f 2080} {px x41300000 {x44cb0000 x447e4000 x3e78fffc} {x44ca8000 x44808000 x3ea67ff6} {x44cba000 x4480e000 x3f071fff} {x44cd0000 x44800000 x3f101ffb} {x44cc8000 x44804000 x3c8ffff3}}} {t {{x41300000 x44cbb99a}} {{x41300000 x44802666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush24 512 catmullrom {cc {f 2080} {px x41300000 {x44ca4000 x44730000 x3d400000} {x44ca8000 x44744000 x3e380022} {x44c80000 x44780000 x3e9a8006} {x44c72000 x44778000 x3e63ffef}}} {t {{x41300000 x44c8f800}} {{x41300000 x4475b000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush23 512 catmullrom {cc {f 2080} {px x41300000 {x44e84000 x4470c000 x3d180007} {x44e96000 x446f8000 x3e25000d} {x44ec0000 x44744000 x3eac7ffe} {x44ec4000 x44768000 x3ebafff3} {x44ecc000 x44778000 x3ebf7ff1} {x44ec8000 x44780000 x3ec3ffef} {x44ef6000 x447e4000 x3ec0800f} {x44ef0000 x447e4000 x3ec00000} {x44efa000 x447dc000 x3ea0fffc} {x44ef6000 x447d4000 0}}} {t {{x41300000 x44ecd99a}} {{x41300000 x44783333}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush22 512 catmullrom {cc {f 2080} {px x41300000 {x44878000 x44458000 x3cd80007} {x448e6000 x44228000 x3d0ffff3} {x4491a000 x44054000 x3d83fffd}}} {t {{x41300000 x448d2a8f}} {{x41300000 x44246ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush21 512 catmullrom {cc {f 2080} {px x41300000 {x44808000 x44720000 x3d27fff9} {x4480e000 x44728000 x3e33ffef} {x44830000 x44668000 x3e400000} {x44830000 x44540000 x3ec1800a} {x4485a000 x444bc000 x3e67ffde}}} {t {{x41300000 x4482999a}} {{x41300000 x44622666}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush20 512 catmullrom {cc {f 2080} {px x41300000 {x44380000 x4431c000 x3ce0001b} {x44390000 x443c8000 x3d200000} {x4439c000 x44514000 x3d9dfffb} {x44388000 x445fc000 x3da3fffd} {x44374000 x44698000 x3e500000}}} {t {{x41300000 x44388000}} {{x41300000 x444e8ccd}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush19 512 catmullrom {cc {f 2080} {px x41300000 {x44338000 x442c4000 x3da7fff9} {x44374000 x441ec000 x3e45ffe7} {x44380000 x441c8000 x3e65ffe7}}} {t {{x41300000 x44364000}} {{x41300000 x44228000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush18 512 catmullrom {cc {f 2080} {px x41300000 {x44380000 x44554000 x3d000000} {x44390000 x4456c000 x3e27ffde} {x44374000 x44580000 x3e6cffeb} {x44348000 x445dc000 x3e7c0011} {x44340000 x44650000 x3e4e0008} {x44354000 x44650000 x3e01001d}}} {t {{x41300000 x44365550}} {{x41300000 x445ca000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush17 512 catmullrom {cc {f 2080} {px x41300000 {x44338000 x444cc000 x3ce7fff9} {x4431c000 x444f0000 x3d0c0003}}} {t {{x41300000 x4432a000}} {{x41300000 x444de000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush16 512 catmullrom {cc {f 2080} {px x41300000 {x44348000 x44314000 x3d4c0003} {x44308000 x44364000 x3e1cffeb}}} {t {{x41300000 x44328000}} {{x41300000 x4433c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush15 512 catmullrom {cc {f 2080} {px x41300000 {x44284000 x44278000 x3d380007} {x4428c000 x4428c000 x3e3c0011} {x442a0000 x4429c000 x3d200000}}} {t {{x41300000 x44290000}} {{x41300000 x4428aab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush14 512 catmullrom {cc {f 2080} {px x41300000 {x43f30000 x43e48000 x3cc80014} {x43fe0000 x43eb0000 x3d04000a}}} {t {{x41300000 x43f88000}} {{x41300000 x43e7c000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush13 512 catmullrom {cc {f 2080} {px x41300000 {x44f4a000 x42440000 x3e08fffc} {x44f8e000 x41b00000 x3e8d000d} {x44f8e000 x40000000 x3eca8006} {x44f82000 x40800000 x3e67ffde}}} {t {{x41300000 x44f7a000}} {{x41300000 x419a0000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush12 512 catmullrom {cc {f 2080} {px x41300000 {x443d0000 x41900000 x3dd80022} {x44404000 xc0a00000 x3e700000} {x443ec000 xc0e00000 0}}} {t {{x41300000 x443eaab0}} {{x41300000 x40000000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush11 512 catmullrom {cc {f 2080} {px x41300000 {x42580000 x41100000 x3d30000d} {x41b80000 x41900000 x3db3fffd}}} {t {{x41300000 x421a0000}} {{x41300000 x41580000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush10 512 catmullrom {cc {f 2080} {px x41300000 {x433d0000 x42f80000 x3cd80007} {x432f0000 x42f20000 x3da7fff9} {x431d0000 x42ca0000 x3df80022} {x42be0000 x42240000 x3e1afff3} {x42600000 x423c0000 x3e1c0011} {x42860000 x42180000 x3e470004} {x42880000 x41c80000 x3e938002} {x42860000 x41b00000 x3e25000d} {x42240000 x41d80000 x3d4ffff3}}} {t {{x41300000 x42cb5581}} {{x41300000 x4272aab3}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush9 512 catmullrom {cc {f 2080} {px x41300000 {x4417c000 x44624000 x3d47fff9} {x44158000 x44648000 x3d7bfff6}}} {t {{x41300000 x4416a000}} {{x41300000 x44636000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush8 512 catmullrom {cc {f 2080} {px x41300000 {x441fc000 x4447c000 x3cc80014} {x44198000 x44570000 x3dc9fffe}}} {t {{x41300000 x441ca000}} {{x41300000 x444f6000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush7 512 catmullrom {cc {f 2080} {px x41300000 {x44f38000 x44674000 x3cd80007} {x44f2c000 x44600000 x3dd1fff8} {x44f22000 x44594000 x3e0afff3}}} {t {{x41300000 x44f2ca8f}} {{x41300000 x44602ab0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush6 512 catmullrom {cc {f 2080} {px x41300000 {x44de8000 x447c8000 x3d27fff9} {x44df0000 x44728000 x3df9ffd6} {x44df4000 x44540000 x3e93ffef} {x44df0000 x44278000 x3ed9800a} {x44e3e000 x43ed8000 x3ee9fff8} {x44e8a000 x43910000 x3ee38002} {x44ecc000 x42fc0000 x3eb70004}}} {t {{x41300000 x44e30000}} {{x41300000 x441cc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush5 512 catmullrom {cc {f 2080} {px x41300000 {x44c56000 x446cc000 x3d27fff9} {x44c46000 x4467c000 x3e07ffde} {x44c1c000 x44484000 x3eaa8006} {x44c14000 x443f4000 x3eb8fffc} {x44bfe000 x44114000 x3ec60008} {x44c2e000 x43c88000 x3ee67ff6} {x44c56000 x437e0000 x3ef2fff3} {x44c84000 x430e0000 x3ef77ff1} {x44ca4000 x42340000 x3ef38002} {x44cda000 xc2980000 x3ee28006} {x44cec000 xc2f20000 x3cd80007}}} {t {{x41300000 x44c628a4}} {{x41300000 x43d4174c}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush4 512 catmullrom {cc {f 2080} {px x41300000 {x44be2000 x44764000 x3d400000} {x44ba8000 x43150000 x3d70000d} {x44c02000 xc3190000 x3f01dffc} {x44c8e000 xc3ab0000 x3ec28006}}} {t {{x41300000 x44c06800}} {{x41300000 x431fc000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush3 512 catmullrom {cc {f 2080} {px x41300000 {x442a0000 x43f98000 x3d580007} {x442a0000 x43f10000 x3df1fff8} {x44380000 x43a90000 x3e0a0019} {x443f4000 x43780000 x3e25ffe7} {x444f8000 x42f80000 x3e5afff3} {x44564000 x42440000 x3e500000} {x4459c000 xc1100000 x3e21fff8}}} {t {{x41300000 x44418927}} {{x41300000 x43774937}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush2 512 catmullrom {cc {f 2080} {px x41300000 {x44244000 x43c08000 x3d380007} {x4424c000 x43d48000 x3e0effe3} {x44268000 x43e30000 x3e1cffeb}}} {t {{x41300000 x44252ab0}} {{x41300000 x43d2aaa0}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {px x41300000 {x43420000 x423c0000 x3cf7ffec} {x43190000 x43030000 x3d30000d} {x43140000 x434b0000 x3e92fff3} {x432b0000 x436f0000 x3e92fff3} {x43630000 x43730000 x3e9f0004} {x439b0000 x43190000 x3eb28006} {x43c38000 x42740000 x3ebd000d} {x43dc8000 x41a00000 x3ebd7ffa} {x43fc0000 x41900000 x3ebc0011} {x440e4000 x42740000 x3ebb8002} {x440f0000 x431e0000 x3eb70004} {x440d4000 x43530000 x3e7afff3} {x44190000 x43530000 x3e5afff3} {x44268000 x430b0000 x3e61001d} {x44294000 x42f80000 x3e180022} {x4431c000 x42a60000 x3d1bfff6}}} {t {{x41300000 x43d7f810}} {{x41300000 x43036000}} 0 {{x41300000 0}} {{x41300000 0}} 0 0 0 {{x41300000 0}} {{x41300000 1}} {{x41300000 1}} 1 {{x41300000 0}}} {a r x3e3851ec g x3e3851ec b x3e3851ec ro 0 go 0 bo 0 ao 0 opc x3d4ccccd bs x441d4000 bu 1 spx x44768000 spy x43fd0000 sb 1 ltn x421c0000 ltm x421c0000 tt x41600000 nv x40000000 view2 x40000000}}}}}} toolbox {blur { { selectAll bs 683 src 1 str 1 ssx 1 ssy 1 sf 1 ep1 15 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createOpenSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush r 0.18 g 0.18 b 0.18 opc 0.05 bs 629 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 11 ltm 11 tt 14 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur bs 683 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 11 ltm 11 tt 23 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_size 683 toolbar_brush_hardness 0.200000003 toolbar_lifetime_type single toolbar_lifetime_start 11 toolbar_lifetime_end 11 toolbar_effect_parameter1 15 toolbar_paint_source fg toolbar_source_transform_scale {1 1} toolbar_source_transform_center {960 540} color {0.1800000072 0.1800000072 0.1800000072 1} colorOverlay {0 0 0 0} opacity 0.05000000075 lifetime_type "all frames" lifetime_start 39 lifetime_end 39 motionblur_on true brush_size 629 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_translate_round false source_black_outside true name RotoPaint4 xpos 1706 ypos 14819 disable {{"parent.lensDirtPicker == 0 ? 0 : 1"}} } FrameHold { name FrameHold4 xpos 1706 ypos 14863 } Switch { inputs 5 which {{parent.lensDirtPicker}} name Switch2 xpos 1581 ypos 14989 } Reformat { resize fill name Reformat2 xpos 1581 ypos 15029 } set Ne37bd800 [stack 0] Dot { name Dot55 xpos 1615 ypos 15232 } Merge2 { inputs 2 operation multiply name Merge9 xpos 1410 ypos 15228 } set Ne37bcc00 [stack 0] Dot { name Dot16 xpos 1334 ypos 15232 } Saturation { saturation 0 name Saturation1 xpos 1300 ypos 16365 } Phong { inputs 0 color 0 specular 1.15 min_shininess 21.5 max_shininess 100 name Phong1 xpos 1907 ypos 15839 } Camera2 { inputs 0 focal 35 haperture 35.99992752 vaperture 23.99995222 name Camera2 xpos 1600 ypos 15819 } Light2 { inputs 0 intensity 3.8 falloff_type Linear translate {{"(((parent.flarePos.x - 0) * (15 - (-5))) / (1920 - 0)) + (-5)"} {"(((parent.flarePos.y - 0) * (8 - (-1))) / (1080 - 0)) + (-1)"} 0} depthmap_slope_bias 0.01 name Light1 xpos 1662 ypos 15727 } Ramp { inputs 0 p0 {100 540} p1 {100 1080} color {0 2.3 0 1} color_panelDropped true name Ramp3 xpos 3303 ypos 15097 } Shuffle { alpha red name Shuffle12 xpos 3303 ypos 15123 } Ramp { inputs 0 p0 {100 540} p1 {100 0} color {0 -2.3 0 1} color_panelDropped true name Ramp4 xpos 3397 ypos 15097 } Shuffle { alpha white name Shuffle13 xpos 3397 ypos 15123 } Merge2 { inputs 2 operation plus name Merge34 xpos 3351 ypos 15186 } Dot { name Dot53 xpos 3385 ypos 15263 } Ramp { inputs 0 p0 {960 100} p1 {1920 100} color {4.1 0 0 1} color_panelDropped true name Ramp1 xpos 3075 ypos 15097 } Shuffle { alpha red name Shuffle14 xpos 3075 ypos 15123 } Ramp { inputs 0 p0 {960 100} p1 {0 100} color {-4.1 0 0 1} color_panelDropped true name Ramp2 xpos 3170 ypos 15098 } Shuffle { alpha white name Shuffle15 xpos 3170 ypos 15124 } Merge2 { inputs 2 operation plus name Merge35 xpos 3127 ypos 15184 } Ramp { inputs 0 p0 {-576 534} p1 {-48 536} color {0 0 -8.3 1} color_panelDropped true name Ramp5 xpos 2958 ypos 15095 } Merge2 { inputs 2 operation plus name Merge36 xpos 2958 ypos 15184 } Merge2 { inputs 2 operation plus name Merge38 xpos 2958 ypos 15259 } Shuffle { name Shuffle11 xpos 2958 ypos 15314 } Dot { name Dot54 xpos 2992 ypos 15738 } push $Ne37bd800 Dilate { size 1 name Dilate1 xpos 1691 ypos 15023 } Grade { blackpoint 0.017 black 0.055 white 2.1 multiply 1.6 gamma 1.85 name Grade53 xpos 1801 ypos 15029 disable true } Dot { name Dot134 xpos 1716 ypos 15081 } set N8d3f6400 [stack 0] Dot { name Dot135 xpos 1928 ypos 15081 } set N8d3f6000 [stack 0] Dot { name Dot137 xpos 2142 ypos 15081 } set N8d3f5c00 [stack 0] Dot { name Dot139 xpos 2355 ypos 15081 } set N8d3f5800 [stack 0] Emboss { channels rgb Angle 270 Width {{parent.Emboss1.Width}} name Emboss4 xpos 2321 ypos 15175 } Grade { blackpoint 0.5 name Grade51 xpos 2321 ypos 15229 } Dot { name Dot138 xpos 2355 ypos 15288 } Constant { inputs 0 channels rgb color {-0.5 0 0 0} color_panelDropped true name Constant13 xpos 2419 ypos 15134 } Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy20 xpos 2419 ypos 15278 } Premult { name Premult5 xpos 2419 ypos 15321 } Dot { name Dot142 xpos 2453 ypos 15558 } push $N8d3f5c00 Emboss { channels rgb Angle 90 Width {{parent.Emboss1.Width}} name Emboss3 xpos 2108 ypos 15176 } Grade { blackpoint 0.5 name Grade42 xpos 2108 ypos 15230 } Dot { name Dot136 xpos 2142 ypos 15289 } Constant { inputs 0 channels rgb color {0.5 0 0 0} color_panelDropped true name Constant12 xpos 2206 ypos 15135 } Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy19 xpos 2206 ypos 15279 } Premult { name Premult4 xpos 2206 ypos 15322 } Dot { name Dot141 xpos 2240 ypos 15474 } push $N8d3f6000 Emboss { channels rgb Angle 180 Width {{parent.Emboss1.Width}} name Emboss2 xpos 1894 ypos 15176 } Grade { blackpoint 0.5 name Grade22 xpos 1894 ypos 15231 } Dot { name Dot133 xpos 1928 ypos 15290 } Constant { inputs 0 channels rgb color {0 -0.5 0 0} color_panelDropped true name Constant11 xpos 1992 ypos 15136 } Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy10 xpos 1992 ypos 15280 } Premult { name Premult3 xpos 1992 ypos 15323 } Dot { name Dot140 xpos 2026 ypos 15406 } push $N8d3f6400 Emboss { channels rgb Width 1.48 name Emboss1 xpos 1682 ypos 15174 } Grade { blackpoint 0.5 name Grade12 xpos 1682 ypos 15228 } Dot { name Dot132 xpos 1716 ypos 15287 } Constant { inputs 0 channels rgb color {0 0.5 0 0} color_panelDropped true name Constant10 xpos 1780 ypos 15133 } Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy8 xpos 1780 ypos 15277 } Premult { name Premult2 xpos 1780 ypos 15320 } Merge2 { inputs 2 operation plus name Merge30 xpos 1780 ypos 15402 } Merge2 { inputs 2 operation plus name Merge33 xpos 1780 ypos 15470 } Merge2 { inputs 2 operation plus mix 0 name Merge84 xpos 1780 ypos 15554 } push $N8d3f5800 Dot { name Dot143 xpos 2605 ypos 15081 } Blur { size 22.5 name Blur33 xpos 2571 ypos 15175 } set N8d339000 [stack 0] Dot { name Dot145 xpos 2709 ypos 15185 } Dot { name Dot144 xpos 2709 ypos 15250 } push $N8d339000 Merge2 { inputs 2 operation average name Merge126 xpos 2571 ypos 15246 } Dot { name Dot146 xpos 2605 ypos 15293 } Constant { inputs 0 channels rgb color {0 0 0.5 1} color_panelDropped true name Constant14 xpos 2754 ypos 15136 } Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy21 xpos 2754 ypos 15283 } Premult { name Premult6 xpos 2754 ypos 15332 } Dot { name Dot147 xpos 2788 ypos 15603 } Merge2 { inputs 2 operation plus name Merge127 xpos 1780 ypos 15599 } Constant { inputs 0 channels rgb color {0.2122307271 0.2122307271 0.9999998808 1} name Constant15 xpos 1612 ypos 15512 } Dot { name Dot148 xpos 1646 ypos 15636 } Merge2 { inputs 2 operation plus name Merge128 xpos 1780 ypos 15632 } add_layer {normal normal.r normal.g normal.b} Shuffle { out normal name Shuffle18 xpos 1780 ypos 15669 } add_layer {pointPos pointPos.r pointPos.g pointPos.b} Copy { inputs 2 from0 rgba.red to0 pointPos.r from1 rgba.green to1 pointPos.g from2 rgba.blue to2 pointPos.b name Copy12 xpos 1780 ypos 15715 } ReLight { inputs 4 normal normal position pointPos name ReLight1 xpos 1780 ypos 15839 } Grade { blackpoint 0.01 whitepoint 0.56 white_clamp true name Grade23 xpos 1780 ypos 15885 } Dot { name Dot57 xpos 1814 ypos 15948 } push $Ne37bcc00 Merge2 { inputs 2 operation multiply name Merge39 xpos 1410 ypos 15944 disable {{!parent.lensDirtCalculation}} } Grade { white {{parent.lensDirtBoost}} name Grade13 xpos 1410 ypos 16277 } Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy1 xpos 1410 ypos 16359 } Switch { inputs 2 which {{parent.lensDirtRangePreview}} name Switch4 xpos 1410 ypos 16500 } Dot { name Dot56 xpos 1444 ypos 16594 } set N8d28f400 [stack 0] Defocus { defocus {{parent.lensDirtBlur}} ratio {{parent.lensBlurAspectRatio}} quality 10 name Defocus1 xpos 1501 ypos 16633 } Dot { name Dot17 xpos 1535 ypos 16724 } push $N8d28f400 Blur { size {{"parent.lensDirtBlur * parent.lensBlurAspectRatio"} {parent.lensDirtBlur}} name Blur4 xpos 1410 ypos 16631 } Switch { inputs 2 which {{parent.lensDirtBlurType}} name Switch3 xpos 1410 ypos 16720 } Clamp { name Clamp9 xpos 1300 ypos 16714 } Radial { inputs 0 area {0 0 {root.width} {root.height}} name Radial1 xpos 752 ypos 16175 } Grade { channels all blackpoint {{parent.centerFalloffAdjust}} name Grade7 xpos 752 ypos 16214 } set N8d28dc00 [stack 0] Grade { multiply {1 0 0 1} name Grade6 xpos 752 ypos 16262 } Dot { name Dot9 xpos 786 ypos 16359 } push $N8d28dc00 push $N8fe56000 Grade { multiply 0.28 maskChannelMask none name Bloom_Grade xpos 605 ypos 16289 } Noise { inputs 0 size 18 zoffset 1.1 center {960 540} name Noise29 xpos -242 ypos 14193 } Shuffle { red black green black alpha black name Shuffle46 xpos -242 ypos 14219 } Noise { inputs 0 size 18 zoffset 0.92 center {960 540} name Noise28 xpos -337 ypos 14194 } Shuffle { red black blue black alpha black name Shuffle45 xpos -337 ypos 14220 } Noise { inputs 0 size 18 center {960 540} name Noise27 xpos -428 ypos 14195 } Shuffle { green black blue black alpha black name Shuffle42 xpos -428 ypos 14221 } Merge2 { inputs 2 operation plus name Merge327 xpos -428 ypos 14265 } Merge2 { inputs 2 operation plus name Merge328 xpos -428 ypos 14304 } set N8d20ac00 [stack 0] Shuffle { red blue green blue alpha blue name Shuffle47 xpos -428 ypos 14355 } Invert { mix 0.3 name Invert5 xpos -428 ypos 14381 } Blur { size 10.5 name Blur171 xpos -428 ypos 14419 } set N8d20a000 [stack 0] push $N8d20ac00 Flare { inputs 0 position {{root.width/2} {root.height/2}} radius {77.07 80 82.45} size_mult 2 inner_color 0 name Flare249 xpos -88 ypos 13975 disable {{"parent.dogSchidtType == 1 ? 0 : 1"}} } Transform { translate {0 159} center {{root.width/2} {root.height/2}} name Transform122 xpos -88 ypos 14033 } set N8d209400 [stack 0] Transform { scale {{parent.dogSchidtThickness}} center {{root.width/2} {root.height/2}} name Transform125 xpos 16 ypos 14065 } push $N8d209400 Merge2 { inputs 2 operation multiply name Merge331 xpos -88 ypos 14095 } Transform { rotate {{parent.dogSchidtRotation}} scale {{"parent.dogSchidtSize * parent.dogSchidtAnamorph * parent.flareCoreSize"} {"parent.dogSchidtSize * parent.flareCoreSize"}} center {{root.width/2} {root.height/2}} name Transform123 xpos -88 ypos 14147 } set N8d208800 [stack 0] Transform { scale -1 center {{root.width/2} {root.height/2}} name Transform124 xpos 27 ypos 14173 } push $N8d208800 Merge2 { inputs 2 operation screen name Merge330 xpos -88 ypos 14208 } Transform { translate {{"parent.flarePos.x - root.width/2"} {"parent.flarePos.y - root.height/2"}} center {960 540} name Transform126 xpos -88 ypos 14262 } Merge2 { inputs 2 operation multiply name Merge332 xpos -88 ypos 14304 } DirBlurWrapper { BlurCenter {{parent.flarePos.x} {parent.flarePos.y}} BlurLength 130 Samples 0.25 name DirBlurWrapper28 xpos -88 ypos 14358 } Merge2 { inputs 2 operation stencil name Merge333 xpos -88 ypos 14425 } set N8d192c00 [stack 0] Glow2 { tint {1.046667 0.906667 1.046667 1} tint_panelDropped true brightness 3.78 saturation 0.755 effect_only true size 46 name Glow21 xpos 16 ypos 14446 } push $N8d192c00 Merge2 { inputs 2 operation plus mix 0.23 name Merge334 xpos -88 ypos 14477 } push $N8d20a000 push $N8d20ac00 Flare { inputs 0 position {{root.width/2} {root.height/2}} radius {82.92 94.15 108.3} size_mult 4 inner_color 0 name Flare248 xpos -566 ypos 14001 disable {{"parent.dogSchidtType == 0 ? 0 : 1"}} } set N8d192000 [stack 0] push $N8d192000 Transform { translate {4 -14} scale {{parent.dogSchidtThickness}} center {{parent.Flare248.position.x} {parent.Flare248.position.y}} name Transform120 xpos -495 ypos 14049 } Merge2 { inputs 2 operation multiply name Merge324 xpos -566 ypos 14105 disable {{parent.Flare248.disable}} } Transform { translate {0 400} name Transform119 xpos -566 ypos 14151 } Transform { translate {{"parent.flarePos.x - root.width/2"} {"parent.flarePos.y - root.height/2"}} rotate {{"-1*(degrees(atan2(root.width/2 - parent.flarePos.x, root.height/2 - parent.flarePos.y)))\n"}} center {{root.width/2} {root.height/2}} name Transform118 xpos -566 ypos 14201 } Transform { scale {{"parent.flareCoreSize * parent.dogSchidtSize"}} center {{parent.flarePos.x} {parent.flarePos.y}} name Transform121 xpos -566 ypos 14251 } Merge2 { inputs 2 operation multiply mix 0.855 name Merge326 xpos -566 ypos 14304 disable {{parent.Flare248.disable}} } Grade { blackpoint 0.035 name Grade105 xpos -566 ypos 14330 } DirBlurWrapper { BlurCenter {{parent.flarePos.x} {parent.flarePos.y}} BlurLength 184 Samples 0.2 name DirBlurWrapper27 xpos -566 ypos 14367 disable {{parent.Flare248.disable}} } Merge2 { inputs 2 operation stencil name Merge329 xpos -566 ypos 14446 disable {{parent.Flare248.disable}} } Saturation { saturation 1.48 name Saturation38 xpos -566 ypos 14494 } Grade { whitepoint 0.1 white 0.4 multiply 0.5 name Grade107 xpos -566 ypos 14520 } set N8d12ec00 [stack 0] Switch { inputs 2 which {{parent.dogSchidtType}} name Switch14 xpos -566 ypos 14650 } Grain2 { name Grain2_1 label "Kodak 5248" xpos -566 ypos 14682 red_m 0.22 green_m 0.24 blue_m 0.245 black {0 0 0} minimum {0 0 0} maskgrain false } Blur { size 2 name Blur172 xpos -566 ypos 14720 } Crop { box {0 0 {root.width} {root.height}} name Crop11 xpos -566 ypos 14776 } Clamp { name Clamp10 xpos 127 ypos 14770 } Grade { multiply {{parent.dogSchidtTint.r} {parent.dogSchidtTint.g} {parent.dogSchidtTint.b} 0} white_clamp true maskChannelMask none name grade5 label "dog schidt grade" xpos 302 ypos 14770 } Blur { size {{parent.dogSchidtBlur}} name Blur170 label "dog schidt blur" note_font Verdana xpos 428 ypos 14765 } Group { name Static_Noise9 help "Adds synthetic grain. Push \"presets\" to get predefined types of grain, these are the correct size for 2K scans.\n\nYou can also adjust the sliders to match a sample piece of grain. Find a sample with a rather constant background, blur it to remove the grain, and use as input to this. View with a wipe in the viewer so you can make a match. It helps to view and match each of the red, green, blue seperately." tile_color 0x992620ff note_font "Bitstream Vera Sans" xpos 553 ypos 14777 dope_sheet true mapsize {0.15 0.15} addUserKnob {20 master_control l Master} addUserKnob {7 noise_intensity_global l Intensity R 0 2} noise_intensity_global 0.52 addUserKnob {7 rgb_size_multiplier l Size R 0 2} rgb_size_multiplier 1 addUserKnob {26 ""} addUserKnob {6 no_alpha l "no alpha?" t "Check this box if your image doesn't have an alpha and you cannot use another alpha channel.\n\n(Note: This WILL cause the grain to be more prevalent. So please compensate using the Noise Size and Noise Intensity controls above.)" +STARTLINE} no_alpha true addUserKnob {20 adv_controls l Advanced} addUserKnob {20 fractal_noise_size l "RGB Noise Size" n 1} fractal_noise_size 0 addUserKnob {14 red_size l r R 0 100} red_size 1.7 addUserKnob {14 green_size l g R 0 100} green_size 1.6 addUserKnob {14 blue_size l b R 0 100} blue_size 1.5 addUserKnob {20 endGroup n -1} addUserKnob {20 noise_irregularity l "RGB Noise Irregularity" n 1} noise_irregularity 0 addUserKnob {7 red_i l r} red_i 1 addUserKnob {7 green_i l g} green_i 0.75 addUserKnob {7 blue_i l b} blue_i 0.65 addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 noise_intensity l "RGB Noise Intensity" n 1} noise_intensity 0 addUserKnob {7 red_m l r t "Amount of grain to add to a white pixel"} red_m 0.2 addUserKnob {7 green_m l g} green_m 0.4 addUserKnob {7 blue_m l b} blue_m 0.6 addUserKnob {18 black t "Amount of grain to add everywhere"} black {0 0 0} addUserKnob {6 black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 minimum t "Minimum black level" R 0 0.01} minimum {0 0 0} addUserKnob {6 minimum_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {26 ""} addUserKnob {3 seed l Seed} seed 134 addUserKnob {32 reset l Reset T "knobs this \{rgb_size_multiplier 0 red_size 1.70 green_size 1.60 blue_size 1.50 red_i 1.00 green_i 0.75 blue_i 0.65 red_m 0.40 green_m 0.60 blue_m 1.65 black 0.00\}" +STARTLINE} } Input { inputs 0 name Input1 xpos 0 } set N8d093400 [stack 0] Noise { output {rgba.red -rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.red_size.w*(rgb_size_multiplier) i} {parent.red_size.h*(rgb_size_multiplier) i}} octaves 2 gamma 1 xrotate {{red_i*45 i}} yrotate {{red_i*45 i}} name red xpos 144 ypos -7 } Noise { output {-rgba.red rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.green_size.w*(rgb_size_multiplier) i} {parent.green_size.h*(rgb_size_multiplier) i}} zoffset 10 octaves 2 gamma 1 xrotate {{green_i*45 i}} yrotate {{green_i*45 i}} name green xpos 144 ypos 35 } Noise { output {-rgba.red -rgba.green rgba.blue -rgba.alpha} cliptype none replace true size {{parent.blue_size.w*(rgb_size_multiplier) i} {parent.blue_size.h*(rgb_size_multiplier) i}} zoffset 20 octaves 2 gamma 1 xrotate {{blue_i*45 i}} yrotate {{blue_i*45 i}} name blue xpos 144 ypos 77 } push $N8d093400 MergeExpression { inputs 2 expr0 max(minimum.r,r+(2*Ar-1)*(r*red_m*noise_intensity_global)) expr1 max(minimum.g,g+(2*Ag-1)*(g*green_m*noise_intensity_global)) expr2 max(minimum.b,b+(2*Ab-1)*(b*blue_m*noise_intensity_global)) name MergeExpression1 xpos 144 ypos 117 } set N8d092400 [stack 0] push $N8d092400 push $N8d093400 Copy { inputs 2 channels rgb maskChannelInput rgba.alpha name Copy1 xpos 0 ypos 105 disable {{parent.no_alpha i}} } Switch { inputs 2 which {{parent.no_alpha i}} name Switch1 xpos 144 ypos 171 } Output { name Output1 xpos 144 ypos 219 } end_group Dot { name Dot174 xpos 678 ypos 14780 } set N8d091800 [stack 0] Saturation { saturation 0 name Saturation36 xpos 645 ypos 14826 } push $N8d091800 Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy15 xpos 788 ypos 14770 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.08 radius {262.81 269.91 269.91} size_mult {{parent.Flare324.size_mult}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle {{parent.Flare323.corners_angle}} name Flare299 xpos -234 ypos 12873 disable {{parent.Sparkles6.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform68 xpos -234 ypos 12899 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.18 radius {156.26 160.52 261.37} size_mult {{parent.Flare324.size_mult}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle {{parent.Flare323.corners_angle}} name Flare314 xpos -241 ypos 12840 disable {{parent.Sparkles6.disable}} } Flare { inputs 0 position {{parent.ffx_position.x} {parent.ffx_position.y}} offset 0.05 radius {106.29 124.98 124.98} size_mult {{parent.Flare323.size_mult}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle {{parent.Flare323.corners_angle}} name Flare321 xpos -114 ypos 12773 disable {{parent.Sparkles6.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform69 xpos -114 ypos 12799 } Merge2 { inputs 2 operation screen mix 0.6 name Merge266 xpos -114 ypos 12840 } Merge2 { inputs 2 operation screen mix 0.6 name Merge267 xpos -114 ypos 12899 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.68 radius {282.69 289.79 377.86} size_mult {{parent.Flare324.size_mult}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle {{parent.Flare323.corners_angle}} name Flare322 xpos -6 ypos 12847 disable {{parent.Sparkles6.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform70 xpos -6 ypos 12873 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.25 radius {181.84 198.88 218.76} size_mult {{parent.Flare324.size_mult}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle {{45+parent.coreRaysRotation}} name Flare323 xpos -6 ypos 12787 disable {{parent.Sparkles6.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform91 xpos -6 ypos 12813 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.2 radius {117.91 129.27 161.94} size_mult {{parent.flareCoreSize+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle {{45+parent.coreRaysRotation}} name Flare324 xpos -10 ypos 12739 disable {{parent.Sparkles6.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {18.48 29.84 90.92} size_mult {{parent.coreRaysSize+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle {{"45 + parent.coreRaysRotation"}} name Flare325 xpos 114 ypos 12657 disable {{parent.Sparkles6.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform92 xpos 114 ypos 12698 } Merge2 { inputs 2 operation screen mix 0.6 name Merge268 xpos 114 ypos 12739 } Merge2 { inputs 2 operation screen mix 0.6 name Merge269 xpos 114 ypos 12813 } Merge2 { inputs 2 operation screen mix 0.6 name Merge270 xpos 114 ypos 12873 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge271 xpos 114 ypos 12899 } Shuffle { green red blue red alpha red name Shuffle20 xpos 114 ypos 12925 } Blur { size 24 name Blur151 xpos 114 ypos 12951 } Sparkles { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} size {{"512 + parent.coreRaysSize"}} rotation {{"-58 + parent.coreRaysRotation"}} ray_nb 1 ray_thick {{"3.5 + parent.coreRaysThickness"}} random_thick true spark_falloff 0 ray_falloff 2.5 seed {{parent.coreRaysSeed}} brightness 0.4 broken_affected 9.89774 name Sparkles6 label "Anamorphic Bits" xpos 290 ypos 12589 disable {{"parent.coreRaysType == 12 ? 0 : 1"}} } Sparkles { position {{parent.flarePos.x} {parent.flarePos.y}} size {{parent.Sparkles6.size}} rotation {{"180 + parent.Sparkles6.rotation"}} ray_nb 1 ray_thick {{parent.Sparkles6.ray_thick}} random_thick true spark_falloff 0 ray_falloff 2.5 seed {{parent.Sparkles6.seed}} brightness 0.4 broken_affected 9.89774 name Sparkles17 label "Anamorphic Bits" xpos 290 ypos 12647 disable {{parent.Sparkles6.disable}} } set N91bb9400 [stack 0] Dot { name Dot119 xpos 472 ypos 12657 } Blur { size 20 name Blur149 xpos 438 ypos 12763 } push $N91bb9400 Blur { size 3 name Blur150 xpos 290 ypos 12705 } Glow { brightness 1.14 name Glow36 xpos 290 ypos 12743 } Merge { inputs 2 operation plus name Merge272 xpos 290 ypos 12769 } Merge2 { inputs 2 operation mask maskChannelMask none mix 0.9 name Merge273 xpos 290 ypos 12957 } Dot { name Dot120 xpos 324 ypos 13356 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {0 59.2 436.08} size_mult {{parent.Flare269.size_mult}} anamorph 0.4 ring_color {0 0.01999999955 1} inner_color {0.5199999809 0.6832000017 1} outer_falloff 4.2 inner_falloff 0.48 brightness 0.125 flattening {{parent.Flare269.flattening}} corners_angle {{parent.Flare269.corners_angle}} name Flare268 xpos -568 ypos 12812 disable {{Core_Bits_Plus.disable==1?1:core_bits.which==11?0:1}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {17.44 42.38 293.11} size_mult {{(parent.flareCoreSize+parent.coreRaysSize)*1.4}} anamorph 0.715 ring_color {0 0.2200000286 1} inner_color 0 outer_falloff 5.2 inner_falloff 0.76 flattening {{"100 - parent.coreRaysThickness"}} corners_angle {{parent.coreRaysRotation}} name Flare269 xpos -678 ypos 12624 disable {{"parent.coreRaysType == 11 ? 0 : 1"}} } Blur { size 83 name Blur121 xpos -678 ypos 12650 } Glow { tint 0.305 tolerance 0.1 brightness 1.32 size 49 maskChannelMask none name Glow31 xpos -678 ypos 12688 } Merge2 { inputs 2 operation plus output {rgba.red rgba.green rgba.blue -rgba.alpha} maskChannelMask none name Merge248 xpos -678 ypos 12812 } Dot { name Dot121 xpos -644 ypos 13326 } Flare { inputs 0 position {{parent.Flare12.position.x} {parent.Flare12.position.y}} radius {0 0 128.34} size_mult {{"0.75 * parent.Flare12.size_mult"}} ring_color 0.4 inner_color 0 brightness 0.5 name Flare11 xpos 745 ypos 4114 disable {{parent.Flare12.disable}} } Glow2 { tint {0.5 0.21 1.5 1} tint_panelDropped true brightness 0.24 name Glow13 xpos 745 ypos 4140 } Blur { size 50 name Blur13 xpos 745 ypos 4171 } Flare { inputs 0 position {{root.width/2} {root.height/2}} radius {0 0 76.12} size_mult 2 ring_color {0.379197 0.54 0.235} ring_color_panelDropped true inner_color 0 brightness 0.5 name Flare12 xpos 848 ypos 4082 disable {{"parent.coronaExtraType == 6 ? 0 : 1"}} } Blur { size 20 name Blur34 xpos 848 ypos 4108 } Glow { tint {1.043982 0.06 0.018} tint_panelDropped true tolerance 0.0150376 name Glow12 xpos 848 ypos 4151 } Merge2 { inputs 2 operation plus name Merge129 xpos 848 ypos 4177 } Saturation { saturation 2.25 name Saturation27 xpos 848 ypos 4203 } Dot { name Dot10 xpos 831 ypos 4519 } Flare { inputs 0 position {{parent.Flare319.position.x} {parent.Flare319.position.y}} radius {161.33 236.9 283.11} size_mult {{parent.Flare319.size_mult}} anamorph 1.39 ring_color 0.41 inner_color 0.23 brightness 0.33 corners 4 flattening 0.9 sharpness 0.59 corners_angle 45 name Flare318 xpos 359 ypos 4208 disable {{parent.Flare319.disable}} } Flare { inputs 0 position {{parent.Flare319.position.x} {parent.Flare319.position.y}} radius {120.64 135.17 181.38} size_mult {{parent.Flare319.size_mult}} anamorph 1.27 ring_color 0.37 inner_color 0.125 brightness 0.61 corners 4 flattening 0.9 sharpness 0.59 corners_angle 45 name Flare208 xpos 368 ypos 4122 disable {{parent.Flare319.disable}} } Flare { inputs 0 position {{parent.Flare319.position.x} {parent.Flare319.position.y}} radius {78.49 94.47 105.8} size_mult {{parent.Flare319.size_mult}} anamorph 1.4 ring_color 0.37 inner_color 0.19 corners 4 flattening 0.9 sharpness 0.59 corners_angle 45 name Flare320 xpos 368 ypos 4035 disable {{parent.Flare319.disable}} } Flare { inputs 0 position {{root.width/2} {root.height/2}} radius {36.35 50.88 63.66} size_mult {{"0.5 * parent.coronaExtraSize"}} anamorph 1.34 ring_color 0.37 inner_color 0.24 brightness 2 corners 4 flattening 0.9 sharpness 0.59 corners_angle 45 name Flare319 xpos 478 ypos 3971 disable {{"parent.coronaExtraType == 5 ? 0 : 1"}} } Merge2 { inputs 2 operation screen mix 0.615 name Merge257 xpos 478 ypos 4035 } Merge2 { inputs 2 operation screen mix 0.215 name Merge264 xpos 478 ypos 4122 } Merge2 { inputs 2 operation screen mix 0.165 name Merge265 xpos 478 ypos 4208 } Blur { size 38.5 name Blur148 xpos 478 ypos 4255 } Noise { inputs 0 size 850 lacunarity 3.55 gain 0.69 gamma 0.73 center {320 240} name Noise17 xpos 606 ypos 4348 disable {{parent.Flare319.disable}} } Blur { size {{(parent.ffx_flare_size)+26 i}} name Blur154 xpos 606 ypos 4410 } Merge { inputs 2 operation in name Merge277 xpos 478 ypos 4416 } Flare { inputs 0 position {{root.width/2} {root.height/2}} radius {0 6.7 500} size_mult {{"1.25 * parent.coronaExtraSize "}} anamorph 1.15 ring_color {0.73 0.57 0.79} inner_color {0.768889 0.478889 0.702222} outer_falloff {{"2 * parent.coronaExtraSize "}} inner_falloff 0.22 chroma_spread -0.006 brightness 0.2 vis_mask -rgba.alpha name Flare78 label "Outer Corona" xpos 112 ypos 4099 disable {{"parent.coronaExtraType == 4 ? 0 : 1"}} } Noise { inputs 0 size {{"100 * parent.coreCoronaSize"}} lacunarity 1.84 gain 0.425 translate {{"- parent.flarePos.x + parent.coronaExtraOffset.w"} {"- parent.flarePos.y + parent.coronaExtraOffset.h"}} center {320 240} name Noise8 xpos 2 ypos 4099 disable {{parent.Flare78.disable}} } Blur { size {{(parent.ffx_flare_size)+26 i}} name Blur112 xpos 2 ypos 4151 } Merge { inputs 2 operation in name Merge32 xpos 112 ypos 4157 } Flare { inputs 0 position {{root.width/2} {root.height/2}} radius {34.09 51.33 72.52} size_mult 2.4 anamorph 1.1 ring_color 0.33 inner_color 0.31 inner_falloff 7.4 brightness 0.39 flattening 0.15 corners_angle -16 asym_falloff 0.45018 asym_angle -180 asym_angle_add true mult_num 2 mult_offset 0.3 mult_size -0.28 name Flare92 xpos -231 ypos 4182 disable {{"parent.coronaExtraType == 3 ? 0 : 1"}} } VolumeRays { name VolumeRays7 label "Mar 20 2005" xpos -231 ypos 4227 disable {{parent.Flare92.disable}} vol_pos {{root.width/2} {root.height/2}} pre_blur 27.5 flicker_size 150 xform_flicker true volume_end_color {0 0 0 0} radial_size 400 } Blur { size 15 name Blur89 xpos -231 ypos 4274 } Flare { inputs 0 position {{parent.Flare88.position.x} {parent.Flare88.position.y}} radius {0 11.36 251.92} size_mult 1.6 anamorph 1.01 ring_color 0.379197 inner_color 0 outer_falloff 0.6 inner_falloff 0.1 brightness 0.06 vis_out 1 name Flare84 xpos -564 ypos 4289 disable {{parent.Flare88.disable}} } Blur { size 50 name Blur81 xpos -564 ypos 4315 } Flare { inputs 0 position {{parent.Flare88.position.x} {parent.Flare88.position.y}} radius {0 35.51 169.53} size_mult 1.6 anamorph 1.01 ring_color 0.379197 inner_color 0 outer_falloff 0.6 inner_falloff 0.1 brightness 0.08 vis_out 1.01 name Flare85 xpos -564 ypos 4199 disable {{parent.Flare88.disable}} } Blur { size 50 name Blur82 xpos -564 ypos 4225 } Flare { inputs 0 position {{parent.Flare88.position.x} {parent.Flare88.position.y}} radius {0 0 112.72} size_mult 1.6 anamorph 1.01 ring_color 0.379197 inner_color 0 outer_falloff 0.28 inner_falloff 0.1 brightness 0.05 name Flare86 xpos -564 ypos 4121 disable {{parent.Flare88.disable}} } Blur { size 50 name Blur83 xpos -564 ypos 4147 } Flare { inputs 0 position {{parent.Flare88.position.x} {parent.Flare88.position.y}} radius {0 0 75.79} size_mult 1.6 anamorph 1.03 ring_color 0.379197 inner_color 0 outer_falloff 0.1 inner_falloff 0.1 brightness 0.09 name Flare87 xpos -564 ypos 4044 disable {{parent.Flare88.disable}} } Blur { size 50 name Blur84 xpos -564 ypos 4070 } Flare { inputs 0 position {{root.width/2} {root.height/2}} radius {0 0 97.09} size_mult 1.5 anamorph 0.96 ring_color 0.379197 inner_color 0 brightness 2 name Flare88 xpos -454 ypos 3949 disable {{"parent.coronaExtraType == 2 ? 0 : 1"}} } Blur { size 50 name Blur85 xpos -454 ypos 3994 } Merge2 { inputs 2 operation screen name Merge52 xpos -454 ypos 4076 } Merge2 { inputs 2 operation screen name Merge53 xpos -454 ypos 4153 } Merge2 { inputs 2 operation screen mix 0.6 name Merge57 xpos -454 ypos 4231 } Merge2 { inputs 2 operation screen mix 0.8 name Merge58 xpos -454 ypos 4321 } Flare { inputs 0 position {{parent.Flare91.position.x} {parent.Flare91.position.y}} radius {0 0 128.34} size_mult {{"0.75 * parent.Flare91.size_mult"}} ring_color 0.4 inner_color 0 brightness 0.5 name Flare90 xpos -1031 ypos 4537 disable {{parent.Flare91.disable}} } Blur { size 50 name Blur87 xpos -1031 ypos 4563 } Flare { inputs 0 position {{root.width/2} {root.height/2}} radius {0 0 48.34} size_mult 2 ring_color 0.379197 inner_color 0 brightness 0.5 name Flare91 xpos -928 ypos 4474 disable {{"parent.coronaExtraType == 1 ? 0 : 1"}} } Blur { size 20 name Blur88 xpos -928 ypos 4500 } Glow { tint {1 0.217637 0.0879641} tolerance 0.0150376 name Glow18 xpos -928 ypos 4543 } Merge2 { inputs 2 operation plus name Merge59 xpos -928 ypos 4569 } Flare { inputs 0 position {{parent.Flare83.position.x} {parent.Flare83.position.y}} radius {0 0 112.72} size_mult 1.65 anamorph 1.01 ring_color 0.379197 inner_color 0 outer_falloff 0.28 inner_falloff 0.1 brightness 0.05 name Flare81 xpos -992 ypos 4189 disable {{parent.Flare83.disable}} } Blur { size 88 name Blur78 xpos -992 ypos 4215 } Flare { inputs 0 position {{parent.Flare83.position.x} {parent.Flare83.position.y}} radius {0 0 75.79} size_mult 1.5 anamorph 1.03 ring_color 0.379197 inner_color 0 outer_falloff 0.1 inner_falloff 0.1 brightness 0.09 name Flare82 xpos -992 ypos 4098 disable {{parent.Flare83.disable}} } Blur { size 70 name Blur79 xpos -992 ypos 4124 } Flare { inputs 0 position {{root.width/2} {root.height/2}} radius {0 0 97.09} size_mult 1.5 anamorph 0.96 ring_color 0.379197 inner_color 0 brightness 2 name Flare83 xpos -882 ypos 4039 disable {{"parent.coronaExtraType == 0 ? 0 : 1"}} } Blur { size 100 name Blur80 xpos -882 ypos 4085 } Merge2 { inputs 2 operation screen name Merge48 xpos -882 ypos 4130 } Merge2 { inputs 2 operation screen name Merge49 xpos -882 ypos 4221 } Switch { inputs 7 which {{parent.coronaExtraType}} name core_coronas xpos -414 ypos 4515 } Transform { translate {{"-(root.width/2) + parent.flarePos.x + parent.coronaExtraOffset.w"} {"-(root.height/2) + parent.flarePos.y + parent.coronaExtraOffset.h"}} rotate {{parent.coronaExtraRotation}} scale {{"parent.coronaExtraSize * parent.flareCoreSize"}} center {{root.width/2} {root.height/2}} filter sinc4 black_outside false name transformations xpos -414 ypos 4554 } Transform { translate {{"(parent.flarePos.x + parent.coronaExtraOffset.w) >root.width ? -(parent.coronaExtraOffset.w) : 0"} {"(parent.flarePos.y + parent.coronaExtraOffset.h) >root.height ? -(parent.coronaExtraOffset.h) : 0"}} center {960 540} name offset_fix xpos -414 ypos 4584 } Transform { translate {{"(parent.flarePos.x + parent.coronaExtraOffset.w) < 0 ? (parent.coronaExtraOffset.w) : 0"} {"(parent.flarePos.y + parent.coronaExtraOffset.h) < 0 ? (parent.coronaExtraOffset.h) : 0"}} center {960 540} name neg_offset_fix xpos -414 ypos 4616 } Transform { translate {{"(parent.flarePos.x + parent.coronaExtraOffset.w) >root.width ? () : 0"} {"(parent.flarePos.y + parent.coronaExtraOffset.h) >root.height ? ((-1*parent.coronaExtraSize) * (root.height - parent.flarePos.y + parent.coronaExtraOffset.h)) : 0"}} center {{"parent.flarePos.x + parent.coronaExtraOffset.w"} {"parent.flarePos.y + parent.coronaExtraOffset.h"}} black_outside false name trans_compensate xpos -414 ypos 4642 } Transform { translate {{"(parent.flarePos.x + parent.coronaExtraOffset.w) < 0 ? ((-1 * parent.coronaExtraSize) * (0 - parent.flarePos.x + parent.coronaExtraOffset.w)) : 0"} {"(parent.flarePos.y + parent.coronaExtraOffset.h) < 0 ? ((-1 * parent.coronaExtraSize) * (0 - parent.flarePos.y + parent.coronaExtraOffset.h)) : 0"}} center {{"parent.flarePos.x + parent.coronaExtraOffset.w"} {"parent.flarePos.y + parent.coronaExtraOffset.h"}} black_outside false name neg_trans_compensate xpos -414 ypos 4676 } Sharpen { maximum 100 amount 100 size 2 maskChannelMask none name Sharpen3 xpos 4 ypos 4598 disable {{parent.Flare88.disable}} } Sharpen { maximum 100 amount 100 maskChannelMask none name Sharpen2 xpos 114 ypos 4598 disable {{parent.Flare319.disable}} } Blur { size {{parent.coronaExtraBlur}} name Core_Corona_Blur xpos 224 ypos 4598 } Grade { multiply {{parent.coronaExtraColour.r} {parent.coronaExtraColour.g} {parent.coronaExtraColour.b} 0} maskChannelMask none name Core_Coronas_Color label "Core Coronas CC" xpos 331 ypos 4598 } Group { name Static_Noise1 help "Adds synthetic grain. Push \"presets\" to get predefined types of grain, these are the correct size for 2K scans.\n\nYou can also adjust the sliders to match a sample piece of grain. Find a sample with a rather constant background, blur it to remove the grain, and use as input to this. View with a wipe in the viewer so you can make a match. It helps to view and match each of the red, green, blue seperately." tile_color 0x992620ff note_font "Bitstream Vera Sans" xpos 441 ypos 4604 disable {{!parent.coronaExtraNoise}} mapsize {0.15 0.15} addUserKnob {20 master_control l Master} addUserKnob {7 noise_intensity_global l Intensity R 0 2} noise_intensity_global 1 addUserKnob {7 rgb_size_multiplier l Size R 0 2} rgb_size_multiplier 1 addUserKnob {26 ""} addUserKnob {6 no_alpha l "no alpha?" t "Check this box if your image doesn't have an alpha and you cannot use another alpha channel.\n\n(Note: This WILL cause the grain to be more prevalent. So please compensate using the Noise Size and Noise Intensity controls above.)" +STARTLINE} no_alpha true addUserKnob {20 adv_controls l Advanced} addUserKnob {20 fractal_noise_size l "RGB Noise Size" n 1} fractal_noise_size 0 addUserKnob {14 red_size l r R 0 100} red_size 1.7 addUserKnob {14 green_size l g R 0 100} green_size 1.6 addUserKnob {14 blue_size l b R 0 100} blue_size 1.5 addUserKnob {20 endGroup n -1} addUserKnob {20 noise_irregularity l "RGB Noise Irregularity" n 1} noise_irregularity 0 addUserKnob {7 red_i l r} red_i 1 addUserKnob {7 green_i l g} green_i 0.75 addUserKnob {7 blue_i l b} blue_i 0.65 addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 noise_intensity l "RGB Noise Intensity" n 1} noise_intensity 0 addUserKnob {7 red_m l r t "Amount of grain to add to a white pixel"} red_m 0.2 addUserKnob {7 green_m l g} green_m 0.4 addUserKnob {7 blue_m l b} blue_m 0.6 addUserKnob {18 black t "Amount of grain to add everywhere"} black {0 0 0} addUserKnob {6 black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 minimum t "Minimum black level" R 0 0.01} minimum {0 0 0} addUserKnob {6 minimum_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {26 ""} addUserKnob {3 seed l Seed} seed 134 addUserKnob {32 reset l Reset T "knobs this \{rgb_size_multiplier 0 red_size 1.70 green_size 1.60 blue_size 1.50 red_i 1.00 green_i 0.75 blue_i 0.65 red_m 0.40 green_m 0.60 blue_m 1.65 black 0.00\}" +STARTLINE} } Input { inputs 0 name Input1 xpos 0 } set N8e96e400 [stack 0] Noise { output {rgba.red -rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.red_size.w*(rgb_size_multiplier) i} {parent.red_size.h*(rgb_size_multiplier) i}} octaves 2 gamma 1 xrotate {{red_i*45 i}} yrotate {{red_i*45 i}} name red xpos 144 ypos -7 } Noise { output {-rgba.red rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.green_size.w*(rgb_size_multiplier) i} {parent.green_size.h*(rgb_size_multiplier) i}} zoffset 10 octaves 2 gamma 1 xrotate {{green_i*45 i}} yrotate {{green_i*45 i}} name green xpos 144 ypos 35 } Noise { output {-rgba.red -rgba.green rgba.blue -rgba.alpha} cliptype none replace true size {{parent.blue_size.w*(rgb_size_multiplier) i} {parent.blue_size.h*(rgb_size_multiplier) i}} zoffset 20 octaves 2 gamma 1 xrotate {{blue_i*45 i}} yrotate {{blue_i*45 i}} name blue xpos 144 ypos 77 } push $N8e96e400 MergeExpression { inputs 2 expr0 max(minimum.r,r+(2*Ar-1)*(r*red_m*noise_intensity_global)) expr1 max(minimum.g,g+(2*Ag-1)*(g*green_m*noise_intensity_global)) expr2 max(minimum.b,b+(2*Ab-1)*(b*blue_m*noise_intensity_global)) name MergeExpression1 xpos 144 ypos 117 } set N8e96d400 [stack 0] push $N8e96d400 push $N8e96e400 Copy { inputs 2 channels rgb maskChannelInput rgba.alpha name Copy1 xpos 0 ypos 105 disable {{parent.no_alpha i}} } Switch { inputs 2 which {{parent.no_alpha i}} name Switch1 xpos 144 ypos 171 } Output { name Output1 xpos 144 ypos 219 } end_group Dot { name Dot44 xpos 663 ypos 4607 } set N8e96c800 [stack 0] Saturation { saturation 0 name Saturation5 xpos 630 ypos 4653 } push $N8e96c800 Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy7 xpos 801 ypos 4598 } set N8e8ebc00 [stack 0] Dot { name Dot127 xpos 835 ypos 4791 } Dot { name Dot128 xpos 1315 ypos 4791 } Dot { name Dot131 xpos 1315 ypos 12314 } Dot { name Dot130 xpos -1534 ypos 12314 } Dot { name Dot122 xpos -1534 ypos 13038 } Noise { inputs 0 size {200 500} zoffset 2 lacunarity 2.02 gain 0.61 gamma 0.54 center {320 240} name Noise21 xpos -1356 ypos 12906 } Noise { inputs 0 size {200 800} lacunarity 2.02 gain 0.63 gamma 0.405 center {320 240} name Noise22 xpos -1364 ypos 12861 } Sparkles { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} size 1000 anamorphic 1.68 rotation {{"parent.Sparkles33.rotation + 180"}} ray_nb 1 ray_thick 2 spark_falloff 0 ray_falloff 3.45 seed {{parent.Sparkles33.seed}} name Sparkles28 xpos -1024 ypos 12693 disable {{parent.Sparkles33.disable}} } Sparkles { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} size 1000 anamorphic 1.68 rotation {{parent.Sparkles33.rotation}} ray_nb 1 ray_thick 2 spark_falloff 0.042 ray_falloff 3.5 seed {{parent.Sparkles33.seed}} name Sparkles29 xpos -1146 ypos 12667 disable {{parent.Sparkles33.disable}} } Merge2 { inputs 2 maskChannelMask none name Merge206 xpos -1146 ypos 12693 } Blur { size 8.4 name Blur86 xpos -1146 ypos 12719 } Sparkles { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} size 800 anamorphic 1.68 rotation {{"parent.Sparkles33.rotation + 180"}} ray_nb 1 ray_thick 6 spark_falloff 0 ray_falloff 3.45 seed {{parent.Sparkles33.seed}} name Sparkles30 xpos -1147 ypos 12628 disable {{parent.Sparkles33.disable}} } Sparkles { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} size 1000 anamorphic 1.68 rotation {{parent.Sparkles33.rotation}} ray_nb 1 ray_thick 6 spark_falloff 0.042 ray_falloff 3.5 seed {{parent.Sparkles33.seed}} name Sparkles31 xpos -1293 ypos 12602 disable {{parent.Sparkles33.disable}} } Merge2 { inputs 2 maskChannelMask none name Merge207 xpos -1293 ypos 12628 } Blur { size 18 name Blur113 xpos -1293 ypos 12654 } Merge2 { inputs 2 maskChannelMask none name Merge208 xpos -1293 ypos 12725 } Glow { tint {0 0.3399999142 1} tolerance 0.165 maskChannelMask none name Glow23 xpos -1293 ypos 12766 } Sparkles { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} size 1100 anamorphic 1.68 rotation {{"parent.Sparkles33.rotation + 180"}} ray_nb 1 ray_thick {{parent.Sparkles33.ray_thick}} spark_falloff 0 ray_falloff 3.45 seed {{parent.Sparkles33.seed}} chroma_shift 0.72 chroma_spread 0.09 name Sparkles32 xpos -1148 ypos 12550 disable {{parent.Sparkles33.disable}} } Sparkles { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} size 1300 anamorphic 1.68 rotation {{(parent.Sparkles33.position.x/30)-90}} ray_nb 1 ray_thick {{"parent.coreRaysThickness + 6"}} spark_falloff 0.042 ray_falloff 3.5 seed {{"parent.coreRaysThickness + 65"}} chroma_shift 0.88 chroma_spread 0.09 name Sparkles33 xpos -1293 ypos 12510 disable {{"parent.coreRaysType == 10 ? 0 : 1"}} } Merge2 { inputs 2 maskChannelMask none name Merge209 xpos -1293 ypos 12550 } DirBlurWrapper { BlurType radial BlurCenter {{parent.flarePos.x} {parent.flarePos.y}} BlurLength 7 BlurAngle 70 maskChannelMask none name DirBlurWrapper15 xpos -1451 ypos 12544 disable {{Core_Bits_Plus.disable==1?1:core_bits.which==10?0:1}} } Blur { size 9.5 name Blur114 xpos -1451 ypos 12591 } Grade { multiply {0.5399999619 0.6963999271 1 1} gamma 0.68 maskChannelMask none unpremult -rgba.alpha name Grade46 xpos -1451 ypos 12629 } Merge2 { inputs 2 operation plus output {rgba.red rgba.green rgba.blue -rgba.alpha} maskChannelMask none mix 0.305 name Merge210 xpos -1451 ypos 12766 } Grade { multiply {1.795000076 1 0.7950000763 1} gamma 1.12 maskChannelMask none mix 0.8 name Grade73 xpos -1451 ypos 12836 } Saturation { inputs 1+1 saturation 10 name Saturation24 xpos -1451 ypos 12895 } Grade { inputs 1+1 multiply 2.7 gamma 0.52 name Grade72 xpos -1451 ypos 12938 } Grade { inputs 1+1 multiply {1 1 4 4} maskChannelMask rgba.red name Grade43 xpos -1451 ypos 13034 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {17.44 34.59 500} size_mult 0.3 ring_color {0.5 0.6699999571 1} inner_color 1 outer_falloff 17 inner_falloff 1.7 name Flare263 xpos -1066 ypos 12816 disable {{parent.Sparkles33.disable}} } Grade { multiply 6 maskChannelMask none unpremult -rgba.alpha name Grade49 xpos -1066 ypos 12842 } set N8e807800 [stack 0] Blur { size 73 name Blur116 xpos -1066 ypos 13062 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {17.27 21.25 92.18} size_mult 3 anamorph 1.02 ring_color {0.3832257986 0.3832257986 0.9900000095} inner_color 1 outer_falloff 3.6 inner_falloff 0.95 vis_mask -rgba.alpha corners 9 flattening 21.5 sharpness 1 corners_angle 54 name Flare264 xpos -1171 ypos 12911 disable {{parent.Sparkles33.disable}} } Blur { size 7 name Blur117 xpos -1171 ypos 12945 } push $N8e807800 Blur { size 200 name Blur118 xpos -1286 ypos 12836 } Merge { inputs 2 operation plus mix 0.225 name Merge244 xpos -1286 ypos 12951 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge245 xpos -1286 ypos 13068 } Saturation { saturation 0 maskChannelMask none name Saturation25 xpos -1286 ypos 13094 } Grade { multiply {0.9217296839 0.908107996 1.25999999 1} gamma 0.63 maskChannelMask none name Grade39 xpos -1286 ypos 13120 } Merge2 { inputs 2 operation plus output {rgba.red rgba.green rgba.blue -rgba.alpha} maskChannelMask none mix 0.6 name Merge246 xpos -1451 ypos 13120 } set N8e805000 [stack 0] push $N8e805000 Sparkles { inputs 0 mode Sparkles position {{parent.flarePos.x} {parent.flarePos.y}} size 1300 anamorphic 1.1 rotation {{"parent.Sparkles33.rotation + 20"}} ray_nb 600 ray_thick 3 spark_falloff 0 ray_falloff 10 seed {{"parent.Sparkles33.seed + 30"}} chroma_shift 1.06 chroma_spread 0.16 name Sparkles24 xpos -937 ypos 13063 disable {{parent.Sparkles33.disable}} } Sparkles { mode Sparkles position {{parent.flarePos.x} {parent.flarePos.y}} size 1800 anamorphic 1.1 rotation {{"parent.Sparkles33.rotation + 15"}} ray_nb 800 ray_thick 3 spark_falloff 0.016 ray_falloff 10 seed {{parent.Sparkles33.seed}} chroma_shift 1.06 chroma_spread 0.295 name Sparkles25 xpos -937 ypos 13089 disable {{parent.Sparkles33.disable}} } Merge2 { inputs 2 operation mask Achannels {rgba.red rgba.green rgba.blue rgba.red} maskChannelMask none name Merge279 xpos -937 ypos 13133 } Merge2 { inputs 2 operation geometric maskChannelMask none mix 0.5 name Merge280 xpos -937 ypos 13159 } Grade { multiply 2.65 maskChannelMask none name Grade69 xpos -937 ypos 13197 } push $N8e805000 Merge2 { inputs 2 operation screen maskChannelMask none name Merge281 xpos -1451 ypos 13197 } Dot { name Dot123 xpos -1417 ypos 13301 } Flare { inputs 0 position {{parent.Flare223.position.x} {parent.Flare223.position.y}} radius {93.02 104.27 208.82} size_mult {{parent.flareCoreSize}} ring_color {0.67 0.67 0.79} inner_color 1 chroma_shift_angle_add true vis_mask -rgba.alpha corners 7 flattening {{parent.Flare223.flattening}} sharpness 0.99 corners_angle {{parent.Flare223.corners_angle}} name Flare222 xpos -1672 ypos 12977 disable {{parent.Flare223.disable}} } DirBlurWrapper { BlurType radial BlurCenter {{parent.Flare223.position.x} {parent.Flare223.position.y}} BlurLength 15 BlurAngle 90 target {{parent.ffx_position.x} {parent.ffx_position.y}} name DirBlurWrapper11 xpos -1672 ypos 13005 disable {{parent.Flare223.disable}} } Blur { size 5.8 name Blur53 xpos -1672 ypos 13043 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {105.98 117.23 243.65} size_mult {{parent.flareCoreSize}} ring_color {0.67 0.67 0.79} inner_color 1 brightness {1 1 1} vis_mask -rgba.alpha corners 7 flattening {{"100 - parent.coreRaysThickness"}} sharpness 0.99 corners_angle {{parent.coreRaysRotation}} name Flare223 xpos -1892 ypos 12818 disable {{"parent.coreRaysType == 9 ? 0 : 1"}} } DirBlurWrapper { BlurType radial BlurCenter {{parent.Flare223.position.x} {parent.Flare223.position.y}} BlurLength 16 BlurAngle 90 target {{parent.ffx_position.x} {parent.ffx_position.y}} name DirBlurWrapper12 xpos -1892 ypos 12852 disable {{parent.Flare223.disable}} } Blur { size 5 name Blur54 xpos -1892 ypos 12913 } Flare { position {{parent.Flare223.position.x} {parent.Flare223.position.y}} radius {98.72 105.6 208.69} size_mult {{parent.flareCoreSize}} ring_color {0.67 0.67 0.79} inner_color 1 brightness 0.22 vis_mask -rgba.alpha corners 7 flattening {{"parent.Flare223.flattening - 40"}} sharpness 0.99 corners_angle {{parent.Flare223.corners_angle}} name Flare225 xpos -1892 ypos 12951 disable {{parent.Flare223.disable}} } Blur { size 3 name Blur55 xpos -1892 ypos 12979 } Merge { inputs 2 operation plus name Merge80 xpos -1892 ypos 13049 } Dot { name Dot124 xpos -1858 ypos 13294 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {1.28 38.69 48.57} anamorph 1.58 ring_color {0.24 0.24 0.62} inner_color 1 outer_falloff 0.95 inner_falloff 0.95 vis_mask -rgba.alpha corners 4 flattening {{parent.Flare233.flattening}} sharpness 1 corners_angle {{parent.Flare233.corners_angle}} name Flare224 xpos -2055 ypos 12928 disable {{parent.Flare233.disable}} } set N8e70f400 [stack 0] push $N8e70f400 Blur { size 18 name Blur44 xpos -2165 ypos 12922 } Merge { inputs 2 operation plus mix 0.095 name Merge193 xpos -2165 ypos 12967 } Grade { multiply 4 name Grade40 xpos -2165 ypos 12993 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {1.28 5.26 76.19} anamorph 1.58 ring_color {0.3832257986 0.3832257986 0.9900000095} inner_color 1 outer_falloff 3.6 inner_falloff 0.95 vis_mask -rgba.alpha corners 9 flattening {{"100 - (parent.coreRaysThickness + 45)"}} sharpness 1 corners_angle {{parent.coreRaysRotation}} name Flare233 xpos -2068 ypos 12849 disable {{"parent.coreRaysType == 8 ? 0 : 1"}} } set N8e70e000 [stack 0] push $N8e70e000 Blur { size 18 name Blur46 xpos -2165 ypos 12843 } Merge { inputs 2 operation plus mix 0.485 name Merge203 xpos -2165 ypos 12891 } Grade { multiply 4 name Grade41 xpos -2275 ypos 12891 } Merge { inputs 2 operation plus mix 0.215 name Merge204 xpos -2275 ypos 12993 } Dot { name Dot125 xpos -2241 ypos 13226 } Sparkles { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} size {{512+parent.coreRaysSize}} rotation {{-58+parent.coreRaysRotation}} ray_nb 1 ray_thick {{"3.5 + parent.coreRaysThickness"}} random_thick true spark_falloff 0 ray_falloff 2.5 seed {{65+parent.ffx_cores_seed}} brightness 0.4 broken_affected 9.89774 name Sparkles22 label "Anamorphic Bits" xpos -2556 ypos 12992 disable {{"parent.coreRaysType == 7 ? 0 : 1"}} } Sparkles { position {{parent.Sparkles22.position.x} {parent.Sparkles22.position.y}} size {{parent.Sparkles22.size}} rotation {{"180 + parent.Sparkles22.rotation"}} ray_nb 1 ray_thick {{parent.Sparkles22.ray_thick}} random_thick true spark_falloff 0 ray_falloff 2.5 seed {{parent.Sparkles22.seed}} brightness 0.4 broken_affected 9.89774 name Sparkles23 label "Anamorphic Bits" xpos -2556 ypos 13030 disable {{parent.Sparkles22.disable}} } set N8e6a7c00 [stack 0] Dot { name Dot126 xpos -2374 ypos 13040 } Blur { size 20 name Blur31 xpos -2408 ypos 13146 } push $N8e6a7c00 Blur { size 3 name Blur32 xpos -2556 ypos 13088 } Glow { brightness 1.14 name Glow11 xpos -2556 ypos 13126 } Merge { inputs 2 operation plus name Merge81 xpos -2556 ypos 13152 } Sparkles { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} size 150 rotation {{"parent.coreRaysRotation - 14"}} ray_nb 4 ray_thick {{"parent.coreRaysThickness + 0.4"}} seed {{parent.coreRaysSeed}} name Sparkles18 xpos -2583 ypos 12728 disable {{"parent.coreRaysType == 6 ? 0 : 1"}} } Sparkles { position {{parent.flarePos.x} {parent.flarePos.y}} size 150 rotation {{parent.Sparkles18.rotation}} ray_nb 4 ray_thick {{parent.Sparkles18.ray_thick}} seed {{parent.Sparkles18.seed}} name Sparkles19 xpos -2583 ypos 12754 disable {{parent.Sparkles18.disable}} } Sparkles { position {{parent.flarePos.x} {parent.flarePos.y}} size 335 anamorphic 0.5 rotation {{"parent.Sparkles18.rotation - 50"}} ray_nb 56.4656 ray_thick {{parent.Sparkles18.ray_thick}} spark_falloff 0.045283 ray_falloff 8.41509 seed {{parent.Sparkles18.seed}} color 0.6 name Sparkles20 xpos -2583 ypos 12780 disable {{parent.Sparkles18.disable}} } Sparkles { position {{parent.flarePos.x} {parent.flarePos.y}} size 305 anamorphic 0.649481 rotation {{"parent.Sparkles18.rotation - 60"}} ray_nb 37.0218 ray_thick {{"parent.Sparkles18.ray_thick / 2"}} spark_falloff 0.045283 ray_falloff 10 seed {{parent.Sparkles18.seed}} color 0.5 name Sparkles21 xpos -2583 ypos 12806 disable {{parent.Sparkles18.disable}} } DirBlurWrapper { BlurType radial BlurCenter {{parent.flarePos.x} {parent.flarePos.y}} BlurLength 10 Samples 2 maskChannelMask none name DirBlurWrapper6 xpos -2583 ypos 12832 disable {{parent.Sparkles18.disable}} } Sparkles { inputs 0 position {{parent.Sparkles37.position.x} {parent.Sparkles37.position.y}} size 250 rotation {{"parent.Sparkles37.rotation - 57"}} ray_nb 60 ray_thick {{"parent.Sparkles37.ray_thick / 10"}} seed {{parent.Sparkles37.seed}} brightness 0.15 name Sparkles36 xpos -2833 ypos 12717 disable {{parent.Sparkles37.disable}} } Blur { size 2 name Blur8 xpos -2833 ypos 12743 } DirBlurWrapper { BlurType radial BlurCenter {{parent.flarePos.x} {parent.flarePos.y}} Samples 2 name DirBlurWrapper2 xpos -2833 ypos 12781 disable {{parent.Sparkles37.disable}} } Sparkles { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} size 255 anamorphic 1.34389 rotation 57.4372 relative_rotation true ray_nb 5 ray_thick 2 random_thick true spark_falloff 0 ray_falloff 6.45283 seed {{35+parent.ffx_cores_seed}} brightness 0.4 broken_affected 9.89774 name Sparkles37 xpos -2723 ypos 12673 disable {{"parent.coreRaysType == 5 ? 0 : 1"}} } Blur { size 2 name Blur11 xpos -2723 ypos 12699 } DirBlurWrapper { BlurType radial BlurCenter {{parent.flarePos.x} {parent.flarePos.y}} Samples 2 name DirBlurWrapper9 xpos -2723 ypos 12737 disable {{parent.Sparkles37.disable}} } Merge2 { inputs 2 name Merge20 xpos -2723 ypos 12787 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {60.77 77.81 137.81} ring_color {0.16796 0.396161 0.596516} inner_color 1 brightness 2 corners 9 flattening {{"100 - parent.coreRaysThickness"}} sharpness 0.999 corners_angle {{parent.coreRaysRotation}} name Flare53 label "Flare Spike" xpos -2982 ypos 12683 disable {{"parent.coreRaysType == 4 ? 0 : 1"}} } Blur { size 4 name Blur35 xpos -2982 ypos 12760 } Sparkles { inputs 0 position {{parent.Sparkles15.position.x} {parent.Sparkles15.position.y}} size 385 anamorphic 3 rotation {{parent.Sparkles15.rotation}} ray_nb 8 ray_thick {{"parent.Sparkles15.ray_thick * 3"}} random_thick true spark_falloff 0 ray_falloff 6.45283 seed {{parent.Sparkles15.seed}} broken_affected 9.89774 name Sparkles7 xpos -3249 ypos 12672 disable {{parent.Sparkles15.disable}} } Blur { size 5 name Blur49 xpos -3249 ypos 12698 } Sparkles { inputs 0 position {{parent.Sparkles15.position.x} {parent.Sparkles15.position.y}} size 340 anamorphic 3 rotation {{parent.Sparkles15.rotation}} ray_nb 3 ray_thick {{"parent.Sparkles15.ray_thick * 2"}} random_thick true spark_falloff 0 ray_falloff 6.45283 seed {{parent.Sparkles15.seed}} brightness 0.4 broken_affected 9.89774 name Sparkles11 xpos -3249 ypos 12579 disable {{parent.Sparkles15.disable}} } Blur { size 3 name Blur62 xpos -3249 ypos 12605 } Sparkles { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} size 412 anamorphic 3 rotation {{parent.coreRaysRotation}} ray_nb 4 ray_thick {{parent.coreRaysThickness}} random_thick true spark_falloff 0 ray_falloff 6.45283 seed {{parent.coreRaysSeed}} brightness 0.4 broken_affected 9.89774 name Sparkles15 label "Anamorphic Bits" xpos -3139 ypos 12459 disable {{"parent.coreRaysType == 3 ? 0 : 1"}} } Blur { size 2 name Blur71 xpos -3139 ypos 12497 } Blur { size 5 name Blur72 xpos -3139 ypos 12535 } Merge2 { inputs 2 operation plus mix 0.7 name Merge97 xpos -3139 ypos 12611 } Merge2 { inputs 2 operation plus mix 0.5 name Merge100 xpos -3139 ypos 12704 } Blur { size 2 name Blur74 xpos -3139 ypos 12822 } Sparkles { inputs 0 position {{parent.Sparkles9.position.x} {parent.Sparkles9.position.y}} size 495 anamorphic 1.34389 rotation {{"parent.Sparkles9.rotation + 11"}} ray_nb 7 ray_thick 1 random_thick true spark_falloff 0 ray_falloff 6.45283 seed {{"parent.Sparkles9.seed + 21"}} broken_affected 9.89774 name Sparkles2 xpos -3487 ypos 12777 disable {{parent.Sparkles9.disable}} } Blur { size 2 name Blur36 xpos -3487 ypos 12803 } Sparkles { inputs 0 position {{parent.Sparkles9.position.x} {parent.Sparkles9.position.y}} size 385 anamorphic 1.34389 rotation {{"parent.Sparkles9.rotation - 13"}} ray_nb 20 ray_thick {{parent.Sparkles9.ray_thick}} random_thick true spark_falloff 0 ray_falloff 6.45283 seed {{36+parent.coreRaysSeed}} broken_affected 9.89774 name Sparkles5 xpos -3487 ypos 12690 disable {{parent.Sparkles9.disable}} } Blur { size 5 name Blur37 xpos -3487 ypos 12716 } Sparkles { inputs 0 position {{parent.Sparkles9.position.x} {parent.Sparkles9.position.y}} size 340 anamorphic 1.34389 rotation {{"31 + parent.Sparkles9.rotation"}} ray_nb 7 ray_thick {{parent.Sparkles9.ray_thick}} random_thick true spark_falloff 0 ray_falloff 6.45283 seed {{"parent.Sparkles9.seed + 25"}} brightness 0.4 broken_affected 9.89774 name Sparkles8 xpos -3487 ypos 12597 disable {{parent.Sparkles9.disable}} } Blur { size 3 name Blur38 xpos -3487 ypos 12623 } Sparkles { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} size 412 anamorphic 1.34389 rotation {{parent.coreRaysRotation}} ray_nb 8 ray_thick {{parent.coreRaysThickness}} random_thick true spark_falloff 0 ray_falloff 6.45283 seed {{35+parent.coreRaysSeed}} brightness 0.4 broken_affected 9.89774 name Sparkles9 label "Lots of Bits" xpos -3377 ypos 12477 disable {{"parent.coreRaysType == 2 ? 0 : 1"}} } Blur { size 2 name Blur39 xpos -3377 ypos 12515 } Blur { size 5 name Blur45 xpos -3377 ypos 12553 } Merge2 { inputs 2 operation plus mix 0.7 name Merge102 xpos -3377 ypos 12629 } Merge2 { inputs 2 operation plus mix 0.5 name Merge116 xpos -3377 ypos 12722 } Merge2 { inputs 2 operation plus mix 0.4 name Merge117 xpos -3377 ypos 12809 } Blur { size 2 name Blur50 xpos -3377 ypos 12835 } Sparkles { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} size 385 anamorphic 1.34389 rotation {{"parent.coreRaysRotation + 31"}} ray_nb 8 ray_thick {{parent.coreRaysThickness}} random_thick true spark_falloff 0 ray_falloff 6.45283 seed {{"26 + parent.coreRaysSeed"}} broken_affected 9.89774 name Sparkles12 xpos -3756 ypos 12674 disable {{parent.Sparkles14.disable}} } Blur { size 5 name Blur63 xpos -3756 ypos 12700 } Sparkles { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} size 340 anamorphic 1.34389 rotation {{"parent.coreRaysRotation + 31"}} ray_nb 5 ray_thick {{parent.coreRaysThickness}} random_thick true spark_falloff 0 ray_falloff 6.45283 seed {{"50 - parent.coreRaysSeed"}} brightness 0.4 broken_affected 9.89774 name Sparkles13 xpos -3756 ypos 12566 disable {{parent.Sparkles14.disable}} } Blur { size 3 name Blur64 xpos -3756 ypos 12607 } Sparkles { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} size 412 anamorphic 1.34389 rotation {{"parent.coreRaysRotation + 31"}} ray_nb 4 ray_thick {{parent.coreRaysThickness}} random_thick true spark_falloff 0 ray_falloff 6.45283 seed {{parent.coreRaysSeed}} brightness 0.4 broken_affected 9.89774 name Sparkles14 label "More Bits" xpos -3646 ypos 12461 disable {{"parent.coreRaysType == 1 ? 0 : 1"}} } Blur { size 2 name Blur65 xpos -3646 ypos 12499 } Blur { size 5 name Blur66 xpos -3646 ypos 12537 } Merge2 { inputs 2 operation plus mix 0.7 name Merge122 xpos -3646 ypos 12613 } Merge2 { inputs 2 operation plus mix 0.5 name Merge123 xpos -3646 ypos 12706 } Blur { size 2 name Blur67 xpos -3646 ypos 12818 } Sparkles { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} size 385 anamorphic 1.34389 rotation {{"(parent.coreRaysRotation * 1.2) - 83"}} ray_nb 9 ray_thick {{parent.coreRaysThickness}} random_thick true spark_falloff 0 ray_falloff 6.45283 seed {{parent.Sparkles27.seed}} broken_affected 9.89774 name Sparkles10 xpos -3985 ypos 12687 disable {{parent.Sparkles27.disable}} } Blur { size 5 name Blur51 xpos -3985 ypos 12713 } Sparkles { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} size 340 anamorphic 1.34389 rotation {{"(parent.coreRaysRotation * 1.2) + 51"}} ray_nb 4 ray_thick {{parent.coreRaysThickness}} random_thick true spark_falloff 0 ray_falloff 6.45283 seed {{parent.Sparkles27.seed}} brightness 0.4 broken_affected 9.89774 name Sparkles26 xpos -3985 ypos 12594 disable {{parent.Sparkles27.disable}} } Blur { size 3 name Blur52 xpos -3985 ypos 12620 } Sparkles { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} size 465 anamorphic 1.34389 rotation {{parent.coreRaysRotation}} ray_nb 4 ray_thick {{parent.coreRaysThickness}} random_thick true spark_falloff 0 ray_falloff 6.45283 seed {{parent.coreRaysSeed}} brightness 0.4 broken_affected 9.89774 name Sparkles27 label "Few Bits" xpos -3875 ypos 12463 disable {{"parent.coreRaysType == 0 ? 0 : 1" x21 0}} } Blur { size 2 name Blur56 xpos -3875 ypos 12512 } Blur { size 5 name Blur60 xpos -3875 ypos 12550 } Merge2 { inputs 2 operation plus mix 0.7 name Merge124 xpos -3875 ypos 12626 } Merge2 { inputs 2 operation plus mix 0.5 name Merge125 xpos -3875 ypos 12719 } Blur { size 2 name Blur61 xpos -3875 ypos 12832 } Switch { inputs 13 which {{parent.coreRaysType}} name core_bits xpos -3217 ypos 13409 } Transform { scale {{"1 * parent.coreRaysSize * parent.flareCoreSize"}} center {{parent.flarePos.x} {parent.flarePos.y}} name Transform42 xpos -162 ypos 13409 } Crop { box {0 0 {root.width} {root.height}} name Crop7 xpos -31 ypos 13409 } Clamp { name Clamp8 xpos 106 ypos 13403 } Grade { multiply {{parent.coreRaysColour.r} {parent.coreRaysColour.g} {parent.coreRaysColour.b} 0} white_clamp true maskChannelMask none name grade1 label "core rays grade" xpos 281 ypos 13403 } Blur { size {{parent.coreRaysBlur}} name Blur57 label "core rays blur" note_font Verdana xpos 407 ypos 13398 } Group { name Static_Noise6 help "Adds synthetic grain. Push \"presets\" to get predefined types of grain, these are the correct size for 2K scans.\n\nYou can also adjust the sliders to match a sample piece of grain. Find a sample with a rather constant background, blur it to remove the grain, and use as input to this. View with a wipe in the viewer so you can make a match. It helps to view and match each of the red, green, blue seperately." tile_color 0x992620ff note_font "Bitstream Vera Sans" xpos 532 ypos 13410 dope_sheet true mapsize {0.15 0.15} addUserKnob {20 master_control l Master} addUserKnob {7 noise_intensity_global l Intensity R 0 2} noise_intensity_global 0.52 addUserKnob {7 rgb_size_multiplier l Size R 0 2} rgb_size_multiplier 1 addUserKnob {26 ""} addUserKnob {6 no_alpha l "no alpha?" t "Check this box if your image doesn't have an alpha and you cannot use another alpha channel.\n\n(Note: This WILL cause the grain to be more prevalent. So please compensate using the Noise Size and Noise Intensity controls above.)" +STARTLINE} no_alpha true addUserKnob {20 adv_controls l Advanced} addUserKnob {20 fractal_noise_size l "RGB Noise Size" n 1} fractal_noise_size 0 addUserKnob {14 red_size l r R 0 100} red_size 1.7 addUserKnob {14 green_size l g R 0 100} green_size 1.6 addUserKnob {14 blue_size l b R 0 100} blue_size 1.5 addUserKnob {20 endGroup n -1} addUserKnob {20 noise_irregularity l "RGB Noise Irregularity" n 1} noise_irregularity 0 addUserKnob {7 red_i l r} red_i 1 addUserKnob {7 green_i l g} green_i 0.75 addUserKnob {7 blue_i l b} blue_i 0.65 addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 noise_intensity l "RGB Noise Intensity" n 1} noise_intensity 0 addUserKnob {7 red_m l r t "Amount of grain to add to a white pixel"} red_m 0.2 addUserKnob {7 green_m l g} green_m 0.4 addUserKnob {7 blue_m l b} blue_m 0.6 addUserKnob {18 black t "Amount of grain to add everywhere"} black {0 0 0} addUserKnob {6 black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 minimum t "Minimum black level" R 0 0.01} minimum {0 0 0} addUserKnob {6 minimum_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {26 ""} addUserKnob {3 seed l Seed} seed 134 addUserKnob {32 reset l Reset T "knobs this \{rgb_size_multiplier 0 red_size 1.70 green_size 1.60 blue_size 1.50 red_i 1.00 green_i 0.75 blue_i 0.65 red_m 0.40 green_m 0.60 blue_m 1.65 black 0.00\}" +STARTLINE} } Input { inputs 0 name Input1 xpos 0 } set N8e495800 [stack 0] Noise { output {rgba.red -rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.red_size.w*(rgb_size_multiplier) i} {parent.red_size.h*(rgb_size_multiplier) i}} octaves 2 gamma 1 xrotate {{red_i*45 i}} yrotate {{red_i*45 i}} name red xpos 144 ypos -7 } Noise { output {-rgba.red rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.green_size.w*(rgb_size_multiplier) i} {parent.green_size.h*(rgb_size_multiplier) i}} zoffset 10 octaves 2 gamma 1 xrotate {{green_i*45 i}} yrotate {{green_i*45 i}} name green xpos 144 ypos 35 } Noise { output {-rgba.red -rgba.green rgba.blue -rgba.alpha} cliptype none replace true size {{parent.blue_size.w*(rgb_size_multiplier) i} {parent.blue_size.h*(rgb_size_multiplier) i}} zoffset 20 octaves 2 gamma 1 xrotate {{blue_i*45 i}} yrotate {{blue_i*45 i}} name blue xpos 144 ypos 77 } push $N8e495800 MergeExpression { inputs 2 expr0 max(minimum.r,r+(2*Ar-1)*(r*red_m*noise_intensity_global)) expr1 max(minimum.g,g+(2*Ag-1)*(g*green_m*noise_intensity_global)) expr2 max(minimum.b,b+(2*Ab-1)*(b*blue_m*noise_intensity_global)) name MergeExpression1 xpos 144 ypos 117 } set N8e494800 [stack 0] push $N8e494800 push $N8e495800 Copy { inputs 2 channels rgb maskChannelInput rgba.alpha name Copy1 xpos 0 ypos 105 disable {{parent.no_alpha i}} } Switch { inputs 2 which {{parent.no_alpha i}} name Switch1 xpos 144 ypos 171 } Output { name Output1 xpos 144 ypos 219 } end_group Dot { name Dot129 xpos 657 ypos 13413 } set N8e3fb800 [stack 0] Saturation { saturation 0 name Saturation26 xpos 624 ypos 13459 } push $N8e3fb800 Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy18 xpos 767 ypos 13403 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceLinesOffset + 2.15"}} radius {0 1.06 136.36} size_mult {{(parent.flareCoreSize)+1.8}} anamorph 11.52 ring_color 3 inner_color 1 outer_falloff 1.7 chroma_spread 0.02 brightness 0.095 vis_mask -rgba.alpha name Flare72 xpos -346 ypos 11280 disable {{parent.Flare74.disable}} } Blur { size 16 name Blur145 xpos -346 ypos 11306 disable {{parent.Flare74.disable}} } Blur { size 1 name Blur146 xpos -346 ypos 11344 disable {{parent.Flare74.disable}} } Flare { inputs 0 position {{parent.flarePos.x+55} {parent.flarePos.y+7}} offset {{"parent.lensPieceLinesOffset + 2.15"}} radius {0 3.97 31.8} size_mult {{(parent.flareCoreSize)+1.8}} anamorph 11.52 ring_color 0.5 inner_color 1 outer_falloff 1.7 chroma_spread 0.02 brightness 0.095 vis_mask -rgba.alpha name Flare204 xpos -490 ypos 11117 disable {{parent.Flare74.disable}} } Blur { size 3 name Blur147 xpos -490 ypos 11162 disable {{parent.Flare74.disable}} } Glow { brightness 0.5 name Glow35 xpos -490 ypos 11202 disable {{parent.Flare74.disable}} } Grade { multiply 10 name Grade60 xpos -490 ypos 11228 disable {{parent.Flare74.disable}} } Grade { multiply {1 1 1 0} name Grade61 xpos -490 ypos 11262 disable {{parent.Flare74.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none mix 0.07 name Merge175 xpos -490 ypos 11350 disable {{parent.Flare74.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceLinesOffset + 2.15"}} radius {0 1.06 136.36} size_mult {{(parent.flareCoreSize)+1.8}} anamorph 11.52 ring_color 3 inner_color 1 outer_falloff 1.7 chroma_spread 0.02 brightness 0.095 vis_mask -rgba.alpha name Flare73 xpos -764 ypos 11205 disable {{parent.Flare74.disable}} } Blur { size 16 name Blur99 xpos -764 ypos 11231 disable {{parent.Flare74.disable}} } Blur { size 1 name Blur143 xpos -764 ypos 11269 disable {{parent.Flare74.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceLinesOffset + 2.15"}} radius {0 3.97 31.8} size_mult {{(parent.flareCoreSize)+1.8}} anamorph 11.52 ring_color 0.5 inner_color 1 outer_falloff 1.7 chroma_spread 0.02 brightness 0.095 vis_mask -rgba.alpha name Flare74 xpos -643 ypos 11038 disable {{"parent.lensPieceLinesPicker == 6 ? 0 : 1"}} } Blur { size 3 name Blur144 xpos -643 ypos 11079 disable {{parent.Flare74.disable}} } Glow { brightness 0.5 name Glow34 xpos -643 ypos 11133 disable {{parent.Flare74.disable}} } Grade { multiply 10 name Grade62 xpos -643 ypos 11166 disable {{parent.Flare74.disable}} } Grade { multiply {1 1 1 0} name Grade63 xpos -643 ypos 11192 disable {{parent.Flare74.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none mix 0.07 name Merge174 xpos -643 ypos 11275 disable {{parent.Flare74.disable}} } Merge2 { inputs 2 operation screen maskChannelMask none mix 0.5 name Merge188 xpos -643 ypos 11350 disable {{parent.Flare74.disable}} } Dot { name Dot154 xpos -609 ypos 11481 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {262.81 269.91 269.91} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare287 xpos -963 ypos 10349 disable {{parent.Flare317.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform84 xpos -963 ypos 10375 disable {{parent.Flare317.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {156.26 160.52 261.37} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare288 xpos -968 ypos 10316 disable {{parent.Flare317.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {83.82 92.34 126.43} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare289 xpos -843 ypos 10249 disable {{parent.Flare317.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform85 xpos -843 ypos 10275 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge228 xpos -843 ypos 10316 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge229 xpos -843 ypos 10375 disable {{parent.Flare317.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {282.69 289.79 377.86} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare290 xpos -734 ypos 10289 disable {{parent.Flare317.disable}} } Transform { translate {-60 0} center {960 540} black_outside false name Transform86 xpos -734 ypos 10315 disable {{parent.Flare317.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {181.84 198.88 218.76} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare291 xpos -630 ypos 10263 disable {{parent.Flare317.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform87 xpos -630 ypos 10289 disable {{parent.Flare317.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {117.91 129.27 161.94} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare292 xpos -630 ypos 10215 disable {{parent.Flare317.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {42.92 42.92 104} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.23 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare293 xpos -510 ypos 10149 disable {{parent.Flare317.disable}} } Transform { translate {200 0} center {960 540} black_outside false name Transform88 xpos -510 ypos 10175 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge230 xpos -510 ypos 10215 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge231 xpos -510 ypos 10289 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge232 xpos -510 ypos 10315 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge233 xpos -510 ypos 10375 disable {{parent.Flare317.disable}} } Blur { size 61 name Blur127 xpos -510 ypos 10401 disable {{parent.Flare317.disable}} } set N8e2adc00 [stack 0] Shuffle { green red blue red alpha red name Shuffle23 xpos -510 ypos 10448 disable {{parent.Flare317.disable}} } push $N8e2adc00 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {0 0 32.72} size_mult {{(parent.flareCoreSize)+4}} anamorph 8 inner_color 0 outer_falloff 0.9 chroma_spread 0.25 chroma_shift -10.4 chroma_shift_angle 42 vis_out 1 flattening 3.2 name Flare294 xpos -381 ypos 10190 disable {{parent.Flare317.disable}} } Grade { inputs 1+1 white 4 multiply 4 maskChannelMask rgba.red name Grade71 xpos -381 ypos 10407 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation mask maskChannelMask none name Merge234 xpos -381 ypos 10448 disable {{parent.Flare317.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {262.81 269.91 269.91} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare303 xpos -829 ypos 9883 disable {{parent.Flare317.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform96 xpos -829 ypos 9909 disable {{parent.Flare317.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {156.26 160.52 261.37} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare304 xpos -833 ypos 9850 disable {{parent.Flare317.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {83.82 92.34 126.43} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare305 xpos -709 ypos 9783 disable {{parent.Flare317.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform97 xpos -709 ypos 9809 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge249 xpos -709 ypos 9850 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge250 xpos -709 ypos 9909 disable {{parent.Flare317.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {282.69 289.79 377.86} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare306 xpos -600 ypos 9823 disable {{parent.Flare317.disable}} } Transform { translate {-60 0} center {960 540} black_outside false name Transform98 xpos -600 ypos 9849 disable {{parent.Flare317.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {181.84 198.88 218.76} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare307 xpos -496 ypos 9797 disable {{parent.Flare317.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform99 xpos -496 ypos 9823 disable {{parent.Flare317.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {117.91 129.27 161.94} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare308 xpos -497 ypos 9749 disable {{parent.Flare317.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {42.92 42.92 104} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.23 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare309 xpos -376 ypos 9683 disable {{parent.Flare317.disable}} } Transform { translate {200 0} center {960 540} black_outside false name Transform100 xpos -376 ypos 9709 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge251 xpos -376 ypos 9749 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge252 xpos -376 ypos 9823 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge253 xpos -376 ypos 9849 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge254 xpos -376 ypos 9909 disable {{parent.Flare317.disable}} } Blur { size 61 name Blur122 xpos -376 ypos 9935 disable {{parent.Flare317.disable}} } set N8e1c5800 [stack 0] Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {0 0 32.72} size_mult {{(parent.flareCoreSize)+4}} anamorph 8 inner_color 0 outer_falloff 0.9 chroma_spread 0.25 chroma_shift -10.4 chroma_shift_angle 42 vis_out 1 flattening 3.2 name Flare310 xpos -247 ypos 9724 disable {{parent.Flare317.disable}} } Grade { inputs 1+1 white 4 multiply 4 maskChannelMask rgba.red name Grade74 xpos -247 ypos 9941 disable {{parent.Flare317.disable}} } set N8e1c4c00 [stack 0] Merge2 { inputs 2 operation mask maskChannelMask none mix 0.885 name Merge235 xpos -247 ypos 10448 disable {{parent.Flare317.disable}} } Transform { translate {0 -40} scale {1.4 1} center {{parent.flarePos.x} {parent.flarePos.y}} name Transform89 xpos 65 ypos 10448 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {42.92 42.92 146.15} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 1 outer_falloff 0.23 inner_falloff 0.41 vis_out 1.04 corners 0 flattening 1 sharpness 1 corners_angle 45 name Flare286 xpos -112 ypos 9794 disable {{parent.Flare317.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform83 xpos -112 ypos 9820 disable {{parent.Flare317.disable}} } Blur { size 30 name Blur100 xpos -112 ypos 9846 disable {{parent.Flare317.disable}} } Shuffle { green red blue red alpha red name Shuffle19 xpos -112 ypos 9904 disable {{parent.Flare317.disable}} } set N98472c00 [stack 0] push $N8e1c5800 Shuffle { green red blue red alpha red name Shuffle26 xpos -376 ypos 9982 disable {{parent.Flare317.disable}} } push $N8e1c4c00 Merge2 { inputs 2 operation mask maskChannelMask none name Merge255 xpos -222 ypos 9982 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation stencil maskChannelMask none mix 0.7 name Merge226 xpos -112 ypos 9982 disable {{parent.Flare317.disable}} } Transform { translate {0 -10} scale {1.4 1} center {{parent.flarePos.x} {parent.flarePos.y}} name Transform101 xpos 53 ypos 9982 disable {{parent.Flare317.disable}} } set N98471c00 [stack 0] push 0 push $N98471c00 push $N98472c00 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {243.04 247.3 357.63} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare312 xpos 52 ypos 9761 disable {{parent.Flare317.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {33.01 61.88 106.14} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 3 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare313 xpos 181 ypos 9694 disable {{parent.Flare317.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform103 xpos 181 ypos 9720 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge256 xpos 181 ypos 9761 disable {{parent.Flare317.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {105.13 116.49 174.73} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare315 xpos 299 ypos 9667 disable {{parent.Flare317.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {33.02 44.38 86.99} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare316 xpos 409 ypos 9600 disable {{parent.Flare317.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform105 xpos 409 ypos 9626 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge258 xpos 409 ypos 9667 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge260 xpos 409 ypos 9761 disable {{parent.Flare317.disable}} } Blur { size 61 name Blur123 xpos 409 ypos 9800 disable {{parent.Flare317.disable}} } set N98402000 [stack 0] Shuffle { green red blue red alpha red name Shuffle27 xpos 409 ypos 9846 disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} } push $N98402000 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {1.45 1.45 34.17} size_mult {{(parent.flareCoreSize)+4}} anamorph 10 inner_color 0 outer_falloff 0.9 chroma_spread 0.25 chroma_shift -10.4 chroma_shift_angle 42 vis_out 1 flattening 5.5 name Flare317 xpos 538 ypos 9566 disable {{"parent.lensPieceLinesPicker == 5 ? 0 : 1"}} } Grade { inputs 1+1 white 1.7 multiply 2.5 maskChannelMask rgba.red name Grade75 xpos 538 ypos 9806 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation mask maskChannelMask none name Merge261 xpos 538 ypos 9846 disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} } Transform { translate {0 30} scale {1.3 1} center {{parent.flarePos.x} {parent.flarePos.y}} name Transform106 xpos 538 ypos 9872 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation stencil maskChannelMask none mix 0.94 name Merge227 xpos 538 ypos 9904 disable {{parent.Flare317.disable}} } Merge2 { inputs 3+1 operation plus maskChannelMask none name Merge262 xpos 538 ypos 9982 disable {{parent.Flare317.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge236 xpos 538 ypos 10448 disable {{parent.Flare317.disable}} } Blur { size {10 0} name Blur134 xpos 538 ypos 10510 } Saturation { saturation 0 maskChannelMask none name Saturation33 xpos 538 ypos 10548 } DirBlurWrapper { BlurType linear BlurCenter {{parent.flarePos.x} {parent.flarePos.y}} BlurLength 28 maskChannelMask none name DirBlurWrapper30 xpos 538 ypos 10597 disable {{parent.Flare317.disable}} } DirBlurWrapper { BlurType linear BlurCenter {{parent.flarePos.x} {parent.flarePos.y}} BlurLength 38 BlurAngle 90 maskChannelMask none name DirBlurWrapper31 xpos 538 ypos 10635 disable {{parent.Flare317.disable}} } Sharpen { amount 50 maskChannelMask none name Sharpen5 xpos 538 ypos 10673 } Grade { whitepoint 0.8 maskChannelMask none name Grade76 xpos 538 ypos 10711 } Grade { multiply 0.54 gamma 1.54 maskChannelMask none name Grade77 xpos 538 ypos 10777 } Glow { tolerance 0.56 brightness 1.5 size 70 maskChannelMask none name Glow22 xpos 538 ypos 10836 } Dot { name Dot75 xpos 572 ypos 11662 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.65 radius {0 26.23 37.09} anamorph 3 ring_color {0 0.01600027084 1} inner_color {0 0.8500001431 1} outer_falloff 0.75 inner_falloff 2 chroma_spread 0.005 vis_in 0.9 vis_mask -rgba.alpha corners 4 flattening 2.4 sharpness 0.53 corners_angle 48 asym_falloff 0.72 asym_angle 116 mult_offset 8 mult_size -0.1 mult_color 0.6 mult_brightness -0.72 mult_visibility -0.18 name Flare221 label Pieces xpos -2195 ypos 11211 disable {{parent.Flare77.disable}} } Blur { size 4.8 name Blur133 xpos -2195 ypos 11249 disable {{parent.Flare77.disable}} } DirBlurWrapper { BlurType linear BlurLength 7 BlurAngle 180 maskChannelMask none name DirBlurWrapper25 xpos -2195 ypos 11313 disable {{parent.Flare77.disable}} } DirBlurWrapper { BlurType linear BlurLength 15 BlurAngle 90 maskChannelMask none name DirBlurWrapper26 xpos -2195 ypos 11351 disable {{parent.Flare77.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset -0.31 radius {0 26.23 37.09} anamorph 6 ring_color {0 0.01600027084 1} inner_color {0 0.8500001431 1} outer_falloff 0.75 inner_falloff 2 chroma_spread 0.005 vis_in 0.9 vis_mask -rgba.alpha corners 4 flattening 2.4 sharpness 0.53 corners_angle 48 asym_falloff 0.72 asym_angle 116 mult_offset 8 mult_size -0.1 mult_color 0.6 mult_brightness -0.72 mult_visibility -0.18 name Flare75 label Pieces xpos -2084 ypos 11177 disable {{parent.Flare77.disable}} } Blur { size 4.8 name Blur132 xpos -2084 ypos 11215 disable {{parent.Flare77.disable}} } DirBlurWrapper { BlurType linear BlurLength 7 BlurAngle 180 maskChannelMask none name DirBlurWrapper23 xpos -2084 ypos 11279 disable {{parent.Flare77.disable}} } DirBlurWrapper { BlurType linear BlurLength 15 BlurAngle 90 maskChannelMask none name DirBlurWrapper24 xpos -2084 ypos 11317 disable {{parent.Flare77.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.5 radius {0 26.23 37.09} size_mult 3 anamorph 6 ring_color {0 0.01600027084 1} inner_color {0 0.8500001431 1} outer_falloff 0.75 inner_falloff 2 chroma_spread 0.005 vis_in 0.9 vis_mask -rgba.alpha corners 4 flattening 2.4 sharpness 0.53 corners_angle 48 asym_falloff 0.72 asym_angle 116 mult_offset 8 mult_size -0.1 mult_color 0.6 mult_brightness -0.72 mult_visibility -0.18 name Flare76 label Pieces xpos -1965 ypos 11132 disable {{parent.Flare77.disable}} } Blur { size 4.8 name Blur131 xpos -1965 ypos 11170 disable {{parent.Flare77.disable}} } DirBlurWrapper { BlurType linear BlurLength 7 BlurAngle 180 maskChannelMask none name DirBlurWrapper21 xpos -1965 ypos 11234 disable {{parent.Flare77.disable}} } DirBlurWrapper { BlurType linear BlurLength 15 BlurAngle 90 maskChannelMask none name DirBlurWrapper22 xpos -1965 ypos 11272 disable {{parent.Flare77.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset -0.2 radius {0 26.23 37.09} size_mult 2 anamorph 4 ring_color {0 0.01600027084 1} inner_color {0 0.8500001431 1} outer_falloff 0.75 inner_falloff 2 chroma_spread 0.005 vis_in 0.9 vis_mask -rgba.alpha corners 4 flattening 2.4 sharpness 0.53 corners_angle 48 asym_falloff 0.72 asym_angle 116 mult_offset 8 mult_size -0.1 mult_color 0.6 mult_brightness -0.72 mult_visibility -0.18 name Flare77 label Pieces xpos -1786 ypos 11033 disable {{"parent.lensPieceLinesPicker == 4 ? 0 : 1"}} } Blur { size 4.8 name Blur130 xpos -1786 ypos 11144 disable {{parent.Flare77.disable}} } Transform { translate {268 0} center {986 506} black_outside false name Transform3 xpos -1786 ypos 11182 disable {{parent.Flare77.disable}} } DirBlurWrapper { BlurType linear BlurLength 7 BlurAngle 180 maskChannelMask none name DirBlurWrapper19 xpos -1786 ypos 11208 disable {{parent.Flare77.disable}} } DirBlurWrapper { BlurType linear BlurLength 15 BlurAngle 90 maskChannelMask none name DirBlurWrapper20 xpos -1786 ypos 11246 disable {{parent.Flare77.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.3 radius {0 26.23 37.09} anamorph 3 ring_color {0 0.01600027084 1} inner_color {0 0.8500001431 1} outer_falloff 0.75 inner_falloff 2 chroma_spread 0.005 vis_in 0.9 vis_mask -rgba.alpha corners 4 flattening 2.4 sharpness 0.57 corners_angle 48 asym_falloff 0.72 asym_angle 116 mult_offset 8 mult_size -0.1 mult_color 0.6 mult_brightness -0.72 mult_visibility -0.18 name Flare79 label Pieces xpos -1608 ypos 11148 disable {{parent.Flare77.disable}} } Blur { size 4.8 name Blur129 xpos -1608 ypos 11186 disable {{parent.Flare77.disable}} } Transform { translate {98 38} center {986 506} name Transform6 xpos -1608 ypos 11224 disable {{parent.Flare77.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge199 xpos -1608 ypos 11252 disable {{parent.Flare77.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge200 xpos -1608 ypos 11278 disable {{parent.Flare77.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge201 xpos -1608 ypos 11323 disable {{parent.Flare77.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge202 xpos -1608 ypos 11357 disable {{parent.Flare77.disable}} } Dot { name Dot155 xpos -1574 ypos 11531 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 1 radius {111.1 263.38 292.18} size_mult {{(parent.flareCoreSize)+2.4}} anamorph 1.01 inner_color 0 outer_falloff 0.78 inner_falloff 10 brightness 0.42 vis_out 1.04 corners 4 flattening 0.8 sharpness 1 corners_angle 45 name Flare189 xpos -2503 ypos 10505 disable {{parent.Flare215.disable}} } Transform { center {960 540} black_outside false name Transform58 xpos -2503 ypos 10531 disable {{parent.Flare215.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 1 radius {325.16 366.98 381.31} size_mult {{(parent.flareCoreSize)+2.4}} anamorph 1.01 inner_color 0 outer_falloff 0.7 inner_falloff 6 brightness 0.42 vis_out 1.04 corners 4 flattening 0.8 sharpness 1 corners_angle 45 name Flare190 xpos -2503 ypos 10455 disable {{parent.Flare215.disable}} } Transform { center {960 540} black_outside false name Transform59 xpos -2503 ypos 10481 disable {{parent.Flare215.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 1 radius {234.8 463.99 500} size_mult {{(parent.flareCoreSize)}} anamorph 0.96 ring_color 0.379197 inner_color 0 outer_falloff 0.13 inner_falloff 10 brightness 2 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare191 xpos -2374 ypos 10411 disable {{parent.Flare215.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform60 xpos -2374 ypos 10437 disable {{parent.Flare215.disable}} } Merge2 { inputs 2 operation screen name Merge143 xpos -2374 ypos 10481 disable {{parent.Flare215.disable}} } Merge2 { inputs 2 operation plus name Merge160 xpos -2374 ypos 10531 disable {{parent.Flare215.disable}} } set N9823e400 [stack 0] Shuffle { green red blue red alpha red name Shuffle21 xpos -2374 ypos 10557 } push $N9823e400 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 1 radius {1.42 1.42 34.14} size_mult {{(parent.flareCoreSize)+9}} anamorph 15 inner_color 0 outer_falloff 0.9 chroma_spread 0.012 chroma_shift -3.4 vis_out 1 name Flare192 xpos -2230 ypos 10438 disable {{parent.Flare215.disable}} } Grade { inputs 1+1 white 1.7 multiply 2.5 maskChannelMask rgba.red name Grade78 xpos -2230 ypos 10531 disable {{parent.Flare215.disable}} } Merge2 { inputs 2 operation mask maskChannelMask none name Merge161 xpos -2230 ypos 10557 } DirBlurWrapper { BlurType linear BlurCenter {{parent.flarePos.x} {parent.flarePos.y}} BlurLength 47 BlurAngle 0 maskChannelMask none name DirBlurWrapper3 xpos -2230 ypos 10583 disable {{parent.Flare215.disable}} } Grade { whitepoint 0.25 gamma 0.295 maskChannelMask none name Grade79 xpos -2230 ypos 10621 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 1 radius {71.04 85.24 93.76} size_mult {{(parent.flareCoreSize)+2.4}} anamorph 1.01 inner_color 0 outer_falloff 0.14 inner_falloff 6 brightness 0.42 vis_out 1.04 corners 4 flattening 0.8 sharpness 1 corners_angle 45 name Flare193 xpos -2368 ypos 10276 disable {{parent.Flare215.disable}} } Transform { center {960 540} black_outside false name Transform61 xpos -2368 ypos 10302 disable {{parent.Flare215.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 1 radius {107.03 167.62 203.63} size_mult {{(parent.flareCoreSize)}} anamorph 1.06 ring_color 0.379197 inner_color 0 outer_falloff 0.13 inner_falloff 10 brightness 2 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare194 xpos -2239 ypos 10232 disable {{parent.Flare215.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform62 xpos -2239 ypos 10258 disable {{parent.Flare215.disable}} } Merge2 { inputs 2 operation screen name Merge162 xpos -2239 ypos 10302 disable {{parent.Flare215.disable}} } set N981ba800 [stack 0] Shuffle { green red blue red alpha red name Shuffle22 xpos -2239 ypos 10350 disable {{parent.Flare215.disable}} } push $N981ba800 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 1 radius {0 0 32.72} size_mult {{(parent.flareCoreSize)+9}} anamorph 10 inner_color 0 outer_falloff 0.9 chroma_spread 0.012 chroma_shift -3.4 vis_out 1 name Flare195 xpos -2095 ypos 10230 disable {{parent.Flare215.disable}} } Grade { inputs 1+1 white 1.7 multiply 2.5 maskChannelMask rgba.red name Grade80 xpos -2095 ypos 10302 disable {{parent.Flare215.disable}} } Merge2 { inputs 2 operation mask maskChannelMask none name Merge163 xpos -2095 ypos 10350 } DirBlurWrapper { BlurType linear BlurCenter {{parent.flarePos.x} {parent.flarePos.y}} BlurLength 47 BlurAngle 0 maskChannelMask none name DirBlurWrapper10 xpos -2095 ypos 10376 disable {{parent.Flare215.disable}} } Grade { whitepoint 0.25 gamma 0.295 maskChannelMask none name Grade81 xpos -2095 ypos 10442 } Merge2 { inputs 2 operation screen name Merge164 xpos -2095 ypos 10621 } Blur { size {0 20} name Blur101 xpos -2095 ypos 10647 } Dot { name Dot110 xpos -2061 ypos 10694 } Dot { name Dot111 xpos -1823 ypos 10694 } set N98133800 [stack 0] push $N98133800 Transform { scale {2.2 1} center {{parent.flarePos.x} {parent.flarePos.y}} name Transform81 xpos -1680 ypos 10690 disable {{parent.Flare215.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.45 radius {198.59 208.53 221.32} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.135 inner_falloff 5.8 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare216 xpos -2034 ypos 10090 disable {{parent.Flare215.disable}} } Transform { translate {60 0} center {960 540} black_outside false name Transform75 xpos -2034 ypos 10116 disable {{parent.Flare215.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.65 radius {119.99 149.82 164.1} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.24 inner_falloff 10 brightness 0.42 vis_out 1.04 corners 4 flattening 0.9 sharpness 1 corners_angle 45 name Flare217 xpos -1942 ypos 10071 disable {{parent.Flare215.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.55 radius {71.04 85.24 96.6} size_mult {{(parent.flareCoreSize)+2.4}} anamorph 1.01 inner_color 0 outer_falloff 0.54 inner_falloff 0.36 brightness 0.42 vis_out 1.04 corners 4 flattening 0.8 sharpness 1 corners_angle 45 name Flare218 xpos -1940 ypos 10007 disable {{parent.Flare215.disable}} } Transform { center {960 540} black_outside false name Transform76 xpos -1940 ypos 10033 disable {{parent.Flare215.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.55 radius {137.79 167.62 182.32} size_mult {{(parent.flareCoreSize)}} anamorph 0.96 ring_color 0.379197 inner_color 0 brightness 2 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare219 xpos -1811 ypos 9963 disable {{parent.Flare215.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform77 xpos -1811 ypos 9989 disable {{parent.Flare215.disable}} } Merge2 { inputs 2 operation screen name Merge183 xpos -1811 ypos 10033 disable {{parent.Flare215.disable}} } Merge2 { inputs 2 operation screen name Merge184 xpos -1811 ypos 10071 disable {{parent.Flare215.disable}} } set Na0c93c00 [stack 0] Merge2 { inputs 2 operation screen mix 0.6 name Merge185 xpos -1811 ypos 10116 disable {{parent.Flare215.disable}} } Shuffle { green red blue red alpha red name Shuffle25 xpos -1811 ypos 10185 } push $Na0c93c00 Flare { inputs 0 position {{parent.flarePos.x x11 1501} {parent.flarePos.y x11 550}} offset 0.55 radius {0 0 32.72} size_mult {{(parent.flareCoreSize)+9}} anamorph 10 inner_color 0 outer_falloff 0.9 chroma_spread 0.024 chroma_shift 2.2 chroma_shift_angle 74 vis_out 1 name Flare220 xpos -1667 ypos 9959 disable {{parent.Flare215.disable}} } Blur { size {0 40} name Blur102 xpos -1667 ypos 9985 disable {{parent.Flare215.disable}} } Grade { inputs 1+1 white 1.7 multiply 2.5 maskChannelMask rgba.red name Grade82 xpos -1667 ypos 10071 disable {{parent.Flare215.disable}} } Merge2 { inputs 2 operation mask maskChannelMask none name Merge186 xpos -1667 ypos 10185 } Blur { size {0 10} name Blur103 xpos -1667 ypos 10234 } Transform { scale {1.4 1} center {{parent.flarePos.x} {parent.flarePos.y}} name Transform78 xpos -1485 ypos 10240 disable {{parent.Flare215.disable}} } DirBlurWrapper { BlurType linear BlurCenter {{parent.flarePos.x} {parent.flarePos.y}} BlurLength 10 maskChannelMask none name DirBlurWrapper14 xpos -1485 ypos 10266 disable {{parent.Flare215.disable}} } Sharpen { amount 20 maskChannelMask none name Sharpen4 xpos -1485 ypos 10304 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {262.81 269.91 269.91} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare196 xpos -2484 ypos 9662 disable {{parent.Flare215.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform63 xpos -2484 ypos 9688 disable {{parent.Flare215.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {156.26 160.52 261.37} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare197 xpos -2489 ypos 9629 disable {{parent.Flare215.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {83.82 92.34 126.43} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare198 xpos -2364 ypos 9562 disable {{parent.Flare215.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform64 xpos -2364 ypos 9588 disable {{parent.Flare215.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge165 xpos -2364 ypos 9629 disable {{parent.Flare215.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge166 xpos -2364 ypos 9688 disable {{parent.Flare215.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {282.69 289.79 377.86} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare199 xpos -2256 ypos 9636 disable {{parent.Flare215.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform65 xpos -2256 ypos 9662 disable {{parent.Flare215.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {181.84 198.88 218.76} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare200 xpos -2256 ypos 9576 disable {{parent.Flare215.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform66 xpos -2256 ypos 9602 disable {{parent.Flare215.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {117.91 129.27 161.94} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare201 xpos -2257 ypos 9528 disable {{parent.Flare215.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {42.92 42.92 104} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.23 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare202 xpos -2136 ypos 9461 disable {{parent.Flare215.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform67 xpos -2136 ypos 9487 disable {{parent.Flare215.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge167 xpos -2136 ypos 9528 disable {{parent.Flare215.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge168 xpos -2136 ypos 9602 disable {{parent.Flare215.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge169 xpos -2136 ypos 9662 disable {{parent.Flare215.disable}} } set Na0baa800 [stack 0] Merge2 { inputs 2 operation plus maskChannelMask none name Merge170 xpos -2136 ypos 9688 disable {{parent.Flare215.disable}} } Shuffle { green red blue red alpha red name Shuffle28 xpos -2136 ypos 9714 disable {{parent.Flare215.disable}} } push $Na0baa800 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {0 0 32.72} size_mult {{(parent.flareCoreSize)+4}} anamorph 8 inner_color 0 outer_falloff 0.9 chroma_spread 0.25 chroma_shift -10.4 chroma_shift_angle 42 vis_out 1 name Flare203 xpos -2007 ypos 9504 disable {{parent.Flare215.disable}} } Grade { inputs 1+1 white 4 multiply 4 maskChannelMask rgba.red name Grade83 xpos -2007 ypos 9662 } Merge2 { inputs 2 operation mask maskChannelMask none name Merge171 xpos -2007 ypos 9714 } Transform { translate {0 -20} scale {1.4 1} center {{parent.flarePos.x} {parent.flarePos.y}} name Transform80 xpos -1864 ypos 9714 disable {{parent.Flare215.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {181.75 193.14 214.74} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare209 xpos -1852 ypos 9592 disable {{parent.Flare215.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform71 xpos -1852 ypos 9618 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {243.04 247.3 357.63} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare210 xpos -1860 ypos 9559 disable {{parent.Flare215.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {33.01 61.88 106.14} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 3 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare211 xpos -1732 ypos 9492 disable {{parent.Flare215.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform72 xpos -1732 ypos 9518 } Merge2 { inputs 2 operation screen mix 0.6 name Merge177 xpos -1732 ypos 9559 } Merge2 { inputs 2 operation screen mix 0.6 name Merge178 xpos -1732 ypos 9618 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {191.78 198.88 210.24} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare212 xpos -1624 ypos 9547 disable {{parent.Flare215.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform73 xpos -1624 ypos 9573 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {105.13 116.49 174.73} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare213 xpos -1614 ypos 9514 disable {{parent.Flare215.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {33.02 44.38 86.99} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare214 xpos -1504 ypos 9447 disable {{parent.Flare215.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform74 xpos -1504 ypos 9473 } Merge2 { inputs 2 operation screen mix 0.6 name Merge179 xpos -1504 ypos 9514 } Merge2 { inputs 2 operation screen mix 0.6 name Merge180 xpos -1504 ypos 9573 } set Na0acb400 [stack 0] Merge2 { inputs 2 operation plus maskChannelMask none name Merge181 xpos -1504 ypos 9618 } Shuffle { green red blue red alpha red name Shuffle29 xpos -1504 ypos 9644 } push $Na0acb400 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {1.45 1.45 34.17} size_mult {{(parent.flareCoreSize)+4}} anamorph 10 inner_color 0 outer_falloff 0.9 chroma_spread 0.25 chroma_shift -10.4 chroma_shift_angle 42 vis_out 1 name Flare215 xpos -1375 ypos 9384 disable {{"parent.lensPieceLinesPicker == 3 ? 0 : 1"}} } Grade { inputs 1+1 white 1.7 multiply 2.5 maskChannelMask rgba.red name Grade84 xpos -1375 ypos 9573 } Merge2 { inputs 2 operation mask maskChannelMask none name Merge182 xpos -1375 ypos 9644 } Transform { scale {1.3 1} center {{parent.flarePos.x} {parent.flarePos.y}} name Transform79 xpos -1375 ypos 9670 disable {{parent.Flare215.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge176 xpos -1375 ypos 9714 } Blur { size {10 0} name Blur104 xpos -1375 ypos 9740 } Saturation { saturation 0 maskChannelMask none name Saturation34 xpos -1375 ypos 9778 } DirBlurWrapper { BlurType linear BlurCenter {{parent.flarePos.x} {parent.flarePos.y}} BlurLength 28 maskChannelMask none name DirBlurWrapper13 xpos -1375 ypos 9827 disable {{parent.Flare215.disable}} } DirBlurWrapper { BlurType linear BlurCenter {{parent.flarePos.x} {parent.flarePos.y}} BlurLength 38 BlurAngle 90 maskChannelMask none name DirBlurWrapper18 xpos -1375 ypos 9865 disable {{parent.Flare215.disable}} } Sharpen { amount 50 maskChannelMask none name Sharpen6 xpos -1375 ypos 9903 } Grade { whitepoint 0.4 maskChannelMask none name Grade85 xpos -1375 ypos 9941 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge187 xpos -1375 ypos 10310 disable {{parent.Flare215.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none mix 0.01 name Merge189 xpos -1375 ypos 10690 disable {{parent.Flare215.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none mix 0.008 name Merge190 xpos -1375 ypos 10745 disable {{parent.Flare215.disable}} } Grade { multiply 0.18 gamma 1.54 maskChannelMask none name Grade86 xpos -1375 ypos 10806 } Glow { tolerance 0.56 brightness 1.5 size 70 maskChannelMask none name Glow14 xpos -1375 ypos 10866 } Dot { name Dot158 xpos -1341 ypos 10919 } Dot { name Dot118 xpos -2665 ypos 10919 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{2.15+(parent.lensPieceLinesOffset)}} radius {0 3.97 209.04} size_mult {{(parent.flareCoreSize)}} anamorph 11.52 ring_color 3 inner_color 1 outer_falloff 1.7 chroma_spread 0.02 brightness 0.095 vis_mask -rgba.alpha name Flare80 xpos -3713 ypos 11772 disable {{parent.Flare89.disable}} } Blur { size 16 name Blur105 xpos -3713 ypos 11798 disable {{parent.Flare89.disable}} } Blur { size 1 name Blur106 xpos -3713 ypos 11836 disable {{parent.Flare89.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{(parent.lensPieceLinesOffset)+2.15}} radius {0 3.97 72.49} size_mult {{(parent.flareCoreSize)+1.8}} anamorph 11.52 ring_color 0.5 inner_color 1 outer_falloff 1.7 chroma_spread 0.02 brightness 0.095 vis_mask -rgba.alpha name Flare89 xpos -3592 ypos 11641 disable {{"parent.lensPieceLinesPicker == 2 ? 0 : 1"}} } Blur { size 3 name Blur107 xpos -3592 ypos 11667 disable {{parent.Flare89.disable}} } Glow { brightness 0.5 name Glow15 xpos -3592 ypos 11707 disable {{parent.Flare89.disable}} } Grade { multiply 10 name Grade87 xpos -3592 ypos 11733 disable {{parent.Flare89.disable}} } Grade { multiply {1 1 1 0} name Grade88 xpos -3592 ypos 11759 disable {{parent.Flare89.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none mix 0.07 name Merge144 xpos -3592 ypos 11842 disable {{parent.Flare89.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 1.2"}} radius {161.95 176.16 187.52} size_mult {{(parent.flareCoreSize)+2.4}} anamorph 1.01 inner_color 0 outer_falloff 0.78 inner_falloff 10 brightness 0.42 vis_out 1.04 corners 4 flattening 0.8 sharpness 1 corners_angle 45 name Flare170 xpos -4819 ypos 11144 disable {{parent.Flare166.disable}} } Transform { center {960 540} black_outside false name Transform7 xpos -4819 ypos 11170 disable {{parent.Flare166.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 1.1"}} radius {143.48 157.68 166.2} size_mult {{(parent.flareCoreSize)+2.4}} anamorph 1.01 inner_color 0 outer_falloff 0.7 inner_falloff 6 brightness 0.42 vis_out 1.04 corners 4 flattening 0.8 sharpness 1 corners_angle 45 name Flare121 xpos -4819 ypos 11094 disable {{parent.Flare166.disable}} } Transform { center {960 540} black_outside false name Transform43 xpos -4819 ypos 11120 disable {{parent.Flare166.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 1.1"}} radius {291.2 311.09 347.1} size_mult {{(parent.flareCoreSize)}} anamorph 0.96 ring_color 0.379197 inner_color 0 outer_falloff 0.13 inner_falloff 10 brightness 2 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare168 xpos -4690 ypos 11050 disable {{parent.Flare166.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform44 xpos -4690 ypos 11076 } Merge2 { inputs 2 operation screen name Merge145 xpos -4690 ypos 11120 } Merge2 { inputs 2 operation plus name Merge146 xpos -4690 ypos 11170 } set Na0953c00 [stack 0] Shuffle { green red blue red alpha red name Shuffle30 xpos -4690 ypos 11196 } push $Na0953c00 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 1.1"}} radius {1.42 1.42 34.14} size_mult {{(parent.flareCoreSize)+9}} anamorph 25 inner_color 0 outer_falloff 0.9 chroma_spread 0.012 chroma_shift -3.4 vis_out 1 name Flare169 xpos -4546 ypos 11044 disable {{parent.Flare166.disable}} } Grade { inputs 1+1 white 1.7 multiply 2.5 maskChannelMask rgba.red name Grade89 xpos -4546 ypos 11170 } Merge2 { inputs 2 operation mask maskChannelMask none name Merge147 xpos -4546 ypos 11196 } DirBlurWrapper { BlurType linear BlurCenter {{parent.flarePos.x} {parent.flarePos.y}} BlurLength 47 BlurAngle 0 maskChannelMask none name DirBlurWrapper17 xpos -4546 ypos 11222 disable {{parent.Flare166.disable}} } Grade { whitepoint 0.25 gamma 0.295 maskChannelMask none name Grade90 xpos -4546 ypos 11260 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 0.7"}} radius {71.04 85.24 93.76} size_mult {{(parent.flareCoreSize)+2.4}} anamorph 1.01 inner_color 0 outer_falloff 0.14 inner_falloff 6 brightness 0.42 vis_out 1.04 corners 4 flattening 0.8 sharpness 1 corners_angle 45 name Flare151 xpos -4684 ypos 10915 disable {{parent.Flare166.disable}} } Transform { center {960 540} black_outside false name Transform45 xpos -4684 ypos 10941 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 0.7"}} radius {147.73 167.62 203.63} size_mult {{(parent.flareCoreSize)}} anamorph 0.96 ring_color 0.379197 inner_color 0 outer_falloff 0.13 inner_falloff 10 brightness 2 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare152 xpos -4555 ypos 10871 disable {{parent.Flare166.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform46 xpos -4555 ypos 10897 } Merge2 { inputs 2 operation screen name Merge148 xpos -4555 ypos 10941 } set Na0950400 [stack 0] Shuffle { green red blue red alpha red name Shuffle31 xpos -4555 ypos 10989 } push $Na0950400 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 0.7"}} radius {0 0 32.72} size_mult {{(parent.flareCoreSize)+9}} anamorph 25 inner_color 0 outer_falloff 0.9 chroma_spread 0.012 chroma_shift -3.4 vis_out 1 name Flare153 xpos -4411 ypos 10867 disable {{parent.Flare166.disable}} } Grade { inputs 1+1 white 1.7 multiply 2.5 maskChannelMask rgba.red name Grade91 xpos -4411 ypos 10941 } Merge2 { inputs 2 operation mask maskChannelMask none name Merge149 xpos -4411 ypos 10989 } DirBlurWrapper { BlurType linear BlurCenter {{parent.flarePos.x} {parent.flarePos.y}} BlurLength 47 BlurAngle 0 maskChannelMask none name DirBlurWrapper4 xpos -4411 ypos 11015 disable {{parent.Flare166.disable}} } Grade { whitepoint 0.25 gamma 0.295 maskChannelMask none name Grade92 xpos -4411 ypos 11081 } Merge2 { inputs 2 operation screen name Merge150 xpos -4411 ypos 11260 } Dot { name Dot149 xpos -4377 ypos 11333 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 2.08"}} radius {262.81 269.91 269.91} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare93 xpos -3730 ypos 11018 disable {{parent.Flare166.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform47 xpos -3730 ypos 11044 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 2.08"}} radius {156.26 160.52 261.37} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare94 xpos -3733 ypos 10985 disable {{parent.Flare166.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 2.08"}} radius {83.82 92.34 126.43} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare95 xpos -3610 ypos 10918 disable {{parent.Flare166.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform48 xpos -3610 ypos 10944 } Merge2 { inputs 2 operation screen mix 0.6 name Merge151 xpos -3610 ypos 10985 } Merge2 { inputs 2 operation screen mix 0.6 name Merge152 xpos -3610 ypos 11044 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 2.08"}} radius {282.69 289.79 377.86} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare120 xpos -3502 ypos 10992 disable {{parent.Flare166.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform49 xpos -3502 ypos 11018 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 2.08"}} radius {181.84 198.88 218.76} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare96 xpos -3502 ypos 10932 disable {{parent.Flare166.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform50 xpos -3502 ypos 10958 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 2.08"}} radius {117.91 129.27 161.94} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare118 xpos -3505 ypos 10884 disable {{parent.Flare166.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 2.08"}} radius {18.48 29.84 90.92} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare119 xpos -3382 ypos 10817 disable {{parent.Flare166.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform51 xpos -3382 ypos 10843 } Merge2 { inputs 2 operation screen mix 0.6 name Merge153 xpos -3382 ypos 10884 } Merge2 { inputs 2 operation screen mix 0.6 name Merge154 xpos -3382 ypos 10958 } Merge2 { inputs 2 operation screen mix 0.6 name Merge155 xpos -3382 ypos 11018 } set Na4213400 [stack 0] Merge2 { inputs 2 operation plus maskChannelMask none name Merge195 xpos -3382 ypos 11044 } Shuffle { green red blue red alpha red name Shuffle32 xpos -3382 ypos 11070 } push $Na4213400 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 2.08"}} radius {0 0 32.72} size_mult {{(parent.flareCoreSize)+4}} anamorph 25 inner_color 0 outer_falloff 0.9 chroma_spread 0.25 chroma_shift -10.4 chroma_shift_angle 42 vis_out 1 name Flare123 xpos -3254 ypos 10859 disable {{parent.Flare166.disable}} } Grade { inputs 1+1 white 1.7 multiply 2.5 maskChannelMask rgba.red name Grade93 xpos -3253 ypos 11018 } Merge2 { inputs 2 operation mask maskChannelMask none name Merge197 xpos -3253 ypos 11070 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{(parent.lensPieceLinesOffset)}} radius {149.17 159.11 166.22} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.135 inner_falloff 5.8 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare124 xpos -4213 ypos 10950 disable {{parent.Flare166.disable}} } Transform { translate {60 0} center {960 540} black_outside false name Transform52 xpos -4213 ypos 10976 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{(parent.lensPieceLinesOffset)}} radius {90.92 120.75 130.7} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.24 inner_falloff 10 brightness 0.42 vis_out 1.04 corners 4 flattening 0.9 sharpness 1 corners_angle 45 name Flare125 xpos -4130 ypos 10931 disable {{parent.Flare166.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{(parent.lensPieceLinesOffset)}} radius {71.04 85.24 113.65} size_mult {{(parent.flareCoreSize)+2.4}} anamorph 1.01 inner_color 0 outer_falloff 0.54 inner_falloff 0.36 brightness 0.42 vis_out 1.04 corners 4 flattening 0.8 sharpness 1 corners_angle 45 name Flare127 xpos -4119 ypos 10867 disable {{parent.Flare166.disable}} } Transform { center {960 540} black_outside false name Transform53 xpos -4119 ypos 10893 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{(parent.lensPieceLinesOffset)}} radius {82.39 112.22 182.32} size_mult {{(parent.flareCoreSize)}} anamorph 0.96 ring_color 0.379197 inner_color 0 brightness 2 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare128 xpos -3990 ypos 10823 disable {{parent.Flare166.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform54 xpos -3990 ypos 10849 } Merge2 { inputs 2 operation screen name Merge198 xpos -3990 ypos 10893 } Merge2 { inputs 2 operation screen name Merge220 xpos -3990 ypos 10931 } set Na419e400 [stack 0] Merge2 { inputs 2 operation screen mix 0.6 name Merge221 xpos -3990 ypos 10976 } Shuffle { green red blue red alpha red name Shuffle33 xpos -3990 ypos 11077 } push $Na419e400 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{(parent.lensPieceLinesOffset)}} radius {0 0 32.72} size_mult {{(parent.flareCoreSize)+9}} anamorph 25 inner_color 0 outer_falloff 0.9 chroma_spread 0.024 chroma_shift 2.2 chroma_shift_angle 74 vis_out 1 name Flare130 xpos -3846 ypos 10820 disable {{parent.Flare166.disable}} } Grade { inputs 1+1 white 1.7 multiply 2.5 maskChannelMask rgba.red name Grade94 xpos -3846 ypos 10931 } Merge2 { inputs 2 operation mask maskChannelMask none mix 0.95 name Merge222 xpos -3846 ypos 11077 } Blur { size {0 10} name Blur156 xpos -3846 ypos 11151 } Merge2 { inputs 2 operation plus maskChannelMask none mix 0.15 name Merge285 xpos -3253 ypos 11157 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 2.08"}} radius {186.11 196.05 204.57} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare154 xpos -3633 ypos 10670 disable {{parent.Flare166.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform55 xpos -3633 ypos 10696 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 2.08"}} radius {112.23 116.49 184.67} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare155 xpos -3639 ypos 10637 disable {{parent.Flare166.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 2.08"}} radius {18.48 27 61.09} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare156 xpos -3513 ypos 10570 disable {{parent.Flare166.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform82 xpos -3513 ypos 10596 } Merge2 { inputs 2 operation screen mix 0.6 name Merge286 xpos -3513 ypos 10637 } Merge2 { inputs 2 operation screen mix 0.6 name Merge288 xpos -3513 ypos 10696 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 2.08"}} radius {191.78 198.88 210.24} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare158 xpos -3405 ypos 10625 disable {{parent.Flare166.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform93 xpos -3405 ypos 10651 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 2.08"}} radius {105.13 116.49 174.73} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare159 xpos -3395 ypos 10592 disable {{parent.Flare166.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 2.08"}} radius {18.48 29.84 72.45} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare160 xpos -3285 ypos 10525 disable {{parent.Flare166.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform94 xpos -3285 ypos 10551 } Merge2 { inputs 2 operation screen mix 0.6 name Merge289 xpos -3285 ypos 10592 } Merge2 { inputs 2 operation screen mix 0.6 name Merge290 xpos -3285 ypos 10651 } set Na40aec00 [stack 0] Merge2 { inputs 2 operation plus maskChannelMask none name Merge291 xpos -3285 ypos 10696 } Shuffle { green red blue red alpha red name Shuffle34 xpos -3285 ypos 10722 } push $Na40aec00 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) + 2.08"}} radius {0 0 32.72} size_mult {{(parent.flareCoreSize)+4}} anamorph 25 inner_color 0 outer_falloff 0.9 chroma_spread 0.25 chroma_shift -10.4 chroma_shift_angle 42 vis_out 1 name Flare161 xpos -3156 ypos 10517 disable {{parent.Flare166.disable}} } Grade { inputs 1+1 white 1.7 multiply 2.5 maskChannelMask rgba.red name Grade95 xpos -3156 ypos 10651 } Merge2 { inputs 2 operation mask maskChannelMask none mix 0.8 name Merge292 xpos -3156 ypos 10722 disable {{parent.Flare166.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) - 0.35"}} radius {149.17 159.11 183.53} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.135 inner_falloff 5.8 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare162 xpos -4232 ypos 10602 disable {{parent.Flare166.disable}} } Transform { translate {60 0} center {960 540} black_outside false name Transform95 xpos -4232 ypos 10628 } Blur { size 10.5 name Blur157 xpos -4232 ypos 10654 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) - 0.35"}} radius {90.92 120.75 132.12} size_mult {{(parent.flareCoreSize)+1.6}} anamorph 2 inner_color 0 outer_falloff 0.24 inner_falloff 10 brightness 0.42 vis_out 1.04 corners 4 flattening 0.9 sharpness 1 corners_angle 45 name Flare163 xpos -4125 ypos 10583 disable {{parent.Flare166.disable}} } Blur { size 10.5 name Blur158 xpos -4125 ypos 10609 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) - 0.35"}} radius {71.04 85.24 96.6} size_mult {{(parent.flareCoreSize)+2.4}} anamorph 1.01 inner_color 0 outer_falloff 0.54 inner_falloff 0.36 brightness 0.42 vis_out 1.04 corners 4 flattening 0.8 sharpness 1 corners_angle 45 name Flare164 xpos -4022 ypos 10551 disable {{parent.Flare166.disable}} } Transform { center {960 540} black_outside false name Transform102 xpos -4022 ypos 10577 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) - 0.35"}} radius {137.79 167.62 182.32} size_mult {{(parent.flareCoreSize)}} anamorph 0.96 ring_color 0.379197 inner_color 0 brightness 2 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare165 xpos -3893 ypos 10507 disable {{parent.Flare166.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform104 xpos -3893 ypos 10533 } Merge2 { inputs 2 operation screen name Merge293 xpos -3893 ypos 10577 } Merge2 { inputs 2 operation screen name Merge294 xpos -3893 ypos 10615 } set Na4041400 [stack 0] Merge2 { inputs 2 operation screen mix 0.6 name Merge295 xpos -3893 ypos 10660 } Shuffle { green red blue red alpha red name Shuffle35 xpos -3893 ypos 10729 } push $Na4041400 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"(parent.lensPieceLinesOffset) - 0.25"}} radius {0 0 32.72} size_mult {{(parent.flareCoreSize)+9}} anamorph 25 inner_color 0 outer_falloff 0.9 chroma_spread 0.024 chroma_shift 2.2 chroma_shift_angle 74 vis_out 1 name Flare166 xpos -3749 ypos 10476 disable {{"parent.lensPieceLinesPicker == 1 ? 0 : 1"}} } Grade { inputs 1+1 white 1.7 multiply 2.5 maskChannelMask rgba.red name Grade96 xpos -3749 ypos 10615 } Merge2 { inputs 2 operation mask maskChannelMask none name Merge296 xpos -3749 ypos 10729 } Blur { size {0 10} name Blur161 xpos -3749 ypos 10776 } Merge2 { inputs 2 operation plus maskChannelMask none mix 0.15 name Merge297 xpos -3156 ypos 10782 disable {{parent.Flare166.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none mix 0.6 name Merge298 xpos -3156 ypos 11214 disable {{parent.Flare166.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none mix 0.07 name Merge299 xpos -3156 ypos 11329 disable {{parent.Flare166.disable}} } Glow { tolerance 0.56 brightness 1.5 size 70 maskChannelMask none name Glow28 xpos -3156 ypos 11355 disable {{parent.Flare166.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"1.7 + parent.lensPieceLinesOffset"}} radius {53.47 253.76 500} size_mult {{"(parent.flareCoreSize) + 1"}} anamorph 1.07 ring_color 0.379197 inner_color 0 outer_falloff 0.13 inner_falloff 10 brightness 2 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare133 xpos -5036 ypos 9835 disable {{parent.Flare134.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform107 xpos -5036 ypos 9861 } Shuffle { green red blue red alpha red name Shuffle36 xpos -5036 ypos 9921 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"2 + parent.lensPieceLinesOffset"}} radius {0 0 32.72} size_mult {{"(parent.flareCoreSize) + 9"}} anamorph 25 inner_color 0 outer_falloff 0.9 chroma_spread 0.012 chroma_shift -3.4 vis_out 1 name Flare134 xpos -4891 ypos 9688 disable {{"parent.lensPieceLinesPicker == 0 ? 0 : 1"}} } Blur { size {0 90} name Blur163 xpos -4891 ypos 9714 } Grade { blackpoint 0.03 whitepoint 0.035 gamma 2.9 maskChannelMask none name Grade97 xpos -4891 ypos 9752 } Merge2 { inputs 2 operation mask maskChannelMask none name Merge300 xpos -4891 ypos 9921 } Blur { size 14 name Blur164 xpos -4891 ypos 9999 } Blur { size {154 0} name Blur165 xpos -4891 ypos 10037 } Dot { name Dot150 xpos -4857 ypos 10095 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"0.1 + parent.lensPieceLinesOffset"}} radius {46.89 62.51 69.61} size_mult {{"(parent.flareCoreSize) + 2.4"}} anamorph 1.01 inner_color 0 outer_falloff 0.14 inner_falloff 6 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare135 xpos -4737 ypos 9868 disable {{parent.Flare134.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"0.1 + parent.lensPieceLinesOffset"}} radius {102.28 106.54 129.28} size_mult {{"(parent.flareCoreSize) + 3"}} anamorph 1.56 inner_color 0 outer_falloff 0.14 inner_falloff 6 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 28 name Flare138 xpos -4517 ypos 9824 disable {{parent.Flare134.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"0.2 + parent.lensPieceLinesOffset"}} radius {89.5 106.54 117.91} size_mult {{"(parent.flareCoreSize) "}} anamorph 1.01 inner_color 0 outer_falloff 0.14 inner_falloff 6 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare139 xpos -4737 ypos 9789 disable {{parent.Flare134.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"0.2 + parent.lensPieceLinesOffset"}} radius {147.73 167.62 185.16} size_mult {{"(parent.flareCoreSize) "}} anamorph 0.96 ring_color 0.379197 inner_color 0 outer_falloff 0.13 inner_falloff 10 brightness 2 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare140 xpos -4627 ypos 9711 disable {{parent.Flare134.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform108 xpos -4627 ypos 9737 } Merge2 { inputs 2 operation screen name Merge301 xpos -4627 ypos 9789 } Merge2 { inputs 2 operation screen name Merge302 xpos -4627 ypos 9824 } Merge2 { inputs 2 operation screen name Merge303 xpos -4627 ypos 9868 } set Na3eebc00 [stack 0] Dot { name Dot151 xpos -4593 ypos 9904 } set Na3eeb800 [stack 0] Shuffle { green red blue red alpha red name Shuffle37 xpos -4627 ypos 9936 } push $Na3eebc00 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"0.1 + parent.lensPieceLinesOffset"}} radius {0 0 32.72} size_mult {{"(parent.flareCoreSize) + 9"}} anamorph 25 inner_color 0 outer_falloff 0.9 chroma_spread 0.012 chroma_shift -3.4 vis_out 1 name Flare141 xpos -4398 ypos 9704 disable {{parent.Flare134.disable}} } Grade { inputs 1+1 white 1.7 multiply 2.5 maskChannelMask rgba.red name Grade98 xpos -4398 ypos 9868 } Merge2 { inputs 2 operation mask maskChannelMask none name Merge304 xpos -4398 ypos 9936 } Blur { size 14 name Blur166 xpos -4398 ypos 10014 } Merge2 { inputs 2 operation plus maskChannelMask none mix 0.07 name Merge305 xpos -4398 ypos 10091 } Dot { name Dot152 xpos -4364 ypos 10167 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{parent.lensPieceLinesOffset}} radius {0 89.49 500} size_mult {{"(parent.flareCoreSize) + 4"}} anamorph 1.03 ring_color 0.74 inner_color 1 outer_falloff 10 inner_falloff 5.4 chroma_shift_angle 42 vis_out 1 name Flare142 xpos -3988 ypos 9805 disable {{parent.Flare134.disable}} } Blur { size 1100 name Blur167 xpos -3988 ypos 9831 disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} } Flare { inputs 0 position {{parent.flarePos.x x50 488} {parent.flarePos.y x50 984}} offset {{"1.19 + parent.lensPieceLinesOffset"}} radius {0 0 38.4} size_mult {{"(parent.flareCoreSize) + 2"}} anamorph 20 inner_color 0 outer_falloff 0.9 chroma_shift -3.4 vis_out 1 name Flare143 xpos -4235 ypos 9748 disable {{parent.Flare134.disable}} } Transform { translate {0 16} center {960 540} name Transform109 xpos -4235 ypos 9774 disable {{parent.Flare134.disable}} } Flare { inputs 0 position {{parent.flarePos.x x50 488} {parent.flarePos.y x50 984}} offset {{"1.16 + parent.lensPieceLinesOffset"}} radius {0 0 32.72} size_mult {{"(parent.flareCoreSize) + 4"}} anamorph 14 inner_color 0 outer_falloff 0.9 chroma_shift -3.4 vis_out 1 name Flare144 xpos -4116 ypos 9713 disable {{parent.Flare134.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge306 xpos -4116 ypos 9774 disable {{parent.Flare134.disable}} } Merge2 { inputs 2 operation mask Achannels {rgba.red rgba.green rgba.blue rgba.red} maskChannelMask none name Merge307 xpos -4116 ypos 9837 disable {{parent.Flare134.disable}} } Dot { name Dot153 xpos -4082 ypos 10098 } push $Na3eeb800 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"0.7 + parent.lensPieceLinesOffset"}} radius {38.37 46.89 113.66} size_mult {{"(parent.flareCoreSize) + 1.6"}} anamorph 2 inner_color 0 outer_falloff 0.48 inner_falloff 1.2 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare146 xpos -3758 ypos 9838 disable {{parent.Flare134.disable}} } Transform { translate {60 0} center {960 540} black_outside false name Transform110 xpos -3758 ypos 9864 disable {{parent.Flare134.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"0.6 + parent.lensPieceLinesOffset"}} radius {0 46.89 139.22} size_mult {{"(parent.flareCoreSize) + 1.4"}} anamorph 1.01 inner_color 0 outer_falloff 0.39 inner_falloff 4.8 brightness 0.42 vis_out 1.04 corners 4 flattening 0.8 sharpness 1 corners_angle 45 name Flare147 xpos -3752 ypos 9755 disable {{parent.Flare134.disable}} } Transform { center {960 540} black_outside false name Transform111 xpos -3752 ypos 9781 disable {{parent.Flare134.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"0.6 + parent.lensPieceLinesOffset"}} radius {0 142.05 251.93} size_mult {{"(parent.flareCoreSize) + -0.1"}} anamorph 0.96 ring_color 0.379197 inner_color 0 outer_falloff 0.185 inner_falloff 7.8 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare148 xpos -3623 ypos 9686 disable {{parent.Flare134.disable}} } Transform { translate {50 0} center {960 540} black_outside false name Transform112 xpos -3623 ypos 9737 disable {{parent.Flare134.disable}} } Merge2 { inputs 2 operation screen name Merge308 xpos -3623 ypos 9781 disable {{parent.Flare134.disable}} } set N98823c00 [stack 0] Merge2 { inputs 2 operation screen mix 0.6 name Merge309 xpos -3623 ypos 9864 disable {{parent.Flare134.disable}} } Merge2 { inputs 2 operation plus name Merge310 xpos -3623 ypos 9900 disable {{parent.Flare134.disable}} } Shuffle { green red blue red alpha red name Shuffle38 xpos -3623 ypos 9933 disable {{parent.Flare134.disable}} } push $N98823c00 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"0.6 + parent.lensPieceLinesOffset"}} radius {0 0 32.72} size_mult {{"(parent.flareCoreSize) + 4"}} anamorph 25 inner_color 0 outer_falloff 0.9 chroma_spread 0.024 chroma_shift 2.2 chroma_shift_angle 74 vis_out 1 name Flare149 xpos -3479 ypos 9705 disable {{parent.Flare134.disable}} } Grade { inputs 1+1 white 1.7 multiply 2.5 maskChannelMask rgba.red name Grade99 xpos -3479 ypos 9781 disable {{parent.Flare134.disable}} } Merge2 { inputs 2 operation mask maskChannelMask none mix 0.8 name Merge311 xpos -3479 ypos 9933 disable {{parent.Flare134.disable}} } Blur { size {0 10} name Blur168 xpos -3479 ypos 10024 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"0.07 + parent.lensPieceLinesOffset"}} radius {213.1 234.4 322.47} size_mult {{"(parent.flareCoreSize) + 1.6"}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare150 xpos -3347 ypos 9848 disable {{parent.Flare134.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform113 xpos -3347 ypos 9874 disable {{parent.Flare134.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceLinesOffset + 0.07"}} radius {112.23 116.49 184.67} size_mult {{"(parent.flareCoreSize) + 1.6"}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare229 xpos -3347 ypos 9815 disable {{parent.Flare134.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceLinesOffset + 0.07"}} radius {18.48 27 62.51} size_mult {{"(parent.flareCoreSize) + 1.6"}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare231 xpos -3227 ypos 9748 disable {{parent.Flare134.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform114 xpos -3227 ypos 9774 disable {{parent.Flare134.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge312 xpos -3227 ypos 9815 disable {{parent.Flare134.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge313 xpos -3227 ypos 9874 disable {{parent.Flare134.disable}} } Grade { whitepoint 0.56 gamma 0.57 maskChannelMask none name Grade100 xpos -3227 ypos 9900 disable {{parent.Flare134.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceLinesOffset + 0.07"}} radius {126.44 198.88 241.49} size_mult {{"(parent.flareCoreSize) + 1.6"}} anamorph 2 inner_color 0 outer_falloff 1.15 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare232 xpos -3113 ypos 9829 disable {{parent.Flare134.disable}} } Transform { translate {-30 0} center {960 540} black_outside false name Transform115 xpos -3113 ypos 9855 disable {{parent.Flare134.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceLinesOffset + 0.07"}} radius {65.36 116.49 173.31} size_mult {{"(parent.flareCoreSize) + 1.6"}} anamorph 2 inner_color 0 outer_falloff 0.23 inner_falloff 0.41 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare237 xpos -3115 ypos 9796 disable {{parent.Flare134.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceLinesOffset + 0.07"}} radius {0 29.84 95.18} size_mult {{"(parent.flareCoreSize) + 1.6"}} anamorph 2 inner_color 0 outer_falloff 0.39 inner_falloff 1.15 brightness 0.42 vis_out 1.04 corners 4 flattening 1 sharpness 1 corners_angle 45 name Flare238 xpos -2993 ypos 9729 disable {{parent.Flare134.disable}} } Transform { translate {30 0} center {960 540} black_outside false name Transform116 xpos -2993 ypos 9755 disable {{parent.Flare134.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge314 xpos -2993 ypos 9796 disable {{parent.Flare134.disable}} } Merge2 { inputs 2 operation screen mix 0.6 name Merge315 xpos -2993 ypos 9855 disable {{parent.Flare134.disable}} } set N987b0400 [stack 0] Merge2 { inputs 2 operation plus maskChannelMask none name Merge316 xpos -2993 ypos 9900 disable {{parent.Flare134.disable}} } Shuffle { green red blue red alpha red name Shuffle39 xpos -2993 ypos 9926 disable {{parent.Flare134.disable}} } push $N987b0400 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceLinesOffset + 0.17"}} radius {0 0 38.4} size_mult {{"(parent.flareCoreSize) + 4"}} anamorph 25 ring_color 0.74 inner_color 0 outer_falloff 0.1 inner_falloff 5.4 chroma_spread 0.108 chroma_shift -9.8 chroma_shift_angle 42 vis_out 1 name Flare247 xpos -2864 ypos 9727 disable {{parent.Flare134.disable}} } Grade { inputs 1+1 white 1.7 multiply 2.5 maskChannelMask rgba.red name Grade101 xpos -2864 ypos 9855 } Merge2 { inputs 2 operation mask maskChannelMask none name Merge317 xpos -2864 ypos 9926 } Blur { size {5 7} name Blur169 xpos -2864 ypos 9952 } Grade { multiply 0.36 maskChannelMask none name Grade102 xpos -2864 ypos 9990 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge318 xpos -2864 ypos 10030 } Merge2 { inputs 2 operation plus maskChannelMask none mix 0.7 name Merge319 xpos -2864 ypos 10094 } Merge2 { inputs 2 operation plus maskChannelMask none mix 0.1 name Merge320 xpos -2864 ypos 10163 } Glow { tolerance 0.56 brightness 1.5 size 70 maskChannelMask none name Glow27 xpos -2864 ypos 10189 disable {{parent.Flare134.disable}} } Switch { inputs 7 which {{parent.lensPieceLinesPicker}} name lines xpos -2864 ypos 11842 } Dot { name Dot156 xpos -2830 ypos 11956 } Crop { box {0 0 {root.width} {root.height}} name Crop10 xpos -191 ypos 11952 } Clamp { name Clamp7 xpos -54 ypos 11946 } Grade { multiply {{parent.lensPieceLinesTint.r} {parent.lensPieceLinesTint.g} {parent.lensPieceLinesTint.b} 0} white_clamp true maskChannelMask none name grade4 xpos 146 ypos 11952 } Transform { scale {{parent.lensPieceLinesStretch} 1} center {{root.width/2} {root.height/2}} name Transform117 xpos 296 ypos 11952 } Group { name Static_Noise8 help "Adds synthetic grain. Push \"presets\" to get predefined types of grain, these are the correct size for 2K scans.\n\nYou can also adjust the sliders to match a sample piece of grain. Find a sample with a rather constant background, blur it to remove the grain, and use as input to this. View with a wipe in the viewer so you can make a match. It helps to view and match each of the red, green, blue seperately." tile_color 0x992620ff note_font "Bitstream Vera Sans" xpos 462 ypos 11953 dope_sheet true mapsize {0.15 0.15} addUserKnob {20 master_control l Master} addUserKnob {7 noise_intensity_global l Intensity R 0 2} noise_intensity_global 0.52 addUserKnob {7 rgb_size_multiplier l Size R 0 2} rgb_size_multiplier 1 addUserKnob {26 ""} addUserKnob {6 no_alpha l "no alpha?" t "Check this box if your image doesn't have an alpha and you cannot use another alpha channel.\n\n(Note: This WILL cause the grain to be more prevalent. So please compensate using the Noise Size and Noise Intensity controls above.)" +STARTLINE} no_alpha true addUserKnob {20 adv_controls l Advanced} addUserKnob {20 fractal_noise_size l "RGB Noise Size" n 1} fractal_noise_size 0 addUserKnob {14 red_size l r R 0 100} red_size 1.7 addUserKnob {14 green_size l g R 0 100} green_size 1.6 addUserKnob {14 blue_size l b R 0 100} blue_size 1.5 addUserKnob {20 endGroup n -1} addUserKnob {20 noise_irregularity l "RGB Noise Irregularity" n 1} noise_irregularity 0 addUserKnob {7 red_i l r} red_i 1 addUserKnob {7 green_i l g} green_i 0.75 addUserKnob {7 blue_i l b} blue_i 0.65 addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 noise_intensity l "RGB Noise Intensity" n 1} noise_intensity 0 addUserKnob {7 red_m l r t "Amount of grain to add to a white pixel"} red_m 0.2 addUserKnob {7 green_m l g} green_m 0.4 addUserKnob {7 blue_m l b} blue_m 0.6 addUserKnob {18 black t "Amount of grain to add everywhere"} black {0 0 0} addUserKnob {6 black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 minimum t "Minimum black level" R 0 0.01} minimum {0 0 0} addUserKnob {6 minimum_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {26 ""} addUserKnob {3 seed l Seed} seed 134 addUserKnob {32 reset l Reset T "knobs this \{rgb_size_multiplier 0 red_size 1.70 green_size 1.60 blue_size 1.50 red_i 1.00 green_i 0.75 blue_i 0.65 red_m 0.40 green_m 0.60 blue_m 1.65 black 0.00\}" +STARTLINE} } Input { inputs 0 name Input1 xpos 0 } set N986bb400 [stack 0] Noise { output {rgba.red -rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.red_size.w*(rgb_size_multiplier) i} {parent.red_size.h*(rgb_size_multiplier) i}} octaves 2 gamma 1 xrotate {{red_i*45 i}} yrotate {{red_i*45 i}} name red xpos 144 ypos -7 } Noise { output {-rgba.red rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.green_size.w*(rgb_size_multiplier) i} {parent.green_size.h*(rgb_size_multiplier) i}} zoffset 10 octaves 2 gamma 1 xrotate {{green_i*45 i}} yrotate {{green_i*45 i}} name green xpos 144 ypos 35 } Noise { output {-rgba.red -rgba.green rgba.blue -rgba.alpha} cliptype none replace true size {{parent.blue_size.w*(rgb_size_multiplier) i} {parent.blue_size.h*(rgb_size_multiplier) i}} zoffset 20 octaves 2 gamma 1 xrotate {{blue_i*45 i}} yrotate {{blue_i*45 i}} name blue xpos 144 ypos 77 } push $N986bb400 MergeExpression { inputs 2 expr0 max(minimum.r,r+(2*Ar-1)*(r*red_m*noise_intensity_global)) expr1 max(minimum.g,g+(2*Ag-1)*(g*green_m*noise_intensity_global)) expr2 max(minimum.b,b+(2*Ab-1)*(b*blue_m*noise_intensity_global)) name MergeExpression1 xpos 144 ypos 117 } set N986ba400 [stack 0] push $N986ba400 push $N986bb400 Copy { inputs 2 channels rgb maskChannelInput rgba.alpha name Copy1 xpos 0 ypos 105 disable {{parent.no_alpha i}} } Switch { inputs 2 which {{parent.no_alpha i}} name Switch1 xpos 144 ypos 171 } Output { name Output1 xpos 144 ypos 219 } end_group Dot { name Dot157 xpos 657 ypos 11956 } set N986b9800 [stack 0] Saturation { saturation 0 name Saturation35 xpos 623 ypos 12005 } push $N986b9800 Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy14 xpos 767 ypos 11946 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 1.4 radius {45.54 75.01 107.34} size_mult {{"parent.flareCoreSize + 3.8"}} ring_color {0.796096 1.00716 1.196} inner_color 0 outer_falloff 5.2 inner_falloff 5.6 chroma_spread -0.034 chroma_shift -5.2 chroma_shift_angle 58 chroma_shift_angle_add true brightness 0.09 vis_mask -rgba.alpha corners 4 sharpness 1 corners_angle 50 corner_angle_add true asym_multiplier 0 asym_falloff 20 asym_angle -350 asym_angle_add true name Flare205 label Source xpos 507 ypos 8471 disable {{parent.Flare207.disable}} } Blur { size 18.5 name Blur140 xpos 507 ypos 8509 disable {{parent.Flare207.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 1.4 radius {88.16 99.16 133.37} size_mult {{"parent.flareCoreSize + 3.8"}} ring_color {0.796096 1.00716 1.196} inner_color 0 outer_falloff 5.2 inner_falloff 5.6 chroma_spread -0.02 chroma_shift -5.2 chroma_shift_angle -54 chroma_shift_angle_add true brightness 0.21 vis_mask -rgba.alpha corners 4 sharpness 1 corners_angle 50 corner_angle_add true asym_multiplier 0 asym_falloff 14 asym_angle -350 asym_angle_add true name Flare206 label Source xpos 736 ypos 8408 disable {{parent.Flare207.disable}} } Blur { size 18.5 name Blur141 xpos 736 ypos 8446 disable {{parent.Flare207.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 1.4 radius {0 116.11 236.08} size_mult {{"parent.flareCoreSize + 3.8"}} ring_color {0.796096 1.00716 1.196} inner_color 0 outer_falloff 5.2 inner_falloff 5.6 chroma_spread 0.04 chroma_shift -1.8 chroma_shift_angle 58 chroma_shift_angle_add true brightness 0.21 vis_mask -rgba.alpha corners 4 sharpness 1 corners_angle 50 corner_angle_add true asym_multiplier 0 asym_falloff 14 asym_angle -350 asym_angle_add true name Flare207 label Source xpos 854 ypos 8365 disable {{"parent.lensPieceRingsPicker == 3 ? 0 : 1"}} } Blur { size 18.5 name Blur142 xpos 854 ypos 8403 disable {{parent.Flare207.disable}} } Merge2 { inputs 2 operation screen maskChannelMask none name Merge172 xpos 854 ypos 8452 disable {{parent.Flare207.disable}} } set N98636400 [stack 0] Merge2 { inputs 2 operation screen maskChannelMask none name Merge173 xpos 739 ypos 8515 disable {{parent.Flare207.disable}} } push $N98636400 Merge2 { inputs 2 operation screen maskChannelMask none name Merge240 xpos 854 ypos 8515 disable {{parent.Flare207.disable}} } Saturation { saturation 0.49 maskChannelMask none name Saturation31 xpos 854 ypos 8541 disable {{parent.Flare207.disable}} } Grade { multiply {0.9965000153 1 0.777872026 1} maskChannelMask none name Grade55 xpos 854 ypos 8567 disable {{parent.Flare207.disable}} } Dot { name Dot63 xpos 888 ypos 8692 } Flare { inputs 0 position {{parent.flarePos.x x100 300} {parent.flarePos.y x100 200}} offset 1.5 radius {44.5 105.21 120.49} size_mult {{parent.flareCoreSize}} ring_color {0.529843 0.670316 0.796} inner_color 0 outer_falloff 3.2 inner_falloff 5.6 chroma_spread 0.016 brightness 0.22 vis_mask -rgba.alpha flattening 0.15 sharpness 0.33 asym_multiplier 0 asym_falloff 2.65 asym_angle -40 name Flare67 label Source xpos 103 ypos 8424 disable {{"parent.lensPieceRingsPicker == 2 ? 0 : 1"}} } Blur { size 12 name Blur70 xpos 103 ypos 8462 disable {{parent.Flare67.disable}} } Flare { position {{parent.flarePos.x x100 300} {parent.flarePos.y x100 200}} offset 1.5 radius {65.44 126.15 141.43} size_mult {{parent.flareCoreSize}} ring_color {0.796096 1.00716 1.196} inner_color 0 outer_falloff 3.2 inner_falloff 5.6 chroma_spread 0.016 brightness 0.08 vis_mask -rgba.alpha flattening 0.15 sharpness 0.33 asym_multiplier 0 asym_falloff 3.4 asym_angle -40 name Flare69 label Source xpos 103 ypos 8500 disable {{parent.Flare67.disable}} } Grade { multiply 0.5 name Grade70 xpos 103 ypos 8538 disable {{parent.Flare67.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.7 radius {110.89 171.6 186.88} size_mult {{"parent.flareCoreSize + 1.6"}} ring_color {0.796096 1.00716 1.196} inner_color 0 outer_falloff 3.2 inner_falloff 5.6 chroma_spread 0.016 brightness 0.08 vis_mask -rgba.alpha flattening 0.15 sharpness 0.33 asym_multiplier 0 asym_falloff 3.4 asym_angle -40 name Flare122 label Source xpos -228 ypos 8500 disable {{"parent.lensPieceRingsPicker == 1 ? 0 : 1"}} } Grade { white {1.300000072 1 0.7000000477 1} multiply 0.3 name Grade56 xpos -228 ypos 8538 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.1 radius {0.93 0.93 55.11} size_mult {{(parent.flareCoreSize)-0.5}} ring_color 0.05 inner_color 0.04 outer_falloff {1 1 1} inner_falloff {1 1 1} chroma_spread 0.01 chroma_shift -2 chroma_shift_angle_add true brightness {1 1 1} vis_mask -rgba.alpha flattening 0.82 sharpness 0.73 corners_angle {{parent.lensPieceRingsRotation+5}} corner_angle_add true asym_multiplier 5 asym_angle 160 asym_angle_add true mult_num 2 mult_seed 6 mult_offset 1.6 mult_size 1 mult_color 0.3 mult_color_seed 77097 mult_brightness 6 mult_brightness_seed 75027 mult_visibility 0.32 mult_flattening -1 mult_flattening_seed 45204 mult_rotate 0.06 name Flare110 label Source xpos -904 ypos 8659 disable {{parent.Flare113.disable}} } Glow { brightness 3.42 maskChannelMask none name Glow24 xpos -904 ypos 8697 disable {{parent.Flare113.disable}} } set N985c1c00 [stack 0] Blur { size 65 name Blur94 xpos -904 ypos 8743 disable {{parent.Flare113.disable}} } set N985c1800 [stack 0] push $N985c1800 push $N985c1c00 push $N985c1c00 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.1 radius {45.54 75.01 107.34} size_mult {{(parent.flareCoreSize)+3.8}} ring_color {0.796096 1.00716 1.196} inner_color 0 outer_falloff 5.2 inner_falloff 5.6 chroma_spread -0.034 chroma_shift -5.2 chroma_shift_angle 58 chroma_shift_angle_add true brightness 0.09 vis_mask -rgba.alpha corners 4 flattening 1 sharpness 1 corners_angle {{parent.lensPieceRingsRotation+50}} corner_angle_add true asym_multiplier 0 asym_falloff 20 asym_angle {{parent.lensPieceRingsRotation-350}} asym_angle_add true name Flare226 label Source xpos -768 ypos 8591 disable {{parent.Flare113.disable}} } Blur { size 18.5 name Blur73 xpos -768 ypos 8629 disable {{parent.Flare113.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.1 radius {88.16 99.16 113.02} size_mult {{(parent.flareCoreSize)+3.8}} ring_color {0.796096 1.00716 1.196} inner_color 0 outer_falloff 5.2 inner_falloff 5.6 chroma_spread -0.034 chroma_shift -5.2 chroma_shift_angle 58 chroma_shift_angle_add true brightness 0.21 vis_mask -rgba.alpha corners 4 flattening 1 sharpness 1 corners_angle {{parent.lensPieceRingsRotation+50}} corner_angle_add true asym_multiplier 0 asym_falloff 10 asym_angle {{parent.lensPieceRingsRotation-350}} asym_angle_add true name Flare235 label Source xpos -654 ypos 8539 disable {{parent.Flare113.disable}} } Blur { size 18.5 name Blur77 xpos -654 ypos 8577 disable {{parent.Flare113.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.1 radius {0 116.11 129.97} size_mult {{(parent.flareCoreSize)+3.8}} ring_color {0.796096 1.00716 1.196} inner_color 0 outer_falloff 5.2 inner_falloff 5.6 chroma_spread -0.034 chroma_shift -5.2 chroma_shift_angle 58 chroma_shift_angle_add true brightness 0.21 vis_mask -rgba.alpha corners 4 flattening 1 sharpness 1 corners_angle {{parent.lensPieceRingsRotation+50}} corner_angle_add true asym_multiplier 0 asym_falloff 14 asym_angle {{parent.lensPieceRingsRotation-350}} asym_angle_add true name Flare236 label Source xpos -536 ypos 8496 disable {{parent.Flare113.disable}} } Blur { size 18.5 name Blur95 xpos -536 ypos 8534 disable {{parent.Flare113.disable}} } Merge2 { inputs 2 operation screen maskChannelMask none name Merge140 xpos -536 ypos 8583 disable {{parent.Flare113.disable}} } set N98542c00 [stack 0] Merge2 { inputs 2 operation screen maskChannelMask none name Merge191 xpos -536 ypos 8635 disable {{parent.Flare113.disable}} } push $N98542c00 Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.3 radius {45.54 75.01 107.34} size_mult {{(parent.flareCoreSize)+3.8}} ring_color {0.796096 1.00716 1.196} inner_color 0 outer_falloff 5.2 inner_falloff 5.6 chroma_spread -0.034 chroma_shift -5.2 chroma_shift_angle 58 chroma_shift_angle_add true brightness 0.09 vis_mask -rgba.alpha corners 4 flattening 1 sharpness 1 corners_angle {{parent.lensPieceRingsRotation+50}} corner_angle_add true asym_multiplier 0 asym_falloff 16 asym_angle {{parent.lensPieceRingsRotation+180}} asym_angle_add true name Flare111 label Source xpos -653 ypos 8408 disable {{parent.Flare113.disable}} } Blur { size 18.5 name Blur96 xpos -653 ypos 8446 disable {{parent.Flare113.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.3 radius {88.16 99.16 113.02} size_mult {{(parent.flareCoreSize)+3.8}} ring_color {0.796096 1.00716 1.196} inner_color 0 outer_falloff 5.2 inner_falloff 5.6 chroma_spread -0.034 chroma_shift -5.2 chroma_shift_angle 58 chroma_shift_angle_add true brightness 0.21 vis_mask -rgba.alpha corners 4 flattening 1 sharpness 1 corners_angle {{parent.lensPieceRingsRotation+50}} corner_angle_add true asym_multiplier 0 asym_falloff 14 asym_angle {{parent.lensPieceRingsRotation+180}} asym_angle_add true name Flare112 label Source xpos -539 ypos 8356 disable {{parent.Flare113.disable}} } Blur { size 18.5 name Blur97 xpos -539 ypos 8394 disable {{parent.Flare113.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.3 radius {0 116.11 129.97} size_mult {{(parent.flareCoreSize)+3.8}} ring_color {0.796096 1.00716 1.196} inner_color 0 outer_falloff 5.2 inner_falloff 5.6 chroma_spread -0.034 chroma_shift -5.2 chroma_shift_angle 58 chroma_shift_angle_add true brightness 0.21 vis_mask -rgba.alpha corners 4 flattening 1 sharpness 1 corners_angle {{parent.lensPieceRingsRotation+50}} corner_angle_add true asym_multiplier 0 asym_falloff 14 asym_angle {{parent.lensPieceRingsRotation+180}} asym_angle_add true name Flare113 label Source xpos -421 ypos 8313 disable {{"parent.lensPieceRingsPicker == 0 ? 0 : 1"}} } Blur { size 18.5 name Blur98 xpos -421 ypos 8351 disable {{parent.Flare113.disable}} } Merge2 { inputs 2 operation screen maskChannelMask none name Merge141 xpos -421 ypos 8400 disable {{parent.Flare113.disable}} } Merge2 { inputs 2 operation screen maskChannelMask none name Merge142 xpos -421 ypos 8452 disable {{parent.Flare113.disable}} } Merge2 { inputs 2 operation screen maskChannelMask none name Merge192 xpos -421 ypos 8583 disable {{parent.Flare113.disable}} } Merge2 { inputs 2 operation screen maskChannelMask none name Merge194 xpos -421 ypos 8635 disable {{parent.Flare113.disable}} } Grade { inputs 1+1 white 0.42 multiply 4 maskChannelMask rgba.red name Grade57 xpos -421 ypos 8697 disable {{parent.Flare113.disable}} } Grade { inputs 1+1 white 0.96 multiply 3.2 gamma 0.92 maskChannelMask rgba.red name Grade58 xpos -421 ypos 8723 disable {{parent.Flare113.disable}} } Glow { inputs 1+1 tolerance 0.06 brightness 5 W rgba.red size 43.5 maskChannelMask none name Glow25 xpos -421 ypos 8749 disable {{parent.Flare113.disable}} } Grade { inputs 1+1 white 6 multiply 4 gamma 1.1 maskChannelMask rgba.red name Grade59 xpos -421 ypos 8775 disable {{parent.Flare113.disable}} } Switch { inputs 4 which {{parent.lensPieceRingsPicker}} name rings xpos -36 ypos 8775 } Dot { name Dot65 xpos -2 ypos 8869 } Crop { box {0 0 {root.width} {root.height}} name Crop9 xpos 129 ypos 8865 } Clamp { name Clamp6 xpos 258 ypos 8859 } Grade { multiply {{parent.lensPieceRingsTint.r} {parent.lensPieceRingsTint.g} {parent.lensPieceRingsTint.b} 0} white_clamp true maskChannelMask none name grade3 xpos 406 ypos 8865 } Group { name Static_Noise7 help "Adds synthetic grain. Push \"presets\" to get predefined types of grain, these are the correct size for 2K scans.\n\nYou can also adjust the sliders to match a sample piece of grain. Find a sample with a rather constant background, blur it to remove the grain, and use as input to this. View with a wipe in the viewer so you can make a match. It helps to view and match each of the red, green, blue seperately." tile_color 0x992620ff note_font "Bitstream Vera Sans" xpos 532 ypos 8866 dope_sheet true mapsize {0.15 0.15} addUserKnob {20 master_control l Master} addUserKnob {7 noise_intensity_global l Intensity R 0 2} noise_intensity_global 0.52 addUserKnob {7 rgb_size_multiplier l Size R 0 2} rgb_size_multiplier 1 addUserKnob {26 ""} addUserKnob {6 no_alpha l "no alpha?" t "Check this box if your image doesn't have an alpha and you cannot use another alpha channel.\n\n(Note: This WILL cause the grain to be more prevalent. So please compensate using the Noise Size and Noise Intensity controls above.)" +STARTLINE} no_alpha true addUserKnob {20 adv_controls l Advanced} addUserKnob {20 fractal_noise_size l "RGB Noise Size" n 1} fractal_noise_size 0 addUserKnob {14 red_size l r R 0 100} red_size 1.7 addUserKnob {14 green_size l g R 0 100} green_size 1.6 addUserKnob {14 blue_size l b R 0 100} blue_size 1.5 addUserKnob {20 endGroup n -1} addUserKnob {20 noise_irregularity l "RGB Noise Irregularity" n 1} noise_irregularity 0 addUserKnob {7 red_i l r} red_i 1 addUserKnob {7 green_i l g} green_i 0.75 addUserKnob {7 blue_i l b} blue_i 0.65 addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 noise_intensity l "RGB Noise Intensity" n 1} noise_intensity 0 addUserKnob {7 red_m l r t "Amount of grain to add to a white pixel"} red_m 0.2 addUserKnob {7 green_m l g} green_m 0.4 addUserKnob {7 blue_m l b} blue_m 0.6 addUserKnob {18 black t "Amount of grain to add everywhere"} black {0 0 0} addUserKnob {6 black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 minimum t "Minimum black level" R 0 0.01} minimum {0 0 0} addUserKnob {6 minimum_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {26 ""} addUserKnob {3 seed l Seed} seed 134 addUserKnob {32 reset l Reset T "knobs this \{rgb_size_multiplier 0 red_size 1.70 green_size 1.60 blue_size 1.50 red_i 1.00 green_i 0.75 blue_i 0.65 red_m 0.40 green_m 0.60 blue_m 1.65 black 0.00\}" +STARTLINE} } Input { inputs 0 name Input1 xpos 0 } set Na1098c00 [stack 0] Noise { output {rgba.red -rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.red_size.w*(rgb_size_multiplier) i} {parent.red_size.h*(rgb_size_multiplier) i}} octaves 2 gamma 1 xrotate {{red_i*45 i}} yrotate {{red_i*45 i}} name red xpos 144 ypos -7 } Noise { output {-rgba.red rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.green_size.w*(rgb_size_multiplier) i} {parent.green_size.h*(rgb_size_multiplier) i}} zoffset 10 octaves 2 gamma 1 xrotate {{green_i*45 i}} yrotate {{green_i*45 i}} name green xpos 144 ypos 35 } Noise { output {-rgba.red -rgba.green rgba.blue -rgba.alpha} cliptype none replace true size {{parent.blue_size.w*(rgb_size_multiplier) i} {parent.blue_size.h*(rgb_size_multiplier) i}} zoffset 20 octaves 2 gamma 1 xrotate {{blue_i*45 i}} yrotate {{blue_i*45 i}} name blue xpos 144 ypos 77 } push $Na1098c00 MergeExpression { inputs 2 expr0 max(minimum.r,r+(2*Ar-1)*(r*red_m*noise_intensity_global)) expr1 max(minimum.g,g+(2*Ag-1)*(g*green_m*noise_intensity_global)) expr2 max(minimum.b,b+(2*Ab-1)*(b*blue_m*noise_intensity_global)) name MergeExpression1 xpos 144 ypos 117 } set Na1007800 [stack 0] push $Na1007800 push $Na1098c00 Copy { inputs 2 channels rgb maskChannelInput rgba.alpha name Copy1 xpos 0 ypos 105 disable {{parent.no_alpha i}} } Switch { inputs 2 which {{parent.no_alpha i}} name Switch1 xpos 144 ypos 171 } Output { name Output1 xpos 144 ypos 219 } end_group Dot { name Dot64 xpos 657 ypos 8869 } set Na1006c00 [stack 0] Saturation { saturation 0 name Saturation32 xpos 623 ypos 8918 } push $Na1006c00 Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy13 xpos 767 ypos 8859 } Noise { inputs 0 size {{"parent.flareCoreSize * parent.lensPieceMainSize * 100"}} lacunarity 1.84 gain 0.425 center {320 240} name Noise2 xpos 688 ypos 7707 } Flare { inputs 0 position {{"parent.flarePos.x - 210"} {parent.flarePos.y}} radius {5.32 20.75 23.32} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.6999999881 brightness 0.32 vis_mask -rgba.alpha corners 6 flattening 1.2 sharpness 0.89 corners_angle 14 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare281 xpos 188 ypos 7387 } Flare { position {{"parent.flarePos.x - 170"} {parent.flarePos.y}} radius {18.1 33.53 46.04} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.6999999881 brightness 0.32 vis_mask -rgba.alpha corners 6 flattening 0.5 sharpness 0.86 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare278 xpos 188 ypos 7413 } Flare { position {{"parent.flarePos.x - 120"} {parent.flarePos.y}} radius {9.58 25.01 29} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.6999999881 brightness 0.55 vis_mask -rgba.alpha corners 6 flattening 0.5 sharpness 0.86 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare279 xpos 188 ypos 7439 } Flare { position {{"parent.flarePos.x - -90"} {parent.flarePos.y}} radius {16.68 32.11 36.1} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.6999999881 brightness 0.44 vis_mask -rgba.alpha corners 6 flattening 0.5 sharpness 0.86 corners_angle 40 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare280 xpos 188 ypos 7465 } Flare { position {{"parent.flarePos.x - 170"} {parent.flarePos.y}} radius {66.39 81.82 118.48} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} anamorph 0.94 ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.6999999881 brightness 0.065 vis_mask -rgba.alpha corners 6 sharpness 0.86 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare270 xpos 188 ypos 7529 } Flare { position {{"parent.flarePos.x - 50"} {parent.flarePos.y}} radius {46.5 61.93 98.6} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.6999999881 brightness 0.105 vis_mask -rgba.alpha corners 6 sharpness 0.86 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare273 xpos 188 ypos 7555 } Flare { position {{"parent.flarePos.x - 100"} {parent.flarePos.y}} radius {66.39 110.23 136.95} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} anamorph 1.1 ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.6999999881 brightness 0.105 vis_mask -rgba.alpha corners 6 sharpness 0.86 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare261 xpos 188 ypos 7581 } Flare { position {{"parent.flarePos.x - 120"} {parent.flarePos.y}} radius {22.36 66.2 88.66} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} anamorph 1.1 ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.6999999881 brightness 0.11 vis_mask -rgba.alpha corners 6 sharpness 0.86 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare277 xpos 188 ypos 7607 } Flare { position {{"parent.flarePos.x - 100"} {parent.flarePos.y}} radius {134.57 178.41 237.8} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} anamorph 1.03 ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.6999999881 brightness 0.035 vis_mask -rgba.alpha corners 6 sharpness 0.86 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare272 xpos 188 ypos 7633 } Flare { position {{"parent.flarePos.x - 270"} {parent.flarePos.y}} radius {93.38 137.22 236.38} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} anamorph 1.29 ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.6999999881 brightness 0.02 vis_mask -rgba.alpha corners 6 sharpness 0.86 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare276 xpos 188 ypos 7659 } set Na0f8d000 [stack 0] Flare { position {{"parent.flarePos.x + 200"} {parent.flarePos.y}} radius {5.32 20.75 23.32} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.6999999881 brightness 0.32 vis_mask -rgba.alpha corners 6 flattening 1.2 sharpness 0.89 corners_angle 14 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare282 xpos 313 ypos 7575 disable {{"parent.lensPieceBigPicker == 6 ? 0 : 1"}} } Flare { position {{"parent.flarePos.x + 190"} {parent.flarePos.y}} radius {18.1 33.53 46.04} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.6999999881 brightness 0.32 vis_mask -rgba.alpha corners 6 flattening 0.5 sharpness 0.86 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare283 xpos 313 ypos 7601 disable {{parent.Flare282.disable}} } Flare { position {{"parent.flarePos.x + 110"} {parent.flarePos.y}} radius {9.58 25.01 29} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.6999999881 brightness 0.55 vis_mask -rgba.alpha corners 6 flattening 0.5 sharpness 0.86 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare284 xpos 313 ypos 7627 disable {{parent.Flare282.disable}} } Flare { position {{"parent.flarePos.x + 90"} {parent.flarePos.y}} radius {16.68 32.11 36.1} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.6999999881 brightness 0.44 vis_mask -rgba.alpha corners 6 flattening 0.5 sharpness 0.86 corners_angle 40 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare285 xpos 313 ypos 7653 disable {{parent.Flare282.disable}} } Flare { position {{"parent.flarePos.x + 150"} {parent.flarePos.y}} radius {91.96 107.39 135.53} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.56 brightness 0.105 vis_mask -rgba.alpha corners 6 sharpness 0.86 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare260 xpos 430 ypos 7552 disable {{"parent.lensPieceBigPicker == 6 ? 0 : 1"}} } Flare { position {{"parent.flarePos.x + 50"} {parent.flarePos.y}} radius {59.29 74.72 102.86} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.56 brightness 0.105 vis_mask -rgba.alpha corners 6 sharpness 0.86 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare274 xpos 430 ypos 7578 disable {{parent.Flare260.disable}} } Flare { position {{"parent.flarePos.x + 200"} {parent.flarePos.y}} radius {91.96 107.39 135.53} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} anamorph 1.2 ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.69 brightness 0.065 vis_mask -rgba.alpha corners 6 sharpness 0.86 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare262 xpos 430 ypos 7604 disable {{parent.Flare260.disable}} } Flare { position {{"parent.flarePos.x + 100"} {parent.flarePos.y}} radius {197.07 212.5 278.99} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} anamorph 0.98 ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.69 brightness 0.05 vis_mask -rgba.alpha corners 6 sharpness 0.86 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare271 xpos 430 ypos 7630 disable {{parent.Flare260.disable}} } Flare { position {{"parent.flarePos.x + 300"} {parent.flarePos.y}} radius {187.13 202.56 301.72} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} anamorph 1.29 ring_color {0.528470993 0.6299999952 0.528470993} inner_color 0.69 brightness 0.03 vis_mask -rgba.alpha corners 6 sharpness 0.86 mult_seed {{parent.lensPieceBigSeed}} mult_offset 0 mult_size {{"-0.32 + (parent.lensPieceMainSize)"}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare275 xpos 430 ypos 7656 disable {{parent.Flare260.disable}} } Blur { size 4 name Blur75 xpos 540 ypos 7650 } Merge { inputs 2 operation in mix 0.745 name Merge223 xpos 540 ypos 7707 } Dot { name Dot18 xpos 574 ypos 7791 } Dot { name Dot19 xpos 574 ypos 7857 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.flareCoreSize * 0.9"}} radius {42.08 75.93 192.67} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} anamorph 0.76 ring_color {1 0.111784 0} inner_color {1 0.111784 0} outer_falloff 1.9 chroma_spread 0.046 brightness 0.3 flattening 0.7 mult_num 2 mult_offset 2.4 name Flare311 label Orange_Glow02 xpos -139 ypos 7476 disable {{parent.Flare300.disable}} } Blur { size 9.5 name Blur137 xpos -139 ypos 7514 disable {{parent.Flare300.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.flareCoreSize * 1.13"}} radius {58.97 101.23 134.74} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} anamorph 1.8 ring_color {0.716 0.048 0.009} inner_color 0.003 chroma_shift_angle_add true asym_multiplier 0 asym_falloff 3.3 asym_angle -36 mult_seed {{(parent.ffx_pieces_seed)}} name Flare300 label Half_Concave xpos -261 ypos 7434 disable {{"parent.lensPieceBigPicker == 5 ? 0 : 1"}} } Flare { position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.flareCoreSize * 1.202"}} radius {132.79 178.61 214.62} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} anamorph 2.1 ring_color {0.716 0.048 0.009} inner_color 0 chroma_shift_angle_add true brightness 0.4 asym_multiplier 0 asym_falloff 3.3 asym_angle -220 mult_seed {{(parent.ffx_pieces_seed)}} name Flare301 label Half_Convex xpos -310 ypos 7501 disable {{parent.Flare300.disable}} } Flare { position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.flareCoreSize * 1.73"}} radius {55.03 101.23 137.55} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} anamorph 1.8 ring_color {0.716 0.048 0.009} inner_color 0.003 chroma_shift_angle_add true asym_multiplier 0 asym_falloff 3.3 asym_angle -36 mult_seed {{(parent.ffx_pieces_seed)}} name Flare302 label Half_Concave xpos -239 ypos 7563 disable {{parent.Flare300.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none mix 0.12 name Merge237 xpos -139 ypos 7621 } Saturation { saturation 0 maskChannelMask none name Saturation21 xpos -139 ypos 7647 } set Na0e43c00 [stack 0] Transform { rotate 2 center {{parent.flarePos.x} {parent.flarePos.y}} name Transform90 xpos -14 ypos 7647 disable {{parent.Flare300.disable}} } Blur { size {200 2} name Blur136 xpos -14 ypos 7673 disable {{parent.Flare300.disable}} } push $Na0e43c00 Merge2 { inputs 2 operation screen maskChannelMask none name Merge238 xpos -139 ypos 7679 } set Na0e43000 [stack 0] Blur { size 300 name Blur139 xpos -254 ypos 7673 } Glow { brightness 0.4 size 31 maskChannelMask none name Glow33 xpos -254 ypos 7711 disable {{parent.Flare300.disable}} } Dot { name Dot20 xpos -220 ypos 7763 } push $Na0e43000 Glow { brightness 0.4 size 31 maskChannelMask none name Glow32 xpos -139 ypos 7717 } Merge2 { inputs 2 operation screen maskChannelMask none name Merge239 xpos -139 ypos 7759 } Dot { name Dot51 xpos -105 ypos 7834 } push $Na0f8d000 Blur { size 4 name Blur155 xpos 188 ypos 7783 } Grade { whitepoint 0.42 gamma 0.72 maskChannelMask none name Grade68 xpos -1004 ypos 7789 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.Flare55.offset + (- 0.6 )"}} radius {21.87 28.75 37.09} size_mult 15 anamorph 1.14 ring_color {0.09384614974 0.06153845787 0.1599999964} inner_color {0.08718749881 0.08718749881 0.1550000012} outer_falloff 4.2 inner_falloff 0.9 chroma_spread 0.005 vis_mask -rgba.alpha sharpness 0.255 mult_offset 8 mult_size -0.1 mult_color 0.6 mult_brightness -0.72 mult_visibility -0.18 name Flare178 label Pieces xpos -1143 ypos 7448 disable {{parent.Flare55.disable}} } Saturation { saturation 3 maskChannelMask none name Saturation22 xpos -1143 ypos 7486 disable {{parent.Flare55.disable}} } Blur { size 60 name Blur124 xpos -1143 ypos 7512 disable {{parent.Flare55.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceBigOffset + 0.35"}} radius {0 21.87 37.09} size_mult 10 anamorph 1.56 ring_color {0.2099999934 0.05669999495 0.1486800611} inner_color {0.1550000012 0.08718749881 0.1482187212} outer_falloff 0.105 inner_falloff 2.4 chroma_spread 0.005 vis_mask -rgba.alpha corners 4 flattening 0.7 sharpness 1 corners_angle 50 asym_falloff 0.72 asym_angle 116 mult_offset 8 mult_size -0.1 mult_color 0.6 mult_brightness -0.72 mult_visibility -0.18 name Flare54 label Pieces xpos -892 ypos 7445 disable {{parent.Flare55.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceBigOffset + 1.6"}} radius {0 37.09 37.09} size_mult 9.5 anamorph 1.22 ring_color {0.2099999934 0.05669999495 0.1486800611} inner_color {0.09000000358 0.05062500387 0.08606249094} outer_falloff 0.105 inner_falloff 2.3 chroma_spread 0.005 vis_mask -rgba.alpha corners 4 flattening 0.5 sharpness 1 asym_falloff 0.72 asym_angle 116 mult_offset 8 mult_size -0.1 mult_color 0.6 mult_brightness -0.72 mult_visibility -0.18 name Flare55 label Pieces xpos -1033 ypos 7387 disable {{"parent.lensPieceBigPicker == 4 ? 0 : 1"}} } Merge2 { inputs 2 operation plus output {rgba.red rgba.green rgba.blue -rgba.alpha} maskChannelMask none mix 0.895 name Merge130 xpos -1033 ypos 7451 disable {{parent.Flare55.disable}} } Saturation { saturation 3.6 maskChannelMask none name Saturation28 xpos -1033 ypos 7477 disable {{parent.Flare55.disable}} } Blur { size 68 name Blur125 xpos -1033 ypos 7521 disable {{parent.Flare55.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceBigOffset + 1.5"}} radius {0 21.87 37.09} size_mult 1.8 anamorph 3.3 ring_color {0.5799999833 0.2667999864 0.4547201097} inner_color 0 outer_falloff 0.62 inner_falloff 2.4 chroma_spread 0.005 vis_mask -rgba.alpha corners 4 flattening 0.9 sharpness 0.8 corners_angle 8 asym_multiplier 0 asym_falloff 4.4 asym_angle 56 mult_offset 8 mult_size -0.1 mult_color 0.6 mult_brightness -0.72 mult_visibility -0.18 name Flare326 label Pieces xpos -531 ypos 7569 disable {{parent.Flare55.disable}} } Blur { size 0.1 name Blur152 xpos -531 ypos 7607 disable {{parent.Flare55.disable}} } Grade { multiply 2 maskChannelMask none name Grade65 xpos -531 ypos 7645 disable {{parent.Flare55.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceBigOffset + 1.7"}} radius {0 21.87 37.09} size_mult 5 anamorph 1.22 ring_color {0.2099999934 0.05669999495 0.1486800611} inner_color 0 outer_falloff 0.105 inner_falloff 2.4 chroma_spread 0.005 vis_mask -rgba.alpha corners 4 flattening 0.6 sharpness 1 asym_multiplier 0 asym_falloff 4.9 asym_angle 44 mult_offset 8 mult_size -0.1 mult_color 0.6 mult_brightness -0.72 mult_visibility -0.18 name Flare327 label Pieces xpos -531 ypos 7526 disable {{parent.Flare55.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceBigOffset + 1.07"}} radius {0 21.87 37.09} size_mult 4.2 anamorph 0.95 ring_color {0.2099999934 0.05669999495 0.1486800611} inner_color 0 outer_falloff 0.105 inner_falloff 2.4 chroma_spread 0.005 vis_mask -rgba.alpha corners 4 flattening 0.6 sharpness 1 asym_multiplier 0 asym_falloff 4.3 asym_angle 46 mult_offset 8 mult_size -0.1 mult_color 0.6 mult_brightness -0.72 mult_visibility -0.18 name Flare328 label Pieces xpos -641 ypos 7494 disable {{parent.Flare55.disable}} } Merge2 { inputs 2 maskChannelMask none name Merge274 xpos -641 ypos 7532 disable {{parent.Flare55.disable}} } Merge2 { inputs 2 maskChannelMask none name Merge275 xpos -641 ypos 7613 disable {{parent.Flare55.disable}} } Grade { white 4 multiply 1.85 maskChannelMask none unpremult -rgba.alpha name Grade64 xpos -641 ypos 7639 disable {{parent.Flare55.disable}} } Blur { size 12 name Blur153 xpos -641 ypos 7665 disable {{parent.Flare55.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceBigOffset + 1.5"}} radius {0 21.87 37.09} size_mult 1.8 anamorph 3.3 ring_color {0.5799999833 0.2667999864 0.4547201097} inner_color {0.8700000048 0.4893749952 0.8319373727} outer_falloff 0.62 inner_falloff 2.4 chroma_spread 0.005 vis_mask -rgba.alpha corners 4 flattening 0.9 sharpness 0.8 corners_angle 8 asym_falloff 0.72 asym_angle 116 mult_offset 8 mult_size -0.1 mult_color 0.6 mult_brightness -0.72 mult_visibility -0.18 name Flare56 label Pieces xpos -780 ypos 7577 disable {{parent.Flare55.disable}} } Blur { size 0.1 name Blur128 xpos -780 ypos 7615 disable {{parent.Flare55.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceBigOffset + 1.7"}} radius {0 21.87 37.09} size_mult 5 anamorph 1.22 ring_color {0.2099999934 0.05669999495 0.1486800611} inner_color {0.1049999967 0.05906249955 0.1004062295} outer_falloff 0.105 inner_falloff 2.4 chroma_spread 0.005 vis_mask -rgba.alpha corners 4 flattening 0.6 sharpness 1 asym_falloff 0.72 asym_angle 116 mult_offset 8 mult_size -0.1 mult_color 0.6 mult_brightness -0.72 mult_visibility -0.18 name Flare59 label Pieces xpos -780 ypos 7534 disable {{parent.Flare55.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceBigOffset + 1.07"}} radius {0 21.87 37.09} size_mult 4.2 anamorph 0.95 ring_color {0.2099999934 0.05669999495 0.1486800611} inner_color {0.125 0.0703125 0.1195312291} outer_falloff 0.105 inner_falloff 2.4 chroma_spread 0.005 vis_mask -rgba.alpha corners 4 flattening 0.6 sharpness 1 asym_falloff 0.72 asym_angle 116 mult_offset 8 mult_size -0.1 mult_color 0.6 mult_brightness -0.72 mult_visibility -0.18 name Flare60 label Pieces xpos -890 ypos 7502 disable {{parent.Flare55.disable}} } Merge2 { inputs 2 maskChannelMask none name Merge131 xpos -890 ypos 7540 disable {{parent.Flare55.disable}} } Merge2 { inputs 2 maskChannelMask none name Merge132 xpos -890 ypos 7621 disable {{parent.Flare55.disable}} } Grade { white 0.4 maskChannelMask none unpremult -rgba.alpha name Grade117 xpos -890 ypos 7647 disable {{parent.Flare55.disable}} } Blur { size 12 name Blur126 xpos -890 ypos 7673 disable {{parent.Flare55.disable}} } Merge2 { inputs 2 operation plus output {rgba.red rgba.green rgba.blue -rgba.alpha} maskChannelMask none mix 0.3 name Merge276 xpos -890 ypos 7711 disable {{parent.Flare55.disable}} } Grade { multiply 0.68 gamma 0.88 maskChannelMask none name Grade66 xpos -890 ypos 7737 disable {{parent.Flare55.disable}} } Merge2 { inputs 2 operation plus output {rgba.red rgba.green rgba.blue -rgba.alpha} maskChannelMask none mix 0.17 name Merge133 xpos -1033 ypos 7737 disable {{parent.Flare55.disable}} } Merge { inputs 2 operation plus mix 0.145 name Merge196 xpos -1143 ypos 7737 disable {{parent.Flare55.disable}} } Saturation { saturation 0 maskChannelMask none name Saturation29 xpos -1143 ypos 7763 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge278 xpos -1143 ypos 7789 } Noise { inputs 0 size {{"parent.flareCoreSize * 100"}} lacunarity 1.84 gain 0.425 center {320 240} name Noise19 xpos -1368 ypos 7515 disable {{parent.Flare173.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceBigOffset + 1"}} radius {317.32 324.2 500} size_mult {{"parent.flareCoreSize * 1.06"}} anamorph 1.44 ring_color 0.04 inner_color 0.04 outer_falloff 0.38 inner_falloff 1.15 chroma_spread -0.13 brightness 0.19 vis_mask -rgba.alpha flattening 0.1 sharpness 1 mult_num 5 mult_offset 8 mult_size -0.16 mult_brightness -0.02 mult_visibility -0.18 name Flare173 label Pieces xpos -1526 ypos 7435 disable {{"parent.lensPieceBigPicker == 3 ? 0 : 1"}} } Merge { inputs 2 operation in mix 0.845 name Merge134 xpos -1526 ypos 7515 disable {{parent.Flare173.disable}} } Grade { multiply 3 maskChannelMask none name Grade44 xpos -1526 ypos 7541 disable {{parent.Flare173.disable}} } Glow { size 20 maskChannelMask none name Glow19 xpos -1526 ypos 7567 disable {{parent.Flare173.disable}} } Blur { size 50 name Blur110 xpos -1526 ypos 7593 disable {{parent.Flare173.disable}} } Dot { name Dot62 xpos -1492 ypos 7747 } Noise { inputs 0 size {{"parent.flareCoreSize * 100 "}} lacunarity 1.84 gain 0.425 center {320 240} name Noise23 xpos -1681 ypos 7506 disable {{parent.Flare64.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{parent.lensPieceBigOffset}} radius {317.32 324.2 500} size_mult {{"parent.flareCoreSize * 1.06"}} anamorph 1.44 ring_color 0.1525 inner_color 0.135 outer_falloff 0.86 inner_falloff 0.9 chroma_spread 0.062 brightness 0.14 vis_mask -rgba.alpha flattening 0.1 sharpness 1 mult_num 4 mult_offset 8 mult_size -0.1 mult_color 0.6 mult_brightness -0.72 mult_visibility -0.18 name Flare64 label Pieces xpos -1833 ypos 7432 disable {{"parent.lensPieceBigPicker == 2 ? 0 : 1"}} } Merge { inputs 2 operation in mix 0.845 name Merge135 xpos -1833 ypos 7506 disable {{parent.Flare64.disable}} } Grade { multiply 3 maskChannelMask none name Grade45 xpos -1833 ypos 7532 disable {{parent.Flare64.disable}} } Glow { size 20 maskChannelMask none name Glow10 xpos -1833 ypos 7558 disable {{parent.Flare64.disable}} } Blur { size 50 name Blur111 xpos -1833 ypos 7584 disable {{parent.Flare64.disable}} } Dot { name Dot61 xpos -1799 ypos 7821 } Noise { inputs 0 size {{"parent.flareCoreSize * 100"}} lacunarity 1.84 gain 0.425 center {320 240} name Noise24 xpos -1978 ypos 7442 disable {{parent.Flare66.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceBigOffset + 0.13"}} radius {252.02 397.85 500} size_mult {{"parent.flareCoreSize * 1.36"}} ring_color 0.65 inner_color 0.33 corners 27 flattening 0.7 sharpness 1 mult_num 4 mult_offset 5.6 mult_size 1 mult_color 0.95 mult_brightness -0.72 mult_visibility 0.12 mult_rotate 1 name Flare65 xpos -2265 ypos 7547 disable {{parent.Flare66.disable}} } Blur { size 24 name Blur59 xpos -2265 ypos 7573 disable {{parent.Flare66.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceBigOffset + 0.13"}} radius {119.33 397.85 500} size_mult {{"parent.flareCoreSize * 1.36"}} ring_color 0.75 inner_color 0.26 brightness 0.105 corners 27 flattening 0.7 sharpness 1 mult_num 11 mult_offset 3.6 mult_size 1 mult_color 0.95 mult_brightness -0.72 mult_visibility 0.12 mult_rotate 1 name Flare66 xpos -2144 ypos 7455 disable {{"parent.lensPieceBigPicker == 1 ? 0 : 1"}} } Blur { size 24 name Blur68 xpos -2144 ypos 7516 disable {{parent.Flare66.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none mix 0.055 name Merge136 xpos -2144 ypos 7579 disable {{parent.Flare66.disable}} } Merge { inputs 2 operation in mix 0.725 name Merge137 xpos -1978 ypos 7579 disable {{parent.Flare66.disable}} } Dot { name Dot60 xpos -1944 ypos 7825 } Noise { inputs 0 size {{100*(parent.flareCoreSize)}} lacunarity 1.84 gain 0.425 center {320 240} name Noise25 xpos -2379 ypos 7470 disable {{parent.Flare172.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceBigOffset + 0.13"}} radius {252.02 397.85 500} size_mult {{"parent.flareCoreSize * 1.16"}} inner_color 0.83 corners 27 flattening 0.7 sharpness 1 mult_num 4 mult_offset 5.6 mult_size 1 mult_color 0.95 mult_brightness -0.72 mult_visibility 0.12 mult_rotate 1 name Flare171 xpos -2666 ypos 7572 disable {{parent.Flare172.disable}} } Blur { size 24 name Blur108 xpos -2666 ypos 7598 disable {{parent.Flare172.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{"parent.lensPieceBigOffset + 0.13"}} radius {119.33 265.16 367.31} size_mult {{parent.flareCoreSize}} inner_color 0.7 brightness 0.13 corners 27 flattening 0.7 sharpness 1 mult_num 8 mult_offset 3.6 mult_size 1 mult_color 0.95 mult_brightness -0.72 mult_visibility 0.12 mult_rotate 1 name Flare172 xpos -2545 ypos 7480 disable {{"parent.lensPieceBigPicker == 0 ? 0 : 1"}} } Blur { size 24 name Blur109 xpos -2545 ypos 7506 disable {{parent.Flare172.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none mix 0.055 name Merge138 xpos -2545 ypos 7604 disable {{parent.Flare172.disable}} } Merge { inputs 2 operation in mix 0.725 name Merge139 xpos -2379 ypos 7604 disable {{parent.Flare172.disable}} } Dot { name Dot59 xpos -2345 ypos 7879 } Switch { inputs 7 which {{parent.lensPieceBigPicker}} name big_pieces xpos -1899 ypos 7875 } Dot { name Dot58 xpos -1865 ypos 7957 } Crop { box {0 0 {root.width} {root.height}} name Crop8 xpos 47 ypos 7947 } Clamp { name Clamp4 xpos 157 ypos 7941 } Grade { multiply {{parent.lensPieceBigTint.r} {parent.lensPieceBigTint.g} {parent.lensPieceBigTint.b} 0} white_clamp true maskChannelMask none name grade2 xpos 281 ypos 7947 } Blur { size {{parent.lensPieceBigBlur}} name Blur69 xpos 410 ypos 7940 } Group { name Static_Noise4 help "Adds synthetic grain. Push \"presets\" to get predefined types of grain, these are the correct size for 2K scans.\n\nYou can also adjust the sliders to match a sample piece of grain. Find a sample with a rather constant background, blur it to remove the grain, and use as input to this. View with a wipe in the viewer so you can make a match. It helps to view and match each of the red, green, blue seperately." tile_color 0x992620ff note_font "Bitstream Vera Sans" xpos 532 ypos 7954 dope_sheet true mapsize {0.15 0.15} addUserKnob {20 master_control l Master} addUserKnob {7 noise_intensity_global l Intensity R 0 2} noise_intensity_global 0.52 addUserKnob {7 rgb_size_multiplier l Size R 0 2} rgb_size_multiplier 1 addUserKnob {26 ""} addUserKnob {6 no_alpha l "no alpha?" t "Check this box if your image doesn't have an alpha and you cannot use another alpha channel.\n\n(Note: This WILL cause the grain to be more prevalent. So please compensate using the Noise Size and Noise Intensity controls above.)" +STARTLINE} no_alpha true addUserKnob {20 adv_controls l Advanced} addUserKnob {20 fractal_noise_size l "RGB Noise Size" n 1} fractal_noise_size 0 addUserKnob {14 red_size l r R 0 100} red_size 1.7 addUserKnob {14 green_size l g R 0 100} green_size 1.6 addUserKnob {14 blue_size l b R 0 100} blue_size 1.5 addUserKnob {20 endGroup n -1} addUserKnob {20 noise_irregularity l "RGB Noise Irregularity" n 1} noise_irregularity 0 addUserKnob {7 red_i l r} red_i 1 addUserKnob {7 green_i l g} green_i 0.75 addUserKnob {7 blue_i l b} blue_i 0.65 addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 noise_intensity l "RGB Noise Intensity" n 1} noise_intensity 0 addUserKnob {7 red_m l r t "Amount of grain to add to a white pixel"} red_m 0.2 addUserKnob {7 green_m l g} green_m 0.4 addUserKnob {7 blue_m l b} blue_m 0.6 addUserKnob {18 black t "Amount of grain to add everywhere"} black {0 0 0} addUserKnob {6 black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 minimum t "Minimum black level" R 0 0.01} minimum {0 0 0} addUserKnob {6 minimum_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {26 ""} addUserKnob {3 seed l Seed} seed 134 addUserKnob {32 reset l Reset T "knobs this \{rgb_size_multiplier 0 red_size 1.70 green_size 1.60 blue_size 1.50 red_i 1.00 green_i 0.75 blue_i 0.65 red_m 0.40 green_m 0.60 blue_m 1.65 black 0.00\}" +STARTLINE} } Input { inputs 0 name Input1 xpos 0 } set N98277000 [stack 0] Noise { output {rgba.red -rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.red_size.w*(rgb_size_multiplier) i} {parent.red_size.h*(rgb_size_multiplier) i}} octaves 2 gamma 1 xrotate {{red_i*45 i}} yrotate {{red_i*45 i}} name red xpos 144 ypos -7 } Noise { output {-rgba.red rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.green_size.w*(rgb_size_multiplier) i} {parent.green_size.h*(rgb_size_multiplier) i}} zoffset 10 octaves 2 gamma 1 xrotate {{green_i*45 i}} yrotate {{green_i*45 i}} name green xpos 144 ypos 35 } Noise { output {-rgba.red -rgba.green rgba.blue -rgba.alpha} cliptype none replace true size {{parent.blue_size.w*(rgb_size_multiplier) i} {parent.blue_size.h*(rgb_size_multiplier) i}} zoffset 20 octaves 2 gamma 1 xrotate {{blue_i*45 i}} yrotate {{blue_i*45 i}} name blue xpos 144 ypos 77 } push $N98277000 MergeExpression { inputs 2 expr0 max(minimum.r,r+(2*Ar-1)*(r*red_m*noise_intensity_global)) expr1 max(minimum.g,g+(2*Ag-1)*(g*green_m*noise_intensity_global)) expr2 max(minimum.b,b+(2*Ab-1)*(b*blue_m*noise_intensity_global)) name MergeExpression1 xpos 144 ypos 117 } set N98276000 [stack 0] push $N98276000 push $N98277000 Copy { inputs 2 channels rgb maskChannelInput rgba.alpha name Copy1 xpos 0 ypos 105 disable {{parent.no_alpha i}} } Switch { inputs 2 which {{parent.no_alpha i}} name Switch1 xpos 144 ypos 171 } Output { name Output1 xpos 144 ypos 219 } end_group Dot { name Dot52 xpos 657 ypos 7957 } set N98275400 [stack 0] Saturation { saturation 0 name Saturation30 xpos 624 ypos 8003 } push $N98275400 Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy11 xpos 767 ypos 7947 } Flare { inputs 0 position {{parent.Flare296.position.x} {parent.Flare296.position.y}} offset 0.4 radius {4.36 12.69 18.11} size_mult {{parent.Flare296.size_mult}} ring_color {0.338333 0.403333 0.338333} inner_color 0.29 brightness 0.47 vis_mask -rgba.alpha corners 0 flattening 1 sharpness 0.86 asym_multiplier 0 asym_falloff 2.45 asym_angle 6 mult_num {{parent.Flare296.mult_num}} mult_seed {{parent.Flare296.mult_seed}} mult_offset {{parent.Flare296.mult_offset}} mult_size {{parent.Flare296.mult_size}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare295 xpos 105 ypos 6233 disable {{parent.Flare296.disable}} } Flare { position {{parent.Flare296.position.x} {parent.Flare296.position.y}} offset 0.3 radius {2.91 11.24 16.66} size_mult {{parent.Flare296.size_mult}} ring_color {0.338333 0.34 0.37} chroma_spread 0.07 brightness 0.5 vis_mask -rgba.alpha corners 0 flattening 1 sharpness 0.86 asym_multiplier 0 asym_falloff 1.25 mult_num {{"parent.Flare296.mult_num + 5"}} mult_seed {{parent.Flare296.mult_seed}} mult_offset {{"parent.Flare296.mult_offset - 1.65"}} mult_size {{"parent.Flare296.mult_size + 0.2"}} mult_color -1.95 mult_brightness -1 mult_visibility -0.34 mult_flattening -0.4 mult_rotate 0.5 name Flare298 xpos 105 ypos 6276 disable {{parent.Flare296.disable}} } Blur { size 11 name Blur138 xpos 105 ypos 6313 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.4 radius {4.36 12.69 18.11} size_mult {{"parent.lensPieceMainSize * parent.flareCoreSize"}} ring_color {0.338333 0.403333 0.338333} inner_color 0.29 brightness 0.105 vis_mask -rgba.alpha corners 0 flattening 1 sharpness 0.86 mult_num {{"5 + parent.lensPieceMainAdditional"}} mult_seed {{parent.lensPieceMainSeed}} mult_offset {{3.05+parent.lensPieceMainOffset}} mult_size {{-0.52+parent.lensPieceMainSizeVariation}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare296 xpos 3 ypos 6229 disable {{"parent.lensPieceMainType == 9 ? 0 : 1"}} } Flare { position {{parent.Flare296.position.x} {parent.Flare296.position.y}} offset 0.3 radius {2.91 11.24 16.66} size_mult {{parent.Flare296.size_mult}} ring_color {0.338333 0.34 0.37} chroma_spread 0.07 brightness 0.13 vis_mask -rgba.alpha corners 0 flattening 1 sharpness 0.86 mult_num {{"parent.Flare296.mult_num + 5"}} mult_seed {{parent.Flare296.mult_seed}} mult_offset {{"parent.Flare296.mult_offset - 1.65"}} mult_size {{"parent.Flare296.mult_size + 0.2"}} mult_color -1.95 mult_brightness -1 mult_visibility -0.34 mult_flattening -0.4 mult_rotate 0.5 name Flare297 xpos 3 ypos 6272 disable {{parent.Flare296.disable}} } Saturation { saturation 0.6 name Saturation23 xpos 3 ypos 6298 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge263 xpos 3 ypos 6336 } Blur { size 4 name Blur135 xpos 3 ypos 6388 } Grade { white {1 1 2 1} multiply 4 name Grade54 xpos 3 ypos 6426 } Noise { inputs 0 size {{100*parent.Flare296.size_mult}} lacunarity 1.84 gain 0.245 gamma 0.73 center {320 240} name Noise20 xpos -107 ypos 6616 disable {{parent.Flare296.disable}} } Merge { inputs 2 operation in name Merge259 xpos 3 ypos 6616 } Dot { name Dot112 xpos 37 ypos 6791 } Flare { inputs 0 position {{parent.Flare266.position.x} {parent.Flare266.position.y}} offset {{parent.Flare266.offset}} size_mult {{parent.Flare266.size_mult}} inner_color 0.23 asym_multiplier 0.17 asym_angle 180 mult_num {{"3 + parent.Flare266.mult_num"}} mult_seed {{parent.Flare266.mult_seed}} mult_offset -7 mult_size 1 mult_color 1.8 mult_brightness -1 mult_visibility -0.74 mult_flattening 1 mult_rotate 1 name Flare265 xpos -338 ypos 6267 disable {{parent.Flare266.disable}} } Blur { size 6.2 name Blur119 xpos -338 ypos 6309 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{parent.lensPieceMainOffset}} radius {71.28 91.28 111.28} size_mult {{parent.lensPieceMainSize}} inner_color 0.35 asym_multiplier 0.315 asym_falloff 2.35 asym_angle 28 mult_num {{"parent.lensPieceMainAdditional + 3"}} mult_seed {{parent.lensPieceMainSeed}} mult_offset 7.9 mult_size 0.9 mult_color 1.8 mult_brightness -0.66 mult_visibility -0.74 mult_flattening 1 mult_rotate 0.7 name Flare266 xpos -470 ypos 6175 disable {{"parent.lensPieceMainType == 8 ? 0 : 1"}} } Blur { size 6.2 name Blur120 xpos -470 ypos 6217 } Merge2 { inputs 2 operation plus maskChannelMask none mix 0.06 name Merge247 xpos -470 ypos 6315 } Dot { name Dot117 xpos -436 ypos 6836 } Noise { inputs 0 size {{100*(parent.flareCoreSize)+(parent.lensPieceMainSize)}} lacunarity 1.84 gain 0.425 center {320 240} name Noise18 xpos -747 ypos 6406 } Flare { inputs 0 position {{parent.Flare188.position.x} {parent.Flare188.position.y}} offset {{parent.lensPieceMainOffset}} radius {0 50.86 125.81} size_mult {{"parent.Flare188.size_mult * 1.1"}} anamorph {{parent.Flare179.anamorph}} ring_color 0.7 inner_color 0.01 outer_falloff 1.35 inner_falloff 2.5 chroma_spread 0.1 chroma_shift 0.4 vis_out 1.2 vis_mask -rgba.alpha flattening 0.15 sharpness 0 corners_angle -16 asym_multiplier 0 asym_falloff 2.7 asym_angle -112 mult_num {{parent.Flare188.mult_num}} mult_seed {{parent.Flare188.mult_seed}} mult_offset {{"parent.Flare188.mult_offset + 0.3"}} mult_size {{"parent.Flare188.mult_size * 0.7"}} name Flare103 label Source xpos -789 ypos 6262 disable {{parent.Flare188.disable}} } Flare { inputs 0 position {{parent.Flare188.position.x} {parent.Flare188.position.y}} offset {{parent.Flare188.offset}} radius {28.41 80.69 101.66} size_mult {{parent.Flare188.size_mult}} anamorph {{"parent.anomalyAnamorph * 1.155"}} ring_color 0.7 inner_color 0.01 outer_falloff 1.35 inner_falloff 2.5 chroma_spread 0.1 chroma_shift 0.4 brightness 0.31 vis_out 1.2 vis_mask -rgba.alpha flattening 0.15 sharpness 0 corners_angle -16 asym_multiplier 0 asym_falloff 2.7 asym_angle 38 mult_num {{parent.Flare188.mult_num}} mult_seed {{parent.Flare188.mult_seed}} mult_offset {{"parent.Flare188.mult_offset * 1.06"}} mult_size {{"parent.Flare188.mult_size * 0.7"}} name Flare179 label Source xpos -792 ypos 6204 disable {{parent.Flare188.disable}} } Flare { inputs 0 position {{parent.flarePos.x x11 322} {parent.flarePos.y x11 650}} offset {{parent.lensPieceMainOffset}} radius {71.02 90.68 127.43} size_mult {{"parent.flareCoreSize * parent.lensPieceMainSize"}} anamorph 1.55 ring_color 0.29 inner_color {0.2225581408 0.276279062 0.3300000131} inner_falloff 0.7 chroma_spread 0.065 chroma_shift 14.6 chroma_shift_angle 52 brightness 0.18 vis_mask -rgba.alpha asym_angle -28 mult_num {{"2 + parent.lensPieceMainAdditional"}} mult_seed {{parent.lensPieceMainSeed}} mult_offset {{5.9+parent.lensPieceMainOffset}} mult_size {{1.32+parent.lensPieceMainSize}} mult_color -0.1 mult_brightness -0.78 mult_visibility 0.06 mult_flattening 0.06 mult_rotate 0.18 name Flare188 label Bits xpos -886 ypos 6143 disable {{"parent.lensPieceMainType == 7 ? 0 : 1"}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge158 xpos -886 ypos 6210 } Merge2 { inputs 2 operation stencil Achannels {rgba.red rgba.green rgba.blue rgba.red} maskChannelMask none mix 0.57 name Merge159 xpos -886 ypos 6268 } Merge { inputs 2 operation in mix 0.845 name Merge157 xpos -886 ypos 6406 } Grade { multiply 3 maskChannelMask none name Grade38 xpos -886 ypos 6432 } Glow { size 20 maskChannelMask none name Glow9 xpos -886 ypos 6469 } Dot { name Dot116 xpos -852 ypos 6802 } Radial { inputs 0 maskChannelMask none area {0 0 {root.width} {root.height}} name Radial7 xpos -1220 ypos 6470 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{parent.lensPieceMainOffset}} radius {16.37 34.91 72.4} size_mult {{"parent.lensPieceMainSize * parent.flareCoreSize"}} anamorph 1.8 ring_color {0.692071 0.0696023 0.00848491} inner_color {0.5 0.0967598 0.0334461} chroma_shift_angle_add true brightness 0.19 flattening 0.8 sharpness 0.58 mult_num {{"4 + parent.lensPieceMainAdditional"}} mult_seed {{parent.lensPieceMainSeed}} mult_offset {{2.1+parent.lensPieceMainOffset}} mult_size {{.32+parent.lensPieceMainSize}} mult_color -0.3 mult_brightness -0.82 name Flare180 label Big_Red xpos -1526 ypos 6138 disable {{"parent.lensPieceMainType == 6 ? 0 : 1"}} } Flare { position {{parent.Flare180.position.x} {parent.Flare180.position.y}} offset {{"parent.flareCoreSize * 0.92"}} radius {17.72 31.88 48.99} size_mult {{parent.Flare180.size_mult}} anamorph 1.8 ring_color {1 0.5505269766 0.07443982363} inner_color {0.7400000095 0.590524435 0.3758593202} brightness 0.035 flattening 1 sharpness 0.85 mult_num {{"parent.Flare180.mult_num + 6"}} mult_seed {{parent.Flare180.mult_seed}} mult_offset {{"parent.Flare180.mult_offset * 1.12"}} mult_size {{parent.Flare180.mult_size}} mult_color -0.3 mult_brightness -0.38 mult_flattening -0.24 name Flare181 label Multi_Orange xpos -1526 ypos 6176 disable {{parent.Flare180.disable}} } Flare { position {{parent.Flare180.position.x} {parent.Flare180.position.y}} offset {{"parent.flareCoreSize * 1.13"}} radius {89.49 101.23 133.29} size_mult {{parent.Flare180.size_mult}} anamorph 1.8 ring_color {0.716 0.048 0.009} inner_color 0.003 chroma_shift_angle_add true asym_multiplier 0 asym_falloff 3.3 asym_angle -36 mult_seed {{parent.Flare180.mult_seed}} name Flare182 label Half_Concave xpos -1526 ypos 6214 disable {{parent.Flare180.disable}} } Flare { position {{parent.Flare180.position.x} {parent.Flare180.position.y}} offset {{"parent.flareCoreSize * 1.2"}} radius {164.77 178.61 214.62} size_mult {{parent.Flare180.size_mult}} anamorph 2.1 ring_color {0.716 0.048 0.009} inner_color 0 chroma_shift_angle_add true brightness 0.4 asym_multiplier 0 asym_falloff 3.3 asym_angle -220 mult_seed {{parent.Flare180.mult_seed}} name Flare183 label Half_Convex xpos -1526 ypos 6252 disable {{parent.Flare180.disable}} } Flare { position {{parent.Flare180.position.x} {parent.Flare180.position.y}} offset {{"parent.flareCoreSize * 0.97"}} radius {71.02 101.23 137.55} size_mult {{parent.Flare180.size_mult}} anamorph 2.8 ring_color {0.716 0.048 0.009} inner_color 0.003 chroma_shift_angle_add true asym_multiplier 0 asym_falloff 3.3 asym_angle -36 mult_seed {{parent.Flare180.mult_seed}} name Flare101 label Half_Concave xpos -1526 ypos 6290 disable {{parent.Flare180.disable}} } Flare { position {{parent.Flare180.position.x} {parent.Flare180.position.y}} offset {{"parent.flareCoreSize * 0.92"}} radius {113.63 178.61 214.62} size_mult {{parent.Flare180.size_mult}} anamorph 2.8 ring_color {0.716 0.048 0.009} inner_color 0 chroma_shift_angle_add true brightness 0.4 asym_multiplier 0 asym_falloff 3.3 asym_angle -220 mult_seed {{parent.Flare180.mult_seed}} name Flare102 label Half_Convex xpos -1526 ypos 6328 disable {{parent.Flare180.disable}} } Flare { inputs 0 position {{parent.Flare180.position.x} {parent.Flare180.position.y}} offset {{parent.flareCoreSize}} radius {65.34 75.93 114.18} size_mult {{parent.Flare180.size_mult}} anamorph 2.66 ring_color {1 0.111784 0} inner_color {1 0.111784 0} outer_falloff 1.9 chroma_spread 0.046 brightness 0.3 flattening 0.7 mult_num 2 name Flare184 label Orange_Glow02 xpos -1404 ypos 6166 disable {{parent.Flare180.disable}} } Flare { position {{parent.Flare180.position.x} {parent.Flare180.position.y}} offset {{"parent.flareCoreSize * 1.15"}} radius {0 72.31 213.3} size_mult {{"parent.Flare180.size_mult * 0.9"}} anamorph 1.7 ring_color {1.54601 0.0067025 0} inner_color {3.17968 0.0106466 0} outer_falloff 2 brightness 0.4 name Flare185 label Little_Red_01 xpos -1404 ypos 6204 disable {{parent.Flare180.disable}} } Flare { position {{parent.Flare180.position.x} {parent.Flare180.position.y}} offset {{"parent.flareCoreSize * 1.156"}} radius {0 72.31 166.65} size_mult {{"parent.Flare180.size_mult * 0.85"}} anamorph 2 ring_color {1 0.00519486 0} inner_color {1.72586 0.00716965 0} outer_falloff 2 brightness 0.6 flattening 0.02 asym_multiplier 0.125 asym_falloff 1.35 asym_angle -200 name Flare186 label Little_Red_02 xpos -1404 ypos 6242 disable {{parent.Flare180.disable}} } Flare { position {{parent.Flare180.position.x} {parent.Flare180.position.y}} offset {{"parent.flareCoreSize * 1.5"}} radius {0 75.15 198.64} size_mult {{"parent.Flare180.size_mult * 0.9"}} anamorph 2 ring_color {1.69674 0.00709478 0} inner_color {3.11749 0.0105057 0} outer_falloff 2 brightness 0.6 flattening 0.9 name Flare187 label Little_Red_03 xpos -1404 ypos 6280 disable {{parent.Flare180.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge121 xpos -1404 ypos 6334 } Saturation { saturation 0 maskChannelMask none name Saturation20 xpos -1404 ypos 6360 } set N98094c00 [stack 0] Transform { rotate 2 center {{parent.flarePos.x} {parent.flarePos.y}} name Transform56 xpos -1279 ypos 6360 } Blur { size {300 2} name Blur30 xpos -1279 ypos 6386 } push $N98094c00 Merge2 { inputs 2 operation screen maskChannelMask none name Merge110 xpos -1404 ypos 6404 } Glow { brightness 0.4 size 31 maskChannelMask none name Glow4 xpos -1404 ypos 6430 } Merge2 { inputs 2 operation mask maskChannelMask none name Merge156 xpos -1404 ypos 6470 } Dot { name Dot115 xpos -1370 ypos 6837 } Noise { inputs 0 size {{100*(parent.flareCoreSize+(parent.lensPieceMainSize))}} lacunarity 1.84 gain 0.425 center {320 240} name Noise16 xpos -1685 ypos 6681 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} radius {15.62 22.5 30.84} size_mult {{(parent.flareCoreSize)*(parent.lensPieceMainSize)}} anamorph 1.35072 ring_color 0.1525 inner_color 0.135 outer_falloff 0.86 inner_falloff 0.9 chroma_spread 0.038 brightness 0.034 vis_mask -rgba.alpha flattening 0.7 mult_num {{20+(parent.lensPieceMainAdditional)}} mult_seed {{(parent.lensPieceMainSeed)}} mult_offset {{3.9+(parent.lensPieceMainOffset)}} mult_size {{.82+(parent.lensPieceMainSizeVariation)}} mult_color -0.85 mult_brightness -0.18 mult_visibility 0.18 mult_rotate 0.08 name Flare57 label Bits xpos -1824 ypos 6508 disable {{"parent.lensPieceMainType == 5 ? 0 : 1"}} } Flare { position {{parent.Flare57.position.x} {parent.Flare57.position.y}} radius {21.87 28.75 47.03} size_mult {{"parent.Flare57.size_mult * 1.02"}} anamorph 1.44 ring_color 0.1525 inner_color 0.135 outer_falloff 0.86 inner_falloff 0.9 chroma_spread 0.062 brightness 0.016 vis_mask -rgba.alpha flattening 0.7 mult_num {{"parent.Flare57.mult_num - 15"}} mult_seed {{(parent.lensPieceMainSeed)}} mult_offset {{"parent.Flare57.mult_offset + 4.1"}} mult_size {{"parent.Flare57.mult_size * 0.9"}} mult_color 0.6 mult_brightness -0.72 mult_visibility -0.18 name Flare58 label Pieces xpos -1824 ypos 6557 disable {{parent.Flare57.disable}} } Grade { multiply 8 name Grade36 xpos -1824 ypos 6595 } Merge { inputs 2 operation in mix 0.845 name Merge76 xpos -1824 ypos 6681 } Grade { multiply 3 maskChannelMask none name Grade37 xpos -1824 ypos 6707 } Glow { size 20 maskChannelMask none name Glow8 xpos -1824 ypos 6733 } Dot { name Dot114 xpos -1790 ypos 6842 } Flare { inputs 0 position {{parent.flarePos.x i} {parent.flarePos.y i}} offset {{parent.flareCoreSize i}} radius {33.35 53.35 73.35} size_mult {{(parent.flareCoreSize)*(parent.lensPieceMainSize)}} ring_color {0.19 0.325 0.1} inner_color {0.19 0.325 0.1} chroma_spread 0.028 brightness 0.06 vis_mask -rgba.alpha corners 3 flattening 0.9 sharpness 0.56 mult_num {{5+(parent.lensPieceMainAdditional) i}} mult_seed {{(parent.lensPieceMainSeed) i}} mult_offset {{++(parent.lensPieceMainOffset) i}} mult_size {{1+(parent.lensPieceMainSizeVariation) i}} mult_color 0.1 mult_brightness -0.66 mult_flattening -1 name Flare68 xpos -1962 ypos 6209 disable {{"parent.lensPieceMainType == 4 ? 0 : 1" i}} } Flare { position {{parent.Flare68.position.x} {parent.Flare68.position.y}} offset {{"parent.Flare68.offset - 1"}} radius {0 9.8 28.34} size_mult {{parent.Flare68.size_mult}} ring_color {0.19 0.325 0.1} inner_color {0.19 0.325 0.1} chroma_spread 0.068 brightness 0.085 vis_mask -rgba.alpha corners 3 flattening 0.9 mult_num {{15+(parent.lensPieceMainAdditional)}} mult_seed {{parent.Flare68.mult_seed}} mult_offset {{4+(parent.lensPieceMainOffset)}} mult_size {{1+(parent.lensPieceMainSizeVariation)}} mult_color 0.5 mult_brightness -0.64 mult_visibility -0.84 mult_flattening -1 name Flare70 xpos -1962 ypos 6235 disable {{parent.Flare68.disable}} } Flare { position {{parent.Flare68.position.x} {parent.Flare68.position.y}} offset {{"parent.Flare68.offset - 1"}} radius {0 5.43 9.39} size_mult {{parent.Flare68.size_mult}} ring_color {0.19 0.325 0.1} inner_color {0.19 0.325 0.1} chroma_spread 0.036 brightness 0.048 vis_mask -rgba.alpha corners 3 flattening 0.9 mult_num {{15+(parent.lensPieceMainAdditional)}} mult_seed {{parent.Flare68.mult_seed}} mult_offset {{4.3+(parent.lensPieceMainOffset)}} mult_size {{1+(parent.lensPieceMainSizeVariation)}} mult_color 0.45 mult_brightness -0.78 mult_visibility -0.84 mult_flattening -1 name Flare71 xpos -1962 ypos 6261 disable {{parent.Flare68.disable}} } Grade { multiply 2.5 maskChannelMask none name Grade35 xpos -1962 ypos 6287 } Glow { brightness 2.04 size 31 maskChannelMask none name Glow7 xpos -1962 ypos 6313 } Dot { name Dot113 xpos -1928 ypos 6866 } Flare { inputs 0 position {{parent.Flare31.position.x} {parent.Flare31.position.y}} offset {{"parent.Flare31.offset + 0.55"}} radius {45.45 54.05 55.75} size_mult {{parent.Flare31.size_mult}} ring_color {0.717144 0.831651 0.231489} inner_color {0.290861 0.320133 0.150273} brightness 0.32 flattening 0.5 asym_multiplier 0 asym_falloff 0.62 asym_angle -88 name Flare21 label Little_Yellow_01 xpos -2265 ypos 6183 disable {{parent.Flare31.disable}} } Flare { position {{parent.Flare31.position.x} {parent.Flare31.position.y}} offset {{"parent.Flare31.offset + 0.55"}} radius {42.62 42.62 42.62} size_mult {{parent.Flare31.size_mult}} ring_color {0.717144 0.831651 0.231489} inner_color {0.290861 0.320133 0.150273} brightness 0.32 flattening 0.5 asym_multiplier 0 asym_falloff 0.62 asym_angle -88 name Flare22 label Little_Yellow_02 xpos -2265 ypos 6221 disable {{parent.Flare31.disable}} } Flare { position {{parent.Flare31.position.x} {parent.Flare31.position.y}} offset {{"parent.Flare31.offset + 0.58"}} radius {21.31 29.59 32.78} size_mult {{parent.Flare31.size_mult}} ring_color {0.717144 0.831651 0.231489} inner_color {0.290861 0.320133 0.150273} brightness 0.2 flattening 0.5 asym_multiplier 0 asym_falloff 0.62 asym_angle -88 name Flare28 label Little_Yellow_03 xpos -2265 ypos 6259 disable {{parent.Flare31.disable}} } Flare { position {{parent.Flare31.position.x} {parent.Flare31.position.y}} offset {{"parent.Flare31.offset + 0.58"}} radius {11.36 15.16 24.44} size_mult {{parent.Flare31.size_mult}} ring_color {0.717144 0.831651 0.231489} inner_color {0.290861 0.320133 0.150273} brightness 0.11 flattening 0.3 asym_multiplier 0.135 asym_falloff 0.44 asym_angle -102 name Flare29 label Little_Yellow_04 xpos -2265 ypos 6297 disable {{parent.Flare31.disable}} } Flare { position {{parent.Flare31.position.x} {parent.Flare31.position.y}} offset {{"parent.Flare31.offset + 0.56"}} radius {18.82 34.78 39.89} size_mult {{parent.Flare31.size_mult}} ring_color {0.717144 0.831651 0.231489} inner_color {0.290861 0.320133 0.150273} chroma_spread 0.068 brightness 0.06 flattening 0.1 asym_multiplier 0.135 asym_falloff 0.44 asym_angle -102 name Flare30 label Little_Yellow_05 xpos -2265 ypos 6335 disable {{parent.Flare31.disable}} } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{parent.flareCoreSize}} radius {16.37 34.91 72.4} size_mult {{(parent.flareCoreSize)*(parent.lensPieceMainSize)}} ring_color {0.692071 0.0696023 0.00848491} inner_color {0.5 0.0967598 0.0334461} chroma_shift_angle_add true brightness 0.19 corners 6 flattening 0.3 sharpness 0.58 mult_num {{6+(parent.lensPieceMainAdditional)}} mult_seed {{(parent.lensPieceMainSeed)}} mult_offset {{2.1+(parent.lensPieceMainOffset)}} mult_size {{.32+(parent.lensPieceMainSizeVariation)}} mult_color -0.3 mult_brightness -0.82 mult_rotate -0.65 name Flare31 label Big_Red xpos -2370 ypos 6182 disable {{"parent.lensPieceMainType == 3 ? 0 : 1"}} } Flare { position {{parent.Flare31.position.x} {parent.Flare31.position.y}} offset {{"parent.Flare31.offset - 0.8"}} radius {17.72 31.88 48.99} size_mult {{parent.Flare31.size_mult}} ring_color {1 0.550527 0.0744398} inner_color {0.5 0.399003 0.253959} brightness 0.02 corners 6 flattening 0.9 sharpness 0.95 mult_num {{8+(parent.lensPieceMainAdditional)}} mult_seed {{(parent.lensPieceMainSeed)}} mult_offset {{3.3+(parent.lensPieceMainOffset)}} mult_size {{.34+(parent.lensPieceMainSizeVariation)}} mult_color -0.3 mult_brightness -0.38 mult_flattening -0.24 name Flare32 label Multi_Orange xpos -2370 ypos 6220 disable {{parent.Flare31.disable}} } Flare { position {{parent.Flare31.position.x} {parent.Flare31.position.y}} offset {{"parent.Flare31.offset + 0.13"}} radius {0 11.74 19.65} size_mult {{parent.Flare31.size_mult}} ring_color {0.716 0.048 0.009} inner_color 0.003 chroma_shift_angle_add true asym_multiplier 0 asym_falloff 3.3 asym_angle -36 name Flare33 label Half_Concave xpos -2370 ypos 6261 disable {{parent.Flare31.disable}} } Flare { position {{parent.Flare31.position.x} {parent.Flare31.position.y}} offset {{"parent.Flare31.offset + 0.202"}} radius {0 13.84 20.02} size_mult {{parent.Flare31.size_mult}} ring_color {0.716 0.048 0.009} inner_color 0 chroma_shift_angle_add true brightness 0.4 asym_multiplier 0 asym_falloff 3.3 asym_angle -220 name Flare34 label Half_Convex xpos -2370 ypos 6299 disable {{parent.Flare31.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none mix 0.4 name Merge73 xpos -2370 ypos 6381 } Flare { inputs 0 position {{parent.Flare31.position.x} {parent.Flare31.position.y}} offset {{"parent.Flare31.offset + 0.9"}} radius {0 10.59 31.79} size_mult {{parent.Flare31.size_mult}} anamorph 1.06 ring_color {1 0.111784 0} inner_color {1 0.111784 0} outer_falloff 1.9 chroma_spread 0.046 brightness 0.3 mult_num 2 name Flare35 label Orange_Glow02 xpos -2163 ypos 6218 disable {{parent.Flare31.disable}} } Flare { position {{parent.Flare31.position.x} {parent.Flare31.position.y}} offset {{"parent.Flare31.offset + 1.5"}} radius {0 72.31 213.3} size_mult {{-((parent.flareCoreSize))*(parent.lensPieceMainSize)}} ring_color {1.54601 0.0067025 0} inner_color {3.17968 0.0106466 0} outer_falloff 2 brightness 0.4 name Flare37 label Little_Red_01 xpos -2163 ypos 6256 disable {{parent.Flare31.disable}} } Flare { position {{parent.Flare31.position.x} {parent.Flare31.position.y}} offset {{"parent.Flare31.offset + 1.565"}} radius {0 72.31 166.65} size_mult {{-((parent.flareCoreSize))*(parent.lensPieceMainSize)}} ring_color {1 0.00519486 0} inner_color {1.72586 0.00716965 0} outer_falloff 2 brightness 0.6 asym_multiplier 0.125 asym_falloff 1.35 asym_angle -200 name Flare50 label Little_Red_02 xpos -2163 ypos 6294 disable {{parent.Flare31.disable}} } Flare { position {{parent.Flare31.position.x} {parent.Flare31.position.y}} offset {{"parent.Flare31.offset + 1.56"}} radius {0 72.31 195.8} size_mult {{-((parent.flareCoreSize))*(parent.lensPieceMainSize)}} ring_color {1.69674 0.00709478 0} inner_color {3.11749 0.0105057 0} outer_falloff 2 brightness 0.6 name Flare51 label Little_Red_03 xpos -2163 ypos 6332 disable {{parent.Flare31.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge75 xpos -2268 ypos 6381 } Saturation { saturation 0 maskChannelMask none name Saturation19 xpos -2372 ypos 6427 } Dot { name Dot109 xpos -2338 ypos 6898 } Noise { inputs 0 size {{100*(parent.flareCoreSize)+(parent.lensPieceMainSize)}} lacunarity 1.84 gain 0.425 center {320 240} name Noise13 xpos -2548 ypos 6414 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 1 radius {0 8.33 13.75} size_mult {{(parent.flareCoreSize)*(parent.lensPieceMainSize)}} ring_color {0.338333 0.403333 0.338333} inner_color 0.37 chroma_spread 0.062 chroma_shift_angle_add true brightness 0.04 vis_mask -rgba.alpha corners 6 flattening 0.6 sharpness 0.86 mult_num {{10+(parent.lensPieceMainAdditional)}} mult_seed {{(parent.lensPieceMainSeed)}} mult_offset {{5+(parent.lensPieceMainOffset)}} mult_size {{-0.02+(parent.lensPieceMainSizeVariation)}} mult_color 1.5 mult_brightness -1 name Flare19 xpos -2696 ypos 6191 disable {{"parent.lensPieceMainType == 2 ? 0 : 1"}} } Flare { position {{parent.Flare19.position.x} {parent.Flare19.position.y}} radius {0 8.33 13.75} size_mult {{(parent.flareCoreSize)+(parent.lensPieceMainSize)}} ring_color {0.338333 0.403333 0.338333} inner_color 0.29 brightness 0.105 vis_mask -rgba.alpha corners 6 flattening 1 sharpness 0.86 mult_num {{3+(parent.ffx_more_pieces)}} mult_seed {{(parent.ffx_pieces_seed)}} mult_offset {{3.05+(parent.ffx_pieces_offset)}} mult_size {{-0.32+(parent.ffx_pieces_size)}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare23 xpos -2696 ypos 6217 disable {{parent.Flare19.disable}} } Flare { position {{parent.Flare19.position.x} {parent.Flare19.position.y}} radius {0 8.33 13.75} size_mult {{(parent.flareCoreSize)+(parent.lensPieceMainSize)}} ring_color {0.338333 0.34 0.37} inner_color 0.29 chroma_spread 0.07 brightness 0.13 vis_mask -rgba.alpha corners 6 flattening 1 sharpness 0.86 mult_num {{10+(parent.ffx_more_pieces)}} mult_seed {{(parent.ffx_pieces_seed)}} mult_offset {{1.65+(parent.ffx_pieces_offset)}} mult_size {{0.72+(parent.ffx_pieces_size)}} mult_color -1.95 mult_brightness -1 mult_visibility -0.34 mult_flattening -0.4 mult_rotate 0.5 name Flare24 xpos -2696 ypos 6243 disable {{parent.Flare19.disable}} } Saturation { saturation 0.6 name Saturation18 xpos -2696 ypos 6271 } Flare { position {{parent.Flare19.position.x} {parent.Flare19.position.y}} offset 1.45 radius {20.94 29.27 34.69} size_mult {{(parent.flareCoreSize)+(parent.lensPieceMainSize)}} ring_color {0.338333 0.403333 0.338333} inner_color 0.32 brightness 0.105 vis_mask -rgba.alpha corners 6 flattening 0.7 sharpness 0.86 mult_num {{2+(parent.ffx_more_pieces)}} mult_seed {{(parent.ffx_pieces_seed)}} mult_offset {{1+(parent.ffx_pieces_offset)}} mult_size {{-0.32+(parent.ffx_pieces_size)}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 0.8 name Flare25 xpos -2696 ypos 6297 disable {{parent.Flare19.disable}} } Blur { size 4 name Blur29 xpos -2696 ypos 6324 } Grade { white {1 1 2 1} multiply 4 name Grade67 xpos -2696 ypos 6362 } Flare { position {{parent.Flare19.position.x} {parent.Flare19.position.y}} offset 1.9 radius {37.95 46.28 50.39} size_mult {{(parent.flareCoreSize)+(parent.lensPieceMainSize)}} anamorph 0.7 ring_color {0.338333 0.403333 0.338333} inner_color 0.295 outer_falloff 0.7 inner_falloff 4.8 chroma_spread 0.018 chroma_shift 0.2 chroma_shift_angle 46 brightness 0.03 vis_mask -rgba.alpha corners 6 sharpness 0.86 asym_multiplier 0 asym_falloff 10 asym_angle -28 mult_num {{1+(parent.ffx_more_pieces)}} mult_seed {{(parent.ffx_pieces_seed)}} mult_offset {{-0.3+(parent.ffx_pieces_offset)}} mult_size {{0.2+(parent.ffx_pieces_size)}} mult_color -0.1 mult_brightness -1 mult_flattening -0.68 mult_rotate 1 name Flare26 xpos -2696 ypos 6388 disable {{parent.Flare19.disable}} } Merge { inputs 2 operation in mix 0.745 name Merge67 xpos -2696 ypos 6414 } Dot { name Dot108 xpos -2662 ypos 6918 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset 0.139442 radius {34.09 39.3 53.38} size_mult {{(parent.flareCoreSize)*(parent.lensPieceMainSize)}} ring_color 0.59 inner_color 0.76 brightness 0.5 flattening 0.7 sharpness 1 mult_num {{8+(parent.lensPieceMainAdditional)}} mult_seed {{(parent.lensPieceMainSeed)}} mult_offset {{2.35+(parent.lensPieceMainOffset)}} mult_size {{1+(parent.lensPieceMainSizeVariation)}} mult_color 0.95 mult_brightness -0.72 mult_visibility 0.12 name Flare27 xpos -2819 ypos 6607 disable {{"parent.lensPieceMainType == 1 ? 0 : 1"}} } Glow { maskChannelMask none name Glow6 xpos -2819 ypos 6633 } Noise { inputs 0 size {{100*(parent.flareCoreSize)+(parent.lensPieceMainSize)}} lacunarity 1.84 gain 0.425 center {320 240} name Noise11 xpos -2929 ypos 6670 } Merge { inputs 2 operation in name Merge63 xpos -2819 ypos 6670 } Dot { name Dot107 xpos -2785 ypos 6964 } Flare { inputs 0 position {{parent.flarePos.x} {parent.flarePos.y}} offset {{(parent.flareCoreSize)-1}} radius {14.8 24.44 28.18} size_mult {{(parent.flareCoreSize)*(parent.lensPieceMainSize)}} anamorph 1.2 inner_color 1 corners 6 flattening 0.573007 sharpness 0.861716 mult_num {{12+(parent.lensPieceMainAdditional)}} mult_seed {{(parent.lensPieceMainSeed)}} mult_offset {{5+(parent.flareCoreSize)+(parent.lensPieceMainOffset)}} mult_size {{.44+(parent.lensPieceMainSizeVariation)}} mult_color 1.35 mult_brightness -0.758621 mult_visibility -0.701149 mult_rotate 0.4 name Flare20 xpos -3050 ypos 6285 disable {{"parent.lensPieceMainType == 0 ? 0 : 1"}} } Saturation { saturation 0 maskChannelMask none name Saturation16 xpos -3050 ypos 6325 } Glow { maskChannelMask none name Glow29 xpos -3050 ypos 6359 } Dot { name Dot96 xpos -3016 ypos 7009 } Switch { inputs 10 which {{parent.lensPieceMainType}} name lens_anomolies1 xpos -140 ypos 7005 } Crop { box {0 0 {root.width} {root.height}} name Crop1 xpos -2 ypos 7005 } Clamp { name Clamp3 xpos 129 ypos 6999 } Grade { multiply {{parent.lensPieceMainColour.r} {parent.lensPieceMainColour.g} {parent.lensPieceMainColour.b} 0} white_clamp true maskChannelMask none name grade label "lens pieces grade" xpos 281 ypos 6999 } Blur { size {{parent.lensPieceMainBlur}} name Blur27 label "lens pieces blur" xpos 410 ypos 6992 } Group { name Static_Noise5 help "Adds synthetic grain. Push \"presets\" to get predefined types of grain, these are the correct size for 2K scans.\n\nYou can also adjust the sliders to match a sample piece of grain. Find a sample with a rather constant background, blur it to remove the grain, and use as input to this. View with a wipe in the viewer so you can make a match. It helps to view and match each of the red, green, blue seperately." tile_color 0x992620ff note_font "Bitstream Vera Sans" xpos 532 ypos 7006 dope_sheet true mapsize {0.15 0.15} addUserKnob {20 master_control l Master} addUserKnob {7 noise_intensity_global l Intensity R 0 2} noise_intensity_global 0.52 addUserKnob {7 rgb_size_multiplier l Size R 0 2} rgb_size_multiplier 1 addUserKnob {26 ""} addUserKnob {6 no_alpha l "no alpha?" t "Check this box if your image doesn't have an alpha and you cannot use another alpha channel.\n\n(Note: This WILL cause the grain to be more prevalent. So please compensate using the Noise Size and Noise Intensity controls above.)" +STARTLINE} no_alpha true addUserKnob {20 adv_controls l Advanced} addUserKnob {20 fractal_noise_size l "RGB Noise Size" n 1} fractal_noise_size 0 addUserKnob {14 red_size l r R 0 100} red_size 1.7 addUserKnob {14 green_size l g R 0 100} green_size 1.6 addUserKnob {14 blue_size l b R 0 100} blue_size 1.5 addUserKnob {20 endGroup n -1} addUserKnob {20 noise_irregularity l "RGB Noise Irregularity" n 1} noise_irregularity 0 addUserKnob {7 red_i l r} red_i 1 addUserKnob {7 green_i l g} green_i 0.75 addUserKnob {7 blue_i l b} blue_i 0.65 addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 noise_intensity l "RGB Noise Intensity" n 1} noise_intensity 0 addUserKnob {7 red_m l r t "Amount of grain to add to a white pixel"} red_m 0.2 addUserKnob {7 green_m l g} green_m 0.4 addUserKnob {7 blue_m l b} blue_m 0.6 addUserKnob {18 black t "Amount of grain to add everywhere"} black {0 0 0} addUserKnob {6 black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 minimum t "Minimum black level" R 0 0.01} minimum {0 0 0} addUserKnob {6 minimum_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {26 ""} addUserKnob {3 seed l Seed} seed 134 addUserKnob {32 reset l Reset T "knobs this \{rgb_size_multiplier 0 red_size 1.70 green_size 1.60 blue_size 1.50 red_i 1.00 green_i 0.75 blue_i 0.65 red_m 0.40 green_m 0.60 blue_m 1.65 black 0.00\}" +STARTLINE} } Input { inputs 0 name Input1 xpos 0 } set N95e11800 [stack 0] Noise { output {rgba.red -rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.red_size.w*(rgb_size_multiplier) i} {parent.red_size.h*(rgb_size_multiplier) i}} octaves 2 gamma 1 xrotate {{red_i*45 i}} yrotate {{red_i*45 i}} name red xpos 144 ypos -7 } Noise { output {-rgba.red rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.green_size.w*(rgb_size_multiplier) i} {parent.green_size.h*(rgb_size_multiplier) i}} zoffset 10 octaves 2 gamma 1 xrotate {{green_i*45 i}} yrotate {{green_i*45 i}} name green xpos 144 ypos 35 } Noise { output {-rgba.red -rgba.green rgba.blue -rgba.alpha} cliptype none replace true size {{parent.blue_size.w*(rgb_size_multiplier) i} {parent.blue_size.h*(rgb_size_multiplier) i}} zoffset 20 octaves 2 gamma 1 xrotate {{blue_i*45 i}} yrotate {{blue_i*45 i}} name blue xpos 144 ypos 77 } push $N95e11800 MergeExpression { inputs 2 expr0 max(minimum.r,r+(2*Ar-1)*(r*red_m*noise_intensity_global)) expr1 max(minimum.g,g+(2*Ag-1)*(g*green_m*noise_intensity_global)) expr2 max(minimum.b,b+(2*Ab-1)*(b*blue_m*noise_intensity_global)) name MergeExpression1 xpos 144 ypos 117 } set N95e10800 [stack 0] push $N95e10800 push $N95e11800 Copy { inputs 2 channels rgb maskChannelInput rgba.alpha name Copy1 xpos 0 ypos 105 disable {{parent.no_alpha i}} } Switch { inputs 2 which {{parent.no_alpha i}} name Switch1 xpos 144 ypos 171 } Output { name Output1 xpos 144 ypos 219 } end_group Dot { name Dot38 xpos 657 ypos 7009 } set N95d7f800 [stack 0] Saturation { saturation 0 name Saturation17 xpos 624 ypos 7055 } push $N95d7f800 Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy17 xpos 767 ypos 6999 } Flare { inputs 0 position {{"parent.flarePos.x + parent.anomalyPosOffset.w"} {"parent.flarePos.y + parent.anomalyPosOffset.h"}} offset {{parent.anomalyRotOffset}} radius {0 38.8 87.21} size_mult 16 anamorph 1.16 inner_color 0 outer_falloff 14 inner_falloff 10 chroma_spread -0.03 brightness 0.53 asym_repeat 2 asym_multiplier 0 asym_falloff 1.55 asym_angle {{(parent.ffx_position.x)-92}} name Flare267 xpos 699 ypos 5221 disable {{"parent.anomalyType == 8 ? 0 : 1"}} } Grade { gamma 0.75 maskChannelMask none unpremult -rgba.alpha name Grade50 xpos 699 ypos 5269 } Dot { name Dot45 xpos 733 ypos 5639 } Noise { inputs 0 size {{(parent.flareCoreSize*20)+80}} lacunarity 1.84 gain 0.435 gamma 0.81 center {320 240} name Noise10 xpos 170 ypos 5362 disable {{parent.Flare228.disable}} } Flare { inputs 0 position {{parent.Flare228.position.x} {parent.Flare228.position.y}} offset {{parent.anomalyRotOffset}} radius {0 3.97 32.72} size_mult {3.6 4.2} anamorph 10.08 ring_color {0 1 0.7899999619} inner_color {0.1000000238 1 0.8109999895} outer_falloff 1.3 inner_falloff 1.05 vis_mask -rgba.alpha name Flare227 xpos 460 ypos 5273 disable {{parent.Flare228.disable}} } Blur { size 25.5 name Blur20 xpos 460 ypos 5299 } Flare { inputs 0 position {{"parent.flarePos.x + parent.anomalyPosOffset.w"} {"parent.flarePos.y + parent.anomalyPosOffset.h"}} offset {{parent.anomalyRotOffset}} radius {0 27.23 44.38} size_mult {1.3 3.9} anamorph 23.52 inner_color 0 outer_falloff 1.45 inner_falloff 0.42 chroma_spread -0.21 brightness 0.65 vis_mask -rgba.alpha name Flare228 xpos 314 ypos 5221 disable {{"parent.anomalyType == 7 ? 0 : 1"}} } Blur { size {20 5} name Blur21 xpos 314 ypos 5247 } Merge { inputs 2 operation plus name Merge47 xpos 314 ypos 5305 } Merge { inputs 2 operation stencil mix 0.9 name Merge205 xpos 314 ypos 5362 } Glow { brightness 0.5 maskChannelMask none name Glow40 xpos 314 ypos 5402 } Dot { name Dot46 xpos 348 ypos 5617 } Flare { inputs 0 position {{parent.Flare132.position.x} {parent.Flare132.position.y}} offset {{parent.Flare132.offset}} radius {120.83 130.41 137.17} size_mult {{parent.Flare132.size_mult}} anamorph {{parent.Flare132.anamorph}} ring_color 0.7900000215 inner_color 0 outer_falloff 3.2 inner_falloff 5.6 chroma_shift 0.4 brightness 0.275 vis_mask -rgba.alpha sharpness 0 asym_multiplier 0 asym_falloff 10 asym_angle 144 name Flare44 label Source xpos -217 ypos 5578 disable {{parent.Flare132.disable}} } Flare { inputs 0 position {{parent.Flare132.position.x} {parent.Flare132.position.y}} offset {{parent.Flare132.offset}} radius {122.25 134.67 140.01} size_mult {{parent.Flare132.size_mult}} anamorph {{parent.Flare132.anamorph}} ring_color 0.7900000215 inner_color 0 outer_falloff 3.2 inner_falloff 5.6 chroma_shift 0.4 brightness 0.08 vis_mask -rgba.alpha flattening 0.15 sharpness 0 asym_multiplier 0 asym_falloff 4.6 asym_angle 144 name Flare45 label Source xpos -217 ypos 5517 disable {{parent.Flare132.disable}} } Flare { inputs 0 position {{parent.Flare132.position.x} {parent.Flare132.position.y}} offset {{parent.Flare132.offset}} radius {65.44 126.15 141.43} size_mult {{parent.Flare132.size_mult}} anamorph {{parent.Flare132.anamorph}} ring_color 0.7 inner_color 0 outer_falloff 3.8 inner_falloff 7.2 chroma_shift 0.4 brightness 0.08 vis_mask -rgba.alpha flattening 0.15 sharpness 0 asym_multiplier 0 asym_falloff 5 asym_angle 144 name Flare46 label Source xpos -107 ypos 5460 disable {{parent.Flare132.disable}} } Merge { inputs 2 operation plus name Merge90 xpos -107 ypos 5523 } Merge { inputs 2 operation plus name Merge92 xpos -107 ypos 5584 } Flare { inputs 0 position {{parent.Flare132.position.x} {parent.Flare132.position.y}} offset {{parent.Flare132.offset}} radius {130.77 141.77 148.53} size_mult {{parent.Flare132.size_mult}} anamorph {{parent.Flare132.anamorph}} ring_color 0.7900000215 inner_color 0 outer_falloff 3.2 inner_falloff 5.6 chroma_shift 0.4 brightness 0.48 vis_out 0.99 vis_mask -rgba.alpha sharpness 0 asym_multiplier 0 asym_falloff 6 asym_angle -40 name Flare126 label Source xpos -101 ypos 5390 disable {{parent.Flare132.disable}} } Flare { inputs 0 position {{parent.Flare132.position.x} {parent.Flare132.position.y}} offset {{parent.Flare132.offset}} radius {120.83 130.41 138.59} size_mult {{parent.Flare132.size_mult}} anamorph {{parent.Flare132.anamorph}} ring_color 0.7900000215 inner_color 0 outer_falloff 3.2 inner_falloff 5.6 chroma_shift 0.4 brightness 0.175 vis_mask -rgba.alpha sharpness 0 asym_multiplier 0 asym_falloff 10 asym_angle -40 name Flare129 label Source xpos -101 ypos 5292 disable {{parent.Flare132.disable}} } Flare { inputs 0 position {{parent.Flare132.position.x} {parent.Flare132.position.y}} offset {{parent.Flare132.offset}} radius {116.57 134.67 149.95} size_mult {{parent.Flare132.size_mult}} anamorph {{parent.Flare132.anamorph}} ring_color 0.7900000215 inner_color 0 outer_falloff 3.2 inner_falloff 5.6 chroma_shift 0.4 brightness 0.08 vis_mask -rgba.alpha flattening 0.15 sharpness 0 asym_multiplier 0 asym_falloff 4.6 asym_angle -40 name Flare131 label Source xpos -101 ypos 5231 disable {{parent.Flare132.disable}} } Flare { inputs 0 position {{"parent.flarePos.x + parent.anomalyPosOffset.w"} {"parent.flarePos.y + parent.anomalyPosOffset.h"}} offset {{parent.anomalyRotOffset}} radius {65.44 126.15 141.43} size_mult {{"(parent.anomalySize * parent.flareCoreSize) + 1.3"}} anamorph {{1+(parent.anomalyAnamorph)}} ring_color 0.7 inner_color 0 outer_falloff 3.8 inner_falloff 7.2 chroma_shift 0.4 brightness 0.08 vis_mask -rgba.alpha flattening 0.15 sharpness 0 asym_multiplier 0 asym_falloff 5 asym_angle -36 name Flare132 label Source xpos 9 ypos 5177 disable {{"parent.anomalyType == 6 ? 0 : 1"}} } Merge { inputs 2 operation plus name Merge93 xpos 9 ypos 5237 } Merge { inputs 2 operation plus name Merge94 xpos 9 ypos 5298 } Merge { inputs 2 operation plus name Merge95 xpos 9 ypos 5396 } Merge { inputs 2 operation plus name Merge96 xpos 9 ypos 5584 } Group { name Static_Noise2 help "Adds synthetic grain. Push \"presets\" to get predefined types of grain, these are the correct size for 2K scans.\n\nYou can also adjust the sliders to match a sample piece of grain. Find a sample with a rather constant background, blur it to remove the grain, and use as input to this. View with a wipe in the viewer so you can make a match. It helps to view and match each of the red, green, blue seperately." tile_color 0x992620ff note_font "Bitstream Vera Sans" xpos 9 ypos 5610 mapsize {0.15 0.15} addUserKnob {20 master_control l Master} addUserKnob {7 noise_intensity_global l Intensity R 0 2} noise_intensity_global 1.5 addUserKnob {7 rgb_size_multiplier l Size R 0 2} rgb_size_multiplier 1 addUserKnob {26 ""} addUserKnob {6 no_alpha l "no alpha?" t "Check this box if your image doesn't have an alpha and you cannot use another alpha channel.\n\n(Note: This WILL cause the grain to be more prevalent. So please compensate using the Noise Size and Noise Intensity controls above.)" +STARTLINE} no_alpha true addUserKnob {20 adv_controls l Advanced} addUserKnob {20 fractal_noise_size l "RGB Noise Size" n 1} fractal_noise_size 0 addUserKnob {14 red_size l r R 0 100} red_size 1.7 addUserKnob {14 green_size l g R 0 100} green_size 1.6 addUserKnob {14 blue_size l b R 0 100} blue_size 1.5 addUserKnob {20 endGroup n -1} addUserKnob {20 noise_irregularity l "RGB Noise Irregularity" n 1} noise_irregularity 0 addUserKnob {7 red_i l r} red_i 1 addUserKnob {7 green_i l g} green_i 0.75 addUserKnob {7 blue_i l b} blue_i 0.65 addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 noise_intensity l "RGB Noise Intensity" n 1} noise_intensity 0 addUserKnob {7 red_m l r t "Amount of grain to add to a white pixel"} red_m 0.2 addUserKnob {7 green_m l g} green_m 0.4 addUserKnob {7 blue_m l b} blue_m 0.6 addUserKnob {18 black t "Amount of grain to add everywhere"} black {0 0 0} addUserKnob {6 black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 minimum t "Minimum black level" R 0 0.01} minimum {0 0 0} addUserKnob {6 minimum_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {26 ""} addUserKnob {3 seed l Seed} seed 134 addUserKnob {32 reset l Reset T "knobs this \{rgb_size_multiplier 0 red_size 1.70 green_size 1.60 blue_size 1.50 red_i 1.00 green_i 0.75 blue_i 0.65 red_m 0.40 green_m 0.60 blue_m 1.65 black 0.00\}" +STARTLINE} } Input { inputs 0 name Input1 xpos 0 } set N95cb1800 [stack 0] Noise { output {rgba.red -rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.red_size.w*(rgb_size_multiplier) i} {parent.red_size.h*(rgb_size_multiplier) i}} octaves 2 gamma 1 xrotate {{red_i*45 i}} yrotate {{red_i*45 i}} name red xpos 144 ypos -7 } Noise { output {-rgba.red rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.green_size.w*(rgb_size_multiplier) i} {parent.green_size.h*(rgb_size_multiplier) i}} zoffset 10 octaves 2 gamma 1 xrotate {{green_i*45 i}} yrotate {{green_i*45 i}} name green xpos 144 ypos 35 } Noise { output {-rgba.red -rgba.green rgba.blue -rgba.alpha} cliptype none replace true size {{parent.blue_size.w*(rgb_size_multiplier) i} {parent.blue_size.h*(rgb_size_multiplier) i}} zoffset 20 octaves 2 gamma 1 xrotate {{blue_i*45 i}} yrotate {{blue_i*45 i}} name blue xpos 144 ypos 77 } push $N95cb1800 MergeExpression { inputs 2 expr0 max(minimum.r,r+(2*Ar-1)*(r*red_m*noise_intensity_global)) expr1 max(minimum.g,g+(2*Ag-1)*(g*green_m*noise_intensity_global)) expr2 max(minimum.b,b+(2*Ab-1)*(b*blue_m*noise_intensity_global)) name MergeExpression1 xpos 144 ypos 117 } set N95cb0800 [stack 0] push $N95cb0800 push $N95cb1800 Copy { inputs 2 channels rgb maskChannelInput rgba.alpha name Copy1 xpos 0 ypos 105 disable {{parent.no_alpha i}} } Switch { inputs 2 which {{parent.no_alpha i}} name Switch1 xpos 144 ypos 171 } Output { name Output1 xpos 144 ypos 219 } end_group Constant { inputs 0 channels rgb color 1 name Constant7 label "Matte Box Edge" xpos -527 ypos 5273 } Crop { box {-100 -100 {root.width+100} {root.height+100}} name Crop5 xpos -527 ypos 5357 } Erode { channels rgba size 100 blur 1 maskChannelMask none name Erode2 xpos -527 ypos 5383 } Clamp { maskChannelMask none name Clamp1 xpos -527 ypos 5409 } Invert { maskChannelMask none name Invert4 xpos -527 ypos 5447 } Blur { size 400 name Blur12 xpos -527 ypos 5485 } Blur { size 400 name Blur15 xpos -527 ypos 5523 } Noise { inputs 0 size {{100*(parent.flareCoreSize)}} lacunarity 1.84 gain 0.425 center {320 240} name Noise7 xpos -638 ypos 5322 } Flare { inputs 0 position {{parent.Flare39.position.x} {parent.Flare39.position.y}} offset {{parent.Flare39.offset}} radius {601.92 637.04 800} size_mult {{parent.Flare39.size_mult}} anamorph {{parent.Flare39.anamorph}} ring_color 0.38 inner_color 0 inner_falloff 1.05 chroma_spread -0.015 chroma_shift 0.4 brightness 0.19 vis_mask -rgba.alpha flattening 0.1 sharpness 1 mult_offset 8 mult_size -0.16 mult_brightness -0.02 mult_visibility -0.18 name Flare43 label Pieces xpos -686 ypos 5264 disable {{parent.Flare39.disable}} } Flare { inputs 0 position {{parent.Flare39.position.x} {parent.Flare39.position.y}} offset {{parent.Flare39.offset}} radius {531.92 577.04 800} size_mult {{parent.Flare39.size_mult}} anamorph {{parent.Flare39.anamorph}} ring_color 0.29 inner_color 0 inner_falloff 1.05 chroma_spread -0.015 chroma_shift 0.4 brightness 0.19 vis_mask -rgba.alpha flattening 0.1 sharpness 1 mult_offset 8 mult_size -0.16 mult_brightness -0.02 mult_visibility -0.18 name Flare42 label Pieces xpos -686 ypos 5214 disable {{parent.Flare39.disable}} } Flare { inputs 0 position {{parent.Flare39.position.x} {parent.Flare39.position.y}} offset {{parent.Flare39.offset}} radius {541.92 547.04 800} size_mult {{parent.Flare39.size_mult}} anamorph {{parent.Flare39.anamorph}} ring_color 0.125 inner_color 0 inner_falloff 1.05 chroma_spread -0.015 chroma_shift 0.4 brightness 0.19 vis_mask -rgba.alpha flattening 0.1 sharpness 1 mult_offset 8 mult_size -0.16 mult_brightness -0.02 mult_visibility -0.18 name Flare41 label Pieces xpos -686 ypos 5169 disable {{parent.Flare39.disable}} } Flare { inputs 0 position {{parent.Flare39.position.x} {parent.Flare39.position.y}} offset {{parent.Flare39.offset}} radius {461.92 487.04 800} size_mult {{parent.Flare39.size_mult}} anamorph {{parent.Flare39.anamorph}} ring_color 0.19 inner_color 0 inner_falloff 1.05 chroma_spread -0.015 chroma_shift 0.4 brightness 0.19 vis_mask -rgba.alpha flattening 0.1 sharpness 1 mult_offset 8 mult_size -0.16 mult_brightness -0.02 mult_visibility -0.18 name Flare40 label Pieces xpos -686 ypos 5130 disable {{parent.Flare39.disable}} } Flare { inputs 0 position {{"parent.flarePos.x + parent.anomalyPosOffset.w"} {"parent.flarePos.y + parent.anomalyPosOffset.h"}} offset {{0.85+(parent.anomalyRotOffset)}} radius {384.65 527.04 800} size_mult {{"(parent.anomalySize * parent.flareCoreSize) * 1.4"}} anamorph {{1.24+(parent.anomalyAnamorph)}} ring_color 0.08 inner_color 0 inner_falloff 1.05 chroma_spread -0.015 chroma_shift 0.4 brightness 0.19 vis_mask -rgba.alpha flattening 0.1 sharpness 1 mult_offset 8 mult_size -0.16 mult_brightness -0.02 mult_visibility -0.18 name Flare39 label Pieces xpos -796 ypos 5098 disable {{"parent.anomalyType == 5 ? 0 : 1"}} } Merge2 { inputs 2 operation screen maskChannelMask none name Merge86 xpos -796 ypos 5136 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge87 xpos -796 ypos 5175 } Merge2 { inputs 2 operation screen maskChannelMask none name Merge88 xpos -796 ypos 5220 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge89 xpos -796 ypos 5270 } Saturation { saturation 0 maskChannelMask none name Saturation7 xpos -796 ypos 5296 } Merge { inputs 2 operation in mix 0.845 name Merge85 xpos -796 ypos 5322 } DirBlurWrapper { BlurType radial BlurCenter {{parent.ffx_position.x i} {parent.ffx_position.y i}} BlurAngle 0 maskChannelMask none name DirBlurWrapper8 xpos -796 ypos 5398 disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==5?0:1 i}} } Grade { white {1.699708104 1.026119709 0.6997081041 1.649999976} maskChannelMask none name Grade20 xpos -796 ypos 5473 } Merge2 { inputs 2 operation mask maskChannelMask none name Merge91 xpos -796 ypos 5529 } Transform { scale 1.15 center {986 506} black_outside false name Transform57 xpos -796 ypos 5555 } Noise { inputs 0 size {{(parent.anomalySize*20)+80}} lacunarity 1.84 gain 0.425 center {320 240} name Noise5 xpos -1193 ypos 5486 } Flare { inputs 0 position {{parent.Flare61.position.x} {parent.Flare61.position.y}} offset {{parent.Flare61.offset}} radius {1.42 30.89 63.22} size_mult {{parent.Flare61.size_mult}} anamorph {{parent.Flare61.anamorph}} ring_color {0.796096 1.00716 1.196} inner_color 0 outer_falloff 5.2 inner_falloff 5.6 chroma_spread -0.034 chroma_shift -5.2 chroma_shift_angle 58 chroma_shift_angle_add true brightness 0.09 vis_mask -rgba.alpha corners 4 flattening 1 sharpness 1 corners_angle 17 corner_angle_add true asym_multiplier 0 asym_falloff 20 asym_angle 140 asym_angle_add true name Flare62 label Source xpos -1279 ypos 5255 disable {{parent.Flare61.disable}} } Blur { size 18.5 name Blur48 xpos -1279 ypos 5293 } Flare { inputs 0 position {{parent.Flare61.position.x} {parent.Flare61.position.y}} offset {{parent.Flare61.offset}} radius {28.41 39.41 120.03} size_mult {{parent.Flare61.size_mult}} anamorph {{parent.Flare61.anamorph}} ring_color {0.796096 1.00716 1.196} inner_color 0 outer_falloff 5.2 inner_falloff 5.6 chroma_spread -0.11 chroma_shift -5.2 chroma_shift_angle 58 chroma_shift_angle_add true brightness 0.21 vis_mask -rgba.alpha corners 4 flattening 1 sharpness 1 corners_angle 17 corner_angle_add true asym_multiplier 0 asym_falloff 14 asym_angle 140 asym_angle_add true name Flare63 label Source xpos -1165 ypos 5203 disable {{parent.Flare61.disable}} } Blur { size 18.5 name Blur58 xpos -1165 ypos 5241 } Flare { inputs 0 position {{"parent.flarePos.x + parent.anomalyPosOffset.w"} {"parent.flarePos.y + parent.anomalyPosOffset.h"}} offset {{"parent.anomalyRotOffset "}} radius {29.83 56.46 162.65} size_mult {{"parent.anomalySize * parent.flareCoreSize * 3.8 + 1"}} anamorph {{"parent.anomalyAnamorph + 0.91"}} ring_color {0.796096 1.00716 1.196} inner_color 0 outer_falloff 5.2 inner_falloff 5.6 chroma_spread -0.034 chroma_shift -5.2 chroma_shift_angle 58 chroma_shift_angle_add true brightness 0.21 vis_mask -rgba.alpha corners 4 flattening 1 sharpness 1 corners_angle 17 corner_angle_add true asym_multiplier 0 asym_falloff 14 asym_angle 140 asym_angle_add true name Flare61 label Source xpos -1047 ypos 5143 disable {{"parent.anomalyType == 4 ? 0 : 1"}} } Blur { size 18.5 name Blur47 xpos -1047 ypos 5198 } Merge2 { inputs 2 operation screen maskChannelMask none name Merge27 xpos -1047 ypos 5247 } Merge2 { inputs 2 operation screen maskChannelMask none name Merge28 xpos -1047 ypos 5299 } Grade { white 2 multiply 2.8 gamma 1.06 maskChannelMask rgba.red name Grade21 xpos -1047 ypos 5364 } Saturation { saturation 0 maskChannelMask none name Saturation10 xpos -1047 ypos 5418 } Merge { inputs 2 operation in mix 0.725 name Merge29 xpos -1047 ypos 5486 } Flare { inputs 0 position {{"parent.flarePos.x + parent.anomalyPosOffset.w"} {"parent.flarePos.y + parent.anomalyPosOffset.h"}} offset {{"0.7 + parent.anomalyRotOffset "}} radius {0 0 22.78} size_mult {{"(parent.anomalySize * parent.flareCoreSize) * 1.4"}} anamorph {{"parent.anomalyAnamorph + 25"}} inner_color 0 outer_falloff 1.15 inner_falloff 10 vis_out 1 name Flare109 xpos -1740 ypos 5131 disable {{"parent.anomalyType == 3 ? 0 : 1"}} } set Na13fc400 [stack 0] Blur { size {100.5 10.5} name Blur93 xpos -1645 ypos 5125 } push $Na13fc400 Merge2 { inputs 2 operation screen maskChannelMask none name Merge74 xpos -1740 ypos 5186 } Dot { name Dot50 xpos -1445 ypos 5322 } Flare { inputs 0 position {{"parent.flarePos.x + parent.anomalyPosOffset.w"} {"parent.flarePos.y+ parent.anomalyPosOffset.h"}} offset {{"0.7 + parent.anomalyRotOffset "}} radius {1.28 9.62 48.57} size_mult {{"(parent.anomalySize+parent.anomalySize) * parent.flareCoreSize"}} anamorph {{"14.4 + parent.anomalyAnamorph"}} inner_color 1 brightness 2 vis_mask -rgba.alpha name Flare10 xpos -2064 ypos 5149 disable {{"parent.anomalyType == 2 ? 0 : 1"}} } Blur { size 5.2 name Blur9 xpos -2064 ypos 5198 } set Na1392400 [stack 0] Blur { size 22.5 name Blur10 xpos -1964 ypos 5198 } push $Na1392400 Merge2 { inputs 2 operation plus maskChannelMask none name Merge31 xpos -2064 ypos 5269 } Dot { name Dot49 xpos -1790 ypos 5273 } Dot { name Dot48 xpos -1512 ypos 5354 } Flare { inputs 0 position {{parent.Flare108.position.x} {parent.Flare108.position.y}} offset {{parent.Flare108.offset}} radius {0 0 34.14} size_mult {{parent.Flare108.size_mult}} anamorph {{parent.Flare108.anamorph}} inner_color 0 outer_falloff 1.15 inner_falloff 1.1 vis_out 1 name Flare107 xpos -1769 ypos 5519 disable {{parent.Flare108.disable}} } Transform { translate {0 -6} center {960 540} black_outside false name Transform2 xpos -1769 ypos 5545 } Blur { size 3 name Blur92 xpos -1769 ypos 5571 } Flare { inputs 0 position {{"parent.flarePos.x + parent.anomalyPosOffset.w"} {"parent.flarePos.y + parent.anomalyPosOffset.h"}} offset {{"0.7 + parent.anomalyRotOffset "}} radius {0 0 31.3} size_mult {{"parent.anomalySize * 1.03 * parent.flareCoreSize"}} anamorph {{"15 + parent.anomalyAnamorph"}} inner_color 0 outer_falloff 0.9 vis_out 1 name Flare108 xpos -1659 ypos 5494 disable {{"parent.anomalyType == 1 ? 0 : 1"}} } Merge2 { inputs 2 operation screen maskChannelMask none name Merge114 xpos -1659 ypos 5577 } Blur { size {10 2} name Blur25 xpos -1659 ypos 5603 } Flare { inputs 0 position {{parent.Flare106.position.x} {parent.Flare106.position.y}} offset {{parent.Flare106.offset}} radius {0 0 34.14} size_mult {{parent.Flare106.size_mult}} anamorph {{parent.Flare106.anamorph}} inner_color 0 outer_falloff 1.15 inner_falloff 1.1 vis_out 1 name Flare104 xpos -2049 ypos 5574 disable {{parent.Flare106.disable}} } Transform { translate {0 6} scale {1.2 1} center {960 540} black_outside false name Transform32 xpos -2049 ypos 5600 } Blur { size {50 3} name Blur90 xpos -2049 ypos 5626 } Flare { inputs 0 position {{parent.Flare106.position.x} {parent.Flare106.position.y}} offset {{parent.Flare106.offset}} radius {0 0 34.14} size_mult {{parent.Flare106.size_mult}} anamorph {{parent.Flare106.anamorph}} inner_color 0 outer_falloff 1.15 inner_falloff 1.1 vis_out 1 name Flare105 xpos -2049 ypos 5450 disable {{parent.Flare106.disable}} } Transform { translate {0 -6} center {960 540} black_outside false name Transform33 xpos -2049 ypos 5476 } Blur { size 3 name Blur91 xpos -2049 ypos 5502 } Flare { inputs 0 position {{"parent.flarePos.x + parent.anomalyPosOffset.w"} {"parent.flarePos.y + parent.anomalyPosOffset.h"}} offset {{"0.7 + parent.anomalyRotOffset "}} radius {0 0 31.3} size_mult {{"parent.anomalySize * 1.03 * parent.flareCoreSize"}} anamorph {{"15 + parent.anomalyAnamorph"}} inner_color 0 outer_falloff 0.9 vis_out 1 name Flare106 xpos -1939 ypos 5422 disable {{"parent.anomalyType == 0 ? 0 : 1"}} } Merge2 { inputs 2 operation screen maskChannelMask none name Merge112 xpos -1939 ypos 5508 } Merge2 { inputs 2 operation screen maskChannelMask none name Merge113 xpos -1939 ypos 5632 } Blur { size {10 2} name Blur28 xpos -1939 ypos 5658 } Switch { inputs 9 which {{parent.anomalyType}} name lens_anomolies xpos -1451 ypos 5722 } Clamp { name Clamp5 xpos 129 ypos 5716 } Saturation { saturation {{parent.anomalyPresat}} maskChannelMask none name Anomolies_Saturation xpos 252 ypos 5722 } Grade { multiply {{parent.anomalyColour.r} {parent.anomalyColour.g} {parent.anomalyColour.b} 0} maskChannelMask none name Anomolies_Color label "Lens Anomolies CC" xpos 375 ypos 5716 } Blur { size {{parent.anomalyBlur}} name Blur7 xpos 503 ypos 5716 } Dot { name Dot47 xpos 771 ypos 5726 } set Na12ae400 [stack 0] Saturation { saturation 0 name Saturation11 xpos 738 ypos 5772 } push $Na12ae400 Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy9 xpos 881 ypos 5716 } push $N8e8ebc00 Radial { inputs 0 maskChannelMask none area {0 0 {root.width} {root.height}} name Radial2 xpos -2190 ypos 3282 } Dot { name Dot37 xpos -2156 ypos 3344 } Constant { inputs 0 channels rgb format "2048 2048 0 0 2048 2048 1 square_2K" name Constant6 xpos 757 ypos 2459 } set Na12ad000 [stack 0] Flare { position {{parent.Flare246.position.x} {parent.Flare246.position.y}} radius {19.16 186.02 495.46} size_mult {{parent.Flare246.size_mult}} inner_color 0 outer_falloff 0.6 inner_falloff 7.4 asym_repeat 2 asym_multiplier 0 asym_falloff 5 asym_angle {{((parent.ffx_position.x/30)-24)+parent.core_shape_rotation}} name Flare230 xpos 437 ypos 2922 disable {{parent.Flare246.disable}} } Shuffle { green red blue red alpha red name Shuffle24 xpos 437 ypos 2948 } set Na12ac400 [stack 0] push $Na12ac400 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha maskChannelMask none name Copy2 xpos 437 ypos 2976 } push $Na12ad000 Flare { position {{parent.Flare246.position.x} {parent.Flare246.position.y}} radius {71.91 172.77 231.62} size_mult {{parent.Flare246.size_mult}} ring_color {0 0 1} inner_color 0 outer_falloff 2.1 inner_falloff 6.4 asym_falloff 10 asym_angle -24 name Flare234 xpos 437 ypos 2885 disable {{parent.Flare246.disable}} } push $Na12ad000 Flare { position {{parent.Flare246.position.x} {parent.Flare246.position.y}} radius {104.58 205.44 269.97} size_mult {{parent.Flare246.size_mult}} ring_color {1 0 0} inner_color 0 outer_falloff 1.45 inner_falloff 6.4 asym_falloff 10 asym_angle -24 name Flare239 xpos 437 ypos 2842 disable {{parent.Flare246.disable}} } push $Na12ad000 Flare { position {{parent.Flare246.position.x} {parent.Flare246.position.y}} radius {131.57 235.27 275.65} size_mult {{parent.Flare246.size_mult}} ring_color {1 1 0} inner_color 0 outer_falloff 1.45 inner_falloff 6.4 asym_falloff 10 asym_angle -24 name Flare240 xpos 437 ypos 2790 disable {{parent.Flare246.disable}} } push $Na12ad000 Flare { position {{parent.Flare246.position.x} {parent.Flare246.position.y}} radius {152.88 258 309.74} size_mult {{parent.Flare246.size_mult}} ring_color {0 1 0} inner_color 0 outer_falloff 1.45 inner_falloff 6.4 asym_falloff 10 asym_angle -24 name Flare241 xpos 437 ypos 2737 disable {{parent.Flare246.disable}} } push $Na12ad000 Flare { position {{parent.Flare246.position.x} {parent.Flare246.position.y}} radius {155.72 287.83 332.47} size_mult {{parent.Flare246.size_mult}} ring_color {0 1 1} inner_color 0 outer_falloff 1.45 inner_falloff 6.4 asym_falloff 10 asym_angle -24 name Flare242 xpos 437 ypos 2684 disable {{parent.Flare246.disable}} } push $Na12ad000 Flare { position {{parent.Flare246.position.x} {parent.Flare246.position.y}} radius {188.39 317.66 457.47} size_mult {{parent.Flare246.size_mult}} ring_color {0 0 1} inner_color 0 outer_falloff 1.45 inner_falloff 6.4 asym_falloff 10 asym_angle -24 name Flare243 xpos 437 ypos 2638 disable {{parent.Flare246.disable}} } push $Na12ad000 Flare { position {{parent.Flare246.position.x} {parent.Flare246.position.y}} radius {79.93 364.53 468.84} size_mult {{parent.Flare246.size_mult}} ring_color {1 0 0} inner_color 0 outer_falloff 1.45 inner_falloff 6.4 asym_falloff 10 asym_angle -24 name Flare244 xpos 437 ypos 2586 disable {{parent.Flare246.disable}} } push $Na12ad000 Flare { position {{parent.Flare246.position.x} {parent.Flare246.position.y}} radius {274.71 413.95 457.21} size_mult {{parent.Flare246.size_mult}} ring_color {1 1 0} inner_color 0 outer_falloff 1.45 inner_falloff 6.2 asym_falloff 10 asym_angle -22 name Flare245 xpos 437 ypos 2531 disable {{parent.Flare246.disable}} } push $Na12ad000 Flare { position {{"2048 /2"} {"2048 /2"}} radius {307.38 435.26 494.04} size_mult 1.8 ring_color {0.003999948502 1 0} inner_color 0 outer_falloff 1.45 inner_falloff 6.2 asym_falloff 10 asym_angle -22 name Flare246 xpos 547 ypos 2482 disable {{"parent.coreCoronaType == 7 ? 0 : 1"}} } Merge2 { inputs 2 maskChannelMask none name Merge211 xpos 547 ypos 2531 } Merge2 { inputs 2 maskChannelMask none name Merge212 xpos 547 ypos 2586 } Merge2 { inputs 2 maskChannelMask none name Merge213 xpos 547 ypos 2638 } Merge2 { inputs 2 maskChannelMask none mix 0.76 name Merge214 xpos 547 ypos 2684 } Merge2 { inputs 2 maskChannelMask none mix 0.68 name Merge215 xpos 547 ypos 2737 } Merge2 { inputs 2 maskChannelMask none mix 0.73 name Merge216 xpos 547 ypos 2790 } Merge2 { inputs 2 maskChannelMask none name Merge217 xpos 547 ypos 2842 } Merge2 { inputs 2 maskChannelMask none name Merge218 xpos 547 ypos 2885 } Blur { size 97 name Blur115 xpos 547 ypos 2911 } Merge2 { inputs 2 operation mask maskChannelMask none name Merge219 xpos 547 ypos 2982 } Grade { multiply 0.48 gamma 0.59 maskChannelMask none unpremult -rgba.alpha name Grade47 xpos 547 ypos 3021 } set Na11cc400 [stack 0] push $Na11cc400 push $Na12ad000 Sparkles { mode Sparkles position {{parent.Flare246.position.x} {parent.Flare246.position.y}} size 1100 anamorphic 1.1 rotation {{(parent.Flare246.position.x/30)+100}} ray_nb 400 ray_thick 3 spark_falloff 0 ray_falloff 10 seed 95 chroma_shift 1.06 chroma_spread 0.16 name Sparkles34 xpos 757 ypos 2889 disable {{parent.Flare246.disable}} } Sparkles { mode Sparkles position {{parent.Flare246.position.x} {parent.Flare246.position.y}} size 1300 anamorphic 1.1 rotation {{(parent.Flare246.position.x/30)+100}} ray_nb 600 ray_thick 3 spark_falloff 0.016 ray_falloff 10 seed 65 chroma_shift 1.06 chroma_spread 0.295 name Sparkles35 xpos 757 ypos 2925 disable {{parent.Flare246.disable}} } Merge2 { inputs 2 operation mask Achannels {rgba.red rgba.green rgba.blue rgba.red} maskChannelMask none name Merge241 xpos 757 ypos 2959 } Merge2 { inputs 2 operation geometric maskChannelMask none mix 0.5 name Merge242 xpos 757 ypos 2985 } Grade { multiply 2.65 maskChannelMask none name Grade48 xpos 757 ypos 3023 } DirBlurWrapper { BlurCenter {{parent.Flare246.position.x} {parent.Flare246.position.y}} BlurLength 90 BlurAngle 70 maskChannelMask none name DirBlurWrapper16 xpos 757 ypos 3049 disable {{parent.Flare246.disable}} } Glow { tolerance 0.06 brightness 2.6 maskChannelMask none name Glow26 xpos 757 ypos 3085 } push $Na11cc400 Merge2 { inputs 2 operation screen maskChannelMask none name Merge243 xpos 547 ypos 3085 } Glow { tolerance 0.055 brightness 1.44 size 100 maskChannelMask none name Glow30 xpos 547 ypos 3130 } Saturation { saturation 0.7 maskChannelMask none name Saturation13 xpos 547 ypos 3207 } Flare { inputs 0 position {{root.width/2} {root.height/2}} radius {0 3.9 26.5} size_mult {{"1 * parent.coreCoronaSize"}} anamorph 7 ring_color {1.16889 1 0.831105} inner_color 1.16889 chroma_spread 0.04 chroma_shift -2.6 corners 0 flattening 0.699989 sharpness 0.899097 name Flare9 xpos 161 ypos 2580 disable {{"parent.coreCoronaType == 6 ? 0 : 1"}} } Transform { translate {-14 3} center {986 506} name Transform34 xpos 161 ypos 2630 } set Na1160c00 [stack 0] Transform { translate {55 -10} center {986 506} name Transform35 xpos 51 ypos 2630 } set Na1160800 [stack 0] Transform { translate {-74 19} center {986 506} name Transform36 xpos -39 ypos 2630 } set Na1160400 [stack 0] Transform { translate {97 8} center {986 506} name Transform37 xpos -131 ypos 2630 } set Na10d7c00 [stack 0] Transform { translate {-119 -33} center {986 506} name Transform38 xpos -211 ypos 2630 } set Na10d7800 [stack 0] Transform { translate {28 12} center {986 506} name Transform39 xpos -321 ypos 2630 } push $Na10d7800 push $Na10d7c00 push $Na1160400 push $Na1160800 push $Na1160c00 Merge2 { inputs 2 operation plus maskChannelMask none name Merge22 xpos 161 ypos 2683 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge23 xpos 161 ypos 2724 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge24 xpos 161 ypos 2762 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge25 xpos 161 ypos 2788 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge26 xpos 161 ypos 2842 } DirBlurWrapper { BlurType linear BlurCenter {1528 780} BlurLength 80 BlurAngle 90 maskChannelMask none name DirBlurWrapper5 xpos 161 ypos 2868 disable {{parent.Flare9.disable}} } Glow { brightness 2 maskChannelMask none name Glow3 xpos 161 ypos 2986 } Transform { scale {{parent.coreCoronaSize}} center {{root.width/2} {root.height/2 x60 540}} invert_matrix true name inv_scale2 xpos 161 ypos 3030 } Flare { inputs 0 position {{root.width/2} {root.height/2}} radius {0 3.9 25.08} size_mult {{"1 * parent.coreCoronaSize"}} anamorph 15 ring_color {1.16889 1 0.831105} inner_color 1.16889 chroma_spread 0.04 chroma_shift -2.6 corners 0 flattening 0.699989 sharpness 0.899097 name Flare38 xpos -579 ypos 2563 disable {{"parent.coreCoronaType == 5 ? 0 : 1"}} } Transform { translate {-14 3} center {986 506} name Transform24 xpos -579 ypos 2631 } set Na10d4800 [stack 0] Transform { translate {55 -10} center {986 506} name Transform25 xpos -689 ypos 2631 } set Na10d4400 [stack 0] Transform { translate {-74 19} center {986 506} name Transform26 xpos -779 ypos 2631 } set Nb58cfc00 [stack 0] Transform { translate {97 8} center {986 506} name Transform27 xpos -871 ypos 2631 } set Nb58cf800 [stack 0] Transform { translate {-119 -33} center {986 506} name Transform28 xpos -951 ypos 2631 } set Nb58cf400 [stack 0] Transform { translate {28 12} center {986 506} name Transform29 xpos -1061 ypos 2631 } push $Nb58cf400 push $Nb58cf800 push $Nb58cfc00 push $Na10d4400 push $Na10d4800 Merge2 { inputs 2 operation plus maskChannelMask none name Merge77 xpos -579 ypos 2684 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge78 xpos -579 ypos 2725 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge79 xpos -579 ypos 2763 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge82 xpos -579 ypos 2789 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge83 xpos -579 ypos 2843 } DirBlurWrapper { BlurType linear BlurCenter {1528 780} BlurLength 80 BlurAngle 90 maskChannelMask none name DirBlurWrapper7 xpos -579 ypos 2893 disable {{parent.Flare38.disable}} } Glow { brightness 2 maskChannelMask none name Glow38 xpos -579 ypos 2955 } Transform { scale {{parent.coreCoronaSize}} center {{root.width/2} {root.height/2 x60 540}} invert_matrix true name inv_scale1 xpos -579 ypos 3016 } Flare { inputs 0 position {{root.width/2} {root.height/2}} radius {0 3.9 20.82} size_mult {{"1 * parent.coreCoronaSize"}} anamorph 0.1 ring_color {1.16889 1 0.831105} inner_color 1.16889 chroma_spread 0.075 chroma_shift -5.2 corners 0 flattening 0.699989 sharpness 0.899097 name Flare36 xpos -1293 ypos 2542 disable {{"parent.coreCoronaType == 4 ? 0 : 1"}} } Transform { translate {-8 -17} center {986 506} name Transform11 xpos -1293 ypos 2609 } set Nb58cc400 [stack 0] Transform { translate {13 -50} center {986 506} name Transform12 xpos -1395 ypos 2609 } set Nb584bc00 [stack 0] Transform { translate {19 -22} center {986 506} name Transform14 xpos -1494 ypos 2609 } set Nb584b800 [stack 0] Transform { translate {-7 47} center {986 506} name Transform15 xpos -1585 ypos 2609 } set Nb584b400 [stack 0] Transform { translate {-39 37} center {986 506} name Transform16 xpos -1665 ypos 2609 } set Nb584b000 [stack 0] Transform { translate {18 18} center {986 506} name Transform17 xpos -1775 ypos 2609 } push $Nb584b000 push $Nb584b400 push $Nb584b800 push $Nb584bc00 push $Nb58cc400 Merge2 { inputs 2 operation plus maskChannelMask none name Merge37 xpos -1293 ypos 2662 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge51 xpos -1293 ypos 2703 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge60 xpos -1293 ypos 2741 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge61 xpos -1293 ypos 2776 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge62 xpos -1293 ypos 2821 } DirBlurWrapper { BlurType linear BlurCenter {1528 780} BlurLength 80 BlurAngle 0 maskChannelMask none name DirBlurWrapper1 xpos -1293 ypos 2857 disable {{parent.Flare36.disable}} } Glow { brightness 2 maskChannelMask none name Glow37 xpos -1293 ypos 2914 } Transform { scale {{parent.coreCoronaSize}} center {{root.width/2} {root.height/2 x60 540}} invert_matrix true name inv_scale xpos -1293 ypos 2962 } Dot { name Dot39 xpos -1259 ypos 3081 } Flare { inputs 0 position {{parent.Flare117.position.x} {parent.Flare117.position.y}} radius {119.3 147.71 176.18} size_mult {{parent.Flare117.size_mult}} inner_color 0 outer_falloff 0.86 inner_falloff 3.8 chroma_shift_angle 42 vis_out 1 corners 4 asym_multiplier 0 asym_falloff 10 asym_angle 180 name Flare47 xpos -2189 ypos 2720 disable {{parent.Flare117.disable}} } Flare { inputs 0 position {{parent.Flare117.position.x} {parent.Flare117.position.y}} radius {122.15 150.56 179.03} size_mult {{parent.Flare117.size_mult}} inner_color 0 outer_falloff 0.86 inner_falloff 3.8 chroma_shift_angle 42 vis_out 1 corners 4 asym_multiplier 0 asym_falloff 10 name Flare48 xpos -2079 ypos 2694 disable {{parent.Flare117.disable}} } Merge2 { inputs 2 maskChannelMask none name Merge10 xpos -2079 ypos 2720 } Shuffle { green red blue red alpha red name Shuffle1 xpos -2079 ypos 2763 } Flare { inputs 0 position {{parent.Flare117.position.x} {parent.Flare117.position.y}} radius {132.1 139.18 171.91} size_mult {{parent.Flare117.size_mult}} inner_color 0 outer_falloff 5.2 inner_falloff 0.9 chroma_shift_angle 42 vis_out 1 corners 3 name Flare49 xpos -2079 ypos 2629 disable {{parent.Flare117.disable}} } Flare { inputs 0 position {{parent.Flare117.position.x} {parent.Flare117.position.y}} radius {133.51 153.38 183.27} size_mult {{parent.Flare117.size_mult}} inner_color 0 outer_falloff 2.7 inner_falloff 0.76 chroma_spread 0.032 chroma_shift_angle 42 vis_out 1 corners 3 name Flare52 xpos -1969 ypos 2575 disable {{parent.Flare117.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge11 xpos -1969 ypos 2629 } Merge2 { inputs 2 operation mask maskChannelMask none name Merge12 xpos -1969 ypos 2763 } Dot { name Dot13 xpos -1935 ypos 2821 } Flare { inputs 0 position {{parent.Flare117.position.x} {parent.Flare117.position.y}} radius {65.33 93.74 122.21} size_mult {{parent.Flare117.size_mult}} inner_color 0 outer_falloff 0.86 inner_falloff 3.8 chroma_shift_angle 42 vis_out 1 corners 4 asym_multiplier 0 asym_falloff 10 asym_angle 180 name Flare114 xpos -2554 ypos 2699 disable {{parent.Flare117.disable}} } Flare { inputs 0 position {{parent.Flare117.position.x} {parent.Flare117.position.y}} radius {65.33 93.74 122.21} size_mult {{parent.Flare117.size_mult}} inner_color 0 outer_falloff 0.86 inner_falloff 3.8 chroma_shift_angle 42 vis_out 1 corners 4 asym_multiplier 0 asym_falloff 10 name Flare115 xpos -2444 ypos 2673 disable {{parent.Flare117.disable}} } Merge2 { inputs 2 maskChannelMask none name Merge118 xpos -2444 ypos 2699 } Shuffle { green red blue red alpha red name Shuffle9 xpos -2444 ypos 2742 } Flare { inputs 0 position {{parent.Flare117.position.x} {parent.Flare117.position.y}} radius {103.69 110.77 126.45} size_mult {{parent.Flare117.size_mult}} inner_color 0 outer_falloff 5.2 inner_falloff 0.9 chroma_shift_angle 42 vis_out 1 corners 3 name Flare116 xpos -2444 ypos 2608 disable {{parent.Flare117.disable}} } Flare { inputs 0 position {{root.width/2} {root.height/2}} radius {106.52 126.39 134.97} inner_color 0 outer_falloff 2.7 inner_falloff 0.76 chroma_spread 0.044 chroma_shift_angle 42 vis_out 1 corners 3 name Flare117 xpos -2334 ypos 2552 disable {{"parent.coreCoronaType == 3 ? 0 : 1"}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge119 xpos -2334 ypos 2608 } Merge2 { inputs 2 operation mask maskChannelMask none name Merge120 xpos -2334 ypos 2742 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge13 xpos -2334 ypos 2817 } Flare { inputs 0 position {{parent.Flare177.position.x} {parent.Flare177.position.y}} radius {170.91 284.65 345.84} size_mult {{parent.Flare100.size_mult}} ring_color 0.55 inner_color 0 outer_falloff 1.65 inner_falloff 1.35 chroma_spread -0.004 chroma_shift -0.6 brightness {1 1 1} asym_multiplier 0 asym_falloff 10 asym_angle 150 mult_offset 0 name Flare97 xpos -3782 ypos 2759 disable {{parent.Flare177.disable}} } Flare { inputs 0 position {{parent.Flare177.position.x} {parent.Flare177.position.y}} radius {308.69 337.21 473.01} size_mult {{parent.Flare100.size_mult}} ring_color 0.55 inner_color 0 outer_falloff 1.65 inner_falloff 1.35 chroma_spread 0.012 chroma_shift 0.6 asym_multiplier 0 asym_falloff {{Flare100.asym_falloff}} asym_angle 150 mult_offset 0 name Flare98 xpos -3672 ypos 2733 disable {{parent.Flare177.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge103 xpos -3672 ypos 2759 } Flare { inputs 0 position {{parent.Flare177.position.x} {parent.Flare177.position.y}} radius {312.25 324.43 465.17} size_mult {{parent.Flare100.size_mult}} ring_color 0.55 inner_color 0 outer_falloff 1.65 inner_falloff 1.35 chroma_spread 0.012 chroma_shift -4.4 brightness {1 1 1} asym_multiplier 0 asym_falloff 10 asym_angle -30 mult_offset 0 name Flare99 xpos -3653 ypos 2641 disable {{parent.Flare177.disable}} } Flare { inputs 0 position {{parent.Flare177.position.x} {parent.Flare177.position.y}} radius {293.07 323.01 335.91} size_mult 0.6 ring_color 0.55 inner_color 0 outer_falloff 1.65 inner_falloff 1.35 chroma_spread 0.012 chroma_shift -4.4 brightness {1 1 1} asym_multiplier 0 asym_falloff 4 asym_angle -30 mult_offset 0 name Flare100 xpos -3543 ypos 2591 disable {{parent.Flare177.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge104 xpos -3543 ypos 2641 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge105 xpos -3543 ypos 2759 } Glow { tolerance 0.51 size 35 maskChannelMask none name Glow5 xpos -3543 ypos 2878 } Flare { inputs 0 position {{parent.Flare177.position.x} {parent.Flare177.position.y}} radius {119.3 147.71 176.18} size_mult {{parent.Flare177.size_mult}} inner_color 0 outer_falloff 0.86 inner_falloff 3.8 chroma_shift_angle 42 vis_out 1 corners 4 asym_multiplier 0 asym_falloff 10 asym_angle 142 name Flare136 xpos -4134 ypos 2717 disable {{parent.Flare177.disable}} } Flare { inputs 0 position {{parent.Flare177.position.x} {parent.Flare177.position.y}} radius {122.15 150.56 179.03} size_mult {{parent.Flare177.size_mult}} inner_color 0 outer_falloff 0.86 inner_falloff 3.8 chroma_shift_angle 42 vis_out 1 corners 4 asym_multiplier 0 asym_falloff 10 asym_angle -28 name Flare137 xpos -4024 ypos 2691 disable {{parent.Flare177.disable}} } Merge2 { inputs 2 maskChannelMask none name Merge98 xpos -4024 ypos 2717 } Shuffle { green red blue red alpha red name Shuffle7 xpos -4024 ypos 2760 } Flare { inputs 0 position {{parent.Flare177.position.x} {parent.Flare177.position.y}} radius {132.1 139.18 171.91} size_mult {{parent.Flare177.size_mult}} inner_color 0 outer_falloff 5.2 inner_falloff 0.9 chroma_shift_angle 42 vis_out 1 corners 3 name Flare145 xpos -4024 ypos 2626 disable {{parent.Flare177.disable}} } Flare { inputs 0 position {{parent.Flare177.position.x} {parent.Flare177.position.y}} radius {133.51 153.38 183.27} size_mult {{parent.Flare177.size_mult}} inner_color 0 outer_falloff 2.7 inner_falloff 0.76 chroma_spread 0.012 chroma_shift -3.2 chroma_shift_angle 42 vis_out 1 corners 3 name Flare157 xpos -3914 ypos 2575 disable {{parent.Flare177.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge99 xpos -3914 ypos 2626 } Merge2 { inputs 2 operation mask maskChannelMask none name Merge101 xpos -3914 ypos 2786 } Dot { name Dot11 xpos -3880 ypos 2818 } Flare { inputs 0 position {{parent.Flare177.position.x} {parent.Flare177.position.y}} radius {73.85 124.98 170.5} size_mult {{parent.Flare177.size_mult}} inner_color 0 outer_falloff 0.86 inner_falloff 3.8 chroma_shift_angle 42 vis_out 1 corners 4 asym_multiplier 0 asym_falloff 10 asym_angle -150 name Flare174 xpos -4454 ypos 2696 disable {{parent.Flare177.disable}} } Flare { inputs 0 position {{parent.Flare177.position.x} {parent.Flare177.position.y}} radius {44.02 140.56 264.21} size_mult {{parent.Flare177.size_mult}} inner_color 0 outer_falloff 0.86 inner_falloff 3.8 chroma_shift_angle 42 vis_out 1 corners 4 asym_multiplier 0 asym_falloff 10 asym_angle 30 name Flare175 xpos -4344 ypos 2655 disable {{parent.Flare177.disable}} } Merge2 { inputs 2 maskChannelMask none name Merge106 xpos -4344 ypos 2696 } Shuffle { green red blue red alpha red name Shuffle8 xpos -4344 ypos 2739 } Flare { inputs 0 position {{parent.Flare177.position.x} {parent.Flare177.position.y}} radius {103.69 110.77 126.45} size_mult {{parent.Flare177.size_mult}} inner_color 0 outer_falloff 5.2 inner_falloff 0.9 chroma_shift_angle 42 vis_out 1 corners 3 name Flare176 xpos -4344 ypos 2605 disable {{parent.Flare177.disable}} } Flare { inputs 0 position {{root.width/2} {root.height/2}} radius {106.52 126.39 134.97} size_mult 0.8 inner_color 0 outer_falloff 2.7 inner_falloff 0.76 chroma_spread 0.012 chroma_shift -3.2 chroma_shift_angle 42 vis_out 1 corners 3 name Flare177 xpos -4234 ypos 2559 disable {{"parent.coreCoronaType == 2 ? 0 : 1"}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge107 xpos -4234 ypos 2605 } Merge2 { inputs 2 operation mask maskChannelMask none name Merge111 xpos -4234 ypos 2765 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge115 xpos -4234 ypos 2815 } Merge2 { inputs 2 operation plus maskChannelMask none name Merge108 xpos -4234 ypos 2878 } Grade { multiply 0.4 maskChannelMask none name Grade10 xpos -4234 ypos 2929 } Saturation { saturation 0 maskChannelMask none name Saturation8 xpos -4234 ypos 2988 } Transform { rotate {{parent.coreCoronaRotation}} center {960 540} name Transform30 xpos -4234 ypos 3051 } Flare { inputs 0 position {{parent.Flare3.position.x} {parent.Flare3.position.y}} radius {260.4 271.87 287.61} size_mult {{parent.Flare3.size_mult}} ring_color 0.55 inner_color 0 outer_falloff 1.65 inner_falloff 1.35 chroma_spread 0.012 chroma_shift -4.4 brightness {1 1 1} asym_multiplier 0 asym_falloff 10 asym_angle -30 mult_offset 0 name Flare2 xpos -2806 ypos 2629 disable {{parent.Flare3.disable}} } Flare { inputs 0 position {{root.width/2} {root.height/2}} radius {241.93 271.87 284.77} ring_color 0.55 inner_color 0 outer_falloff 1.65 inner_falloff 1.35 chroma_spread 0.012 chroma_shift -4.4 brightness {1 1 1} asym_multiplier 0 asym_falloff 4 asym_angle -30 mult_offset 0 name Flare3 xpos -2696 ypos 2579 disable {{"parent.coreCoronaType == 1 ? 0 : 1"}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge4 xpos -2696 ypos 2629 } Flare { inputs 0 position {{parent.Flare7.position.x} {parent.Flare7.position.y}} radius {260.4 271.87 287.61} size_mult {{parent.Flare7.size_mult}} ring_color 0.55 inner_color 0 outer_falloff 1.65 inner_falloff 1.35 chroma_spread 0.012 chroma_shift -4.4 brightness {1 1 1} asym_multiplier 0 asym_falloff 10 asym_angle -30 mult_offset 0 name Flare6 xpos -2913 ypos 2729 disable {{parent.Flare3.disable}} } Flare { inputs 0 position {{root.width/2} {root.height/2}} radius {241.93 271.87 284.77} ring_color 0.55 inner_color 0 outer_falloff 1.65 inner_falloff 1.35 chroma_spread 0.012 chroma_shift -4.4 brightness {1 1 1} asym_multiplier 0 asym_falloff 4 asym_angle -30 mult_offset 0 name Flare7 xpos -2803 ypos 2679 disable {{parent.Flare3.disable}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge5 xpos -2803 ypos 2729 } Transform { rotate 180 center {{parent.Flare5.position.x} {parent.Flare5.position.y}} name Transform4 xpos -2803 ypos 2767 } Merge2 { inputs 2 operation plus name Merge6 xpos -2696 ypos 2767 } Glow { tolerance 0.51 size 35 maskChannelMask none name Glow20 xpos -2696 ypos 2815 } Flare { inputs 0 position {{parent.Flare5.position.x} {parent.Flare5.position.y}} radius {260.4 271.87 287.61} size_mult {{parent.Flare5.size_mult}} ring_color 0.55 inner_color 0 outer_falloff 1.65 inner_falloff 1.35 chroma_spread 0.012 chroma_shift -4.4 brightness {1 1 1} asym_multiplier 0 asym_falloff 10 asym_angle -30 mult_offset 0 name Flare4 xpos -3191 ypos 2734 disable {{parent.Flare5.disable}} } Flare { inputs 0 position {{root.width/2} {root.height/2}} radius {254.39 271.87 284.77} ring_color 0.55 inner_color 0 outer_falloff 1.65 inner_falloff 1.35 chroma_spread 0.012 chroma_shift -4.4 brightness {1 1 1} asym_multiplier 0 asym_falloff 4 asym_angle -30 mult_offset 0 name Flare5 xpos -3081 ypos 2685 disable {{"parent.coreCoronaType == 0 ? 0 : 1"}} } Merge2 { inputs 2 operation plus maskChannelMask none name Merge3 xpos -3081 ypos 2734 } Glow { tolerance 0.51 size 35 maskChannelMask none name Glow2 xpos -3081 ypos 2823 } Switch { inputs 8 which {{parent.coreCoronaType}} name Switch1 xpos -2063 ypos 3235 } Transform { translate {{"-(root.width/2) + parent.flarePos.x + parent.coreCoronaOffset.x"} {"-(root.height/2) + parent.flarePos.y + parent.coreCoronaOffset.y"}} rotate {{parent.coreCoronaRotation}} scale {{"parent.flareCoreSize * parent.coreCoronaSize"}} center {{root.width/2} {root.height/2 x60 540}} filter sinc4 name scale_rot_translate xpos -2063 ypos 3275 disable {{"parent.coreCoronaType == 7 ? 1 : 0"}} } Transform { translate {{"-(2048 / 2) + parent.flarePos.x + parent.coreCoronaOffset.x"} {"-(2048 / 2) + parent.flarePos.y + parent.coreCoronaOffset.y"}} rotate {{parent.coreCoronaRotation}} scale {{"parent.flareCoreSize * parent.coreCoronaSize"}} center {{"2048 / 2"} {"2048 / 2" x60 540}} filter sinc4 name chroma_hoop_trans xpos -2063 ypos 3305 disable {{"parent.coreCoronaType == 7 ? 0 : 1"}} } Merge2 { inputs 2 operation mask maskChannelMask none name Merge109 xpos -2063 ypos 3341 disable {{parent.Flare177.disable}} } Blur { size {{parent.coreCoronaBlur}} name Blur3 xpos -2063 ypos 3377 } Grade { multiply {{parent.coreCoronaTint.r} {parent.coreCoronaTint.g} {parent.coreCoronaTint.b} 1} name Grade8 xpos -2063 ypos 3430 } Group { name Static_Noise3 help "Adds synthetic grain. Push \"presets\" to get predefined types of grain, these are the correct size for 2K scans.\n\nYou can also adjust the sliders to match a sample piece of grain. Find a sample with a rather constant background, blur it to remove the grain, and use as input to this. View with a wipe in the viewer so you can make a match. It helps to view and match each of the red, green, blue seperately." tile_color 0x992620ff note_font "Bitstream Vera Sans" xpos -1827 ypos 3431 disable {{!parent.coreCoronaNoise}} mapsize {0.15 0.15} addUserKnob {20 master_control l Master} addUserKnob {7 noise_intensity_global l Intensity R 0 2} noise_intensity_global 1 addUserKnob {7 rgb_size_multiplier l Size R 0 2} rgb_size_multiplier 1 addUserKnob {26 ""} addUserKnob {6 no_alpha l "no alpha?" t "Check this box if your image doesn't have an alpha and you cannot use another alpha channel.\n\n(Note: This WILL cause the grain to be more prevalent. So please compensate using the Noise Size and Noise Intensity controls above.)" +STARTLINE} no_alpha true addUserKnob {20 adv_controls l Advanced} addUserKnob {20 fractal_noise_size l "RGB Noise Size" n 1} fractal_noise_size 0 addUserKnob {14 red_size l r R 0 100} red_size 1.7 addUserKnob {14 green_size l g R 0 100} green_size 1.6 addUserKnob {14 blue_size l b R 0 100} blue_size 1.5 addUserKnob {20 endGroup n -1} addUserKnob {20 noise_irregularity l "RGB Noise Irregularity" n 1} noise_irregularity 0 addUserKnob {7 red_i l r} red_i 1 addUserKnob {7 green_i l g} green_i 0.75 addUserKnob {7 blue_i l b} blue_i 0.65 addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 noise_intensity l "RGB Noise Intensity" n 1} noise_intensity 0 addUserKnob {7 red_m l r t "Amount of grain to add to a white pixel"} red_m 0.2 addUserKnob {7 green_m l g} green_m 0.4 addUserKnob {7 blue_m l b} blue_m 0.6 addUserKnob {18 black t "Amount of grain to add everywhere"} black {0 0 0} addUserKnob {6 black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 minimum t "Minimum black level" R 0 0.01} minimum {0 0 0} addUserKnob {6 minimum_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {26 ""} addUserKnob {3 seed l Seed} seed 134 addUserKnob {32 reset l Reset T "knobs this \{rgb_size_multiplier 0 red_size 1.70 green_size 1.60 blue_size 1.50 red_i 1.00 green_i 0.75 blue_i 0.65 red_m 0.40 green_m 0.60 blue_m 1.65 black 0.00\}" +STARTLINE} } Input { inputs 0 name Input1 xpos 0 } set Nb552b800 [stack 0] Noise { output {rgba.red -rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.red_size.w*(rgb_size_multiplier) i} {parent.red_size.h*(rgb_size_multiplier) i}} octaves 2 gamma 1 xrotate {{red_i*45 i}} yrotate {{red_i*45 i}} name red xpos 144 ypos -7 } Noise { output {-rgba.red rgba.green -rgba.blue -rgba.alpha} cliptype none replace true size {{parent.green_size.w*(rgb_size_multiplier) i} {parent.green_size.h*(rgb_size_multiplier) i}} zoffset 10 octaves 2 gamma 1 xrotate {{green_i*45 i}} yrotate {{green_i*45 i}} name green xpos 144 ypos 35 } Noise { output {-rgba.red -rgba.green rgba.blue -rgba.alpha} cliptype none replace true size {{parent.blue_size.w*(rgb_size_multiplier) i} {parent.blue_size.h*(rgb_size_multiplier) i}} zoffset 20 octaves 2 gamma 1 xrotate {{blue_i*45 i}} yrotate {{blue_i*45 i}} name blue xpos 144 ypos 77 } push $Nb552b800 MergeExpression { inputs 2 expr0 max(minimum.r,r+(2*Ar-1)*(r*red_m*noise_intensity_global)) expr1 max(minimum.g,g+(2*Ag-1)*(g*green_m*noise_intensity_global)) expr2 max(minimum.b,b+(2*Ab-1)*(b*blue_m*noise_intensity_global)) name MergeExpression1 xpos 144 ypos 117 } set Nb552a800 [stack 0] push $Nb552a800 push $Nb552b800 Copy { inputs 2 channels rgb maskChannelInput rgba.alpha name Copy1 xpos 0 ypos 105 disable {{parent.no_alpha i}} } Switch { inputs 2 which {{parent.no_alpha i}} name Switch1 xpos 144 ypos 171 } Output { name Output1 xpos 144 ypos 219 } end_group Dot { name Dot40 xpos 616 ypos 3434 } set Nb5529c00 [stack 0] Saturation { saturation 0 name Saturation2 xpos 583 ypos 3480 } push $Nb5529c00 Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy4 xpos 754 ypos 3425 } Constant { inputs 0 channels rgb color 1 name Constant2 label "Matte Box Edge" xpos -63 ypos 1215 } Crop { box {-100 -100 {root.width+100} {root.height+100}} name Crop3 xpos -63 ypos 1299 } Erode { channels rgba size 100 blur 1 maskChannelMask none name Erode1 xpos -63 ypos 1325 } Clamp { maskChannelMask none name Clamp2 xpos -63 ypos 1351 } Invert { maskChannelMask none name Invert2 xpos -63 ypos 1389 } Blur { size 200 name Blur40 xpos -63 ypos 1427 } Grade { blackpoint {{parent.bloomFalloffCrush}} name Grade1 xpos 191 ypos 1433 } set Nb64a3400 [stack 0] Dot { name Dot33 xpos 225 ypos 1528 } set Nb64a3000 [stack 0] Grade { multiply {1 0 0 1} name Grade2 xpos 191 ypos 2197 } push $Nb64a3000 push $Nb64a3000 push $Nb64a3000 push $Nb64a3000 push $Nb64a3000 push $Nb64a3000 push $Nd50e1000 Constant { inputs 0 channels rgb name Constant16 xpos 918 ypos 1117 } Switch { inputs 2 which {{parent.altCoreDisable}} name Switch6 xpos 798 ypos 1140 } Dot { name Dot6 xpos 832 ypos 1197 } Dot { name Dot5 xpos 409 ypos 1197 } Dot { name Dot21 xpos 409 ypos 1241 } set Nb64a1c00 [stack 0] Dot { name Dot23 xpos 485 ypos 1241 } Dot { name Dot24 xpos 485 ypos 1528 } push $Nb64a1c00 Merge2 { inputs 2+1 operation screen name Edge_Shimmer_Bloom label "Edge Shimmer" xpos 375 ypos 1518 disable {{parent.edgeBloomDisable}} } Blur { inputs 1+1 size 100 name Blur41 xpos 375 ypos 1556 disable {{parent.Edge_Shimmer_Bloom.disable}} } Blur { inputs 1+1 size 100 name Blur42 xpos 375 ypos 1594 disable {{parent.Edge_Shimmer_Bloom.disable}} } Blur { inputs 1+1 size 100 name Blur43 xpos 375 ypos 1632 disable {{parent.Edge_Shimmer_Bloom.disable}} } Grade { inputs 1+1 white 4 multiply 4 name Grade16 label Bloom xpos 375 ypos 1670 disable {{parent.Edge_Shimmer_Bloom.disable}} } Glow { inputs 1+1 name Glow1 xpos 375 ypos 1708 disable {{parent.Edge_Shimmer_Bloom.disable}} } Shuffle { alpha red name Shuffle5 xpos 375 ypos 1734 } Grade { multiply {{parent.edgeBloomColour.r} {parent.edgeBloomColour.g} {parent.edgeBloomColour.b} 1} name Grade9 xpos 375 ypos 1771 } VolumeRays { name FFX_VolumeRays label "Mar 20 2005" xpos 375 ypos 1863 disable {{parent.Edge_Shimmer_Bloom.disable}} blur_size 0 vol_pos {{"parent.flarePos.x + parent.coreOffset.x"} {"parent.flarePos.y + parent.coreOffset.y"}} raylength 13 quality Low chk_flicker false flicker_speed 0 flicker_size 0 xform_flicker true CCorrect1_gain 0.09 volume_end_color {0 0 0 0} radial_size 205 } set Nb6421d00 [stack 0] Blur { size 300 name Blur76 xpos 511 ypos 1863 } push $Nb64a3400 Constant { inputs 0 channels rgb color {0 0 0 1} color_panelDropped true name Constant4 xpos 653 ypos 1229 } Noise { maskChannelMask none size 15.8 zoffset {{frame/10}} lacunarity 10 translate {1660 676} center {{parent.flarePos.x} {parent.flarePos.y}} name Noise15 xpos 653 ypos 1321 } VolumeRays { inputs 2 name FFX_VolumeRays2 label "Mar 20 2005" xpos 653 ypos 1427 style "Alpha Edges" blur_size 0 vol_pos {{"parent.flarePos.x + parent.coreOffset.x" i} {"parent.flarePos.y + parent.coreOffset.y" i}} raylength 8 pre_blur 5.5 chk_flicker false flicker_size 2 xform_flicker true volume_end_color {0 0 0 0} radial_size 400 chk_use_mask true } set Nb631f200 [stack 0] push $Nb631f200 Sparkles { inputs 0 mode Sparkles position {{"parent.flarePos.x + parent.coreOffsetSlider.w"} {"parent.flarePos.y + parent.coreOffsetSlider.h"}} size 1300 anamorphic 1.1 rotation {{(parent.flarePos.x/30)+100}} ray_nb 600 ray_thick 1.45 spark_falloff 0 ray_falloff 10 brightness 0.12 chroma_shift 1.06 chroma_spread 0.16 motion 1000 fadeTolerance 0 broken_rays true broken_affected 43 broken_start 0.12 random_broken_start true broken_holes 0.15 random_broken_holes true sparks_direction 4 sparks_angle 190 name Sparkles3 xpos 846 ypos 1246 } Sparkles { mode Sparkles position {{"parent.flarePos.x + parent.coreOffsetSlider.w" i} {"parent.flarePos.y + parent.coreOffsetSlider.h" i}} size 1300 anamorphic 1.1 rotation {{(parent.flarePos.x/30)+100 i}} ray_nb 600 ray_thick 1.36 spark_falloff 0.16 ray_falloff 10 seed 90 chroma_shift 1.06 chroma_spread 0.16 broken_rays true broken_affected 43 broken_start 0.12 random_broken_start true broken_holes 0.15 random_broken_holes true name Sparkles4 xpos 846 ypos 1292 } VolumeRays { name FFX_VolumeRays4 label "Mar 20 2005" xpos 846 ypos 1351 blur_size 0 vol_pos {{"parent.flarePos.x + parent.coreOffset.x" i} {"parent.flarePos.y + parent.coreOffset.y" i}} raylength 11 pre_blur 6 quality Low chk_flicker false flicker_size 2 xform_flicker true volume_end_color {0 0 0 0} radial_size 400 } Merge2 { inputs 2 operation mask Achannels {rgba.red rgba.green rgba.blue rgba.red} maskChannelMask none name Merge282 xpos 846 ypos 1407 } Merge2 { inputs 2 operation geometric maskChannelMask none mix 0.5 name Merge283 xpos 846 ypos 1433 } Grade { multiply 2.65 maskChannelMask none name Grade4 xpos 851 ypos 1471 } Grade { multiply {{parent.edgeShimmerColour.r i} {parent.edgeShimmerColour.g i} {parent.edgeShimmerColour.b i} 1} name Grade3 xpos 846 ypos 1507 } Saturation { channels all saturation 0 maskChannelMask none name Saturation9 xpos 846 ypos 1551 disable {{parent.shimmerColour i}} } Grade { multiply {{parent.edgeShimmerIntensity i}} name Grade5 xpos 752 ypos 1557 } push $Nb631f200 Multiply { value 0 name Multiply1 xpos 653 ypos 1473 disable {{!parent.edgeBloomDisable i}} } Multiply { value {{parent.edgeBloomIntensity i}} name Multiply2 xpos 653 ypos 1511 } Merge2 { inputs 2 operation screen maskChannelMask none name Merge284 xpos 653 ypos 1557 disable {{parent.edgeShimmerDisable}} } Merge2 { inputs 2 operation multiply maskChannelMask none name Merge225 xpos 653 ypos 1869 } Dot { name Dot34 xpos 687 ypos 1921 } push $Nb6421d00 Multiply { value {{parent.edgeBloomIntensity}} name Multiply3 xpos 375 ypos 1901 } Merge2 { inputs 2 operation screen maskChannelMask none name Merge224 xpos 375 ypos 1945 } Dot { name Dot12 xpos 409 ypos 2034 } Dot { name Dot41 xpos 707 ypos 2034 } set Nb60ca800 [stack 0] Saturation { saturation 0 name Saturation3 xpos 674 ypos 2080 } push $Nb60ca800 Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy5 xpos 845 ypos 2025 } push $Nd50e1000 Input { inputs 0 name backplate xpos 1009 ypos 247 } Dot { name Dot66 xpos 1043 ypos 770 } set Nb60c9800 [stack 0] Merge2 { inputs 2 operation screen mix {{parent.coreMix}} name lens_core_enabler xpos 1009 ypos 1084 disable {{parent.coreDisable}} } Dot { name Dot7 xpos 1043 ypos 1361 } Merge2 { inputs 2 operation screen name dynamic_FX xpos 1009 ypos 2031 } Merge2 { inputs 2 name mask_preview xpos 1009 ypos 2197 disable {{!parent.previewEdgeArea}} } Merge2 { inputs 2 operation plus mix {{parent.coreCoronaMix}} name Merge2 xpos 1009 ypos 3431 disable {{parent.coreCoronaDisable}} } Merge2 { inputs 2 operation plus maskChannelMask none mix {{parent.coronaExtraMix}} name Core_Corona_Plus xpos 1009 ypos 4604 disable {{!parent.coronaExtraEnable}} } Merge2 { inputs 2 operation plus maskChannelMask none mix {{parent.anomalyMix}} name Anomolies_Plus xpos 1009 ypos 5722 disable {{!parent.lensAnomalyEnable}} } Merge2 { inputs 2 operation plus maskChannelMask none mix {{parent.lensPieceMainMix}} name lens_pieces_merge xpos 1009 ypos 7005 disable {{!parent.lensPieceMainEnable}} } Merge2 { inputs 2 operation plus maskChannelMask none mix {{parent.lensPieceBigMix}} name big_pieces_merge xpos 1009 ypos 7953 disable {{!parent.lensPieceBigEnable}} } Merge2 { inputs 2 operation plus maskChannelMask none mix {{parent.lensPieceRingsMix}} name rings_merge xpos 1009 ypos 8865 disable {{!parent.lensPieceRingsEnable}} } Merge2 { inputs 2 operation plus maskChannelMask none mix {{parent.lensPieceLinesMix}} name lines_merge xpos 1009 ypos 11952 disable {{!parent.lensPieceLinesEnable}} } Merge2 { inputs 2 operation plus maskChannelMask none mix {{parent.coreRaysMix}} name core_rays xpos 1009 ypos 13409 disable {{!parent.coreRaysEnable}} } Merge2 { inputs 2 operation plus mix {{parent.coreDogschidtMix}} name Merge7 xpos 1009 ypos 14776 disable {{parent.dogSchidtControl}} } Merge2 { inputs 2+1 operation plus mix {{0.2*parent.centerFrameBloomMix}} name Merge1 xpos 1009 ypos 16289 disable {{parent.centerFrameBloomDisable}} } Merge2 { inputs 2 name center_mask_preview xpos 1009 ypos 16355 disable {{!parent.previewCenterSelection}} } Merge2 { inputs 2 operation screen mix {{parent.lensDirtMix}} name Merge8 xpos 1009 ypos 16720 disable {{!parent.lensDirtEnable}} } Merge2 { inputs 2 name Merge16 xpos 1009 ypos 16773 disable {{!parent.lensDirtRangePreview}} } Dot { name Dot67 xpos 1043 ypos 17088 } set Nb6068c00 [stack 0] push $Nb60c9800 Dot { name Dot77 xpos 3709 ypos 770 } Dot { name Dot76 xpos 3709 ypos 16963 } set Nb6068400 [stack 0] Dot { name Dot78 xpos 1424 ypos 16963 } Switch { inputs 2 which {{parent.ghostCalc}} name Switch7 xpos 1390 ypos 17084 } Reformat { type scale scale {{parent.frameGhostQuality}} name Reformat6 xpos 1390 ypos 17118 } Crop { box {0 0 {"root.width * parent.frameGhostQuality"} {"parent.frameGhostQuality * root.height"}} reformat true crop false name Crop6 xpos 1390 ypos 17155 } set Nb600f000 [stack 0] Keyer { operation "luminance key" range {{parent.frameGhostSelection} 1 1 1} name Keyer1 xpos 1500 ypos 17149 } Premult { name Premult1 xpos 1500 ypos 17215 } Grade { channels all multiply {{"1 - parent.frameGhostGamma"}} white_clamp true name Grade25 xpos 1500 ypos 17259 } set Nb600e400 [stack 0] Dot { name Dot81 xpos 1242 ypos 17269 } set Nb600e000 [stack 0] Saturation { channels all saturation 0 name Saturation14 xpos 1124 ypos 17314 } push $Nb600e000 Copy { inputs 2 from0 rgba.alpha to0 rgba.red from1 rgba.alpha to1 rgba.green from2 rgba.alpha to2 rgba.blue name Copy16 xpos 1208 ypos 17394 } Shuffle { alpha white name Shuffle17 xpos 1208 ypos 17499 } Reformat { name Reformat7 xpos 1208 ypos 17544 } Dot { name Dot80 xpos 1242 ypos 20532 } Constant { inputs 0 channels rgb format "256 256 0 0 256 256 1 square_256" name Constant3 xpos 2330 ypos 17351 } Dot { name Dot70 xpos 2364 ypos 17569 } set Nb5fbfc00 [stack 0] Dot { name Dot88 xpos 2364 ypos 18182 } set Nb5fbf800 [stack 0] Dot { name Dot69 xpos 2364 ypos 18246 } set Nb5fbf400 [stack 0] Dot { name Dot106 xpos 2364 ypos 19061 } set Nb5fbf000 [stack 0] Dot { name Dot92 xpos 2364 ypos 19812 } push $Nb600f000 SphericalTransform { fix true name SphericalTransform1 xpos 1390 ypos 17207 } Reformat { format "256 256 0 0 256 256 1 square_256" resize distort name Reformat3 xpos 1390 ypos 17294 } Shuffle { alpha white name Shuffle16 xpos 1390 ypos 17354 } Dot { name Dot68 xpos 1424 ypos 17424 } set Nb5fbd800 [stack 0] Dot { name Dot86 xpos 1424 ypos 18149 } set Nb5fbd400 [stack 0] Dot { name Dot102 xpos 1424 ypos 18916 } set Nb5fbd000 [stack 0] Dot { name Dot103 xpos 1424 ypos 19667 } Grade { gamma {{parent.frameGhostFlare4ReflGamma} {parent.frameGhostFlare4ReflGamma} {parent.frameGhostFlare4ReflGamma} {parent.frameGhostFlare4ReflGamma}} name Grade32 xpos 1733 ypos 19663 } Transform { rotate {{parent.frameGhostFlare4ReflRotation}} center {128 128} name Transform31 xpos 1733 ypos 19710 } Blur { size {{parent.frameGhostFlare4ReflBlur}} name Blur24 xpos 1733 ypos 19751 } Constant { inputs 0 channels rgb format "256 256 0 0 256 256 1 square_256" name Constant8 xpos 2013 ypos 17018 } set Nb5f77800 [stack 0] Flare { position {128 128} radius {80 100 118.54} inner_color 1 outer_falloff 0.1 inner_falloff 0.76 flattening 1 sharpness 0.98 corners_angle 18 name Flare13 xpos 2453 ypos 17123 disable {{parent.Merge45.disable}} } set Nb5f77400 [stack 0] push $Nb5f77800 Flare { position {128 128} radius {80 100 118.54} inner_color 1 outer_falloff 0.1 inner_falloff 0.76 corners 10 flattening 1 sharpness 0.98 corners_angle 18 name Flare17 xpos 2343 ypos 17123 disable {{parent.Merge45.disable}} } set Nb5f76c00 [stack 0] push $Nb5f77800 Flare { position {128 128} radius {80 100 118.54} inner_color 1 outer_falloff 0.1 inner_falloff 0.76 corners 8 flattening 1 sharpness 0.98 corners_angle 18 name Flare16 xpos 2233 ypos 17123 disable {{parent.Merge45.disable}} } set Nb5f76400 [stack 0] push $Nb5f77800 Flare { position {128 128} radius {80 100 118.54} inner_color 1 outer_falloff 0.1 inner_falloff 0.76 corners 7 flattening 1 sharpness 0.98 corners_angle 18 name Flare15 xpos 2123 ypos 17123 disable {{parent.Merge45.disable}} } set Nb5f75c00 [stack 0] push $Nb5f77800 Flare { position {128 128} radius {80 100 118.54} inner_color 1 outer_falloff 0.1 inner_falloff 0.76 corners 6 flattening 1 sharpness 0.98 corners_angle 18 name Flare14 xpos 2013 ypos 17123 disable {{parent.Merge45.disable}} } set Nb5f75400 [stack 0] Switch { inputs 5 which {{parent.frameGhostFlare4Shape}} name Switch11 xpos 1930 ypos 19556 } Transform { rotate {{parent.frameGhostFlare4DiaphragmRot}} scale {{"parent.frameGhostFlare4DiaphragmSize + 0.001"}} center {128 128} name Transform40 xpos 1930 ypos 19608 } set Nb5f74c00 [stack 0] Noise { replace true maskChannelInput rgba.red size 280 gain {{parent.frameGhostFlare4Noise}} center {960 540} name Noise14 xpos 2052 ypos 19642 } push $Nb5f74c00 Merge2 { inputs 2 operation multiply mix {{"parent.frameGhostFlare4NoiseOpac * parent.frameGhostNoiseMult"}} name Merge68 xpos 1930 ypos 19648 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red name Merge69 xpos 1930 ypos 19751 } Merge2 { inputs 2 operation multiply name Merge70 xpos 1930 ypos 19808 } Reformat { format "256 256 0 0 256 256 1 square_256" name Reformat15 xpos 1930 ypos 19848 } Dot { name Dot97 xpos 1964 ypos 19907 } Dot { name Dot98 xpos 1869 ypos 19907 } Reformat { type scale scale {{"(parent.frameGhostQuality * parent.frameGhostFlare4Size.w) + 0.01"} {"(parent.frameGhostQuality * parent.frameGhostFlare4Size.h) + 0.01"}} name Reformat16 xpos 1835 ypos 19945 } push $Nb600e400 Dot { name Dot74 xpos 1534 ypos 17704 } set Nb5ef1c00 [stack 0] Dot { name Dot87 xpos 1534 ypos 18429 } set Nb5ef1800 [stack 0] Dot { name Dot104 xpos 1534 ypos 19196 } set Nb5ef1400 [stack 0] Dot { name Dot105 xpos 1534 ypos 19947 } Transform { scale {{parent.frameGhostFlare4PosOffset}} center {{"root.width/2 * parent.frameGhostQuality"} {"root.height/2 * parent.frameGhostQuality"}} name Transform41 xpos 1728 ypos 19943 } Dot { name Dot99 xpos 1762 ypos 20002 } Convolve { inputs 2 channels rgb name _convolveLens4 xpos 1835 ypos 19998 disable {{parent.Merge45.disable}} } Grade { multiply {{parent.frameGhostFlare4Colour} {parent.frameGhostFlare4Colour} {parent.frameGhostFlare4Colour} {parent.frameGhostFlare4Colour}} name Grade33 xpos 1835 ypos 20044 } Blur { size {{parent.frameGhostFlare4Blur}} name Blur26 xpos 1835 ypos 20087 } Dot { name Dot101 xpos 1869 ypos 20240 } Reformat { name Reformat18 xpos 2021 ypos 20236 } push $Nb5fbf000 push $Nb5fbd000 Grade { gamma {{parent.frameGhostFlare3ReflGamma} {parent.frameGhostFlare3ReflGamma} {parent.frameGhostFlare3ReflGamma} {parent.frameGhostFlare3ReflGamma}} name Grade30 xpos 1732 ypos 18912 } Transform { rotate {{parent.frameGhostFlare3ReflRotation}} center {128 128} name Transform21 xpos 1732 ypos 18959 } Blur { size {{parent.frameGhostFlare3ReflBlur}} name Blur22 xpos 1732 ypos 19000 } push $Nb5f77400 push $Nb5f76c00 push $Nb5f76400 push $Nb5f75c00 push $Nb5f75400 Switch { inputs 5 which {{parent.frameGhostFlare3Shape}} name Switch10 xpos 1929 ypos 18805 } Transform { rotate {{parent.frameGhostFlare3DiaphragmRot}} scale {{"parent.frameGhostFlare3DiaphragmSize + 0.001"}} center {128 128} name Transform22 xpos 1929 ypos 18857 } set Nb5eb5c00 [stack 0] Noise { replace true maskChannelInput rgba.red size 280 gain {{parent.frameGhostFlare3Noise}} center {960 540} name Noise12 xpos 2051 ypos 18891 } push $Nb5eb5c00 Merge2 { inputs 2 operation multiply mix {{"parent.frameGhostFlare3NoiseOpac * parent.frameGhostNoiseMult"}} name Merge64 xpos 1929 ypos 18897 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red name Merge65 xpos 1929 ypos 19000 } Merge2 { inputs 2 operation multiply name Merge66 xpos 1929 ypos 19057 } Reformat { format "256 256 0 0 256 256 1 square_256" name Reformat13 xpos 1929 ypos 19097 } Dot { name Dot93 xpos 1963 ypos 19156 } Dot { name Dot94 xpos 1868 ypos 19156 } Reformat { type scale scale {{"(parent.frameGhostQuality * parent.frameGhostFlare3Size.w) + 0.01"} {"(parent.frameGhostQuality * parent.frameGhostFlare3Size.h) + 0.01"}} name Reformat14 xpos 1834 ypos 19194 } push $Nb5ef1400 Transform { scale {{parent.frameGhostFlare3PosOffset}} center {{"root.width/2 * parent.frameGhostQuality"} {"root.height/2 * parent.frameGhostQuality"}} name Transform23 xpos 1727 ypos 19192 } Dot { name Dot95 xpos 1761 ypos 19251 } Convolve { inputs 2 channels rgb name _convolveLens3 xpos 1834 ypos 19247 disable {{parent.Merge45.disable}} } Grade { multiply {{parent.frameGhostFlare3Colour} {parent.frameGhostFlare3Colour} {parent.frameGhostFlare3Colour} {parent.frameGhostFlare3Colour}} name Grade31 xpos 1834 ypos 19293 } Blur { size {{parent.frameGhostFlare3Blur}} name Blur23 xpos 1834 ypos 19336 } Dot { name Dot100 xpos 1868 ypos 19431 } Reformat { name Reformat17 xpos 2020 ypos 19427 } push $Nb5fbf800 Dot { name Dot91 xpos 2090 ypos 18182 } Noise { size 19.5 zoffset 1.6 lacunarity 1.08 gain 0.116 gamma 1 center {128 128} name Noise9 xpos 2056 ypos 18243 } push $Nb5fbf400 Flare { position {128 128} radius {11.29 88.3 159.47} size_mult 0.79 ring_color 0.88 inner_color 0.46 outer_falloff 0.66 inner_falloff 1.3 name Flare18 xpos 2153 ypos 18242 disable {{parent.Merge45.disable}} } Merge2 { inputs 2 operation multiply mix 0.725 name Merge56 xpos 2153 ypos 18290 } push $Nb5fbd400 Grade { gamma {{parent.frameGhostFlare2ReflGamma} {parent.frameGhostFlare2ReflGamma} {parent.frameGhostFlare2ReflGamma} {parent.frameGhostFlare2ReflGamma}} name Grade27 xpos 1732 ypos 18145 } Transform { rotate {{parent.frameGhostFlare2ReflRotation}} center {128 128} name Transform18 xpos 1732 ypos 18192 } Blur { size {{parent.frameGhostFlare2ReflBlur}} name Blur18 xpos 1732 ypos 18233 } push $Nb5f77400 push $Nb5f76c00 push $Nb5f76400 push $Nb5f75c00 push $Nb5f75400 Switch { inputs 5 which {{parent.frameGhostFlare2Shape}} name Switch9 xpos 1929 ypos 18038 } Transform { rotate {{parent.frameGhostFlare2DiaphragmRot}} scale {{"parent.frameGhostFlare2DiaphragmSize + 0.001"}} center {128 128} name Transform19 xpos 1929 ypos 18090 } set Nb5dea800 [stack 0] Noise { replace true maskChannelInput rgba.red size 280 gain {{parent.frameGhostFlare2Noise}} center {960 540} name Noise6 xpos 2051 ypos 18124 } push $Nb5dea800 Merge2 { inputs 2 operation multiply mix {{"parent.frameGhostFlare2NoiseOpac * parent.frameGhostNoiseMult"}} name Merge44 xpos 1929 ypos 18130 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red name Merge46 xpos 1929 ypos 18233 } Merge2 { inputs 2 operation multiply name Merge50 xpos 1929 ypos 18290 } Reformat { format "256 256 0 0 256 256 1 square_256" name Reformat9 xpos 1929 ypos 18330 } Dot { name Dot83 xpos 1963 ypos 18389 } Dot { name Dot84 xpos 1868 ypos 18389 } Reformat { type scale scale {{"(parent.frameGhostQuality * parent.frameGhostFlare2Size.w) + 0.01"} {"(parent.frameGhostQuality * parent.frameGhostFlare2Size.h) + 0.01"}} name Reformat10 xpos 1834 ypos 18427 } push $Nb5ef1800 Transform { scale {{parent.frameGhostFlare2PosOffset}} center {{"root.width/2 * parent.frameGhostQuality"} {"root.height/2 * parent.frameGhostQuality"}} name Transform20 xpos 1727 ypos 18425 } Dot { name Dot85 xpos 1761 ypos 18484 } Convolve { inputs 2 channels rgb name _convolveLens2 xpos 1834 ypos 18480 disable {{parent.Merge45.disable}} } Grade { multiply {{parent.frameGhostFlare2Colour} {parent.frameGhostFlare2Colour} {parent.frameGhostFlare2Colour} {parent.frameGhostFlare2Colour}} name Grade29 xpos 1834 ypos 18526 } Blur { size {{parent.frameGhostFlare2Blur}} name Blur19 xpos 1834 ypos 18569 } Dot { name Dot90 xpos 1868 ypos 18678 } Reformat { name Reformat12 xpos 2020 ypos 18674 } push $Nb5fbfc00 Flare { position {128 128} radius {11.29 88.3 159.47} size_mult 0.79 ring_color 0.88 inner_color 0.46 outer_falloff 0.66 inner_falloff 1.3 name Flare8 xpos 2185 ypos 17565 disable {{parent.Merge45.disable}} } push $Nb5fbd800 Grade { gamma {{parent.frameGhostFlare1ReflGamma} {parent.frameGhostFlare1ReflGamma} {parent.frameGhostFlare1ReflGamma} {parent.frameGhostFlare1ReflGamma}} name Grade24 xpos 1734 ypos 17420 } Transform { rotate {{parent.frameGhostFlare1ReflRotation}} center {128 128} name Transform5 xpos 1734 ypos 17467 } Blur { size {{parent.frameGhostFlare1ReflBlur}} name Blur14 xpos 1734 ypos 17508 } push $Nb5f76c00 push $Nb5f76400 push $Nb5f75c00 push $Nb5f75400 push $Nb5f77400 Switch { inputs 5 which {{parent.frameGhostFlare1Shape}} name Switch8 xpos 1931 ypos 17313 } Transform { rotate {{parent.frameGhostFlare1DiaphragmRot}} scale {{"parent.frameGhostFlare1DiaphragmSize + 0.001"}} center {128 128} name Transform9 xpos 1931 ypos 17365 } set Nb5d84400 [stack 0] Noise { replace true maskChannelInput rgba.red size 280 gain {{parent.frameGhostFlare1Noise}} center {960 540} name Noise4 xpos 2053 ypos 17399 } push $Nb5d84400 Merge2 { inputs 2 operation multiply mix {{"parent.frameGhostFlare1NoiseOpac * parent.frameGhostNoiseMult"}} name Merge43 xpos 1931 ypos 17405 } Merge2 { inputs 2 output rgb maskChannelInput rgba.red name Merge41 xpos 1931 ypos 17508 } Merge2 { inputs 2 operation multiply name Merge42 xpos 1931 ypos 17565 } Reformat { format "256 256 0 0 256 256 1 square_256" name Reformat4 xpos 1931 ypos 17605 } Dot { name Dot71 xpos 1965 ypos 17664 } Dot { name Dot72 xpos 1870 ypos 17664 } Reformat { type scale scale {{"(parent.frameGhostQuality * parent.frameGhostFlare1Size.w) + 0.01"} {"(parent.frameGhostQuality * parent.frameGhostFlare1Size.h) + 0.01"}} name Reformat5 xpos 1836 ypos 17702 } push $Nb5ef1c00 Transform { scale {{parent.frameGhostFlare1PosOffset}} center {{"root.width/2 * parent.frameGhostQuality"} {"root.height/2 * parent.frameGhostQuality"}} name Transform13 xpos 1729 ypos 17700 } Dot { name Dot73 xpos 1763 ypos 17759 } Convolve { inputs 2 channels rgb name _convolveLens1 xpos 1836 ypos 17755 disable {{parent.Merge45.disable}} } Grade { multiply {{parent.frameGhostFlare1Colour} {parent.frameGhostFlare1Colour} {parent.frameGhostFlare1Colour} {parent.frameGhostFlare1Colour}} name Grade26 xpos 1836 ypos 17801 } Blur { size {{parent.frameGhostFlare1Blur}} name Blur16 xpos 1836 ypos 17844 } Dot { name Dot89 xpos 1870 ypos 17909 } Reformat { name Reformat11 xpos 2091 ypos 17905 } Constant { inputs 0 channels rgb name Constant9 xpos 2442 ypos 17739 } Merge2 { inputs 2 operation screen mix {{parent.frameGhostFlare1Mix}} name Merge55 xpos 2442 ypos 17905 disable {{!parent.frameGhostFlare1Enable}} } Merge2 { inputs 2 operation screen mix {{parent.frameGhostFlare2Mix}} name Merge54 xpos 2442 ypos 18674 disable {{!parent.frameGhostFlare2Enable}} } Merge2 { inputs 2 operation screen mix {{parent.frameGhostFlare3Mix}} name Merge71 xpos 2442 ypos 19427 disable {{!parent.frameGhostFlare3Enable}} } Merge2 { inputs 2 operation screen mix {{parent.frameGhostFlare4Mix}} name Merge72 xpos 2443 ypos 20236 disable {{!parent.frameGhostFlare4Enable}} } Dot { name Dot82 xpos 2477 ypos 20459 } Reformat { name Reformat8 xpos 1707 ypos 20455 } Saturation { saturation {{parent.frameGhostSat}} name Saturation15 xpos 1554 ypos 20455 } Blur { size {{parent.frameGhostBlur}} name Blur17 xpos 1444 ypos 20449 } Grade { multiply {{parent.frameGhostOverallColour.r} {parent.frameGhostOverallColour.g} {parent.frameGhostOverallColour.b} 1} name Grade34 xpos 1323 ypos 20455 } push $Nb6068c00 Grade { multiply {{"parent.frameGhostPreview == 1 ? 0 : 1"}} name Grade28 xpos 1009 ypos 17327 } Merge2 { inputs 2 operation screen mix {{parent.frameGhostMix}} name Merge45 xpos 1010 ypos 20455 disable {{!parent.frameGhostEnable}} } Merge2 { inputs 2 operation atop name Merge40 xpos 1010 ypos 20528 disable {{!parent.frameGhostSelectionPreview}} } Dot { name Dot159 xpos 1044 ypos 20787 } set Nb5c4f400 [stack 0] Dot { name Dot162 xpos 1211 ypos 20787 } Dot { name Dot163 xpos 1211 ypos 20830 } push $Nb6068400 Dot { name Dot161 xpos 3709 ypos 20787 } Dot { name Dot160 xpos 1296 ypos 20787 } Switch { inputs 2 which {{parent.bloomType}} name Switch12 xpos 1262 ypos 20826 } Dot { name Dot176 xpos 1296 ypos 20871 } set Nb5c4e000 [stack 0] Dot { name Dot177 xpos 1655 ypos 20871 } Grade { blackpoint 0.03 name Grade106 xpos 1621 ypos 20907 } Saturation { saturation 0.34 name Saturation37 xpos 1621 ypos 20939 } set Nb5c4d400 [stack 0] Dot { name Dot179 xpos 1743 ypos 20943 } Glow2 { tolerance {{parent.bloomTolerance}} effect_only true size {0 {"(parent.bloomAmount + 1) "}} name Glow41 xpos 1709 ypos 20985 } push $Nb5c4d400 Glow2 { tolerance {{parent.bloomTolerance}} effect_only true size {{"(parent.bloomAmount + 1) "} 0} name Glow39 xpos 1621 ypos 20984 } Merge2 { inputs 2 operation screen name Merge335 xpos 1621 ypos 21028 } Merge2 { inputs 2 operation multiply mix {{parent.bloomNoiseAmount}} name Merge336 xpos 1621 ypos 21086 disable {{!parent.bloomNoiseEnable}} } Shuffle { alpha white name Shuffle48 xpos 1621 ypos 21138 } set Nb5beb800 [stack 0] Dot { name Dot175 xpos 1655 ypos 21257 } push $N884f1c00 push $Nb5c4e000 Dot { name Dot165 xpos 1296 ypos 20912 } set Nb5beb000 [stack 0] Dot { name Dot164 xpos 1409 ypos 20912 } Glow2 { tolerance {{parent.bloomTolerance}} effect_only true size {{"parent.Glow16.size * parent.bloomRatio"}} name Glow17 xpos 1375 ypos 20952 } push $Nb5beb000 Glow2 { tolerance {{parent.bloomTolerance}} effect_only true size {{"(parent.bloomAmount + 1) * 10"}} name Glow16 xpos 1262 ypos 20951 } Dot { name Dot166 xpos 1296 ypos 21010 } Merge2 { inputs 2 operation plus name Merge321 xpos 1375 ypos 21006 } Merge2 { inputs 2 operation multiply mix {{parent.bloomNoiseAmount}} name Merge322 xpos 1375 ypos 21086 disable {{!parent.bloomNoiseEnable}} } set Nb5be9800 [stack 0] Dot { name Dot172 xpos 1293 ypos 21090 } Shuffle { alpha white name Shuffle44 xpos 1259 ypos 21230 } Switch { inputs 2 which {{parent.bloomTypeAlt}} name Switch15 xpos 1259 ypos 21298 } push $Nb5beb000 Dot { name Dot168 xpos 1186 ypos 20912 } Grade { blackpoint {{parent.bloomTolerance}} white_clamp true name Grade104 xpos 1152 ypos 20950 } Shuffle { alpha white name Shuffle40 xpos 1152 ypos 20983 } Dot { name Dot169 xpos 1186 ypos 21033 } Shuffle { alpha white name Shuffle43 xpos 1152 ypos 21221 } Constant { inputs 0 channels rgb color {0 0 0 1} name Constant17 xpos 1387 ypos 21315 } Dot { name Dot173 xpos 1421 ypos 21403 } Switch { inputs 3 which {{parent.bloomPreview}} name Switch13 xpos 1152 ypos 21399 } Dot { name Dot170 xpos 1186 ypos 21475 } push $Nb5beb800 push $Nb5be9800 Shuffle { alpha white name Shuffle41 xpos 1375 ypos 21132 } Switch { inputs 2 which {{parent.bloomTypeAlt}} name Switch16 xpos 1375 ypos 21204 } Dot { name Dot171 xpos 1409 ypos 21262 } push $Nb5c4f400 Merge2 { inputs 2 operation plus mix {{parent.bloomStrength}} name Merge325 xpos 1010 ypos 21258 disable {{!parent.bloomEnable}} } Merge2 { inputs 2 name Merge323 xpos 1010 ypos 21471 } Grade { multiply {{"\[value parent.result]"}} name Grade103 xpos 1010 ypos 21518 disable {{!parent.enable_animation}} } LensDistortion { serializeKnob "" serialiseKnob "22 serialization::archive 16 0 0 0 0 0 0 0 0 0 0 0 0" distortion1 {{parent.lensFXDistortionAmount}} distortion2 {{parent.lensFXDistortionAmount2}} cardScale {1.055947661 1.055947661 1} a -0.2370844334 b 0.1978171021 c 0.01917515695 name LensDistortion1 xpos 1010 ypos 21681 disable {{!parent.lensDistortionEnable}} } Blur { inputs 1+1 size {{parent.edgeBlurAmount}} name Blur6 xpos 1010 ypos 21737 disable {{!parent.edgeBlurEnable}} } Merge2 { inputs 2 name Merge19 xpos 1010 ypos 21852 disable {{!parent.previewEdgeBlur}} } Dot { name Dot14 xpos 1044 ypos 21897 } set Nb5b88800 [stack 0] Dot { name Dot28 xpos 1167 ypos 21897 } set Nb5b88400 [stack 0] Dot { name Dot29 xpos 1279 ypos 21897 } set Nb5b23c00 [stack 0] Dot { name Dot30 xpos 1389 ypos 21897 } Shuffle { red black green black alpha black name Shuffle10 xpos 1355 ypos 21953 } Transform { scale {{"1 + parent.chromaShiftAmountSlider"}} center {960 540} name Transform_B xpos 1355 ypos 22020 disable {{"!parent.chromaB +!parent.lensChromaEnable"}} } Dot { name Dot32 xpos 1389 ypos 22122 } push $Nb5b23c00 Shuffle { red black blue black alpha black name Shuffle6 xpos 1245 ypos 21953 } Transform { scale {{"1 + parent.chromaShiftAmountSlider"}} center {960 540} name Transform_G xpos 1245 ypos 22020 disable {{"!parent.chromaG +!parent.lensChromaEnable"}} } Dot { name Dot31 xpos 1279 ypos 22074 } push $Nb5b88400 Shuffle { green black blue black alpha black name Shuffle4 xpos 1133 ypos 21954 } Transform { scale {{"1 + parent.chromaShiftAmountSlider"}} center {960 540} name Transform_R xpos 1133 ypos 22021 disable {{"!parent.chromaR +!parent.lensChromaEnable"}} } Merge2 { inputs 2 operation plus name Merge17 xpos 1133 ypos 22070 } Merge2 { inputs 2 operation plus name Merge18 xpos 1133 ypos 22118 } Dot { name Dot35 xpos 1167 ypos 22182 } push $Nb5b88800 GodRays { channels {rgba.red -rgba.green -rgba.blue none} scale {{"1 + parent.chromaShiftAmountSlider"}} name GodRays1 xpos 1010 ypos 21983 disable {{"!parent.chromaR +!parent.lensChromaEnable"}} } GodRays { channels {-rgba.red rgba.green -rgba.blue none} scale {{"1 + parent.chromaShiftAmountSlider"}} name GodRays2 xpos 1010 ypos 22032 disable {{"!parent.chromaG +!parent.lensChromaEnable"}} } GodRays { channels {-rgba.red -rgba.green rgba.blue none} scale {{"1 + parent.chromaShiftAmountSlider"}} name GodRays3 xpos 1010 ypos 22073 disable {{"!parent.chromaB +!parent.lensChromaEnable"}} } Switch { inputs 2 which {{parent.chromaShiftType}} name Switch5 xpos 1010 ypos 22178 } Grade { inputs 1+1 multiply {{"1 - parent.vignettingAmountSlider"}} name Grade19 xpos 1010 ypos 22253 disable {{!parent.vignettingEnable}} } Merge2 { inputs 2 name Merge21 xpos 1010 ypos 22362 disable {{!parent.vignettingRegionPreview}} } Shuffle { name Shuffle3 xpos 1010 ypos 22408 } Dot { name Dot79 xpos 1044 ypos 22612 } set Nb5acec00 [stack 0] Saturation { saturation 0 name Saturation6 xpos 907 ypos 22608 } push $Nb5acec00 Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy3 xpos 1010 ypos 22671 } Crop { box {0 0 {root.width} {root.height}} crop false name Crop2 xpos 1010 ypos 22840 } Reformat { format {{{parent.backdropConstant.format}}} name Reformat1 xpos 1010 ypos 22888 } Output { name result xpos 1010 ypos 22974 } push $N8fe56800 push $N8fe56000 VolumeRays { inputs 2 name VolumeRays1 label "Mar 20 2005" xpos 605 ypos 16148 vol_pos {{parent.flarePos.x} {parent.flarePos.y}} quality Low chk_flicker false volume_end_color {0 0 0 0} radial_size 400 } StickyNote { inputs 0 name StickyNote30 label "Chopped Lines #1" xpos -2868 ypos 9684 } StickyNote { inputs 0 name StickyNote31 label "Chopped Lines #1" xpos -3160 ypos 10456 } StickyNote { inputs 0 name StickyNote3 label "Chopped Lines #1" xpos -1501 ypos 9377 } push $N8d12ec00 Viewer { frame_range 0-191 fps 25 name Viewer1 selected true xpos -706 ypos 14548 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_LightSwitch.gizmo ================================================ add_layer {LG01 LG01.red LG01.green LG01.blue LG01.alpha} add_layer {LG02 LG02.red LG02.green LG02.blue LG02.alpha} add_layer {LG03 LG03.red LG03.green LG03.blue LG03.alpha} add_layer {LG04 LG04.red LG04.green LG04.blue LG04.alpha} add_layer {LG05 LG05.red LG05.green LG05.blue LG05.alpha} add_layer {LG06 LG06.red LG06.green LG06.blue LG06.alpha} add_layer {LG07 LG07.red LG07.green LG07.blue LG07.alpha} Group { name LightSwitch tile_color 0x34c00ff note_font Verdana selected true xpos 3065 ypos 766 addUserKnob {20 LightSwitch} addUserKnob {4 chooseMethod l Method M {Subtractive Additive}} chooseMethod Additive addUserKnob {22 createLightSwitchPuppet l "Create New Light Switch Puppet from Values" -STARTLINE T "thisNode = nuke.thisNode()\n\nwith nuke.Root():\n try: \n # Create a new LightSwitch node\n newLightSwitch = nuke.nodePaste( '\{\}/nk_files/\{\}LightSwitchPuppet.nk'.format(NST_FolderPath, prefixNST) )\n \n for i in nuke.selectedNodes():\n i.setInput(0, None)\n i.setYpos(i.ypos() + 100 )\n i.setSelected(False)\n \n # Deselect all nodes\n nuke.selectAll()\n nuke.invertSelection()\n \n # Select Original LightSwitch\n thisNode.setSelected(True)\n \n newLightSwitch.knob(\"copyValuesFromLS\").execute()\n \n # Deselect all nodes\n nuke.selectAll()\n nuke.invertSelection()\n newLightSwitch.setSelected(True)\n \n except:\n nuke.message(\"No LightSwitchPuppet installation found. Cannot Create new LightSwitch.\")"} addUserKnob {22 copyValuesFromLS l "Copy Values from Selected LightSwitch" T "thisNode = nuke.thisNode()\n\nwith nuke.Root():\n selectedNode = nuke.selectedNode()\n\nif selectedNode and selectedNode != thisNode and \"LightSwitch\" in selectedNode.name():\n for knob in thisNode.knobs():\n if knob in selectedNode.knobs() and knob not in \[\"xpos\",\"ypos\",\"name\",\"knobChanged\", \"label\", \"note_font_size\", \"note_font_color\"]:\n thisNode\[knob].fromScript(selectedNode\[knob].toScript())\n \nelse:\n nuke.message(\"Please select another LightSwitch node to copy values from\")" +STARTLINE} addUserKnob {22 reset l "Reset" -STARTLINE T "node = nuke.thisNode()\nexposures = \[]\nmultiplies = \[]\nmutes = \[]\nsolos = \[]\nbypasses = \[]\n\nfor knob in node.knobs():\n if \"panelDropped\" not in knob:\n if \"exp\" in knob:\n exposures.append(knob)\n elif \"mult\" in knob:\n multiplies.append(knob)\n elif \"mute\" in knob:\n mutes.append(knob)\n elif \"solo\" in knob:\n mutes.append(knob)\n elif \"bypass\" in knob:\n mutes.append(knob)\n \nexposures.sort()\nmultiplies.sort()\nmutes.sort()\nsolos.sort()\nbypasses.sort()\n\nfor exp in exposures:\n node.knob(exp).setValue(0)\n\nfor mult in multiplies:\n node.knob(mult).setValue(1, 0)\n node.knob(mult).setValue(1, 1)\n node.knob(mult).setValue(1, 2)\n\n\nfor mute in mutes:\n node.knob(mute).setValue(0)\n \nfor solo in solos:\n node.knob(solo).setValue(0)\n\nfor bypass in bypasses:\n node.knob(bypass).setValue(0)\n \nnode.knob(\"mix\").setValue(1)"} addUserKnob {26 ""} addUserKnob {26 LG01 l "LightGroup 01" T " "} addUserKnob {6 mute1 l Mute -STARTLINE} addUserKnob {6 solo1 l Solo -STARTLINE} addUserKnob {6 bypass1 l Bypass -STARTLINE} addUserKnob {41 shuffleLG01 l "" -STARTLINE T Shuffle1.in} addUserKnob {7 exp1 l Exposure R -5 5} addUserKnob {18 mult1 l Multiply} mult1 {1 1 1} addUserKnob {6 mult1_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {26 LG02 l "LightGroup 02" T " "} addUserKnob {6 mute2 l Mute -STARTLINE} addUserKnob {6 solo2 l Solo -STARTLINE} addUserKnob {6 bypass2 l Bypass -STARTLINE} addUserKnob {41 shuffleLG02 l "" -STARTLINE T Shuffle2.in} addUserKnob {7 exp2 l Exposure R -5 5} addUserKnob {18 mult2 l Multiply} mult2 {1 1 1} addUserKnob {6 mult2_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 color_rgb_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {6 color_rgb_1_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {26 ""} addUserKnob {26 LG03 l "LightGroup 03" T " "} addUserKnob {6 mute3 l Mute -STARTLINE} addUserKnob {6 solo3 l Solo -STARTLINE} addUserKnob {6 bypass3 l Bypass -STARTLINE} addUserKnob {41 shuffleLG03 l "" -STARTLINE T Shuffle3.in} addUserKnob {7 exp3 l Exposure R -5 5} addUserKnob {18 mult3 l Multiply} mult3 {1 1 1} addUserKnob {6 mult3_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {26 LG04 l "LightGroup 04" T " "} addUserKnob {6 mute4 l Mute -STARTLINE} addUserKnob {6 solo4 l Solo -STARTLINE} addUserKnob {6 bypass4 l Bypass -STARTLINE} addUserKnob {41 shuffleLG04 l "" -STARTLINE T Shuffle4.in} addUserKnob {7 exp4 l Exposure R -5 5} addUserKnob {18 mult4 l Multiply} mult4 {1 1 1} addUserKnob {6 mult4_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {26 LG05 l "LightGroup 05" T " "} addUserKnob {6 mute5 l Mute -STARTLINE} addUserKnob {6 solo5 l Solo -STARTLINE} addUserKnob {6 bypass5 l Bypass -STARTLINE} addUserKnob {41 shuffleLG05 l "" -STARTLINE T Shuffle5.in} addUserKnob {7 exp5 l Exposure R -5 5} addUserKnob {18 mult5 l Multiply} mult5 {1 1 1} addUserKnob {6 mult5_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {26 LG06 l "LightGroup 06" T " "} addUserKnob {6 mute6 l Mute -STARTLINE} addUserKnob {6 solo6 l Solo -STARTLINE} addUserKnob {6 bypass6 l Bypass -STARTLINE} addUserKnob {41 shuffleLG06 l "" -STARTLINE T Shuffle6.in} addUserKnob {7 exp6 l Exposure R -5 5} addUserKnob {18 mult6 l Multiply} mult6 {1 1 1} addUserKnob {6 mult6_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {26 LG07 l "LightGroup 07" T " "} addUserKnob {6 mute7 l Mute -STARTLINE} addUserKnob {6 solo7 l Solo -STARTLINE} addUserKnob {6 bypass7 l Bypass -STARTLINE} addUserKnob {41 shuffleLG07 l "" -STARTLINE T Shuffle7.in} addUserKnob {7 exp7 l Exposure R -5 5} addUserKnob {18 mult7 l Multiply} mult7 {1 1 1} addUserKnob {6 mult7_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {26 LG08 l "LightGroup 08" T " "} addUserKnob {6 mute8 l Mute -STARTLINE} addUserKnob {6 solo8 l Solo -STARTLINE} addUserKnob {6 bypass8 l Bypass -STARTLINE} addUserKnob {41 shuffleLG08 l "" -STARTLINE T Shuffle8.in} addUserKnob {7 exp8 l Exposure R -5 5} addUserKnob {18 mult8 l Multiply} mult8 {1 1 1} addUserKnob {6 mult8_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {26 LG09 l "LightGroup 09" T " "} addUserKnob {6 mute9 l Mute -STARTLINE} addUserKnob {6 solo9 l Solo -STARTLINE} addUserKnob {6 bypass9 l Bypass -STARTLINE} addUserKnob {41 shuffleLG09 l "" -STARTLINE T Shuffle9.in} addUserKnob {7 exp9 l Exposure R -5 5} addUserKnob {18 mult9 l Multiply} mult9 {1 1 1} addUserKnob {6 mult9_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {26 _1 l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge19.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge19.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge19.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge19.fringe} addUserKnob {41 mix T Merge19.mix} } Input { inputs 0 name Inputmask xpos 166 ypos 5483 number 1 } Input { inputs 0 name Input xpos 0 } Dot { name Dot1 note_font_size 41 xpos 34 ypos 207 } set N5eb6d800 [stack 0] Dot { name Dot2 note_font_size 41 xpos -652 ypos 207 } Dot { name Dot3 note_font_size 41 xpos -652 ypos 332 } set N5eb6d000 [stack 0] Dot { name Dot8 note_font_size 41 xpos -652 ypos 843 } set N5eb6cc00 [stack 0] Dot { name Dot13 note_font_size 41 xpos -652 ypos 1370 } set N5eb6c800 [stack 0] Dot { name Dot18 note_font_size 41 xpos -652 ypos 1920 } set N5eb6c400 [stack 0] Dot { name Dot23 note_font_size 41 xpos -652 ypos 2475 } set N5eb13c00 [stack 0] Dot { name Dot28 note_font_size 41 xpos -652 ypos 3013 } set N5eb13800 [stack 0] Dot { name Dot33 note_font_size 41 xpos -652 ypos 3583 } set N5eb13400 [stack 0] Dot { name Dot38 note_font_size 41 xpos -652 ypos 4136 } set N5eb13000 [stack 0] Dot { name Dot43 note_font_size 41 xpos -652 ypos 4716 } set N5eb12c00 [stack 0] Shuffle { in none name Shuffle9 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat -> \[value out2]] \}]" note_font_size 15 note_font_color 0xffffffff xpos -334 ypos 4705 } set N5eb12800 [stack 0] Remove { operation keep channels rgba name Remove9 xpos -334 ypos 4745 } set N5eb12400 [stack 0] EXPTool { mode Stops red {{parent.exp9}} green {{parent.exp9}} blue {{parent.exp9}} name ExposureLG09_ label "\[value red]" xpos -502 ypos 4779 } Multiply { channels rgb value {{parent.mult9} {parent.mult9} {parent.mult9} {parent.mult9}} name MultiplyColor09_ label "\[value value]" xpos -502 ypos 4834 } push $N5eb12400 Switch { inputs 2 which {{!bypass9}} name SwitchBypass09_ xpos -334 ypos 4838 } Multiply { value 0 name MultiplyMute09_ label "\[value value]" xpos -334 ypos 4886 disable {{!parent.mute9}} } Multiply { value 0 name MultiplySolo09_ label "\[value value]" xpos -334 ypos 4928 disable {{"solo1 + \nsolo2 + \nsolo3 + \nsolo4 + \nsolo5 + \nsolo6 + \nsolo7 + \nsolo8 + \nsolo9 \n\n== 0 ? 1 : solo9"}} } Dot { name Dot44 note_font_size 41 xpos -300 ypos 4996 } set N5eb11000 [stack 0] Dot { name Dot47 note_font_size 41 xpos -300 ypos 5039 } set N5eb10c00 [stack 0] Dot { name Dot20 note_font_size 41 xpos -300 ypos 5086 } set N5eb10800 [stack 0] Dot { name Dot48 note_font_size 41 xpos -300 ypos 5132 } push $N5eb10800 push $N5eb13000 Shuffle { in none name Shuffle8 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat -> \[value out2]] \}]" note_font_size 15 note_font_color 0xffffffff xpos -338 ypos 4125 } set N5e533c00 [stack 0] Remove { operation keep channels rgba name Remove8 xpos -338 ypos 4165 } set N5e533800 [stack 0] EXPTool { mode Stops red {{parent.exp8}} green {{parent.exp8}} blue {{parent.exp8}} name ExposureLG08_ label "\[value red]" xpos -469 ypos 4199 } Multiply { channels rgb value {{parent.mult8} {parent.mult8} {parent.mult8} {parent.mult8}} name MultiplyColor08_ label "\[value value]" xpos -469 ypos 4254 } push $N5e533800 Switch { inputs 2 which {{!bypass8}} name SwitchBypass08_ xpos -338 ypos 4258 } Multiply { value 0 name MultiplyMute08_ label "\[value value]" xpos -338 ypos 4286 disable {{!parent.mute8}} } Multiply { value 0 name MultiplySolo08_ label "\[value value]" xpos -338 ypos 4328 disable {{"solo1 + \nsolo2 + \nsolo3 + \nsolo4 + \nsolo5 + \nsolo6 + \nsolo7 + \nsolo8 + \nsolo9 \n\n== 0 ? 1 : solo8"}} } Dot { name Dot39 note_font_size 41 xpos -304 ypos 4396 } set N5e532400 [stack 0] Dot { name Dot45 note_font_size 41 xpos -304 ypos 4441 } set N5e532000 [stack 0] Dot { name Dot17 note_font_size 41 xpos -304 ypos 4494 } set N5e531c00 [stack 0] Dot { name Dot46 note_font_size 41 xpos -304 ypos 4542 } push $N5e531c00 push $N5eb13400 Shuffle { in LG07 name Shuffle7 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat -> \[value out2]] \}]" note_font_size 15 note_font_color 0xffffffff xpos -340 ypos 3572 } set N5e531400 [stack 0] Remove { operation keep channels rgba name Remove7 xpos -340 ypos 3612 } set N5e531000 [stack 0] EXPTool { mode Stops red {{parent.exp7}} green {{parent.exp7}} blue {{parent.exp7}} name ExposureLG07_ label "\[value red]" xpos -475 ypos 3646 } Multiply { channels rgb value {{parent.mult7} {parent.mult7} {parent.mult7} {parent.mult7}} name MultiplyColor07_ label "\[value value]" xpos -475 ypos 3701 } push $N5e531000 Switch { inputs 2 which {{!bypass7}} name SwitchBypass07_ xpos -340 ypos 3705 } Multiply { value 0 name MultiplyMute07_ label "\[value value]" xpos -340 ypos 3733 disable {{!parent.mute7}} } Multiply { value 0 name MultiplySolo07_ label "\[value value]" xpos -340 ypos 3775 disable {{"solo1 + \nsolo2 + \nsolo3 + \nsolo4 + \nsolo5 + \nsolo6 + \nsolo7 + \nsolo8 + \nsolo9 \n\n== 0 ? 1 : solo7"}} } Dot { name Dot34 note_font_size 41 xpos -306 ypos 3843 } set N5e4c7800 [stack 0] Dot { name Dot41 note_font_size 41 xpos -305 ypos 3888 } set N5e4c7400 [stack 0] Dot { name Dot16 note_font_size 41 xpos -306 ypos 3938 } set N5e4c7000 [stack 0] Dot { name Dot42 note_font_size 41 xpos -306 ypos 3982 } push $N5e4c7000 push $N5eb13800 Shuffle { in LG06 name Shuffle6 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat -> \[value out2]] \}]" note_font_size 15 note_font_color 0xffffffff xpos -340 ypos 3002 } set N5e4c6800 [stack 0] Remove { operation keep channels rgba name Remove6 xpos -340 ypos 3042 } set N5e4c6400 [stack 0] EXPTool { mode Stops red {{parent.exp6}} green {{parent.exp6}} blue {{parent.exp6}} name ExposureLG06_ label "\[value red]" xpos -502 ypos 3076 } Multiply { channels rgb value {{parent.mult6} {parent.mult6} {parent.mult6} {parent.mult6}} name MultiplyColor06_ label "\[value value]" xpos -502 ypos 3131 } push $N5e4c6400 Switch { inputs 2 which {{!bypass6}} name SwitchBypass06_ xpos -340 ypos 3135 } Multiply { value 0 name MultiplyMute06_ label "\[value value]" xpos -340 ypos 3202 disable {{!parent.mute6}} } Multiply { value 0 name MultiplySolo06_ label "\[value value]" xpos -340 ypos 3244 disable {{"solo1 + \nsolo2 + \nsolo3 + \nsolo4 + \nsolo5 + \nsolo6 + \nsolo7 + \nsolo8 + \nsolo9 \n\n== 0 ? 1 : solo6"}} } Dot { name Dot29 note_font_size 41 xpos -306 ypos 3312 } set N5e4c5000 [stack 0] Dot { name Dot37 note_font_size 41 xpos -306 ypos 3361 } set N5e4c4c00 [stack 0] Dot { name Dot15 note_font_size 41 xpos -306 ypos 3407 } set N5e4c4800 [stack 0] Dot { name Dot40 note_font_size 41 xpos -306 ypos 3452 } push $N5e4c4800 push $N5eb13c00 Shuffle { in LG05 name Shuffle5 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat -> \[value out2]] \}]" note_font_size 15 note_font_color 0xffffffff xpos -344 ypos 2464 } set N5e483c00 [stack 0] Remove { operation keep channels rgba name Remove5 xpos -344 ypos 2504 } set N5e483800 [stack 0] EXPTool { mode Stops red {{parent.exp5}} green {{parent.exp5}} blue {{parent.exp5}} name ExposureLG05_ label "\[value red]" xpos -502 ypos 2538 } Multiply { channels rgb value {{parent.mult5} {parent.mult5} {parent.mult5} {parent.mult5}} name MultiplyColor05_ label "\[value value]" xpos -502 ypos 2583 } push $N5e483800 Switch { inputs 2 which {{!bypass5}} name SwitchBypass05_ xpos -344 ypos 2587 } Multiply { value 0 name MultiplyMute05_ label "\[value value]" xpos -344 ypos 2625 disable {{!parent.mute5}} } Multiply { value 0 name MultiplySolo05_ label "\[value value]" xpos -344 ypos 2667 disable {{"solo1 + \nsolo2 + \nsolo3 + \nsolo4 + \nsolo5 + \nsolo6 + \nsolo7 + \nsolo8 + \nsolo9 \n\n== 0 ? 1 : solo5"}} } Dot { name Dot24 note_font_size 41 xpos -310 ypos 2735 } set N5e482400 [stack 0] Dot { name Dot35 note_font_size 41 xpos -310 ypos 2775 } set N5e482000 [stack 0] Dot { name Dot12 note_font_size 41 xpos -310 ypos 2820 } set N5e481c00 [stack 0] Dot { name Dot36 note_font_size 41 xpos -310 ypos 2868 } push $N5e481c00 push $N5eb6c400 Shuffle { in LG04 name Shuffle4 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat -> \[value out2]] \}]" note_font_size 15 note_font_color 0xffffffff xpos -355 ypos 1909 } set N5e481400 [stack 0] Remove { operation keep channels rgba name Remove4 xpos -355 ypos 1949 } set N5e481000 [stack 0] EXPTool { mode Stops red {{parent.exp4}} green {{parent.exp4}} blue {{parent.exp4}} name ExposureLG04_ label "\[value red]" xpos -502 ypos 1983 } Multiply { channels rgb value {{parent.mult4} {parent.mult4} {parent.mult4} {parent.mult4}} name MultiplyColor04_ label "\[value value]" xpos -502 ypos 2028 } push $N5e481000 Switch { inputs 2 which {{!bypass4}} name SwitchBypass04_ xpos -355 ypos 2032 } Multiply { value 0 name MultiplyMute04_ label "\[value value]" xpos -355 ypos 2070 disable {{!parent.mute4}} } Multiply { value 0 name MultiplySolo04_ label "\[value value]" xpos -355 ypos 2112 disable {{"solo1 + \nsolo2 + \nsolo3 + \nsolo4 + \nsolo5 + \nsolo6 + \nsolo7 + \nsolo8 + \nsolo9 \n\n== 0 ? 1 : solo4"}} } Dot { name Dot19 note_font_size 41 xpos -321 ypos 2180 } set N5e423800 [stack 0] Dot { name Dot31 note_font_size 41 xpos -321 ypos 2223 } set N5e423400 [stack 0] Dot { name Dot11 note_font_size 41 xpos -321 ypos 2267 } set N5e423000 [stack 0] Dot { name Dot32 note_font_size 41 xpos -321 ypos 2318 } push $N5e423000 push $N5eb6c800 Shuffle { in LG03 name Shuffle3 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat -> \[value out2]] \}]" note_font_size 15 note_font_color 0xffffffff xpos -363 ypos 1359 } set N5e422800 [stack 0] Remove { operation keep channels rgba name Remove3 xpos -363 ypos 1399 } set N5e422400 [stack 0] EXPTool { mode Stops red {{parent.exp3}} green {{parent.exp3}} blue {{parent.exp3}} name ExposureLG03_ label "\[value red]" xpos -502 ypos 1433 } Multiply { channels rgb value {{parent.mult3} {parent.mult3} {parent.mult3} {parent.mult3}} name MultiplyColor03_ label "\[value value]" xpos -502 ypos 1478 } push $N5e422400 Switch { inputs 2 which {{!bypass3}} name SwitchBypass03_ xpos -363 ypos 1482 } Multiply { value 0 name MultiplyMute03_ label "\[value value]" xpos -363 ypos 1520 disable {{!parent.mute3}} } Multiply { value 0 name MultiplySolo03_ label "\[value value]" xpos -363 ypos 1562 disable {{"solo1 + \nsolo2 + \nsolo3 + \nsolo4 + \nsolo5 + \nsolo6 + \nsolo7 + \nsolo8 + \nsolo9 \n\n== 0 ? 1 : solo3"}} } Dot { name Dot14 note_font_size 41 xpos -329 ypos 1630 } set N5e421000 [stack 0] Dot { name Dot27 note_font_size 41 xpos -329 ypos 1673 } set N5e420c00 [stack 0] Dot { name Dot10 note_font_size 41 xpos -329 ypos 1708 } set N5e420800 [stack 0] Dot { name Dot30 note_font_size 41 xpos -329 ypos 1750 } push $N5e420800 push $N5eb6cc00 Shuffle { in LG02 name Shuffle2 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat -> \[value out2]] \}]" note_font_size 15 note_font_color 0xffffffff xpos -385 ypos 832 } set N5e3cbc00 [stack 0] Remove { operation keep channels rgba name Remove2 xpos -385 ypos 872 } set N5e3cb800 [stack 0] EXPTool { mode Stops red {{parent.exp2}} green {{parent.exp2}} blue {{parent.exp2}} name ExposureLG02_ label "\[value red]" xpos -502 ypos 906 } Multiply { channels rgb value {{parent.mult2} {parent.mult2} {parent.mult2} {parent.mult2}} name MultiplyColor02_ label "\[value value]" xpos -502 ypos 951 } push $N5e3cb800 Switch { inputs 2 which {{!bypass2}} name SwitchBypass02_ xpos -385 ypos 955 } Multiply { value 0 name MultiplyMute02_ label "\[value value]" xpos -385 ypos 993 disable {{!parent.mute2}} } Multiply { value 0 name MultiplySolo02_ label "\[value value]" xpos -385 ypos 1035 disable {{"solo1 + \nsolo2 + \nsolo3 + \nsolo4 + \nsolo5 + \nsolo6 + \nsolo7 + \nsolo8 + \nsolo9 \n\n== 0 ? 1 : solo2"}} } Dot { name Dot9 note_font_size 41 xpos -351 ypos 1103 } set N5e3ca400 [stack 0] Dot { name Dot25 note_font_size 41 xpos -352 ypos 1134 } set N5e3ca000 [stack 0] Dot { name Dot7 note_font_size 41 xpos -351 ypos 1169 } set N5e3c9c00 [stack 0] Dot { name Dot26 note_font_size 41 xpos -351 ypos 1214 } push $N5e3c9c00 push $N5eb6d000 Shuffle { in LG01 name Shuffle1 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat -> \[value out2]] \}]" note_font_size 15 note_font_color 0xffffffff xpos -370 ypos 321 } set N5e3c9400 [stack 0] Remove { operation keep channels rgba name Remove1 xpos -370 ypos 361 } set N5e3c9000 [stack 0] EXPTool { mode Stops red {{parent.exp1}} green {{parent.exp1}} blue {{parent.exp1}} name ExposureLG01_ label "\[value red]" xpos -502 ypos 395 } Multiply { channels rgb value {{parent.mult1} {parent.mult1} {parent.mult1} {parent.mult1}} name MultiplyColor01_ label "\[value value]" xpos -502 ypos 440 } push $N5e3c9000 Switch { inputs 2 which {{!bypass1}} name SwitchBypass01_ xpos -370 ypos 444 } Multiply { value 0 name MultiplyMute01_ label "\[value value]" xpos -370 ypos 510 disable {{!parent.mute1}} } Multiply { value 0 name MultiplySolo01_1 label "\[value value]" xpos -370 ypos 566 disable {{"solo1 + \nsolo2 + \nsolo3 + \nsolo4 + \nsolo5 + \nsolo6 + \nsolo7 + \nsolo8 + \nsolo9 \n\n== 0 ? 1 : solo1"}} } Dot { name Dot4 note_font_size 41 xpos -336 ypos 629 } set N5e36b800 [stack 0] Dot { name Dot21 note_font_size 41 xpos -336 ypos 678 } set N5e36b400 [stack 0] Dot { name Dot6 note_font_size 41 xpos -336 ypos 723 } set N5e36b000 [stack 0] Dot { name Dot22 note_font_size 41 xpos -336 ypos 767 } push $N5e36b000 push $N5eb6d800 Dot { name Dot5 note_font_size 41 xpos 242 ypos 207 } Multiply { channels rgb value 0 name Multiply1 label "\[value value]" xpos 208 ypos 328 } Merge2 { inputs 2 operation plus output rgb name Merge20 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 208 ypos 720 } ShuffleCopy { inputs 2 red red green green blue blue alpha alpha2 out {{{parent.Shuffle1.in}}} name ShuffleCopy2 xpos 208 ypos 764 } Merge2 { inputs 2 operation plus output rgb name Merge21 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 208 ypos 1166 } ShuffleCopy { inputs 2 red red green green blue blue alpha alpha2 out {{{parent.Shuffle2.in}}} name ShuffleCopy4 xpos 208 ypos 1211 } Merge2 { inputs 2 operation plus output rgb name Merge22 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 208 ypos 1705 } ShuffleCopy { inputs 2 red red green green blue blue alpha alpha2 out {{{parent.Shuffle3.in}}} name ShuffleCopy5 xpos 208 ypos 1747 } Merge2 { inputs 2 operation plus output rgb name Merge23 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 208 ypos 2264 } ShuffleCopy { inputs 2 red red green green blue blue alpha alpha2 out {{{parent.Shuffle4.in}}} name ShuffleCopy8 xpos 208 ypos 2315 } Merge2 { inputs 2 operation plus output rgb name Merge24 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 208 ypos 2817 } ShuffleCopy { inputs 2 red red green green blue blue alpha alpha2 out {{{parent.Shuffle5.in}}} name ShuffleCopy7 xpos 208 ypos 2865 } Merge2 { inputs 2 operation plus output rgb name Merge25 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 208 ypos 3404 } ShuffleCopy { inputs 2 red red green green blue blue alpha alpha2 out {{{parent.Shuffle6.in}}} name ShuffleCopy11 xpos 208 ypos 3449 } Merge2 { inputs 2 operation plus output rgb name Merge26 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 208 ypos 3935 } ShuffleCopy { inputs 2 red red green green blue blue alpha alpha2 out {{{parent.Shuffle7.in}}} name ShuffleCopy14 xpos 208 ypos 3979 } Merge2 { inputs 2 operation plus output rgb name Merge27 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 208 ypos 4491 } ShuffleCopy { inputs 2 red red green green blue blue alpha alpha2 out {{{parent.Shuffle8.in}}} name ShuffleCopy13 xpos 208 ypos 4539 } Merge2 { inputs 2 operation plus output rgb name Merge28 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 208 ypos 5083 } ShuffleCopy { inputs 2 red red green green blue blue alpha alpha2 out {{{parent.Shuffle9.in}}} name ShuffleCopy17 xpos 208 ypos 5129 } set N5ec91800 [stack 0] push $N5ec91800 push $N5eb10c00 push $N5eb11000 push $N5eb12800 push $N5e532000 push $N5e532400 push $N5e533c00 push $N5e4c7400 push $N5e4c7800 push $N5e531400 push $N5e4c4c00 push $N5e4c5000 push $N5e4c6800 push $N5e482000 push $N5e482400 push $N5e483c00 push $N5e423400 push $N5e423800 push $N5e481400 push $N5e420c00 push $N5e421000 push $N5e422800 push $N5e3ca000 push $N5e3ca400 push $N5e3cbc00 push $N5e36b400 push $N5e36b800 push $N5e3c9400 push $N5eb6d800 Merge2 { inputs 2 operation from output rgb name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 329 } Merge2 { inputs 2 operation plus output rgb name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 626 } ShuffleCopy { inputs 2 red red green green blue blue alpha alpha2 out {{{parent.Shuffle1.in}}} name ShuffleCopy1 xpos 0 ypos 675 } Merge2 { inputs 2 operation from output rgb name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 840 } Merge2 { inputs 2 operation plus output rgb name Merge4 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 1100 } ShuffleCopy { inputs 2 red red green green blue blue alpha alpha2 out {{{parent.Shuffle2.in}}} name ShuffleCopy3 xpos 0 ypos 1131 } Merge2 { inputs 2 operation from output rgb name Merge5 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 1367 } Merge2 { inputs 2 operation plus output rgb name Merge6 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 1627 } ShuffleCopy { inputs 2 red red green green blue blue alpha alpha2 out {{{parent.Shuffle3.in}}} name ShuffleCopy6 xpos 0 ypos 1670 } Merge2 { inputs 2 operation from output rgb name Merge7 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 1917 } Merge2 { inputs 2 operation plus output rgb name Merge8 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 2177 } ShuffleCopy { inputs 2 red red green green blue blue alpha alpha2 out {{{parent.Shuffle4.in}}} name ShuffleCopy9 xpos 0 ypos 2220 } Merge2 { inputs 2 operation from output rgb name Merge9 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 2472 } Merge2 { inputs 2 operation plus output rgb name Merge10 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 2732 } ShuffleCopy { inputs 2 red red green green blue blue alpha alpha2 out {{{parent.Shuffle5.in}}} name ShuffleCopy10 xpos 0 ypos 2772 } Merge2 { inputs 2 operation from output rgb name Merge11 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 3010 } Merge2 { inputs 2 operation plus output rgb name Merge12 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 3309 } ShuffleCopy { inputs 2 red red green green blue blue alpha alpha2 out {{{parent.Shuffle6.in}}} name ShuffleCopy12 xpos 0 ypos 3358 } Merge2 { inputs 2 operation from output rgb name Merge13 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 3580 } Merge2 { inputs 2 operation plus output rgb name Merge14 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 3840 } ShuffleCopy { inputs 2 red red green green blue blue alpha alpha2 out {{{parent.Shuffle7.in}}} name ShuffleCopy15 xpos 0 ypos 3885 } Merge2 { inputs 2 operation from output rgb name Merge15 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 4133 } Merge2 { inputs 2 operation plus output rgb name Merge16 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 4393 } ShuffleCopy { inputs 2 red red green green blue blue alpha alpha2 out {{{parent.Shuffle8.in}}} name ShuffleCopy16 xpos 0 ypos 4438 } Merge2 { inputs 2 operation from output rgb name Merge17 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 4713 } Merge2 { inputs 2 operation plus output rgb name Merge18 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 4993 } ShuffleCopy { inputs 2 red red green green blue blue alpha alpha2 out {{{parent.Shuffle9.in}}} name ShuffleCopy18 xpos 0 ypos 5036 } Switch { inputs 2 which {{"solo1 + \nsolo2 + \nsolo3 + \nsolo4 + \nsolo5 + \nsolo6 + \nsolo7 + \nsolo8 + \nsolo9 \n\n== 0 ? 0 : 1"}} name Switch1 xpos 0 ypos 5212 } Switch { inputs 2 which {{chooseMethod}} name Switch2 xpos 0 ypos 5289 } push $N5eb12c00 Dot { name Dot49 xpos -652 ypos 5485 } Merge2 { inputs 2+1 operation copy also_merge all name Merge19 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 5482 } Output { name Output1 xpos 0 ypos 5791 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_LightWrapPro.gizmo ================================================ Group { name LightWrapPro help "Adds exponentially blurred lightwrap\n\nAdds a bright highlight wrap and an overall wrap" tile_color 0x1e252eff label "(\[value outputView])" note_font "DejaVu Sans Bold" note_font_color 0xb7e6ffff selected true mapsize {0.15 0.15} addUserKnob {20 LightWrapPro} addUserKnob {4 outputView l "Output View" t "Chose one to view while adjusting" M {"Final Output" "Highlight Key" "Highlight Wrap" "OverAll Wrap" "Effect Only" "" "" "" "" "" "" "" "" ""}} addUserKnob {6 premultiplied l "FG premultiplied" -STARTLINE} premultiplied true addUserKnob {26 highlightKeyTitle l "HighLight Key"} addUserKnob {7 blackPt l Black R 0 4} blackPt 1 addUserKnob {7 whitePt l White R 0 4} whitePt 2 addUserKnob {26 wrapHighlightsTitle l "HighLight Wrap"} addUserKnob {6 Mult_Flare_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {41 steps l " Steps" T ExponGlowWrapHighlight.steps} addUserKnob {41 falloffType l Falloff -STARTLINE T ExponGlowWrapHighlight.falloffType} addUserKnob {41 size l Size T ExponGlowWrapHighlight.size} addUserKnob {7 wrapHighlightAmount l Amount R 0 4} wrapHighlightAmount 1 addUserKnob {26 WrapAllTitle l "Overall Wrap "} addUserKnob {6 WrapAllMult_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {41 steps_1 l " Steps" T ExponGlowWrapAll.steps} addUserKnob {41 falloffType_1 l Falloff -STARTLINE T ExponGlowWrapAll.falloffType} addUserKnob {41 size_1 l Size T ExponGlowWrapAll.size} addUserKnob {7 wrapAllAmount l Amount R 0 4} wrapAllAmount 1 addUserKnob {6 removeHighlights l "Dim Highlights" +STARTLINE} removeHighlights true addUserKnob {7 dimHighlightsAmount l "" -STARTLINE R 0 3} dimHighlightsAmount 1 addUserKnob {26 blendEdgesTitle l "Blend Edges"} addUserKnob {7 blendEdgesAmount l Amount} addUserKnob {6 ColorBleedMult_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {26 bleedColorTitle l "Bleed Color"} addUserKnob {7 bleedColorAmount l Amount} addUserKnob {7 bleedColorSize l Size R 0.1 4} bleedColorSize 1 addUserKnob {7 bleedColorFalloff_2 l Falloff R 0.2 2} bleedColorFalloff_2 0.5 addUserKnob {26 ""} addUserKnob {7 globalAmount l "Global Amount"} globalAmount 1 addUserKnob {26 _1 l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T MergeCopyLightWrapPro.maskChannelInput} addUserKnob {41 inject -STARTLINE T MergeCopyLightWrapPro.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeCopyLightWrapPro.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeCopyLightWrapPro.fringe} addUserKnob {41 mix T MergeCopyLightWrapPro.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "\n\n" T LightWrapPro} addUserKnob {26 ver l Version: T v06} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x402f27ff label "Bleed Color" note_font_size 60 note_font_color 0xffffffff xpos -683 ypos 2273 bdwidth 1316 bdheight 787 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x39464200 label "highlight key" note_font_size 40 note_font_color 0xffffffff xpos 1630 ypos 113 bdwidth 272 bdheight 393 } Input { inputs 0 name Inputmask xpos 1887 ypos 3580 number 2 } Input { inputs 0 name FG xpos -413 ypos -318 } AddChannels { channels rgba name AddChannels1 xpos -413 ypos -150 } Dot { name Dot1 xpos -379 ypos 375 } set Na0605d00 [stack 0] Dot { name Dot7 xpos -825 ypos 375 } Dot { name Dot46 xpos -825 ypos 3104 } set Na0604f00 [stack 0] Dot { name Dot15 xpos 915 ypos 3107 } set Na0604800 [stack 0] Dot { name Dot26 note_font_size 41 xpos 915 ypos 3224 } set Na0604100 [stack 0] Dot { name Dot32 note_font_size 41 xpos 915 ypos 3277 } push $Na0605d00 Dot { name Dot8 note_font_size 41 xpos 717 ypos 378 } set Na05ef200 [stack 0] Dot { name Dot11 note_font_size 41 xpos 717 ypos 550 } Input { inputs 0 name BG label "\n" xpos 1702 ypos -276 number 1 } AddChannels { channels rgba name AddChannels2 xpos 1702 ypos -145 } Remove { operation keep channels rgba name Remove2 xpos 1702 ypos -68 } Dot { name Dot3 xpos 1736 ypos 177 } set Na05ec800 [stack 0] Keyer { operation "luminance key" range {{parent.blackPt} {parent.whitePt} {range.B} {range.B}} name Keyer2 xpos 1702 ypos 303 } Dot { name Dot4 note_font_size 41 xpos 1736 ypos 397 } set N63ccf900 [stack 0] Premult { name Premult1 xpos 1702 ypos 452 } Multiply { inputs 1+1 channels rgba value 0 name Multiply1 label "\[value value]" xpos 1702 ypos 543 } Dot { name Dot30 note_font_size 41 xpos 1734 ypos 746 } Group { name ExponGlowWrapHighlight onCreate "n = nuke.thisNode()\nn.knob('size').setRange(0, 50)\n#n.knob('exp').setRange(1, 4)\nnuke.thisNode().knob('steps').setFlag(0x02000000)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"includeOriginal\":\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n\n else:\n merge.setInput(steps+1, None)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps)\n\nelif k.name() == \"steps\":\n\n s = int(k.value())\n if s<1:\n k.setValue(1)\n else:\n start = nuke.toNode(\"Start\")\n end = nuke.toNode(\"End\")\n b1 = nuke.toNode(\"Blur1\")\n m1 = nuke.toNode(\"Multiply1\")\n merge = nuke.toNode(\"Merge1\")\n AvgMult = nuke.toNode(\"AverageMult\")\n\n b1x = b1.xpos()\n b1y = b1.ypos()\n b1n = b1.name()\n\n m1x = m1.xpos()\n m1y = m1.ypos()\n m1n = m1.name()\n\n steps = int(n.knob('steps').getValue())\n size = n.knob('size').getValue()\n mult = n.knob('exp').getValue()\n\n #b1.setInput(0, start)\n for i in range(1,merge.inputs()):\n merge.setInput(i,None)\n merge.setInput(0, m1)\n \[nuke.delete(i) for i in nuke.allNodes() if i.xpos()>start.xpos()]\n for i in range(1,steps):\n # Blur\n b = nuke.nodes.Blur()\n m = nuke.nodes.Multiply()\n b.setXYpos(b1x+i*100,b1y)\n b.setInput(0,start)\n b\[\"channels\"].setValue(\"all\")\n b\[\"crop\"].setValue(0)\n b\[\"size\"].setValue(0, 1)\n b\[\"size\"].setExpression( \"((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(\{\}**2))\".format(str(i+1)), 0 )\n b\[\"size\"].setExpression( \"((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(\{\}**2))\".format(str(i+1)), 1 )\n b\[\"label\"].setValue('')\n blurAbove = b.name()\n\n m.setXYpos(m1x+i*100,m1y)\n m.setInput(0, nuke.toNode(blurAbove))\n m\[\"channels\"].setValue(\"all\")\n m\[\"value\"].setValue(1,1,1,1)\n j = 1-(i/steps)\n m\[\"value\"].setExpression('falloffType == 0 ? \{\} :falloffType == 1 ? pow(\{\}, 3) : falloffType == 2 ? \{\}*\{\}*(3-2*\{\}) : falloffType == 3 ? \{\}*\{\}*(2 - \{\}) : falloffType == 4 ? \{\}*(1 + \{\}*(1 - \{\})) : 0'.format(j,j,j,j,j,j,j,j,j,j,j))\n m\[\"mix\"].setExpression(\"falloff\")\n m\[\"label\"].setValue('')\n\n merge.setInput(i if i<2 else i+1, m)\n AvgMult\['whitepoint'].setValue(i if i<2 else i+1)\n\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n\nelif k.name() == \"output2\":\n if n.knob(\"output2\").getValue() == 4:\n n.knob('AvgMaxOriginal').setVisible(True)\n else:\n n.knob('AvgMaxOriginal').setVisible(False)\n\n" tile_color 0xcc804eff label "(\[value output2])" note_font "Verdana Bold" note_font_color 0xffffffff xpos 1700 ypos 1012 addUserKnob {20 ExponBlurSimple} addUserKnob {41 channels T Remove1.channels} addUserKnob {26 ""} addUserKnob {4 output2 l Operation: M {Screen Plus Over Hypot Average Max Min "" "" "" "" ""}} output2 Over addUserKnob {3 steps l " Steps" -STARTLINE} steps 6 addUserKnob {26 text l " " T " "} addUserKnob {6 includeOriginal l "Include Original?" -STARTLINE} addUserKnob {6 AvgMaxOriginal l "Use Max of Average and Original" +HIDDEN +STARTLINE} AvgMaxOriginal true addUserKnob {14 size l Size R 0 50} size 4 addUserKnob {14 exp l Exponent +INVISIBLE R 1 4} exp 3 addUserKnob {6 color_rgba_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {7 falloff l Falloff} falloff 1 addUserKnob {4 falloffType l "Falloff Type" M {Linear pLinear smooth smooth0 smooth1 ""}} falloffType smooth1 addUserKnob {14 postBlur l "Post Blur" R 0 100} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {14 safeBBoxPixels l "" +STARTLINE +HIDDEN R 0 400} safeBBoxPixels 100 addUserKnob {14 adjustBBoxPercent l "" -STARTLINE +HIDDEN R 1 2} adjustBBoxPercent 1 addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Add description and tooltip for gizmo" T ExponBlurSimple} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Inputmask xpos 346 ypos 596 number 1 } Dot { name Dot19 label Mask note_font_size 41 xpos 380 ypos 662 } Dot { name Dot10 note_font_size 41 xpos 380 ypos 899 } Input { inputs 0 name Inputimg xpos -221 ypos -1229 } Dot { name Dot16 note_font_size 41 xpos -187 ypos -1062 } set N63cab200 [stack 0] Dot { name Dot1 note_font_size 41 xpos 461 ypos -1058 } Remove { operation keep channels rgba name Remove1 xpos 427 ypos -980 } NoOp { name aspectCalc xpos 427 ypos -939 addUserKnob {20 User} addUserKnob {14 aspect R 0 100} aspect {{parent.size.w} {(parent.size.h/format.pixel_aspect/height*width)*format.pixel_aspect}} } Dot { name Dot21 note_font_size 41 xpos 461 ypos -853 } set N63ca9600 [stack 0] Invert { name Invert1 xpos 864 ypos -860 disable {{"parent.size < 0 ? 0 : 1"}} } set N63ca8f00 [stack 0] Dot { name Dot4 note_font_size 41 xpos 540 ypos -604 } NoOp { name Original xpos 506 ypos -327 } Dot { name Dot5 note_font_size 41 xpos 540 ypos 100 } push $N63ca8f00 NoOp { name Start xpos 864 ypos -706 } set N63c83200 [stack 0] Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(6**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(6**2))}} crop false name Blur6 xpos 1364 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.166666666667 :falloffType == 1 ? pow(0.166666666667, 3) : falloffType == 2 ? 0.166666666667*0.166666666667*(3-2*0.166666666667) : falloffType == 3 ? 0.166666666667*0.166666666667*(2 - 0.166666666667) : falloffType == 4 ? 0.166666666667*(1 + 0.166666666667*(1 - 0.166666666667)) : 0"} {"falloffType == 0 ? 0.166666666667 :falloffType == 1 ? pow(0.166666666667, 3) : falloffType == 2 ? 0.166666666667*0.166666666667*(3-2*0.166666666667) : falloffType == 3 ? 0.166666666667*0.166666666667*(2 - 0.166666666667) : falloffType == 4 ? 0.166666666667*(1 + 0.166666666667*(1 - 0.166666666667)) : 0"} {"falloffType == 0 ? 0.166666666667 :falloffType == 1 ? pow(0.166666666667, 3) : falloffType == 2 ? 0.166666666667*0.166666666667*(3-2*0.166666666667) : falloffType == 3 ? 0.166666666667*0.166666666667*(2 - 0.166666666667) : falloffType == 4 ? 0.166666666667*(1 + 0.166666666667*(1 - 0.166666666667)) : 0"} {"falloffType == 0 ? 0.166666666667 :falloffType == 1 ? pow(0.166666666667, 3) : falloffType == 2 ? 0.166666666667*0.166666666667*(3-2*0.166666666667) : falloffType == 3 ? 0.166666666667*0.166666666667*(2 - 0.166666666667) : falloffType == 4 ? 0.166666666667*(1 + 0.166666666667*(1 - 0.166666666667)) : 0"}} mix {{falloff}} name Multiply6 xpos 1364 ypos -477 } push $N63c83200 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(5**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(5**2))}} crop false name Blur5 xpos 1264 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.333333333333 :falloffType == 1 ? pow(0.333333333333, 3) : falloffType == 2 ? 0.333333333333*0.333333333333*(3-2*0.333333333333) : falloffType == 3 ? 0.333333333333*0.333333333333*(2 - 0.333333333333) : falloffType == 4 ? 0.333333333333*(1 + 0.333333333333*(1 - 0.333333333333)) : 0"} {"falloffType == 0 ? 0.333333333333 :falloffType == 1 ? pow(0.333333333333, 3) : falloffType == 2 ? 0.333333333333*0.333333333333*(3-2*0.333333333333) : falloffType == 3 ? 0.333333333333*0.333333333333*(2 - 0.333333333333) : falloffType == 4 ? 0.333333333333*(1 + 0.333333333333*(1 - 0.333333333333)) : 0"} {"falloffType == 0 ? 0.333333333333 :falloffType == 1 ? pow(0.333333333333, 3) : falloffType == 2 ? 0.333333333333*0.333333333333*(3-2*0.333333333333) : falloffType == 3 ? 0.333333333333*0.333333333333*(2 - 0.333333333333) : falloffType == 4 ? 0.333333333333*(1 + 0.333333333333*(1 - 0.333333333333)) : 0"} {"falloffType == 0 ? 0.333333333333 :falloffType == 1 ? pow(0.333333333333, 3) : falloffType == 2 ? 0.333333333333*0.333333333333*(3-2*0.333333333333) : falloffType == 3 ? 0.333333333333*0.333333333333*(2 - 0.333333333333) : falloffType == 4 ? 0.333333333333*(1 + 0.333333333333*(1 - 0.333333333333)) : 0"}} mix {{falloff}} name Multiply5 xpos 1264 ypos -477 } push $N63c83200 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(4**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(4**2))}} crop false name Blur4 xpos 1164 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"}} mix {{falloff}} name Multiply4 xpos 1164 ypos -477 } push $N63c83200 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(3**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(3**2))}} crop false name Blur3 xpos 1064 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.666666666667 :falloffType == 1 ? pow(0.666666666667, 3) : falloffType == 2 ? 0.666666666667*0.666666666667*(3-2*0.666666666667) : falloffType == 3 ? 0.666666666667*0.666666666667*(2 - 0.666666666667) : falloffType == 4 ? 0.666666666667*(1 + 0.666666666667*(1 - 0.666666666667)) : 0"} {"falloffType == 0 ? 0.666666666667 :falloffType == 1 ? pow(0.666666666667, 3) : falloffType == 2 ? 0.666666666667*0.666666666667*(3-2*0.666666666667) : falloffType == 3 ? 0.666666666667*0.666666666667*(2 - 0.666666666667) : falloffType == 4 ? 0.666666666667*(1 + 0.666666666667*(1 - 0.666666666667)) : 0"} {"falloffType == 0 ? 0.666666666667 :falloffType == 1 ? pow(0.666666666667, 3) : falloffType == 2 ? 0.666666666667*0.666666666667*(3-2*0.666666666667) : falloffType == 3 ? 0.666666666667*0.666666666667*(2 - 0.666666666667) : falloffType == 4 ? 0.666666666667*(1 + 0.666666666667*(1 - 0.666666666667)) : 0"} {"falloffType == 0 ? 0.666666666667 :falloffType == 1 ? pow(0.666666666667, 3) : falloffType == 2 ? 0.666666666667*0.666666666667*(3-2*0.666666666667) : falloffType == 3 ? 0.666666666667*0.666666666667*(2 - 0.666666666667) : falloffType == 4 ? 0.666666666667*(1 + 0.666666666667*(1 - 0.666666666667)) : 0"}} mix {{falloff}} name Multiply3 xpos 1064 ypos -477 } push 0 push $N63c83200 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(2**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(2**2))}} crop false name Blur2 xpos 964 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.833333333333 :falloffType == 1 ? pow(0.833333333333, 3) : falloffType == 2 ? 0.833333333333*0.833333333333*(3-2*0.833333333333) : falloffType == 3 ? 0.833333333333*0.833333333333*(2 - 0.833333333333) : falloffType == 4 ? 0.833333333333*(1 + 0.833333333333*(1 - 0.833333333333)) : 0"} {"falloffType == 0 ? 0.833333333333 :falloffType == 1 ? pow(0.833333333333, 3) : falloffType == 2 ? 0.833333333333*0.833333333333*(3-2*0.833333333333) : falloffType == 3 ? 0.833333333333*0.833333333333*(2 - 0.833333333333) : falloffType == 4 ? 0.833333333333*(1 + 0.833333333333*(1 - 0.833333333333)) : 0"} {"falloffType == 0 ? 0.833333333333 :falloffType == 1 ? pow(0.833333333333, 3) : falloffType == 2 ? 0.833333333333*0.833333333333*(3-2*0.833333333333) : falloffType == 3 ? 0.833333333333*0.833333333333*(2 - 0.833333333333) : falloffType == 4 ? 0.833333333333*(1 + 0.833333333333*(1 - 0.833333333333)) : 0"} {"falloffType == 0 ? 0.833333333333 :falloffType == 1 ? pow(0.833333333333, 3) : falloffType == 2 ? 0.833333333333*0.833333333333*(3-2*0.833333333333) : falloffType == 3 ? 0.833333333333*0.833333333333*(2 - 0.833333333333) : falloffType == 4 ? 0.833333333333*(1 + 0.833333333333*(1 - 0.833333333333)) : 0"}} mix {{falloff}} name Multiply2 xpos 964 ypos -477 } push $N63c83200 Blur { size {{(width/100*parent.size*(aspectCalc.aspect.w/100))} {(height/100*parent.size*(aspectCalc.aspect.h/100))}} crop false name Blur1 xpos 864 ypos -554 } Multiply { value {1 1 1 1} mix {{falloff}} name Multiply1 xpos 864 ypos -477 } Merge2 { inputs 6+1 operation {{MergeNumber.mergeNumber}} also_merge all name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 864 ypos -327 } NoOp { name End xpos 864 ypos -279 } Grade { channels all whitepoint 6 black_clamp false name AverageMult xpos 864 ypos 49 disable {{"output2 == 4 ? 0 : 1"}} } Merge2 { inputs 2 operation max also_merge all name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 864 ypos 96 disable {{"output2 == 4 && includeOriginal == 1 && AvgMaxOriginal == 1 ? 0 : 1"}} } Blur { size {{postBlur} {postBlur}} name BlurOriginal xpos 864 ypos 155 } Invert { name Invert2 xpos 864 ypos 283 disable {{"parent.size < 0 ? 0 : 1"}} } push $N63ca9600 Switch { inputs 2 which {{"parent.size == 0 ? 0 : 1"}} name Switch1 label "\[value which]" xpos 427 ypos 283 } Crop { inputs 0 box {{input.format.x} {input.format.y} {input.format.r} {input.format.t}} reformat true crop false name Crop1 xpos 96 ypos -931 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } AddChannels { channels rgba name AddChannels2 xpos 96 ypos -891 } push $N63cab200 Merge2 { inputs 2 name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -60 ypos -891 } set N63bff200 [stack 0] Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"overscanType\":\n if n.knob(\"overscanType\").getValue() == 1:\n n.knob(\"overscanPercent\").setVisible(True)\n n.knob(\"overscan\").setVisible(False)\n else:\n n.knob(\"overscanPercent\").setVisible(False)\n n.knob(\"overscan\").setVisible(True)" tile_color 0xa57aaaff note_font "Verdana Bold" note_font_color 0xffffffff xpos 29 ypos -812 addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} overscanType Percentage addUserKnob {14 overscan l Overscan +HIDDEN R 0 400} addUserKnob {14 overscanPercent l "Overscan Percent" R 1 4} overscanPercent 1.2 addUserKnob {20 inputBbox l "BBox Data" n 1} addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set N63bfdd00 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set N63bfd600 [stack 0] push $N63bfdd00 Crop { box {{curve} {curve} {input.width} {input.height}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N63bfcf00 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set N63bfc800 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{input.bbox.r/2} {input.bbox.t/2}} shutteroffset centred name Transform1 xpos 120 ypos 555 } push $N63bfc800 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $N63bfd600 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $N63bfcf00 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N2d27cf00 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $N2d27cf00 NoOp { name OutputBBox1 selected true xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group push $N63bff200 Merge2 { inputs 2 name Merge4 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -60 ypos -748 } push $N63cab200 CopyBBox { inputs 2 name CopyBBox1 xpos -221 ypos -748 } Dot { name Dot22 note_font_size 41 xpos -187 ypos 198 } Merge2 { inputs 2 operation copy bbox B Achannels none Bchannels none output none also_merge {{{parent.Remove1.channels}}} name Merge5 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -221 ypos 283 } Dot { name Dot17 label A note_font_size 41 xpos -187 ypos 675 } Dot { name Dot7 note_font_size 41 xpos -187 ypos 805 } push $N63cab200 Dot { name Dot2 note_font_size 41 xpos -588 ypos -1062 } Dot { name Dot18 label B note_font_size 41 xpos -588 ypos 654 } Dot { name Dot3 note_font_size 41 xpos -588 ypos 895 } Merge2 { inputs 2+1 operation copy Achannels none Bchannels none output none also_merge all name MergeKeymix xpos -221 ypos 888 } Output { name Output1 xpos -221 ypos 1202 } NoOp { inputs 0 name MergeNumber xpos 202 ypos -1145 addUserKnob {20 User} addUserKnob {3 mergeNumber} mergeNumber {{"output2 == 0 ? 25 : output2 == 1 ? 24 : output2 == 2 ? 22 : output2 == 3 ? 13 : output2 == 4 ? 24 : output2 == 5 ? 17 : 18"}} } end_group Grade { channels all white {{wrapHighlightAmount/10}} name FlareAmount xpos 1702 ypos 1393 } Multiply { channels rgba value {{globalAmount}} name MultiplyGlobal3 label "\[value value]" xpos 1702 ypos 1577 } Dot { name Dot25 label "LIGHT FLARE" note_font_size 61 xpos 1736 ypos 1801 } set N2d219d00 [stack 0] Dot { name Dot31 note_font_size 41 xpos 1738 ypos 2915 } set N2d219600 [stack 0] push $Na05ef200 push $Na05ec800 Dot { name Dot20 xpos 1059 ypos 179 } Shuffle { alpha white name Shuffle1 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat -> \[value out2]] \}]" note_font_size 21 note_font_color 0xffffffff xpos 1025 ypos 238 } Multiply { inputs 1+1 channels rgba value 0 name Multiply2 label "\[value value]" xpos 1025 ypos 366 } Dot { name Dot9 xpos 1059 ypos 725 } set N2d207200 [stack 0] Dot { name Dot28 note_font_size 41 xpos 1343 ypos 725 } Keyer { operation "luminance key" name Keyer1 xpos 1309 ypos 823 } push $N2d207200 Colorspace { colorspace_out CIE-Yxy name Colorspace4 xpos 1188 ypos 786 } Expression { inputs 1+1 expr0 "(r*(1+(r/((parent.dimHighlightsAmount+1)**2))) ) / (1+r)" channel1 {-rgba.red -rgba.green -rgba.blue none} expr1 "(g*(1+(g/((parent.dimHighlightsAmount+1)**2))) ) / (1+g)" channel2 {-rgba.red -rgba.green -rgba.blue none} expr2 "(b*(1+(b/((parent.dimHighlightsAmount+1)**2))) ) / (1+b)" expr3 a name Tonemap_whitepoint xpos 1188 ypos 827 } Colorspace { colorspace_in CIE-Yxy name Colorspace3 xpos 1188 ypos 867 } push $N2d207200 Switch { inputs 2 which {{removeHighlights}} name Switch4 xpos 1025 ypos 867 } Group { name ExponGlowWrapAll onCreate "n = nuke.thisNode()\nn.knob('size').setRange(0, 50)\n#n.knob('exp').setRange(1, 4)\nnuke.thisNode().knob('steps').setFlag(0x02000000)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"includeOriginal\":\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n\n else:\n merge.setInput(steps+1, None)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps)\n\nelif k.name() == \"steps\":\n\n s = int(k.value())\n if s<1:\n k.setValue(1)\n else:\n start = nuke.toNode(\"Start\")\n end = nuke.toNode(\"End\")\n b1 = nuke.toNode(\"Blur1\")\n m1 = nuke.toNode(\"Multiply1\")\n merge = nuke.toNode(\"Merge1\")\n AvgMult = nuke.toNode(\"AverageMult\")\n\n b1x = b1.xpos()\n b1y = b1.ypos()\n b1n = b1.name()\n\n m1x = m1.xpos()\n m1y = m1.ypos()\n m1n = m1.name()\n\n steps = int(n.knob('steps').getValue())\n size = n.knob('size').getValue()\n mult = n.knob('exp').getValue()\n\n #b1.setInput(0, start)\n for i in range(1,merge.inputs()):\n merge.setInput(i,None)\n merge.setInput(0, m1)\n \[nuke.delete(i) for i in nuke.allNodes() if i.xpos()>start.xpos()]\n for i in range(1,steps):\n # Blur\n b = nuke.nodes.Blur()\n m = nuke.nodes.Multiply()\n b.setXYpos(b1x+i*100,b1y)\n b.setInput(0,start)\n b\[\"channels\"].setValue(\"all\")\n b\[\"crop\"].setValue(0)\n b\[\"size\"].setValue(0, 1)\n b\[\"size\"].setExpression( \"((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(\{\}**2))\".format(str(i+1)), 0 )\n b\[\"size\"].setExpression( \"((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(\{\}**2))\".format(str(i+1)), 1 )\n b\[\"label\"].setValue('')\n blurAbove = b.name()\n\n m.setXYpos(m1x+i*100,m1y)\n m.setInput(0, nuke.toNode(blurAbove))\n m\[\"channels\"].setValue(\"all\")\n m\[\"value\"].setValue(1,1,1,1)\n j = 1-(i/steps)\n m\[\"value\"].setExpression('falloffType == 0 ? \{\} :falloffType == 1 ? pow(\{\}, 3) : falloffType == 2 ? \{\}*\{\}*(3-2*\{\}) : falloffType == 3 ? \{\}*\{\}*(2 - \{\}) : falloffType == 4 ? \{\}*(1 + \{\}*(1 - \{\})) : 0'.format(j,j,j,j,j,j,j,j,j,j,j))\n m\[\"mix\"].setExpression(\"falloff\")\n m\[\"label\"].setValue('')\n\n merge.setInput(i if i<2 else i+1, m)\n AvgMult\['whitepoint'].setValue(i if i<2 else i+1)\n\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n\nelif k.name() == \"output2\":\n if n.knob(\"output2\").getValue() == 4:\n n.knob('AvgMaxOriginal').setVisible(True)\n else:\n n.knob('AvgMaxOriginal').setVisible(False)\n\n" tile_color 0xcc804eff label "(\[value output2])" note_font "Verdana Bold" note_font_color 0xffffffff xpos 1025 ypos 995 addUserKnob {20 ExponBlurSimple} addUserKnob {41 channels T Remove1.channels} addUserKnob {26 ""} addUserKnob {4 output2 l Operation: M {Screen Plus Over Hypot Average Max Min "" "" "" "" ""}} output2 Over addUserKnob {3 steps l " Steps" -STARTLINE} steps 8 addUserKnob {26 text l " " T " "} addUserKnob {6 includeOriginal l "Include Original?" -STARTLINE} addUserKnob {6 AvgMaxOriginal l "Use Max of Average and Original" +HIDDEN +STARTLINE} AvgMaxOriginal true addUserKnob {14 size l Size R 0 50} size 10 addUserKnob {14 exp l Exponent +INVISIBLE R 1 4} exp 3 addUserKnob {6 color_rgba_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {7 falloff l Falloff} falloff 1 addUserKnob {4 falloffType l "Falloff Type" M {Linear pLinear smooth smooth0 smooth1 ""}} falloffType pLinear addUserKnob {14 postBlur l "Post Blur" R 0 100} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {14 safeBBoxPixels l "" +STARTLINE +HIDDEN R 0 400} safeBBoxPixels 100 addUserKnob {14 adjustBBoxPercent l "" -STARTLINE +HIDDEN R 1 2} adjustBBoxPercent 1 addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Add description and tooltip for gizmo" T ExponBlurSimple} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Inputmask xpos 346 ypos 596 number 1 } Dot { name Dot19 label Mask note_font_size 41 xpos 380 ypos 662 } Dot { name Dot10 note_font_size 41 xpos 380 ypos 899 } Input { inputs 0 name Inputimg xpos -221 ypos -1229 } Dot { name Dot16 note_font_size 41 xpos -187 ypos -1062 } set N2d1c1d00 [stack 0] Dot { name Dot1 note_font_size 41 xpos 461 ypos -1058 } Remove { operation keep channels rgba name Remove1 xpos 427 ypos -980 } NoOp { name aspectCalc xpos 427 ypos -939 addUserKnob {20 User} addUserKnob {14 aspect R 0 100} aspect {{parent.size.w} {(parent.size.h/format.pixel_aspect/height*width)*format.pixel_aspect}} } Dot { name Dot21 note_font_size 41 xpos 461 ypos -853 } set N2d1c0100 [stack 0] Invert { name Invert1 xpos 864 ypos -860 disable {{"parent.size < 0 ? 0 : 1"}} } set N2d1ab900 [stack 0] Dot { name Dot4 note_font_size 41 xpos 540 ypos -604 } NoOp { name Original xpos 506 ypos -327 } Dot { name Dot5 note_font_size 41 xpos 540 ypos 100 } push $N2d1ab900 NoOp { name Start xpos 864 ypos -706 } set N2d1a9d00 [stack 0] Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(8**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(8**2))}} crop false name Blur8 xpos 1564 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.125 :falloffType == 1 ? pow(0.125, 3) : falloffType == 2 ? 0.125*0.125*(3-2*0.125) : falloffType == 3 ? 0.125*0.125*(2 - 0.125) : falloffType == 4 ? 0.125*(1 + 0.125*(1 - 0.125)) : 0"} {"falloffType == 0 ? 0.125 :falloffType == 1 ? pow(0.125, 3) : falloffType == 2 ? 0.125*0.125*(3-2*0.125) : falloffType == 3 ? 0.125*0.125*(2 - 0.125) : falloffType == 4 ? 0.125*(1 + 0.125*(1 - 0.125)) : 0"} {"falloffType == 0 ? 0.125 :falloffType == 1 ? pow(0.125, 3) : falloffType == 2 ? 0.125*0.125*(3-2*0.125) : falloffType == 3 ? 0.125*0.125*(2 - 0.125) : falloffType == 4 ? 0.125*(1 + 0.125*(1 - 0.125)) : 0"} {"falloffType == 0 ? 0.125 :falloffType == 1 ? pow(0.125, 3) : falloffType == 2 ? 0.125*0.125*(3-2*0.125) : falloffType == 3 ? 0.125*0.125*(2 - 0.125) : falloffType == 4 ? 0.125*(1 + 0.125*(1 - 0.125)) : 0"}} mix {{falloff}} name Multiply8 xpos 1564 ypos -477 } push $N2d1a9d00 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(7**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(7**2))}} crop false name Blur7 xpos 1464 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.25 :falloffType == 1 ? pow(0.25, 3) : falloffType == 2 ? 0.25*0.25*(3-2*0.25) : falloffType == 3 ? 0.25*0.25*(2 - 0.25) : falloffType == 4 ? 0.25*(1 + 0.25*(1 - 0.25)) : 0"} {"falloffType == 0 ? 0.25 :falloffType == 1 ? pow(0.25, 3) : falloffType == 2 ? 0.25*0.25*(3-2*0.25) : falloffType == 3 ? 0.25*0.25*(2 - 0.25) : falloffType == 4 ? 0.25*(1 + 0.25*(1 - 0.25)) : 0"} {"falloffType == 0 ? 0.25 :falloffType == 1 ? pow(0.25, 3) : falloffType == 2 ? 0.25*0.25*(3-2*0.25) : falloffType == 3 ? 0.25*0.25*(2 - 0.25) : falloffType == 4 ? 0.25*(1 + 0.25*(1 - 0.25)) : 0"} {"falloffType == 0 ? 0.25 :falloffType == 1 ? pow(0.25, 3) : falloffType == 2 ? 0.25*0.25*(3-2*0.25) : falloffType == 3 ? 0.25*0.25*(2 - 0.25) : falloffType == 4 ? 0.25*(1 + 0.25*(1 - 0.25)) : 0"}} mix {{falloff}} name Multiply7 xpos 1464 ypos -477 } push $N2d1a9d00 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(6**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(6**2))}} crop false name Blur6 xpos 1364 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.375 :falloffType == 1 ? pow(0.375, 3) : falloffType == 2 ? 0.375*0.375*(3-2*0.375) : falloffType == 3 ? 0.375*0.375*(2 - 0.375) : falloffType == 4 ? 0.375*(1 + 0.375*(1 - 0.375)) : 0"} {"falloffType == 0 ? 0.375 :falloffType == 1 ? pow(0.375, 3) : falloffType == 2 ? 0.375*0.375*(3-2*0.375) : falloffType == 3 ? 0.375*0.375*(2 - 0.375) : falloffType == 4 ? 0.375*(1 + 0.375*(1 - 0.375)) : 0"} {"falloffType == 0 ? 0.375 :falloffType == 1 ? pow(0.375, 3) : falloffType == 2 ? 0.375*0.375*(3-2*0.375) : falloffType == 3 ? 0.375*0.375*(2 - 0.375) : falloffType == 4 ? 0.375*(1 + 0.375*(1 - 0.375)) : 0"} {"falloffType == 0 ? 0.375 :falloffType == 1 ? pow(0.375, 3) : falloffType == 2 ? 0.375*0.375*(3-2*0.375) : falloffType == 3 ? 0.375*0.375*(2 - 0.375) : falloffType == 4 ? 0.375*(1 + 0.375*(1 - 0.375)) : 0"}} mix {{falloff}} name Multiply6 xpos 1364 ypos -477 } push $N2d1a9d00 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(5**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(5**2))}} crop false name Blur5 xpos 1264 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"}} mix {{falloff}} name Multiply5 xpos 1264 ypos -477 } push $N2d1a9d00 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(4**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(4**2))}} crop false name Blur4 xpos 1164 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.625 :falloffType == 1 ? pow(0.625, 3) : falloffType == 2 ? 0.625*0.625*(3-2*0.625) : falloffType == 3 ? 0.625*0.625*(2 - 0.625) : falloffType == 4 ? 0.625*(1 + 0.625*(1 - 0.625)) : 0"} {"falloffType == 0 ? 0.625 :falloffType == 1 ? pow(0.625, 3) : falloffType == 2 ? 0.625*0.625*(3-2*0.625) : falloffType == 3 ? 0.625*0.625*(2 - 0.625) : falloffType == 4 ? 0.625*(1 + 0.625*(1 - 0.625)) : 0"} {"falloffType == 0 ? 0.625 :falloffType == 1 ? pow(0.625, 3) : falloffType == 2 ? 0.625*0.625*(3-2*0.625) : falloffType == 3 ? 0.625*0.625*(2 - 0.625) : falloffType == 4 ? 0.625*(1 + 0.625*(1 - 0.625)) : 0"} {"falloffType == 0 ? 0.625 :falloffType == 1 ? pow(0.625, 3) : falloffType == 2 ? 0.625*0.625*(3-2*0.625) : falloffType == 3 ? 0.625*0.625*(2 - 0.625) : falloffType == 4 ? 0.625*(1 + 0.625*(1 - 0.625)) : 0"}} mix {{falloff}} name Multiply4 xpos 1164 ypos -477 } push $N2d1a9d00 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(3**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(3**2))}} crop false name Blur3 xpos 1064 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.75 :falloffType == 1 ? pow(0.75, 3) : falloffType == 2 ? 0.75*0.75*(3-2*0.75) : falloffType == 3 ? 0.75*0.75*(2 - 0.75) : falloffType == 4 ? 0.75*(1 + 0.75*(1 - 0.75)) : 0"} {"falloffType == 0 ? 0.75 :falloffType == 1 ? pow(0.75, 3) : falloffType == 2 ? 0.75*0.75*(3-2*0.75) : falloffType == 3 ? 0.75*0.75*(2 - 0.75) : falloffType == 4 ? 0.75*(1 + 0.75*(1 - 0.75)) : 0"} {"falloffType == 0 ? 0.75 :falloffType == 1 ? pow(0.75, 3) : falloffType == 2 ? 0.75*0.75*(3-2*0.75) : falloffType == 3 ? 0.75*0.75*(2 - 0.75) : falloffType == 4 ? 0.75*(1 + 0.75*(1 - 0.75)) : 0"} {"falloffType == 0 ? 0.75 :falloffType == 1 ? pow(0.75, 3) : falloffType == 2 ? 0.75*0.75*(3-2*0.75) : falloffType == 3 ? 0.75*0.75*(2 - 0.75) : falloffType == 4 ? 0.75*(1 + 0.75*(1 - 0.75)) : 0"}} mix {{falloff}} name Multiply3 xpos 1064 ypos -477 } push 0 push $N2d1a9d00 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(2**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(2**2))}} crop false name Blur2 xpos 964 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.875 :falloffType == 1 ? pow(0.875, 3) : falloffType == 2 ? 0.875*0.875*(3-2*0.875) : falloffType == 3 ? 0.875*0.875*(2 - 0.875) : falloffType == 4 ? 0.875*(1 + 0.875*(1 - 0.875)) : 0"} {"falloffType == 0 ? 0.875 :falloffType == 1 ? pow(0.875, 3) : falloffType == 2 ? 0.875*0.875*(3-2*0.875) : falloffType == 3 ? 0.875*0.875*(2 - 0.875) : falloffType == 4 ? 0.875*(1 + 0.875*(1 - 0.875)) : 0"} {"falloffType == 0 ? 0.875 :falloffType == 1 ? pow(0.875, 3) : falloffType == 2 ? 0.875*0.875*(3-2*0.875) : falloffType == 3 ? 0.875*0.875*(2 - 0.875) : falloffType == 4 ? 0.875*(1 + 0.875*(1 - 0.875)) : 0"} {"falloffType == 0 ? 0.875 :falloffType == 1 ? pow(0.875, 3) : falloffType == 2 ? 0.875*0.875*(3-2*0.875) : falloffType == 3 ? 0.875*0.875*(2 - 0.875) : falloffType == 4 ? 0.875*(1 + 0.875*(1 - 0.875)) : 0"}} mix {{falloff}} name Multiply2 xpos 964 ypos -477 } push $N2d1a9d00 Blur { size {{(width/100*parent.size*(aspectCalc.aspect.w/100))} {(height/100*parent.size*(aspectCalc.aspect.h/100))}} crop false name Blur1 xpos 864 ypos -554 } Multiply { value {1 1 1 1} mix {{falloff}} name Multiply1 xpos 864 ypos -477 } Merge2 { inputs 8+1 operation {{MergeNumber.mergeNumber}} also_merge all name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 864 ypos -327 } NoOp { name End xpos 864 ypos -279 } Grade { channels all whitepoint 8 black_clamp false name AverageMult xpos 864 ypos 49 disable {{"output2 == 4 ? 0 : 1"}} } Merge2 { inputs 2 operation max also_merge all name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 864 ypos 96 disable {{"output2 == 4 && includeOriginal == 1 && AvgMaxOriginal == 1 ? 0 : 1"}} } Blur { size {{postBlur} {postBlur}} name BlurOriginal xpos 864 ypos 155 } Invert { name Invert2 xpos 864 ypos 283 disable {{"parent.size < 0 ? 0 : 1"}} } push $N2d1c0100 Switch { inputs 2 which {{"parent.size == 0 ? 0 : 1"}} name Switch1 label "\[value which]" xpos 427 ypos 283 } Crop { inputs 0 box {{input.format.x} {input.format.y} {input.format.r} {input.format.t}} reformat true crop false name Crop1 xpos 96 ypos -931 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } AddChannels { channels rgba name AddChannels2 xpos 96 ypos -891 } push $N2d1c1d00 Merge2 { inputs 2 name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -60 ypos -891 } set N39bf3200 [stack 0] Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"overscanType\":\n if n.knob(\"overscanType\").getValue() == 1:\n n.knob(\"overscanPercent\").setVisible(True)\n n.knob(\"overscan\").setVisible(False)\n else:\n n.knob(\"overscanPercent\").setVisible(False)\n n.knob(\"overscan\").setVisible(True)" tile_color 0xa57aaaff note_font "Verdana Bold" note_font_color 0xffffffff xpos 29 ypos -812 addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} overscanType Percentage addUserKnob {14 overscan l Overscan +HIDDEN R 0 400} addUserKnob {14 overscanPercent l "Overscan Percent" R 1 4} overscanPercent 1.2 addUserKnob {20 inputBbox l "BBox Data" n 1} addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set N39bf1d00 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set N39bf1600 [stack 0] push $N39bf1d00 Crop { box {{curve} {curve} {input.width} {input.height}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N39bf0f00 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set N39bf0800 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{input.bbox.r/2} {input.bbox.t/2}} shutteroffset centred name Transform1 xpos 120 ypos 555 } push $N39bf0800 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $N39bf1600 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $N39bf0f00 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N39bc0f00 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $N39bc0f00 NoOp { name OutputBBox1 selected true xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group push $N39bf3200 Merge2 { inputs 2 name Merge4 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -60 ypos -748 } push $N2d1c1d00 CopyBBox { inputs 2 name CopyBBox1 xpos -221 ypos -748 } Dot { name Dot22 note_font_size 41 xpos -187 ypos 198 } Merge2 { inputs 2 operation copy bbox B Achannels none Bchannels none output none also_merge {{{parent.Remove1.channels}}} name Merge5 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -221 ypos 283 } Dot { name Dot17 label A note_font_size 41 xpos -187 ypos 675 } Dot { name Dot7 note_font_size 41 xpos -187 ypos 805 } push $N2d1c1d00 Dot { name Dot2 note_font_size 41 xpos -588 ypos -1062 } Dot { name Dot18 label B note_font_size 41 xpos -588 ypos 654 } Dot { name Dot3 note_font_size 41 xpos -588 ypos 895 } Merge2 { inputs 2+1 operation copy Achannels none Bchannels none output none also_merge all name MergeKeymix xpos -221 ypos 888 } Output { name Output1 xpos -221 ypos 1202 } NoOp { inputs 0 name MergeNumber xpos 202 ypos -1145 addUserKnob {20 User} addUserKnob {3 mergeNumber} mergeNumber {{"output2 == 0 ? 25 : output2 == 1 ? 24 : output2 == 2 ? 22 : output2 == 3 ? 13 : output2 == 4 ? 24 : output2 == 5 ? 17 : 18"}} } end_group Dot { name Dot40 note_font_size 41 xpos 1059 ypos 1277 } set N4726e400 [stack 0] Grade { channels all white {{wrapAllAmount/10}} name GradeBgWrapAmount xpos 1025 ypos 1399 } Multiply { channels rgba value {{globalAmount}} name MultiplyGlobal1 label "\[value value]" xpos 1025 ypos 1566 } Dot { name Dot37 label "WRAP ALL" note_font_size 61 xpos 1059 ypos 1692 } set N4725d600 [stack 0] Dot { name Dot27 note_font_size 41 xpos 1059 ypos 3062 } set N4725cf00 [stack 0] Merge2 { inputs 2 name Merge1 xpos 1530 ypos 3168 } Shuffle { alpha white name Shuffle5 tile_color 0xffffffff note_font_color 0xffffffff xpos 1530 ypos 3216 } Merge2 { inputs 2 operation mask bbox A name Merge14 xpos 1530 ypos 3273 } push $Na0604100 push $N4725cf00 Shuffle { alpha white name Shuffle2 tile_color 0xffffffff note_font_color 0xffffffff xpos 1025 ypos 3158 } Merge2 { inputs 2 operation mask bbox A name Merge7 xpos 1025 ypos 3220 } push $Na0604800 push $N2d219600 Shuffle { alpha white name Shuffle4 tile_color 0xffffffff note_font_color 0xffffffff xpos 1708 ypos 3020 } Merge2 { inputs 2 operation mask bbox A name Merge13 xpos 1708 ypos 3103 } push $N63ccf900 Dot { name Dot21 xpos 2349 ypos 397 } Shuffle { red alpha green alpha blue alpha name Shuffle3 tile_color 0xffffffff label alpha note_font_size 21 note_font_color 0xffffffff xpos 2315 ypos 496 } Dot { name Dot23 xpos 2349 ypos 3399 } push $N4726e400 Dot { name Dot29 note_font_size 41 xpos 757 ypos 1277 } set N4723c100 [stack 0] Grade { channels rgba gamma {{parent.bleedColorFalloff_2}} name Grade1 xpos 724 ypos 2638 } Dot { name Dot33 note_font_size 41 xpos 758 ypos 2835 } Multiply { channels rgba value {{globalAmount}} name MultiplyGlobal2 label "\[value value]" xpos 297 ypos 2828 } push $N2d207200 Dot { name Dot38 note_font_size 41 xpos 438 ypos 725 } set N4720ab00 [stack 0] Dot { name Dot2 note_font_size 41 xpos 439 ypos 802 } set N4720a400 [stack 0] Dot { name Dot17 note_font_size 41 xpos 334 ypos 802 } Dot { name Dot16 note_font_size 41 xpos 334 ypos 1201 } push $N4720a400 Blur { size {{(width/13*parent.bleedColorSize*16*(ExponGlowWrapAll.aspectCalc.aspect.w/100))} {(height/13*parent.bleedColorSize*16*(ExponGlowWrapAll.aspectCalc.aspect.h/100))}} crop false name Blur6 xpos 856 ypos 874 } push $N4720a400 Blur { size {{(width/13*parent.bleedColorSize*8*(ExponGlowWrapAll.aspectCalc.aspect.w/100))} {(height/13*parent.bleedColorSize*8*(ExponGlowWrapAll.aspectCalc.aspect.h/100))}} crop false name Blur4 xpos 743 ypos 873 } push $N4720a400 Blur { size {{(width/15*parent.bleedColorSize*4*(ExponGlowWrapAll.aspectCalc.aspect.w/100))} {(height/15*parent.bleedColorSize*4*(ExponGlowWrapAll.aspectCalc.aspect.h/100))}} crop false name Blur3 xpos 627 ypos 874 } push $N4720a400 Blur { size {{(width/20*parent.bleedColorSize*2*(ExponGlowWrapAll.aspectCalc.aspect.w/100))} {(height/20*parent.bleedColorSize*2*(ExponGlowWrapAll.aspectCalc.aspect.h/100))}} crop false name Blur2 xpos 515 ypos 872 } push $N4720a400 Blur { size {{(width/25*parent.bleedColorSize*(ExponGlowWrapAll.aspectCalc.aspect.w/100))} {(height/25*parent.bleedColorSize*(ExponGlowWrapAll.aspectCalc.aspect.h/100))}} crop false name Blur1 xpos 404 ypos 871 } Merge2 { inputs 2 operation under bbox B name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 404 ypos 941 } Merge2 { inputs 2 operation under bbox B name Merge4 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 404 ypos 999 } Merge2 { inputs 2 operation under bbox B name Merge8 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 404 ypos 1049 } Merge2 { inputs 2 operation under bbox B name Merge12 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 404 ypos 1087 } Unpremult { name Unpremult2 xpos 404 ypos 1111 } Blur { size {{(width/50*parent.bleedColorSize*10*(ExponGlowWrapAll.aspectCalc.aspect.w/100))} {(height/50*parent.bleedColorSize*10*(ExponGlowWrapAll.aspectCalc.aspect.h/100))}} crop false name Blur5 xpos 404 ypos 1151 } CopyBBox { inputs 2 name CopyBBox1 xpos 404 ypos 1198 } Unpremult { name Unpremult5 xpos 404 ypos 2385 } Colorspace { channels all colorspace_out HSV name Colorspace1 xpos 404 ypos 2456 } Multiply { value {1 1 0 1} name Multiply5 label "\[value value]" xpos 404 ypos 2532 } push $N2d219d00 push $N4725d600 push $N4720ab00 Dot { name Dot10 xpos 201 ypos 725 } Clamp { minimum 0.001 maximum 100 name Clamp1 xpos 167 ypos 996 } Dot { name Dot24 xpos 201 ypos 1517 } Multiply { channels rgba value {{globalAmount}} name MultiplyGlobal label "\[value value]" xpos 19 ypos 1507 } push $N4723c100 Colorspace { channels all colorspace_out HSV name Colorspace6 xpos -13 ypos 1267 } Multiply { value {1 1 0 1} name Multiply4 label "\[value value]" xpos -123 ypos 1262 } push $Na0605d00 Remove { operation keep channels rgba name Remove1 xpos -413 ypos 594 } Unpremult { channels all name Unpremult1 xpos -407 ypos 1094 disable {{premultiplied*-1+1 x1 1}} } set N1ea6c100 [stack 0] Dot { name Dot12 xpos -226 ypos 1101 } Colorspace { channels all colorspace_out HSV name Colorspace5 xpos -260 ypos 1140 } Multiply { value {0 0 1 1} name Multiply3 label "\[value value]" xpos -260 ypos 1188 } Merge2 { inputs 2 operation plus Achannels none Bchannels none output none also_merge all name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -260 ypos 1267 } Colorspace { channels all colorspace_in HSV name Colorspace7 xpos -260 ypos 1327 } Dot { name Dot36 label "BLEND EDGES" note_font_size 45 xpos -226 ypos 1408 } push $N1ea6c100 Dot { name Dot18 note_font_size 41 xpos -373 ypos 1514 } set N1ea44800 [stack 0] Merge2 { inputs 2+1 operation copy bbox B Achannels none Bchannels none output none also_merge all mix {{blendEdgesAmount}} name Merge10 xpos -260 ypos 1507 } Dot { name Dot22 note_font_size 41 xpos -226 ypos 1588 } push $N1ea44800 Switch { inputs 2 which {{"blendEdgesAmount == 0 ? 0 : 1"}} name Switch3 xpos -407 ypos 1585 } Merge2 { inputs 2 bbox B Achannels none Bchannels none output none also_merge all name Merge5 xpos -407 ypos 1685 } Merge2 { inputs 2 bbox B Achannels none Bchannels none output none also_merge all name Merge6 xpos -407 ypos 1791 } Dot { name Dot34 note_font_size 41 xpos -373 ypos 2417 } set N1ea21d00 [stack 0] Colorspace { channels all colorspace_out HSV name Colorspace2 xpos -81 ypos 2410 } Multiply { value {0 0 1 1} name Multiply6 label "\[value value]" xpos -81 ypos 2458 } Merge2 { inputs 2 operation plus Achannels none Bchannels none output none also_merge all name Merge11 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -81 ypos 2537 } Colorspace { channels all colorspace_in HSV name Colorspace8 xpos -81 ypos 2606 } push $N1ea6c100 Dot { name Dot13 xpos -579 ypos 1101 } Dot { name Dot14 xpos -579 ypos 2559 } push $N1ea21d00 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos -407 ypos 2549 } Dot { name Dot6 note_font_size 41 xpos -373 ypos 2649 } set N1e9f1d00 [stack 0] Merge2 { inputs 2+1 operation copy output {rgba.red rgba.green rgba.blue -rgba.alpha} mix {{bleedColorAmount}} name Merge9 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -81 ypos 2828 } push $N1e9f1d00 Switch { inputs 2 which {{"parent.bleedColorAmount== 0 ? 0 : 1"}} name Switch2 xpos -407 ypos 2832 } Premult { name Premult3 xpos -407 ypos 2983 disable {{premultiplied*-1+1 i}} } Dot { name Dot19 xpos -373 ypos 3396 } Switch { inputs 5 which {{"\[value ls parent.outputView]"}} name Switch1 xpos 1708 ypos 3395 } push $Na0604f00 Dot { name Dot5 note_font_size 41 xpos -825 ypos 3581 } Merge2 { inputs 2+1 operation copy also_merge all name MergeCopyLightWrapPro label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 1708 ypos 3580 } Output { name Output1 xpos 1708 ypos 3898 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Lightning3D.gizmo ================================================ set cut_paste_input [stack 0] Group { inputs 0 name Lightning3D tile_color 0x131b56ff note_font "Bitstream Vera Sans Bold Bold Bold" note_font_color 0xadffffff selected true addUserKnob {20 User} addUserKnob {13 start l "Starting Point" t "3D position for the starting point of the lighning."} start {0 3 0} addUserKnob {13 end l "Ending Point" t "3D position for the ending point of the lighning."} addUserKnob {26 shape_div l "Shape"} addUserKnob {3 branches l Branches t "Choose the number of branches for the lighning bolt."} branches 20 addUserKnob {3 seed l Seed t "Random seed to generate an entirely new bolt." -STARTLINE} seed 1500 addUserKnob {3 points l "Points per Branch" t "Control how many points are generated per branch. This allows more details in the main shape of the bolt, but increases processing time.\n\nBranches can also be upsampled which allows for fine details with less processing overhead."} points 40 addUserKnob {3 upsample l Upsample t "Multiply the number of points in the bolt AFTER generation. \n\nWill add visual details to the bolt, but will not be used for the generation." -STARTLINE} upsample 10 addUserKnob {7 branch_min l "Spawn min" t "Each branch of the bolt is generated from a random point on another pre-existing branch.\n\nThis setting contrains the range from which a bolt may be spawned.\n\n0 Is the \"root\" of a branch, while 1 is the \"tip\"."} addUserKnob {7 branch_max l max t "Each branch of the bolt is generated from a random point on another pre-existing branch.\n\nThis setting contrains the range from which a bolt may be spawned.\n\n0 Is the \"root\" of a branch, while 1 is the \"tip\"." -STARTLINE} branch_max 0.65 addUserKnob {7 branches_distribution l "Spawn Distribution" t "Affect the distribution of new branches.\n\nAt value 1, branches will have an equal chance to spawn from any existing branch.\n\nWith lower values, earier branches will have more chances to spawn new branches.\n\nWith higher values, newer branches will be more likely to spawn new branches." R 0 2} branches_distribution 0.75 addUserKnob {7 scale_min l "Scale min" t "The minimum random length a branch may be."} scale_min 0.5 addUserKnob {7 scale_max l max t "The maximum random length a branch may be." -STARTLINE R 0.5 1.5} scale_max 1 addUserKnob {7 scale_distribution l "Scale Distribution" t "Affects the scale distribution.\n\nA value of 1 will randomly pick between the min and max scale.\n\nLower values will favor shorter branches.\nHigher values will favor longer branches." R 0 2} scale_distribution 1 addUserKnob {6 absolute l Absolute t "When this box is checked, the scale of each branch will be based on the scale of the parent branch, and how close from the tip this branch has spawned.\n\nWhen it is off, the scale will be truly random, based on the scale range. You will most likely have to adjust the max scale accordingly. " -STARTLINE} addUserKnob {7 spread l Spread t "Control how far apart the branches are spreading.\n\nAt value 0, all branches will try to follow the main direction. At value 1, each branch will go in a random direction."} spread 0.4 addUserKnob {26 color_div l "Color"} addUserKnob {6 main_noise_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 color l "Base Color" t "Choose the main color of the bolt."} color {1 2 3} addUserKnob {6 color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 color_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 color_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 taper l Taper t "Makes the tip of branches thinner (darker) than the root. "} taper 1 addUserKnob {7 falloff l Falloff t "Make the children branches darker than parent branches. "} addUserKnob {7 brighness_noise l "Brightness Noise" t "Adding some brighness noise will make the bolt less uniform looking."} brighness_noise 1 addUserKnob {7 brighness_frequency l "Noise Frequency" t "Adjust the frequency of the brighness noise (high frequency = small size, low frequency = large size)" R 0.1 5} brighness_frequency 1 addUserKnob {7 brighness_anim l "Noise Animation" t "The brightness noise can be animated. Use this knob to control time..\n\nGreat Scott!" R 0 100} addUserKnob {26 noises_div l "Turbulences"} addUserKnob {18 main_noise l "Main Shape Noise" t "This noise should be used to define the overall shape of the lighning. It doesn't affect the root or tip of each branch.\n\nAmount of detail that can be optained with this noise is dependent on number of Points per Branch." R 0 10} main_noise 1 addUserKnob {6 main_noise_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 main_noise_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 main_noise_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 main_frequency l Frequency t "Adjust the frequency (size) of main shape noise" R 0 3} main_frequency 1 addUserKnob {7 main_anim l Animation t "Animation of the main shape noise." R 0 100} addUserKnob {18 secondary_noise l "Turbulence Noise" t "Adds a secondary noise to the shape AFTER the upsampling is done, resulting in a more detailed noise.\n\nThis is meant to be a high frequency, low amplitude noise (compared to main), but go wild if you want to.\n\nNote: this noise does affect the root and tips of branches, so it may shift the start and end point." R 0 10} secondary_noise 1 addUserKnob {6 secondary_noise_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 secondary_noise_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 secondary_noise_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 secondary_noise_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 secondary_frequency l Frequency t "Frequency for the secondary noise" R 0 3} secondary_frequency 1 addUserKnob {7 secondary_anim l Animation t "Control the animation of the secondary noise" R 0 100} addUserKnob {26 growth_div l "Growth"} addUserKnob {7 progress l Amount t "Can be used to animate the progress of the lighning, for example to make a super slow motion lighning bolt."} progress 1 addUserKnob {7 progress_random l Randomness t "Without randomness, all branches will finish growing exactly at the same time.\n\nWith randomness, some will finish earlier.\nWith too much randomness, there is a chance some branches may start to appear before their parent branch is fully created, making some branches seemingly appear out of nowhere."} } Constant { inputs 0 channels rgb name Constant1 xpos -456 ypos -616 } Reformat { type "to box" box_width {{"max(parent.branches, 2)"}} box_height {{"max(parent.points, 1)"}} box_fixed true resize fill name Reformat1 xpos -456 ypos -445 } BlinkScript { recompileCount 69 ProgramGroup 1 KernelDescription "2 \"PointLighning\" iterate pixelWise 5e0e49e055b186dea0cc6c5c87cb9f407cb8dd55ac09a072668e611add35ced6 2 \"format\" Read Random \"dst\" Write Random 19 \"seed\" Int 1 AAAAAA== \"relative_scale\" Int 1 AAAAAA== \"format\" Int 2 CgAAAAoAAAA= \"start\" Float 3 AAAAAAAAAAAAAAAAAAAAAA== \"end\" Float 3 AAAAAAAAAAAAAAAAAAAAAA== \"spread\" Float 1 AAAAAA== \"branch_min\" Float 1 AAAAAA== \"branch_max\" Float 1 AAAAAA== \"scale_min\" Float 1 AAAAAA== \"scale_max\" Float 1 AAAAAA== \"scale_distribution\" Float 1 AAAAAA== \"distribution\" Float 1 AAAAAA== \"noise_frequency\" Float 1 AAAAAA== \"noise_time\" Float 1 AAAAAA== \"noise_amount\" Float 3 AAAAAAAAAAAAAAAAAAAAAA== \"octaves\" Int 1 AAAAAA== \"lacunarity\" Float 1 AAAAAA== \"amplitude\" Float 1 AAAAAA== \"gain\" Float 1 AAAAAA== 19 \"seed\" 1 1 \"relative_scale\" 1 1 \"WHformat\" 2 1 \"start\" 3 1 \"end\" 3 1 \"spread\" 1 1 \"branch_min\" 1 1 \"branch_max\" 1 1 \"scale_min\" 1 1 \"scale_max\" 1 1 \"scale_distribution\" 1 1 \"distribution\" 1 1 \"noise_frequency\" 1 1 \"noise_time\" 1 1 \"noise_amount\" 3 1 \"octaves\" 1 1 \"lacunarity\" 1 1 \"amplitude\" 1 1 \"gain\" 1 1 0" kernelSource "/* Lightning Kernel by Erwan Leroy 2020\n *\n * Simplex Noise based on https://github.com/Draradech/csworldgen/blob/master/simplexnoise.cpp\n * Ported by Mads Hagbarth Lund 2014\n *\n * Modifications (fBm) by Erwan Leroy 2018 at Spin VFX\n *\n * Simplex license:\n * Copyright (c) 2007-2012 Eliot Eshelman\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n *\n */\n\n\nint fastfloor( const float x ) \{ return x > 0 ? (int) x : (int) x - 1; \}\n\ninline float raw_noise_4d(const float4 coord)\n\{\n int simplex\[64]\[4] =\n \{\n \{0,1,2,3\},\{0,1,3,2\},\{0,0,0,0\},\{0,2,3,1\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{1,2,3,0\},\n \{0,2,1,3\},\{0,0,0,0\},\{0,3,1,2\},\{0,3,2,1\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{1,3,2,0\},\n \{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\n \{1,2,0,3\},\{0,0,0,0\},\{1,3,0,2\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{2,3,0,1\},\{2,3,1,0\},\n \{1,0,2,3\},\{1,0,3,2\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{2,0,3,1\},\{0,0,0,0\},\{2,1,3,0\},\n \{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\n \{2,0,1,3\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{3,0,1,2\},\{3,0,2,1\},\{0,0,0,0\},\{3,1,2,0\},\n \{2,1,0,3\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{3,1,0,2\},\{0,0,0,0\},\{3,2,0,1\},\{3,2,1,0\}\n \};\n\n int perm\[512] =\n \{\n 151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,\n 8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,\n 35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,\n 134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,\n 55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208, 89,\n 18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,\n 250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,\n 189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,\n 172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,\n 228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,\n 107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,\n 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180,\n\n 151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,\n 8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,\n 35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,\n 134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,\n 55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208, 89,\n 18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,\n 250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,\n 189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,\n 172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,\n 228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,\n 107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,\n 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180\n \};\n\n int grad4\[32]\[4]=\n \{\n \{0,1,1,1\}, \{0,1,1,-1\}, \{0,1,-1,1\}, \{0,1,-1,-1\},\n \{0,-1,1,1\}, \{0,-1,1,-1\}, \{0,-1,-1,1\}, \{0,-1,-1,-1\},\n \{1,0,1,1\}, \{1,0,1,-1\}, \{1,0,-1,1\}, \{1,0,-1,-1\},\n \{-1,0,1,1\}, \{-1,0,1,-1\}, \{-1,0,-1,1\}, \{-1,0,-1,-1\},\n \{1,1,0,1\}, \{1,1,0,-1\}, \{1,-1,0,1\}, \{1,-1,0,-1\},\n \{-1,1,0,1\}, \{-1,1,0,-1\}, \{-1,-1,0,1\}, \{-1,-1,0,-1\},\n \{1,1,1,0\}, \{1,1,-1,0\}, \{1,-1,1,0\}, \{1,-1,-1,0\},\n \{-1,1,1,0\}, \{-1,1,-1,0\}, \{-1,-1,1,0\}, \{-1,-1,-1,0\}\n \};\n float x = coord.x;\n float y = coord.y;\n float z = coord.z;\n float w = coord.w;\n float F4 = (sqrt(5.0f)-1.0)/4.0;\n float G4 = (5.0-sqrt(5.0f))/20.0;\n float n0, n1, n2, n3, n4;\n float s = (x + y + z + w) * F4;\n int i = fastfloor(x + s);\n int j = fastfloor(y + s);\n int k = fastfloor(z + s);\n int l = fastfloor(w + s);\n float t = (i + j + k + l) * G4;\n float X0 = i - t;\n float Y0 = j - t;\n float Z0 = k - t;\n float W0 = l - t;\n float x0 = x - X0;\n float y0 = y - Y0;\n float z0 = z - Z0;\n float w0 = w - W0;\n int c1 = (x0 > y0) ? 32 : 0;\n int c2 = (x0 > z0) ? 16 : 0;\n int c3 = (y0 > z0) ? 8 : 0;\n int c4 = (x0 > w0) ? 4 : 0;\n int c5 = (y0 > w0) ? 2 : 0;\n int c6 = (z0 > w0) ? 1 : 0;\n int c = c1 + c2 + c3 + c4 + c5 + c6;\n int i1, j1, k1, l1;\n int i2, j2, k2, l2;\n int i3, j3, k3, l3;\n i1 = simplex\[c]\[0]>=3 ? 1 : 0;\n j1 = simplex\[c]\[1]>=3 ? 1 : 0;\n k1 = simplex\[c]\[2]>=3 ? 1 : 0;\n l1 = simplex\[c]\[3]>=3 ? 1 : 0;\n i2 = simplex\[c]\[0]>=2 ? 1 : 0;\n j2 = simplex\[c]\[1]>=2 ? 1 : 0;\n k2 = simplex\[c]\[2]>=2 ? 1 : 0;\n l2 = simplex\[c]\[3]>=2 ? 1 : 0;\n i3 = simplex\[c]\[0]>=1 ? 1 : 0;\n j3 = simplex\[c]\[1]>=1 ? 1 : 0;\n k3 = simplex\[c]\[2]>=1 ? 1 : 0;\n l3 = simplex\[c]\[3]>=1 ? 1 : 0;\n float x1 = x0 - i1 + G4;\n float y1 = y0 - j1 + G4;\n float z1 = z0 - k1 + G4;\n float w1 = w0 - l1 + G4;\n float x2 = x0 - i2 + 2.0*G4;\n float y2 = y0 - j2 + 2.0*G4;\n float z2 = z0 - k2 + 2.0*G4;\n float w2 = w0 - l2 + 2.0*G4;\n float x3 = x0 - i3 + 3.0*G4;\n float y3 = y0 - j3 + 3.0*G4;\n float z3 = z0 - k3 + 3.0*G4;\n float w3 = w0 - l3 + 3.0*G4;\n float x4 = x0 - 1.0 + 4.0*G4;\n float y4 = y0 - 1.0 + 4.0*G4;\n float z4 = z0 - 1.0 + 4.0*G4;\n float w4 = w0 - 1.0 + 4.0*G4;\n int ii = i & 255;\n int jj = j & 255;\n int kk = k & 255;\n int ll = l & 255;\n int gi0 = perm\[ii+perm\[jj+perm\[kk+perm\[ll]]]] % 32;\n int gi1 = perm\[ii+i1+perm\[jj+j1+perm\[kk+k1+perm\[ll+l1]]]] % 32;\n int gi2 = perm\[ii+i2+perm\[jj+j2+perm\[kk+k2+perm\[ll+l2]]]] % 32;\n int gi3 = perm\[ii+i3+perm\[jj+j3+perm\[kk+k3+perm\[ll+l3]]]] % 32;\n int gi4 = perm\[ii+1+perm\[jj+1+perm\[kk+1+perm\[ll+1]]]] % 32;\n\n float t0 = 0.6 - x0*x0 - y0*y0 - z0*z0 - w0*w0;\n\n if(t0<0) \{\n n0 = 0.0;\n \}\n else\n \{\n t0 *= t0;\n n0 = t0 * t0 * dot(float4(grad4\[gi0]\[0],grad4\[gi0]\[2],grad4\[gi0]\[3],grad4\[gi0]\[3]), float4(x0, y0, z0, w0));\n \}\n\n float t1 = 0.6 - x1*x1 - y1*y1 - z1*z1 - w1*w1;\n\n if(t1<0) \{\n n1 = 0.0;\n \}\n else \{\n t1 *= t1;\n n1 = t1 * t1 * dot(float4(grad4\[gi1]\[0],grad4\[gi1]\[2],grad4\[gi1]\[3],grad4\[gi1]\[3]), float4(x1, y1, z1, w1));\n \}\n\n float t2 = 0.6 - x2*x2 - y2*y2 - z2*z2 - w2*w2;\n\n if(t2<0) \{\n n2 = 0.0;\n \}\n else \{\n t2 *= t2;\n n2 = t2 * t2 * dot(float4(grad4\[gi2]\[0],grad4\[gi2]\[2],grad4\[gi2]\[3],grad4\[gi2]\[3]), float4(x2, y2, z2, w2));\n \}\n\n float t3 = 0.6 - x3*x3 - y3*y3 - z3*z3 - w3*w3;\n\n if(t3<0) \{\n n3 = 0.0;\n \}\n else \{\n t3 *= t3;\n n3 = t3 * t3 * dot(float4(grad4\[gi3]\[0],grad4\[gi3]\[2],grad4\[gi3]\[3],grad4\[gi3]\[3]), float4(x3, y3, z3, w3));\n \}\n\n float t4 = 0.6 - x4*x4 - y4*y4 - z4*z4 - w4*w4;\n\n if(t4<0) \{\n n4 = 0.0;\n \}\n else \{\n t4 *= t4;\n n4 = t4 * t4 * dot(float4(grad4\[gi4]\[0],grad4\[gi4]\[2],grad4\[gi4]\[3],grad4\[gi4]\[3]), float4(x4, y4, z4, w4));\n \}\n return 27.0 * (n0 + n1 + n2 + n3 + n4);\n\}\n\n\ninline float remap(float val, float ori_min, float ori_max, float new_min, float new_max)\n\{\n float ori_range = ori_max-ori_min;\n float new_range = new_max-new_min;\n return (((val - ori_min) * new_range) / ori_range) + new_min;\n\n\}\n\ninline float3 mix(float3 _X,float3 _Y,float _A)\{\n return _X*(1.0f-_A)+_Y*_A;\n\}\ninline float mix(float _X,float _Y,float _A)\{\n return _X*(1.0f-_A)+_Y*_A;\n\}\n\n\n// Random number generator algorithm from https://www.shadertoy.com/view/Xt23Ry\ninline float fract (float x) \{return x-floor(x);\}\ninline float random(float co) \{ return fract(sin(co*(91.3458f)) * 47453.5453f); \}\n\ninline float3 randomv(float3 seed)\n\{\n float scramble = random(seed.x + seed.y * seed.z);\n float3 rand;\n rand.x = random(seed.x + scramble + 0.14557f + 0.47917f * seed.z)*2-1;\n rand.y = random(seed.y * 0.214447f + scramble * 47.241f * seed.x)*2-1;\n rand.z = random(seed.z * scramble + 3.147855f + 0.2114f * seed.y)*2-1;\n return normalize(rand);\n\}\n\nkernel PointLighning : ImageComputationKernel\n\{\n Image format;\n Image dst;\n\n param: //Parameters available to the user\n int seed, relative_scale;\n int2 WHformat;\n float3 start, end;\n float spread, branch_min, branch_max, scale_min, scale_max, scale_distribution;\n float distribution, noise_frequency, noise_time;\n float3 noise_amount;\n int octaves;\n float lacunarity;\n float amplitude;\n float gain;\n\n void define() \{\n defineParam(WHformat, \"format\", int2(10,10));\n \}\n\nfloat fBm_4d(const float octaves, const float lacunarity, const float gain, const float4 coord, float amplitude)\n\{\n float total = 0;\n float4 frequency = coord;\n for( int i=0; i < octaves; i++ ) \{\n total += (float)raw_noise_4d(frequency) * amplitude;\n frequency *= lacunarity;\n amplitude *= gain;\n \}\n return float(total);\n\}\n\nfloat3 fBm_4d_3d(const float octaves, const float lacunarity, const float gain, const float4 coord, float amplitude)\n\{\n float3 sample;\n sample.x = fBm_4d(octaves, lacunarity, gain, coord, amplitude);\n sample.y = fBm_4d(octaves, lacunarity, gain, coord + 100.0f, amplitude);\n sample.z = fBm_4d(octaves, lacunarity, gain, coord + 200.0f, amplitude);\n return sample;\n\}\n\n void process(int2 pos) \{\n // this is highly inneficient, but for the algoritm to work, it needs to be single threaded.\n if (pos.x || pos.y ) \{\n return;\n \}\n float3 main_vector = end-start;\n float2 random_source;\n int2 sample_source;\n\n float progress = 0.0f;\n float3 branch_start;\n float3 branch_end;\n float branch_length;\n float branch_progress;\n float3 position;\n float4 noise_source;\n float3 noise;\n for (int x = 0; x < WHformat.x; x++) \{\n // For the first branch, we use interpolate between the start and end, otherwise from fork to random point\n if (x==0) \{\n branch_start = start;\n branch_end = end;\n branch_length = 1.0f;\n \} else \{\n // Pick from another random point\n random_source = float2(random(seed+12.5f+x), random(seed+3.14f+x));\n random_source.x = pow(random_source.x, 1/distribution); // Gamma the random value to change distribution\n random_source.x = remap(random_source.x, 0, 1, 0, x);\n random_source.y = remap(random_source.y, 0, 1, WHformat.y*branch_min, WHformat.y*branch_max) + 0.5f;\n random_source.y = max(0.0f, min(float(WHformat.y-1), random_source.y));\n sample_source = int2(random_source);\n float4 sample = dst(sample_source.x, sample_source.y);\n branch_start = float3(sample.x, sample.y, sample.z);\n progress = sample.w;\n if (relative_scale) \{\n branch_length = length(main_vector) * (1.0f-progress);\n \} else \{\n branch_length = length(main_vector);\n \}\n branch_length = branch_length * remap(random(branch_length*x), 0.0f, 1.0f, scale_min, scale_max); // randomize\n branch_length = branch_length * mix(1.0f - float(x)/WHformat.x, 1.0f, scale_distribution);\n branch_end = normalize(mix(normalize(main_vector), randomv(float3(x)), spread)) * branch_length + branch_start;\n \}\n \n // Iterate along the branch\n for (int y = 0; y < WHformat.y; y++) \{\n branch_progress = y/(WHformat.y-1.0f);\n position = mix(branch_start, branch_end, branch_progress);\n noise_source = float4(position.x, position.y, position.z, 1.0f) * noise_frequency;\n noise_source.w = x*100.0f + noise_time;\n noise = fBm_4d_3d(octaves,lacunarity, gain, noise_source, amplitude);\n position = position + (noise * branch_length * (1.0f - fabs(branch_progress * 2.0f - 1.0f))) * noise_amount;\n float global_progress = remap(branch_progress, 0.0f, 1.0f, progress, 1.0f);\n dst(x,y) = float4(position.x, position.y, position.z, global_progress); \n \}\n \}\n \}\n\};" useGPUIfAvailable false rebuild "" PointLighning_seed {{parent.seed}} PointLighning_relative_scale {{!parent.absolute}} PointLighning_format {{actual_format.width} {actual_format.height}} PointLighning_start {{parent.start} {parent.start} {parent.start}} PointLighning_end {{parent.end} {parent.end} {parent.end}} PointLighning_spread {{parent.spread}} PointLighning_branch_min {{parent.branch_min}} PointLighning_branch_max {{parent.branch_max}} PointLighning_scale_min {{parent.scale_min+0.001}} PointLighning_scale_max {{parent.scale_max}} PointLighning_scale_distribution {{parent.scale_distribution}} PointLighning_distribution {{parent.branches_distribution}} PointLighning_noise_frequency {{parent.main_frequency}} PointLighning_noise_time {{parent.main_anim}} PointLighning_noise_amount {{parent.main_noise/2} {parent.main_noise/2} {parent.main_noise/2}} PointLighning_octaves 5 PointLighning_lacunarity 2 PointLighning_amplitude 0.5 PointLighning_gain 0.5 rebuild_finalise "" name BlinkScript1 xpos -456 ypos -343 } Reformat { type scale scale {1 {"max(parent.upsample, 1)"}} resize distort name Reformat3 selected true xpos -456 ypos -260 } Dot { name Dot1 tile_color 0xa57aaa00 xpos -422 ypos -234 } set N1e7f3c50 [stack 0] Dot { name Dot4 tile_color 0xa57aaa00 xpos -519 ypos -234 } set N1e7f7a70 [stack 0] Dot { name Dot10 tile_color 0xa57aaa00 xpos -813 ypos -234 } set N1e7fba10 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle2 xpos -847 ypos -185 } Invert { channels rgba name Invert1 xpos -847 ypos -151 } set N1e910f80 [stack 0] Expression { temp_name0 seed temp_expr0 1 temp_name1 grad temp_expr1 y/height channel0 {-rgba.red -rgba.green -rgba.blue rgba.alpha} expr0 random(x+seed)*grad+(1-grad) channel1 {-rgba.red -rgba.green -rgba.blue none} channel2 {-rgba.red -rgba.green -rgba.blue none} name Expression2 xpos -745 ypos -128 } push $N1e910f80 ChannelMerge { inputs 2 operation multiply mix {{parent.progress_random}} name ChannelMerge1 xpos -847 ypos -95 } Grade { channels rgba blackpoint {{"clamp(1-parent.progress, 0, 1)"}} add 0.001 unpremult -rgba.alpha name Grade4 xpos -847 ypos -33 } Expression { expr0 x==1?0:r expr1 x==1?0:g expr2 x==1?0:b expr3 x==1?0:a name Expression1 xpos -847 ypos -7 disable {{parent.branches!=1 x1027 1}} } Dot { name Dot9 tile_color 0xcccccc00 xpos -813 ypos 58 } set N1e94a680 [stack 0] push $N1e7f7a70 Multiply { channels rgba value {{parent.secondary_frequency*5} {parent.secondary_frequency*5} {parent.secondary_frequency*5} {parent.secondary_anim}} name Multiply1 xpos -553 ypos -197 } BlinkScript { kernelSourceFile /Users/madshagbarth/Github/Nuke-Private/Blink/PointRender/Modify/Fractal_v06.cpp recompileCount 61 ProgramGroup 1 KernelDescription "2 \"Noise4D\" iterate pixelWise d32ddf73d710301044f07e5ab3c70d05a63934d4228d345b13c7fd2d2efe8ee2 2 \"src\" Read Point \"dst\" Write Point 17 \"absNoise\" Bool 1 AA== \"curveNoise\" Bool 1 AA== \"curveInvert\" Bool 1 AA== \"curveGain\" Float 1 AACAPw== \"curveOffset\" Float 1 AACAPw== \"Octaves\" Int 1 CgAAAA== \"Gain\" Float 1 AAAAPw== \"Lacunarity\" Float 1 AAAAQA== \"Gamma\" Float 1 AAAAPw== \"amplitude\" Float 3 AAAAPwAAAD8AAAA/AAAAAA== \"itterations\" Int 1 AQAAAA== \"Offset\" Float 4 AAAAAAAAAAAAAAAAAAAAAA== \"Scale\" Float 4 AACAPwAAgD8AAIA/AACAPw== \"suboffset\" Float 4 AACAPwAAgD8AAIA/AACAPw== \"topoffset\" Float 4 AACAPwAAgD8AAIA/AACAPw== \"subscale\" Float 4 AACAPwAAgD8AAIA/AACAPw== \"topscale\" Float 4 AACAPwAAgD8AAIA/AACAPw== 17 \"absNoise\" 1 1 \"curveNoise\" 1 1 \"curveInvert\" 1 1 \"curveGain\" 1 1 \"curveOffset\" 1 1 \"octaves\" 1 1 \"gain\" 1 1 \"lacunarity\" 1 1 \"gamma\" 1 1 \"amplitude\" 3 1 \"itterations\" 1 1 \"offset\" 4 1 \"scale\" 4 1 \"suboffset\" 4 1 \"topoffset\" 4 1 \"subscale\" 4 1 \"topscale\" 4 1 0" kernelSource "//Based on https://github.com/Draradech/csworldgen/blob/master/simplexnoise.cpp\n//Ported by Mads Hagbarth Lund 2014\n\n/* Copyright (c) 2007-2012 Eliot Eshelman\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n *\n */\n\n\nint fastfloor( const float x ) \{ return x > 0 ? (int) x : (int) x - 1; \}\ninline float raw_noise_4d( const float x, const float y, const float z, const float w ) \n\{\nint simplex\[64]\[4] = \{\n \{0,1,2,3\},\{0,1,3,2\},\{0,0,0,0\},\{0,2,3,1\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{1,2,3,0\},\n \{0,2,1,3\},\{0,0,0,0\},\{0,3,1,2\},\{0,3,2,1\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{1,3,2,0\},\n \{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\n \{1,2,0,3\},\{0,0,0,0\},\{1,3,0,2\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{2,3,0,1\},\{2,3,1,0\},\n \{1,0,2,3\},\{1,0,3,2\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{2,0,3,1\},\{0,0,0,0\},\{2,1,3,0\},\n \{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\n \{2,0,1,3\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{3,0,1,2\},\{3,0,2,1\},\{0,0,0,0\},\{3,1,2,0\},\n \{2,1,0,3\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{3,1,0,2\},\{0,0,0,0\},\{3,2,0,1\},\{3,2,1,0\}\n\};\n int perm\[512] = \{\n 151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,\n 8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,\n 35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,\n 134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,\n 55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208, 89,\n 18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,\n 250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,\n 189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,\n 172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,\n 228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,\n 107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,\n 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180,\n\n 151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,\n 8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,\n 35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,\n 134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,\n 55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208, 89,\n 18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,\n 250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,\n 189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,\n 172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,\n 228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,\n 107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,\n 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180\n \};\n int grad4\[32]\[4]= \{\n \{0,1,1,1\}, \{0,1,1,-1\}, \{0,1,-1,1\}, \{0,1,-1,-1\},\n \{0,-1,1,1\}, \{0,-1,1,-1\}, \{0,-1,-1,1\}, \{0,-1,-1,-1\},\n \{1,0,1,1\}, \{1,0,1,-1\}, \{1,0,-1,1\}, \{1,0,-1,-1\},\n \{-1,0,1,1\}, \{-1,0,1,-1\}, \{-1,0,-1,1\}, \{-1,0,-1,-1\},\n \{1,1,0,1\}, \{1,1,0,-1\}, \{1,-1,0,1\}, \{1,-1,0,-1\},\n \{-1,1,0,1\}, \{-1,1,0,-1\}, \{-1,-1,0,1\}, \{-1,-1,0,-1\},\n \{1,1,1,0\}, \{1,1,-1,0\}, \{1,-1,1,0\}, \{1,-1,-1,0\},\n \{-1,1,1,0\}, \{-1,1,-1,0\}, \{-1,-1,1,0\}, \{-1,-1,-1,0\}\n \};\n float F4 = (sqrt(5.0f)-1.0f)/4.0f;\n float G4 = (5.0f-sqrt(5.0f))/20.0f;\n float n0, n1, n2, n3, n4;\n float s = (x + y + z + w) * F4;\n int i = fastfloor(x + s);\n int j = fastfloor(y + s);\n int k = fastfloor(z + s);\n int l = fastfloor(w + s);\n float t = (i + j + k + l) * G4;\n float X0 = i - t;\n float Y0 = j - t;\n float Z0 = k - t;\n float W0 = l - t;\n\n float x0 = x - X0;\n float y0 = y - Y0;\n float z0 = z - Z0;\n float w0 = w - W0;\n int c1 = (x0 > y0) ? 32 : 0;\n int c2 = (x0 > z0) ? 16 : 0;\n int c3 = (y0 > z0) ? 8 : 0;\n int c4 = (x0 > w0) ? 4 : 0;\n int c5 = (y0 > w0) ? 2 : 0;\n int c6 = (z0 > w0) ? 1 : 0;\n int c = c1 + c2 + c3 + c4 + c5 + c6;\n\n int i1, j1, k1, l1;\n int i2, j2, k2, l2;\n int i3, j3, k3, l3;\n i1 = simplex\[c]\[0]>=3 ? 1 : 0;\n j1 = simplex\[c]\[1]>=3 ? 1 : 0;\n k1 = simplex\[c]\[2]>=3 ? 1 : 0;\n l1 = simplex\[c]\[3]>=3 ? 1 : 0;\n i2 = simplex\[c]\[0]>=2 ? 1 : 0;\n j2 = simplex\[c]\[1]>=2 ? 1 : 0;\n k2 = simplex\[c]\[2]>=2 ? 1 : 0;\n l2 = simplex\[c]\[3]>=2 ? 1 : 0;\n i3 = simplex\[c]\[0]>=1 ? 1 : 0;\n j3 = simplex\[c]\[1]>=1 ? 1 : 0;\n k3 = simplex\[c]\[2]>=1 ? 1 : 0;\n l3 = simplex\[c]\[3]>=1 ? 1 : 0;\n float x1 = x0 - i1 + G4;\n float y1 = y0 - j1 + G4;\n float z1 = z0 - k1 + G4;\n float w1 = w0 - l1 + G4;\n float x2 = x0 - i2 + 2.0*G4;\n float y2 = y0 - j2 + 2.0*G4;\n float z2 = z0 - k2 + 2.0*G4;\n float w2 = w0 - l2 + 2.0*G4;\n float x3 = x0 - i3 + 3.0*G4;\n float y3 = y0 - j3 + 3.0*G4;\n float z3 = z0 - k3 + 3.0*G4;\n float w3 = w0 - l3 + 3.0*G4;\n float x4 = x0 - 1.0 + 4.0*G4;\n float y4 = y0 - 1.0 + 4.0*G4;\n float z4 = z0 - 1.0 + 4.0*G4;\n float w4 = w0 - 1.0 + 4.0*G4;\n int ii = i & 255;\n int jj = j & 255;\n int kk = k & 255;\n int ll = l & 255;\n int gi0 = perm\[ii+perm\[jj+perm\[kk+perm\[ll]]]] % 32;\n int gi1 = perm\[ii+i1+perm\[jj+j1+perm\[kk+k1+perm\[ll+l1]]]] % 32;\n int gi2 = perm\[ii+i2+perm\[jj+j2+perm\[kk+k2+perm\[ll+l2]]]] % 32;\n int gi3 = perm\[ii+i3+perm\[jj+j3+perm\[kk+k3+perm\[ll+l3]]]] % 32;\n int gi4 = perm\[ii+1+perm\[jj+1+perm\[kk+1+perm\[ll+1]]]] % 32;\n float t0 = 0.6 - x0*x0 - y0*y0 - z0*z0 - w0*w0;\n if(t0<0) n0 = 0.0;\n else \{\n t0 *= t0;\n n0 = t0 * t0 * dot(float4(grad4\[gi0]\[0],grad4\[gi0]\[2],grad4\[gi0]\[3],grad4\[gi0]\[3]), float4(x0, y0, z0, w0));\n \}\n float t1 = 0.6 - x1*x1 - y1*y1 - z1*z1 - w1*w1;\n if(t1<0) n1 = 0.0;\n else \{\n t1 *= t1;\n n1 = t1 * t1 * dot(float4(grad4\[gi1]\[0],grad4\[gi1]\[2],grad4\[gi1]\[3],grad4\[gi1]\[3]), float4(x1, y1, z1, w1));\n \}\n float t2 = 0.6 - x2*x2 - y2*y2 - z2*z2 - w2*w2;\n if(t2<0) n2 = 0.0;\n else \{\n t2 *= t2;\n n2 = t2 * t2 * dot(float4(grad4\[gi2]\[0],grad4\[gi2]\[2],grad4\[gi2]\[3],grad4\[gi2]\[3]), float4(x2, y2, z2, w2));\n \}\n float t3 = 0.6 - x3*x3 - y3*y3 - z3*z3 - w3*w3;\n if(t3<0) n3 = 0.0;\n else \{\n t3 *= t3;\n n3 = t3 * t3 * dot(float4(grad4\[gi3]\[0],grad4\[gi3]\[2],grad4\[gi3]\[3],grad4\[gi3]\[3]), float4(x3, y3, z3, w3));\n \}\n float t4 = 0.6 - x4*x4 - y4*y4 - z4*z4 - w4*w4;\n if(t4<0) n4 = 0.0;\n else \{\n t4 *= t4;\n n4 = t4 * t4 * dot(float4(grad4\[gi4]\[0],grad4\[gi4]\[2],grad4\[gi4]\[3],grad4\[gi4]\[3]), float4(x4, y4, z4, w4));\n \}\n return 27.0 * (n0 + n1 + n2 + n3 + n4);\n\}\n\n\n\n\nkernel Noise4D : ImageComputationKernel\n\{\n Image src;\n Image dst;\nparam:\n bool absNoise;\n bool curveNoise;\n bool curveInvert;\n float curveGain;\n float curveOffset;\n int octaves;\n float gain;\n float lacunarity;\n float gamma;\n float3 amplitude;\n int itterations;\n float4 offset;\n float4 scale;\n float4 suboffset;\n float4 topoffset;\n float4 subscale;\n float4 topscale;\n\n\n void define() \{\n defineParam (absNoise, \"absNoise\", false); \n defineParam (curveNoise, \"curveNoise\", false); \n defineParam (curveInvert, \"curveInvert\", false); \n defineParam (curveGain, \"curveGain\", 1.0f);\n defineParam (curveOffset, \"curveOffset\", 1.0f);\n defineParam (octaves, \"Octaves\", 10);\n defineParam (gain, \"Gain\", 0.5f);\n defineParam (lacunarity, \"Lacunarity\", 2.0f);\n defineParam (gamma, \"Gamma\", 0.5f);\n defineParam (amplitude, \"amplitude\", float3(0.5f));\n defineParam (itterations, \"itterations\", 1);\n defineParam(offset, \"Offset\", float4(0.0f, 0.0f, 0.0f,0.0f));\n defineParam(scale, \"Scale\", float4(1.0f, 1.0f, 1.0f,1.0f));\n defineParam(suboffset, \"suboffset\", float4(1.0f, 1.0f, 1.0f,1.0f));\n defineParam(topoffset, \"topoffset\", float4(1.0f, 1.0f, 1.0f,1.0f));\n defineParam(subscale, \"subscale\", float4(1.0f, 1.0f, 1.0f,1.0f));\n defineParam(topscale, \"topscale\", float4(1.0f, 1.0f, 1.0f,1.0f)); \n \}\n\nfloat octave_noise_4d( const float octaves, const float persistence, const float scale, const float x, const float y, const float z, const float w ) \n\{\n float total = 0.0f;\n float current;\n float last = 1.0f;\n float frequency = scale;\n float amplitude = 1.0f;\n float maxAmplitude = 0.0f;\n float4 Tempoffset;\n float4 Tempscale;\n\n\n for( int i=0; i < octaves; i++ ) \{\n\n /*\n if (i == 0) \{\n total += (float)raw_noise_4d( (x+suboffset.x) * frequency, (y+suboffset.y) * frequency, (z+suboffset.z) * frequency, (w+suboffset.w) * frequency ) * amplitude;\n \}\n else if (i == octaves-1) \{\n total += (float)raw_noise_4d( (x+topoffset.x) * frequency, (y+topoffset.y) * frequency, (z+topoffset.z) * frequency, (w+topoffset.w) * frequency ) * amplitude;\n \}\n else \{\n total += (float)raw_noise_4d( x * frequency, y * frequency, z * frequency, w * frequency ) * amplitude;\n \}\n */\n\n\n Tempscale = (topscale * (i/(octaves-1.0f)))+(subscale * (1-(i/(octaves-1.0f)))); \n Tempoffset = (topoffset * (i/(octaves-1.0f)))+(suboffset * (1-(i/(octaves-1.0f))));\n current = (float)raw_noise_4d( ((x*Tempscale.x)+Tempoffset.x) * frequency, \n ((y*Tempscale.y)+Tempoffset.y) * frequency, \n ((z*Tempscale.z)+Tempoffset.z) * frequency, \n ((w*Tempscale.w)+Tempoffset.w) * frequency \n ) * amplitude;\n if (i == 0 && curveNoise)\{\n if (curveInvert)\{\n last = 0.5f-current; \n \}\n else\{\n last = current; \n \}\n \n \}\n current = curveNoise?current*((last+curveOffset)*curveGain):current;\n total += absNoise?fabs(current):current;\n frequency *= 2.0f;\n maxAmplitude += amplitude;\n amplitude *= persistence;\n\n \}\n return float(total / maxAmplitude);\n\}\n\n\n\n\n void process() \{\n float4 srcSample = float4(src(0),src(1),src(2),src(3));\n float sampleR,sampleG,sampleB;\n for( int i=0; i < itterations; i++ ) \{\n sampleR = (float)octave_noise_4d(float(octaves), gain, lacunarity, ( srcSample.x * scale.x ) + offset.x, ( srcSample.y * scale.y ) + offset.y, ( srcSample.z * scale.z ) + offset.z, ( srcSample.w * scale.w ) + offset.w) * amplitude.x;\n sampleG = (float)octave_noise_4d(float(octaves), gain, lacunarity, ( srcSample.x * scale.x ) + offset.x, ( srcSample.y * scale.y ) + offset.y, ( srcSample.z * scale.z ) + offset.z, ( srcSample.w * scale.w ) + offset.w - 100.0f) * amplitude.y;\n sampleB = (float)octave_noise_4d(float(octaves), gain, lacunarity, ( srcSample.x * scale.x ) + offset.x, ( srcSample.y * scale.y ) + offset.y, ( srcSample.z * scale.z ) + offset.z, ( srcSample.w * scale.w ) + offset.w + 200.0f) * amplitude.z;\n \}\n dst() = float4(sampleR,sampleG,sampleB,1.0f);\n\}\n\};" rebuild "" Noise4D_curveGain 3 Noise4D_curveOffset 0 Noise4D_Octaves 8 Noise4D_Gain 0.18 Noise4D_Lacunarity 0.72 Noise4D_Gamma 0.79 Noise4D_amplitude {-1.3 -1.3 -1.3} Noise4D_Offset {0.5 0 0 0} Noise4D_Scale {0.35 0.35 0.35 0.35} Noise4D_suboffset {10.09 0 0 0} Noise4D_topoffset {0 0 0 0} Noise4D_subscale {0.475 16.475 0.475 0.475} Noise4D_topscale {10 3 12 3} rebuild_finalise "" name Noise4D1 xpos -553 ypos -150 } Multiply { channels rgba value {{parent.secondary_noise/50} {parent.secondary_noise/50} {parent.secondary_noise/50} {parent.secondary_noise/50}} name Multiply2 xpos -553 ypos -84 } Dot { name Dot7 tile_color 0x7aa9ff00 xpos -519 ypos -8 } push $N1e7f3c50 Merge2 { inputs 2 operation plus output rgb name Merge1 xpos -456 ypos -12 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy2 xpos -456 ypos 48 } Dot { name Dot8 tile_color 0x9e3c6300 xpos -422 ypos 182 } push $N1e94a680 push $N1e7fba10 Dot { name Dot3 tile_color 0xa57aaa00 xpos -964 ypos -234 } set N1e84fdd0 [stack 0] Shuffle { alpha white name Shuffle3 xpos -998 ypos -172 } Multiply { channels rgba value {{parent.brighness_frequency} {parent.brighness_frequency} {parent.brighness_frequency} {parent.brighness_anim}} name Multiply3 xpos -998 ypos -146 } BlinkScript { recompileCount 27 ProgramGroup 1 KernelDescription "2 \"Noise4D\" iterate pixelWise d60f21004827daf93cc7aae3c8a9d35a464dc4075e83f5304202d888c93a31ad 2 \"src\" Read Point \"dst\" Write Point 5 \"octaves\" Int 1 CAAAAA== \"lacunarity\" Float 1 AAAAQA== \"amplitude\" Float 1 mpkZPw== \"gain\" Float 1 AAAAPw== \"mode\" Int 1 AAAAAA== 5 \"octaves\" 1 1 \"lacunarity\" 1 1 \"amplitude\" 1 1 \"gain\" 1 1 \"mode\" 1 1 0" kernelSource "//Based on https://github.com/Draradech/csworldgen/blob/master/simplexnoise.cpp\n//Ported by Mads Hagbarth Lund 2014\n//Modifications (fBm and Turbulence) by Erwan Leroy 2018 at Spin VFX\n\n/* Copyright (c) 2007-2012 Eliot Eshelman\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n *\n */\n\n\nint fastfloor( const float x ) \{ return x > 0 ? (int) x : (int) x - 1; \}\n\ninline float raw_noise_4d(const float4 coord)\n\{\n int simplex\[64]\[4] =\n \{\n \{0,1,2,3\},\{0,1,3,2\},\{0,0,0,0\},\{0,2,3,1\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{1,2,3,0\},\n \{0,2,1,3\},\{0,0,0,0\},\{0,3,1,2\},\{0,3,2,1\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{1,3,2,0\},\n \{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\n \{1,2,0,3\},\{0,0,0,0\},\{1,3,0,2\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{2,3,0,1\},\{2,3,1,0\},\n \{1,0,2,3\},\{1,0,3,2\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{2,0,3,1\},\{0,0,0,0\},\{2,1,3,0\},\n \{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\n \{2,0,1,3\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{3,0,1,2\},\{3,0,2,1\},\{0,0,0,0\},\{3,1,2,0\},\n \{2,1,0,3\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{3,1,0,2\},\{0,0,0,0\},\{3,2,0,1\},\{3,2,1,0\}\n \};\n\n int perm\[512] =\n \{\n 151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,\n 8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,\n 35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,\n 134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,\n 55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208, 89,\n 18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,\n 250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,\n 189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,\n 172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,\n 228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,\n 107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,\n 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180,\n\n 151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,\n 8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,\n 35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,\n 134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,\n 55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208, 89,\n 18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,\n 250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,\n 189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,\n 172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,\n 228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,\n 107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,\n 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180\n \};\n\n int grad4\[32]\[4]=\n \{\n \{0,1,1,1\}, \{0,1,1,-1\}, \{0,1,-1,1\}, \{0,1,-1,-1\},\n \{0,-1,1,1\}, \{0,-1,1,-1\}, \{0,-1,-1,1\}, \{0,-1,-1,-1\},\n \{1,0,1,1\}, \{1,0,1,-1\}, \{1,0,-1,1\}, \{1,0,-1,-1\},\n \{-1,0,1,1\}, \{-1,0,1,-1\}, \{-1,0,-1,1\}, \{-1,0,-1,-1\},\n \{1,1,0,1\}, \{1,1,0,-1\}, \{1,-1,0,1\}, \{1,-1,0,-1\},\n \{-1,1,0,1\}, \{-1,1,0,-1\}, \{-1,-1,0,1\}, \{-1,-1,0,-1\},\n \{1,1,1,0\}, \{1,1,-1,0\}, \{1,-1,1,0\}, \{1,-1,-1,0\},\n \{-1,1,1,0\}, \{-1,1,-1,0\}, \{-1,-1,1,0\}, \{-1,-1,-1,0\}\n \};\n float x = coord.x;\n float y = coord.y;\n float z = coord.z;\n float w = coord.w;\n float F4 = (sqrt(5.0f)-1.0)/4.0;\n float G4 = (5.0-sqrt(5.0f))/20.0;\n float n0, n1, n2, n3, n4;\n float s = (x + y + z + w) * F4;\n int i = fastfloor(x + s);\n int j = fastfloor(y + s);\n int k = fastfloor(z + s);\n int l = fastfloor(w + s);\n float t = (i + j + k + l) * G4;\n float X0 = i - t;\n float Y0 = j - t;\n float Z0 = k - t;\n float W0 = l - t;\n float x0 = x - X0;\n float y0 = y - Y0;\n float z0 = z - Z0;\n float w0 = w - W0;\n int c1 = (x0 > y0) ? 32 : 0;\n int c2 = (x0 > z0) ? 16 : 0;\n int c3 = (y0 > z0) ? 8 : 0;\n int c4 = (x0 > w0) ? 4 : 0;\n int c5 = (y0 > w0) ? 2 : 0;\n int c6 = (z0 > w0) ? 1 : 0;\n int c = c1 + c2 + c3 + c4 + c5 + c6;\n int i1, j1, k1, l1;\n int i2, j2, k2, l2;\n int i3, j3, k3, l3;\n i1 = simplex\[c]\[0]>=3 ? 1 : 0;\n j1 = simplex\[c]\[1]>=3 ? 1 : 0;\n k1 = simplex\[c]\[2]>=3 ? 1 : 0;\n l1 = simplex\[c]\[3]>=3 ? 1 : 0;\n i2 = simplex\[c]\[0]>=2 ? 1 : 0;\n j2 = simplex\[c]\[1]>=2 ? 1 : 0;\n k2 = simplex\[c]\[2]>=2 ? 1 : 0;\n l2 = simplex\[c]\[3]>=2 ? 1 : 0;\n i3 = simplex\[c]\[0]>=1 ? 1 : 0;\n j3 = simplex\[c]\[1]>=1 ? 1 : 0;\n k3 = simplex\[c]\[2]>=1 ? 1 : 0;\n l3 = simplex\[c]\[3]>=1 ? 1 : 0;\n float x1 = x0 - i1 + G4;\n float y1 = y0 - j1 + G4;\n float z1 = z0 - k1 + G4;\n float w1 = w0 - l1 + G4;\n float x2 = x0 - i2 + 2.0*G4;\n float y2 = y0 - j2 + 2.0*G4;\n float z2 = z0 - k2 + 2.0*G4;\n float w2 = w0 - l2 + 2.0*G4;\n float x3 = x0 - i3 + 3.0*G4;\n float y3 = y0 - j3 + 3.0*G4;\n float z3 = z0 - k3 + 3.0*G4;\n float w3 = w0 - l3 + 3.0*G4;\n float x4 = x0 - 1.0 + 4.0*G4;\n float y4 = y0 - 1.0 + 4.0*G4;\n float z4 = z0 - 1.0 + 4.0*G4;\n float w4 = w0 - 1.0 + 4.0*G4;\n int ii = i & 255;\n int jj = j & 255;\n int kk = k & 255;\n int ll = l & 255;\n int gi0 = perm\[ii+perm\[jj+perm\[kk+perm\[ll]]]] % 32;\n int gi1 = perm\[ii+i1+perm\[jj+j1+perm\[kk+k1+perm\[ll+l1]]]] % 32;\n int gi2 = perm\[ii+i2+perm\[jj+j2+perm\[kk+k2+perm\[ll+l2]]]] % 32;\n int gi3 = perm\[ii+i3+perm\[jj+j3+perm\[kk+k3+perm\[ll+l3]]]] % 32;\n int gi4 = perm\[ii+1+perm\[jj+1+perm\[kk+1+perm\[ll+1]]]] % 32;\n\n float t0 = 0.6 - x0*x0 - y0*y0 - z0*z0 - w0*w0;\n\n if(t0<0) \{\n n0 = 0.0;\n \}\n else\n \{\n t0 *= t0;\n n0 = t0 * t0 * dot(float4(grad4\[gi0]\[0],grad4\[gi0]\[2],grad4\[gi0]\[3],grad4\[gi0]\[3]), float4(x0, y0, z0, w0));\n \}\n\n float t1 = 0.6 - x1*x1 - y1*y1 - z1*z1 - w1*w1;\n\n if(t1<0) \{\n n1 = 0.0;\n \}\n else \{\n t1 *= t1;\n n1 = t1 * t1 * dot(float4(grad4\[gi1]\[0],grad4\[gi1]\[2],grad4\[gi1]\[3],grad4\[gi1]\[3]), float4(x1, y1, z1, w1));\n \}\n\n float t2 = 0.6 - x2*x2 - y2*y2 - z2*z2 - w2*w2;\n\n if(t2<0) \{\n n2 = 0.0;\n \}\n else \{\n t2 *= t2;\n n2 = t2 * t2 * dot(float4(grad4\[gi2]\[0],grad4\[gi2]\[2],grad4\[gi2]\[3],grad4\[gi2]\[3]), float4(x2, y2, z2, w2));\n \}\n\n float t3 = 0.6 - x3*x3 - y3*y3 - z3*z3 - w3*w3;\n\n if(t3<0) \{\n n3 = 0.0;\n \}\n else \{\n t3 *= t3;\n n3 = t3 * t3 * dot(float4(grad4\[gi3]\[0],grad4\[gi3]\[2],grad4\[gi3]\[3],grad4\[gi3]\[3]), float4(x3, y3, z3, w3));\n \}\n\n float t4 = 0.6 - x4*x4 - y4*y4 - z4*z4 - w4*w4;\n\n if(t4<0) \{\n n4 = 0.0;\n \}\n else \{\n t4 *= t4;\n n4 = t4 * t4 * dot(float4(grad4\[gi4]\[0],grad4\[gi4]\[2],grad4\[gi4]\[3],grad4\[gi4]\[3]), float4(x4, y4, z4, w4));\n \}\n return 27.0 * (n0 + n1 + n2 + n3 + n4);\n\}\n\ninline float fBm_4d(const float octaves, const float lacunarity, const float gain, const float4 coord, float amplitude)\n\{\n float total = 0;\n float4 frequency = coord;\n for( int i=0; i < octaves; i++ ) \{\n total += (float)raw_noise_4d(frequency) * amplitude;\n frequency *= lacunarity;\n amplitude *= gain;\n \}\n return float(total)*0.5f+0.5f;\n\}\n\ninline float turbulence_4d(const float octaves, const float lacunarity, const float gain, const float4 coord, float amplitude)\n\{\n float total = 0;\n float4 frequency = coord;\n for( int i=0; i < octaves; i++ ) \{\n total += fabs((float)raw_noise_4d(frequency)) * amplitude;\n frequency *= lacunarity;\n amplitude *= gain;\n \}\n return float(total);\n\}\n\nkernel Noise4D : ImageComputationKernel\n\{\n Image src;\n Image dst;\nparam:\n int octaves;\n float lacunarity;\n float amplitude;\n float gain;\n int mode;\n\n void define() \{\n defineParam(octaves, \"octaves\", 8);\n defineParam(lacunarity, \"lacunarity\", 2.0f);\n defineParam(amplitude, \"amplitude\", 0.6f);\n defineParam(gain, \"gain\", 0.5f);\n \}\n void process() \{\n float sample;\n if (mode == 0)\{\n sample = (float)fBm_4d(float(octaves),lacunarity,gain,src(), amplitude);\n \} else \{\n sample = (float)turbulence_4d(float(octaves),lacunarity,gain,src(), amplitude);\n \}\n dst() = float4(sample,sample,sample,sample);\n\}\n\};" rebuild "" Noise4D_octaves 5 Noise4D_amplitude 0.5 Noise4D_mode 1 rebuild_finalise "" name BlinkScript2 xpos -998 ypos -110 } Multiply { channels rgba value {{parent.brighness_noise*5}} name Multiply4 xpos -998 ypos -72 } Dot { name Dot12 tile_color 0x7aa9ff00 xpos -964 ypos -6 } push $N1e84fdd0 Dot { name Dot11 tile_color 0xa57aaa00 xpos -1083 ypos -234 } Grade { white 0 add {{1-parent.falloff}} white_clamp true unpremult -rgba.alpha name Grade2 xpos -1117 ypos -162 } Ramp { p0 {{width} 0} p1 {0 0} name Ramp2 xpos -1117 ypos -115 } Merge2 { inputs 2 operation multiply mix {{parent.brighness_noise}} name Merge2 xpos -1117 ypos -10 } Merge2 { inputs 2 operation multiply mix {{parent.taper}} name Merge3 xpos -1117 ypos 54 } Multiply { channels rgba value {{parent.color} {parent.color} {parent.color} 1} name Multiply5 xpos -1117 ypos 95 } add_layer {pos pos.red pos.green pos.blue pos.alpha} Copy { inputs 2 from0 rgba.red to0 pos.red from1 rgba.green to1 pos.green from2 rgba.blue to2 pos.blue from3 rgba.alpha to3 pos.alpha name Copy1 xpos -1117 ypos 152 } Shuffle { alpha white name Shuffle4 xpos -1117 ypos 237 } Dot { name Dot6 tile_color 0x9e3c6300 xpos -1083 ypos 313 } Output { name Output1 xpos -1117 ypos 353 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_LineTool.gizmo ================================================ Group { name LineTool tile_color 0xc4f8cff note_font "Verdana Bold Bold Bold" note_font_color 0xffd199ff selected true addUserKnob {20 line l Line} addUserKnob {41 from l From T Parameters.from} addUserKnob {41 to l To T Parameters.to} addUserKnob {26 ""} addUserKnob {41 strokeWidth l Width T Parameters.strokeWidth} addUserKnob {41 color l Color T Parameters.color} addUserKnob {26 ""} addUserKnob {41 subsample l Subsample T Parameters.subsample} addUserKnob {41 replace l "Output Line Only" T Parameters.replace} addUserKnob {26 ""} addUserKnob {20 infoTab} addUserKnob {26 info l Info T "\tName:......mcp_Line\n\tVersion:....1.1.0\n\tAuthor:.....Fredrik Brännbacka\n\tEmail:.......fredrik@madcrew.se\n\tCompany:..Mad Crew\n\tWeb:........www.madcrew.se\n"} } Constant { inputs 0 color {{Parameters.color} {Parameters.color} {Parameters.color} {Parameters.color}} format "512 512 0 0 512 512 1 square_512" name LineSolid xpos 462 ypos 130 } Reformat { type "to box" box_width {{(Parameters.subsample+1)*50}} box_height {{"sqrt(pow((Parameters.to.x-Parameters.from.x), 2)+pow((Parameters.to.y-Parameters.from.y), 2))*(Parameters.subsample+1)"}} box_fixed true resize distort filter Impulse black_outside true pbb true name ReformatLine xpos 462 ypos 202 } Transform { translate {{(Parameters.subsample+1)*-25} 0} scale {1 1} filter Impulse name CenterPivot xpos 462 ypos 228 } Transform { translate {{Parameters.from*(Parameters.subsample+1)} {Parameters.from*(Parameters.subsample+1)}} rotate {{"degrees(atan2((Parameters.to.y-Parameters.from.y), (Parameters.to.x-Parameters.from.x)))-90"}} scale {{Parameters.strokeWidth/50} 1} filter Impulse name TransformLine xpos 462 ypos 248 } Crop { box {0 0 {Parameters.width*(Parameters.subsample+1)} {Parameters.height*(Parameters.subsample+1)}} reformat true crop false name MatchBBox xpos 462 ypos 274 } Reformat { type scale scale {{1/(Parameters.subsample+1)}} name Downsample xpos 462 ypos 298 } set N5358e010 [stack 0] Dot { name Dot1 xpos 496 ypos 352 } push $N5358e010 Input { inputs 0 name BG xpos 320 ypos 93 } Constant { inputs 0 name Constant1 xpos 187 ypos 106 } Switch { inputs 2 which {{(BG.bbox.width*BG.bbox.height)>1}} name ForceBackground xpos 320 ypos 130 } NoOp { name Parameters xpos 320 ypos 156 addUserKnob {20 line l Line} addUserKnob {3 test} test {{subsample}} addUserKnob {4 subsample l Subsample M {1x1 2x2 3x3}} addUserKnob {19 color l Color} color {0.04929798841 0.308957994 0.547755599 1} addUserKnob {6 color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 color_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 strokeWidth l Width R 0 10} strokeWidth 2 addUserKnob {12 from l From} from {1088 462} addUserKnob {12 to l To} to {1312.400024 560.2000122} addUserKnob {6 replace l "Output Line Only" +STARTLINE} replace true } Merge2 { inputs 2 bbox B name MergeLine xpos 320 ypos 298 } Switch { inputs 2 which {{Parameters.replace}} name Switch1 xpos 320 ypos 349 } Output { name OUT xpos 320 ypos 449 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Looper.gizmo ================================================ Group { name Looper inputs 2 knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nclipendtrue = str(n\['avoidclipend'].value()) == 'Before First Frame '\nloopframes = str(int(n\['toframe'].value()-n\['fromframe'].value()+1))\nloopfirst = str(int(n\['fromframe'].value()-(n\['toframe'].value()-n\['fromframe'].value())+(clipendtrue*(n\['toframe'].value()-n\['fromframe'].value()))))\nlooplast = str(int(n\['toframe'].value()+(clipendtrue*(n\['toframe'].value()-n\['fromframe'].value()))))\n\n\ntotal = 'Loop length: ' + '' + loopframes\nn\['totalframes'].setValue(str(total))\n\nloopfr = 'Frame range in use: ' + '' + loopfirst + ' - ' + looplast\nn\['loopframerange'].setValue(str(loopfr))\n\n\nif k.name() == \"looptype\":\n channelsOn = k.value() != 'Dissolve (Fast - Simple)';\n n.knobs()\['retimedChannels'].setVisible(channelsOn)\n\n channelsOn = k.value() != 'Morph (Slower - Complex) ';\n n.knobs()\['channels'].setVisible(channelsOn)\n \nif n.input(1) ==None :\n n\['vectoroutput'].setEnabled(False)\nelse:\n n\['vectoroutput'].setEnabled(True)" tile_color 0x80702ff note_font Verdana note_font_size 12 note_font_color 0xb79d63ff addUserKnob {20 Looper} addUserKnob {41 channels l Channels T Dissolve1.channels} addUserKnob {41 retimedChannels l Channels +HIDDEN T Kronos3.retimedChannels} addUserKnob {26 _____________________ l "" +STARTLINE} addUserKnob {68 looptype l "Loop Method" t "\nDissolve: Uses a simple Dissolve node to dissolve the input clip between an offset version of the same clip. The offset amount is determined by the number of frames looped. Works great when looping clips with constant/similar movement like rain or snow stock footage.\n\nMorph: Similar to the Dissolve method but instead uses a Kronos node to generate a morphed loop.\n\nFgMatte input: An optional matte of the foreground can be used which may improve Kronos's motion estimation.\n" M {"Dissolve (Fast - Simple)" "Morph (Slower - Complex) " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""}} addUserKnob {4 avoidclipend l " Avoid Clip End " t "Negatively offsets the input clip to avoid looping unexisting frames before loop's first frame.\n\nTurning this off will avoid frames after loop's last frame." -STARTLINE M {Off "Before First Frame " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""}} avoidclipend "Before First Frame " addUserKnob {20 vectorgroup l "Vector Generator Settings" n 1} vectorgroup 0 addUserKnob {41 useGPUIfAvailable l "Use GPU if available" T Kronos3.useGPUIfAvailable} addUserKnob {41 vectorDetailReg l "Vector Detail" T Kronos3.vectorDetailReg} addUserKnob {41 strengthReg l Strength T Kronos3.strengthReg} addUserKnob {41 resampleType l Resampling T Kronos3.resampleType} addUserKnob {4 vectoroutput l Output +DISABLED M {Result Matte Foreground "Background "}} addUserKnob {20 endGroup n -1} addUserKnob {26 ___________________ l "" +STARTLINE T " "} addUserKnob {3 fromframe l "Loop from"} fromframe 1001 addUserKnob {3 toframe l " to " -STARTLINE} toframe 1040 addUserKnob {26 totalframes l " " -STARTLINE T "Loop length: 40"} addUserKnob {26 loopframerange l " " t "Input's frame range used in the loop" -STARTLINE T "Frame range in use: 1001 - 1079"} addUserKnob {7 blendlength l "Blend Length" t "How long the blend / transition time will be inbetween the specified loop range.\n\nExample:\n\nLoop from 0 to 40\nBlend Length 1 = Blends from frame 0 to 40\nBlend Length 0.5 = Blends from frame 10 to 30" R 0.1 1} blendlength 1 addUserKnob {26 _______ l " " T " "} addUserKnob {26 credits_ l " " T "Looper v1.2   │   B Y   D A M I A N   B I N D E R"} } Input { inputs 0 name FgMatte xpos 1043 number 1 } TimeOffset { time_offset {{"parent.fromframe - parent.toframe"}} time "" name TimeOffset2 xpos 1043 ypos 89 disable {{clamp(!parent.avoidclipend)}} } set N5239fe00 [stack 0] Input { inputs 0 name Source xpos 764 ypos -234 } TimeOffset { time_offset {{"parent.fromframe - parent.toframe"}} time "" name TimeOffset1 xpos 764 ypos -157 disable {{clamp(!parent.avoidclipend)}} } Dot { name Dot5 xpos 798 ypos -73 } set N5247c800 [stack 0] Dot { name Dot4 xpos 1256 ypos -73 } add_layer {fake_alpha fake_alpha.alpha} Copy { inputs 2 from0 rgba.alpha to0 fake_alpha.alpha name Copy1 xpos 1222 ypos 83 disable {{"!\[exists parent.input1]"}} } Retime { input.first {{parent.fromframe}} input.first_lock true input.last {{parent.toframe}} input.last_lock true output.first {{parent.fromframe}} output.first_lock true output.last {{(parent.toframe*2-parent.fromframe)+1}} output.last_lock true speed 0.5 filter nearest time "" name Retime3 xpos 1222 ypos 248 } push $N5239fe00 TimeOffset { time_offset {{"-(parent.fromframe - parent.toframe)+1"}} time "" name TimeOffset5 xpos 876 ypos 89 } push $N5247c800 TimeOffset { time_offset {{"-(parent.fromframe - parent.toframe)+1"}} time "" name TimeOffset4 xpos 764 ypos 89 } Dot { name Dot2 xpos 798 ypos 253 } set N524af800 [stack 0] Copy { inputs 2 from0 rgba.alpha to0 fake_alpha.alpha name Copy3 xpos 876 ypos 243 disable {{"!\[exists parent.input1]"}} } Retime { input.first {{parent.fromframe}} input.first_lock true input.last {{parent.toframe}} input.last_lock true output.first {{parent.fromframe}} output.first_lock true output.last {{(parent.toframe*2-parent.fromframe)+1}} output.last_lock true speed 0.5 filter nearest time "" name Retime4 xpos 1030 ypos 249 } Switch { inputs 2 which {{"(frame - (1 + parent.fromframe))%2"}} name Switch4 xpos 1125 ypos 360 } set N524aec00 [stack 0] Dot { name Dot6 xpos 1288 ypos 364 } Shuffle { in fake_alpha out alpha name Shuffle1 label "\[value in]" xpos 1254 ypos 457 } push $N524aec00 Kronos { inputs 2 timing2 Frame timingFrame2 {{"((frame-parent.fromframe)*2+parent.fromframe) + clamp((-((parent.fromframe-((parent.toframe+1-parent.fromframe)/2)*(parent.blendlength-1)) - frame)) / (-((parent.fromframe-((parent.toframe+1-parent.fromframe)/2)*(parent.blendlength-1)) - (parent.toframe+1+(((parent.toframe+1-parent.fromframe)/2)*(parent.blendlength-1))))))"}} showLegacyMode false motionEstimation Regularized vectorDetailReg 0.4 strengthReg 1.4 output {{parent.vectoroutput}} matteChannel {{useMatte==1?5:0}} legacyModeNuke9 false vectorSpacing 40 name Kronos3 xpos 1125 ypos 457 addUserKnob {20 User} addUserKnob {6 useMatte l "use matte" +STARTLINE} useMatte {{"\[exists parent.input1]"}} } Remove { channels fake_alpha name Remove1 xpos 1125 ypos 552 } push $N524af800 push $N5247c800 Dot { name Dot1 xpos 352 ypos -73 } Dissolve { inputs 2 channels rgba which {{"clamp((-((parent.fromframe-((parent.toframe+1-parent.fromframe)/2)*(parent.blendlength-1)) - frame)) / (-((parent.fromframe-((parent.toframe+1-parent.fromframe)/2)*(parent.blendlength-1)) - (parent.toframe+1+(((parent.toframe+1-parent.fromframe)/2)*(parent.blendlength-1))))))"}} name Dissolve1 xpos 318 ypos 249 } Dot { name Dot3 xpos 352 ypos 544 } Switch { inputs 2 which {{parent.looptype}} name Switch2 xpos 763 ypos 660 } TimeClip { time "" first {{parent.fromframe}} before loop last {{parent.toframe}} after loop origfirst 0 origlast 0 origset true name TimeClip1 xpos 763 ypos 753 } Output { name Output1 xpos 763 ypos 842 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_LumaGrain.gizmo ================================================ Group { name LumaGrain help "L_Grain_v04\t\t\nAdded functionality to Nuke's default grain node.\n \n\"High” - allows control to reduce the grain being added to the brighter parts of the image. \n\n\"Softness” - will blur the grain being added to the image. \n\n\"Saturation\" and \"Luminance” - sliders allow you to reduce either of these values from your grain. \n\n(For any questions, comments or suggestions please email gizmos@luma-pictures.com)" note_font "Bitstream Vera Sans" selected true mapsize {0.15 0.15} addUserKnob {20 L_Grain} addUserKnob {26 "" l Size} addUserKnob {7 rSize R 0 3} rSize 1.16 addUserKnob {7 gSize R 0 3} gSize 1.48 addUserKnob {7 bSize R 0 3} bSize 1.88 addUserKnob {26 "" l Blacks} addUserKnob {7 rBlack} rBlack 0.11 addUserKnob {7 gBlack} gBlack 0.125 addUserKnob {7 bBlack} bBlack 0.19 addUserKnob {20 Minimum n 1} Minimum 0 addUserKnob {7 rMinimum} addUserKnob {7 gMinimum} addUserKnob {7 bMinimum} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 "" l Mids} addUserKnob {7 rMid} rMid 0.575 addUserKnob {7 gMid} gMid 0.63 addUserKnob {7 bMid} bMid 0.915 addUserKnob {20 Highs n 1} Highs 0 addUserKnob {26 "" l Highs} addUserKnob {7 rHigh} rHigh 0.93 addUserKnob {7 gHigh} gHigh 0.945 addUserKnob {7 bHigh} bHigh 0.995 addUserKnob {20 endGroup_5 l endGroup n -1} addUserKnob {20 Irregularity n 1} Irregularity 0 addUserKnob {7 rIrregularity} rIrregularity 0.73 addUserKnob {7 gIrregularity} gIrregularity 0.73 addUserKnob {7 bIrregularity} bIrregularity 0.73 addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {20 Softness n 1} Softness 0 addUserKnob {7 rSoftness R 0 2} addUserKnob {7 gSoftness R 0 2} addUserKnob {7 bSoftness R 0 2} addUserKnob {20 endGroup_3 l endGroup n -1} addUserKnob {20 Other n 1} Other 0 addUserKnob {7 GrainSaturation} GrainSaturation 1 addUserKnob {7 GrainLuminance} GrainLuminance 1 addUserKnob {20 endGroup_4 l endGroup n -1} addUserKnob {7 OverallMix} OverallMix 1 addUserKnob {6 alphaMask l Mask +STARTLINE} addUserKnob {6 Invert -STARTLINE} addUserKnob {20 MaskGrade n 1} MaskGrade 0 addUserKnob {41 gamma T L_Grain_MaskGradeNode.gamma} addUserKnob {41 add l offset T L_Grain_MaskGradeNode.add} addUserKnob {41 multiply T L_Grain_MaskGradeNode.multiply} addUserKnob {41 white l gain T L_Grain_MaskGradeNode.white} addUserKnob {41 black l lift T L_Grain_MaskGradeNode.black} addUserKnob {41 whitepoint T L_Grain_MaskGradeNode.whitepoint} addUserKnob {41 blackpoint T L_Grain_MaskGradeNode.blackpoint} addUserKnob {41 black_clamp l "black clamp" T L_Grain_MaskGradeNode.black_clamp} addUserKnob {41 white_clamp l "white clamp" -STARTLINE T L_Grain_MaskGradeNode.white_clamp} addUserKnob {20 endGroup_6 l endGroup n -1} addUserKnob {26 ""} addUserKnob {22 Button l " Luma Pictures " T "import os\nimport sys\nimport subprocess\n\ndef _run(cmd, wait=False):\n opener = subprocess.Popen(cmd)\n if wait:\n opener.wait()\n return opener.pid\n\ndef _open(url, wait=False):\n if sys.platform == \"darwin\":\n cmd = (\"open\", url)\n elif hasattr(os, \"startfile\"):\n os.startfile(url)\n return None\n elif any(k in os.environ for k in (\"KDE_FULL_SESSION\", \"KDE_MULTIHEAD\", \"GNOME_DESKTOP_SESSION_ID\", \"GNOME_KEYRING_SOCKET\")):\n cmd = (\"xdg-open\", url)\n else:\n raise OSError(\"Desktop not supported.\")\n\n return _run(cmd, wait)\n\n_open(\"https://www.lumapictures.com/\")" +STARTLINE} } Input { inputs 0 name mask xpos -372 ypos -1067 number 1 } Input { inputs 0 name input xpos -152 ypos -1067 } set N33c1eab0 [stack 0] Switch { inputs 2 which {{"!\[catch \{node parent.input1\}]" i}} name L_Grain_MaskSwitch selected true xpos -372 ypos -923 } Dot { name Dot3 xpos -336 ypos 354 } Grade { channels alpha white_clamp true name L_Grain_MaskGradeNode xpos -262 ypos 342 } push $N33c1eab0 NoOp { name L_Grain_NoOp1 xpos -42 ypos -971 } set N33c1f440 [stack 0] Dot { name Dot6 xpos -116 ypos -966 } Dot { name Dot4 xpos -116 ypos 78 } set N33c1faa0 [stack 0] push $N33c1f440 Shuffle { alpha green name L_Grain_Shuffle3 xpos 398 ypos -911 } Grade { channels alpha blackpoint 0.13 whitepoint 0.58 add 0.045 white_clamp true name L_Grain_Grade3 xpos 398 ypos -822 } set N33c20100 [stack 0] push $N33c20100 push $N33c1f440 Grain2 { name L_Grain_Grain2_1 label "Kodak 5248" xpos -104 ypos -714 seed {{"\[string match \[view] left] ==1?(frame*333):(frame*666)" i}} red_size {{parent.rSize i}} green_size {{parent.gSize i}} blue_size {{parent.bSize i}} red_i {{parent.rIrregularity i}} green_i {{parent.gIrregularity i}} blue_i {{parent.bIrregularity i}} red_m {{parent.rMid/2 i}} green_m {{parent.gMid/2 i}} blue_m {{parent.bMid/2 i}} black {{parent.rBlack/10 i} {parent.gBlack/10 i} {parent.bBlack/10 i}} minimum {{parent.rMinimum/100 i} {parent.gMinimum/100 i} {parent.bMinimum/100 i}} maskgrain false maskinvert true } set N26e17a30 [stack 0] Keymix { inputs 3 mix {{abs(1-parent.bHigh) i}} name L_Grain_Keymix4 xpos 398 ypos -714 } Shuffle { alpha white name L_Grain_Shuffle7 xpos 398 ypos -671 } push $N33c1f440 Shuffle { alpha white name L_Grain_Shuffle5 xpos -42 ypos -587 } set N33c220e0 [stack 0] Merge2 { inputs 2 operation minus name L_Grain_Merge3 label "Diff Key" xpos 398 ypos -594 } Defocus { defocus {{parent.bSoftness*.2 i}} ratio {{pixel_aspect i}} method "full precision" name L_Grain_Defocus4 xpos 398 ypos -546 } push $N33c1f440 Merge2 { inputs 2 name L_Grain_Merge4 label Re-Apply xpos 398 ypos -474 } push $N33c1f440 Shuffle { alpha green name L_Grain_Shuffle2 xpos 288 ypos -911 } Grade { channels alpha blackpoint 0.13 whitepoint 0.58 add 0.045 white_clamp true name L_Grain_Grade2 xpos 288 ypos -822 } set N33c230d0 [stack 0] push $N33c230d0 push $N26e17a30 Keymix { inputs 3 mix {{abs(1-parent.gHigh) i}} name L_Grain_Keymix3 xpos 288 ypos -714 } Shuffle { alpha white name L_Grain_Shuffle6 xpos 288 ypos -671 } push $N33c220e0 Merge2 { inputs 2 operation minus name L_Grain_Merge1 label "Diff Key" xpos 288 ypos -594 } Defocus { defocus {{parent.gSoftness*.2 i}} ratio {{pixel_aspect i}} method "full precision" name L_Grain_Defocus3 xpos 288 ypos -546 } push $N33c1f440 Merge2 { inputs 2 name L_Grain_Merge2 label Re-Apply xpos 288 ypos -474 } push $N33c1f440 Shuffle { alpha red name L_Grain_Shuffle1 xpos 178 ypos -911 } Grade { channels alpha blackpoint 0.13 whitepoint 0.58 add 0.045 white_clamp true name L_Grain_Grade1 xpos 178 ypos -822 } set N33c24720 [stack 0] push $N33c24720 push $N26e17a30 Keymix { inputs 3 mix {{abs(1-parent.rHigh) i}} name L_Grain_Keymix2 xpos 178 ypos -714 } Shuffle { alpha white name L_Grain_Shuffle4 xpos 178 ypos -671 } push $N33c220e0 Merge2 { inputs 2 operation minus name L_Grain_Merge12 label "Diff Key" xpos 178 ypos -594 } Defocus { defocus {{parent.rSoftness*.2 i}} ratio {{pixel_aspect i}} method "full precision" name L_Grain_Defocus2 xpos 178 ypos -546 } push $N33c1f440 Dot { name Dot5 xpos 104 ypos -462 } Merge2 { inputs 2 name L_Grain_Merge13 label Re-Apply xpos 178 ypos -474 } Copy { inputs 2 from0 rgba.green to0 rgba.green name L_Grain_Copy1 xpos 178 ypos -402 } Copy { inputs 2 from0 rgba.blue to0 rgba.blue name L_Grain_Copy2 xpos 288 ypos -342 } set N33c260a0 [stack 0] push $N33c260a0 Saturation { saturation 0 name L_Grain_Saturation1 xpos 398 ypos -251 } push $N33c1f440 Expression { expr0 (1/(r*.3+g*.59+b*.11))*r expr1 (1/(r*.3+g*.59+b*.11))*g expr2 (1/(r*.3+g*.59+b*.11))*b name L_Grain_Expression1 xpos 550 ypos -272 } Merge2 { inputs 2 operation multiply name L_Grain_Multiply4 xpos 475 ypos -212 } Dissolve { inputs 2 which {{parent.GrainSaturation i}} name L_Grain_Dissolve_Grain_Saturation xpos 288 ypos -174 } set N33c26d60 [stack 0] push $N33c1f440 Saturation { saturation 0 name L_Grain_Saturation2 xpos 508 ypos -71 } push $N33c26d60 Expression { expr0 (1/(r*.3+g*.59+b*.11))*r expr1 (1/(r*.3+g*.59+b*.11))*g expr2 (1/(r*.3+g*.59+b*.11))*b name L_Grain_Expression2 xpos 336 ypos -83 } Merge2 { inputs 2 operation multiply name L_Grain_Multiply1 xpos 368 ypos -32 } Dissolve { inputs 2 which {{parent.GrainLuminance i}} name L_Grain_Dissolve_Grain_Luminance xpos 288 ypos 30 } push $N33c1faa0 Dissolve { inputs 2 channels rgb which {{parent.OverallMix i}} name L_Grain_Dissolve_Overall_Mix xpos 116 ypos 265 } Keymix { inputs 3 invertMask {{-Invert+1 i}} mix {{parent.alphaMask i}} name L_Grain_Keymix1 xpos -42 ypos 342 } push $N33c1eab0 Dot { name Dot1 xpos 764 ypos -1062 } Dot { name Dot2 xpos 764 ypos 450 } ShuffleCopy { inputs 2 red red green green blue blue name L_Grain_ChannelsPassThrough xpos -42 ypos 445 } Output { name Output1 xpos -50 ypos 608 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_LumaKeyer.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { name LumaKeyer onCreate "n = nuke.thisNode()\nn.knob('blackpoint').setRange(0, 1)\nn.knob('whitepoint').setRange(0, 1)" tile_color 0x421010ff note_font "Bitstream Vera Sans Bold Bold" selected true addUserKnob {20 User l lumaKeyer} addUserKnob {4 output M {Alpha RGBA}} addUserKnob {41 blackpoint T picker.blackpoint} addUserKnob {41 whitepoint T picker.whitepoint} addUserKnob {6 invert +STARTLINE} addUserKnob {4 smoothing l Smoothing: M {None Smooth Smooth0 Smooth1 ""}} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge1.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge1.fringe} addUserKnob {41 mix T Merge1.mix} addUserKnob {20 info} addUserKnob {22 btn l DerekVFX.ca T "import os\nimport sys\n\ntry:\n import subprocess\n def _run(cmd, shell, wait):\n opener = subprocess.Popen(cmd, shell=shell)\n if wait:\n opener.wait()\n return opener.pid\nexcept ImportError:\n import popen2\n def _run(cmd, shell, wait):\n opener = popen2.Popen3(cmd)\n if wait:\n opener.wait()\n return opener.pid\n\ndef _open(url, wait=0):\n if sys.platform == \"darwin\":\n cmd = \[\"open\", url]\n elif hasattr(os, \"startfile\"):\n return os.startfile(url)\n elif os.environ.has_key(\"KDE_FULL_SESSION\") or os.environ.has_key(\"KDE_MULTIHEAD\") or \\\n os.environ.has_key(\"GNOME_DESKTOP_SESSION_ID\") or os.environ.has_key(\"GNOME_KEYRING_SOCKET\"):\n cmd = \[\"xdg-open\", url]\n else:\n raise OSError, \"Desktop not supported.\"\n\n return _run(cmd, 0, wait)\n\n_open('http://www.derekvfx.ca/')" +STARTLINE} addUserKnob {26 versionUpdate l "" -STARTLINE T " adjusted by Tony Lyons "} } Input { inputs 0 name Input1 xpos 57 ypos -347 } set N244c6660 [stack 0] Colorspace { colorspace_out HSL name Colorspace1 xpos -181 ypos -181 } set N24517b10 [stack 0] Shuffle { red blue green blue alpha blue name Shuffle1 tile_color 0x3d3f8e00 xpos -336 ypos -181 } Grade { name picker xpos -336 ypos -139 } Input { inputs 0 name Inputmask xpos 231 ypos 446 number 1 } push $N244c6660 Dot { name Dot5 note_font_size 41 xpos 91 ypos 284 } set N24532110 [stack 0] push $N24517b10 Expression { expr3 smoothstep(parent.picker.blackpoint,parent.picker.whitepoint,b) name Expression1 xpos -181 ypos -138 } Dot { name Dot1 note_font_size 41 xpos -147 ypos -58 } set N24542110 [stack 0] ColorLookup { channels {{{parent.ColorLookup_smooth.channels}}} lut {master {curve L 0 C k 1 s0} red {} green {} blue {} alpha {}} name ColorLookup_smooth1 xpos -69 ypos 33 } push $N24542110 ColorLookup { channels {{{parent.ColorLookup_smooth.channels}}} lut {master {curve L 0 s0 1} red {} green {} blue {} alpha {}} name ColorLookup_smooth0 xpos -181 ypos 32 } push $N24542110 ColorLookup { lut {master {curve L 0 s0 C k 1 s0} red {} green {} blue {} alpha {}} name ColorLookup_smooth xpos -293 ypos 32 } push $N24542110 Dot { name Dot2 note_font_size 41 xpos -345 ypos -52 } Dot { name Dot3 note_font_size 41 xpos -345 ypos 131 } Switch { inputs 4 which {{parent.smoothing}} name Switch1 label "\[value which]" xpos -181 ypos 121 } Expression { expr3 1-a name Expression2 xpos -181 ypos 191 disable {{"parent.invert == 0"}} } Merge2 { inputs 2 operation copy Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -181 ypos 280 } Shuffle { red alpha green alpha blue alpha name Shuffle2 tile_color 0xffffffff xpos -181 ypos 328 disable {{!parent.output}} } Dot { name Dot4 note_font_size 41 xpos -147 ypos 450 } push $N24532110 Shuffle { alpha black name Shuffle3 label "\[value in]" xpos 57 ypos 331 } Shuffle { red black green black blue black alpha black name Shuffle4 label "\[value in]" selected true xpos 57 ypos 369 disable {{!parent.output}} } Merge2 { inputs 2+1 operation copy also_merge rgba name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 57 ypos 446 } set N2457f1d0 [stack 0] Output { name Output1 xpos 57 ypos 602 } push $N2457f1d0 end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_LumaToVector3.gizmo ================================================ Group { name LumaToVector3_ help "Performs a Sobel filter on the Luminance channel of an image to extract an approximation of a Normal map.\n\nFor a mathematical conversion of a displacement map to normals, do not use Details separation." addUserKnob {20 luma_to_normals l "Luma to Normals"} addUserKnob {26 div_pre l Pre-Process} addUserKnob {7 blur t "High quality blur, may be slower than a regular blur node but will avoid loss of quality in the vectors." R 0 10} addUserKnob {7 gain l "height (gain)" t "Increasing this value would result in vectors as per a stronger displacement." R 0 10} gain 1 addUserKnob {26 div_details l "Details Separation"} addUserKnob {7 size t "Bigger sizes will separate high and low frequencies more." R 0 100} addUserKnob {7 details_weight t "How much the details affect the final output"} addUserKnob {26 div_out l Output} addUserKnob {6 zerotoone l "Use 0-1 range" t "Pack the vectors in a 0 to 1 range, so that it can be exported as an 8bit image. May cause clamped vectors, make sure to also use normalize if exporting a normal map to avoid clamped values." +STARTLINE} addUserKnob {6 normalize t "Normal maps should generally be represented with a vector magnitude of 1.\nTurning on normalization will scale all vectors to ensure they all have a magnitude of 1.\n\nYou may want to disable it for more interesting effects when generating normals for a fake refraction through an iDistort, where having vectors of different length adds depth." -STARTLINE} normalize true addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name Input1 xpos -576 ypos -320 } Saturation { saturation 0 name Saturation1 xpos -576 ypos -264 } Blur { size {{parent.blur}} quality {{"int(max(parent.blur, 15))"}} name Blur2 xpos -576 ypos -223 } Multiply { value {{parent.gain}} name Multiply1 xpos -576 ypos -185 } set N8fdf0400 [stack 0] Blur { size {{parent.size}} name Blur1 xpos -576 ypos -134 } Dot { name Dot2 xpos -542 ypos -45 } set Nc5a5fc00 [stack 0] Matrix { matrix { {1 0 -1} {2 0 -2} {1 0 -1} } name Matrix1 xpos -576 ypos 38 } push $Nc5a5fc00 Dot { name Dot3 xpos -432 ypos -45 } set Nc5a5f400 [stack 0] Matrix { matrix { {-1 -2 -1} {0 0 0} {1 2 1} } name Matrix2 xpos -466 ypos 36 } Dot { name Dot4 xpos -432 ypos 92 } ShuffleCopy { inputs 2 red red blue black alpha black name ShuffleCopy1 xpos -575 ypos 88 } Multiply { value {{(1-parent.details_weight)*(parent.size/10+1)}} name Multiply2 xpos -577 ypos 128 } push $Nc5a5f400 push $N8fdf0400 Dot { name Dot1 xpos -319 ypos -175 } Merge2 { inputs 2 operation from name Merge1 xpos -353 ypos -49 } Dot { name Dot5 xpos -319 ypos -23 } set Nb4693800 [stack 0] Matrix { matrix { {1 0 -1} {2 0 -2} {1 0 -1} } name Matrix3 xpos -353 ypos 25 } push $Nb4693800 Dot { name Dot6 xpos -181 ypos -23 } Matrix { matrix { {-1 -2 -1} {0 0 0} {1 2 1} } name Matrix4 xpos -215 ypos 30 } Dot { name Dot7 xpos -181 ypos 87 } ShuffleCopy { inputs 2 red red blue black alpha black name ShuffleCopy2 xpos -353 ypos 83 } Multiply { value {{parent.details_weight}} name Multiply3 xpos -353 ypos 119 } Dot { name Dot8 xpos -319 ypos 188 } Merge2 { inputs 2 operation plus name Merge2 xpos -577 ypos 184 } Multiply { value 0.5 name Multiply4 xpos -577 ypos 229 disable {{!proxy}} } Expression { temp_name0 mag temp_expr0 sqrt(pow(r,2)+pow(g,2)+pow(b,2)) expr0 mag>1?r/mag:r expr1 mag>1?g/mag:g name Expression3 xpos -577 ypos 283 disable {{!parent.normalize}} } Expression { temp_name0 facing temp_expr0 sqrt(-pow(r,2)-pow(g,2)+1) expr2 isnan(facing)?0:facing name Expression2 xpos -577 ypos 322 } Remove { operation keep channels rgb name Remove1 xpos -577 ypos 354 } Grade { white 0.5 add 0.5 white_clamp true name Grade1 xpos -577 ypos 397 disable {{!parent.zerotoone}} } Output { name Output1 xpos -577 ypos 479 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_MECfiller.gizmo ================================================ Group { inputs 0 name MECfiller tile_color 0xff00ffff addUserKnob {20 User} addUserKnob {26 name_1 l "" +STARTLINE T "MECfiller v001"} addUserKnob {26 ""} addUserKnob {4 mode M {fast rough complex "" ""}} mode fast addUserKnob {12 center} addUserKnob {7 axismultiplier l "axis multiplier"} axismultiplier 0.1 addUserKnob {6 axismultipliercheck l "multiplier visualisation" +STARTLINE} addUserKnob {26 ""} addUserKnob {26 madeby l "" +STARTLINE T "Matthias Eckhardt\npoly-by-poly.com\n\n\nbased on Mads Hagbarth's FFfiller"} } StickyNote { inputs 0 name StickyNote4 label 1 note_font_size 110 xpos -2381 ypos 53 } StickyNote { inputs 0 name StickyNote5 label 2 note_font_size 110 xpos -2381 ypos 732 } StickyNote { inputs 0 name StickyNote6 label 3 note_font_size 110 xpos -2375 ypos 1376 } StickyNote { inputs 0 name StickyNote7 label 4 note_font_size 110 xpos -2363 ypos 2015 } StickyNote { inputs 0 name StickyNote8 label 5 note_font_size 110 xpos -2372 ypos 2637 } StickyNote { inputs 0 name StickyNote9 label 6 note_font_size 110 xpos -2385 ypos 3344 } StickyNote { inputs 0 name StickyNote10 label 7 note_font_size 110 xpos -2411 ypos 3988 } StickyNote { inputs 0 name StickyNote11 label 8 note_font_size 110 xpos -2421 ypos 4628 } StickyNote { inputs 0 name StickyNote12 label 9 note_font_size 110 xpos -2398 ypos 5337 } StickyNote { inputs 0 name StickyNote13 label 10 note_font_size 110 xpos -2393 ypos 6051 } StickyNote { inputs 0 name StickyNote14 label 11 note_font_size 110 xpos -2395 ypos 6753 } StickyNote { inputs 0 name StickyNote15 label 12 note_font_size 110 xpos -2400 ypos 7477 } StickyNote { inputs 0 name StickyNote16 label 13 note_font_size 110 xpos -2400 ypos 8201 } StickyNote { inputs 0 name StickyNote1 label complex note_font_size 100 xpos 272 ypos 8407 } Input { inputs 0 name Input1 xpos -2535 ypos -1597 } Dot { name Dot22 xpos -2501 ypos -1432 } set Nfa633c0 [stack 0] Dot { name Dot24 xpos -2501 ypos -1316 } set Nfa67de0 [stack 0] Dot { name Dot33 xpos -2501 ypos -1210 } set Nfa6c940 [stack 0] Dot { name Dot2 xpos -2501 ypos -1166 } set Nfa713c0 [stack 0] Dot { name Dot32 xpos -2501 ypos -1106 } set Nfa75e70 [stack 0] Dot { name Dot3 xpos -2501 ypos -1062 } set Nfa7a920 [stack 0] Dot { name Dot34 xpos -2501 ypos -988 } set Nfa7f340 [stack 0] Dot { name Dot4 xpos -2501 ypos -944 } set Nfa83d30 [stack 0] Dot { name Dot29 xpos -2501 ypos -882 } set Nfa88a00 [stack 0] Dot { name Dot5 xpos -2501 ypos -838 } set N161fbd80 [stack 0] Dot { name Dot204 xpos -2501 ypos -767 } set N16200900 [stack 0] Dot { name Dot7 xpos -2501 ypos -719 } set N162053b0 [stack 0] Dot { name Dot234 xpos -2501 ypos -660 } set N16209dd0 [stack 0] Dot { name Dot111 xpos -2501 ypos -612 } Expression { temp_name0 point temp_expr0 parent.center.x temp_name1 area temp_expr1 width/5 temp_name2 axismultiplier temp_expr2 parent.axismultiplier channel0 rgba expr0 x>(point-(area*axismultiplier)/2)&&x<(point+(area*axismultiplier)/2)?1:0 name Expression52 xpos -2425 ypos -616 } push $N16209dd0 Expression { channel0 rgba expr0 x>width*0.4&&x(point-(area*axismultiplier)/2)&&y<(point+(area*axismultiplier)/2)?1:0 name Expression49 xpos -2426 ypos -723 } push $N16200900 Expression { channel0 rgba expr0 y>height*0.4&&yparent.center.x&&ywidth/2&&yparent.center.x&&y>parent.center.y?1:0 channel1 {-rgba.red -rgba.green -rgba.blue none} name Expression2 xpos -2420 ypos -1066 } push $Nfa75e70 Expression { channel0 rgba expr0 x>width/2&&y>height/2?1:0 name Expression6 xpos -2422 ypos -1110 } Switch { inputs 2 which {{parent.center.x==0&&parent.center.y==0?0:1}} name Switch2 label "INPUT \[value which]" xpos -2260 ypos -1072 } push $Nfa713c0 Expression { channel0 rgba expr0 xparent.center.y?1:0 channel1 {-rgba.red -rgba.green -rgba.blue none} name Expression1 xpos -2421 ypos -1170 } push $Nfa6c940 Expression { channel0 rgba expr0 xheight/2?1:0 name Expression7 xpos -2423 ypos -1214 } Switch { inputs 2 which {{parent.center.x==0&&parent.center.y==0?0:1}} name Switch1 label "INPUT \[value which]" xpos -2255 ypos -1176 } push $Nfa67de0 Dot { name Dot6 xpos -1953 ypos -1316 } add_layer {topleft topleft.alpha} ShuffleCopy { inputs 2 alpha alpha2 black alpha out2 topleft name ShuffleCopy4 xpos -1987 ypos -1170 } add_layer {topright topright.alpha} ShuffleCopy { inputs 2 alpha alpha2 black alpha out2 topright name ShuffleCopy5 xpos -1987 ypos -1066 } add_layer {bottomleft bottomleft.alpha} ShuffleCopy { inputs 2 alpha alpha2 black alpha out2 bottomleft name ShuffleCopy6 xpos -1987 ypos -948 } add_layer {bottomright bottomright.alpha} ShuffleCopy { inputs 2 alpha alpha2 black alpha out2 bottomright name ShuffleCopy7 xpos -1987 ypos -842 } add_layer {horizontal horizontal.alpha} ShuffleCopy { inputs 2 alpha alpha2 black alpha out2 horizontal name ShuffleCopy1 xpos -1987 ypos -723 } add_layer {vertical vertical.alpha} ShuffleCopy { inputs 2 alpha alpha2 black alpha out2 vertical name ShuffleCopy2 xpos -1987 ypos -616 } Dot { name Dot10 xpos -1953 ypos -442 } set N163643d0 [stack 0] LayerContactSheet { showLayerNames true name LayerContactSheet1 xpos -1882 ypos -446 } StickyNote { inputs 0 name StickyNote3 label rough note_font_size 100 xpos -882 ypos 8402 } StickyNote { inputs 0 name StickyNote2 label fast note_font_size 100 xpos -2027 ypos 8405 } push $Nfa633c0 NoOp { name NoOp1 xpos -2434 ypos -1436 addUserKnob {20 User} addUserKnob {3 sizechecker} sizechecker {{Input1.height}} } push $N16237480 push $N16268d10 Merge2 { inputs 2 name Merge6 xpos -2138 ypos -667 } Dot { name Dot208 tile_color 0xff000000 xpos -2016 ypos -663 } Dot { name Dot209 xpos -2348 ypos 9121 hide_input true } Shuffle { green black blue black name Shuffle1 xpos -2382 ypos 9172 } push $N163643d0 Dot { name Dot114 xpos -1953 ypos -390 } set N163aacd0 [stack 0] Dot { name Dot115 xpos -1519 ypos -390 } set N163af4a0 [stack 0] Dot { name Dot11 xpos -874 ypos -390 } set N163b3f90 [stack 0] Dot { name Dot13 xpos -427 ypos -390 } set N163b8ad0 [stack 0] Dot { name Dot35 xpos 324 ypos -390 } set N163bd4f0 [stack 0] Dot { name Dot12 xpos 758 ypos -390 } set N163c1b50 [stack 0] push $N163bd4f0 Dot { name Dot41 xpos 324 ypos -342 } set N163c6b00 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix1 xpos 556 ypos -352 } push $N163c1b50 Keymix { inputs 3 maskChannel topleft.alpha name Keymix1 xpos 724 ypos -352 } set N163d6ae0 [stack 0] push $N163c6b00 Dot { name Dot39 xpos 324 ypos -265 } set N163dfc00 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix2 xpos 560 ypos -275 } push $N163d6ae0 Keymix { inputs 3 maskChannel topright.alpha name Keymix2 xpos 724 ypos -275 } set N163ef5e0 [stack 0] push $N163dfc00 Dot { name Dot42 xpos 324 ypos -185 } set N163f8b60 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix3 xpos 560 ypos -195 } push $N163ef5e0 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix3 xpos 724 ypos -195 } set N163f86d0 [stack 0] push $N163f8b60 Dot { name Dot43 xpos 324 ypos -101 } set N16411ba0 [stack 0] Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix4 xpos 557 ypos -111 } push $N163f86d0 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix4 xpos 724 ypos -111 } set N164116e0 [stack 0] push $N16411ba0 Dot { name Dot206 xpos 324 ypos -26 } set N1642ab80 [stack 0] Matrix { matrix { {0.5 0 0.5} {1 3 1} {0.5 0 0.5} } name Matrix118 xpos 554 ypos -36 } push $N164116e0 Keymix { inputs 3 maskChannel horizontal.alpha name Keymix105 xpos 724 ypos -36 } set N1643ab30 [stack 0] push $N1642ab80 Dot { name Dot207 xpos 324 ypos 17 } set N16443cb0 [stack 0] Matrix { matrix { {0.5 1 0.5} {0 3 0} {0.5 1 0.5} } name Matrix119 xpos 554 ypos 7 } push $N1643ab30 Keymix { inputs 3 maskChannel vertical.alpha name Keymix106 xpos 724 ypos 7 } Transform { translate {0.015 0.015} center {2160 1440} filter Impulse shutteroffset centred name Transform6 xpos 724 ypos 45 } set C1645cca0 [stack 0] Reformat { type scale scale 0.50000000001 resize height filter Impulse name Reformat1 xpos 724 ypos 111 } set C164535e0 [stack 0] Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression9 xpos 724 ypos 145 } Reformat { type "to box" box_width {{Input1.width}} box_height {{Input1.height}} box_fixed true resize height filter Parzen name Reformat2 xpos 558 ypos 145 } set C16487210 [stack 0] push $N16443cb0 Merge2 { inputs 2 operation under name Merge5 xpos 290 ypos 145 } set N16495e30 [stack 0] Dot { name Dot113 xpos 143 ypos 149 } push $N16495e30 Dot { name Dot45 xpos 324 ypos 323 } set N164a9e30 [stack 0] Reformat { type scale scale 0.5 resize height filter Impulse name Reformat5 xpos 417 ypos 319 } set N16486ca0 [stack 0] Dot { name Dot44 xpos 771 ypos 323 } set N164bcc70 [stack 0] push $N16486ca0 Dot { name Dot46 xpos 451 ypos 360 } set N164c1cb0 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix5 xpos 561 ypos 350 } push $N164bcc70 Keymix { inputs 3 maskChannel topleft.alpha name Keymix5 xpos 737 ypos 350 } set N164d15f0 [stack 0] push $N164c1cb0 Dot { name Dot47 xpos 451 ypos 437 } set N164dad50 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix6 xpos 561 ypos 427 } push $N164d15f0 Keymix { inputs 3 maskChannel topright.alpha name Keymix6 xpos 737 ypos 427 } set N164eacf0 [stack 0] push $N164dad50 Dot { name Dot48 xpos 451 ypos 517 } set N164f3e00 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix7 xpos 561 ypos 507 } push $N164eacf0 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix7 xpos 737 ypos 507 } set N164da710 [stack 0] push $N164f3e00 Dot { name Dot49 xpos 451 ypos 601 } set N1650cda0 [stack 0] Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix8 xpos 561 ypos 591 } push $N164da710 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix8 xpos 737 ypos 591 } set N1651cd40 [stack 0] push $N1650cda0 Dot { name Dot205 xpos 451 ypos 652 } set N16525e60 [stack 0] Matrix { matrix { {0.5 0 0.5} {1 3 1} {0.5 0 0.5} } name Matrix144 xpos 561 ypos 642 } push $N1651cd40 Keymix { inputs 3 maskChannel horizontal.alpha name Keymix131 xpos 737 ypos 642 } set N1650c700 [stack 0] push $N16525e60 Dot { name Dot210 xpos 451 ypos 695 } Matrix { matrix { {0.5 1 0.5} {0 3 0} {0.5 1 0.5} } name Matrix145 xpos 561 ypos 685 } push $N1650c700 Keymix { inputs 3 maskChannel vertical.alpha name Keymix132 xpos 737 ypos 685 } clone $C1645cca0 { xpos 737 ypos 742 selected false } clone $C164535e0 { xpos 737 ypos 773 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression10 xpos 737 ypos 809 } clone $C16487210 { xpos 557 ypos 809 selected false } push $N164a9e30 Merge2 { inputs 2 operation under name Merge12 xpos 290 ypos 809 } set N16590f40 [stack 0] Switch { inputs 2 which {{Reformat5.height>=2?0:1}} name Switch30 label "INPUT \[value which]" xpos 109 ypos 803 } push $N16590f40 Dot { name Dot40 xpos 324 ypos 971 } set N165a87f0 [stack 0] Reformat { type scale scale 0.25 resize height filter Impulse name Reformat6 xpos 417 ypos 967 } set N165ad360 [stack 0] Dot { name Dot50 xpos 771 ypos 971 } set N165bbc90 [stack 0] push $N165ad360 Dot { name Dot51 xpos 451 ypos 1008 } set N165c07f0 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix9 xpos 561 ypos 998 } push $N165bbc90 Keymix { inputs 3 maskChannel topleft.alpha name Keymix9 xpos 737 ypos 998 } set N165d0630 [stack 0] push $N165c07f0 Dot { name Dot52 xpos 451 ypos 1085 } set N165d9730 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix10 xpos 561 ypos 1075 } push $N165d0630 Keymix { inputs 3 maskChannel topright.alpha name Keymix10 xpos 737 ypos 1075 } set N165e9a60 [stack 0] push $N165d9730 Dot { name Dot53 xpos 451 ypos 1165 } set N165f2be0 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix11 xpos 561 ypos 1155 } push $N165e9a60 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix11 xpos 737 ypos 1155 } set N16602ac0 [stack 0] push $N165f2be0 Dot { name Dot54 xpos 451 ypos 1249 } set N1660bc40 [stack 0] Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix12 xpos 561 ypos 1239 } push $N16602ac0 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix12 xpos 737 ypos 1239 } set N1661b240 [stack 0] push $N1660bc40 Dot { name Dot211 xpos 451 ypos 1302 } set N16624bb0 [stack 0] Matrix { matrix { {0.5 0 0.5} {1 3 1} {0.5 0 0.5} } name Matrix120 xpos 561 ypos 1292 } push $N1661b240 Keymix { inputs 3 maskChannel horizontal.alpha name Keymix107 xpos 737 ypos 1292 } set N16624360 [stack 0] push $N16624bb0 Dot { name Dot212 xpos 451 ypos 1345 } Matrix { matrix { {0.5 1 0.5} {0 3 0} {0.5 1 0.5} } name Matrix121 xpos 561 ypos 1335 } push $N16624360 Keymix { inputs 3 maskChannel vertical.alpha name Keymix108 xpos 737 ypos 1335 } clone $C1645cca0 { xpos 737 ypos 1373 selected false } clone $C164535e0 { xpos 737 ypos 1422 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression12 xpos 737 ypos 1457 } clone $C16487210 { xpos 557 ypos 1457 selected false } push $N165a87f0 Merge2 { inputs 2 operation under name Merge17 xpos 290 ypos 1457 } set N166566d0 [stack 0] Switch { inputs 2 which {{Switch30.which==0?(Reformat6.height>=2?0:1):1}} name Switch31 label "INPUT \[value which]" xpos 109 ypos 1451 } push $N166566d0 Dot { name Dot55 xpos 324 ypos 1608 } set N166a76f0 [stack 0] Reformat { type scale scale 0.125 resize height filter Impulse name Reformat3 xpos 417 ypos 1604 } set N166ac180 [stack 0] Dot { name Dot56 xpos 771 ypos 1608 } set N166baa10 [stack 0] push $N166ac180 Dot { name Dot57 xpos 451 ypos 1645 } set N166bf570 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix13 xpos 561 ypos 1635 } push $N166baa10 Keymix { inputs 3 maskChannel topleft.alpha name Keymix13 xpos 737 ypos 1635 } set N1669eb60 [stack 0] push $N166bf570 Dot { name Dot58 xpos 451 ypos 1722 } set N166d84d0 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix14 xpos 561 ypos 1712 } push $N1669eb60 Keymix { inputs 3 maskChannel topright.alpha name Keymix14 xpos 737 ypos 1712 } set N166e7a80 [stack 0] push $N166d84d0 Dot { name Dot59 xpos 451 ypos 1802 } set N166f1500 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix15 xpos 561 ypos 1792 } push $N166e7a80 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix15 xpos 737 ypos 1792 } set N167014d0 [stack 0] push $N166f1500 Dot { name Dot60 xpos 451 ypos 1886 } set N1670a650 [stack 0] Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix16 xpos 561 ypos 1876 } push $N167014d0 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix16 xpos 737 ypos 1876 } set N1671a520 [stack 0] push $N1670a650 Dot { name Dot213 xpos 451 ypos 1941 } set N167235d0 [stack 0] Matrix { matrix { {0.5 0 0.5} {1 3 1} {0.5 0 0.5} } name Matrix122 xpos 561 ypos 1931 } push $N1671a520 Keymix { inputs 3 maskChannel horizontal.alpha name Keymix109 xpos 737 ypos 1931 } set N16700ad0 [stack 0] push $N167235d0 Dot { name Dot214 xpos 451 ypos 1984 } Matrix { matrix { {0.5 1 0.5} {0 3 0} {0.5 1 0.5} } name Matrix123 xpos 561 ypos 1974 } push $N16700ad0 Keymix { inputs 3 maskChannel vertical.alpha name Keymix110 xpos 737 ypos 1974 } clone $C1645cca0 { xpos 737 ypos 2009 selected false } clone $C164535e0 { xpos 737 ypos 2059 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression11 xpos 737 ypos 2094 } clone $C16487210 { xpos 557 ypos 2094 selected false } push $N166a76f0 Merge2 { inputs 2 operation under name Merge20 xpos 290 ypos 2094 } set N16754ed0 [stack 0] Switch { inputs 2 which {{Switch31.which==0?(Reformat3.height>=2?0:1):1}} name Switch32 label "INPUT \[value which]" xpos 109 ypos 2088 } push $N16754ed0 Dot { name Dot61 xpos 324 ypos 2233 } set N167a6040 [stack 0] Reformat { type scale scale 0.0625 resize height filter Impulse name Reformat4 xpos 417 ypos 2229 } set N167a54a0 [stack 0] Dot { name Dot62 xpos 771 ypos 2233 } set N167b9470 [stack 0] push $N167a54a0 Dot { name Dot72 xpos 451 ypos 2270 } set N167bdf40 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix17 xpos 561 ypos 2260 } push $N167b9470 Keymix { inputs 3 maskChannel topleft.alpha name Keymix17 xpos 737 ypos 2260 } set N167cde20 [stack 0] push $N167bdf40 Dot { name Dot76 xpos 451 ypos 2347 } set N167d6fa0 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix18 xpos 561 ypos 2337 } push $N167cde20 Keymix { inputs 3 maskChannel topright.alpha name Keymix18 xpos 737 ypos 2337 } set N167cd300 [stack 0] push $N167d6fa0 Dot { name Dot79 xpos 451 ypos 2427 } set N167efee0 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix19 xpos 561 ypos 2417 } push $N167cd300 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix19 xpos 737 ypos 2417 } set N167ef390 [stack 0] push $N167efee0 Dot { name Dot80 xpos 451 ypos 2511 } set N16808f00 [stack 0] Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix20 xpos 561 ypos 2501 } push $N167ef390 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix20 xpos 737 ypos 2501 } set N16808350 [stack 0] push $N16808f00 Dot { name Dot215 xpos 451 ypos 2577 } set N16821f60 [stack 0] Matrix { matrix { {0.5 0 0.5} {1 3 1} {0.5 0 0.5} } name Matrix124 xpos 561 ypos 2567 } push $N16808350 Keymix { inputs 3 maskChannel horizontal.alpha name Keymix111 xpos 737 ypos 2567 } set N16831ef0 [stack 0] push $N16821f60 Dot { name Dot216 xpos 451 ypos 2620 } Matrix { matrix { {0.5 1 0.5} {0 3 0} {0.5 1 0.5} } name Matrix125 xpos 561 ypos 2610 } push $N16831ef0 Keymix { inputs 3 maskChannel vertical.alpha name Keymix112 xpos 737 ypos 2610 } clone $C1645cca0 { xpos 737 ypos 2648 selected false } clone $C164535e0 { xpos 737 ypos 2684 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression13 xpos 737 ypos 2719 } clone $C16487210 { xpos 557 ypos 2719 selected false } push $N167a6040 Merge2 { inputs 2 operation under name Merge8 xpos 290 ypos 2719 } set N1687e050 [stack 0] Switch { inputs 2 which {{Switch32.which==0?(Reformat4.height>=2?0:1):1}} name Switch33 label "INPUT \[value which]" xpos 109 ypos 2713 } push $N1687e050 Dot { name Dot81 xpos 324 ypos 2906 } set N168a4ab0 [stack 0] Reformat { type scale scale 0.03125 resize height filter Impulse name Reformat7 xpos 417 ypos 2902 } set N168a94b0 [stack 0] Dot { name Dot82 xpos 771 ypos 2906 } set N1689bb90 [stack 0] push $N168a94b0 Dot { name Dot83 xpos 451 ypos 2943 } set N168bc910 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix21 xpos 561 ypos 2933 } push $N1689bb90 Keymix { inputs 3 maskChannel topleft.alpha name Keymix21 xpos 737 ypos 2933 } set N168cc890 [stack 0] push $N168bc910 Dot { name Dot84 xpos 451 ypos 3020 } set N168d59b0 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix22 xpos 561 ypos 3010 } push $N168cc890 Keymix { inputs 3 maskChannel topright.alpha name Keymix22 xpos 737 ypos 3010 } set N168e4b00 [stack 0] push $N168d59b0 Dot { name Dot88 xpos 451 ypos 3100 } set N168ee900 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix23 xpos 561 ypos 3090 } push $N168e4b00 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix23 xpos 737 ypos 3090 } set N168fe8e0 [stack 0] push $N168ee900 Dot { name Dot89 xpos 451 ypos 3184 } set N16907a00 [stack 0] Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix24 xpos 561 ypos 3174 } push $N168fe8e0 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix24 xpos 737 ypos 3174 } set N16916b10 [stack 0] push $N16907a00 Dot { name Dot217 xpos 451 ypos 3244 } set N16920990 [stack 0] Matrix { matrix { {0.5 0 0.5} {1 3 1} {0.5 0 0.5} } name Matrix126 xpos 561 ypos 3234 } push $N16916b10 Keymix { inputs 3 maskChannel horizontal.alpha name Keymix113 xpos 737 ypos 3234 } set N1691fc30 [stack 0] push $N16920990 Dot { name Dot218 xpos 451 ypos 3287 } Matrix { matrix { {0.5 1 0.5} {0 3 0} {0.5 1 0.5} } name Matrix127 xpos 561 ypos 3277 } push $N1691fc30 Keymix { inputs 3 maskChannel vertical.alpha name Keymix114 xpos 737 ypos 3277 } clone $C1645cca0 { xpos 737 ypos 3315 selected false } clone $C164535e0 { xpos 737 ypos 3355 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression14 xpos 737 ypos 3392 } clone $C16487210 { xpos 557 ypos 3392 selected false } push $N168a4ab0 Merge2 { inputs 2 operation under name Merge16 xpos 290 ypos 3392 disable {{logb(Input1.height)>=6?0:1}} } set C1698bf50 [stack 0] set N1698bf50 [stack 0] Switch { inputs 2 which {{Switch33.which==0?(Reformat7.height>=2?0:1):1}} name Switch34 label "INPUT \[value which]" xpos 109 ypos 3386 } push $N1698bf50 Dot { name Dot92 xpos 324 ypos 3568 } set N169a3630 [stack 0] Reformat { type scale scale 0.015625 resize height filter Impulse name Reformat8 xpos 417 ypos 3564 } set N169a2730 [stack 0] Dot { name Dot93 xpos 771 ypos 3568 } set N169b5b40 [stack 0] push $N169a2730 Dot { name Dot95 xpos 451 ypos 3605 } set N169bb470 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix25 xpos 561 ypos 3595 } push $N169b5b40 Keymix { inputs 3 maskChannel topleft.alpha name Keymix25 xpos 737 ypos 3595 } set N169cb430 [stack 0] push $N169bb470 Dot { name Dot98 xpos 451 ypos 3682 } set N169d4530 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix26 xpos 561 ypos 3672 } push $N169cb430 Keymix { inputs 3 maskChannel topright.alpha name Keymix26 xpos 737 ypos 3672 } set N169e4480 [stack 0] push $N169d4530 Dot { name Dot100 xpos 451 ypos 3762 } set N169ed5a0 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix27 xpos 561 ypos 3752 } push $N169e4480 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix27 xpos 737 ypos 3752 } set N169fd480 [stack 0] push $N169ed5a0 Dot { name Dot101 xpos 451 ypos 3846 } set N16a06600 [stack 0] Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix28 xpos 561 ypos 3836 } push $N169fd480 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix28 xpos 737 ypos 3836 } set N169fc5a0 [stack 0] push $N16a06600 Dot { name Dot219 xpos 451 ypos 3909 } set N16a1f550 [stack 0] Matrix { matrix { {0.5 0 0.5} {1 3 1} {0.5 0 0.5} } name Matrix128 xpos 561 ypos 3899 } push $N169fc5a0 Keymix { inputs 3 maskChannel horizontal.alpha name Keymix115 xpos 737 ypos 3899 } set N16a2f4e0 [stack 0] push $N16a1f550 Dot { name Dot220 xpos 451 ypos 3952 } Matrix { matrix { {0.5 1 0.5} {0 3 0} {0.5 1 0.5} } name Matrix129 xpos 561 ypos 3942 } push $N16a2f4e0 Keymix { inputs 3 maskChannel vertical.alpha name Keymix116 xpos 737 ypos 3942 } clone $C1645cca0 { xpos 737 ypos 3980 selected false } clone $C164535e0 { xpos 737 ypos 4019 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression15 xpos 737 ypos 4054 } clone $C16487210 { xpos 557 ypos 4054 selected false } push $N169a3630 Merge2 { inputs 2 operation under name Merge18 xpos 290 ypos 4054 disable {{logb(Input1.height)>=7?0:1}} } set C16a6d060 [stack 0] set N16a6d060 [stack 0] Switch { inputs 2 which {{Switch34.which==0?(Reformat8.height>=2?0:1):1}} name Switch35 label "INPUT \[value which]" xpos 109 ypos 4048 } push $N16a6d060 Dot { name Dot102 xpos 324 ypos 4242 } set N165de270 [stack 0] Reformat { type scale scale 0.0078125 resize height filter Impulse name Reformat9 xpos 417 ypos 4238 } set N16aa7530 [stack 0] Dot { name Dot103 xpos 771 ypos 4242 } set N16ab5e30 [stack 0] push $N16aa7530 Dot { name Dot104 xpos 451 ypos 4279 } set N16aba880 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix29 xpos 561 ypos 4269 } push $N16ab5e30 Keymix { inputs 3 maskChannel topleft.alpha name Keymix29 xpos 737 ypos 4269 } set N16ac9780 [stack 0] push $N16aba880 Dot { name Dot105 xpos 451 ypos 4356 } set N16ad3930 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix30 xpos 561 ypos 4346 } push $N16ac9780 Keymix { inputs 3 maskChannel topright.alpha name Keymix30 xpos 737 ypos 4346 } set N16ae38d0 [stack 0] push $N16ad3930 Dot { name Dot106 xpos 451 ypos 4436 } set N16aec9f0 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix31 xpos 561 ypos 4426 } push $N16ae38d0 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix31 xpos 737 ypos 4426 } set N16afc8c0 [stack 0] push $N16aec9f0 Dot { name Dot107 xpos 451 ypos 4520 } set N16b059e0 [stack 0] Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix32 xpos 561 ypos 4510 } push $N16afc8c0 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix32 xpos 737 ypos 4510 } set N16ad28a0 [stack 0] push $N16b059e0 Dot { name Dot221 xpos 451 ypos 4584 } set N16b1e8e0 [stack 0] Matrix { matrix { {0.5 0 0.5} {1 3 1} {0.5 0 0.5} } name Matrix130 xpos 561 ypos 4574 } push $N16ad28a0 Keymix { inputs 3 maskChannel horizontal.alpha name Keymix117 xpos 737 ypos 4574 } set N16b1d7f0 [stack 0] push $N16b1e8e0 Dot { name Dot222 xpos 451 ypos 4627 } Matrix { matrix { {0.5 1 0.5} {0 3 0} {0.5 1 0.5} } name Matrix131 xpos 561 ypos 4617 } push $N16b1d7f0 Keymix { inputs 3 maskChannel vertical.alpha name Keymix118 xpos 737 ypos 4617 } clone $C1645cca0 { xpos 737 ypos 4655 selected false } clone $C164535e0 { xpos 737 ypos 4693 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression16 xpos 737 ypos 4728 } clone $C16487210 { xpos 554 ypos 4728 selected false } push $N165de270 Merge2 { inputs 2 operation under name Merge25 xpos 290 ypos 4728 } set N16b6c270 [stack 0] Switch { inputs 2 which {{Switch35.which==0?(Reformat9.height>=2?0:1):1}} name Switch36 label "INPUT \[value which]" xpos 109 ypos 4722 } push $N16b6c270 Dot { name Dot170 xpos 324 ypos 4908 } set N16ba1420 [stack 0] Reformat { type scale scale 0.00390625 resize height filter Impulse name Reformat15 xpos 417 ypos 4904 } set N16b980a0 [stack 0] Dot { name Dot171 xpos 771 ypos 4908 } set N16bb35d0 [stack 0] push $N16b980a0 Dot { name Dot172 xpos 451 ypos 4945 } set N16bb91f0 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix98 xpos 561 ypos 4935 } push $N16bb35d0 Keymix { inputs 3 maskChannel topleft.alpha name Keymix85 xpos 737 ypos 4935 } set N16bb8010 [stack 0] push $N16bb91f0 Dot { name Dot173 xpos 451 ypos 5022 } set N16bd2250 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix99 xpos 561 ypos 5012 } push $N16bb8010 Keymix { inputs 3 maskChannel topright.alpha name Keymix86 xpos 737 ypos 5012 } set N16be21f0 [stack 0] push $N16bd2250 Dot { name Dot174 xpos 451 ypos 5102 } set N16beb310 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix100 xpos 561 ypos 5092 } push $N16be21f0 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix87 xpos 737 ypos 5092 } set N16bfb1c0 [stack 0] push $N16beb310 Dot { name Dot175 xpos 451 ypos 5186 } set N16c042c0 [stack 0] Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix101 xpos 561 ypos 5176 } push $N16bfb1c0 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix88 xpos 737 ypos 5176 } set N16c141e0 [stack 0] push $N16c042c0 Dot { name Dot223 xpos 451 ypos 5249 } set N16c1d360 [stack 0] Matrix { matrix { {0.5 0 0.5} {1 3 1} {0.5 0 0.5} } name Matrix132 xpos 561 ypos 5239 } push $N16c141e0 Keymix { inputs 3 maskChannel horizontal.alpha name Keymix119 xpos 737 ypos 5239 } set N16c2bf10 [stack 0] push $N16c1d360 Dot { name Dot224 xpos 451 ypos 5292 } Matrix { matrix { {0.5 1 0.5} {0 3 0} {0.5 1 0.5} } name Matrix133 xpos 561 ypos 5282 } push $N16c2bf10 Keymix { inputs 3 maskChannel vertical.alpha name Keymix120 xpos 737 ypos 5282 } clone $C1645cca0 { xpos 737 ypos 5320 selected false } clone $C164535e0 { xpos 737 ypos 5359 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression44 xpos 737 ypos 5394 } clone $C16487210 { xpos 554 ypos 5394 selected false } push $N16ba1420 Merge2 { inputs 2 operation under name Merge38 xpos 290 ypos 5394 } set N16c78cb0 [stack 0] Switch { inputs 2 which {{Switch36.which==0?(Reformat15.height>=2?0:1):1}} name Switch37 label "INPUT \[value which]" xpos 109 ypos 5388 } push $N16c78cb0 Dot { name Dot176 xpos 324 ypos 5642 } set N16c9fd90 [stack 0] Reformat { type scale scale 0.001953125 resize height filter Impulse name Reformat16 xpos 417 ypos 5638 } set N16ca4890 [stack 0] Dot { name Dot177 xpos 771 ypos 5642 } set N16cb31a0 [stack 0] push $N16ca4890 Dot { name Dot178 xpos 451 ypos 5679 } set N16cb7d00 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix102 xpos 561 ypos 5669 } push $N16cb31a0 Keymix { inputs 3 maskChannel topleft.alpha name Keymix89 xpos 737 ypos 5669 } set N16c9e910 [stack 0] push $N16cb7d00 Dot { name Dot179 xpos 451 ypos 5756 } set N16cd0bd0 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix103 xpos 561 ypos 5746 } push $N16c9e910 Keymix { inputs 3 maskChannel topright.alpha name Keymix90 xpos 737 ypos 5746 } set N16ce0bb0 [stack 0] push $N16cd0bd0 Dot { name Dot180 xpos 451 ypos 5836 } set N16ce9c10 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix104 xpos 561 ypos 5826 } push $N16ce0bb0 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix91 xpos 737 ypos 5826 } set N16cf8730 [stack 0] push $N16ce9c10 Dot { name Dot181 xpos 451 ypos 5920 } set N16d04c20 [stack 0] Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix105 xpos 561 ypos 5910 } push $N16cf8730 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix92 xpos 737 ypos 5910 } set N16d14ba0 [stack 0] push $N16d04c20 Dot { name Dot225 xpos 451 ypos 5983 } set N16d1dd20 [stack 0] Matrix { matrix { {0.5 0 0.5} {1 3 1} {0.5 0 0.5} } name Matrix134 xpos 566 ypos 5973 } push $N16d14ba0 Keymix { inputs 3 maskChannel horizontal.alpha name Keymix121 xpos 737 ypos 5973 } set N16d2dbc0 [stack 0] push $N16d1dd20 Dot { name Dot226 xpos 451 ypos 6026 } Matrix { matrix { {0.5 1 0.5} {0 3 0} {0.5 1 0.5} } name Matrix135 xpos 561 ypos 6016 } push $N16d2dbc0 Keymix { inputs 3 maskChannel vertical.alpha name Keymix122 xpos 737 ypos 6016 } clone $C1645cca0 { xpos 737 ypos 6054 selected false } clone $C164535e0 { xpos 737 ypos 6093 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression45 xpos 737 ypos 6128 } clone $C16487210 { xpos 554 ypos 6128 selected false } push $N16c9fd90 Merge2 { inputs 2 operation under name Merge39 xpos 290 ypos 6128 } set N16d89230 [stack 0] Switch { inputs 2 which {{Switch37.which==0?(Reformat16.height>=2?0:1):1}} name Switch38 label "INPUT \[value which]" xpos 109 ypos 6122 } push $N16d89230 Dot { name Dot182 xpos 324 ypos 6344 } set N16da0710 [stack 0] Reformat { type scale scale 0.00097656 resize height filter Impulse name Reformat24 xpos 417 ypos 6340 } set N16d9f150 [stack 0] Dot { name Dot183 xpos 771 ypos 6344 } set N16db3ab0 [stack 0] push $N16d9f150 Dot { name Dot184 xpos 451 ypos 6381 } set N16db8600 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix106 xpos 561 ypos 6371 } push $N16db3ab0 Keymix { inputs 3 maskChannel topleft.alpha name Keymix93 xpos 737 ypos 6371 } set N16dc84e0 [stack 0] push $N16db8600 Dot { name Dot185 xpos 451 ypos 6458 } set N16dd15e0 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix107 xpos 561 ypos 6448 } push $N16dc84e0 Keymix { inputs 3 maskChannel topright.alpha name Keymix94 xpos 737 ypos 6448 } set N16dc6fa0 [stack 0] push $N16dd15e0 Dot { name Dot186 xpos 451 ypos 6538 } set N16dea5b0 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix108 xpos 561 ypos 6528 } push $N16dc6fa0 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix95 xpos 737 ypos 6528 } set N16dfa570 [stack 0] push $N16dea5b0 Dot { name Dot187 xpos 451 ypos 6622 } set N16e03690 [stack 0] Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix109 xpos 561 ypos 6612 } push $N16dfa570 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix96 xpos 737 ypos 6612 } set N16e13540 [stack 0] push $N16e03690 Dot { name Dot227 xpos 451 ypos 6686 } set N16e1c6c0 [stack 0] Matrix { matrix { {0.5 0 0.5} {1 3 1} {0.5 0 0.5} } name Matrix136 xpos 566 ypos 6676 } push $N16e13540 Keymix { inputs 3 maskChannel horizontal.alpha name Keymix123 xpos 737 ypos 6676 } set N16e11f70 [stack 0] push $N16e1c6c0 Dot { name Dot228 xpos 451 ypos 6729 } Matrix { matrix { {0.5 1 0.5} {0 3 0} {0.5 1 0.5} } name Matrix137 xpos 561 ypos 6719 } push $N16e11f70 Keymix { inputs 3 maskChannel vertical.alpha name Keymix124 xpos 737 ypos 6719 } clone $C1645cca0 { xpos 737 ypos 6757 selected false } clone $C164535e0 { xpos 737 ypos 6795 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression46 xpos 737 ypos 6830 } clone $C16487210 { xpos 554 ypos 6830 selected false } push $N16da0710 Merge2 { inputs 2 operation under name Merge40 xpos 290 ypos 6830 } set N16e87bb0 [stack 0] Switch { inputs 2 which {{Switch38.which==0?(Reformat24.height>=2?0:1):1}} name Switch39 label "INPUT \[value which]" xpos 109 ypos 6824 } push $N16e87bb0 Dot { name Dot188 xpos 324 ypos 7065 } set N16e9f090 [stack 0] Reformat { type scale scale 0.00048828 resize height filter Impulse name Reformat25 xpos 417 ypos 7061 } set N16ea3b90 [stack 0] Dot { name Dot189 xpos 771 ypos 7065 } set N16e9d880 [stack 0] push $N16ea3b90 Dot { name Dot190 xpos 451 ypos 7102 } set N16eb6f20 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix110 xpos 561 ypos 7092 } push $N16e9d880 Keymix { inputs 3 maskChannel topleft.alpha name Keymix97 xpos 737 ypos 7092 } set N16eb5860 [stack 0] push $N16eb6f20 Dot { name Dot191 xpos 451 ypos 7179 } set N16ecff20 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix111 xpos 561 ypos 7169 } push $N16eb5860 Keymix { inputs 3 maskChannel topright.alpha name Keymix98 xpos 737 ypos 7169 } set N16edfeb0 [stack 0] push $N16ecff20 Dot { name Dot192 xpos 451 ypos 7259 } set N16ee9030 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix112 xpos 561 ypos 7249 } push $N16edfeb0 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix99 xpos 737 ypos 7249 } set N16ede790 [stack 0] push $N16ee9030 Dot { name Dot193 xpos 451 ypos 7343 } set N16f01f50 [stack 0] Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix113 xpos 561 ypos 7333 } push $N16ede790 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix100 xpos 737 ypos 7333 } set N16f007d0 [stack 0] push $N16f01f50 Dot { name Dot229 xpos 451 ypos 7409 } set N16f1afb0 [stack 0] Matrix { matrix { {0.5 0 0.5} {1 3 1} {0.5 0 0.5} } name Matrix138 xpos 566 ypos 7399 } push $N16f007d0 Keymix { inputs 3 maskChannel horizontal.alpha name Keymix125 xpos 737 ypos 7399 } set N16f2af50 [stack 0] push $N16f1afb0 Dot { name Dot230 xpos 451 ypos 7452 } Matrix { matrix { {0.5 1 0.5} {0 3 0} {0.5 1 0.5} } name Matrix139 xpos 561 ypos 7442 } push $N16f2af50 Keymix { inputs 3 maskChannel vertical.alpha name Keymix126 xpos 737 ypos 7442 } clone $C1645cca0 { xpos 737 ypos 7480 selected false } clone $C164535e0 { xpos 737 ypos 7516 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression47 xpos 737 ypos 7551 } clone $C16487210 { xpos 554 ypos 7551 selected false } push $N16e9f090 Merge2 { inputs 2 operation under name Merge41 xpos 290 ypos 7551 } set N16f86560 [stack 0] Switch { inputs 2 which {{Switch39.which==0?(Reformat25.height>=2?0:1):1}} name Switch40 label "INPUT \[value which]" xpos 109 ypos 7545 } push $N16f86560 Dot { name Dot194 xpos 324 ypos 7808 } set N16f9db00 [stack 0] Reformat { type scale scale 0.00024414 resize height filter Impulse name Reformat26 xpos 417 ypos 7804 } set N16fa2510 [stack 0] Dot { name Dot195 xpos 771 ypos 7808 } set N16f67ea0 [stack 0] push $N16fa2510 Dot { name Dot196 xpos 451 ypos 7845 } set N16fb5960 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix114 xpos 561 ypos 7835 } push $N16f67ea0 Keymix { inputs 3 maskChannel topleft.alpha name Keymix101 xpos 737 ypos 7835 } set N16fc58e0 [stack 0] push $N16fb5960 Dot { name Dot197 xpos 451 ypos 7922 } set N16fcea00 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix115 xpos 561 ypos 7912 } push $N16fc58e0 Keymix { inputs 3 maskChannel topright.alpha name Keymix102 xpos 737 ypos 7912 } set N16fde8d0 [stack 0] push $N16fcea00 Dot { name Dot198 xpos 451 ypos 8002 } set N16fe79f0 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix116 xpos 561 ypos 7992 } push $N16fde8d0 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix103 xpos 737 ypos 7992 } set N16ff7940 [stack 0] push $N16fe79f0 Dot { name Dot199 xpos 451 ypos 8086 } set N17000a60 [stack 0] Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix117 xpos 561 ypos 8076 } push $N16ff7940 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix104 xpos 737 ypos 8076 } set N1700ef90 [stack 0] push $N17000a60 Dot { name Dot231 xpos 451 ypos 8153 } set N17019a00 [stack 0] Matrix { matrix { {0.5 0 0.5} {1 3 1} {0.5 0 0.5} } name Matrix140 xpos 566 ypos 8143 } push $N1700ef90 Keymix { inputs 3 maskChannel horizontal.alpha name Keymix127 xpos 737 ypos 8143 } set N170299b0 [stack 0] push $N17019a00 Dot { name Dot232 xpos 451 ypos 8196 } Matrix { matrix { {0.5 1 0.5} {0 3 0} {0.5 1 0.5} } name Matrix141 xpos 561 ypos 8186 } push $N170299b0 Keymix { inputs 3 maskChannel vertical.alpha name Keymix128 xpos 737 ypos 8186 } clone $C1645cca0 { xpos 737 ypos 8224 selected false } clone $C164535e0 { xpos 737 ypos 8259 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression48 xpos 737 ypos 8294 } clone $C16487210 { xpos 554 ypos 8294 selected false } push $N16f9db00 Merge2 { inputs 2 operation under name Merge42 xpos 284 ypos 8294 } Switch { inputs 2 which {{Switch40.which==0?(Reformat26.height>=2?0:1):1}} name Switch41 label "INPUT \[value which]" xpos 109 ypos 8288 } Dot { name Dot203 xpos 143 ypos 8499 } push $N163b8ad0 push $N163b3f90 Dot { name Dot14 xpos -874 ypos -281 } set N17074a20 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix33 xpos -640 ypos -291 } push $N163b8ad0 Keymix { inputs 3 maskChannel topleft.alpha name Keymix33 xpos -461 ypos -291 } set N170b0f40 [stack 0] push $N17074a20 Dot { name Dot15 xpos -874 ypos -204 } set N170ba060 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix34 xpos -638 ypos -214 } push $N170b0f40 Keymix { inputs 3 maskChannel topright.alpha name Keymix34 xpos -461 ypos -214 } set N170c9f30 [stack 0] push $N170ba060 Dot { name Dot16 xpos -874 ypos -124 } set N170d3050 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix35 xpos -638 ypos -134 } push $N170c9f30 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix35 xpos -461 ypos -134 } set N170e2ee0 [stack 0] push $N170d3050 Dot { name Dot17 xpos -874 ypos -40 } set N170e14d0 [stack 0] Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix36 xpos -641 ypos -50 } push $N170e2ee0 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix36 xpos -461 ypos -50 } clone $C1645cca0 { xpos -461 ypos -12 selected false } clone $C164535e0 { xpos -461 ypos 112 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression17 xpos -461 ypos 145 } set N17121b30 [stack 0] clone $C16487210 { xpos -648 ypos 145 selected false } push $N170e14d0 Merge2 { inputs 2 operation under name Merge1 xpos -908 ypos 145 } set N1713e5b0 [stack 0] Dot { name Dot201 xpos -1052 ypos 149 } push $N17121b30 Dot { name Dot8 xpos -427 ypos 323 } set N17152450 [stack 0] push $N17152450 Dot { name Dot9 xpos -747 ypos 323 } Dot { name Dot20 xpos -747 ypos 383 } set N1715b900 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix37 xpos -637 ypos 373 } push $N17152450 Keymix { inputs 3 maskChannel topleft.alpha name Keymix37 xpos -461 ypos 373 } set N17169d20 [stack 0] push $N1715b900 Dot { name Dot21 xpos -747 ypos 460 } set N17174950 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix38 xpos -637 ypos 450 } push $N17169d20 Keymix { inputs 3 maskChannel topright.alpha name Keymix38 xpos -461 ypos 450 } set N17184980 [stack 0] push $N17174950 Dot { name Dot23 xpos -747 ypos 540 } set N1718db00 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix39 xpos -637 ypos 530 } push $N17184980 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix39 xpos -461 ypos 530 } set N1719da00 [stack 0] push $N1718db00 Dot { name Dot25 xpos -747 ypos 624 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix40 xpos -637 ypos 614 } push $N1719da00 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix40 xpos -461 ypos 614 } clone $C1645cca0 { xpos -461 ypos 666 selected false } clone $C164535e0 { xpos -461 ypos 773 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression18 xpos -461 ypos 809 } set N17183100 [stack 0] clone $C16487210 { xpos -641 ypos 809 selected false } push $N1713e5b0 Merge2 { inputs 2 operation under name Merge2 xpos -908 ypos 809 } set N171e8ad0 [stack 0] Switch { inputs 2 which {{Expression18.height>=2?0:1}} name Switch18 label "INPUT \[value which]" xpos -1086 ypos 803 } push $N17183100 Dot { name Dot18 xpos -427 ypos 971 } set N17210540 [stack 0] push $N17210540 Dot { name Dot19 xpos -747 ypos 971 } Dot { name Dot26 xpos -747 ypos 1031 } set N172066d0 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix41 xpos -637 ypos 1021 } push $N17210540 Keymix { inputs 3 maskChannel topleft.alpha name Keymix41 xpos -461 ypos 1021 } set N17229a70 [stack 0] push $N172066d0 Dot { name Dot27 xpos -747 ypos 1108 } set N17232b90 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix42 xpos -637 ypos 1098 } push $N17229a70 Keymix { inputs 3 maskChannel topright.alpha name Keymix42 xpos -461 ypos 1098 } set N1721c870 [stack 0] push $N17232b90 Dot { name Dot28 xpos -747 ypos 1188 } set N1724bb00 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix43 xpos -637 ypos 1178 } push $N1721c870 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix43 xpos -461 ypos 1178 } set N1725bac0 [stack 0] push $N1724bb00 Dot { name Dot30 xpos -747 ypos 1272 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix44 xpos -637 ypos 1262 } push $N1725bac0 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix44 xpos -461 ypos 1262 } clone $C1645cca0 { xpos -461 ypos 1314 selected false } clone $C164535e0 { xpos -461 ypos 1421 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression19 xpos -461 ypos 1457 } set N1727c130 [stack 0] clone $C16487210 { xpos -641 ypos 1457 selected false } push $N171e8ad0 Merge2 { inputs 2 operation under name Merge3 xpos -908 ypos 1457 } set N172b70e0 [stack 0] Switch { inputs 2 which {{Switch18.which==0?(Expression18.height>=2?0:1):1}} name Switch19 label "INPUT \[value which]" xpos -1086 ypos 1451 } push $N1727c130 Dot { name Dot31 xpos -427 ypos 1603 } set N172ce620 [stack 0] push $N172ce620 Dot { name Dot36 xpos -747 ypos 1603 } Dot { name Dot37 xpos -747 ypos 1663 } set N172d7bd0 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix45 xpos -637 ypos 1653 } push $N172ce620 Keymix { inputs 3 maskChannel topleft.alpha name Keymix45 xpos -461 ypos 1653 } set N172e7b30 [stack 0] push $N172d7bd0 Dot { name Dot38 xpos -747 ypos 1740 } set N172f0c50 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix46 xpos -637 ypos 1730 } push $N172e7b30 Keymix { inputs 3 maskChannel topright.alpha name Keymix46 xpos -461 ypos 1730 } set N17300ae0 [stack 0] push $N172f0c50 Dot { name Dot63 xpos -747 ypos 1820 } set N172fed40 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix47 xpos -637 ypos 1810 } push $N17300ae0 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix47 xpos -461 ypos 1810 } set N17319b70 [stack 0] push $N172fed40 Dot { name Dot64 xpos -747 ypos 1904 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix48 xpos -637 ypos 1894 } push $N17319b70 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix48 xpos -461 ypos 1894 } clone $C1645cca0 { xpos -461 ypos 1946 selected false } clone $C164535e0 { xpos -461 ypos 2058 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression20 xpos -461 ypos 2094 } set N173586b0 [stack 0] clone $C16487210 { xpos -641 ypos 2094 selected false } push $N172b70e0 Merge2 { inputs 2 operation under name Merge4 xpos -908 ypos 2094 } set N17347d30 [stack 0] Switch { inputs 2 which {{Switch19.which==0?(Expression19.height>=2?0:1):1}} name Switch20 label "INPUT \[value which]" xpos -1086 ypos 2088 } push $N173586b0 Dot { name Dot65 xpos -427 ypos 2233 } set N1738c690 [stack 0] push $N1738c690 Dot { name Dot66 xpos -747 ypos 2233 } Dot { name Dot67 xpos -747 ypos 2293 } set N17395ba0 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix49 xpos -637 ypos 2283 } push $N1738c690 Keymix { inputs 3 maskChannel topleft.alpha name Keymix49 xpos -461 ypos 2283 } set N173a5bb0 [stack 0] push $N17395ba0 Dot { name Dot68 xpos -747 ypos 2370 } set N173aecd0 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix50 xpos -637 ypos 2360 } push $N173a5bb0 Keymix { inputs 3 maskChannel topright.alpha name Keymix50 xpos -461 ypos 2360 } set N17393c70 [stack 0] push $N173aecd0 Dot { name Dot69 xpos -747 ypos 2450 } set N173c7bd0 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix51 xpos -637 ypos 2440 } push $N17393c70 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix51 xpos -461 ypos 2440 } set N173d7b90 [stack 0] push $N173c7bd0 Dot { name Dot70 xpos -747 ypos 2534 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix52 xpos -637 ypos 2524 } push $N173d7b90 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix52 xpos -461 ypos 2524 } clone $C1645cca0 { xpos -461 ypos 2576 selected false } clone $C164535e0 { xpos -461 ypos 2683 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression21 xpos -461 ypos 2719 } set N17417750 [stack 0] clone $C16487210 { xpos -641 ypos 2719 selected false } push $N17347d30 Merge2 { inputs 2 operation under name Merge7 xpos -908 ypos 2719 } set N173f8050 [stack 0] Switch { inputs 2 which {{Switch20.which==0?(Expression20.height>=2?0:1):1}} name Switch21 label "INPUT \[value which]" xpos -1086 ypos 2713 } push $N17417750 Dot { name Dot71 xpos -427 ypos 2909 } set N1744b700 [stack 0] push $N1744b700 Dot { name Dot73 xpos -747 ypos 2909 } Dot { name Dot74 xpos -747 ypos 2969 } set N174495f0 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix53 xpos -637 ypos 2959 } push $N1744b700 Keymix { inputs 3 maskChannel topleft.alpha name Keymix53 xpos -461 ypos 2959 } set N17464c10 [stack 0] push $N174495f0 Dot { name Dot75 xpos -747 ypos 3046 } set N1746dd80 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix54 xpos -637 ypos 3036 } push $N17464c10 Keymix { inputs 3 maskChannel topright.alpha name Keymix54 xpos -461 ypos 3036 } set N174576b0 [stack 0] push $N1746dd80 Dot { name Dot77 xpos -747 ypos 3126 } set N17484ba0 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix55 xpos -637 ypos 3116 } push $N174576b0 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix55 xpos -461 ypos 3116 } set N17496cb0 [stack 0] push $N17484ba0 Dot { name Dot78 xpos -747 ypos 3210 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix56 xpos -637 ypos 3200 } push $N17496cb0 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix56 xpos -461 ypos 3200 } clone $C1645cca0 { xpos -461 ypos 3252 selected false } clone $C164535e0 { xpos -461 ypos 3356 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression22 xpos -461 ypos 3392 } set N174d57d0 [stack 0] clone $C16487210 { xpos -641 ypos 3392 selected false } push $N173f8050 clone $C1698bf50 { inputs 2 xpos -908 ypos 3392 selected false } set N174f2240 [stack 0] Switch { inputs 2 which {{Switch21.which==0?(Expression21.height>=2?0:1):1}} name Switch22 label "INPUT \[value which]" xpos -1086 ypos 3386 } push $N174d57d0 Dot { name Dot85 xpos -427 ypos 3579 } set N17509a00 [stack 0] push $N17509a00 Dot { name Dot86 xpos -747 ypos 3579 } Dot { name Dot87 xpos -747 ypos 3639 } set N17512f30 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix57 xpos -637 ypos 3629 } push $N17509a00 Keymix { inputs 3 maskChannel topleft.alpha name Keymix57 xpos -461 ypos 3629 } set N17522e80 [stack 0] push $N17512f30 Dot { name Dot90 xpos -747 ypos 3716 } set N1752bf20 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix58 xpos -637 ypos 3706 } push $N17522e80 Keymix { inputs 3 maskChannel topright.alpha name Keymix58 xpos -461 ypos 3706 } set N1753be40 [stack 0] push $N1752bf20 Dot { name Dot91 xpos -747 ypos 3796 } set N17539ce0 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix59 xpos -637 ypos 3786 } push $N1753be40 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix59 xpos -461 ypos 3786 } set N17554e70 [stack 0] push $N17539ce0 Dot { name Dot94 xpos -747 ypos 3880 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix60 xpos -637 ypos 3870 } push $N17554e70 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix60 xpos -461 ypos 3870 } clone $C1645cca0 { xpos -461 ypos 3922 selected false } clone $C164535e0 { xpos -461 ypos 4018 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression23 xpos -461 ypos 4054 } set N175939a0 [stack 0] clone $C16487210 { xpos -641 ypos 4054 selected false } push $N174f2240 clone $C16a6d060 { inputs 2 xpos -908 ypos 4054 selected false } set N175b04b0 [stack 0] Switch { inputs 2 which {{Switch22.which==0?(Expression22.height>=2?0:1):1}} name Switch23 label "INPUT \[value which]" xpos -1086 ypos 4048 } push $N175939a0 Dot { name Dot96 xpos -427 ypos 4245 } set N175c7bf0 [stack 0] push $N175c7bf0 Dot { name Dot97 xpos -747 ypos 4245 } Dot { name Dot99 xpos -747 ypos 4305 } set N175d10e0 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix61 xpos -637 ypos 4295 } push $N175c7bf0 Keymix { inputs 3 maskChannel topleft.alpha name Keymix61 xpos -461 ypos 4295 } set N175cee20 [stack 0] push $N175d10e0 Dot { name Dot108 xpos -747 ypos 4382 } set N175ea170 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix62 xpos -637 ypos 4372 } push $N175cee20 Keymix { inputs 3 maskChannel topright.alpha name Keymix62 xpos -461 ypos 4372 } set N175e7e80 [stack 0] push $N175ea170 Dot { name Dot109 xpos -747 ypos 4462 } set N176031f0 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix63 xpos -637 ypos 4452 } push $N175e7e80 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix63 xpos -461 ypos 4452 } set N176131b0 [stack 0] push $N176031f0 Dot { name Dot110 xpos -747 ypos 4546 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix64 xpos -637 ypos 4536 } push $N176131b0 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix64 xpos -461 ypos 4536 } clone $C1645cca0 { xpos -461 ypos 4588 selected false } clone $C164535e0 { xpos -461 ypos 4692 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression24 xpos -461 ypos 4728 } set N17651c80 [stack 0] clone $C16487210 { xpos -641 ypos 4728 selected false } push $N175b04b0 Merge2 { inputs 2 operation under name Merge9 xpos -908 ypos 4728 } set N176011d0 [stack 0] Switch { inputs 2 which {{Switch23.which==0?(Expression23.height>=2?0:1):1}} name Switch24 label "INPUT \[value which]" xpos -1086 ypos 4722 } push $N17651c80 Dot { name Dot129 xpos -427 ypos 4899 } set N17685c70 [stack 0] push $N17685c70 Dot { name Dot130 xpos -747 ypos 4899 } Dot { name Dot131 xpos -747 ypos 4959 } set N1768f220 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix78 xpos -637 ypos 4949 } push $N17685c70 Keymix { inputs 3 maskChannel topleft.alpha name Keymix65 xpos -461 ypos 4949 } set N17683750 [stack 0] push $N1768f220 Dot { name Dot134 xpos -747 ypos 5036 } set N176a8210 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix79 xpos -637 ypos 5026 } push $N17683750 Keymix { inputs 3 maskChannel topright.alpha name Keymix66 xpos -461 ypos 5026 } set N176b81b0 [stack 0] push $N176a8210 Dot { name Dot135 xpos -747 ypos 5116 } set N176a5e30 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix80 xpos -637 ypos 5106 } push $N176b81b0 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix67 xpos -461 ypos 5106 } set N176d1210 [stack 0] push $N176a5e30 Dot { name Dot136 xpos -747 ypos 5200 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix81 xpos -637 ypos 5190 } push $N176d1210 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix68 xpos -461 ypos 5190 } clone $C1645cca0 { xpos -461 ypos 5242 selected false } clone $C164535e0 { xpos -461 ypos 5358 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression39 xpos -461 ypos 5394 } set N176f1150 [stack 0] clone $C16487210 { xpos -641 ypos 5394 selected false } push $N176011d0 Merge2 { inputs 2 operation under name Merge37 xpos -908 ypos 5394 } set N1772c810 [stack 0] Switch { inputs 2 which {{Switch24.which==0?(Expression24.height>=2?0:1):1}} name Switch25 label "INPUT \[value which]" xpos -1086 ypos 5388 } push $N176f1150 Dot { name Dot137 xpos -427 ypos 5642 } set N17743d20 [stack 0] push $N17743d20 Dot { name Dot140 xpos -747 ypos 5642 } Dot { name Dot141 xpos -747 ypos 5702 } set N1774d2d0 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix82 xpos -637 ypos 5692 } push $N17743d20 Keymix { inputs 3 maskChannel topleft.alpha name Keymix69 xpos -461 ypos 5692 } set N1775d220 [stack 0] push $N1774d2d0 Dot { name Dot142 xpos -747 ypos 5779 } set N177663a0 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix83 xpos -637 ypos 5769 } push $N1775d220 Keymix { inputs 3 maskChannel topright.alpha name Keymix70 xpos -461 ypos 5769 } set N17776270 [stack 0] push $N177663a0 Dot { name Dot143 xpos -747 ypos 5859 } set N1777f320 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix84 xpos -637 ypos 5849 } push $N17776270 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix71 xpos -461 ypos 5849 } set N1778f230 [stack 0] push $N1777f320 Dot { name Dot146 xpos -747 ypos 5943 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix85 xpos -637 ypos 5933 } push $N1778f230 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix72 xpos -461 ypos 5933 } clone $C1645cca0 { xpos -461 ypos 5985 selected false } clone $C164535e0 { xpos -461 ypos 6092 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression40 xpos -461 ypos 6128 } set N177cddf0 [stack 0] clone $C16487210 { xpos -641 ypos 6128 selected false } push $N1772c810 Merge2 { inputs 2 operation under name Merge36 xpos -908 ypos 6128 } set N177e8190 [stack 0] Switch { inputs 2 which {{Switch25.which==0?(Expression39.height>=2?0:1):1}} name Switch26 label "INPUT \[value which]" xpos -1086 ypos 6122 } push $N177cddf0 Dot { name Dot147 xpos -427 ypos 6344 } set N17807e40 [stack 0] push $N17807e40 Dot { name Dot148 xpos -747 ypos 6344 } Dot { name Dot149 xpos -747 ypos 6404 } set N17811360 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix86 xpos -637 ypos 6394 } push $N17807e40 Keymix { inputs 3 maskChannel topleft.alpha name Keymix73 xpos -461 ypos 6394 } set N17821370 [stack 0] push $N17811360 Dot { name Dot152 xpos -747 ypos 6481 } set N1782a420 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix87 xpos -637 ypos 6471 } push $N17821370 Keymix { inputs 3 maskChannel topright.alpha name Keymix74 xpos -461 ypos 6471 } set N1780ecb0 [stack 0] push $N1782a420 Dot { name Dot153 xpos -747 ypos 6561 } set N17843400 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix88 xpos -637 ypos 6551 } push $N1780ecb0 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix75 xpos -461 ypos 6551 } set N178533c0 [stack 0] push $N17843400 Dot { name Dot154 xpos -747 ypos 6645 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix89 xpos -637 ypos 6635 } push $N178533c0 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix76 xpos -461 ypos 6635 } clone $C1645cca0 { xpos -461 ypos 6687 selected false } clone $C164535e0 { xpos -461 ypos 6794 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression41 xpos -461 ypos 6830 } set N17891eb0 [stack 0] clone $C16487210 { xpos -641 ypos 6830 selected false } push $N177e8190 Merge2 { inputs 2 operation under name Merge35 xpos -908 ypos 6830 } set N178ae930 [stack 0] Switch { inputs 2 which {{Switch26.which==0?(Expression40.height>=2?0:1):1}} name Switch27 label "INPUT \[value which]" xpos -1086 ypos 6824 } push $N17891eb0 Dot { name Dot155 xpos -427 ypos 7065 } set N178c5ed0 [stack 0] push $N178c5ed0 Dot { name Dot158 xpos -747 ypos 7065 } Dot { name Dot159 xpos -747 ypos 7125 } set N178ccb90 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix90 xpos -637 ypos 7115 } push $N178c5ed0 Keymix { inputs 3 maskChannel topleft.alpha name Keymix77 xpos -461 ypos 7115 } set N178d16d0 [stack 0] push $N178ccb90 Dot { name Dot160 xpos -747 ypos 7202 } set N178e8470 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix91 xpos -637 ypos 7192 } push $N178d16d0 Keymix { inputs 3 maskChannel topright.alpha name Keymix78 xpos -461 ypos 7192 } set N178e5c80 [stack 0] push $N178e8470 Dot { name Dot161 xpos -747 ypos 7282 } set N178febf0 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix92 xpos -637 ypos 7272 } push $N178e5c80 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix79 xpos -461 ypos 7272 } set N17911460 [stack 0] push $N178febf0 Dot { name Dot163 xpos -747 ypos 7366 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix93 xpos -637 ypos 7356 } push $N17911460 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix80 xpos -461 ypos 7356 } clone $C1645cca0 { xpos -461 ypos 7408 selected false } clone $C164535e0 { xpos -461 ypos 7515 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression42 xpos -461 ypos 7551 } set N1793ec50 [stack 0] clone $C16487210 { xpos -641 ypos 7551 selected false } push $N178ae930 Merge2 { inputs 2 operation under name Merge34 xpos -908 ypos 7551 } set N1796cac0 [stack 0] Switch { inputs 2 which {{Switch27.which==0?(Expression41.height>=2?0:1):1}} name Switch28 label "INPUT \[value which]" xpos -1086 ypos 7545 } push $N1793ec50 Dot { name Dot164 xpos -427 ypos 7797 } set N17983fe0 [stack 0] push $N17983fe0 Dot { name Dot165 xpos -747 ypos 7797 } Dot { name Dot166 xpos -747 ypos 7857 } set N1795b5e0 [stack 0] Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix94 xpos -637 ypos 7847 } push $N17983fe0 Keymix { inputs 3 maskChannel topleft.alpha name Keymix81 xpos -461 ypos 7847 } set N1799d480 [stack 0] push $N1795b5e0 Dot { name Dot167 xpos -747 ypos 7934 } set N179a6600 [stack 0] Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix95 xpos -637 ypos 7924 } push $N1799d480 Keymix { inputs 3 maskChannel topright.alpha name Keymix82 xpos -461 ypos 7924 } set N179b6590 [stack 0] push $N179a6600 Dot { name Dot168 xpos -747 ypos 8014 } set N179bf730 [stack 0] Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix96 xpos -637 ypos 8004 } push $N179b6590 Keymix { inputs 3 maskChannel bottomleft.alpha name Keymix83 xpos -461 ypos 8004 } set N179cf600 [stack 0] push $N179bf730 Dot { name Dot169 xpos -747 ypos 8098 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix97 xpos -637 ypos 8088 } push $N179cf600 Keymix { inputs 3 maskChannel bottomright.alpha name Keymix84 xpos -461 ypos 8088 } clone $C1645cca0 { xpos -461 ypos 8140 selected false } clone $C164535e0 { xpos -461 ypos 8247 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression43 xpos -461 ypos 8283 } clone $C16487210 { xpos -641 ypos 8283 selected false } push $N1796cac0 Merge2 { inputs 2 operation under name Merge19 xpos -908 ypos 8283 } Switch { inputs 2 which {{Switch28.which==0?(Expression42.height>=2?0:1):1}} name Switch29 label "INPUT \[value which]" xpos -1086 ypos 8277 } Dot { name Dot202 xpos -1052 ypos 8499 } push $N163af4a0 Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix65 xpos -1553 ypos -209 } clone $C1645cca0 { xpos -1553 ypos -12 selected false } clone $C164535e0 { xpos -1553 ypos 98 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression25 xpos -1553 ypos 145 } clone $C16487210 { xpos -1731 ypos 145 selected false } push $N163aacd0 Merge2 { inputs 2 operation under name Merge10 xpos -1987 ypos 145 } set N17a6bf40 [stack 0] Dot { name Dot200 xpos -2184 ypos 149 } push $N17a6bf40 Dot { name Dot120 xpos -1953 ypos 323 } set N17a9f310 [stack 0] Reformat { type scale scale 0.5 resize height filter Impulse name Reformat17 xpos -1860 ypos 319 } Dot { name Dot121 xpos -1506 ypos 323 } Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix66 xpos -1540 ypos 488 } clone $C1645cca0 { xpos -1540 ypos 666 selected false } clone $C164535e0 { xpos -1540 ypos 774 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression26 xpos -1540 ypos 809 } clone $C16487210 { xpos -1720 ypos 809 selected false } push $N17a9f310 Merge2 { inputs 2 operation under name Merge11 xpos -1987 ypos 809 } set N17afbba0 [stack 0] Switch { inputs 2 which {{Reformat17.height>=2?0:1}} name Switch6 label "INPUT \[value which]" xpos -2218 ypos 803 } push $N17afbba0 Dot { name Dot126 xpos -1953 ypos 971 } set N17b130c0 [stack 0] Reformat { type scale scale 0.25 resize height filter Impulse name Reformat18 xpos -1861 ypos 967 } Dot { name Dot127 xpos -1506 ypos 971 } Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix71 xpos -1540 ypos 1155 } clone $C1645cca0 { xpos -1540 ypos 1316 selected false } clone $C164535e0 { xpos -1540 ypos 1422 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression27 xpos -1540 ypos 1457 } clone $C16487210 { xpos -1720 ypos 1457 selected false } push $N17b130c0 Merge2 { inputs 2 operation under name Merge13 xpos -1987 ypos 1457 } set N17b6f890 [stack 0] Switch { inputs 2 which {{Switch6.which==0?(Reformat18.height>=2?0:1):1}} name Switch7 label "INPUT \[value which]" xpos -2218 ypos 1451 } push $N17b6f890 Dot { name Dot132 xpos -1953 ypos 1608 } set N17b86dc0 [stack 0] Reformat { type scale scale 0.125 resize height filter Impulse name Reformat19 xpos -1860 ypos 1604 } Dot { name Dot133 xpos -1506 ypos 1608 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix72 xpos -1540 ypos 1804 } clone $C1645cca0 { xpos -1540 ypos 1953 selected false } clone $C164535e0 { xpos -1540 ypos 2059 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression28 xpos -1540 ypos 2094 } clone $C16487210 { xpos -1720 ypos 2094 selected false } push $N17b86dc0 Merge2 { inputs 2 operation under name Merge14 xpos -1987 ypos 2094 } set N17bd20f0 [stack 0] Switch { inputs 2 which {{Switch7.which==0?(Reformat19.height>=2?0:1):1}} name Switch8 label "INPUT \[value which]" xpos -2218 ypos 2088 } push $N17bd20f0 Dot { name Dot138 xpos -1953 ypos 2233 } set N17bfaac0 [stack 0] Reformat { type scale scale 0.0625 resize height filter Impulse name Reformat20 xpos -1863 ypos 2229 } Dot { name Dot139 xpos -1506 ypos 2233 } Matrix { matrix { {1 1 0} {1 3 0} {0 0 0} } name Matrix76 xpos -1540 ypos 2401 } clone $C1645cca0 { xpos -1540 ypos 2580 selected false } clone $C164535e0 { xpos -1540 ypos 2684 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression29 xpos -1540 ypos 2719 } clone $C16487210 { xpos -1720 ypos 2719 selected false } push $N17bfaac0 Merge2 { inputs 2 operation under name Merge43 xpos -1987 ypos 2719 } set N17c290a0 [stack 0] Switch { inputs 2 which {{Switch8.which==0?(Reformat20.height>=2?0:1):1}} name Switch9 label "INPUT \[value which]" xpos -2218 ypos 2713 } push $N17c290a0 Dot { name Dot144 xpos -1953 ypos 2906 } set N17c63a30 [stack 0] Reformat { type scale scale 0.03125 resize height filter Impulse name Reformat21 xpos -1861 ypos 2902 } Dot { name Dot145 xpos -1506 ypos 2906 } Matrix { matrix { {0 1 1} {0 3 1} {0 0 0} } name Matrix73 xpos -1540 ypos 3081 } clone $C1645cca0 { xpos -1540 ypos 3253 selected false } clone $C164535e0 { xpos -1540 ypos 3357 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression30 xpos -1540 ypos 3392 } clone $C16487210 { xpos -1720 ypos 3392 selected false } push $N17c63a30 Merge2 { inputs 2 operation under name Merge44 xpos -1987 ypos 3392 } set N17ccb040 [stack 0] Switch { inputs 2 which {{Switch9.which==0?(Reformat21.height>=2?0:1):1}} name Switch10 label "INPUT \[value which]" xpos -2218 ypos 3386 } push $N17ccb040 Dot { name Dot150 xpos -1953 ypos 3568 } set N17c9cae0 [stack 0] Reformat { type scale scale 0.015625 resize height filter Impulse name Reformat22 xpos -1862 ypos 3564 } Dot { name Dot151 xpos -1506 ypos 3568 } Matrix { matrix { {0 0 0} {1 3 0} {1 1 0} } name Matrix74 xpos -1540 ypos 3736 } clone $C1645cca0 { xpos -1540 ypos 3915 selected false } clone $C164535e0 { xpos -1540 ypos 4019 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression31 xpos -1540 ypos 4054 } clone $C16487210 { xpos -1720 ypos 4054 selected false } push $N17c9cae0 Merge2 { inputs 2 operation under name Merge45 xpos -1987 ypos 4054 } set N17d2d680 [stack 0] Switch { inputs 2 which {{Switch10.which==0?(Reformat22.height>=2?0:1):1}} name Switch11 label "INPUT \[value which]" xpos -2218 ypos 4048 } push $N17d2d680 Dot { name Dot156 xpos -1953 ypos 4242 } set N17d56240 [stack 0] Reformat { type scale scale 0.0078125 resize height filter Impulse name Reformat23 xpos -1876 ypos 4238 } Dot { name Dot157 xpos -1506 ypos 4242 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix75 xpos -1540 ypos 4409 } clone $C1645cca0 { xpos -1540 ypos 4588 selected false } clone $C164535e0 { xpos -1540 ypos 4692 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression32 xpos -1540 ypos 4728 } clone $C16487210 { xpos -1723 ypos 4728 selected false } push $N17d56240 Merge2 { inputs 2 operation under name Merge46 xpos -1987 ypos 4728 } set N17db2aa0 [stack 0] Switch { inputs 2 which {{Switch11.which==0?(Reformat23.height>=2?0:1):1}} name Switch12 label "INPUT \[value which]" xpos -2218 ypos 4722 } push $N17db2aa0 Dot { name Dot112 xpos -1953 ypos 4908 } set N17d84400 [stack 0] Reformat { type scale scale 0.00390625 resize height filter Impulse name Reformat11 xpos -1862 ypos 4904 } Dot { name Dot116 xpos -1506 ypos 4908 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix67 xpos -1540 ypos 5076 } clone $C1645cca0 { xpos -1540 ypos 5255 selected false } clone $C164535e0 { xpos -1540 ypos 5368 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression34 xpos -1540 ypos 5394 } clone $C16487210 { xpos -1723 ypos 5394 selected false } push $N17d84400 Merge2 { inputs 2 operation under name Merge47 xpos -1987 ypos 5394 } set N17e26800 [stack 0] Switch { inputs 2 which {{Switch12.which==0?(Reformat11.height>=2?0:1):1}} name Switch13 label "INPUT \[value which]" xpos -2218 ypos 5388 } push $N17e26800 Dot { name Dot117 xpos -1953 ypos 5642 } set N17e14d80 [stack 0] Reformat { type scale scale 0.001953125 resize height filter Impulse name Reformat13 xpos -1868 ypos 5638 } Dot { name Dot118 xpos -1506 ypos 5642 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix68 xpos -1540 ypos 5810 } clone $C1645cca0 { xpos -1540 ypos 5989 selected false } clone $C164535e0 { xpos -1540 ypos 6093 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression35 xpos -1540 ypos 6128 } clone $C16487210 { xpos -1723 ypos 6128 selected false } push $N17e14d80 Merge2 { inputs 2 operation under name Merge48 xpos -1987 ypos 6128 } set N17ea3ab0 [stack 0] Switch { inputs 2 which {{Switch13.which==0?(Reformat13.height>=2?0:1):1}} name Switch14 label "INPUT \[value which]" xpos -2218 ypos 6122 } push $N17ea3ab0 Dot { name Dot119 xpos -1953 ypos 6344 } set N17ebb000 [stack 0] Reformat { type scale scale 0.00097656 resize height filter Impulse name Reformat10 xpos -1879 ypos 6340 } Dot { name Dot122 xpos -1506 ypos 6344 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix69 xpos -1540 ypos 6512 } clone $C1645cca0 { xpos -1540 ypos 6691 selected false } clone $C164535e0 { xpos -1540 ypos 6795 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression36 xpos -1540 ypos 6830 } clone $C16487210 { xpos -1723 ypos 6830 selected false } push $N17ebb000 Merge2 { inputs 2 operation under name Merge49 xpos -1987 ypos 6830 } set N17ee91a0 [stack 0] Switch { inputs 2 which {{Switch14.which==0?(Reformat10.height>=2?0:1):1}} name Switch15 label "INPUT \[value which]" xpos -2218 ypos 6824 } push $N17ee91a0 Dot { name Dot123 xpos -1953 ypos 7065 } set N17f23be0 [stack 0] Reformat { type scale scale 0.00048828 resize height filter Impulse name Reformat14 xpos -1887 ypos 7061 } Dot { name Dot124 xpos -1506 ypos 7065 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix70 xpos -1540 ypos 7233 } clone $C1645cca0 { xpos -1540 ypos 7412 selected false } clone $C164535e0 { xpos -1540 ypos 7515 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression37 xpos -1540 ypos 7551 } clone $C16487210 { xpos -1723 ypos 7551 selected false } push $N17f23be0 Merge2 { inputs 2 operation under name Merge50 xpos -1987 ypos 7551 } set N17f8b5c0 [stack 0] Switch { inputs 2 which {{Switch15.which==0?(Reformat14.height>=2?0:1):1}} name Switch16 label "INPUT \[value which]" xpos -2218 ypos 7545 } push $N17f8b5c0 Dot { name Dot125 xpos -1953 ypos 7797 } set N17fa2b60 [stack 0] Reformat { type scale scale 0.00024414 resize height filter Impulse name Reformat12 xpos -1878 ypos 7793 } Dot { name Dot128 xpos -1506 ypos 7797 } Matrix { matrix { {0 0 0} {0 3 1} {0 1 1} } name Matrix77 xpos -1540 ypos 7965 } clone $C1645cca0 { xpos -1540 ypos 8144 selected false } clone $C164535e0 { xpos -1540 ypos 8248 selected false } Expression { expr0 a>0?r/a:0 expr1 a>0?g/a:0 expr2 a>0?b/a:0 expr3 a>0?a/a:0 name Expression38 xpos -1540 ypos 8283 } clone $C16487210 { xpos -1723 ypos 8283 selected false } push $N17fa2b60 Merge2 { inputs 2 operation under name Merge21 xpos -1987 ypos 8283 } Switch { inputs 2 which {{Switch16.which==0?(Reformat12.height>=2?0:1):1}} name Switch17 label "INPUT \[value which]" xpos -2218 ypos 8277 } Dot { name Dot162 xpos -2184 ypos 8499 } Switch { inputs 3 which {{MECfiller.mode}} name Switch5 label "INPUT \[value which]" xpos -2218 ypos 9035 } Merge2 { inputs 2 name Merge15 xpos -2218 ypos 9172 disable {{1-parent.axismultipliercheck}} } Dot { name Dot1 xpos -2184 ypos 9283 } Output { name Output1 xpos -2218 ypos 9367 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_MagnitudeVector2.gizmo ================================================ Group { name MagnitudeVector2_ help "Calculate the magnitude (scalar) of an input Vector2." addUserKnob {20 main_tab l "Magnitude Vector2"} addUserKnob {41 in l "Vector B Layer" t "Layer containing the vector information for input B" T vector_layer.in} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vectorB xpos 0 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 108 } set N75db0d0 [stack 0] Shuffle { name vector_layer xpos 140 ypos 104 } Remove { operation keep channels rgba name Remove1 xpos 140 ypos 130 } Expression { channel0 rgba expr0 sqrt((r*r)+(g*g)) channel2 {-rgba.red -rgba.green -rgba.blue none} channel3 {none none none -rgba.alpha} name Mag2 xpos 140 ypos 218 } Dot { name Dot2 tile_color 0xcccccc00 xpos 174 ypos 364 } push $N75db0d0 ShuffleCopy { inputs 2 in2 none red red green green blue blue out {{{parent.vector_layer.in}}} name ShuffleCopy1 xpos 0 ypos 360 } Output { name Output1 xpos 0 ypos 506 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_MagnitudeVector3.gizmo ================================================ Group { name Magnitude_Vector3_ help "Calculate the magnitude (scalar) of an input Vector3." addUserKnob {20 main_tab l "Magnitude Vector3"} addUserKnob {41 in l "Vector B Layer" t "Layer containing the vector information for input B" T vector_layer.in} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vectorB xpos 0 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 108 } set N3f91a00 [stack 0] Shuffle { name vector_layer xpos 140 ypos 104 } Remove { operation keep channels rgba name Remove1 xpos 140 ypos 130 } Expression { channel0 rgba expr0 sqrt((r*r)+(g*g)+(b*b)) channel2 {-rgba.red -rgba.green -rgba.blue none} channel3 {none none none -rgba.alpha} name Mag3 xpos 140 ypos 227 } Dot { name Dot2 tile_color 0xcccccc00 xpos 174 ypos 364 } push $N3f91a00 ShuffleCopy { inputs 2 in2 none red red green green blue blue out {{{parent.vector_layer.in}}} name ShuffleCopy1 xpos 0 ypos 360 } Output { name Output1 xpos 0 ypos 506 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Matrix4x4Math.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { inputs 2 name Matrix4x4Math tile_color 0x9c0000ff selected true addUserKnob {20 MatrixMult4x4} addUserKnob {4 output l Output t "Add (A+B)\nSub (A-B)\nMult (AB)" M {Add Sub Mult "" ""}} output Mult addUserKnob {4 chooseMatrixA l "Choose Matrix A" M {local world ""}} addUserKnob {41 matrixA l "Matrix A" T MatrixA.matrix} addUserKnob {26 ""} addUserKnob {4 chooseMatrixB l "Choose Matrix B" M {local world}} addUserKnob {41 matrixB l "Matrix B" T MatrixB.matrix} addUserKnob {26 result l Result:} addUserKnob {41 matrixC l "Matrix C" T Matrix_Result.matrix} } Input { inputs 0 name InputA label "\[value this.number]" xpos -656 ypos -308 number 1 } Matrix { matrix { {{"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"}} {{"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"}} {{"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"}} {{"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"}} } name MatrixA xpos -656 ypos -218 } Input { inputs 0 name InputB label "\[value this.number]" xpos -544 ypos -310 } Matrix { matrix { {{"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"}} {{"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"}} {{"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"}} {{"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"}} } name MatrixB xpos -544 ypos -220 } Matrix { inputs 0 matrix { {{MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix}} {{MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix}} {{MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix}} {{MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix}} } name MatrixC_Add xpos -692 ypos -107 } Matrix { inputs 0 matrix { {{MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix}} {{MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix}} {{MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix}} {{MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix}} } name MatrixC_Sub xpos -572 ypos -104 } Matrix { inputs 0 matrix { {{"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"}} {{"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"}} {{"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"}} {{"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"}} } name Matrix_Result selected true xpos -587 } Output { name Output1 xpos -587 ypos 61 } Matrix { inputs 0 matrix { {{(MatrixA.matrix.0*MatrixB.matrix.0)+(MatrixA.matrix.1*MatrixB.matrix.4)+(MatrixA.matrix.2*MatrixB.matrix.8)+(MatrixA.matrix.3*MatrixB.matrix.12)} {(MatrixA.matrix.0*MatrixB.matrix.1)+(MatrixA.matrix.1*MatrixB.matrix.5)+(MatrixA.matrix.2*MatrixB.matrix.9)+(MatrixA.matrix.3*MatrixB.matrix.13)} {(MatrixA.matrix.0*MatrixB.matrix.2)+(MatrixA.matrix.1*MatrixB.matrix.6)+(MatrixA.matrix.2*MatrixB.matrix.10)+(MatrixA.matrix.3*MatrixB.matrix.14)} {(MatrixA.matrix.0*MatrixB.matrix.3)+(MatrixA.matrix.1*MatrixB.matrix.7)+(MatrixA.matrix.2*MatrixB.matrix.11)+(MatrixA.matrix.3*MatrixB.matrix.15)}} {{(MatrixA.matrix.4*MatrixB.matrix.0)+(MatrixA.matrix.5*MatrixB.matrix.4)+(MatrixA.matrix.6*MatrixB.matrix.8)+(MatrixA.matrix.7*MatrixB.matrix.12)} {(MatrixA.matrix.4*MatrixB.matrix.1)+(MatrixA.matrix.5*MatrixB.matrix.5)+(MatrixA.matrix.6*MatrixB.matrix.9)+(MatrixA.matrix.7*MatrixB.matrix.13)} {(MatrixA.matrix.4*MatrixB.matrix.2)+(MatrixA.matrix.5*MatrixB.matrix.6)+(MatrixA.matrix.6*MatrixB.matrix.10)+(MatrixA.matrix.7*MatrixB.matrix.14)} {(MatrixA.matrix.4*MatrixB.matrix.3)+(MatrixA.matrix.5*MatrixB.matrix.7)+(MatrixA.matrix.6*MatrixB.matrix.11)+(MatrixA.matrix.7*MatrixB.matrix.15)}} {{(MatrixA.matrix.8*MatrixB.matrix.0)+(MatrixA.matrix.9*MatrixB.matrix.4)+(MatrixA.matrix.10*MatrixB.matrix.8)+(MatrixA.matrix.11*MatrixB.matrix.12)} {(MatrixA.matrix.8*MatrixB.matrix.1)+(MatrixA.matrix.9*MatrixB.matrix.5)+(MatrixA.matrix.10*MatrixB.matrix.9)+(MatrixA.matrix.11*MatrixB.matrix.13)} {(MatrixA.matrix.8*MatrixB.matrix.2)+(MatrixA.matrix.9*MatrixB.matrix.6)+(MatrixA.matrix.10*MatrixB.matrix.10)+(MatrixA.matrix.11*MatrixB.matrix.14)} {(MatrixA.matrix.8*MatrixB.matrix.3)+(MatrixA.matrix.9*MatrixB.matrix.7)+(MatrixA.matrix.10*MatrixB.matrix.11)+(MatrixA.matrix.11*MatrixB.matrix.15)}} {{(MatrixA.matrix.12*MatrixB.matrix.0)+(MatrixA.matrix.13*MatrixB.matrix.4)+(MatrixA.matrix.14*MatrixB.matrix.8)+(MatrixA.matrix.15*MatrixB.matrix.12)} {(MatrixA.matrix.12*MatrixB.matrix.1)+(MatrixA.matrix.13*MatrixB.matrix.5)+(MatrixA.matrix.14*MatrixB.matrix.9)+(MatrixA.matrix.15*MatrixB.matrix.13)} {(MatrixA.matrix.12*MatrixB.matrix.2)+(MatrixA.matrix.13*MatrixB.matrix.6)+(MatrixA.matrix.14*MatrixB.matrix.10)+(MatrixA.matrix.15*MatrixB.matrix.14)} {(MatrixA.matrix.12*MatrixB.matrix.3)+(MatrixA.matrix.13*MatrixB.matrix.7)+(MatrixA.matrix.14*MatrixB.matrix.11)+(MatrixA.matrix.15*MatrixB.matrix.15)}} } name MatrixC_Mult xpos -445 ypos -105 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Matrix4x4_Inverse.gizmo ================================================ Group { name Matrix4x4_Inverse tile_color 0x9c0000ff selected true addUserKnob {20 MatrixInverse} addUserKnob {4 inputMatrixType l "Input Matrix From:" M {local world "" "" ""}} inputMatrixType world addUserKnob {41 inputMatrixA l "Input Matrix A" T MatrixA.matrix} addUserKnob {26 result l Result} addUserKnob {41 matrixInverse l "Matrix A Inverse" T Matrix_InverseResult.matrix} addUserKnob {26 exportText l "Export Inverse Axis"} addUserKnob {26 text l " " T "FrameRange"} addUserKnob {22 createInverseAxisLinked l "FrameRange (Linked)" T "mi = nuke.thisNode()\nmiX = mi.xpos()\nmiY = mi.ypos()\nmiName = mi.name()\nmiInputName = mi.input(0).name()\n\nwith nuke.root():\n axis = nuke.createNode('Axis2')\n axis.setName('Axis_Inverse')\n axis.setXpos(miX+10)\n axis.setYpos(miY+80)\n axis.setInput(0, None)\n axis.knob('tile_color').setValue(1799395071)\n axis.knob('label').setValue('\{\} Inverse'.format(miInputName))\n axis.knob('useMatrix').setValue(1)\n axis.knob('matrix').setExpression('\{\}.matrixInverse'.format(miName))\n" +STARTLINE} addUserKnob {22 createInverseAxisBaked l "FrameRange (Baked)" -STARTLINE T "mi = nuke.thisNode()\nmiX = mi.xpos()\nmiY = mi.ypos()\nmiName = mi.name()\nmi_matrixInverse = mi.knob('matrixInverse')\nmiInputName = mi.input(0).name()\n\nwith nuke.root():\n axis = nuke.createNode('Axis2')\n axis.setName('Axis_Inverse')\n axisName = axis.name()\n axis.setXpos(miX+10)\n axis.setYpos(miY+80)\n axis.setInput(0, None)\n axis.knob('tile_color').setValue(1799395071)\n axis.knob('label').setValue('\{\} Inverse'.format(miInputName))\n axis.knob('useMatrix').setValue(1)\n axisMatrix= axis.knob('matrix')\n \n # Grab first and last frame from root\n first_frame = int(nuke.Root()\['first_frame'].getValue())\n last_frame = int(nuke.Root()\['last_frame'].getValue())\n \n # Create user input panel\n p = nuke.Panel(\"Execute on FrameRange\")\n p.addSingleLineInput('First Frame', first_frame)\n p.addSingleLineInput('Last Frame', last_frame)\n p.addSingleLineInput('Increment', 1)\n \n if p.show():\n # Define first, last, increment from user input panel\n ff = str(int(p.value(\"First Frame\")))\n lf = str(int(p.value(\"Last Frame\")))\n i = str(int(p.value(\"Increment\")))\n \n for item in range(16):\n num = str(item)\n nuke.animation(\"\{\}.matrix.\{\}\".format(axisName, num) , \"generate\", (ff, lf, i, 'y', \"\{\}.matrixInverse.\{\}\".format(miName, num) ) )\n "} addUserKnob {26 text_1 l " " T "Static Frame"} addUserKnob {3 refFrame l "Ref Frame"} refFrame 1001 addUserKnob {22 setToCurrentFrame l "Set to Current Frame" -STARTLINE T "n = nuke.thisNode()\nref = n.knob('refFrame')\nframe = nuke.frame()\n\nref.setValue(frame)"} addUserKnob {22 staticFrameExportLinked l "Static Frame (Linked)" T "mi = nuke.thisNode()\nmiX = mi.xpos()\nmiY = mi.ypos()\nmiName = mi.name()\nmiInputName = mi.input(0).name()\nrefFrame = int(mi.knob('refFrame').value())\n\nwith nuke.root():\n axis = nuke.createNode('Axis2')\n axis.setName('Axis_Inverse')\n axis.setXpos(miX+10)\n axis.setYpos(miY+80)\n axis.setInput(0, None)\n axis.knob('tile_color').setValue(1799395071)\n axis.knob('label').setValue('\{\} Inverse\\nRef Frame: \{\}'.format(miInputName, refFrame))\n axis.knob('useMatrix').setValue(1)\n axis.knob('matrix').setExpression('\{\}.matrixInverse(\{\})'.format(miName, refFrame))" +STARTLINE} addUserKnob {22 staticFrameExportBaked l "Static Frame (Baked)" -STARTLINE T "mi = nuke.thisNode()\nmiX = mi.xpos()\nmiY = mi.ypos()\nmiName = mi.name()\nmi_matrixInverse = mi.knob('matrixInverse')\nmiInputName = mi.input(0).name()\nrefFrame = str(int(mi.knob('refFrame').value()))\n\nwith nuke.root():\n axis = nuke.createNode('Axis2')\n axis.setName('Axis_Inverse')\n axisName = axis.name()\n axis.setXpos(miX+10)\n axis.setYpos(miY+80)\n axis.setInput(0, None)\n axis.knob('tile_color').setValue(1799395071)\n axis.knob('label').setValue('\{\} Inverse\\nRef Frame: \{\}'.format(miInputName, refFrame))\n axis.knob('useMatrix').setValue(1)\n axisMatrix= axis.knob('matrix')\n \n for item in range(16):\n num = str(item)\n nuke.animation(\"\{\}.matrix.\{\}\".format(axisName, num) , \"generate\", (refFrame, refFrame, '1', 'y', \"\{\}.matrixInverse.\{\}\".format(miName, num) ) )\n axisMatrix.clearAnimated()"} addUserKnob {20 checkResult_2 l "Check Result: Identity Matrix"} addUserKnob {41 matrixResultIdentity l "Input Inverse Result:" T Matrix4x4Math.matrixC} } Input { inputs 0 name Input xpos -544 ypos -329 } Matrix { matrix { {{"inputMatrixType == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"inputMatrixType == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"inputMatrixType == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"inputMatrixType == 0 ? parent.input0.matrix : parent.input0.world_matrix"}} {{"inputMatrixType == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"inputMatrixType == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"inputMatrixType == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"inputMatrixType == 0 ? parent.input0.matrix : parent.input0.world_matrix"}} {{"inputMatrixType == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"inputMatrixType == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"inputMatrixType == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"inputMatrixType == 0 ? parent.input0.matrix : parent.input0.world_matrix"}} {{"inputMatrixType == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"inputMatrixType == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"inputMatrixType == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"inputMatrixType == 0 ? parent.input0.matrix : parent.input0.world_matrix"}} } name MatrixA xpos -544 ypos -288 } set N47f88800 [stack 0] NoOp { name DeterminantA xpos -544 ypos -221 addUserKnob {20 User} addUserKnob {7 determinant l "Matrix A Determinant" R -1 1} determinant {{"+MatrixA.matrix.0*MatrixA.matrix.5*MatrixA.matrix.10*MatrixA.matrix.15\n+MatrixA.matrix.0*MatrixA.matrix.6*MatrixA.matrix.11*MatrixA.matrix.13\n+MatrixA.matrix.0*MatrixA.matrix.7*MatrixA.matrix.9*MatrixA.matrix.14\n-MatrixA.matrix.0*MatrixA.matrix.7*MatrixA.matrix.10*MatrixA.matrix.13\n-MatrixA.matrix.0*MatrixA.matrix.6*MatrixA.matrix.9*MatrixA.matrix.15\n-MatrixA.matrix.0*MatrixA.matrix.5*MatrixA.matrix.11*MatrixA.matrix.14\n\n-MatrixA.matrix.1*MatrixA.matrix.4*MatrixA.matrix.10*MatrixA.matrix.15\n-MatrixA.matrix.2*MatrixA.matrix.4*MatrixA.matrix.11*MatrixA.matrix.13\n-MatrixA.matrix.3*MatrixA.matrix.4*MatrixA.matrix.9*MatrixA.matrix.14\n+MatrixA.matrix.3*MatrixA.matrix.4*MatrixA.matrix.10*MatrixA.matrix.13\n+MatrixA.matrix.2*MatrixA.matrix.4*MatrixA.matrix.9*MatrixA.matrix.15\n+MatrixA.matrix.1*MatrixA.matrix.4*MatrixA.matrix.11*MatrixA.matrix.14\n\n+MatrixA.matrix.1*MatrixA.matrix.6*MatrixA.matrix.8*MatrixA.matrix.15\n+MatrixA.matrix.2*MatrixA.matrix.7*MatrixA.matrix.8*MatrixA.matrix.13\n+MatrixA.matrix.3*MatrixA.matrix.5*MatrixA.matrix.8*MatrixA.matrix.14\n-MatrixA.matrix.3*MatrixA.matrix.6*MatrixA.matrix.8*MatrixA.matrix.13\n-MatrixA.matrix.2*MatrixA.matrix.5*MatrixA.matrix.8*MatrixA.matrix.15\n-MatrixA.matrix.1*MatrixA.matrix.7*MatrixA.matrix.8*MatrixA.matrix.14\n\n-MatrixA.matrix.1*MatrixA.matrix.6*MatrixA.matrix.11*MatrixA.matrix.12\n-MatrixA.matrix.2*MatrixA.matrix.7*MatrixA.matrix.9*MatrixA.matrix.12\n-MatrixA.matrix.3*MatrixA.matrix.5*MatrixA.matrix.10*MatrixA.matrix.12\n+MatrixA.matrix.3*MatrixA.matrix.6*MatrixA.matrix.9*MatrixA.matrix.12\n+MatrixA.matrix.2*MatrixA.matrix.5*MatrixA.matrix.11*MatrixA.matrix.12\n+MatrixA.matrix.1*MatrixA.matrix.7*MatrixA.matrix.10*MatrixA.matrix.12"}} addUserKnob {7 oneOver l "1 / Determinant"} oneOver {{1/determinant}} } Matrix { inputs 0 matrix { {{"+MatrixA.matrix.5*MatrixA.matrix.10*MatrixA.matrix.15\n+MatrixA.matrix.6*MatrixA.matrix.11*MatrixA.matrix.13\n+MatrixA.matrix.7*MatrixA.matrix.9*MatrixA.matrix.14\n-MatrixA.matrix.7*MatrixA.matrix.10*MatrixA.matrix.13\n-MatrixA.matrix.6*MatrixA.matrix.9*MatrixA.matrix.15\n-MatrixA.matrix.5*MatrixA.matrix.11*MatrixA.matrix.14"} {"-MatrixA.matrix.1*MatrixA.matrix.10*MatrixA.matrix.15\n-MatrixA.matrix.2*MatrixA.matrix.11*MatrixA.matrix.13\n-MatrixA.matrix.3*MatrixA.matrix.9*MatrixA.matrix.14\n+MatrixA.matrix.3*MatrixA.matrix.10*MatrixA.matrix.13\n+MatrixA.matrix.2*MatrixA.matrix.9*MatrixA.matrix.15\n+MatrixA.matrix.1*MatrixA.matrix.11*MatrixA.matrix.14"} {"+MatrixA.matrix.1*MatrixA.matrix.6*MatrixA.matrix.15\n+MatrixA.matrix.2*MatrixA.matrix.7*MatrixA.matrix.13\n+MatrixA.matrix.3*MatrixA.matrix.5*MatrixA.matrix.14\n-MatrixA.matrix.3*MatrixA.matrix.6*MatrixA.matrix.13\n-MatrixA.matrix.2*MatrixA.matrix.5*MatrixA.matrix.15\n-MatrixA.matrix.1*MatrixA.matrix.7*MatrixA.matrix.14"} {"-MatrixA.matrix.1*MatrixA.matrix.6*MatrixA.matrix.11\n-MatrixA.matrix.2*MatrixA.matrix.7*MatrixA.matrix.9\n-MatrixA.matrix.3*MatrixA.matrix.5*MatrixA.matrix.10\n+MatrixA.matrix.3*MatrixA.matrix.6*MatrixA.matrix.9\n+MatrixA.matrix.2*MatrixA.matrix.5*MatrixA.matrix.11\n+MatrixA.matrix.1*MatrixA.matrix.7*MatrixA.matrix.10"}} {{"-MatrixA.matrix.4*MatrixA.matrix.10*MatrixA.matrix.15\n-MatrixA.matrix.6*MatrixA.matrix.11*MatrixA.matrix.12\n-MatrixA.matrix.7*MatrixA.matrix.11*MatrixA.matrix.14\n+MatrixA.matrix.7*MatrixA.matrix.10*MatrixA.matrix.12\n+MatrixA.matrix.6*MatrixA.matrix.8*MatrixA.matrix.15\n+MatrixA.matrix.4*MatrixA.matrix.11*MatrixA.matrix.14"} {"+MatrixA.matrix.0*MatrixA.matrix.10*MatrixA.matrix.15\n+MatrixA.matrix.2*MatrixA.matrix.11*MatrixA.matrix.12\n+MatrixA.matrix.3*MatrixA.matrix.8*MatrixA.matrix.14\n-MatrixA.matrix.3*MatrixA.matrix.10*MatrixA.matrix.12\n-MatrixA.matrix.2*MatrixA.matrix.8*MatrixA.matrix.15\n-MatrixA.matrix.0*MatrixA.matrix.11*MatrixA.matrix.14"} {"-MatrixA.matrix.0*MatrixA.matrix.6*MatrixA.matrix.15\n-MatrixA.matrix.2*MatrixA.matrix.7*MatrixA.matrix.12\n-MatrixA.matrix.3*MatrixA.matrix.4*MatrixA.matrix.14\n+MatrixA.matrix.3*MatrixA.matrix.6*MatrixA.matrix.12\n+MatrixA.matrix.2*MatrixA.matrix.4*MatrixA.matrix.15\n+MatrixA.matrix.0*MatrixA.matrix.7*MatrixA.matrix.14"} {"+MatrixA.matrix.0*MatrixA.matrix.6*MatrixA.matrix.11\n+MatrixA.matrix.2*MatrixA.matrix.7*MatrixA.matrix.8\n+MatrixA.matrix.3*MatrixA.matrix.4*MatrixA.matrix.10\n-MatrixA.matrix.3*MatrixA.matrix.6*MatrixA.matrix.8\n-MatrixA.matrix.2*MatrixA.matrix.4*MatrixA.matrix.11\n-MatrixA.matrix.0*MatrixA.matrix.7*MatrixA.matrix.10"}} {{"+MatrixA.matrix.4*MatrixA.matrix.9*MatrixA.matrix.15\n+MatrixA.matrix.5*MatrixA.matrix.11*MatrixA.matrix.12\n+MatrixA.matrix.7*MatrixA.matrix.8*MatrixA.matrix.13\n-MatrixA.matrix.7*MatrixA.matrix.9*MatrixA.matrix.12\n-MatrixA.matrix.5*MatrixA.matrix.8*MatrixA.matrix.15\n-MatrixA.matrix.4*MatrixA.matrix.11*MatrixA.matrix.13"} {"-MatrixA.matrix.0*MatrixA.matrix.9*MatrixA.matrix.15\n-MatrixA.matrix.1*MatrixA.matrix.11*MatrixA.matrix.12\n-MatrixA.matrix.3*MatrixA.matrix.8*MatrixA.matrix.13\n+MatrixA.matrix.3*MatrixA.matrix.9*MatrixA.matrix.12\n+MatrixA.matrix.1*MatrixA.matrix.8*MatrixA.matrix.15\n+MatrixA.matrix.0*MatrixA.matrix.11*MatrixA.matrix.13"} {"+MatrixA.matrix.0*MatrixA.matrix.5*MatrixA.matrix.15\n+MatrixA.matrix.1*MatrixA.matrix.7*MatrixA.matrix.12\n+MatrixA.matrix.3*MatrixA.matrix.4*MatrixA.matrix.13\n-MatrixA.matrix.3*MatrixA.matrix.5*MatrixA.matrix.12\n-MatrixA.matrix.1*MatrixA.matrix.4*MatrixA.matrix.15\n-MatrixA.matrix.0*MatrixA.matrix.7*MatrixA.matrix.13"} {"-MatrixA.matrix.0*MatrixA.matrix.5*MatrixA.matrix.11\n-MatrixA.matrix.1*MatrixA.matrix.7*MatrixA.matrix.8\n-MatrixA.matrix.3*MatrixA.matrix.4*MatrixA.matrix.9\n+MatrixA.matrix.3*MatrixA.matrix.5*MatrixA.matrix.8\n+MatrixA.matrix.1*MatrixA.matrix.4*MatrixA.matrix.11\n+MatrixA.matrix.0*MatrixA.matrix.7*MatrixA.matrix.9"}} {{"-MatrixA.matrix.4*MatrixA.matrix.9*MatrixA.matrix.14\n-MatrixA.matrix.5*MatrixA.matrix.10*MatrixA.matrix.12\n-MatrixA.matrix.6*MatrixA.matrix.8*MatrixA.matrix.13\n+MatrixA.matrix.6*MatrixA.matrix.9*MatrixA.matrix.12\n+MatrixA.matrix.5*MatrixA.matrix.8*MatrixA.matrix.14\n+MatrixA.matrix.4*MatrixA.matrix.10*MatrixA.matrix.13"} {"+MatrixA.matrix.0*MatrixA.matrix.9*MatrixA.matrix.14\n+MatrixA.matrix.1*MatrixA.matrix.10*MatrixA.matrix.12\n+MatrixA.matrix.2*MatrixA.matrix.8*MatrixA.matrix.13\n-MatrixA.matrix.2*MatrixA.matrix.9*MatrixA.matrix.12\n-MatrixA.matrix.1*MatrixA.matrix.8*MatrixA.matrix.14\n-MatrixA.matrix.0*MatrixA.matrix.10*MatrixA.matrix.13"} {"-MatrixA.matrix.0*MatrixA.matrix.5*MatrixA.matrix.14\n-MatrixA.matrix.1*MatrixA.matrix.6*MatrixA.matrix.12\n-MatrixA.matrix.2*MatrixA.matrix.4*MatrixA.matrix.13\n+MatrixA.matrix.2*MatrixA.matrix.5*MatrixA.matrix.12\n+MatrixA.matrix.1*MatrixA.matrix.4*MatrixA.matrix.14\n+MatrixA.matrix.0*MatrixA.matrix.6*MatrixA.matrix.13"} {"+MatrixA.matrix.0*MatrixA.matrix.5*MatrixA.matrix.10\n+MatrixA.matrix.1*MatrixA.matrix.6*MatrixA.matrix.8\n+MatrixA.matrix.2*MatrixA.matrix.4*MatrixA.matrix.9\n-MatrixA.matrix.2*MatrixA.matrix.5*MatrixA.matrix.8\n-MatrixA.matrix.1*MatrixA.matrix.4*MatrixA.matrix.10\n-MatrixA.matrix.0*MatrixA.matrix.6*MatrixA.matrix.9"}} } name MatrixA_Adjugate xpos -390 ypos -287 } push $N47f88800 Matrix { inputs 0 matrix { {{parent.MatrixA_Adjugate.matrix*parent.DeterminantA.oneOver} {parent.MatrixA_Adjugate.matrix*parent.DeterminantA.oneOver} {parent.MatrixA_Adjugate.matrix*parent.DeterminantA.oneOver} {parent.MatrixA_Adjugate.matrix*parent.DeterminantA.oneOver}} {{parent.MatrixA_Adjugate.matrix*parent.DeterminantA.oneOver} {parent.MatrixA_Adjugate.matrix*parent.DeterminantA.oneOver} {parent.MatrixA_Adjugate.matrix*parent.DeterminantA.oneOver} {parent.MatrixA_Adjugate.matrix*parent.DeterminantA.oneOver}} {{parent.MatrixA_Adjugate.matrix*parent.DeterminantA.oneOver} {parent.MatrixA_Adjugate.matrix*parent.DeterminantA.oneOver} {parent.MatrixA_Adjugate.matrix*parent.DeterminantA.oneOver} {parent.MatrixA_Adjugate.matrix*parent.DeterminantA.oneOver}} {{parent.MatrixA_Adjugate.matrix*parent.DeterminantA.oneOver} {parent.MatrixA_Adjugate.matrix*parent.DeterminantA.oneOver} {parent.MatrixA_Adjugate.matrix*parent.DeterminantA.oneOver} {parent.MatrixA_Adjugate.matrix*parent.DeterminantA.oneOver}} } name Matrix_InverseResult xpos -391 ypos -225 } Group { inputs 2 name Matrix4x4Math tile_color 0x9c0000ff xpos -391 ypos -146 addUserKnob {20 MatrixMult4x4} addUserKnob {4 output l Output t "Add (A+B)\nSub (A-B)\nMult (AB)" M {Add Sub Mult "" ""}} output Mult addUserKnob {4 chooseMatrixA l "Choose Matrix A" M {local world ""}} addUserKnob {41 matrixA l "Matrix A" T MatrixA.matrix} addUserKnob {26 ""} addUserKnob {4 chooseMatrixB l "Choose Matrix B" M {local world}} addUserKnob {41 matrixB l "Matrix B" T MatrixB.matrix} addUserKnob {26 result l Result:} addUserKnob {41 matrixC l "Matrix C" T Matrix_Result.matrix} } Input { inputs 0 name InputA label "\[value this.number]" xpos -656 ypos -308 number 1 } Matrix { matrix { {{"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"}} {{"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"}} {{"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"}} {{"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"} {"chooseMatrixA == 0 ? parent.input1.matrix : parent.input1.world_matrix"}} } name MatrixA xpos -656 ypos -218 } Input { inputs 0 name InputB label "\[value this.number]" xpos -544 ypos -310 } Matrix { matrix { {{"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"}} {{"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"}} {{"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"}} {{"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"} {"chooseMatrixB == 0 ? parent.input0.matrix : parent.input0.world_matrix"}} } name MatrixB xpos -544 ypos -220 } Matrix { inputs 0 matrix { {{MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix}} {{MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix}} {{MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix}} {{MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix} {MatrixA.matrix+MatrixB.matrix}} } name MatrixC_Add xpos -692 ypos -107 } Matrix { inputs 0 matrix { {{MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix}} {{MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix}} {{MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix}} {{MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix} {MatrixA.matrix-MatrixB.matrix}} } name MatrixC_Sub xpos -572 ypos -104 } Matrix { inputs 0 matrix { {{"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"}} {{"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"}} {{"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"}} {{"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"} {"output == 0 ? MatrixC_Add.matrix : output == 1 ? MatrixC_Sub.matrix : MatrixC_Mult.matrix"}} } name Matrix_Result selected true xpos -587 } Output { name Output1 xpos -587 ypos 61 } Matrix { inputs 0 matrix { {{(MatrixA.matrix.0*MatrixB.matrix.0)+(MatrixA.matrix.1*MatrixB.matrix.4)+(MatrixA.matrix.2*MatrixB.matrix.8)+(MatrixA.matrix.3*MatrixB.matrix.12)} {(MatrixA.matrix.0*MatrixB.matrix.1)+(MatrixA.matrix.1*MatrixB.matrix.5)+(MatrixA.matrix.2*MatrixB.matrix.9)+(MatrixA.matrix.3*MatrixB.matrix.13)} {(MatrixA.matrix.0*MatrixB.matrix.2)+(MatrixA.matrix.1*MatrixB.matrix.6)+(MatrixA.matrix.2*MatrixB.matrix.10)+(MatrixA.matrix.3*MatrixB.matrix.14)} {(MatrixA.matrix.0*MatrixB.matrix.3)+(MatrixA.matrix.1*MatrixB.matrix.7)+(MatrixA.matrix.2*MatrixB.matrix.11)+(MatrixA.matrix.3*MatrixB.matrix.15)}} {{(MatrixA.matrix.4*MatrixB.matrix.0)+(MatrixA.matrix.5*MatrixB.matrix.4)+(MatrixA.matrix.6*MatrixB.matrix.8)+(MatrixA.matrix.7*MatrixB.matrix.12)} {(MatrixA.matrix.4*MatrixB.matrix.1)+(MatrixA.matrix.5*MatrixB.matrix.5)+(MatrixA.matrix.6*MatrixB.matrix.9)+(MatrixA.matrix.7*MatrixB.matrix.13)} {(MatrixA.matrix.4*MatrixB.matrix.2)+(MatrixA.matrix.5*MatrixB.matrix.6)+(MatrixA.matrix.6*MatrixB.matrix.10)+(MatrixA.matrix.7*MatrixB.matrix.14)} {(MatrixA.matrix.4*MatrixB.matrix.3)+(MatrixA.matrix.5*MatrixB.matrix.7)+(MatrixA.matrix.6*MatrixB.matrix.11)+(MatrixA.matrix.7*MatrixB.matrix.15)}} {{(MatrixA.matrix.8*MatrixB.matrix.0)+(MatrixA.matrix.9*MatrixB.matrix.4)+(MatrixA.matrix.10*MatrixB.matrix.8)+(MatrixA.matrix.11*MatrixB.matrix.12)} {(MatrixA.matrix.8*MatrixB.matrix.1)+(MatrixA.matrix.9*MatrixB.matrix.5)+(MatrixA.matrix.10*MatrixB.matrix.9)+(MatrixA.matrix.11*MatrixB.matrix.13)} {(MatrixA.matrix.8*MatrixB.matrix.2)+(MatrixA.matrix.9*MatrixB.matrix.6)+(MatrixA.matrix.10*MatrixB.matrix.10)+(MatrixA.matrix.11*MatrixB.matrix.14)} {(MatrixA.matrix.8*MatrixB.matrix.3)+(MatrixA.matrix.9*MatrixB.matrix.7)+(MatrixA.matrix.10*MatrixB.matrix.11)+(MatrixA.matrix.11*MatrixB.matrix.15)}} {{(MatrixA.matrix.12*MatrixB.matrix.0)+(MatrixA.matrix.13*MatrixB.matrix.4)+(MatrixA.matrix.14*MatrixB.matrix.8)+(MatrixA.matrix.15*MatrixB.matrix.12)} {(MatrixA.matrix.12*MatrixB.matrix.1)+(MatrixA.matrix.13*MatrixB.matrix.5)+(MatrixA.matrix.14*MatrixB.matrix.9)+(MatrixA.matrix.15*MatrixB.matrix.13)} {(MatrixA.matrix.12*MatrixB.matrix.2)+(MatrixA.matrix.13*MatrixB.matrix.6)+(MatrixA.matrix.14*MatrixB.matrix.10)+(MatrixA.matrix.15*MatrixB.matrix.14)} {(MatrixA.matrix.12*MatrixB.matrix.3)+(MatrixA.matrix.13*MatrixB.matrix.7)+(MatrixA.matrix.14*MatrixB.matrix.11)+(MatrixA.matrix.15*MatrixB.matrix.15)}} } name MatrixC_Mult xpos -445 ypos -105 } end_group Axis2 { inputs 0 useMatrix true matrix { {{parent.Matrix_InverseResult.matrix} {parent.Matrix_InverseResult.matrix} {parent.Matrix_InverseResult.matrix} {parent.Matrix_InverseResult.matrix}} {{parent.Matrix_InverseResult.matrix} {parent.Matrix_InverseResult.matrix} {parent.Matrix_InverseResult.matrix} {parent.Matrix_InverseResult.matrix}} {{parent.Matrix_InverseResult.matrix} {parent.Matrix_InverseResult.matrix} {parent.Matrix_InverseResult.matrix} {parent.Matrix_InverseResult.matrix}} {{parent.Matrix_InverseResult.matrix} {parent.Matrix_InverseResult.matrix} {parent.Matrix_InverseResult.matrix} {parent.Matrix_InverseResult.matrix}} } name Axis1 xpos -533 ypos -124 } Output { name Output1 xpos -543 ypos -23 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_MergeAll.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input push 0 Group { inputs 2 name MergeAll help "MergeAll v1.0\n\nMerges all the channels as expected! Especially useful for workflows with AOVs or multi-channel mattes, where you want to mask or stencil multiple channels at the same time.\n\nDecyphered with the awesome Tony Lyons.\n\nadrianpueyo.com, 2019" tile_color 0x4b60c3ff selected true addUserKnob {20 MergeAll} addUserKnob {41 operation T MergeAllChannels.operation} addUserKnob {41 sRGB l "Video colorspace" -STARTLINE T MergeAllChannels.sRGB} addUserKnob {41 screen_alpha l "alpha masking" -STARTLINE T MergeAllChannels.screen_alpha} addUserKnob {41 bbox l "set bbox to " T MergeAllChannels.bbox} addUserKnob {41 metainput l "metadata from" -STARTLINE T MergeAllChannels.metainput} addUserKnob {41 rangeinput l "range from" -STARTLINE T MergeAllChannels.rangeinput} addUserKnob {26 ""} addUserKnob {41 Achannels l "A channels" T MergeAllChannels.Achannels} addUserKnob {41 Bchannels l "B channels" T MergeAllChannels.Bchannels} addUserKnob {41 output T MergeAllChannels.output} addUserKnob {41 also_merge l "also merge" T MergeAllChannels.also_merge} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T MergeAllChannels.maskChannelInput} addUserKnob {41 inject -STARTLINE T MergeAllChannels.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeAllChannels.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeAllChannels.fringe} addUserKnob {41 mix T MergeAllChannels.mix} addUserKnob {26 version_author l " " t "MergeAll v1.0\n24 Sep 2019" T "
MergeAll v1.0 - adrianpueyo.com, 2019"} } Input { inputs 0 name Inputmask xpos 941 ypos -466 number 2 } Input { inputs 0 name InputB xpos 831 ypos -663 } set N34d09f40 [stack 0] Multiply { value 0 name Multiply11 label "\[value value]" xpos 502 ypos -572 } Input { inputs 0 name InputA xpos 392 ypos -672 number 1 } set Ndbaf1390 [stack 0] Merge2 { inputs 2 operation plus bbox B Achannels {{{parent.MergeAllChannels.Achannels}}} Bchannels {{{parent.MergeAllChannels.Bchannels}}} output {{{parent.MergeAllChannels.output}}} also_merge {{{parent.MergeAllChannels.also_merge}}} name MergeBChannels xpos 392 ypos -560 } Dot { name Dot1 xpos 426 ypos -462 } push $Ndbaf1390 Multiply { value 0 name Multiply12 label "\[value value]" xpos 721 ypos -571 } push $N34d09f40 Merge2 { inputs 2 operation plus bbox B Achannels {{{parent.MergeAllChannels.Achannels}}} Bchannels {{{parent.MergeAllChannels.Bchannels}}} output {{{parent.MergeAllChannels.output}}} also_merge {{{parent.MergeAllChannels.also_merge}}} name MergeAChannels selected true xpos 831 ypos -559 } Merge2 { inputs 2+1 also_merge all name MergeAllChannels xpos 831 ypos -466 } Output { name Output1 xpos 831 ypos -413 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_MergeAtmos.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input push 0 Group { inputs 2 name MergeAtmos tile_color 0x4b5ec6ff note_font "Verdana Bold Bold" note_font_color 0xffffffff selected true addUserKnob {20 MergeAtmos} addUserKnob {41 channels T MergeKeymix.also_merge} addUserKnob {41 size l "blur size" T Blur1.size} addUserKnob {26 text_1 l " " T " "} addUserKnob {41 plusmix l "plus mix" T MergePlus.mix} addUserKnob {41 mix_1 l "over mix" T MergeOver.mix} addUserKnob {26 text l " " T " "} addUserKnob {41 value l "Gamma Alpha A" T Gamma1.value} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T MergeKeymix.maskChannelInput} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "For merging Dust, Smoke, Atmos\n\nMix between plus and over\n\nUses alpha of FG to blur the BG which mimicks diffusion." T MergeAtmos} addUserKnob {26 ver l Version: T v03} } Input { inputs 0 name Inputmask xpos 508 ypos 591 number 2 } Dot { name Dot7 xpos 542 ypos 729 } Input { inputs 0 name InputA xpos 358 ypos 84 number 1 } AddChannels { channels rgba name AddChannels2 xpos 358 ypos 212 } Gamma { channels alpha name Gamma1 xpos 358 ypos 280 } Dot { name Dot87 xpos 392 ypos 377 } set N21d63b90 [stack 0] Dot { name Dot8 note_font_size 41 xpos 392 ypos 452 } set N475d840 [stack 0] Dot { name Dot1 xpos 392 ypos 522 } push $N475d840 push $N21d63b90 Input { inputs 0 name InputB xpos 155 ypos 83 } Dot { name Dot4 xpos 189 ypos 250 } set N475dd80 [stack 0] Blur { inputs 1+1 size 10 crop false name Blur1 label "\[value size]" xpos 155 ypos 365 } Merge2 { inputs 2 operation plus Achannels none Bchannels none output none also_merge all mix 0.5 name MergePlus xpos 155 ypos 445 } Merge2 { inputs 2 also_merge all mix 0.5 name MergeOver xpos 155 ypos 519 } push $N475dd80 Dot { name Dot5 xpos 34 ypos 250 } Dot { name Dot6 note_font_size 41 xpos 34 ypos 729 } Merge2 { inputs 2+1 operation copy Achannels none Bchannels none output none also_merge rgba name MergeKeymix label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 155 ypos 722 } Output { name Output1 xpos 155 ypos 989 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_MergeBlend.gizmo ================================================ Group { inputs 2 name MergeBlend tile_color 0x4b5ec6ff label "\[value merge1] | \[value merge2]" note_font "Verdana Bold Bold" note_font_color 0xffffffff selected true addUserKnob {20 MergeBlend} addUserKnob {41 channels T Merge1.also_merge} addUserKnob {41 bbox l "set bbox to " T Merge9.bbox} addUserKnob {41 metainput l "metadata from" -STARTLINE T Merge9.metainput} addUserKnob {41 rangeinput l "range from" -STARTLINE T Merge9.rangeinput} addUserKnob {26 ""} addUserKnob {41 merge1 l Merge1 T Merge9.operation} addUserKnob {41 merge2 l " Merge2" -STARTLINE T Merge8.operation} addUserKnob {26 text l " " T "0 is Merge1 <------> 1 is Merge2"} addUserKnob {41 blend l Blend T Dissolve1.which} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge1.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge1.fringe} addUserKnob {41 mix T Merge1.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Mix between 2 Merge Operations" T MergeBlend} addUserKnob {26 ver l Version: T v03} } Input { inputs 0 name Inputmask xpos -239 ypos 761 number 2 } Input { inputs 0 name InputA xpos -332 ypos 355 number 1 } Dot { name Dot16 xpos -298 ypos 448 } set Nc7745230 [stack 0] Input { inputs 0 name InputB xpos -569 ypos 353 } Dot { name Dot19 xpos -535 ypos 461 } set Nc774ca40 [stack 0] Merge2 { inputs 2 operation plus bbox {{Merge9.bbox}} metainput {{Merge9.metainput}} rangeinput {{Merge9.rangeinput}} also_merge all name Merge8 xpos -332 ypos 572 } push $Nc7745230 push $Nc774ca40 Merge2 { inputs 2 operation screen also_merge all name Merge9 xpos -569 ypos 572 } Dissolve { inputs 2 which 0.5 name Dissolve1 xpos -460 ypos 673 } push $Nc774ca40 Dot { name Dot1 note_font_size 41 xpos -645 ypos 461 } Dot { name Dot2 note_font_size 41 xpos -645 ypos 764 } Merge2 { inputs 2+1 operation copy bbox {{Merge9.bbox}} metainput {{Merge9.metainput}} rangeinput {{Merge9.rangeinput}} Achannels none Bchannels none output none also_merge rgba name Merge1 xpos -460 ypos 757 } Output { name Output1 xpos -460 ypos 854 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_MirrorBorder.gizmo ================================================ Group { name MirrorBorder onCreate "n = nuke.thisNode()\nsize = n.knob(\"size\")\n\nsize.setRange(0, 500)" tile_color 0xa57aaaff note_font "Bitstream Vera Sans Bold Bold Bold" note_font_color 0xffffffff selected true addUserKnob {20 MirrorBorder} addUserKnob {4 type l "Tile Region" M {"to Format" "to input BBox" "" ""}} addUserKnob {14 size l "Tile Amount" R 0 500} size 500 addUserKnob {26 chokeEdgesText l "Choke Edges"} addUserKnob {7 leftChoke l "Left Choke" R -100 100} addUserKnob {7 rightChoke l "Right Choke" R -100 100} addUserKnob {7 topChoke l "Top Choke" R -100 100} addUserKnob {7 bottomChoke l "Bottom Choke" R -100 100} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelMask l "" -STARTLINE T Multiply1.maskChannelMask} addUserKnob {41 inject -STARTLINE T Multiply1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Multiply1.invert_mask} addUserKnob {41 fringe -STARTLINE T Multiply1.fringe} addUserKnob {7 mix} mix 1 addUserKnob {20 Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Name: T MirrorBorder} addUserKnob {26 ver l Version: T v03} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x3f414400 label "width mirror" note_font_size 60 note_font_color 0xffffffff xpos 704 ypos -277 bdwidth 265 bdheight 260 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x43504700 label "height mirror" note_font_size 60 note_font_color 0xffffffff xpos 1072 ypos -271 bdwidth 259 bdheight 267 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x5f6870ff label Corners note_font_size 60 note_font_color 0xffffffff xpos 1416 ypos -270 bdwidth 545 bdheight 264 } Input { inputs 0 name Input xpos 2050 ypos -606 } Dot { name Dot1 note_font_size 41 xpos 2084 ypos -546 } set N81deb2f0 [stack 0] Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"overscanType\":\n if n.knob(\"overscanType\").getValue() == 1:\n n.knob(\"overscanPercent\").setVisible(True)\n n.knob(\"overscan\").setVisible(False)\n else:\n n.knob(\"overscanPercent\").setVisible(False)\n n.knob(\"overscan\").setVisible(True)" tile_color 0xa57aaaff note_font "Verdana Bold" note_font_color 0xffffffff xpos 1907 ypos -549 addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} addUserKnob {14 overscan l Overscan R 0 400} addUserKnob {14 overscanPercent l "Overscan Percent" +HIDDEN R 1 4} overscanPercent 1 addUserKnob {20 inputBbox l "BBox Data" n 1} addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set N83862910 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set N83c07610 [stack 0] push $N83862910 Crop { box {{curve} {curve} {input.width} {input.height}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N83c005a0 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set N819e4950 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{input.bbox.r/2} {input.bbox.t/2}} shutteroffset centred name Transform1 xpos 120 ypos 555 } push $N819e4950 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $N83c07610 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $N83c005a0 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N83a16300 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $N83a16300 NoOp { name OutputBBox1 selected true xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group NoOp { name Settings xpos 1907 ypos -493 addUserKnob {20 User} addUserKnob {15 mirrorRegion l "Mirror Region"} mirrorRegion {{"(type == 0 ? parent.BBoxToFormat.inputFormat : parent.BBoxToFormat.inputBBox) + int(parent.leftChoke)"} {"(type == 0 ? parent.BBoxToFormat.inputFormat : parent.BBoxToFormat.inputBBox) + int(parent.bottomChoke)"} {"(type == 0 ? parent.BBoxToFormat.inputFormat : parent.BBoxToFormat.inputBBox) - int(parent.rightChoke)"} {"(type == 0 ? parent.BBoxToFormat.inputFormat : parent.BBoxToFormat.inputBBox) - int(parent.topChoke)"}} } Input { inputs 0 name Inputmask xpos 1818 ypos 134 number 1 } Dot { name Dot26 note_font_size 41 xpos 1852 ypos 236 } set N81fb32b0 [stack 0] Invert { name Invert1 xpos 1818 ypos 275 } push $N81fb32b0 push $N81deb2f0 Dot { name Dot4 xpos 2084 ypos -344 } set N80e84b90 [stack 0] Dot { name Dot8 xpos 1491 ypos -344 } set N80e80a90 [stack 0] Dot { name Dot9 xpos 1491 ypos -170 } set N80e30c70 [stack 0] Dot { name Dot11 xpos 1607 ypos -170 } set N80e45df0 [stack 0] Dot { name Dot13 xpos 1735 ypos -170 } set N80e7c770 [stack 0] Dot { name Dot14 xpos 1876 ypos -170 } Crop { box {{parent.Settings.mirrorRegion.r-parent.size.w} {parent.Settings.mirrorRegion.y} {parent.Settings.mirrorRegion.r} {parent.Settings.mirrorRegion.y+parent.size.h}} name Crop_BR xpos 1842 ypos -124 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_1 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_2 l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Transform { scale -1 center {{parent.Settings.mirrorRegion.r} {parent.Settings.mirrorRegion.y}} name Transform_BR label BottomRight xpos 1842 ypos -71 } push $N80e7c770 Crop { box {{parent.Settings.mirrorRegion.x} {parent.Settings.mirrorRegion.y} {parent.Settings.mirrorRegion.x+parent.size.w} {parent.Settings.mirrorRegion.y+parent.size.h}} name Crop_BL xpos 1701 ypos -125 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Transform { scale -1 center {{parent.Settings.mirrorRegion.x} {parent.Settings.mirrorRegion.y}} name Transform_BL label "Bottom Left" xpos 1701 ypos -70 } push $N80e45df0 Crop { box {{parent.Settings.mirrorRegion.r-parent.size.w} {parent.Settings.mirrorRegion.t-parent.size.h} {parent.Settings.mirrorRegion.r} {parent.Settings.mirrorRegion.t}} name Crop_TR xpos 1573 ypos -122 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Transform { scale -1 center {{parent.Settings.mirrorRegion.r} {parent.Settings.mirrorRegion.t}} name Transform_TR label "Top Right" xpos 1573 ypos -70 } push $N80e30c70 Crop { box {{parent.Settings.mirrorRegion.x} {parent.Settings.mirrorRegion.t-parent.size.h} {parent.Settings.mirrorRegion.x+parent.size.w} {parent.Settings.mirrorRegion.t}} name Crop_TL xpos 1457 ypos -124 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Transform { scale -1 center {{parent.Settings.mirrorRegion.x} {parent.Settings.mirrorRegion.t}} name Transform_TL label "Top Left" xpos 1457 ypos -72 } push $N80e80a90 Dot { name Dot7 xpos 1146 ypos -344 } set N80ff2030 [stack 0] Dot { name Dot5 xpos 1146 ypos -171 } set N80feba50 [stack 0] Dot { name Dot6 xpos 1245 ypos -171 } Crop { box {{parent.Settings.mirrorRegion.x} {parent.Settings.mirrorRegion.t-parent.size.h} {parent.Settings.mirrorRegion.r} {parent.Settings.mirrorRegion.t}} name Crop_T xpos 1211 ypos -124 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Transform { scale {1 -1} center {0 {parent.Settings.mirrorRegion.t}} name Transform_T label Top xpos 1211 ypos -73 } push $N80feba50 Crop { box {{parent.Settings.mirrorRegion.x} {parent.Settings.mirrorRegion.y} {parent.Settings.mirrorRegion.r} {parent.Settings.mirrorRegion.y+parent.size.h}} name Crop_B xpos 1112 ypos -126 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Transform { scale {1 -1} center {0 {parent.Settings.mirrorRegion.y}} name Transform_B label Bottom xpos 1112 ypos -71 } push 0 push $N80ff2030 Dot { name Dot2 xpos 883 ypos -344 } set N80f923a0 [stack 0] Dot { name Dot3 xpos 883 ypos -177 } set N80f8daf0 [stack 0] Crop { box {{parent.Settings.mirrorRegion.r-parent.size.w} {parent.Settings.mirrorRegion.y} {parent.Settings.mirrorRegion.r} {parent.Settings.mirrorRegion.t}} name Crop_R xpos 849 ypos -128 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Transform { scale {-1 1} center {{parent.Settings.mirrorRegion.r} 0} filter Impulse name Transform_R label Right xpos 849 ypos -84 } push $N80f8daf0 Dot { name Dot10 xpos 778 ypos -177 } Crop { box {{parent.Settings.mirrorRegion.x} {parent.Settings.mirrorRegion.y} {parent.Settings.mirrorRegion.x+parent.size.w} {parent.Settings.mirrorRegion.t}} name Crop_L xpos 744 ypos -126 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Transform { scale {-1 1} center {{parent.Settings.mirrorRegion.x} 0} filter Impulse name Transform_L label Left xpos 744 ypos -82 } Merge2 { inputs 8+1 operation disjoint-over also_merge all name Merge5 xpos 1346 ypos 122 } Dot { name Dot15 note_font_size 41 xpos 1380 ypos 236 } set N80f44280 [stack 0] Merge2 { inputs 2 operation mask bbox intersection name MergeIntersection1 xpos 1701 ypos 233 disable {{"!\[exists parent.input1]"}} } push $N80f44280 Dot { name Dot17 note_font_size 41 xpos 1380 ypos 359 } CopyBBox { inputs 2 name CopyBBox1 xpos 1701 ypos 356 disable {{"!\[exists parent.input1]"}} } Multiply { inputs 1+1 value 0 name Multiply1 label "\[value value]" xpos 1818 ypos 347 disable {{"!\[exists parent.input1]"}} } push $N80e84b90 Crop { box {{parent.Settings.mirrorRegion} {parent.Settings.mirrorRegion} {parent.Settings.mirrorRegion} {parent.Settings.mirrorRegion}} name Crop1 xpos 2050 ypos -200 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Merge2 { inputs 2 operation disjoint-over also_merge all maskChannelMask {{{exists parent.input[value input1.number] == 0 ? 0 : 5}}} name Merge3 xpos 2050 ypos 356 } Dot { name Dot20 label A note_font_size 41 xpos 2084 ypos 469 } push $N80f923a0 Dot { name Dot12 note_font_size 41 xpos 600 ypos -344 } Dot { name Dot18 label B note_font_size 41 xpos 600 ypos 471 } Dot { name Dot23 note_font_size 41 xpos 600 ypos 558 } Dot { name Dot16 note_font_size 41 xpos 1940 ypos 558 } set N81848aa0 [stack 0] Merge2 { inputs 2 operation copy Achannels none Bchannels none output none also_merge all mix {{parent.mix}} name MergeKeymix xpos 2050 ypos 551 } push $N81848aa0 Dot { name Dot19 note_font_size 41 xpos 1940 ypos 640 } Switch { inputs 2 which {{"parent.mix > 0 ? 1 : 0"}} name Switch1 xpos 2050 ypos 637 } Output { name Output1 xpos 2050 ypos 841 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_MirrorDimension.gizmo ================================================ Group { name MirrorDimension tile_color 0x9c0000ff note_font_color 0xffffffff selected true addUserKnob {20 MirrorDimension} addUserKnob {26 Instructions l Instructions: T "1.) Plug in the MirrorCard input to the Card or Axis node you would like to be the mirror. \n\n- The scale of Card Does not matter as long as the orientation (translation/rotation) are correct.\n\n- The Card's +Z access is the front of mirror, point that towards subject / camera. This is the blue Z arrow in 3D viewer.\n\n2.) Duplicate your Camera, and plug in the \"axis\" input of this new Camera to the output of this node.\n\n3.) Your new Camera will be Mirrored according to the plane / card / axis.\n\n4.) Render using this New Camera Setup to get the mirrored CG output."} addUserKnob {26 version_author l "" +STARTLINE T "
MirrorDimension v1.0 - Tony Lyons, 2024
"} } Input { inputs 0 name InputMirrorCard xpos 1093 ypos 175 } Axis2 { inputs 0 useMatrix true matrix { {{parent.Axis_parent.world_matrix} {parent.Axis_parent.world_matrix} {parent.Axis_parent.world_matrix} {parent.Axis_parent.world_matrix}} {{parent.Axis_parent.world_matrix} {parent.Axis_parent.world_matrix} {parent.Axis_parent.world_matrix} {parent.Axis_parent.world_matrix}} {{parent.Axis_parent.world_matrix} {parent.Axis_parent.world_matrix} {parent.Axis_parent.world_matrix} {parent.Axis_parent.world_matrix}} {{parent.Axis_parent.world_matrix} {parent.Axis_parent.world_matrix} {parent.Axis_parent.world_matrix} {parent.Axis_parent.world_matrix}} } name Axis9 xpos 752 ypos 315 } Axis2 { scaling {1 1 -1} name Axis12 xpos 752 ypos 444 } Axis2 { useMatrix true matrix { {{parent.InverseMatrix44_1.result.matrix} {parent.InverseMatrix44_1.result.matrix} {parent.InverseMatrix44_1.result.matrix} {parent.InverseMatrix44_1.result.matrix}} {{parent.InverseMatrix44_1.result.matrix} {parent.InverseMatrix44_1.result.matrix} {parent.InverseMatrix44_1.result.matrix} {parent.InverseMatrix44_1.result.matrix}} {{parent.InverseMatrix44_1.result.matrix} {parent.InverseMatrix44_1.result.matrix} {parent.InverseMatrix44_1.result.matrix} {parent.InverseMatrix44_1.result.matrix}} {{parent.InverseMatrix44_1.result.matrix} {parent.InverseMatrix44_1.result.matrix} {parent.InverseMatrix44_1.result.matrix} {parent.InverseMatrix44_1.result.matrix}} } name Axis14 xpos 752 ypos 577 } Output { name Output1 xpos 742 ypos 775 } Group { inputs 0 name InverseMatrix44_1 tile_color 0x337f4cff xpos 975 ypos 462 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path Axis_parent.world_matrix addUserKnob {26 ""} addUserKnob {41 id T assignID.matrix} addUserKnob {26 ""} addUserKnob {20 grp_math l math n 1} grp_math 0 addUserKnob {7 m l determinant} m {{"\[value \[value knob_path].\[value id.0]] * \n(\n\[value \[value knob_path].\[value id.5]] * \n(( \[value \[value knob_path].\[value id.10]] * \[value \[value knob_path].\[value id.15]] )\n-\n( \[value \[value knob_path].\[value id.11]] * \[value \[value knob_path].\[value id.14]] ))\n-\n\[value \[value knob_path].\[value id.6]] * \n(( \[value \[value knob_path].\[value id.9]] * \[value \[value knob_path].\[value id.15]] )\n-\n( \[value \[value knob_path].\[value id.11]] * \[value \[value knob_path].\[value id.13]] ))\n+\n\[value \[value knob_path].\[value id.7]] * \n(( \[value \[value knob_path].\[value id.9]] * \[value \[value knob_path].\[value id.14]] )\n-\n( \[value \[value knob_path].\[value id.10]] * \[value \[value knob_path].\[value id.13]] ))\n)\n\n-\n\n\[value \[value knob_path].\[value id.1]] * \n(\n\[value \[value knob_path].\[value id.4]] * \n(( \[value \[value knob_path].\[value id.10]] * \[value \[value knob_path].\[value id.15]] )\n-\n( \[value \[value knob_path].\[value id.11]] * \[value \[value knob_path].\[value id.14]] ))\n-\n\[value \[value knob_path].\[value id.6]] * \n(( \[value \[value knob_path].\[value id.8]] * \[value \[value knob_path].\[value id.15]] )\n-\n( \[value \[value knob_path].\[value id.11]] * \[value \[value knob_path].\[value id.12]] ))\n+\n\[value \[value knob_path].\[value id.7]] * \n(( \[value \[value knob_path].\[value id.8]] * \[value \[value knob_path].\[value id.14]] )\n-\n( \[value \[value knob_path].\[value id.10]] * \[value \[value knob_path].\[value id.12]] ))\n)\n\n+\n\n\[value \[value knob_path].\[value id.2]] * \n(\n\[value \[value knob_path].\[value id.4]] * \n(( \[value \[value knob_path].\[value id.9]] * \[value \[value knob_path].\[value id.15]] )\n-\n( \[value \[value knob_path].\[value id.11]] * \[value \[value knob_path].\[value id.13]] ))\n-\n\[value \[value knob_path].\[value id.5]] * \n(( \[value \[value knob_path].\[value id.8]] * \[value \[value knob_path].\[value id.15]] )\n-\n( \[value \[value knob_path].\[value id.11]] * \[value \[value knob_path].\[value id.12]] ))\n+\n\[value \[value knob_path].\[value id.7]] * \n(( \[value \[value knob_path].\[value id.8]] * \[value \[value knob_path].\[value id.13]] )\n-\n( \[value \[value knob_path].\[value id.9]] * \[value \[value knob_path].\[value id.12]] ))\n)\n\n-\n\n\[value \[value knob_path].\[value id.3]] * \n(\n\[value \[value knob_path].\[value id.4]] * \n(( \[value \[value knob_path].\[value id.9]] * \[value \[value knob_path].\[value id.14]] )\n-\n( \[value \[value knob_path].\[value id.10]] * \[value \[value knob_path].\[value id.13]] ))\n-\n\[value \[value knob_path].\[value id.5]] * \n(( \[value \[value knob_path].\[value id.8]] * \[value \[value knob_path].\[value id.14]] )\n-\n( \[value \[value knob_path].\[value id.10]] * \[value \[value knob_path].\[value id.12]] ))\n+\n\[value \[value knob_path].\[value id.6]] * \n(( \[value \[value knob_path].\[value id.8]] * \[value \[value knob_path].\[value id.13]] )\n-\n( \[value \[value knob_path].\[value id.9]] * \[value \[value knob_path].\[value id.12]] ))\n)"}} addUserKnob {41 a l cofactor T co.matrix} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {41 iMatrix T result.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-24} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"live inverse matrix
iMatrix33
iMatrix44\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2 3} {4 5 6 7} {8 9 10 11} {12 13 14 15} } name assignID xpos -150 ypos -255 } Matrix { inputs 0 matrix { {{"pow(-1,0+0) * (\n+\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.13]]\n+\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.14]]\n-\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,0+1) * (\n+\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,0+2) * (\n+\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,0+3) * (\n+\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.14]]\n+\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.14]]\n-\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.13]]\n)"}} {{"pow(-1,1+0) * (\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.13]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.14]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,1+1) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,1+2) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,1+3) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.14]]\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.14]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.13]]\n)"}} {{"pow(-1,2+0) * (\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.13]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.14]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,2+1) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,2+2) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,2+3) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.14]]\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.14]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.13]]\n)"}} {{"pow(-1,3+0) * (\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.11]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.9]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.10]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.9]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.11]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.10]]\n)"} {"pow(-1,3+1) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.11]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.8]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.10]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.8]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.11]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.10]]\n)"} {"pow(-1,3+2) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.11]]\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.8]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.9]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.8]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.11]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.9]]\n)"} {"pow(-1,3+3) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.10]]\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.8]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.9]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.8]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.10]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.9]]\n)"}} } name co xpos -44 ypos -255 } Matrix { inputs 0 matrix { {{"a.0==0 || m==0 ? 0 : a.0/m"} {"a.4==0 || m==0 ? 0 : a.4/m"} {"a.8==0 || m==0 ? 0 : a.8/m"} {"a.12==0 || m==0 ? 0 : a.12/m"}} {{"a.1==0 || m==0 ? 0 : a.1/m"} {"a.5==0 || m==0 ? 0 : a.5/m"} {"a.9==0 || m==0 ? 0 : a.9/m"} {"a.13==0 || m==0 ? 0 : a.13/m"}} {{"a.2==0 || m==0 ? 0 : a.2/m"} {"a.6==0 || m==0 ? 0 : a.6/m"} {"a.10==0 || m==0 ? 0 : a.10/m"} {"a.14==0 || m==0 ? 0 : a.14/m"}} {{"a.3==0 || m==0 ? 0 : a.3/m"} {"a.7==0 || m==0 ? 0 : a.7/m"} {"a.11==0 || m==0 ? 0 : a.11/m"} {"a.15==0 || m==0 ? 0 : a.15/m"}} } name result xpos 56 ypos -254 } end_group Axis2 { inputs 0 translate {{parent.input0.translate.x} {parent.input0.translate.y} {parent.input0.translate.z}} rotate {{parent.input0.rotate.x} {parent.input0.rotate.y} {parent.input0.rotate.z}} scaling {{parent.input0.scaling.x} {parent.input0.scaling.y} {parent.input0.scaling.z}} uniform_scale {{parent.input0.uniform_scale}} skew {{parent.input0.skew.x} {parent.input0.skew.y} {parent.input0.skew.z}} pivot {{parent.input0.pivot.x} {parent.input0.pivot.y} {parent.input0.pivot.z}} name Axis_parent xpos 1103 ypos 258 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_MonochromePlus.gizmo ================================================ Group { name MonochromePlus tile_color 0x7aa9ffff note_font "Bitstream Vera Sans" selected true addUserKnob {20 MonochromePlus} addUserKnob {41 weight T Expression1.weight} addUserKnob {41 source T Expression1.source} addUserKnob {41 target T Expression1.target} addUserKnob {41 multiply T Expression1.multiply} addUserKnob {41 sourceFromTarget l "use weighted target as source" T Expression1.sourceFromTarget} addUserKnob {26 "" +STARTLINE} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge1.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge1.fringe} addUserKnob {41 mix T Merge1.mix} addUserKnob {26 ""} addUserKnob {26 _1 l "" +STARTLINE T "Chris Fryer | 2019"} } Input { inputs 0 name Inputmask xpos 512 ypos 669 number 1 } Input { inputs 0 name Input xpos 359 ypos 462 } Dot { name Dot1 xpos 393 ypos 504 } set Nfed0d800 [stack 0] Expression { expr0 "(weight.r*r + weight.g*g + weight.b*b) * multiply" name Expression1 note_font "Bitstream Vera Sans" xpos 359 ypos 549 addUserKnob {20 User} addUserKnob {6 sourceFromTarget l "use weighted target as source" +STARTLINE} sourceFromTarget true addUserKnob {6 source_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 weight} weight {0.2126 0.7152 0.0722} addUserKnob {6 weight_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} weight_panelDropped true addUserKnob {6 weight_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 source} source {1 1 1} addUserKnob {6 source_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 target} target {1 1 1} addUserKnob {6 target_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 multiply R 0 2} multiply 1 addUserKnob {6 multiply_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Shuffle { green red blue red name Shuffle1 tile_color 0xffffff00 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 359 ypos 573 } Grade { whitepoint {{"Expression1.sourceFromTarget == 0 ? parent.Expression1.source : parent.Expression1.target.r*Expression1.weight.r+parent.Expression1.target.g*Expression1.weight.g+parent.Expression1.target.b*Expression1.weight.b"} {"Expression1.sourceFromTarget == 0 ? parent.Expression1.source : parent.Expression1.target.r*Expression1.weight.r+parent.Expression1.target.g*Expression1.weight.g+parent.Expression1.target.b*Expression1.weight.b"} {"Expression1.sourceFromTarget == 0 ? parent.Expression1.source : parent.Expression1.target.r*Expression1.weight.r+parent.Expression1.target.g*Expression1.weight.g+parent.Expression1.target.b*Expression1.weight.b"} {"Expression1.sourceFromTarget == 0 ? parent.Expression1.source : parent.Expression1.target.r*Expression1.weight.r+parent.Expression1.target.g*Expression1.weight.g+parent.Expression1.target.b*Expression1.weight.b"}} white {{parent.Expression1.target} {parent.Expression1.target} {parent.Expression1.target} {parent.Expression1.target}} multiply {{parent.Expression1.multiply} {parent.Expression1.multiply} {parent.Expression1.multiply} {parent.Expression1.multiply}} black_clamp false name Grade1 note_font "Bitstream Vera Sans" xpos 359 ypos 609 } push $Nfed0d800 Dot { name Dot2 xpos 267 ypos 504 } Dot { name Dot3 xpos 267 ypos 672 } Merge2 { inputs 2+1 operation copy name Merge1 xpos 359 ypos 669 } Output { name Output1 xpos 359 ypos 753 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_MorphDissolve.gizmo ================================================ Group { name MorphDissolve help "Allows to morph between two moving plates automatically, or can be used to improve manual Morphs." tile_color 0x890074ff label "(Plate \[value morph])" selected true addUserKnob {20 MorphDissolve} addUserKnob {7 morph l Morph t "Morphs between input 0 and input 1"} addUserKnob {26 ""} addUserKnob {4 method l "Morph Method" t "Pick which method to use. They may both display artifacts in different areas, try both to see which one produces the best results for your specific morph." M {iDistort Kronos ""}} addUserKnob {4 direction l Direction -STARTLINE M {In-Between "0 --> 1" "1 --> 0" ""}} addUserKnob {4 result l Result -STARTLINE M {Morph STmap "" "" "" ""}} addUserKnob {7 vectorDetail l "Vector Detail" t "Use this to adjust the density of the calculated motion vector field. Higher details capture finer movements, but take will longer to calculate." R 0.01 1} vectorDetail 0.75 addUserKnob {7 strength l Strength t "Match Strength : Stonger values will match larger differences between the two plates." R 0 1.5} strength 1.5 addUserKnob {41 scale l "STmap Overscan" T UV_Map.scale} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - by Erwan Leroy - 2017"} } BackdropNode { inputs 0 name Backdrop1 tile_color 0x5b4e5658 label Zipping note_font_size 40 xpos 600 ypos -55 bdwidth 180 bdheight 241 } Input { inputs 0 name Input1 xpos 1355 ypos -123 number 1 } Dot { name Dot3 tile_color 0xcccccc00 xpos 1389 ypos -72 } set Nffa41ee0 [stack 0] Dot { name Dot8 tile_color 0xcccccc00 xpos 1389 ypos 1115 } push $Nffa41ee0 Dot { name Dot13 tile_color 0xcccccc00 xpos 1247 ypos -72 } NoTimeBlur { rounding floor single false name NoTimeBlur2 xpos 1213 ypos -15 } Retime { input.first 1001 input.first_lock true output.first 1001 output.last 1002 speed 0.5 before continue after continue filter none time "" name Retime2 label "x\[value input.first]-->x\[value output.first]\n\[if \{\[value speed] == 1\} then \{return \"\"\} else \{return \"spd \[value speed]\"\}]" xpos 1213 ypos 23 } Input { inputs 0 name Input0 xpos -24 ypos -121 } Dot { name Dot4 tile_color 0xcccccc00 xpos 10 ypos -75 } set N3db7b800 [stack 0] Dot { name Dot14 tile_color 0xcccccc00 xpos 155 ypos -75 } NoTimeBlur { rounding floor single false name NoTimeBlur1 xpos 121 ypos -13 } Retime { input.first 1001 input.first_lock true input.last 1218 output.first 1001 output.last 1436 speed 0.5 before continue after continue filter none time "" name Retime1 label "x\[value input.first]-->x\[value output.first]\n\[if \{\[value speed] == 1\} then \{return \"\"\} else \{return \"spd \[value speed]\"\}]" xpos 121 ypos 23 } Switch { inputs 2 which {{(frame-1001)%2}} name Switch1 xpos 650 ypos 35 } Dot { name Dot9 tile_color 0xcccccc00 xpos 684 ypos 124 } set Nf88d8d0 [stack 0] Dot { name Dot2 tile_color 0xcccccc00 xpos 985 ypos 124 } Kronos { retimedChannels all timing2 Frame timingFrame2 {{(frame-1001)*2+1001+parent.morph}} motionEstimation Regularized vectorDetailReg {{parent.vectorDetail}} strengthReg {{parent.strength}} name Kronos1 xpos 951 ypos 273 } Dot { name Dot12 tile_color 0xcccccc00 xpos 985 ypos 903 } push $Nf88d8d0 Dot { name Dot10 tile_color 0xcccccc00 xpos 415 ypos 124 } VectorGenerator { motionEstimation Regularized vectorDetailReg {{parent.vectorDetail}} strengthReg {{parent.strength}} name VectorGenerator1 xpos 381 ypos 277 } Dot { name Dot1 tile_color 0xcccccc00 xpos 415 ypos 350 } set Na0df1320 [stack 0] Shuffle { in backward blue black alpha black name Shuffle2 label "in \[value in]-->out \[value out]" xpos 217 ypos 340 } TimeOffset { time_offset -1 time "" name TimeOffset2 label "\[value time_offset]" xpos 217 ypos 484 } push $Na0df1320 Shuffle { in forward blue black alpha black name Shuffle1 label "in \[value in]-->out \[value out]" xpos 560 ypos 340 } TimeOffset { time_offset 1 time "" name TimeOffset1 label "\[value time_offset]" xpos 560 ypos 414 } push $Na0df1320 Copy { inputs 2 from0 forward.u to0 forward.u from1 forward.v to1 forward.v bbox B name Copy1 xpos 381 ypos 408 } Copy { inputs 2 from0 backward.u to0 backward.u from1 backward.v to1 backward.v bbox B name Copy2 xpos 381 ypos 484 } Group { name UV_Map help "Create an uvmap from the input format or the selected format that can be used for example for baking transformations and applying them through a STmap node.\nUse the overscan to create values outside of the viewing window and the 0-1 range." tile_color 0x578100ff note_font "Bitstream Vera Sans" note_font_color 0xffffffff selected true xpos 381 ypos 549 disable {{!result}} mapsize {0.15 0.15} addUserKnob {20 tab l "UV Map"} addUserKnob {41 format T Constant1.format} addUserKnob {41 scale l overscan T Reformat1.scale} addUserKnob {6 alpha l "alpha 1" +STARTLINE} addUserKnob {41 black_outside l "black outside" -STARTLINE T Reformat2.black_outside} } Input { inputs 0 name Input xpos 620 ypos -370 } Shuffle { red black green black blue black alpha black name Shuffle1 xpos 620 ypos -309 } Constant { inputs 0 name Constant1 xpos 479 ypos -214 } Switch { inputs 2 which {{"\[exists parent.input0]"}} name Switch1 xpos 620 ypos -190 } Reformat { type scale resize none pbb true name Reformat1 selected true xpos 620 ypos -71 } Reformat { type scale scale {{1/Reformat1.scale} {1/Reformat1.scale}} resize none black_outside true pbb true name Reformat2 xpos 620 ypos -37 } Shuffle { alpha white name Shuffle13 tile_color 0xffffff00 label "\[value in]" xpos 620 ypos 12 disable {{!parent.alpha}} } Expression { expr0 (x+0.5)/width expr1 (y+0.5)/height name Expression2 xpos 620 ypos 75 } Output { name Output1 xpos 620 ypos 127 } end_group Dot { name Dot5 note_font_size 41 xpos 415 ypos 601 } set N704f3310 [stack 0] Retime { input.first 1000 input.first_lock true input.last 1002 output.first 1000 output.last 1001 speed 2 before continue after continue filter none time "" name Retime4 label "x\[value input.first]-->x\[value output.first]\n\[if \{\[value speed] == 1\} then \{return \"\"\} else \{return \"spd \[value speed]\"\}]" xpos 459 ypos 672 } IDistort { uv forward uv_scale {{1-parent.morph}} name IDistort2 xpos 459 ypos 741 } set N4c486100 [stack 0] push $N704f3310 Retime { input.first 1001 input.first_lock true input.last 1436 output.first 1001 output.last 1218 speed 2 before continue after continue filter none time "" name Retime3 label "x\[value input.first]-->x\[value output.first]\n\[if \{\[value speed] == 1\} then \{return \"\"\} else \{return \"spd \[value speed]\"\}]" xpos 308 ypos 673 } IDistort { uv backward uv_scale {{parent.morph}} name IDistort1 xpos 308 ypos 738 } set N40def0f0 [stack 0] push $N4c486100 push $N40def0f0 Dissolve { inputs 2 which {{parent.morph}} name Dissolve1 xpos 379 ypos 823 } Dot { name Dot11 tile_color 0xcccccc00 xpos 413 ypos 903 } Switch { inputs 3 which {{direction}} name Switch4 label "\[value which]" xpos 491 ypos 893 } Switch { inputs 2 which {{parent.method}} name Switch3 xpos 627 ypos 899 } set N40770720 [stack 0] push $N3db7b800 Dot { name Dot7 tile_color 0xcccccc00 xpos 10 ypos 1115 } Switch { inputs 3 which {{"parent.morph<=0?0:parent.morph>=1 ?2:1"}} name Switch2 xpos 547 ypos 1111 } set N4077d620 [stack 0] push $N40770720 push $N40770720 push $N4077d620 Switch { inputs 3 which {{"result + direction"}} name Switch5 label "\[value which]" xpos 627 ypos 1181 } Switch { inputs 2 which {{method}} name Switch6 label "\[value which]" xpos 627 ypos 1257 } Output { name Output1 xpos 627 ypos 1333 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_MotionBlurPaint.gizmo ================================================ Group { name MotionBlurPaint onCreate "n = nuke.thisNode()\nn\['format'].setFlag(nuke.DISABLED)" tile_color 0xcc804e00 note_font "Verdana Bold" selected true addUserKnob {20 Parameters} addUserKnob {26 instructions l "" +STARTLINE T "Click the button 'Select brush' below to select the right brush.
Paint on the image to apply the motion blur
\nClose the 'Paint' Tab to disable the node with D key"} addUserKnob {26 ""} addUserKnob {26 output_1_1 l "OUTPUT"} addUserKnob {41 channels T VectorBlur9.channels} addUserKnob {41 format T Constant1.format} addUserKnob {6 img_format l "format from img" -STARTLINE} img_format true addUserKnob {7 overscan R 0 100} addUserKnob {26 ""} addUserKnob {4 output t "Select which output you want to have: the final result with the distortion or the Vector Map" M {"Final Result" Vector "" "" "" "" "" "" "" ""}} addUserKnob {26 ""} addUserKnob {26 motion_blur l "MOTION BLUR" T ""} addUserKnob {41 scale l "motion amount" T VectorBlur9.scale} addUserKnob {41 offset l "shutter offset" T VectorBlur9.offset} addUserKnob {41 grow_bbox l "expand bbox" T VectorBlur9.grow_bbox} addUserKnob {41 constant l "uv offset" T VectorBlur9.constant} addUserKnob {41 method T VectorBlur9.method} addUserKnob {26 line l "" +STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {22 move l "Select brush" t "Select automatically the right brush" T "n = nuke.thisNode()\nn\['toolbox'].setValue(0)\nn\['toolbox'].setValue(25)" +STARTLINE} addUserKnob {6 check l "check painting" t "Use the checkerboard to check your paint" -STARTLINE} addUserKnob {41 size l smooth t "Smooth the paint" T Blur1.size} addUserKnob {26 paint l "PAINT"} addUserKnob {20 paints l "" +STARTLINE n 1} addUserKnob {41 opacity l INVISIBLE +INVISIBLE T RotoPaint.opacity} addUserKnob {41 toolbar_opacity l opacity T RotoPaint.toolbar_opacity} addUserKnob {41 brush_hardness l "brush hardness" T RotoPaint.brush_hardness} addUserKnob {41 brush_spacing l "brush spacing" T RotoPaint.brush_spacing} addUserKnob {26 ""} addUserKnob {41 opacity_1 l opacity T RotoPaint.opacity} addUserKnob {41 lifetime_type l "lifetime type" T RotoPaint.lifetime_type} addUserKnob {41 lifetime_start l from -STARTLINE T RotoPaint.lifetime_start} addUserKnob {41 lifetime_end l to -STARTLINE T RotoPaint.lifetime_end} addUserKnob {41 toolbox l "" +STARTLINE T RotoPaint.toolbox} addUserKnob {41 curves l "" -STARTLINE T RotoPaint.curves} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask -STARTLINE T VectorBlur9.maskChannelMask} addUserKnob {41 invert_mask l invert -STARTLINE T VectorBlur9.invert_mask} addUserKnob {26 ""} addUserKnob {41 mix T VectorBlur9.mix} addUserKnob {20 "" l Transform} addUserKnob {41 transform T RotoPaint.transform} addUserKnob {41 translate T RotoPaint.translate} addUserKnob {41 rotate T RotoPaint.rotate} addUserKnob {41 scale_1 l scale T RotoPaint.scale} addUserKnob {41 skewX l "skew X" T RotoPaint.skewX} addUserKnob {41 skewY l "skew Y" T RotoPaint.skewY} addUserKnob {41 skew_order l "skew order" T RotoPaint.skew_order} addUserKnob {41 center T RotoPaint.center} addUserKnob {20 "extra matrix" n 2} "extra matrix" 1 addUserKnob {41 transform_matrix l "" -STARTLINE T RotoPaint.transform_matrix} addUserKnob {20 "" n -1} addUserKnob {20 email l @} addUserKnob {26 message l "" +STARTLINE T "MotionBlur Paint v1.0
\nby Andrea Geremia
\n
\nandrea.geremia89@gmail.com
\nwww.andreageremia.it
"} } Constant { inputs 0 channels rgb format "2048 2048 0 0 2048 2048 1 square_2K" name Constant1 xpos -178 ypos -455 } Input { inputs 0 name img xpos 178 ypos -568 } Dot { name Dot10 xpos 212 ypos -522 } set Nd8d4d400 [stack 0] Remove { name Remove1 xpos -7 ypos -529 } Switch { inputs 2 which {{!parent.img_format}} name Switch_Format label "\[value which]" xpos -7 ypos -437 } AdjBBox { numpixels {{parent.overscan}} name AdjBBox1 xpos -7 ypos -362 } Expression { expr0 x expr1 y expr2 0 expr3 1 name Expression6 xpos -7 ypos -314 } Dot { name Dot8 xpos 22 ypos -268 } set Nd8d4c400 [stack 0] Dot { name Dot3 xpos 23 ypos -107 } set Nd8857c00 [stack 0] push $Nd8d4c400 Dot { name Dot9 xpos -125 ypos -268 } set Nd8857800 [stack 0] RotoPaint { cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097664} {t x4493a000 x440b8000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0}}}}} toolbox {selectAll { { selectAll bs 1000 h 1 src 1 str 1 ssx 1 ssy 1 sf 1 ep1 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush bs 180 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 1034 ltm 1034 tt 17 } { eraser bs 86.2 src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 1033 ltm 1033 tt 18 } { clone opc 0.1 bs 44.8 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 tt 19 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 tt 21 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 tt 22 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ep1 5 tt 23 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 tt 24 } { smear bs 1000 h 1 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 2 ltm 2 tt 25 } } } toolbar_brush_size 1000 toolbar_brush_hardness 1 toolbar_lifetime_type single toolbar_lifetime_start 1001 toolbar_lifetime_end 1001 toolbar_effect_parameter1 1 toolbar_paint_source fg toolbar_source_transform_scale {1 1} toolbar_source_transform_center {1024 778} colorOverlay {0 0 0 0} paint_source foreground lifetime_start 2 lifetime_end 2 view {} motionblur_on true motionblur_shutter_offset_type centred brush_type smear brush_size 1000 brush_spacing 0.05000000075 brush_hardness 1 effect_parameter1 1 source_black_outside true name RotoPaint xpos -154 ypos -226 } set Nd8857400 [stack 0] push $Nd8857800 Dot { name Dot2 xpos -364 ypos -265 } Difference { inputs 2 gain 1000000 name Difference1 xpos -398 ypos -230 } Dilate { channels alpha size {{parent.Blur1.size}} name Dilate1 label "\[value size]" xpos -398 ypos -149 } push $Nd8857400 Blur { inputs 1+1 channels rgb name Blur1 label "\[value size]" xpos -154 ypos -144 } CopyBBox { inputs 2 name CopyBBox1 xpos -153 ypos -21 } push $Nd8857c00 Merge2 { inputs 2 operation from name Merge1 xpos -10 ypos -21 } set Nd8855c00 [stack 0] Dot { name Dot1 xpos 23 ypos 197 } Input { inputs 0 name mask xpos 388 ypos -31 number 1 } Dot { name Dot7 xpos 417 ypos 52 } push $Nd8855c00 CheckerBoard2 { inputs 0 format {{{parent.input.format}}} name CheckerBoard1 selected true xpos 306 ypos -379 } push $Nd8d4d400 Switch { inputs 2 which {{parent.check}} name Switch1 label "\[value which]" xpos 179 ypos -361 } Copy { inputs 2 from0 rgba.red to0 forward.u from1 rgba.green to1 forward.v name Copy28 xpos 179 ypos -30 } VectorBlur { inputs 1+1 channels rgba uv forward name VectorBlur9 xpos 179 ypos 53 } Remove { operation keep channels rgba name Remove2 xpos 179 ypos 107 } Switch { inputs 2 which {{parent.output}} name Switch_output label "\[value which]" xpos 179 ypos 193 } Output { name Output1 xpos 179 ypos 279 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_MultiplyVector3Matrix3.gizmo ================================================ Group { name MultiplyVector3Matrix3_ help "Multiply (transform) a Vector3 by a Matrix3. This is the equivalent of applying Rotation/Scale/Skew from a Matrix to the vector.\nA Matrix4 can be used, but the last row/column will be ignored." addUserKnob {20 main_tab l "Mutiply Vector3 Matrix3"} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name InputMatrix3 xpos 402 ypos 7 number 1 } Dot { name Dot3 tile_color 0xcccccc00 xpos 436 ypos 62 } add_layer {matrix0 matrix0.0 matrix0.1 matrix0.2 matrix0.3} Shuffle { in matrix0 name Shuffle1 label "in \[value in]-->out \[value out]" xpos 402 ypos 109 } set Ne478bfd0 [stack 0] add_layer {matrix1 matrix1.0 matrix1.1 matrix1.2 matrix1.3} Shuffle { in matrix1 name Shuffle2 label "in \[value in]-->out \[value out]" xpos 402 ypos 147 } set Nd8882950 [stack 0] add_layer {matrix2 matrix2.0 matrix2.1 matrix2.2 matrix2.3} Shuffle { in matrix2 name Shuffle3 label "in \[value in]-->out \[value out]" xpos 402 ypos 185 } set N2858d430 [stack 0] add_layer {matrix3 matrix3.0 matrix3.1 matrix3.2 matrix3.3} Shuffle { in matrix3 name Shuffle4 label "in \[value in]-->out \[value out]" xpos 402 ypos 223 } push $N2858d430 Dot { name Dot7 tile_color 0x9e3c6300 xpos 343 ypos 195 } push $Nd8882950 Dot { name Dot6 tile_color 0x9e3c6300 xpos 343 ypos 157 } push $Ne478bfd0 Dot { name Dot5 tile_color 0x9e3c6300 xpos 343 ypos 119 } Input { inputs 0 name InputVector3 xpos 219 ypos 8 } Dot { name Dot4 tile_color 0xcccccc00 xpos 253 ypos 115 } BlinkScript { inputs 4 recompileCount 12 ProgramGroup 1 KernelDescription "2 \"TransformVector3byMatrix3\" iterate pixelWise 156e29276da8287b847626148a2a784d9969b7d1a3ad81e28187d00a7aaafaca 5 \"src\" Read Point \"matrix0\" Read Point \"matrix1\" Read Point \"matrix2\" Read Point \"dst\" Write Point 0 0 0" kernelSource "kernel TransformVector3byMatrix3 : ImageComputationKernel\n\{\n Image src; // the input image\n Image matrix0; // the input image\n Image matrix1; // the input image\n Image matrix2; // the input image\n Image dst; // the output image\n\n void process() \{\n // Read the input image\n SampleType(src) input = src();\n SampleType(matrix0) m0 = matrix0();\n SampleType(matrix1) m1 = matrix1();\n SampleType(matrix2) m2 = matrix2();\n\n // Create the matrix object (matrix3 in this case)\n float3x3 matrix;\n matrix\[0]\[0] = m0.x;\n matrix\[0]\[1] = m0.y;\n matrix\[0]\[2] = m0.z;\n matrix\[1]\[0] = m1.x;\n matrix\[1]\[1] = m1.y;\n matrix\[1]\[2] = m1.z;\n matrix\[2]\[0] = m2.x;\n matrix\[2]\[1] = m2.y;\n matrix\[2]\[2] = m2.z;\n\n // Multiply the Matrix and the Vector\n float3 vector(input.x, input.y, input.z);\n vector = matrix*vector;\n\n // Write the result to the output image\n dst() = float4(vector.x, vector.y, vector.z, input.w);\n \}\n\};\n" rebuild "" rebuild_finalise "" name BlinkScript1 xpos 219 ypos 223 } Output { name Output1 xpos 219 ypos 323 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_NAN_INF_Killer.gizmo ================================================ Group { name NAN_INF_Killer tile_color 0xff6200ff label "\[value which]" note_font "Bitstream Vera Sans Bold Bold" note_font_color 0xffffffff selected true addUserKnob {20 NAN_INF_Killer} addUserKnob {26 text l " " T "Detects and Kills NAN and INF pixels"} addUserKnob {41 channels T Shuffle1.in} addUserKnob {4 which l Method M {"Replace with 0" "Replace with Color" "Clone Over" "Blur Unpremult" TimeOffset "" "" "" ""}} addUserKnob {6 keepAlpha l "Keep Alpha" +STARTLINE} keepAlpha true addUserKnob {26 ""} addUserKnob {19 replaceColor l "Replace Color"} replaceColor {0 0 0 0} addUserKnob {6 replaceColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 replaceColor_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 color_rgba_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {41 translateText_1 l Translate T Transform1.translate} addUserKnob {20 extraTranslate l "Extra tranlate Options" n 1} extraTranslate 0 addUserKnob {41 rotate T Transform1.rotate} addUserKnob {41 scale T Transform1.scale} addUserKnob {41 skewX l "skew X" T Transform1.skewX} addUserKnob {41 skewY l "skew Y" T Transform1.skewY} addUserKnob {41 skew_order l "skew order" T Transform1.skew_order} addUserKnob {41 center T Transform1.center} addUserKnob {41 invert_matrix l invert T Transform1.invert_matrix} addUserKnob {41 filter T Transform1.filter} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {26 blurUnpremult l Blur/Unpremult T " "} addUserKnob {41 size l "Blur Size" T Blur1.size} addUserKnob {26 ""} addUserKnob {3 timeOffset l TimeOffset} timeOffset -1 addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge1.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge1.fringe} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "kills NANs with options of how to replace" T NAN_Killer} addUserKnob {26 ver l Version: T v04} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x383b5000 label "Replace with Color" note_font_size 36 note_font_color 0xffffffff xpos 439 ypos 455 bdwidth 331 bdheight 349 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x4f4b4200 label "Replace\nwith 0" note_font_size 40 note_font_color 0xffffffff xpos 53 ypos 259 bdwidth 372 bdheight 214 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x634c7400 label "Clone Over" note_font_size 30 note_font_color 0xffffffff xpos 823 ypos 458 bdwidth 187 bdheight 176 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x3f2d4100 label Blur/Unpremult note_font_size 50 note_font_color 0xffffffff xpos 1097 ypos 434 bdwidth 368 bdheight 726 } BackdropNode { inputs 0 name BackdropNode5 tile_color 0x3c4d4400 label Timeoffset note_font_size 50 note_font_color 0xffffffff xpos 1760 ypos 727 bdwidth 270 bdheight 312 } Input { inputs 0 name Inputmask xpos 314 ypos 1901 number 1 } Input { inputs 0 name Input xpos 168 ypos -227 } Dot { name Dot26 note_font_size 41 xpos 202 ypos -90 } set N335887c0 [stack 0] Reformat { type scale scale 2 resize none pbb true name Reformat142 xpos 166 ypos -23 } Shuffle { name Shuffle1 label "\[value in]" xpos 166 ypos 21 } AddChannels { channels rgba name AddChannels1 xpos 166 ypos 79 } set N3359edc0 [stack 0] Dot { name Dot29 note_font_size 41 xpos 200 ypos 191 } set N335a6230 [stack 0] Dot { name Dot30 note_font_size 41 xpos 337 ypos 191 } Expression { expr3 isnan(a)||isinf(a)?0:a name nan_killer_ReplaceWithZero1 selected true xpos 303 ypos 354 } push $N335a6230 Expression { expr0 (isnan(r)||isnan(g)||isnan(b)||isnan(a))||(isinf(r)||isinf(g)||isinf(b)||isinf(a))?0:r expr1 (isnan(r)||isnan(g)||isnan(b)||isnan(a))||(isinf(r)||isinf(g)||isinf(b)||isinf(a))?0:g expr2 (isnan(r)||isnan(g)||isnan(b)||isnan(a))||(isinf(r)||isinf(g)||isinf(b)||isinf(a))?0:b expr3 (isnan(r)||isnan(g)||isnan(b)||isnan(a))||(isinf(r)||isinf(g)||isinf(b)||isinf(a))?0:a name nan_killer_ReplaceWithZero xpos 166 ypos 305 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy4 xpos 166 ypos 350 disable {{!parent.keepAlpha}} } Dot { name Dot1301 note_font_size 41 xpos 200 ypos 404 } set N3353c2a0 [stack 0] Dot { name Dot11 note_font_size 41 xpos 200 ypos 774 } set N335040e0 [stack 0] Dot { name Dot7 note_font_size 41 xpos 57 ypos 774 } Dot { name Dot16 note_font_size 41 xpos 57 ypos 1642 } set N335092f0 [stack 0] Dot { name Dot9 note_font_size 41 xpos 56 ypos 1712 } set N335214d0 [stack 0] Dot { name Dot10 note_font_size 41 xpos 57 ypos 1765 } push $N335214d0 push $N3359edc0 Dot { name Dot28 note_font_size 41 xpos 1620 ypos 82 } Expression { expr3 (isnan(r)||isnan(g)||isnan(b)||isnan(a))||(isinf(r)||isinf(g)||isinf(b)||isinf(a)) name nan_killer_Alpha1 xpos 1586 ypos 456 } Shuffle { red alpha green alpha blue alpha name Shuffle2 tile_color 0xffffffff note_font_size 21 note_font_color 0xffffffff xpos 1586 ypos 520 } Dot { name Dot1 label mask note_font_size 41 xpos 1620 ypos 578 } set N333f8a10 [stack 0] Dot { name Dot20 note_font_size 41 xpos 1620 ypos 659 } set N33273270 [stack 0] Dot { name Dot13 note_font_size 41 xpos 1620 ypos 982 } set N332ebb40 [stack 0] Dot { name Dot2 label mask note_font_size 41 xpos 1704 ypos 982 } push $N3353c2a0 Dot { name Dot19 note_font_size 41 xpos 519 ypos 404 } set N332ec880 [stack 0] Dot { name Dot22 note_font_size 41 xpos 629 ypos 404 } set N332635c0 [stack 0] Dot { name Dot24 note_font_size 41 xpos 904 ypos 404 } set N3328efd0 [stack 0] Dot { name Dot5 note_font_size 41 xpos 1188 ypos 404 } set N334f7380 [stack 0] Dot { name Dot14 note_font_size 41 xpos 1834 ypos 404 } set N334c9e90 [stack 0] TimeOffset { time_offset {{parent.timeOffset}} time "" name TimeOffset1 label "\[value time_offset]" xpos 1800 ypos 827 } Dot { name Dot17 note_font_size 41 xpos 1834 ypos 914 } push $N334c9e90 Dot { name Dot15 note_font_size 41 xpos 1944 ypos 404 } Merge2 { inputs 2+1 operation copy name Merge3 xpos 1910 ypos 979 } Dot { name Dot18 note_font_size 41 xpos 1944 ypos 1132 } push $N332ebb40 push $N33273270 Dot { name Dot6 note_font_size 41 xpos 1308 ypos 659 } set N334b51f0 [stack 0] Invert { channels rgba name Invert1 xpos 1274 ypos 758 } push $N334f7380 Dot { name Dot12 note_font_size 41 xpos 1188 ypos 834 } set N334c0d10 [stack 0] Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy2 xpos 1274 ypos 827 } Blur { channels rgba size 3 name Blur1 label "\[value size]" xpos 1274 ypos 873 } Unpremult { name Unpremult1 xpos 1274 ypos 922 } push $N334c0d10 Merge2 { inputs 2+1 operation copy name Merge4 xpos 1154 ypos 979 } Dot { name Dot8 note_font_size 41 xpos 1188 ypos 1079 } push $N333f8a10 push $N3328efd0 TransformMasked { inputs 1+1 channels rgba translate {4 4} center {2362 1116} shutteroffset centred name Transform1 xpos 870 ypos 575 } Dot { name Dot4 note_font_size 41 xpos 904 ypos 937 } push $N334b51f0 Dot { name Dot3 label mask note_font_size 41 xpos 705 ypos 659 } push $N332ec880 Grade { multiply 0 add {{parent.replaceColor} {parent.replaceColor} {parent.replaceColor} {parent.replaceColor}} name Grade1 xpos 485 ypos 569 } Dot { name Dot21 note_font_size 41 xpos 519 ypos 660 } push $N332635c0 Merge2 { inputs 2+1 operation copy name Merge2 xpos 595 ypos 656 } Dot { name Dot23 note_font_size 41 xpos 629 ypos 846 } push $N335040e0 Switch { inputs 5 which {{parent.which}} name Switch20 label "\[value which]" xpos 166 ypos 1439 } push $N335092f0 ShuffleCopy { inputs 2 alpha alpha2 black red white green red2 blue green2 alpha out2 {{{parent.Shuffle1.in}}} name ShuffleCopy1 xpos 166 ypos 1639 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 166 ypos 1705 disable {{!parent.keepAlpha}} } CopyBBox { inputs 2 name CopyBBox1 xpos 166 ypos 1761 } Reformat { type scale scale {{1/parent.Reformat142.scale}} resize none pbb true name Reformat143 xpos 166 ypos 1826 } push $N335887c0 Dot { name Dot27 note_font_size 41 xpos -33 ypos -90 } Dot { name Dot25 note_font_size 41 xpos -33 ypos 1905 } Merge2 { inputs 2+1 operation copy also_merge all name Merge1 xpos 166 ypos 1901 } Output { name Output1 xpos 167 ypos 2027 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_N_Reflection.gizmo ================================================ Group { name N_Reflection tile_color 0x417c3eff note_font Verdana note_font_color 0xffffffff selected true addUserKnob {20 nReflection} addUserKnob {41 in l "Normal Vector" T Shuffle1.in} addUserKnob {26 EnvMapSettings l "Env Map Settings"} addUserKnob {7 scale l "Scale Resolution" R 0.1 1} scale 1 addUserKnob {41 exposure l Exposure T Exposure1.red} addUserKnob {41 iRotation l Rotate T Transform1.iRotation} } Input { inputs 0 name N label src xpos -65 ypos 46 } Shuffle { in rgb name Shuffle1 xpos -65 ypos 108 } Expression { temp_name0 h temp_expr0 -.001 expr0 r+h expr1 g+h expr2 b+h name Expression1 xpos -65 ypos 167 } Expression { temp_name0 f1 temp_expr0 atan(b/r) temp_name1 f2 temp_expr1 "atan (r/b)" expr0 "b > 0 ? (r>= 0 ? f1 : pi + f1) : (r<=0 ? (3*pi/2) - f2 : (2*pi) + f1)" expr1 "asin (g)" expr2 0 name pos_to_rad xpos -65 ypos 214 } Expression { expr0 degrees(r) expr1 degrees(g) name rad_degree xpos -65 ypos 276 } Expression { expr0 r/360 expr1 (g+90)/180 expr2 0 name degree_UV xpos -65 ypos 344 } Input { inputs 0 name EnvMap label "Environment Map" xpos 215 ypos 56 number 1 } EXPTool { mode Stops green {{red}} blue {{red}} name Exposure1 label "\[value red]" xpos 215 ypos 115 } Reformat { type scale scale {{parent.scale}} name Reformat1 xpos 215 ypos 172 } Tile { columns 4 name Tile1 xpos 215 ypos 216 } Transform { translate {{"(((normalize*(center.x*2)) - center.x)) % (center.x*2)"} 0} scale {-4 1} center {{input.width/2} {input.height/2}} name Transform1 xpos 215 ypos 274 addUserKnob {20 User} addUserKnob {7 normalize} normalize {{"((iRotation + 180)/360)" x70 0.245}} addUserKnob {7 iRotation R -180 180} addUserKnob {41 translate_1 l translate T Transform1.translate} addUserKnob {41 rotate_1 l rotate T Transform1.rotate} addUserKnob {41 center_1 l center T Transform1.center} } STMap { inputs 2 uv rgb name STMap1 xpos 143 ypos 446 } Output { name Output1 xpos 143 ypos 546 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Noise3DTexture.gizmo ================================================ Group { name Noise3DTexture tile_color 0x303030ff note_font_color 0x99ffffff selected true addUserKnob {20 User} addUserKnob {41 outputtype l "output type" T Expression1.outputtype} addUserKnob {41 textureRes l "texture resolution" T Expression1.textureRes} addUserKnob {41 position l "Position offset" T Expression1.position} addUserKnob {41 scale l "World scale" T Expression1.scale} addUserKnob {41 octaves T Expression1.octaves} addUserKnob {41 lacunarity T Expression1.lacunarity} addUserKnob {41 gain T Expression1.gain} addUserKnob {41 alphatype l "Alpha output" T Expression1.alphatype} addUserKnob {41 premultalpha l "Premult color by output alpha?" -STARTLINE T Expression1.premultalpha} addUserKnob {26 ""} addUserKnob {20 About l "Created by Ben Sumner - expand for info" n 1} About 0 addUserKnob {26 description l "" +STARTLINE T "This Gizmo outputs either the input geometry\nwith a 3D world position noise applied as a \ntexture, or it can output the texture itself in \nthe UV space of the model.\n\nYour model must have UVs!\n\nYou can output noise or textured model, \neither with the originally applied alpha, solid \nwhite alpha, or with the generated noise in \nthe alpha channel.\n\nThis node is a good way to get seamless \nnoise textures on your 3D models, or to\nexport a texture to be used for seamless \ndisplacement.\n\ncreated by Ben Sumner\nFeel free to modify and share, just keep \noriginal credit in this description!"} addUserKnob {20 endGroup n -1} } Crop { inputs 0 box {0 0 {Expression1.textureRes.w} {Expression1.textureRes.h}} reformat true crop false name Crop2 xpos 557 ypos 313 } set N4a9be6b0 [stack 0] Shuffle { red white green white blue white alpha white name Shuffle4 label " \[value in]" selected true xpos 727 ypos 258 postage_stamp true } Input { inputs 0 name Input1 xpos 1015 ypos 180 } Dot { name Dot4 xpos 1049 ypos 227 } set N4acb4180 [stack 0] ApplyMaterial { inputs 2 name ApplyMaterial2 xpos 1015 ypos 294 } Dot { name Dot1 xpos 1049 ypos 326 } set N4a8830e0 [stack 0] push $N4a9be6b0 add_layer {P P.red P.green P.blue P.alpha} add_layer {N N.red N.green N.blue N.alpha} ScanlineRender { inputs 2 conservative_shader_sampling false filter Mitchell projection_mode uv shutter 0 spatial_jitter 0.1 motion_vectors_type distance output_shader_vectors true P_channel P N_channel N name ScanlineRender1 xpos 676 ypos 405 } Shuffle { in P in2 rgba alpha alpha2 name Shuffle2 label " \[value in]" xpos 745 ypos 443 postage_stamp true } set N4a9f0d60 [stack 0] Blur { size 2 crop false name Blur2 xpos 844 ypos 473 } Shuffle { black alpha out2 mask name Shuffle7 xpos 844 ypos 511 } Unpremult { channels rgba alpha mask.a name Unpremult1 xpos 844 ypos 538 } Remove { channels mask name Remove1 xpos 844 ypos 576 } Add { channels rgb value {{parent.Expression1.position.x} {parent.Expression1.position.y} {parent.Expression1.position.z} 0} name Add6 xpos 844 ypos 614 } Expression { expr0 (fBm(r*scale.x,g*scale.y,b*scale.z,octaves,lacunarity,gain)/2+0.5) expr1 (fBm(r*scale.x,g*scale.y,b*scale.z,octaves,lacunarity,gain)/2+0.5) expr2 (fBm(r*scale.x,g*scale.y,b*scale.z,octaves,lacunarity,gain)/2+0.5) expr3 (fBm(r*scale.x,g*scale.y,b*scale.z,octaves,lacunarity,gain)/2+0.5) maskChannelInput -rgba.alpha name Expression1 xpos 844 ypos 640 addUserKnob {20 User} addUserKnob {4 outputtype l "output type" M {"UV Texture" "Textured Geometry"}} addUserKnob {14 textureRes l "texture resolution" R 0 100} textureRes 2048 addUserKnob {13 position l "Position offset"} addUserKnob {13 scale l "World scale"} scale {1 1 1} addUserKnob {3 octaves} octaves 10 addUserKnob {7 lacunarity R 0 10} lacunarity 2 addUserKnob {7 gain} gain 0.5 addUserKnob {4 alphatype l "Alpha output" M {Input "Solid white" "Noise output"}} alphatype "Solid white" addUserKnob {6 premultalpha l "Premult color by output alpha?" -STARTLINE} } set N4ac045f0 [stack 0] Dot { name Dot3 xpos 960 ypos 697 } Premult { name Premult2 xpos 926 ypos 734 disable {{1-parent.Expression1.premultalpha}} } push $N4ac045f0 Shuffle { alpha white name Shuffle6 xpos 844 ypos 694 } push $N4acb4180 push $N4a9be6b0 ScanlineRender { inputs 2 conservative_shader_sampling false filter Mitchell projection_mode uv shutter 0 spatial_jitter 0.1 motion_vectors_type distance output_shader_vectors true P_channel P N_channel N name ScanlineRender2 xpos 513 ypos 375 } set N4accf280 [stack 0] push $N4a9f0d60 ShuffleCopy { inputs 2 red alpha green alpha blue alpha black alpha2 out2 mask name ShuffleCopy1 xpos 592 ypos 416 } set N4acdfa30 [stack 0] Shuffle { in2 mask alpha red2 name Shuffle3 xpos 391 ypos 446 } push $N4acdfa30 Blur { size 2 crop false name Blur1 xpos 513 ypos 443 } Unpremult { channels rgba alpha mask.a name Unpremult2 xpos 513 ypos 497 } Merge2 { inputs 2 name Merge1 xpos 391 ypos 542 } Shuffle { green red blue red alpha red name Shuffle5 label " \[value in]" xpos 391 ypos 568 postage_stamp true } push $N4ac045f0 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 752 ypos 683 } Premult { name Premult1 xpos 752 ypos 734 disable {{1-parent.Expression1.premultalpha}} } Switch { inputs 3 which {{Expression1.alphatype}} name Switch2 xpos 844 ypos 776 } set N4ad3da80 [stack 0] push $N4a8830e0 ApplyMaterial { inputs 2 name ApplyMaterial1 xpos 1015 ypos 818 } push $N4ad3da80 Switch { inputs 2 which {{Expression1.outputtype}} name Switch1 xpos 1015 ypos 911 } Dot { name Dot5 xpos 1049 ypos 977 } Output { name Output1 xpos 1015 ypos 1075 } push $N4accf280 Shuffle { red alpha green alpha blue alpha black alpha out2 mask name Shuffle1 xpos 513 ypos 397 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Noise3D_spin.gizmo ================================================ Group { name Noise3D inputs 2 help "Generate Noise in 3D space based on Position passes. It includes pre-made Position passes for some 3D primitives, or can use a custom pass. Uses a 4D noise internally so that the 4th dimension can be used to add a 'boiling' effect" addUserKnob {20 noise3d l "3D Noise"} addUserKnob {4 mapping l Mapping t "Generates a Noise based on a 3D shape, unfolded to fit into a UV plane.\n\nThe Custom P Input lets you input the shape of your choice. Using a pWorld pass as cutom P will generate a 3D noise as seen from the same camera as used to render the Pworld. Ensure an Alpha channel is present for Custom P." M {"Card (Flat)" Spherical "Cylindrical (Tile X)" "Cylinder 4D (Tile X and Y)" "Custom P Input" "" ""}} addUserKnob {26 ""} addUserKnob {41 translate T Axis_3D.translate} addUserKnob {41 rotate T Axis_3D.rotate} addUserKnob {41 scaling l scale T Axis_3D.scaling} addUserKnob {41 uniform_scale l "uniform scale" T Axis_3D.uniform_scale} addUserKnob {26 ""} addUserKnob {7 boiling t "Use this knob to animate the noise and create a 'boiling' effect without a visible 3D direction." R 0 10} addUserKnob {26 "" +STARTLINE} addUserKnob {4 type t "Choose between an fBm and Turbulent Noise model." M {fBm Turbulence ""}} addUserKnob {7 octaves R 0 10} octaves 5 addUserKnob {7 lacunarity R 0 10} lacunarity 2 addUserKnob {7 contrast} contrast 0.5 addUserKnob {7 gain} gain 0.5 addUserKnob {7 gamma} gamma 0.5 addUserKnob {26 spin_copyright_div l "" +STARTLINE} addUserKnob {26 spin_copyright l "" t "© SPINVFX\nNoise_3D\nVersion 1.0\n2018" +STARTLINE T "SPINVFX - Version 1.0 - 2018 - Github Page"} } Axis2 { inputs 0 translate {1 0 0} rotate {30 30 0} name Axis_3D xpos 534 ypos 170 } Input { inputs 0 name P label 1 xpos 205 ypos -58 number 1 } Remove { operation keep channels rgba name Remove1 xpos 205 ypos 17 } Dot { name Dot14 tile_color 0x9e3c6300 xpos 239 ypos 57 } set Nacd90f0 [stack 0] Dot { name Dot5 tile_color 0x9e3c6300 xpos 239 ypos 568 } push $Nacd90f0 Shuffle { alpha white name Shuffle2 label "in \[value in]-->out \[value out]" xpos 279 ypos 47 } Input { inputs 0 name img label 0 xpos 1077 ypos -389 } Dot { name Dot2 tile_color 0xcccccc00 xpos 1111 ypos -223 } Constant { inputs 0 channels rgb name Constant1 xpos 955 ypos -385 } Switch { inputs 2 which {{"\[exists parent.input0] "}} name Switch1 xpos 955 ypos -227 } Dot { name Dot3 tile_color 0xcccccc00 xpos 989 ypos -187 } set Nacf7e30 [stack 0] Dot { name Dot1 tile_color 0xcccccc00 xpos 418 ypos -187 } Crop { box {0 0 {width} {height}} crop false name Crop2 xpos 384 ypos -146 } Dot { name Dot8 tile_color 0xa57aaa00 xpos 418 ypos -64 } set Nad0c430 [stack 0] Dot { name Dot9 tile_color 0xa57aaa00 xpos 553 ypos -64 } set Nad10ee0 [stack 0] Dot { name Dot11 tile_color 0xa57aaa00 xpos 688 ypos -64 } set Nad15960 [stack 0] Dot { name Dot7 tile_color 0xa57aaa00 xpos 839 ypos -64 } Expression { temp_name0 lat temp_expr0 "y / height *360-180" temp_name1 lon temp_expr1 "x / width * 360-180" temp_name2 r temp_expr2 0.5 expr0 "(r * cos (0.017453292519943295769236907684886 * lon) +1)*1.5" expr1 "(r * cos (0.017453292519943295769236907684886 * lat) +1)*1.5" expr2 "(r * sin(0.017453292519943295769236907684886 * lon)+1)*1.5" expr3 "(r * sin(0.017453292519943295769236907684886 * lat)+1)*1.5" name Cylinder4D xpos 805 ypos -21 } Dot { name Dot15 tile_color 0xcccccc00 xpos 839 ypos 57 } push $Nad15960 Expression { temp_name0 lat temp_expr0 "y / height * 180- 90" temp_name1 lon temp_expr1 "x / width * 360-180" temp_name2 r temp_expr2 0.5 expr0 "(r * cos (0.017453292519943295769236907684886 * lon) +1)*1.5" expr1 y/height*3 expr2 "(r * sin(0.017453292519943295769236907684886 * lon)+1)*1.5" expr3 1 name CylinderP xpos 654 ypos -23 } Dot { name Dot13 tile_color 0xcccccc00 xpos 688 ypos 21 } push $Nad10ee0 Expression { temp_name0 lat temp_expr0 "y / height * 180- 90" temp_name1 lon temp_expr1 "x / width * 360-180" temp_name2 r temp_expr2 "cos(0.017453292519943295769236907684886 * lat)" expr0 "(r * cos (0.017453292519943295769236907684886 * lon) +1)*1.5" expr1 "(sin (0.017453292519943295769236907684886 * lat)+1)*1.5" expr2 "(r * sin(0.017453292519943295769236907684886 * lon)+1)*1.5" expr3 1 name SphereP xpos 519 ypos -21 } push $Nad0c430 Expression { expr0 x/350 expr1 y/350 expr2 0 expr3 1 name CardP xpos 384 ypos -21 } Switch { inputs 5 which {{parent.mapping}} name Switch3 xpos 384 ypos 53 } ColorMatrix { matrix { {{Axis_3D.world_matrix.0} {Axis_3D.world_matrix.1} {Axis_3D.world_matrix.2}} {{Axis_3D.world_matrix.4} {Axis_3D.world_matrix.5} {Axis_3D.world_matrix.6}} {{Axis_3D.world_matrix.8} {Axis_3D.world_matrix.9} {Axis_3D.world_matrix.10}} } name ColorMatrix1 xpos 384 ypos 186 } Add { channels rgba value {{Axis_3D.translate.x} {Axis_3D.translate.y} {Axis_3D.translate.z} {parent.boiling}} name Add1 xpos 384 ypos 229 } BlinkScript { recompileCount 27 ProgramGroup 1 KernelDescription "2 \"Noise4D\" iterate pixelWise d60f21004827daf93cc7aae3c8a9d35a464dc4075e83f5304202d888c93a31ad 2 \"src\" Read Point \"dst\" Write Point 5 \"octaves\" Int 1 CAAAAA== \"lacunarity\" Float 1 AAAAQA== \"amplitude\" Float 1 mpkZPw== \"gain\" Float 1 AAAAPw== \"mode\" Int 1 AAAAAA== 5 \"octaves\" 1 1 \"lacunarity\" 1 1 \"amplitude\" 1 1 \"gain\" 1 1 \"mode\" 1 1 0" kernelSource "//Based on https://github.com/Draradech/csworldgen/blob/master/simplexnoise.cpp\n//Ported by Mads Hagbarth Lund 2014\n//Modifications (fBm and Turbulence) by Erwan Leroy 2018 at Spin VFX\n\n/* Copyright (c) 2007-2012 Eliot Eshelman\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n *\n */\n\n\nint fastfloor( const float x ) \{ return x > 0 ? (int) x : (int) x - 1; \}\n\ninline float raw_noise_4d(const float4 coord)\n\{\n int simplex\[64]\[4] =\n \{\n \{0,1,2,3\},\{0,1,3,2\},\{0,0,0,0\},\{0,2,3,1\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{1,2,3,0\},\n \{0,2,1,3\},\{0,0,0,0\},\{0,3,1,2\},\{0,3,2,1\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{1,3,2,0\},\n \{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\n \{1,2,0,3\},\{0,0,0,0\},\{1,3,0,2\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{2,3,0,1\},\{2,3,1,0\},\n \{1,0,2,3\},\{1,0,3,2\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{2,0,3,1\},\{0,0,0,0\},\{2,1,3,0\},\n \{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\n \{2,0,1,3\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{3,0,1,2\},\{3,0,2,1\},\{0,0,0,0\},\{3,1,2,0\},\n \{2,1,0,3\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{3,1,0,2\},\{0,0,0,0\},\{3,2,0,1\},\{3,2,1,0\}\n \};\n\n int perm\[512] =\n \{\n 151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,\n 8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,\n 35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,\n 134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,\n 55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208, 89,\n 18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,\n 250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,\n 189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,\n 172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,\n 228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,\n 107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,\n 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180,\n\n 151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,\n 8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,\n 35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,\n 134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,\n 55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208, 89,\n 18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,\n 250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,\n 189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,\n 172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,\n 228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,\n 107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,\n 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180\n \};\n\n int grad4\[32]\[4]=\n \{\n \{0,1,1,1\}, \{0,1,1,-1\}, \{0,1,-1,1\}, \{0,1,-1,-1\},\n \{0,-1,1,1\}, \{0,-1,1,-1\}, \{0,-1,-1,1\}, \{0,-1,-1,-1\},\n \{1,0,1,1\}, \{1,0,1,-1\}, \{1,0,-1,1\}, \{1,0,-1,-1\},\n \{-1,0,1,1\}, \{-1,0,1,-1\}, \{-1,0,-1,1\}, \{-1,0,-1,-1\},\n \{1,1,0,1\}, \{1,1,0,-1\}, \{1,-1,0,1\}, \{1,-1,0,-1\},\n \{-1,1,0,1\}, \{-1,1,0,-1\}, \{-1,-1,0,1\}, \{-1,-1,0,-1\},\n \{1,1,1,0\}, \{1,1,-1,0\}, \{1,-1,1,0\}, \{1,-1,-1,0\},\n \{-1,1,1,0\}, \{-1,1,-1,0\}, \{-1,-1,1,0\}, \{-1,-1,-1,0\}\n \};\n float x = coord.x;\n float y = coord.y;\n float z = coord.z;\n float w = coord.w;\n float F4 = (sqrt(5.0f)-1.0)/4.0;\n float G4 = (5.0-sqrt(5.0f))/20.0;\n float n0, n1, n2, n3, n4;\n float s = (x + y + z + w) * F4;\n int i = fastfloor(x + s);\n int j = fastfloor(y + s);\n int k = fastfloor(z + s);\n int l = fastfloor(w + s);\n float t = (i + j + k + l) * G4;\n float X0 = i - t;\n float Y0 = j - t;\n float Z0 = k - t;\n float W0 = l - t;\n float x0 = x - X0;\n float y0 = y - Y0;\n float z0 = z - Z0;\n float w0 = w - W0;\n int c1 = (x0 > y0) ? 32 : 0;\n int c2 = (x0 > z0) ? 16 : 0;\n int c3 = (y0 > z0) ? 8 : 0;\n int c4 = (x0 > w0) ? 4 : 0;\n int c5 = (y0 > w0) ? 2 : 0;\n int c6 = (z0 > w0) ? 1 : 0;\n int c = c1 + c2 + c3 + c4 + c5 + c6;\n int i1, j1, k1, l1;\n int i2, j2, k2, l2;\n int i3, j3, k3, l3;\n i1 = simplex\[c]\[0]>=3 ? 1 : 0;\n j1 = simplex\[c]\[1]>=3 ? 1 : 0;\n k1 = simplex\[c]\[2]>=3 ? 1 : 0;\n l1 = simplex\[c]\[3]>=3 ? 1 : 0;\n i2 = simplex\[c]\[0]>=2 ? 1 : 0;\n j2 = simplex\[c]\[1]>=2 ? 1 : 0;\n k2 = simplex\[c]\[2]>=2 ? 1 : 0;\n l2 = simplex\[c]\[3]>=2 ? 1 : 0;\n i3 = simplex\[c]\[0]>=1 ? 1 : 0;\n j3 = simplex\[c]\[1]>=1 ? 1 : 0;\n k3 = simplex\[c]\[2]>=1 ? 1 : 0;\n l3 = simplex\[c]\[3]>=1 ? 1 : 0;\n float x1 = x0 - i1 + G4;\n float y1 = y0 - j1 + G4;\n float z1 = z0 - k1 + G4;\n float w1 = w0 - l1 + G4;\n float x2 = x0 - i2 + 2.0*G4;\n float y2 = y0 - j2 + 2.0*G4;\n float z2 = z0 - k2 + 2.0*G4;\n float w2 = w0 - l2 + 2.0*G4;\n float x3 = x0 - i3 + 3.0*G4;\n float y3 = y0 - j3 + 3.0*G4;\n float z3 = z0 - k3 + 3.0*G4;\n float w3 = w0 - l3 + 3.0*G4;\n float x4 = x0 - 1.0 + 4.0*G4;\n float y4 = y0 - 1.0 + 4.0*G4;\n float z4 = z0 - 1.0 + 4.0*G4;\n float w4 = w0 - 1.0 + 4.0*G4;\n int ii = i & 255;\n int jj = j & 255;\n int kk = k & 255;\n int ll = l & 255;\n int gi0 = perm\[ii+perm\[jj+perm\[kk+perm\[ll]]]] % 32;\n int gi1 = perm\[ii+i1+perm\[jj+j1+perm\[kk+k1+perm\[ll+l1]]]] % 32;\n int gi2 = perm\[ii+i2+perm\[jj+j2+perm\[kk+k2+perm\[ll+l2]]]] % 32;\n int gi3 = perm\[ii+i3+perm\[jj+j3+perm\[kk+k3+perm\[ll+l3]]]] % 32;\n int gi4 = perm\[ii+1+perm\[jj+1+perm\[kk+1+perm\[ll+1]]]] % 32;\n\n float t0 = 0.6 - x0*x0 - y0*y0 - z0*z0 - w0*w0;\n\n if(t0<0) \{\n n0 = 0.0;\n \}\n else\n \{\n t0 *= t0;\n n0 = t0 * t0 * dot(float4(grad4\[gi0]\[0],grad4\[gi0]\[2],grad4\[gi0]\[3],grad4\[gi0]\[3]), float4(x0, y0, z0, w0));\n \}\n\n float t1 = 0.6 - x1*x1 - y1*y1 - z1*z1 - w1*w1;\n\n if(t1<0) \{\n n1 = 0.0;\n \}\n else \{\n t1 *= t1;\n n1 = t1 * t1 * dot(float4(grad4\[gi1]\[0],grad4\[gi1]\[2],grad4\[gi1]\[3],grad4\[gi1]\[3]), float4(x1, y1, z1, w1));\n \}\n\n float t2 = 0.6 - x2*x2 - y2*y2 - z2*z2 - w2*w2;\n\n if(t2<0) \{\n n2 = 0.0;\n \}\n else \{\n t2 *= t2;\n n2 = t2 * t2 * dot(float4(grad4\[gi2]\[0],grad4\[gi2]\[2],grad4\[gi2]\[3],grad4\[gi2]\[3]), float4(x2, y2, z2, w2));\n \}\n\n float t3 = 0.6 - x3*x3 - y3*y3 - z3*z3 - w3*w3;\n\n if(t3<0) \{\n n3 = 0.0;\n \}\n else \{\n t3 *= t3;\n n3 = t3 * t3 * dot(float4(grad4\[gi3]\[0],grad4\[gi3]\[2],grad4\[gi3]\[3],grad4\[gi3]\[3]), float4(x3, y3, z3, w3));\n \}\n\n float t4 = 0.6 - x4*x4 - y4*y4 - z4*z4 - w4*w4;\n\n if(t4<0) \{\n n4 = 0.0;\n \}\n else \{\n t4 *= t4;\n n4 = t4 * t4 * dot(float4(grad4\[gi4]\[0],grad4\[gi4]\[2],grad4\[gi4]\[3],grad4\[gi4]\[3]), float4(x4, y4, z4, w4));\n \}\n return 27.0 * (n0 + n1 + n2 + n3 + n4);\n\}\n\ninline float fBm_4d(const float octaves, const float lacunarity, const float gain, const float4 coord, float amplitude)\n\{\n float total = 0;\n float4 frequency = coord;\n for( int i=0; i < octaves; i++ ) \{\n total += (float)raw_noise_4d(frequency) * amplitude;\n frequency *= lacunarity;\n amplitude *= gain;\n \}\n return float(total)*0.5f+0.5f;\n\}\n\ninline float turbulence_4d(const float octaves, const float lacunarity, const float gain, const float4 coord, float amplitude)\n\{\n float total = 0;\n float4 frequency = coord;\n for( int i=0; i < octaves; i++ ) \{\n total += fabs((float)raw_noise_4d(frequency)) * amplitude;\n frequency *= lacunarity;\n amplitude *= gain;\n \}\n return float(total);\n\}\n\nkernel Noise4D : ImageComputationKernel\n\{\n Image src;\n Image dst;\nparam:\n int octaves;\n float lacunarity;\n float amplitude;\n float gain;\n int mode;\n\n void define() \{\n defineParam(octaves, \"octaves\", 8);\n defineParam(lacunarity, \"lacunarity\", 2.0f);\n defineParam(amplitude, \"amplitude\", 0.6f);\n defineParam(gain, \"gain\", 0.5f);\n \}\n void process() \{\n float sample;\n if (mode == 0)\{\n sample = (float)fBm_4d(float(octaves),lacunarity,gain,src(), amplitude);\n \} else \{\n sample = (float)turbulence_4d(float(octaves),lacunarity,gain,src(), amplitude);\n \}\n dst() = float4(sample,sample,sample,sample);\n\}\n\};" rebuild "" Noise4D_octaves {{parent.octaves}} Noise4D_lacunarity {{parent.lacunarity}} Noise4D_amplitude {{parent.contrast}} Noise4D_gain {{parent.gain}} Noise4D_mode {{parent.type}} rebuild_finalise "" name BlinkScript1 selected true xpos 384 ypos 332 } Clamp { name Clamp1 xpos 384 ypos 370 } Gamma { channels {rgba.red rgba.green rgba.blue none} value {{parent.gamma}} name Gamma1 xpos 384 ypos 417 } Shuffle { alpha blue name Shuffle1 label "in \[value in]-->out \[value out]" xpos 384 ypos 463 } set N20731ba0 [stack 0] Merge2 { inputs 2 operation mask bbox B name Merge2 xpos 384 ypos 564 disable {{"parent.mapping != 4"}} } Dot { name Dot4 tile_color 0x4b5ec600 xpos 418 ypos 620 } push $Nacf7e30 Merge2 { inputs 2 bbox B name Merge1 xpos 955 ypos 616 } Output { name Output1 xpos 955 ypos 789 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_NoiseAdvanced.gizmo ================================================ Group { name NoiseAdvanced help "Noise node with various time sliders. Can quickly create animated noise.\n\nAdded an Overscan Slider for when you need the noise pattern to extend beyond the format edges." onCreate "n = nuke.thisNode()\no = n.knob('overscan')\no.setRange(0, 500)" tile_color 0x5f5f5fff note_font "Verdana Bold Bold Bold Bold Bold Bold Bold Bold Bold" note_font_color 0xffffffff selected true addUserKnob {20 Noise} addUserKnob {41 output T Noise1.output} addUserKnob {41 premult T Noise1.premult} addUserKnob {41 cliptype l "clip to" T Noise1.cliptype} addUserKnob {41 replace -STARTLINE T Noise1.replace} addUserKnob {41 invert -STARTLINE T Noise1.invert} addUserKnob {41 opacity T Noise1.opacity} addUserKnob {41 maskChannelInput l mask T Noise1.maskChannelInput} addUserKnob {41 inject -STARTLINE T Noise1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Noise1.invert_mask} addUserKnob {26 ""} addUserKnob {14 overscan l Overscan R 0 500} addUserKnob {26 ""} addUserKnob {41 type T Noise1.type} addUserKnob {41 size l x/ysize T FOR_SETTINGS.size} addUserKnob {7 speedSizeX l "Speed of size X" R 0 4} addUserKnob {7 speedSizeY l "Speed of size Y" R 0 4} addUserKnob {26 ""} addUserKnob {41 zoffset l z T FOR_SETTINGS.zoffset} addUserKnob {7 speedZ l "Speed of Z" R 0 0.25} addUserKnob {26 ""} addUserKnob {41 octaves T Noise1.octaves} addUserKnob {41 nyquist l "clip at Nyquist limit" -STARTLINE T Noise1.nyquist} addUserKnob {41 lacunarity T Noise1.lacunarity} addUserKnob {41 gain T Noise1.gain} addUserKnob {41 gamma T Noise1.gamma} addUserKnob {20 Transform} addUserKnob {41 transform T Noise1.transform} addUserKnob {41 translate T FOR_SETTINGS.translate} addUserKnob {7 transX l "Speed of Trans X" R 0 400} addUserKnob {7 transY l "Speed of Trans Y" R 0 400} addUserKnob {26 ""} addUserKnob {41 rotate T FOR_SETTINGS.rotate} addUserKnob {7 rotSpeed l "Speed of Rotation" R 0 60} addUserKnob {26 ""} addUserKnob {41 scale T FOR_SETTINGS.scale} addUserKnob {7 speedScaleX l "Speed of Scale X" R 0 4} addUserKnob {7 speedScaleY l "Speed of Scale Y" R 0 4} addUserKnob {26 ""} addUserKnob {41 skew +INVISIBLE T Noise1.skew} addUserKnob {41 skewX l "skew X" T FOR_SETTINGS.skewX} addUserKnob {41 skewY l "skew Y" T FOR_SETTINGS.skewY} addUserKnob {41 skew_order l "skew order" T FOR_SETTINGS.skew_order} addUserKnob {41 center T FOR_SETTINGS.center} addUserKnob {41 xrotate T Noise1.xrotate} addUserKnob {41 yrotate T Noise1.yrotate} addUserKnob {20 "" l Color} addUserKnob {41 color T Noise1.color} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Name: T NoiseAdvanced} addUserKnob {26 ver l Version: T v03} } Input { inputs 0 name Inputmask xpos -79 ypos -147 number 1 } Input { inputs 0 name Input xpos -205 ypos -295 } Group { name CropBBox onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\n\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)" tile_color 0xa57aaaff note_font "Verdana Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" note_font_color 0xffffffff xpos -205 ypos -256 disable {{"\[exists parent.input0]\n"}} addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {20 inputBbox l "input Bbox Data" n 1} inputBbox 0 addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 bboxCenter l "BBox Center" R 0 100} bboxCenter {{"(this.Crop6.box.r-this.Crop6.box.x)/2 + this.Crop6.box.x"} {"(this.Crop6.box.t-this.Crop6.box.y)/2 + this.Crop6.box.y"}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 369 } Crop { box {{curve} {curve} {input.width} {input.height}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 466 } Output { name Output1 xpos 261 ypos 583 } end_group set N3cfa5000 [stack 0] AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -205 ypos -206 } Noise { inputs 1+1 cliptype none size {{parent.FOR_SETTINGS.size.0+(t*parent.speedSizeX)} {parent.FOR_SETTINGS.size.1+(t*parent.speedSizeY)}} zoffset {{parent.FOR_SETTINGS.zoffset+(frame*speedZ)}} translate {{parent.FOR_SETTINGS.translate.x+t*transX} {parent.FOR_SETTINGS.translate.y+t*transY}} rotate {{parent.FOR_SETTINGS.rotate+(t*rotSpeed)}} scale {{parent.FOR_SETTINGS.scale.w+(t*speedScaleX)} {parent.FOR_SETTINGS.scale.h+(t*speedScaleY)}} center {{parent.FOR_SETTINGS.center} {parent.FOR_SETTINGS.center}} name Noise1 selected true xpos -205 ypos -147 } Output { name Output1 xpos -205 ypos -35 } push $N3cfa5000 Noise { center {{input.width/2} {input.height/2}} name FOR_SETTINGS xpos -331 ypos -200 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_NormalizeVector2.gizmo ================================================ Group { name NormalizeVector2_ help "Normalize the magnitude of a Vector2 (to be of magnitude 1)" addUserKnob {20 main_tab l "Normalize Vector2"} addUserKnob {41 in l "Vector B Layer" t "Layer containing the vector information for input B" T vector_layer.in} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vectorB xpos 0 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 108 } set N78cf630 [stack 0] Shuffle { name vector_layer xpos 140 ypos 104 } Remove { operation keep channels rgba name Remove1 xpos 140 ypos 130 } set N78e2f00 [stack 0] push $N78e2f00 Expression { channel0 {rgba.red rgba.green -rgba.blue -rgba.alpha} expr0 sqrt((r*r)+(g*g)) channel1 {-rgba.red -rgba.green rgba.blue rgba.alpha} expr1 1 channel2 {-rgba.red -rgba.green -rgba.blue none} channel3 {none none none -rgba.alpha} name Mag2 xpos 289 ypos 216 } Merge2 { inputs 2 operation divide bbox B name Merge1 xpos 140 ypos 267 } Dot { name Dot2 tile_color 0x4b5ec600 xpos 174 ypos 364 } push $N78cf630 ShuffleCopy { inputs 2 in2 none red red green green blue blue out {{{parent.vector_layer.in}}} name ShuffleCopy1 xpos 0 ypos 360 } Output { name Output1 xpos 0 ypos 506 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_NormalizeVector3.gizmo ================================================ Group { name NormalizeVector3_ help "Normalize the magnitude of a Vector3 (to be of magnitude 1)" addUserKnob {20 main_tab l "Normalize Vector3"} addUserKnob {41 in l "Vector B Layer" t "Layer containing the vector information for input B" T vector_layer.in} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vectorB xpos 0 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 108 } set N792f390 [stack 0] Shuffle { name vector_layer xpos 140 ypos 104 } Remove { operation keep channels rgba name Remove1 xpos 140 ypos 130 } Dot { name Dot3 tile_color 0x9e3c6300 xpos 174 ypos 156 } set Ne7eccb90 [stack 0] push $Ne7eccb90 Dot { name Dot4 tile_color 0x9e3c6300 xpos 377 ypos 156 } Expression { channel0 rgba expr0 sqrt((r*r)+(g*g)+(b*b)) channel2 {-rgba.red -rgba.green -rgba.blue none} channel3 {none none none -rgba.alpha} name Mag3 xpos 343 ypos 209 } Dot { name Dot5 tile_color 0xcccccc00 xpos 377 ypos 271 } Merge2 { inputs 2 operation divide bbox B name Merge1 xpos 140 ypos 267 } Dot { name Dot2 tile_color 0x4b5ec600 xpos 174 ypos 364 } push $N792f390 ShuffleCopy { inputs 2 in2 none red red green green blue blue out {{{parent.vector_layer.in}}} name ShuffleCopy1 xpos 0 ypos 360 } Output { name Output1 xpos 0 ypos 506 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_NormalsRotate.gizmo ================================================ Group { name NormalsRotate onCreate "\nn=nuke.thisNode()\nn\['mblack'].setFlag(0x0000000000000004)\nn\['mgain'].setFlag(0x0000000000000004)\nn\['mgamma'].setFlag(0x0000000000000004)\n" tile_color 0xff00ff selected true addUserKnob {20 User} addUserKnob {41 in l "Normals in" t "Select the layer containing the \nnormals" T Shuffle1.in} addUserKnob {41 pick l "Pick Plane" T Plane.pick} addUserKnob {22 planereset l Reset -STARTLINE T "nuke.thisNode().knob(\"pick\").setValue(0,0)\nnuke.thisNode().knob(\"pick\").setValue(0,1)\nnuke.thisNode().knob(\"pick\").setValue(1,2)"} addUserKnob {26 ""} addUserKnob {26 divider_2 l "" +STARTLINE T " "} addUserKnob {26 manual l "Manual Rotation" -STARTLINE T " "} addUserKnob {22 rotreset l Reset -STARTLINE T "nuke.thisNode().knob(\"yoffset\").setValue(0)\nnuke.thisNode().knob(\"xzrot\").setValue(0)"} addUserKnob {7 yoffset l Horizontal t "Rotate around the world Y axis" R -180 180} addUserKnob {7 xzrot l Vertical t "Rotates around the rotated X axis" R -180 180} addUserKnob {26 ""} addUserKnob {26 matte l "@b;Matte Output" T " "} addUserKnob {6 inv l "Invert " t "This happens before the matte \ntweaks" -STARTLINE} addUserKnob {6 amask l "Mask by Alpha " -STARTLINE} addUserKnob {6 unpre l Unpremult -STARTLINE} addUserKnob {7 exp l Exponent t "Exponential falloff" R 1 10} exp 2 addUserKnob {22 expreset l Reset -STARTLINE T "nuke.thisNode().knob(\"exp\").setValue(2)"} addUserKnob {7 mblack l Black R -1 1} addUserKnob {22 mblackreset l Reset -STARTLINE T "nuke.thisNode().knob(\"mblack\").setValue(0)"} addUserKnob {7 mgain l White R 0 4} mgain 1 addUserKnob {22 mgainreset l Reset -STARTLINE T "nuke.thisNode().knob(\"mgain\").setValue(1)"} addUserKnob {7 mgamma l Gamma R 0 4} mgamma 1 addUserKnob {22 mgammareset l Reset -STARTLINE T "nuke.thisNode().knob(\"mgamma\").setValue(1)"} addUserKnob {26 "" +STARTLINE} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge1.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge1.fringe} addUserKnob {41 mix T Merge1.mix} addUserKnob {20 info l Info} addUserKnob {26 infotext l "" +STARTLINE T "W_SuperNormal generates a surface angle based matte using normals.\n\n1. Select the layer containing normals in the dropdown menu.\n2. Enable color picker and pick the point where you want the matte to be white.\n (I look at the alpha output, hold ctrl+alt and \"glide\" over the surfaces.)\n3. You can also manually rotate the matte. When you colorpick a new point,\n it is recommended that you reset the manual rotation values to 0.\n"} addUserKnob {20 v2_1_group l "v2.1 - Feb 2019" n 1} v2_1_group 0 addUserKnob {26 v2_1_text l "" +STARTLINE T " -Manual rotation working as originally envisioned: It is more intuitive \n and faster to reach any desired angle with horizontal(Y) and vertical\n rotation than with separate XYZ rotations.\n -General cleanup & refinements.\n"} addUserKnob {20 endGroup n -1} addUserKnob {20 v2group l "v2.0 - 2018" n 1} v2group 0 addUserKnob {26 v2text l "" +STARTLINE T " -Adopted a different method for rotating normals shown to me by Daniel Pelc\n -Simpler math for converting normals into a matte with the help of Erwan Leroy\n"} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 v1_1_text l "" +STARTLINE T " v1.1 - 2016"} addUserKnob {26 ""} addUserKnob {26 spacer_1 l "" +STARTLINE T " "} addUserKnob {26 copyright l "© Wes Heo" -STARTLINE T " "} } Axis2 { inputs 0 rot_order YXZ rotate {0 {-parent.yoffset} 0} name Axis10 label H xpos -173 ypos -163 } Axis2 { inputs 0 rot_order YXZ rotate {{parent.xzrot} {-degrees(parent.Plane.picked.g)} 0} name Axis2 label V xpos -171 ypos -62 } Axis2 { inputs 0 rot_order YXZ rotate {0 {-parent.Axis2.rotate.y} 0} name Axis5 label V xpos -170 ypos 34 } Input { inputs 0 name Inputmask xpos 132 ypos 544 number 1 } Input { inputs 0 name N xpos 0 ypos -425 } Shuffle { in rgb alpha red2 out rgb name Shuffle1 xpos 0 ypos -347 } set Ndc5b920 [stack 0] Dot { name Dot1 xpos 315 ypos 289 } push $Ndc5b920 Unpremult { name Unpremult1 xpos 0 ypos -286 disable {{!parent.unpre}} } NoOp { name Plane xpos 0 ypos -218 addUserKnob {20 User} addUserKnob {18 pick l "User Picked Plane" R -1 1} pick {0 0 1} addUserKnob {6 pick_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 calc l "Internal Conversions"} addUserKnob {18 picked} picked {0 {"(atan2(pick.r, pick.b))"} 0} addUserKnob {6 picked_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { matrix { {{parent.Axis10.world_matrix.0} {parent.Axis10.world_matrix.1} {parent.Axis10.world_matrix.2}} {{parent.Axis10.world_matrix.4} {parent.Axis10.world_matrix.5} {parent.Axis10.world_matrix.6}} {{parent.Axis10.world_matrix.8} {parent.Axis10.world_matrix.9} {parent.Axis10.world_matrix.10}} } name ColorMatrix2 xpos 0 ypos -148 disable {{parent.yoffset==0}} } ColorMatrix { matrix { {{parent.Axis2.world_matrix.0} {parent.Axis2.world_matrix.1} {parent.Axis2.world_matrix.2}} {{parent.Axis2.world_matrix.4} {parent.Axis2.world_matrix.5} {parent.Axis2.world_matrix.6}} {{parent.Axis2.world_matrix.8} {parent.Axis2.world_matrix.9} {parent.Axis2.world_matrix.10}} } name ColorMatrix3 xpos 0 ypos -42 disable {{parent.xzrot==0}} } ColorMatrix { matrix { {{parent.Axis5.world_matrix.0} {parent.Axis5.world_matrix.1} {parent.Axis5.world_matrix.2}} {{parent.Axis5.world_matrix.4} {parent.Axis5.world_matrix.5} {parent.Axis5.world_matrix.6}} {{parent.Axis5.world_matrix.8} {parent.Axis5.world_matrix.9} {parent.Axis5.world_matrix.10}} } name ColorMatrix5 xpos 0 ypos 54 disable {{parent.xzrot==0}} } Expression { temp_name0 nx temp_expr0 parent.Plane.pick.r temp_name1 ny temp_expr1 parent.Plane.pick.g temp_name2 nz temp_expr2 parent.Plane.pick.b channel0 {rgba.red -rgba.green -rgba.blue -rgba.alpha} expr0 r*nx channel1 {-rgba.red rgba.green -rgba.blue none} expr1 g*ny channel2 {-rgba.red -rgba.green rgba.blue none} expr2 b*nz channel3 {none none none -rgba.alpha} name Expression1 xpos 0 ypos 121 cached true } Expression { expr3 clamp(r+g+b) name Expression3 xpos 0 ypos 187 } Invert { channels alpha name Invert1 xpos 0 ypos 249 disable {{!parent.inv}} } Expression { expr3 pow(a,max(1,parent.exp)) name Expression4 xpos 0 ypos 317 } Grade { channels alpha blackpoint {{-parent.mblack}} white {{parent.mgain}} gamma {{max(0.001,parent.mgamma)}} white_clamp true name Grade1 xpos 0 ypos 369 } ChannelMerge { inputs 2 operation multiply name ChannelMerge1 selected true xpos 0 ypos 444 disable {{!parent.amask}} } push 0 Merge2 { inputs 2+1 operation copy also_merge all name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 0 ypos 544 } Output { name Output1 xpos 0 ypos 623 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_NukeZ.gizmo ================================================ Group { name NukeZ inputs 0 tile_color 0xffc900ff label "
" note_font "DejaVu Sans Bold" note_font_size 16 addUserKnob {20 tab_general l General} addUserKnob {4 node M {AddSTMap ApplyLUT Assert AttribGeo Axis Axis2 BakedPointCloud BakedPointCloudMesh Bilateral Bilateral2 BlockGPU Blocky BumpMat BurnIn CCorrect Camera Camera2 CameraShake CameraShake2 CameraShake3 CameraTracker1_0 Card Card2 CardObj ChannelSelector Checker CheckerBoard CheckerBoard2 ChromaKeyer ColorTransferWrapper Compare Convolve Convolve2 Convolve2 CubeObj CylinderObj DeInterlace DeepChannelBlanker DeepClip DeepClipZ DeepColorCorrect DeepColorCorrect2 DeepCompare DeepDeOverlap DeepHoldout DeepHoldout2 DeepMask DeepMerge DeepMerge2 DeepOmit DeepShift DeepToImage DeepToImage2 DeepVolumeMaker Denoise Denoise2 Denoise2 DepthGenerator DepthGenerator1_0 DirBlur DirBlurWrapper DualBlend EdgeDetect EdgeScatter ExecuteTreeMT FFT FFTMultiply FieldSelect Fill FishEye FloodFill Fog FromDeep GPUFileShader GPUOp GenerateLUTGeo Grain Grain2 GridWarp GridWarp2 GridWarp3 IBK IBK2Gizmo IBKColour IBKColourV3 IBKEdge IBKGizmo IBKGizmoV3 IBKSFill IBKSplit IT8_Reader IT8_Writer Inpaint Inpaint2 InvFFT LensDistortion LensDistortion1_0 LensDistortion2 LevelSet Light Light2 LogGeo MakeLatLongMap Merge Merge2 MergeGeo MeshGeo MindRead Mirror Mirror2 ModelBuilderGeo Modeler Modeler1_0 Morph MultiTexture NodeWrapper OFlow OpStatisticsOp PLogLin PSDMerge ParticleBlinkScriptRender ParticleMove ParticleSystem ParticleToImage PerspDistort PixelStat PixelSum PlanarTracker PlanarTracker1_0 PointCloudGenerator1_0 PositionToPoints PositionToPoints2 Posterize Primatte Primatte2 Primatte3 Primatte3OLD PrintHash PrintMetaData Project3D Project3D2 ProjectionSolver ProjectionSolver1_0 PythonGeo ReadGeo ReadGeo2 Reconcile3D Rectangle RendermanShader Resize Shuffle Shuffle2 SimpleAxis SphereObj SphereToLatLongMap SphericalMap SphericalTransform SphericalTransform2 SplineWarp SplineWarp2 Spotlight Stabilize2D StarField TVIscale Text Text2 TextureFile TimeBlend TimeShift TimeToDepth ToDeep Tracker Tracker3 Tracker4 Tracker4 Transform3D Trilinear Twist TwistGeo UI_Silver UI_Standard UnmultColor Unwrap UpRez VectorBlur VectorBlur2 ViewerProcess_None ViewerProcess_rec709 ViewerProcess_sRGB ZBlur ZComp ZDefocus ZDefocus2 ZDefocus2 ZFDefocus ZRMerge ZoomTV achannels allchars autocrop cache_clear cache_report color_nodes create_read date default_font_pathname drop formats goofy_title goto_frame import_action import_adobe_lut import_boujou import_chan import_discreet_lut import_sequence infoviewer load_all_plugins makescratch mov32Reader mov32Writer node_delete nukev objReaderObj remove_inputs script_command script_data script_info script_version_up select_by_name showname start topnode version_down version_up}} addUserKnob {22 get_tools_menu l "update menu" -STARTLINE T "import os\nimport re\n\nnkPath = re.split( '/|\"\"' , nuke.EXE_PATH )\nnkPath.pop()\nnkPath += \['plugins']\nnkPath = os.sep.join( nkPath )\n\nthisGRP = nuke.thisGroup()\nfileEXT = thisGRP\['fileEXT'].value().split(',')\nblacklist = thisGRP\['blacklist'].value().split(',')\nwhitelist = thisGRP\['whitelist'].value().split(',')\n\ntools = \[]\nfor file in os.listdir( nkPath ) :\n\tif os.path.isfile( nkPath+os.sep+file ) :\n\t\tif file.split('.')\[1] in fileEXT and file.split('.')\[0] not in blacklist :\n\t\t\ttools.append( file.split('.')\[0] )\ntools += whitelist\ntools.sort()\n\nthisGRP\['node'].setValues( tools )\nthisGRP\['total_count'].setValue( str(len(tools)) )\n\n"} addUserKnob {26 total_count l "Total : " -STARTLINE T 235} addUserKnob {22 create l "\[--- create node ---]" T "import random\n\nthisGRP = nuke.thisGroup()\n\ntry :\n\tgoStore = nuke.toNode('store')\n\tgoStore\['fn'].execute()\n\n\txspace = int( nuke.toNode('preferences')\['GridWidth'].getValue() )\n\twith getLevel() :\n\t\tmakeNode = nuke.createNode( thisGRP\['node'].value() )\n\t\tmakeNode.setXYpos( thisGRP.xpos() + xspace + random.randint(0,xspace) , thisGRP.ypos() )\n\t\tmakeNode.hideControlPanel()\nexcept :\n\tnukescripts.script_command( thisGRP\['node'].value() )" +STARTLINE} addUserKnob {26 spacer l "" +STARTLINE T
} addUserKnob {43 favorite +DISABLED} addUserKnob {22 unlock_favorite l unlock -STARTLINE T "goStore = nuke.toNode('store')\ngoStore\['fn'].execute()\nlockMisc( 'favorite' )"} addUserKnob {3 favorite_status l "" -STARTLINE +INVISIBLE} addUserKnob {6 sort l "sort by alphabet" +STARTLINE} addUserKnob {22 add_favorite l "add to favorite" T "goStore = nuke.toNode('store')\ngoStore\['fn'].execute()\naddItem( 'favorite' )" +STARTLINE} addUserKnob {22 remove_favorite l "remove from favorite" -STARTLINE T "goStore = nuke.toNode('store')\ngoStore\['fn'].execute()\nremoveListItem( 'favorite' )"} addUserKnob {22 reset_favorite l "reset favorite" -STARTLINE T "goStore = nuke.toNode('store')\ngoStore\['fn'].execute()\nreset( 'favorite' )"} addUserKnob {22 fav_access l "\[--- create quick access node ---]" T "goStore = nuke.toNode('store')\ngoStore\['fn'].execute()\ngenFav()" +STARTLINE} addUserKnob {26 ""} addUserKnob {20 filter_list_menu l "filter list menu" n 1} filter_list_menu 0 addUserKnob {26 title_blacklist l blacklist} addUserKnob {22 add_blacklist l "add to blacklist" T "goStore = nuke.toNode('store')\ngoStore\['fn'].execute()\naddItem( 'blacklist' )" +STARTLINE} addUserKnob {22 remove_blacklist l "remove from blacklist" -STARTLINE T "goStore = nuke.toNode('store')\ngoStore\['fn'].execute()\nremoveListItem( 'blacklist' )"} addUserKnob {22 reset_blacklist l "reset blacklist" -STARTLINE T "goStore = nuke.toNode('store')\ngoStore\['fn'].execute()\nreset( 'blacklist' )"} addUserKnob {26 title_whitelist l whitelist} addUserKnob {22 add_whitelist l "add to whitelist" T "thisGRP = nuke.thisGroup()\nif len( thisGRP\['whitelist'].value() ) :\n\twhitelist = thisGRP\['whitelist'].value().split(',')\nelse :\n\twhitelist = \[]\n\np = nuke.Panel('Add to Whitelist :')\np.addSingleLineInput('node class : ', '')\np.setWidth(300)\n\nif p.show() :\n\tinClass = p.value('node class : ')\n\tif len( inClass ) :\n\t\tif inClass not in whitelist :\n\t\t\twhitelist.append( inClass )\n\n\t\twhitelist.sort()\n\n\t\tthisGRP\['whitelist'].setValue( ','.join(whitelist) )\n\telse :\n\t\tnuke.message('Entry is empty. Process denied...')" +STARTLINE} addUserKnob {22 remove_whitelist l "remove from whitelist" -STARTLINE T "goStore = nuke.toNode('store')\ngoStore\['fn'].execute()\nremoveListItem( 'whitelist' )"} addUserKnob {22 reset_whitelist l "reset whitelist" -STARTLINE T "goStore = nuke.toNode('store')\ngoStore\['fn'].execute()\nreset( 'whitelist' )"} addUserKnob {20 endGroup n -1} addUserKnob {20 tab_misc l Misc} addUserKnob {1 fileEXT l "file extension" +DISABLED} fileEXT gizmo,so,tcl,dll addUserKnob {22 unlock_fileEXT l unlock -STARTLINE T "goStore = nuke.toNode('store')\ngoStore\['fn'].execute()\nlockMisc( 'fileEXT' )"} addUserKnob {3 fileEXT_status l "" -STARTLINE +INVISIBLE} addUserKnob {43 blacklist +DISABLED} blacklist Add,AddChannels,AddMix,AddTimeCode,AdjBBox,Alembic_In,AmbientOcclusion,Anaglyph,Append2,ApplyMaterial,BasicMaterial,BlackOutside,Blend,BlendMat,BlinkScript,BumpBoss,CCrosstalk,CHueCorrect,CMSTestPattern,CameraTracker,Card3D,ChannelCopy,ChannelMerge,Clamp,ClipTest,ColorBars,ColorCorrect,ColorLookup,ColorMatrix,ColorTransfer,ColorWheel,Colorspace,CompareMetaData,Constant,ContactSheet,Copy,CopyBBox,CopyMetaData,CopyRectangle,CornerPin2D,Crop,CrosstalkGeo,Cube,CurveTool,Cylinder,DecalMat,DeepCrop,DeepFromFrames,DeepFromImage,DeepRead,DeepRecolor,DeepReformat,DeepSample,DeepToPoints,DeepTransform,DeepWrite,Defocus,DegrainBlue,DegrainSimple,DepthToPoints,DepthToPosition,Difference,Diffuse,Dilate,Direct,DirectLight,DiskCache,DisplaceGeo,Displacement,Dissolve,Dither,DropShadow,DustBust,EXPTool,EdgeBlur,EdgeDetectWrapper,EdgeExtend,EditClip,EditGeo,Emboss,Emission,Environment,Erode,FillMat,FilterErode,Flare,FrameBlend,FrameSelect,Gamma,GenerateLUT,Glint,Glow,Glow2,GodRays,Grade,Greyscale,Grid,GridWarpTracker,HSVTool,HistEQ,HueCorrect,HueKeyer,HueShift,IDistort,IDistort2,Invert,Keyer,Keyer2,Keymix,Kronos,Laplacian,LayerContactSheet,LayerCopy,LightWrap,Log2Lin,LookupGeo,MarkerRemoval,MatchGrade,MaterialGeo,Median,MergeMat,MinColor,MixViews,ModelBuilder,ModifyMetaData,ModifyRIB,MotionBlur,MotionBlur2D,MotionBlur3D,Multiply,No-op,NoTimeBlend,Noise,Normals,OCIOCDLTransform,OCIOColorSpace,OCIODisplay,OCIOFileTransform,OCIOLogConvert,OCIOLookTransform,OFlow2,OneView,ParticleAttractToSphere,ParticleBlinkScript,ParticleBounce,ParticleColorByAge,ParticleConstrainToSphere,ParticleCurve,ParticleCylinderFlow,ParticleDirection,ParticleDirectionalForce,ParticleDistributeSphere,ParticleDrag,ParticleEmitter,ParticleExpression,ParticleFlock,ParticleFuse,ParticleGravity,ParticleGrid,ParticleHelixFlow,ParticleInfo,ParticleKill,ParticleLookAt,ParticleMerge,ParticleMotionAlign,ParticlePointForce,ParticleProjectDisplace,ParticleProjectImage,ParticleSettings,ParticleShockWave,ParticleSpawn,ParticleSpeedLimit,ParticleTurbulence,ParticleVortex,ParticleWind,Phong,PointCloudGenerator,PointsTo3D,PoissonMesh,Position,Premult,PrmanRender,ProcGeo,ProceduralNoise,Radial,RadialDistort,Ramp,RayRender,ReLight,Reflection,Reformat,Refraction,Remove,Retime,RolloffContrast,STMap,Sampler,Saturation,ScanlineRender,ScannedGrain,Scene,Sharpen,ShuffleViews,SideBySide,SmartVector,SoftClip,Soften,Sparkles,Specular,Sphere,Spot,StabTrack,StartTimeBlur,TemporalMedian,Tile,TimeBlur,TimeDissolve,TimeEcho,TimeWarp,Toe2,Transcode,Transform,TransformMasked,Transmission,UIchooser,UVProject,UVTile2,Ultimatte,Unpremult,VFInterpGeo,VFTransformGeo,VectorCornerPin,VectorDistort,VectorGenerator,VectorToMotion,Vectorfield,ViewerProcess_1DLUT,VolumeRays,Wireframe,ZMerge,ZSlice,abcReader,abcWriter,add32p,animation_expressions,animation_filter,animation_generate,animation_loop,animation_move,animation_negate,animation_reverse,ariReader,arriReader,arxReader,auto_connect,autocolor,autocolor_add,autocolor_node,autolabel,autolabel_node,aviReader,aviWriter,basename,branch,cam_ver_panel,camera_down,camera_up,camera_ver,cdfReaderDeep,cdfWriterDeep,cinReader,cinWriter,copy_gizmo_to_group,copy_knobs,copy_to_group,cr2Reader,create_curve,crwReader,declone,deepshadReaderDeep,dngReader,dpxReader,dpxWriter,dshdReaderDeep,dtexReaderDeep,execute_panel,export_ascii,export_chan,export_chan_file,export_chan_menu,export_discreet_lut,exrReader,exrReaderDeep,exrWriter,exrWriterDeep,extract,fbxReader,fbxWriter,ffmpegReader,ffmpegWriter,filter_multiple,fixclone,flipbook,fpiReader,fpiWriter,ftifReader,ftifWriter,ftiffReader,ftiffWriter,get_reads,getenv,gifReader,hdrReader,hdrWriter,hdriReader,hdriWriter,iffReader,import_ascii,import_chan_button,import_chan_file,import_chan_menu,import_discreet,init,invert,it8,jpegReader,jpegWriter,jpgReader,jpgWriter,lset,m4vReader,m4vWriter,max_curve,min_curve,mov64Reader,mov64Writer,movReader,movWriter,mp4Reader,mp4Writer,mxfReader,mxfWriter,nfb_this,nilWriter,nkReader,nkcReader,nkncReader,node_copypaste,node_cutpaste,node_status,nullWriter,objReader,objWriter,parray,paste_to_selected,picReader,picWriter,png16Writer,pngReader,pngWriter,psdReader,pstack,pxdtexReaderDeep,r3dReader,read_file,remove32p,renderfarm_example,rgbReader,rgbWriter,rgbaReader,rgbaWriter,rgbeReader,rgbeWriter,rgbeaReader,rgbeaWriter,rlaReader,scroll_scr,search_plugins,search_replace,select_similar,setenv,sgi16Reader,sgi16Writer,sgiReader,sgiWriter,swapAB,sxrReader,sxrWriter,targaReader,targaWriter,texReaderDeep,tgaReader,tgaWriter,tif16Reader,tif16Writer,tifReader,tifWriter,tiff16Reader,tiff16Writer,tiffReader,tiffWriter,toggle,toolbars,unsetenv,update_plugin_menu,version_get,version_latest,version_set,write_file,xpmReader,xpmWriter,yuvReader,yuvWriter addUserKnob {22 unlock_blacklist l unlock -STARTLINE T "goStore = nuke.toNode('store')\ngoStore\['fn'].execute()\nlockMisc( 'blacklist' )"} addUserKnob {3 blacklist_status l "" -STARTLINE +INVISIBLE} addUserKnob {43 whitelist +DISABLED} whitelist Axis,Camera,Denoise,Light,OFlow,ReadGeo,Shuffle addUserKnob {22 unlock_whitelist l unlock -STARTLINE T "goStore = nuke.toNode('store')\ngoStore\['fn'].execute()\nlockMisc( 'whitelist' )"} addUserKnob {3 whitelist_status l "" -STARTLINE +INVISIBLE} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2020-03-06} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.1
- blacklist filter updated

1.0
- easy access nuke's hidden/old nodes\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } NoOp { inputs 0 name store selected true xpos -45 ypos -36 addUserKnob {20 User} addUserKnob {22 fn T "import random\n\ndef getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join( nodePath ))\n\treturn ggLevel\n\n##########\n\ndef lockMisc( _mainName ) :\n\tthisGRP = nuke.thisGroup()\n\tif thisGRP\['\{0\}_status'.format( _mainName )].getValue() :\n\t\tthisGRP\[_mainName].setEnabled(False)\n\t\tthisGRP\['\{0\}_status'.format( _mainName )].setValue(0)\n\t\tthisGRP\['unlock_\{0\}'.format( _mainName )].setLabel( 'unlock' )\n\telse :\n\t\tthisGRP\[_mainName].setEnabled(True)\n\t\tthisGRP\['\{0\}_status'.format( _mainName )].setValue(1)\n\t\tthisGRP\['unlock_\{0\}'.format( _mainName )].setLabel( 'lock' )\n\n##########\n\ndef removeListItem( _mainName ) :\n\tthisGRP = nuke.thisGroup()\n\titemList = thisGRP\[_mainName].value().split(',')\n\n\tif len( itemList\[0] ) :\n\t\tp = nuke.Panel( 'Remove from \{0\} :'.format( _mainName ) )\n\t\tp.addEnumerationPulldown( 'select : ' , ' '.join( itemList ) )\n\t\tp.setWidth(300)\n\n\t\tif p.show() :\n\t\t\titemList.remove( p.value('select : ') )\n\t\t\titemList.sort()\n\t\t\tthisGRP\[_mainName].setValue( ','.join( itemList ) )\n\telse :\n\t\tnuke.message( '\{0\} list is empty.'.format( _mainName ) )\n\n##########\n\ndef reset( _mainName ) :\n\tif nuke.ask( 'Are you sure to reset the \{0\} ?'.format( _mainName ) ) :\n\t\tnuke.thisGroup()\[_mainName].setValue('')\n\n##########\n\ndef addItem( _mainName ) :\n\tthisGRP = nuke.thisGroup()\n\tif len( thisGRP\[_mainName].value() ) :\n\t\titemList = thisGRP\[_mainName].value().split(',')\n\telse :\n\t\titemList = \[]\n\n\tif thisGRP\['node'].value() not in itemList :\n\t\titemList.append( thisGRP\['node'].value() )\n\n\tif _mainName != 'favorite' :\n\t\titemList.sort()\n\telse :\n\t\tif thisGRP\['sort'].value() :\n\t\t\titemList.sort()\n\n\tthisGRP\[_mainName].setValue( ','.join( itemList ) )\n\n##########\n\ndef genFav() :\n\tthisGRP = nuke.thisGroup()\n\tif len( thisGRP\['favorite'].value() ) :\n\t\tfavList = thisGRP\['favorite'].value().split(',')\n\n\t\twith getLevel() :\n\t\t\tnkzGRP = makePackage( 'NukeZfav', favList , thisGRP )\n\telse :\n\t\tnuke.message('Nothing in favorite list. Process denied...')\n\n##########\n\ndef makePackage( _name , _favLS , _thisG ) :\n\tavailableName = findAvailableName( _name )\n\txspace = int( nuke.toNode('preferences')\['GridWidth'].getValue() )\n\tyspace = int( nuke.toNode('preferences')\['GridHeight'].getValue() )\n\n\t##### make group\n\tnewName = _name + '_' + str(availableName)\n\tnkzGRP = nuke.nodes.Group(\n\t\tname = newName , \n\t\ttile_color = int( _thisG\['tile_color'].getValue()) , \n\t\txpos = _thisG.xpos()+random.randint(0,xspace) , \n\t\typos = _thisG.ypos()+yspace+random.randint(0,yspace)\n\t\t)\n\n\tnkzGRP.addKnob( nuke.Tab_Knob( 'tab_myFavorite' , 'My favorite' ) )\n\tfor key,value in enumerate( _favLS ) :\n\t\tnkzGRP.addKnob( nuke.PyScript_Knob( value, value, \"goStore = nuke.toNode(\\'store\\')\\ngoStore\[\\'fn\\'].execute()\\ncreateNode( nuke.thisKnob().name() )\" ) )\n\t\tif key%3 == 0 :\n\t\t\tnkzGRP\[value].setFlag(0x00001000)\n\n\twith nkzGRP :\n\t\tsubstore = nuke.nodes.NoOp( name = 'store' )\n\t\tsubstore.addKnob( nuke.PyScript_Knob( 'fn' , 'fn' , \"import random\\ndef getLevel() :\\n\\tif len(nuke.thisNode().fullName().split(\\'.\\')) == 1 :\\n\\t\\t ggLevel = nuke.root()\\n\\telse :\\n\\t\\t nodePath = nuke.thisNode().fullName().split(\\'.\\')\\n\\t\\t nodePath.pop()\\n\\t\\t ggLevel = nuke.toNode(\\'.\\'.join( nodePath ))\\n\\treturn ggLevel\\ndef createNode( _mainName ) :\\n\\tthisGRP = nuke.thisGroup()\\n\\ttry :\\n\\t\\txspace = int( nuke.toNode(\\'preferences\\')\[\\'GridWidth\\'].getValue() )\\n\\t\\twith getLevel() :\\n\\t\\t\\tmakeNode = nuke.createNode( _mainName )\\n\\t\\t\\tmakeNode.setXYpos( thisGRP.xpos() + xspace + random.randint(0,xspace) , thisGRP.ypos() )\\n\\t\\t\\tmakeNode.hideControlPanel()\\n\\texcept :\\n\\t\\tnukescripts.script_command( _mainName )\" ) )\n\n\treturn nkzGRP\n\n##########\n\ndef findAvailableName( _name ) :\n\tfindName = 0\n\tdetectName = \[]\n\n\tfor node in nuke.allNodes():\n\t\tif node.name().split('_')\[0] == _name :\n\t\t\tdetectName.append(int(node.name().split('_')\[1]))\n\tdetectName.sort()\n\twhile detectName.count(findName) != 0 :\n\t\tfindName += 1\n\n\treturn findName" +STARTLINE} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_P2N.gizmo ================================================ Group { name P2N onCreate "\nthisGRP = nuke.thisGroup()\nif not thisGRP\['disable_error'].getValue() :\n import os\n import re\n\n fontpath = re.split( '/|\"\"' , nuke.EXE_PATH )\n fontpath.pop()\n fontpath += \['plugins','fonts']\n \n if os.path.isfile( '/'.join( fontpath + \['UtopiaBold.pfa'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['UtopiaBold.pfa'] ) )\n elif os.path.isfile( '/'.join( fontpath + \['CourierBold.pfa'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['CourierBold.pfa'] ) )\n elif os.path.isfile( '/'.join( fontpath + \['Courier10PitchBold.pfb'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['Courier10PitchBold.pfb'] ) )\n else :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['BitstreamCharterBold.pfb'] ) )\n" tile_color 0x7f0072ff label "output : normal(\[value nor_space])" addUserKnob {20 general l General} addUserKnob {41 "Local GPU: " T BS_PosToNor.gpuName} addUserKnob {41 "Use GPU if Available" T BS_PosToNor.useGPUIfAvailable} addUserKnob {26 spacer l "" +STARTLINE T
} addUserKnob {26 title_in l INPUT} addUserKnob {41 pos_space l "position space" -STARTLINE T menu1.pos_space} addUserKnob {26 title_out l OUTPUT} addUserKnob {41 nor_space l "normal space" T menu1.nor_space} addUserKnob {26 spacer_1 l "" +STARTLINE T
} addUserKnob {20 CamTabBegin l "" +STARTLINE n -2} addUserKnob {20 tab_cam_setup l "Camera Setup"} addUserKnob {22 set_link l "link to selected camera" t "All the process calculated in camera space. So when doing any convertion, it required the camera data. Unless input data 'space' is camera.\n\nhow to use :\nSelect the camera, which can be link to any axis nodes. This tool will get the focal, haperture, filmback window and world matrix from selected camera." T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\n\nmainKnobs = \['cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll','world_matrix']\ndefaultKnobs = \{\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll',\n\t\t\t'world matrix' : 'world_matrix'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tfor knob in mainKnobs :\n\t\t\t\tthisGRP\[knob].clearAnimated()\n\t\t\t\t\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.focal'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.haperture'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.win_translate'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.win_scale'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.winroll'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tfor knob in mainKnobs :\n\t\t\t\t\tthisGRP\[knob].clearAnimated()\n\t\t\t\t\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']))\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']))\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']))\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']))\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window roll']))\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll','world_matrix']\n\nfor knob in thisGRP.knobs() :\n if mainKnobs.count(knob) != 0 :\n thisGRP\[knob].clearAnimated()"} addUserKnob {22 bake_link l "bake expression link" t "Baked out the existing expression link back to this node itself. After that, camera node is not required for this node anymore. Baked value is base on the frame range in project setting of the nuke script.\n\n* Nuke 11.2 has issue with expression link on this node. It will crash your nuke in some cases, but it will be fine when re-open the nuke script. Because of this issue, recommand to bake the value." T "thisGRP = nuke.thisGroup()\n\nframeST = nuke.root().firstFrame()\nframeED = nuke.root().lastFrame()\n\nallknobs = \['cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll','world_matrix']\nalldata = \{\}\n\nchknobs = 0\nfor knob in allknobs :\n\tif thisGRP\[knob].hasExpression() :\n\t\tchknobs = 1\n\nif chknobs :\n\tfor knob in allknobs :\n\t\tfor t in range( frameST, frameED+1, 1 ) :\n\t\t\ttry :\n\t\t\t\talldata\[knob].append( thisGRP\[knob].getValueAt(t) )\n\t\t\texcept :\n\t\t\t\talldata\[knob] = \[ thisGRP\[knob].getValueAt(t) ]\n\n\tfor knob in allknobs :\n\t\tthisGRP\[knob].clearAnimated()\n\t\tthisGRP\[knob].setAnimated()\n\n\tfor knob in allknobs :\n\t\tfor t in range( frameST, frameED+1, 1 ) :\n\t\t\tif type( alldata\[knob]\[t-frameST] ) is float :\n\t\t\t\tthisGRP\[knob].setValueAt( alldata\[knob]\[t-frameST] , t )\n\t\t\tif type( alldata\[knob]\[t-frameST] ) is list :\n\t\t\t\tfor i in range( len( alldata\[knob]\[t-frameST] ) ) :\n\t\t\t\t\tthisGRP\[knob].setValueAt( alldata\[knob]\[t-frameST]\[i] , t , i )\nelse :\n\tnuke.message('no expression link found.')" +STARTLINE} addUserKnob {22 copy_data l "copy from selected camera" t "Select the camera, then this will process 'link to selected camera' and 'bake expression link' in once.\n\n* Nuke 11.2 has issue with expression link on this node. It will crash your nuke in some cases, but it will be fine when re-open the nuke script. Because of this issue, recommand to bake the value." -STARTLINE T "thisGRP = nuke.thisGroup()\nthisGRP\['set_link'].execute()\nthisGRP\['bake_link'].execute()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 cam_focal l "focal length" R 5 100} cam_focal 50 addUserKnob {7 cam_haperture l "horiz aperture" R 0.1 50} cam_haperture 24.576 addUserKnob {30 cam_win_translate l "window translate"} addUserKnob {30 cam_win_scale l "window scale"} cam_win_scale {1 1} addUserKnob {7 cam_winroll l "window roll" R -45 45} addUserKnob {41 world_matrix l "world matrix" T cam_data.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 CamTabEnd l "" +STARTLINE n -3} addUserKnob {26 spacer_2 l "" +STARTLINE T
} addUserKnob {7 depth_threshold l "depth threshold" t "depththreshold to adjust the edge defination."} depth_threshold 0.1 addUserKnob {20 tab_misc l Misc} addUserKnob {2 font} font "C:/Program Files/Nuke12.0v3/plugins/fonts/UtopiaBold.pfa" addUserKnob {6 disable_error l "disable onscreen message" +STARTLINE} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.4} addUserKnob {26 l_DATE l "Date Modified" T 2020-01-21} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.4
- a package convert 3D tech passes
  included
  * P2Z ( Position To Depth )
  * P2N ( Position To Normal )
  * Z2P ( Depth To Position )
  * Z2N ( Depth To Normal )
  * ConvertPNZ ( self convertion )
- fixed camera window transformation issue

1.2
- changed camera input to expression link
- fix alpha check
- added support camera window roll

1.0
- Convert Position data to Normal\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x38408cff label blinkscript note_font_size 42 xpos 332 ypos 256 bdwidth 224 bdheight 134 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0xff label "dont touch" note_font_size 42 xpos -488 ypos -476 bdwidth 262 bdheight 196 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x388e8e00 label bin note_font_size 42 xpos -488 ypos -174 bdwidth 272 bdheight 503 } Reformat { inputs 0 type "to box" box_width {{global.res.x}} box_height {{global.res.y}} box_fixed true box_pixel_aspect {{global.pxa}} name Reformat1 xpos 731 ypos 618 } Text { message "missing position pass" font "\[value parent.font]" size {{global.res.x/15}} xjustify center yjustify center Transform 1 box {0 0 {global.res.x} {global.res.y}} center {640 360} name Text1 xpos 731 ypos 700 disable {{parent.disable_error}} } Reformat { type "to box" box_width {{global.res.x}} box_height {{global.res.y}} box_fixed true box_pixel_aspect {{global.pxa}} black_outside true name Reformat2 xpos 731 ypos 782 } Dot { name Dot5 xpos 765 ypos 864 } Input { inputs 0 name position xpos 404 ypos -533 } Expression { temp_name0 detectA temp_expr0 "red == 0 && green == 0 && blue == 0 ? 0 : 1" expr3 detectA name Expression3 label "non-filtered alpha" xpos 404 ypos -439 } Dot { name Dot8 xpos 438 ypos -357 } set Nca09d400 [stack 0] Expression { expr2 -blue name Expression4 label "position (cam)" xpos 631 ypos -367 } Dot { name Dot2 xpos 665 ypos -115 } push $Nca09d400 Add { channels rgb value {{-parent.world_matrix.3} {-parent.world_matrix.7} {-parent.world_matrix.11} 0} name Add2 label "invert translation" xpos 404 ypos -283 bookmark true } ColorMatrix { matrix { {{parent.world_matrix.0} {parent.world_matrix.1} {parent.world_matrix.2}} {{parent.world_matrix.4} {parent.world_matrix.5} {parent.world_matrix.6}} {{parent.world_matrix.8} {parent.world_matrix.9} {parent.world_matrix.10}} } invert true name ColorMatrix2 label "invert transmation" xpos 404 ypos -177 } Expression { temp_name0 newR temp_expr0 "( red - ( global.hratio * abs( blue ) * parent.cam_win_translate.u / 2 ) ) * 1 / parent.cam_win_scale.u" temp_name1 newG temp_expr1 "( green - ( global.hratio * abs( blue ) * parent.cam_win_translate.v /2 ) ) * 1 / parent.cam_win_scale.v" expr0 "newR * fb_data.world_matrix.0 + newG * fb_data.world_matrix.1" expr1 "newR * fb_data.world_matrix.4 + newG * fb_data.world_matrix.5" name Expression5 label "invert camera window" xpos 404 ypos -105 } Switch { inputs 2 which {{parent.pos_space}} name Switch6 xpos 404 ypos 27 } Premult { name Premult1 label "premult non-filtered alpha" xpos 404 ypos 109 } BlinkScript { recompileCount 376 KernelDescription "2 \"PosToNor\" iterate pixelWise 02cf16da23aea1612dfbcc053c87db54f6b4c4e44f3ad9894ac3d7a7730044cc 2 \"ppass\" Read Random \"dst\" Write Point 1 \"deep threshold\" Float 1 zczMPQ== 1 \"dThreshold\" 1 1 0" EncodedSource "1 2924 5yXW0xYFMJslpopUtj52AV/Io3x/f6K86Tht0ug2nRn+Pl5BtcKt7yOZtlJAGYcZhwFjuDgpOVcH+JYiF2EFRVtpxuWSctkcGm9s+mt73vdnVTG5DErmZb7UaE51wML710Mnz4xW/dHYU98yrOnkQjhpiGWpnJfaZRsYb9zg4THW+7vImS4rn1HMaDx+e7MguZZU8VlNDr0yt3+oqK5JqPha++yGjxd6U2y6Mcfa4QbIm2NAmKIzdkyYct+2X7Obj1XdMIpRBBYpl1JtTEM22BpY9I2hxiJln4Ut3IPhp9F96phL2JQIveQ7xR9u1BJiYTw/su++BoJZ1MbcIUAiYitUZSRS8yctZ0E+e5wGmJn8TXlNaLCx/L4RRE35TUY39uz3NaDzUdi4mnKNKMQcPTLVbJbm+Qxpe71YCRZRnrMlbtuhCI5/wZXmQCGGDF06bzY0clTgJdUxKLkqgCCIkkU5N3RRekb+Hit95FprW/toVKlxS6kxQgFwywG2fRflbudUOP1Oi6ZGl1KYu0ymY1i2Va+z8sWvl1K3Df6PDYPGGTto+QeRYjRWJ6M8yuYQXjW84drm00CMTPsD4o6nEN703fvBCK4oMA1uB+B+f1Ks/yex6rqL8W0RdNPgzCCOOw1NTWp1DG0/grDqBsRUyESUq58oZ7pNZkB94dkFqH3DdQTCK+QVjkiQpnht5xRazBjPsJuE3HJWGjcDjbxdqmT8Q2FQ3hrEz5iD2PeM5P2CQHEHPP9/BDujHY9fRay5iodG5asnPYBTnsoHGW06e8aKgkyLrg8wXC6BDVIYFgwNxzIX0KCcXlycqtGleq3cC2HahCVNQH52ugdy15yi0GzFaOjF3k1orC2x1VnKZQvoImV5yWUPwU+k9DPLSnCd3VL5LioZrLP54n0kJBKpwEiJNvnIM7rjaz1S7SbwmRfoQEVy01/06ppj2YT9+G3KQVEDwD7thlAE/w7/K/OdJ72Xr75gqUU1heOD5Ze8ZWZcKfCibiCLjcb7vUef2AQTe0MWElmo61jeK30rWvJLWuVFyFFcYXvU36xXlq28SnTMMO94aU+3cfcxDzlIMF2wfyYXNOOCe7gv/ed22EtJQU/O4qrXWIQbBP/sc3IZ4PUSnE4CgVSpNL1K8NZwlXGEjlE40BOHiFsXotpJNvKvxgQIEFStsptpdfVCFqNQ8N3A+s8y/QUrXJ8nQsiNykHmuRWa0hcNihaOTpIGuVk7eDECVy/ebkNv11ImrGAkndoV67OjZy+FUTBaO1rD1uTtZeCIdycfnoCFIJejQOtzoSNYjJOkVJ4T0luOO8yKCqkgAHtthZE3h+WObi2wcRzDAk7y62rJDA2DzC+VM6EoBf31gMxRrZ71tHgMY+zUgWdBPLTqTKBtPcxsHaUVvEnpBmaUHhm9mwlwMa4yOO3pJf1ZYsrL0Gx1jMDPZVzZOM/1KyVWNaWEGy+baCvGjt/xteo/VgGPre38KEL7Mxtrc7mehF2T8Fh5shHdU7NmxRyfQHjZfugwqY3U4HqVi/T5DftVK9aaMm2w+RC7j4LbFg971DTXzA2rQDNa5pOMqbwBRTRQSGCdH0dfNFaWOug/ez+dRkMgWMY4CVv4qtxrWtk1G+WlNV806YKLlVrsWkaqgV70IL0sX8Yg03roBQHv2ulCVMBLpoTeAzn1nWZq7Bc2OA4Bm8YJz/pqxBF76HbVRtYTsBC9RR11HtoJ05OPWt3TtkZ3dvZf3vRsBkSvZ2pRdoUoQXXl8sPzzJmoNXbXsRfymhkbQeH1g15zcuXX+0ieT+0zCd9PvFIRM1inf/DbfVFU3XQhbxVLT6Ivbs7JCGlT5IKe8p9Wz19NJqkbkQdGe3+ewHdZ4SZBjfAeaOWCn3hVWLqMtnI8WtiKfX23SqoscOa+S+kwE52r4A2PHLg/dAKN778y2ifcEsubR9RodouzJyMuDP9Vt6m3NOIYOg9YlmwH7WdyqU+r6kEitQjLiehTmIqejUlmEfGCHD2P6Bimnp+hxxRR1MFupXMQwLMjw3aWwsht64QCRtNw0mHv64lxEwaK6fDzYNlRFHF/agvo39NT/ISzm377qXzLBIBc89kQsUDdOA7Hms8mE4hqEGEtkaCQNas/5a3jsPyM5r1u3Basix0O3dHAY4x6uq6ticdXw+ybCh2KD5W2MlZXJHavrsmtI1RUXQxWRq1Xj+7JTjAovglRyryaJ9RIiBC0gZO8/eInoSawWPZGnaOg1Qa94F2nORWmuGddIaAbwK9nMGEq119T2L0tqoXHq/wA088HnCNM2cHRKe4oNfBmvq8qgvcdqfxvz3T6W0rzFD2YQJ4VDlypuR+ninR7oT37Mj2wuhngjev30qi26zYgIhqtjEc7+ZYEzsHm0K5u1K8s1F+w7OH4h5ywzMMjpgXaPWCsWwPdWqnDYr318BbhgQiJwbQWiMQJHPKUoxWNfgiqoPTUExavRPn+vuSrKkbg7IbPsNMA3DfzT4ptkrFEDSJuz2lJuw9kNRA8e8WmjLippFRvNjh+ggM0BikNn2zHNqWVhmMDIr1IZBXFTPwvyi4/vG+CHJ24t2F26eKeaGikb4LC++D/EKrWqCnb2RVS5A1yz/yZuUXzTT/G6H81FSHDMcVy9ZP22KkaBf67gGUFFJCLeZJ3hyUaxG4kLhPquUY1KgdQlZtLKEWqJW622yQNsBKk/BtHTosNWLoGjYA3Jd95s1uH8miJHc2pOF9AQxAlq2RPL4X9uPJrAFxU87T0uEWDU+itkMG0fOdtTGU7AlgMTzhzusfiydkPIP5+uOgs9G4aIF6x/2RgkR0IpXqO4jIpCATskx4kQEd5XM6ArganbSlwVXKQnqNMvhiFJod+1IZIbW15OdjYrgUaSbvKWUNcBp7raPmbkueWUgjcABDCwLzCd0d9MIH6oaIVi53xXG8jFFg4mspWFlIqOi6pGr1Ekto36WtLVc52SOsdGXb1bseOqDKelEK5fglFs2FPmLhmhHGDZHP8LT2Tou56Ek6HsAmvC4BGqKIYgieohD2HIGkCpEj/Sp9YK8CGgBkhzkV5e8jmD3a+0DPfA0UBmP0mRoc7zuS+KtsQ4osgPEFvxRTW3wcK03vMQl3iXGyD6iui3WDZPHYCEjI6L8SKY7L/NY2orchDm8Hyu+MHbv+4II9kigJarcc+2AbxFsaGKWLt8QFBqvnPI13NMBFB4d7CqF9YgrLeSO/L4sj1MWOwhxvmb+Iq8UHdsnpDSNWcyg5X+4rVtu/BUSoAoM5HHxJ4ewGIVc/C/Jsv7R1k9TWjXIov0+zAqi3+6uihDI1oFIG0fGL/7lALT7uVMgIwzt+ndikUI3tK8yjrBAzJAMv+7t0sSpl7rAsDqILPn5cfHvL2ApAOwjrN7pKlDsx142JiqBE7wwL1GNQotS7I0mjUt6U8hYom+K22Z1XihxVBCpA4bOURZAVeWlQ/1z73gmWAUk+yUGNHBfCZvWMwDFw8GInlKFlJ4mIRx/J36zEyqEAlkLhThIf9d9LZApuMyORCOq8K9sbncWAgmDWKCqR3V+yfabtMuqbvJ9TG1vPd21InUUXcQ7VIlpzOZN9AHF/ELh7daih3ovpILkCA7cdycyxQjADMYzeN2IOG1UICBb4UpPG7ZbBhjAiKQ0YRaUZ4oL1aFJxHa1pfVRZ/38WwX5WjYBSBEQJtidVXWnXjXJM5ZsWI29h7nktgCySwCaDfqpHh3Bbum73TPcvHF9ukFMUTdI3WaYlP+Twzvvgrc8d20sa9ZnB5W8vCnbPV2YbLNcjHsjqHHGpiXKInPSZhiQi2l2UWklmK5cKAhMVL6aHrvbpm2hSEUkQSShYRGi1ZtA2RodPRsGbQxPBoY6dz5WCLFKBhl0WTsbRG6K1jXggvWGgGmCdz" rebuild "" "PosToNor_deep threshold" {{parent.depth_threshold}} protectKernelWhenPublishing true rebuild_finalise "" name BS_PosToNor xpos 404 ypos 330 } Expression { expr0 "isnan(r) || isinf(r) ? 0 : r" expr1 "isnan(g) || isinf(g) ? 0 : g" expr2 "isnan(b) || isinf(b) ? 0 : b" name Expression1 label "remove nan&inf" xpos 404 ypos 436 } ColorMatrix { matrix { {{fb_data.world_matrix.0} {fb_data.world_matrix.1} {fb_data.world_matrix.2}} {{fb_data.world_matrix.4} {fb_data.world_matrix.5} {fb_data.world_matrix.6}} {{fb_data.world_matrix.8} {fb_data.world_matrix.9} {fb_data.world_matrix.10}} } invert true name ColorMatrix4 label "apply camera window" xpos 404 ypos 619 } Dot { name Dot4 xpos 438 ypos 703 } set Nca0cc800 [stack 0] Dot { name Dot1 xpos 575 ypos 796 } push $Nca0cc800 ColorMatrix { matrix { {{parent.world_matrix.0} {parent.world_matrix.1} {parent.world_matrix.2}} {{parent.world_matrix.4} {parent.world_matrix.5} {parent.world_matrix.6}} {{parent.world_matrix.8} {parent.world_matrix.9} {parent.world_matrix.10}} } name ColorMatrix3 label "normal (world)" xpos 404 ypos 777 } Switch { inputs 2 which {{parent.nor_space}} name Switch2 xpos 404 ypos 871 } Switch { inputs 2 which {{"!\[exists parent.input0]"}} name Switch3 xpos 404 ypos 1069 } Output { name Output1 xpos 404 ypos 1285 } NoOp { inputs 0 name menu1 knobChanged "\nthisGRP = nuke.thisGroup()\ncamKnobs = \['set_link','remove_link','bake_link','copy_data','cam_data_grp','cam_winroll','world_matrix','endGroup_1']\nif thisGRP\['pos_space'].value() == 'camera' and thisGRP\['nor_space'].value() == 'camera' :\n for knob in camKnobs :\n thisGRP\[knob].setEnabled(False)\nelse :\n for knob in camKnobs :\n thisGRP\[knob].setEnabled(True)\n" xpos -410 ypos -366 addUserKnob {20 User} addUserKnob {4 pos_space l "position space" M {world camera}} addUserKnob {4 nor_space l "normal space" M {world camera}} nor_space camera } Axis { inputs 0 display off selectable false rotate {0 0 {parent.cam_winroll}} name fb_data xpos -438 ypos 50 } Camera { inputs 0 display off selectable false useMatrix true name cam_data xpos -329 ypos 50 } NoOp { inputs 0 name global xpos -449 ypos -49 addUserKnob {20 User} addUserKnob {12 res} res {{"\[exists parent.input0] ? parent.input0.width : width"} {"\[exists parent.input0] ? parent.input0.height : height"}} addUserKnob {7 pxa} pxa {{"\[exists parent.input0] ? parent.input0.pixel_aspect : pixel_aspect"}} addUserKnob {7 hratio} hratio {{"cam_haperture / cam_focal"}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_P2Z.gizmo ================================================ Group { name P2Z onCreate "\nthisGRP = nuke.thisGroup()\nif not thisGRP\['disable_error'].getValue() :\n import os\n import re\n\n fontpath = re.split( '/|\"\"' , nuke.EXE_PATH )\n fontpath.pop()\n fontpath += \['plugins','fonts']\n \n if os.path.isfile( '/'.join( fontpath + \['UtopiaBold.pfa'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['UtopiaBold.pfa'] ) )\n elif os.path.isfile( '/'.join( fontpath + \['CourierBold.pfa'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['CourierBold.pfa'] ) )\n elif os.path.isfile( '/'.join( fontpath + \['Courier10PitchBold.pfb'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['Courier10PitchBold.pfb'] ) )\n else :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['BitstreamCharterBold.pfb'] ) )\n" tile_color 0x7f0072ff label "output : depth" addUserKnob {20 general l General} addUserKnob {26 title_in l INPUT} addUserKnob {4 pos_space l "position space" M {world camera}} addUserKnob {26 title_out l OUTPUT} addUserKnob {6 depth_invert l "depth (1/z)" +STARTLINE} depth_invert true addUserKnob {26 spacer l "" +STARTLINE T
} addUserKnob {20 CamTabBegin l "" +STARTLINE n -2} addUserKnob {20 tab_cam_setup l "Camera Setup"} addUserKnob {22 set_link l "link to selected camera" t "All the process calculated in camera space. So when doing any convertion, it required the camera data. Unless input data 'space' is camera.\n\nhow to use :\nSelect the camera, which can be link to any axis nodes. This tool will get the focal, haperture, filmback window and world matrix from selected camera." T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\n\nmainKnobs = \['cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll','world_matrix']\ndefaultKnobs = \{\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll',\n\t\t\t'world matrix' : 'world_matrix'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tfor knob in mainKnobs :\n\t\t\t\tthisGRP\[knob].clearAnimated()\n\t\t\t\t\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.focal'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.haperture'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.win_translate'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.win_scale'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.winroll'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tfor knob in mainKnobs :\n\t\t\t\t\tthisGRP\[knob].clearAnimated()\n\t\t\t\t\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']))\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']))\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']))\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']))\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window roll']))\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll','world_matrix']\n\nfor knob in thisGRP.knobs() :\n if mainKnobs.count(knob) != 0 :\n thisGRP\[knob].clearAnimated()"} addUserKnob {22 bake_link l "bake expression link" t "Baked out the existing expression link back to this node itself. After that, camera node is not required for this node anymore. Baked value is base on the frame range in project setting of the nuke script.\n\n* Nuke 11.2 has issue with expression link on this node. It will crash your nuke in some cases, but it will be fine when re-open the nuke script. Because of this issue, recommand to bake the value." T "thisGRP = nuke.thisGroup()\n\nframeST = nuke.root().firstFrame()\nframeED = nuke.root().lastFrame()\n\nallknobs = \['cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll','world_matrix']\nalldata = \{\}\n\nchknobs = 0\nfor knob in allknobs :\n\tif thisGRP\[knob].hasExpression() :\n\t\tchknobs = 1\n\nif chknobs :\n\tfor knob in allknobs :\n\t\tfor t in range( frameST, frameED+1, 1 ) :\n\t\t\ttry :\n\t\t\t\talldata\[knob].append( thisGRP\[knob].getValueAt(t) )\n\t\t\texcept :\n\t\t\t\talldata\[knob] = \[ thisGRP\[knob].getValueAt(t) ]\n\n\tfor knob in allknobs :\n\t\tthisGRP\[knob].clearAnimated()\n\t\tthisGRP\[knob].setAnimated()\n\n\tfor knob in allknobs :\n\t\tfor t in range( frameST, frameED+1, 1 ) :\n\t\t\tif type( alldata\[knob]\[t-frameST] ) is float :\n\t\t\t\tthisGRP\[knob].setValueAt( alldata\[knob]\[t-frameST] , t )\n\t\t\tif type( alldata\[knob]\[t-frameST] ) is list :\n\t\t\t\tfor i in range( len( alldata\[knob]\[t-frameST] ) ) :\n\t\t\t\t\tthisGRP\[knob].setValueAt( alldata\[knob]\[t-frameST]\[i] , t , i )\nelse :\n\tnuke.message('no expression link found.')" +STARTLINE} addUserKnob {22 copy_data l "copy from selected camera" t "Select the camera, then this will process 'link to selected camera' and 'bake expression link' in once.\n\n* Nuke 11.2 has issue with expression link on this node. It will crash your nuke in some cases, but it will be fine when re-open the nuke script. Because of this issue, recommand to bake the value." -STARTLINE T "thisGRP = nuke.thisGroup()\nthisGRP\['set_link'].execute()\nthisGRP\['bake_link'].execute()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 cam_focal l "focal length" R 5 100} cam_focal 50 addUserKnob {7 cam_haperture l "horiz aperture" R 0.1 50} cam_haperture 24.576 addUserKnob {30 cam_win_translate l "window translate"} addUserKnob {30 cam_win_scale l "window scale"} cam_win_scale {1 1} addUserKnob {7 cam_winroll l "window roll" R -45 45} addUserKnob {41 world_matrix l "world matrix" T cam_data.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 CamTabEnd l "" +STARTLINE n -3} addUserKnob {20 tab_misc l Misc} addUserKnob {2 font} font "C:/Program Files/Nuke12.0v3/plugins/fonts/UtopiaBold.pfa" addUserKnob {6 disable_error l "disable onscreen message" +STARTLINE} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.4} addUserKnob {26 l_DATE l "Date Modified" T 2020-01-21} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.4
- a package convert 3D tech passes
  included
  * P2Z ( Position To Depth )
  * P2N ( Position To Normal )
  * Z2P ( Depth To Position )
  * Z2N ( Depth To Normal )
  * ConvertPNZ ( self convertion )
- fixed camera window transformation issue

1.2
- changed camera input to expression link
- fix alpha check
- added support camera window roll

1.0
- Convert Position data to Normal\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x388e8e00 label bin note_font_size 42 xpos -146 ypos -417 bdwidth 272 bdheight 503 } Reformat { inputs 0 type "to box" box_width {{global.res.x}} box_height {{global.res.y}} box_fixed true box_pixel_aspect {{global.pxa}} name Reformat1 xpos 755 ypos 434 } Text { message "missing position pass" font "\[value parent.font]" size {{global.res.x/15}} xjustify center yjustify center Transform 1 box {0 0 {global.res.x} {global.res.y}} center {640 360} name Text1 xpos 755 ypos 516 disable {{parent.disable_error}} } Reformat { type "to box" box_width {{global.res.x}} box_height {{global.res.y}} box_fixed true box_pixel_aspect {{global.pxa}} black_outside true name Reformat2 xpos 755 ypos 598 } Dot { name Dot5 xpos 789 ypos 680 } Input { inputs 0 name position xpos 404 ypos -534 } Expression { temp_name0 detectA temp_expr0 "red == 0 && green == 0 && blue == 0 ? 0 : 1" expr3 detectA name Expression3 label "non-filtered alpha" xpos 404 ypos -427 } Dot { name Dot8 xpos 438 ypos -344 } set Nca141400 [stack 0] Dot { name Dot6 xpos 665 ypos -344 } Expression { expr0 blue expr1 blue expr2 blue name Expression5 label "depth from position (cam)" xpos 631 ypos -270 } Dot { name Dot3 xpos 665 ypos 135 } push $Nca141400 Add { channels rgb value {{-parent.world_matrix.3} {-parent.world_matrix.7} {-parent.world_matrix.11} 0} name Add2 label "invert translation" xpos 404 ypos -270 bookmark true } ColorMatrix { matrix { {{parent.world_matrix.0} {parent.world_matrix.1} {parent.world_matrix.2}} {{parent.world_matrix.4} {parent.world_matrix.5} {parent.world_matrix.6}} {{parent.world_matrix.8} {parent.world_matrix.9} {parent.world_matrix.10}} } invert true name ColorMatrix2 label "invert transformation" xpos 404 ypos -164 } Expression { temp_name0 newR temp_expr0 "( red - ( global.hratio * abs( blue ) * parent.cam_win_translate.u / 2 ) ) * 1 / parent.cam_win_scale.u" temp_name1 newG temp_expr1 "( green - ( global.hratio * abs( blue ) * parent.cam_win_translate.v /2 ) ) * 1 / parent.cam_win_scale.v" expr0 "newR * fb_data.world_matrix.0 + newG * fb_data.world_matrix.1" expr1 "newR * fb_data.world_matrix.4 + newG * fb_data.world_matrix.5" name Expression4 label "invert camera window" xpos 404 ypos -54 } Expression { expr0 "abs( blue )" expr1 "abs( blue )" expr2 "abs( blue )" name Expression7 label "keep Z" selected true xpos 404 ypos 40 } Switch { inputs 2 which {{parent.pos_space}} name Switch6 xpos 404 ypos 218 } Dot { name Dot2 xpos 438 ypos 324 } set Nca16f000 [stack 0] Expression { expr0 1/red expr1 1/green expr2 1/blue name Expression6 label "depth invert" xpos 521 ypos 371 } push $Nca16f000 Switch { inputs 2 which {{depth_invert}} name Switch1 xpos 404 ypos 432 } Expression { expr0 "isnan(r) || isinf(r) ? 0 : r" expr1 "isnan(g) || isinf(g) ? 0 : g" expr2 "isnan(b) || isinf(b) ? 0 : b" name Expression2 label "remove nan&inf" xpos 404 ypos 514 } Expression { expr0 "red * alpha" expr1 "green * alpha" expr2 "blue * alpha" expr3 0 name Expression1 label "premult non-filter alpha" xpos 404 ypos 608 } Switch { inputs 2 which {{"!\[exists parent.input0]"}} name Switch3 xpos 404 ypos 770 } Output { name Output1 xpos 404 ypos 897 } Group { inputs 0 name inverseMatrix tile_color 0x337f4cff xpos -104 ypos -79 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path fb_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2011-11-28} addUserKnob {26 l_CHANGELOG l Changelog T "v1.0\n- reveal the calculate output of \n inverse matrix which is c44matrix\n and colormatrix doesn't show\n "} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group Axis { inputs 0 display off selectable false rotate {0 0 {parent.cam_winroll}} name fb_data xpos -90 ypos -194 } Camera { inputs 0 display off selectable false useMatrix true name cam_data xpos 13 ypos -195 } NoOp { inputs 0 name global xpos -107 ypos -295 addUserKnob {20 User} addUserKnob {12 res} res {{"\[exists parent.input0] ? parent.input0.width : width"} {"\[exists parent.input0] ? parent.input0.height : height"}} addUserKnob {7 pxa} pxa {{"\[exists parent.input0] ? parent.input0.pixel_aspect : pixel_aspect"}} addUserKnob {7 hratio} hratio {{"parent.cam_haperture / parent.cam_focal"}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_P_Noise_Advanced.gizmo ================================================ Group { name P_Noise_Advanced knobChanged "\nn = nuke.thisNode()\ntype = n\['noisetype'].value()\nblock = n\['Trunc'].getValue()\nVis = \[]\nHide = \[]\nif type in ('fBm', 'turbulent'):\n Vis.extend(\['octaves', 'lacunarity', 'gain', 'gamma'])\n Hide.extend(\['rays', 'range', 'invert', 'ringsSeed', 'raysSeed', 'gammaNormalize']) \nelif type == 'p_rings':\n Vis.extend(\['ringsSeed', 'gammaNormalize'])\n Hide.extend(\['rays', 'range', 'invert', 'octaves', 'lacunarity', 'gain', 'gamma', 'raysSeed'])\nelif type == 'p_rays':\n Vis.extend(\['rays', 'raysSeed', 'gammaNormalize'])\n Hide.extend(\['range', 'invert', 'octaves', 'lacunarity', 'gain', 'gamma', 'ringsSeed'])\nelif type in ('Euclidian', 'Voronoi', 'Manhattan', 'ChebyShev'):\n Vis.extend(\['range', 'gammaNormalize'])\n Hide.extend(\['rays', 'invert', 'octaves', 'lacunarity', 'gain', 'gamma', 'ringsSeed', 'raysSeed'])\nelif type == 'Worley':\n Vis.extend(\['invert', 'gammaNormalize'])\n Hide.extend(\['rays', 'range', 'octaves', 'lacunarity', 'gain', 'gamma', 'ringsSeed', 'raysSeed'])\nfor r in Vis: n\[r].setVisible(True)\nfor x in Hide: n\[x].setVisible(False)\n\nif block == True:\n n\['truncSize'].setVisible(True)\nelse:\n n\['truncSize'].setVisible(False)\n" label "(\[value in])" selected true xpos 598 ypos 235 addUserKnob {20 User} addUserKnob {41 in l "position data" T Shuffle_Input_Channels.in} addUserKnob {6 unpremultiply +STARTLINE} addUserKnob {6 useAlpha l "ignore outside alpha" -STARTLINE} addUserKnob {6 useGPU l "use GPU if available" -STARTLINE} useGPU true addUserKnob {26 ""} addUserKnob {4 noisetype M {fBm turbulent p_rings p_rays Euclidian Voronoi Manhattan Chebyslev Worley "" "" ""}} addUserKnob {6 Trunc l "blocky (trunc)" -STARTLINE} addUserKnob {41 Position2d T SampleXY.Position2d} addUserKnob {41 rgbSample l center T Sample.rgbSample} addUserKnob {6 useCenter -STARTLINE} useCenter true addUserKnob {26 ""} addUserKnob {18 size R 1 100} size 10 addUserKnob {6 size_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 seed} seed {0 0 0} addUserKnob {6 seed_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 truncSize l "blocky size" +HIDDEN R 0 2} truncSize 0.5 addUserKnob {6 truncSize_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {7 rays +HIDDEN} rays 30 addUserKnob {7 raysSeed l "rays seed" +HIDDEN R 0 10} addUserKnob {7 ringsSeed l "rings seed" +HIDDEN R 0 10} addUserKnob {7 range +HIDDEN R 0 6} range 1 addUserKnob {6 invert +HIDDEN +STARTLINE} addUserKnob {3 octaves} octaves 10 addUserKnob {7 lacunarity R 1 10} lacunarity 2 addUserKnob {7 gain R 0.1 1} gain 0.5 addUserKnob {7 gamma} gamma 0.5 addUserKnob {7 gammaNormalize l gamma +HIDDEN R 0 2} gammaNormalize 1 addUserKnob {26 ""} addUserKnob {26 INFO l "" +STARTLINE T "v1.02 (c) Riley Gray and Owen Bulka 2020\nBased on \"Cell Noise v1.1\" by Matthew Shaw "} addUserKnob {26 c44_version_author l "" +STARTLINE T "
C44Kernel v1.0 - adrianpueyo.com, 2018
"} addUserKnob {20 Transform} addUserKnob {41 rot_order l "rotation order" T Axis1.rot_order} addUserKnob {41 translate T Axis1.translate} addUserKnob {41 rotate T Axis1.rotate} addUserKnob {41 scaling l scale T Axis1.scaling} addUserKnob {41 uniform_scale l "uniform scale" T Axis1.uniform_scale} addUserKnob {41 skew T Axis1.skew} addUserKnob {41 pivot T Axis1.pivot} } Input { inputs 0 name img xpos 0 ypos -116 } AddChannels { channels alpha color 1 name AddChannels1 xpos 0 ypos -64 } Shuffle { alpha blue out rgb name Shuffle_Input_Channels xpos 0 ypos -18 } Unpremult { name Unpremult1 xpos 0 ypos 16 disable {{!parent.unpremultiply i}} } Dot { name Dot2 xpos 34 ypos 66 } set N92db82d0 [stack 0] Dot { name Dot4 xpos -130 ypos 66 } set N81ae9a60 [stack 0] Dot { name Dot3 xpos -292 ypos 66 } Expression { channel0 alpha expr0 "a == 0 ? 1 :0" channel1 none channel2 none channel3 {none none none -rgba.alpha} name Expression1 xpos -326 ypos 751 } Axis2 { inputs 0 name Axis1 xpos 265 ypos 200 } push $N92db82d0 Add { channels rgb value {{parent.Sample.rgbSample/-1} {parent.Sample.rgbSample/-1} {parent.Sample.rgbSample/-1} 0} name center xpos 0 ypos 141 disable {{1-parent.useCenter}} } Group { inputs 2 name C44Kernel help "C44Kernel v1.0 by Adrian Pueyo\n\nMultiply the rgb or rgba colors by an arbitrary 4x4 Matrix. Useful for transforming a Position pass.\n\nYou can plug in an Axis or Camera node into the axis input, to also apply its transformations.\n\nadrianpueyo.com, 2017" tile_color 0xe88543ff xpos 0 ypos 221 lock_connections true addUserKnob {20 C44Kernel} addUserKnob {41 channels T MergeIn.Achannels} addUserKnob {41 matrix T Axis1.matrix} addUserKnob {6 invert -STARTLINE} addUserKnob {6 alpha_masking l "alpha masking" t "Apply only where rgba.alpha>0" +STARTLINE} addUserKnob {20 advanced l Advanced n 1} advanced 0 addUserKnob {6 transpose +STARTLINE} addUserKnob {6 w_divide +STARTLINE} addUserKnob {6 rgba_mode l "apply on Vector4" t "Usually you'll want to apply the matrix on the RGB only, which uses a white alpha. Enable this to use the full Vector4 (RGBA)." +STARTLINE} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {41 mix T MergeOut.mix} addUserKnob {26 version_author l "" t "C44Kernel v1.0\n23 June, 2018" +STARTLINE T "
C44Kernel v1.0 - adrianpueyo.com, 2018
"} addUserKnob {20 GPU_Settings l "GPU Settings"} } Input { inputs 0 name Inputaxis xpos 133 ypos -181 number 1 } Axis2 { useMatrix true name Axis1 xpos 143 ypos -133 } Input { inputs 0 name Inputimg xpos -110 ypos -192 } set N87975480 [stack 0] Dot { name Dot1 xpos -76 ypos -161 } set N87971510 [stack 0] Expression { expr3 a>0 name ExpressionA xpos -220 ypos -164 } Switch { which {{!parent.alpha_masking}} name SwitchMasking xpos -220 ypos -112 } push $N87971510 push $N87975480 Remove { name RemoveAll xpos 34 ypos -196 } Merge2 { inputs 2 operation copy Bchannels none name MergeIn xpos 34 ypos -164 } Shuffle { alpha white name ShuffleWhiteA xpos 34 ypos -140 disable {{parent.rgba_mode}} } BlinkScript { recompileCount 147 ProgramGroup 1 KernelDescription "2 \"C44MatrixKernel\" iterate pixelWise 10f1841ce0aee43165aca4445fb9ce0126826eedd71da6339f12b8f8de8e52eb 2 \"src\" Read Point \"dst\" Write Point 4 \"m\" Float 16 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== \"invert\" Int 1 AAAAAA== \"transpose\" Int 1 AAAAAA== \"w_divide\" Int 1 AAAAAA== 4 \"m\" 16 1 \"invert\" 1 1 \"transpose\" 1 1 \"w_divide\" 1 1 0" kernelSource "kernel C44MatrixKernel : ImageComputationKernel\n\{\n Image src;\n Image dst;\n\n param:\n float4x4 m;\n int invert;\n int transpose;\n int w_divide;\n\n void process(int2 pos) \{\n SampleType(src) p = src();\n float4 result = 1.0f;\n float4x4 mi = m;\n mi = invert?mi.invert():mi;\n mi = transpose?mi.transpose():mi;\n for(int c = 0; c\n\{\n Image position_pass;\n Image dst;\n\n param:\n bool invert;\n\n void define()\n \{\n defineParam(invert, \"Invert\", false);\n \}\n\n void process()\n \{\n\n //Declare some values for later use\n int lastRandom, numberFeaturePoints;\n float distance = 6666.0f;\n float3 randomDiff, featurePoint;\n int cubeX, cubeY, cubeZ;\n\n float4 position = position_pass();\n float3 input = float3(position.x, position.y, position.z);\n\n // Determine which cube the evaluation point is in\n int evalCubeX = floor(input.x);\n int evalCubeY = floor(input.y);\n int evalCubeZ = floor(input.z);\n\n for (int i = -1; i < 2; ++i)\n \{\n for (int j = -1; j < 2; ++j)\n \{\n for (int k = -1; k < 2; ++k)\n \{\n cubeX = evalCubeX + i;\n cubeY = evalCubeY + j;\n cubeZ = evalCubeZ + k;\n\n // Generate a reproducible random number generator for the cube\n lastRandom = lcgRandom(hash(cubeX, cubeY, cubeZ));\n // Determine how many feature points are in the cube\n numberFeaturePoints = probLookup(lastRandom);\n // Check each feature point\n for (uint l = 0; l < numberFeaturePoints; ++l)\n \{\n lastRandom = lcgRandom(lastRandom);\n randomDiff.x = float(lastRandom) / rand_modulus;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.y = float(lastRandom) / rand_modulus;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.z = float(lastRandom) / rand_modulus;\n\n featurePoint = float3(randomDiff.x + float(cubeX), randomDiff.y + float(cubeY), randomDiff.z + float(cubeZ));\n\n distance = min(distance, dot(input - featurePoint, input - featurePoint));\n \}\n \}\n \}\n \}\n\n distance = sqrt(distance);\n if (invert)\n distance = 1.0f - distance;\n dst() = distance;\n\n \}\n\n\};" useGPUIfAvailable {{parent.useGPU}} rebuild "" Worley_Invert {{parent.invert}} rebuild_finalise "" name WorleyNoise xpos 990 ypos 579 } Gamma { channels rgba value {{parent.gammaNormalize}} name Gamma2 xpos 990 ypos 615 } push $N81e232f0 BlinkScript { recompileCount 4 ProgramGroup 1 KernelDescription "2 \"ChebyshevNoise\" iterate pixelWise 517a1358a56b1248ee4a1cc426f04457776dbd1836be53c12b3ff4f236c7ecd9 2 \"position_pass\" Read Point \"dst\" Write Point 1 \"Range\" Float 1 AABAQA== 1 \"range\" 1 1 2 \"fRange\" Float 1 1 AAAAAA== \"iRange\" Int 1 1 AAAAAA==" kernelSource "// https://aftbit.com/cell-noise-2/\n\n# define MAX_DISTANCE_ARRAY 12\n\n// C++11\nconst uint rand_multiplier = 48271;\nconst uint rand_increment = 0;\nconst uint rand_modulus = 2147483647;\n\nstatic int lcgRandom(int seed)\n\{\n return abs((seed * rand_multiplier + rand_increment) % rand_modulus);\n\}\n\n// FNV Hash\nconst uint OFFSET_BASIS = 2166136261;\nconst uint FNV_PRIME = 16777619;\n\nstatic uint hash(uint i, uint j, uint k)\n\{\n return ((((((OFFSET_BASIS ^ i) * FNV_PRIME) ^ j) * FNV_PRIME) ^ k) * FNV_PRIME);\n\}\n\n// Poisson Distribution\nconst uint one = 393325350;\nconst uint two = 1022645910;\nconst uint three = 1861739990;\nconst uint four = 2700834071;\nconst uint five = 3372109335;\nconst uint six = 3819626178;\nconst uint seven = 4075350088;\nconst uint eight = 4203212043;\n\nstatic uint probLookup(uint value)\n\{\n if (value < one) return 1;\n if (value < two) return 2;\n if (value < three) return 3;\n if (value < four) return 4;\n if (value < five) return 5;\n if (value < six) return 6;\n if (value < seven) return 7;\n if (value < eight) return 8;\n return 9;\n\}\n\n// Distance Function\nstatic float ChebyshevDistanceFunc(float3 p1, float3 p2)\n\{\n float3 diff = p1 - p2;\n return max(max(fabs(diff.x), fabs(diff.y)), fabs(diff.z));\n\}\n\n// Insertion Array\nstatic void insert(float arr\[], float value)\n\{\n float temp;\n for (int i = MAX_DISTANCE_ARRAY - 1; i >= 0; i--)\n \{\n if (value > arr\[i])\n break;\n temp = arr\[i];\n arr\[i] = value;\n if (i + 1 < MAX_DISTANCE_ARRAY)\n \{\n arr\[i + 1] = temp;\n \}\n \}\n\}\n\n\n// Blink Kernel\nkernel ChebyshevNoise : ImageComputationKernel\n\{\n Image position_pass;\n Image dst;\n\n param:\n float range;\n\n local:\n float fRange;\n int iRange;\n\n void define()\n \{\n defineParam(range, \"Range\", 3.0f);\n \}\n\n void init()\n \{\n fRange = clamp(range, 0.0f, float(MAX_DISTANCE_ARRAY - 2));\n iRange = int(fRange);\n \}\n\n void process()\n \{\n\n //Declare some values for later use\n int lastRandom, numberFeaturePoints;\n float3 randomDiff, featurePoint;\n int cubeX, cubeY, cubeZ;\n\n float distanceArray\[MAX_DISTANCE_ARRAY];\n\n // Initialize values in distance array to large values\n for (int i = 0; i < MAX_DISTANCE_ARRAY; i++)\n distanceArray\[i] = 6666;\n\n float4 position = position_pass();\n float3 input = float3(position.x, position.y, position.z);\n\n // Determine which cube the evaluation point is in\n int evalCubeX = floor(input.x);\n int evalCubeY = floor(input.y);\n int evalCubeZ = floor(input.z);\n\n for (int i = -1; i < 2; ++i)\n \{\n for (int j = -1; j < 2; ++j)\n \{\n for (int k = -1; k < 2; ++k)\n \{\n cubeX = evalCubeX + i;\n cubeY = evalCubeY + j;\n cubeZ = evalCubeZ + k;\n\n // Generate a reproducible random number generator for the cube\n lastRandom = lcgRandom(hash(cubeX, cubeY, cubeZ));\n // Determine how many feature points are in the cube\n numberFeaturePoints = probLookup(lastRandom);\n // Check each feature point\n for (uint l = 0; l < numberFeaturePoints; ++l)\n \{\n lastRandom = lcgRandom(lastRandom);\n randomDiff.x = float(lastRandom) / rand_modulus;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.y = float(lastRandom) / rand_modulus;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.z = float(lastRandom) / rand_modulus;\n\n featurePoint = float3(randomDiff.x + float(cubeX), randomDiff.y + float(cubeY), randomDiff.z + float(cubeZ));\n\n insert(distanceArray, ChebyshevDistanceFunc(input, featurePoint));\n \}\n \}\n \}\n \}\n\n float color = (distanceArray\[ iRange + 2 ] - distanceArray\[ iRange + 1 ]) * fmod(fRange, 1.0f) + distanceArray\[ iRange + 1] - distanceArray\[0];\n dst() = color;\n\n \}\n\n\};" useGPUIfAvailable {{parent.useGPU}} rebuild "" ChebyshevNoise_Range 1 format {{{WorleyNoise.format}}} rebuild_finalise "" name ChebyShevNoise xpos 880 ypos 578 } Gamma { channels rgba value {{parent.gammaNormalize}} name Gamma3 xpos 880 ypos 614 } push $N81e232f0 BlinkScript { recompileCount 15 ProgramGroup 1 KernelDescription "2 \"ManhattanNoise\" iterate pixelWise 8f4d3375bd506ca9e28dc8e57d643af6a2e1e4628d082801994f4dfea81563d1 2 \"position_pass\" Read Point \"dst\" Write Point 1 \"Range\" Float 1 AABAQA== 1 \"range\" 1 1 2 \"fRange\" Float 1 1 AAAAAA== \"iRange\" Int 1 1 AAAAAA==" kernelSource "// https://aftbit.com/cell-noise-2/\n\n# define MAX_DISTANCE_ARRAY 12\n\n// C++11\nconst uint rand_multiplier = 48271;\nconst uint rand_increment = 0;\nconst uint rand_modulus = 2147483647;\n\nstatic int lcgRandom(int seed)\n\{\n return abs((seed * rand_multiplier + rand_increment) % rand_modulus);\n\}\n\n// FNV Hash\nconst uint OFFSET_BASIS = 2166136261;\nconst uint FNV_PRIME = 16777619;\n\nstatic uint hash(uint i, uint j, uint k)\n\{\n return ((((((OFFSET_BASIS ^ i) * FNV_PRIME) ^ j) * FNV_PRIME) ^ k) * FNV_PRIME);\n\}\n\n// Poisson Distribution\nconst uint one = 393325350;\nconst uint two = 1022645910;\nconst uint three = 1861739990;\nconst uint four = 2700834071;\nconst uint five = 3372109335;\nconst uint six = 3819626178;\nconst uint seven = 4075350088;\nconst uint eight = 4203212043;\n\nstatic uint probLookup(uint value)\n\{\n if (value < one) return 1;\n if (value < two) return 2;\n if (value < three) return 3;\n if (value < four) return 4;\n if (value < five) return 5;\n if (value < six) return 6;\n if (value < seven) return 7;\n if (value < eight) return 8;\n return 9;\n\}\n\n// Distance Function\nstatic float ManhattanDistanceFunc(float3 p1, float3 p2)\n\{\n return fabs(p1.x - p2.x) + fabs(p1.y - p2.y) + fabs(p1.z - p2.z);\n\}\n\n// Insertion Array\nstatic void insert(float arr\[], float value)\n\{\n float temp;\n for (int i = MAX_DISTANCE_ARRAY - 1; i >= 0; i--)\n \{\n if (value > arr\[i])\n break;\n temp = arr\[i];\n arr\[i] = value;\n if (i + 1 < MAX_DISTANCE_ARRAY)\n \{\n arr\[i + 1] = temp;\n \}\n \}\n\}\n\n// Blink Kernel\nkernel ManhattanNoise : ImageComputationKernel\n\{\n Image position_pass;\n Image dst;\n\n param:\n float range;\n\n local:\n float fRange;\n int iRange;\n\n void define()\n \{\n defineParam(range, \"Range\", 3.0f);\n \}\n\n void init()\n \{\n fRange = clamp(range, 0.0f, float(MAX_DISTANCE_ARRAY - 2));\n iRange = int(fRange);\n \}\n\n void process()\n \{\n\n //Declare some values for later use\n int lastRandom, numberFeaturePoints;\n float3 randomDiff, featurePoint;\n int cubeX, cubeY, cubeZ;\n\n float distanceArray\[MAX_DISTANCE_ARRAY];\n\n // Initialize values in distance array to large values\n for (int i = 0; i < MAX_DISTANCE_ARRAY; i++)\n distanceArray\[i] = 6666;\n\n float4 position = position_pass();\n float3 input = float3(position.x, position.y, position.z);\n\n // Determine which cube the evaluation point is in\n int evalCubeX = floor(input.x);\n int evalCubeY = floor(input.y);\n int evalCubeZ = floor(input.z);\n\n for (int i = -1; i < 2; ++i)\n \{\n for (int j = -1; j < 2; ++j)\n \{\n for (int k = -1; k < 2; ++k)\n \{\n cubeX = evalCubeX + i;\n cubeY = evalCubeY + j;\n cubeZ = evalCubeZ + k;\n\n // Generate a reproducible random number generator for the cube\n lastRandom = lcgRandom(hash(cubeX, cubeY, cubeZ));\n // Determine how many feature points are in the cube\n numberFeaturePoints = probLookup(lastRandom);\n // Check each feature point\n for (uint l = 0; l < numberFeaturePoints; ++l)\n \{\n lastRandom = lcgRandom(lastRandom);\n randomDiff.x = float(lastRandom) / rand_modulus;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.y = float(lastRandom) / rand_modulus;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.z = float(lastRandom) / rand_modulus;\n\n featurePoint = float3(randomDiff.x + float(cubeX), randomDiff.y + float(cubeY), randomDiff.z + float(cubeZ));\n\n insert(distanceArray, ManhattanDistanceFunc(input, featurePoint));\n \}\n \}\n \}\n \}\n\n float color = (distanceArray\[ iRange + 2 ] - distanceArray\[ iRange + 1 ]) * fmod(fRange, 1.0f) + distanceArray\[ iRange + 1] - distanceArray\[0];\n dst() = color;\n\n \}\n\n\};" useGPUIfAvailable {{parent.useGPU}} rebuild "" ManhattanNoise_Range 1 format {{{WorleyNoise.format}}} rebuild_finalise "" name ManhattanNoise xpos 770 ypos 577 } Gamma { channels rgba value {{parent.gammaNormalize}} name Gamma4 xpos 770 ypos 613 } push $N81e232f0 BlinkScript { recompileCount 15 ProgramGroup 1 KernelDescription "2 \"VoronoiNoise\" iterate pixelWise 67095f19952c7fb522e989b2d6691d9d342affbd2c266bc258f83435f13f21f7 2 \"position_pass\" Read Point \"dst\" Write Point 1 \"Range\" Float 1 AABAQA== 1 \"range\" 1 1 2 \"fRange\" Float 1 1 AAAAAA== \"iRange\" Int 1 1 AAAAAA==" kernelSource "// https://aftbit.com/cell-noise-2/\n\n# define MAX_DISTANCE_ARRAY 12\n\n// C++11\nconst uint rand_multiplier = 48271;\nconst uint rand_increment = 0;\nconst uint rand_modulus = 2147483647;\n\nstatic int lcgRandom(int seed)\n\{\n return abs((seed * rand_multiplier + rand_increment) % rand_modulus);\n\}\n\n// FNV Hash\nconst uint OFFSET_BASIS = 2166136261;\nconst uint FNV_PRIME = 16777619;\n\nstatic uint hash(uint i, uint j, uint k)\n\{\n return ((((((OFFSET_BASIS ^ i) * FNV_PRIME) ^ j) * FNV_PRIME) ^ k) * FNV_PRIME);\n\}\n\n// Poisson Distribution\nconst uint one = 393325350;\nconst uint two = 1022645910;\nconst uint three = 1861739990;\nconst uint four = 2700834071;\nconst uint five = 3372109335;\nconst uint six = 3819626178;\nconst uint seven = 4075350088;\nconst uint eight = 4203212043;\n\nstatic uint probLookup(uint value)\n\{\n if (value < one) return 1;\n if (value < two) return 2;\n if (value < three) return 3;\n if (value < four) return 4;\n if (value < five) return 5;\n if (value < six) return 6;\n if (value < seven) return 7;\n if (value < eight) return 8;\n return 9;\n\}\n\n// Insertion Array\nstatic void insert(float arr\[], int idArr\[], float value, int id)\n\{\n float temp;\n int tempID;\n for (int i = MAX_DISTANCE_ARRAY - 1; i >= 0; i--)\n \{\n if (value > arr\[i])\n break;\n temp = arr\[i];\n tempID = idArr\[i];\n arr\[i] = value;\n idArr\[i] = id;\n if (i + 1 < MAX_DISTANCE_ARRAY)\n \{\n arr\[i + 1] = temp;\n idArr\[i + 1] = tempID;\n \}\n \}\n\}\n\n\n// Blink Kernel\nkernel VoronoiNoise : ImageComputationKernel\n\{\n Image position_pass;\n Image dst;\n\n param:\n float range;\n \n local:\n float fRange;\n int iRange;\n\n void define()\n \{\n defineParam(range, \"Range\", 3.0f);\n \}\n\n void init()\n \{\n fRange = clamp(range, 0.0f, float(MAX_DISTANCE_ARRAY - 2));\n iRange = int(fRange);\n \}\n\n void process()\n \{\n\n //Declare some values for later use\n int lastRandom, id, numberFeaturePoints;\n float3 randomDiff, featurePoint;\n int cubeX, cubeY, cubeZ;\n\n float distanceArray\[MAX_DISTANCE_ARRAY];\n int idArray\[MAX_DISTANCE_ARRAY];\n\n // Initialize values in distance array to large values\n for (int i = 0; i < MAX_DISTANCE_ARRAY; i++)\n distanceArray\[i] = 6666;\n\n float4 position = position_pass();\n float3 input = float3(position.x, position.y, position.z);\n\n // Determine which cube the evaluation point is in\n int evalCubeX = floor(input.x);\n int evalCubeY = floor(input.y);\n int evalCubeZ = floor(input.z);\n\n for (int i = -1; i < 2; ++i)\n \{\n for (int j = -1; j < 2; ++j)\n \{\n for (int k = -1; k < 2; ++k)\n \{\n cubeX = evalCubeX + i;\n cubeY = evalCubeY + j;\n cubeZ = evalCubeZ + k;\n\n // Generate a reproducible random number generator for the cube\n lastRandom = lcgRandom(hash(cubeX, cubeY, cubeZ));\n id = lastRandom;\n // Determine how many feature points are in the cube\n numberFeaturePoints = probLookup(lastRandom);\n // Check each feature point\n for (uint l = 0; l < numberFeaturePoints; ++l)\n \{\n lastRandom = lcgRandom(lastRandom);\n randomDiff.x = float(lastRandom) / rand_modulus;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.y = float(lastRandom) / rand_modulus;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.z = float(lastRandom) / rand_modulus;\n\n featurePoint = float3(randomDiff.x + float(cubeX), randomDiff.y + float(cubeY), randomDiff.z + float(cubeZ));\n\n insert(distanceArray, idArray, length(input - featurePoint), id+l);\n \}\n \}\n \}\n \}\n\n float3 col = float3(float(idArray\[iRange]) / rand_modulus, 0.0f, 0.0f);\n lastRandom = lcgRandom(idArray\[iRange]);\n col.y = float(lastRandom) / rand_modulus;\n lastRandom = lcgRandom(lastRandom);\n col.z = float(lastRandom) / rand_modulus;\n\n for(int component = 0; component < 3; component++)\n dst(component) = col\[component];\n dst(3) = 1.0f;\n \}\n\n\};" useGPUIfAvailable {{parent.useGPU}} rebuild "" VoronoiNoise_Range 1 format {{{WorleyNoise.format}}} rebuild_finalise "" name VoronoiNoise xpos 658 ypos 579 } Gamma { channels rgba value {{parent.gammaNormalize}} name Gamma5 xpos 658 ypos 615 } push $N81e232f0 BlinkScript { recompileCount 3 ProgramGroup 1 KernelDescription "2 \"EuclidianNoise\" iterate pixelWise b78f7b94022701a0fe7a0b3d8a219cf673ea1032aea12739f59fb3562a78ed42 2 \"position_pass\" Read Point \"dst\" Write Point 1 \"Range\" Float 1 AABAQA== 1 \"range\" 1 1 2 \"fRange\" Float 1 1 AAAAAA== \"iRange\" Int 1 1 AAAAAA==" kernelSource "// https://aftbit.com/cell-noise-2/\n\n# define MAX_DISTANCE_ARRAY 12\n\n// C++11\nconst uint rand_multiplier = 48271;\nconst uint rand_increment = 0;\nconst uint rand_modulus = 2147483647;\n\nstatic int lcgRandom(int seed)\n\{\n return abs((seed * rand_multiplier + rand_increment) % rand_modulus);\n\}\n\n// FNV Hash\nconst uint OFFSET_BASIS = 2166136261;\nconst uint FNV_PRIME = 16777619;\n\nstatic uint hash(uint i, uint j, uint k)\n\{\n return ((((((OFFSET_BASIS ^ i) * FNV_PRIME) ^ j) * FNV_PRIME) ^ k) * FNV_PRIME);\n\}\n\n// Poisson Distribution\nconst uint one = 393325350;\nconst uint two = 1022645910;\nconst uint three = 1861739990;\nconst uint four = 2700834071;\nconst uint five = 3372109335;\nconst uint six = 3819626178;\nconst uint seven = 4075350088;\nconst uint eight = 4203212043;\n\nstatic uint probLookup(uint value)\n\{\n if (value < one) return 1;\n if (value < two) return 2;\n if (value < three) return 3;\n if (value < four) return 4;\n if (value < five) return 5;\n if (value < six) return 6;\n if (value < seven) return 7;\n if (value < eight) return 8;\n return 9;\n\}\n\n// Distance Functions\nstatic float EuclidianDistanceFunc(float3 p1, float3 p2)\n\{\n return (p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y) + (p1.z - p2.z) * (p1.z - p2.z);\n\}\n\n\n// Insertion Array\nstatic void insert(float arr\[], float value)\n\{\n float temp;\n for (int i = MAX_DISTANCE_ARRAY - 1; i >= 0; i--)\n \{\n if (value > arr\[i])\n break;\n temp = arr\[i];\n arr\[i] = value;\n if (i + 1 < MAX_DISTANCE_ARRAY)\n \{\n arr\[i + 1] = temp;\n \}\n \}\n\}\n\n\n// Blink Kernel\nkernel EuclidianNoise : ImageComputationKernel\n\{\n Image position_pass;\n Image dst;\n\n param:\n float range;\n\n local:\n float fRange;\n int iRange;\n\n void define()\n \{\n defineParam(range, \"Range\", 3.0f);\n \}\n\n void init()\n \{\n fRange = clamp(range, 0.0f, float(MAX_DISTANCE_ARRAY - 2));\n iRange = int(fRange);\n \}\n\n void process()\n \{\n\n //Declare some values for later use\n int lastRandom, numberFeaturePoints;\n float3 randomDiff, featurePoint;\n int cubeX, cubeY, cubeZ;\n\n float distanceArray\[MAX_DISTANCE_ARRAY];\n\n // Initialize values in distance array to large values\n for (int i = 0; i < MAX_DISTANCE_ARRAY; i++)\n distanceArray\[i] = 6666;\n\n float4 position = position_pass();\n float3 input = float3(position.x, position.y, position.z);\n\n // Determine which cube the evaluation point is in\n int evalCubeX = floor(input.x);\n int evalCubeY = floor(input.y);\n int evalCubeZ = floor(input.z);\n\n for (int i = -1; i < 2; ++i)\n \{\n for (int j = -1; j < 2; ++j)\n \{\n for (int k = -1; k < 2; ++k)\n \{\n cubeX = evalCubeX + i;\n cubeY = evalCubeY + j;\n cubeZ = evalCubeZ + k;\n\n // Generate a reproducible random number generator for the cube\n lastRandom = lcgRandom(hash(cubeX, cubeY, cubeZ));\n // Determine how many feature points are in the cube\n numberFeaturePoints = probLookup(lastRandom);\n // Check each feature point\n for (uint l = 0; l < numberFeaturePoints; ++l)\n \{\n lastRandom = lcgRandom(lastRandom);\n randomDiff.x = float(lastRandom) / rand_modulus;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.y = float(lastRandom) / rand_modulus;\n\n lastRandom = lcgRandom(lastRandom);\n randomDiff.z = float(lastRandom) / rand_modulus;\n\n featurePoint = float3(randomDiff.x + float(cubeX), randomDiff.y + float(cubeY), randomDiff.z + float(cubeZ));\n\n insert(distanceArray, EuclidianDistanceFunc(input, featurePoint));\n \}\n \}\n \}\n \}\n\n\n float color = (distanceArray\[ iRange + 2 ] - distanceArray\[ iRange + 1 ]) * fmod(fRange, 1.0f) + distanceArray\[ iRange + 1] - distanceArray\[0];\n dst() = color;\n\n \}\n\n\};" useGPUIfAvailable {{parent.useGPU}} rebuild "" EuclidianNoise_Range 1 format {{{WorleyNoise.format}}} rebuild_finalise "" name EuclidianNoise xpos 550 ypos 579 } Gamma { channels rgba value {{parent.gammaNormalize}} name Gamma6 xpos 550 ypos 615 } push $N81e232f0 Expression { channel0 rgba expr0 "sin( atan(r, g) *rays+rays_seed)" channel1 none channel2 none name rays xpos 400 ypos 582 addUserKnob {20 User} addUserKnob {7 rays} rays {{parent.rays}} addUserKnob {7 rays_seed l "rays seed"} rays_seed {{parent.raysSeed}} } Gamma { channels rgba value {{parent.gammaNormalize}} name Gamma7 xpos 400 ypos 606 } push $N81e232f0 Expression { channel0 rgba expr0 "sin(sqrt( r*r + g*g + b*b)+rings_seed)" channel1 none channel2 none name rings xpos 259 ypos 581 addUserKnob {20 User} addUserKnob {7 rings_seed l "rings seed"} rings_seed {{parent.ringsSeed}} } Gamma { channels rgba value {{parent.gammaNormalize}} name Gamma8 xpos 259 ypos 605 } push $N81e232f0 Expression { channel0 rgba expr0 "pow(turbulence (r, g, b, octaves, lacunarity, gain), 1/gamma)" channel1 none channel2 none channel3 {none none none -rgba.alpha} name Turb xpos 128 ypos 579 addUserKnob {20 User} addUserKnob {3 octaves} octaves {{parent.octaves}} addUserKnob {7 lacunarity R 1 10} lacunarity {{parent.lacunarity}} addUserKnob {7 gain R 0.1 1} gain {{parent.gain}} addUserKnob {7 gamma} gamma {{parent.gamma}} } push $N81e232f0 Expression { channel0 rgba expr0 "pow((fBm (r, g, b, octaves, lacunarity, gain) +1)/2, 1/gamma)" channel1 none channel2 none channel3 {none none none -rgba.alpha} name FBM xpos 0 ypos 577 addUserKnob {20 User} addUserKnob {3 octaves} octaves {{parent.octaves}} addUserKnob {7 lacunarity R 1 10} lacunarity {{parent.lacunarity}} addUserKnob {7 gain R 0.1 1} gain {{parent.gain}} addUserKnob {7 gamma} gamma {{parent.gamma}} } Switch { inputs 9 which {{noisetype}} name Type xpos 0 ypos 692 } Multiply { inputs 1+1 channels rgba value 0 name Multiply1 xpos 0 ypos 751 disable {{1-parent.useAlpha}} } Output { name Output1 xpos 0 ypos 885 } push $N81ae9a60 NoOp { name SampleXY knobChanged "\nn = nuke.thisNode()\nrgbNode = nuke.toNode('Sample')\nposition = n.knob('Position2d').getValue()\npositionX = position\[0]\npositionY = position\[-1]\nrSample = n.sample(\"r\",positionX,positionY)\ngSample = n.sample(\"g\",positionX,positionY)\nbSample = n.sample(\"b\",positionX,positionY)\nrgbNode.knob('rgbSample').setValue(\[rSample, gSample, bSample])\n" xpos -164 ypos 95 addUserKnob {20 User} addUserKnob {12 Position2d} Position2d {914 591} } NoOp { inputs 0 name Sample xpos -162 ypos 140 addUserKnob {20 User} addUserKnob {18 rgbSample} rgbSample {0 0 0} addUserKnob {6 rgbSample_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ParticleKiller.gizmo ================================================ Group { name ParticleKiller tile_color 0x101010ff selected true addUserKnob {20 particleKillerTab l ParticleKiller} addUserKnob {41 ids t "The ids of the particles that should be affected. Separate using spaces or comma's." T ParticleExpression2.ids} addUserKnob {41 operation l "" t "Kill: all the named particles are deleted.\nKeep: all but the named particles are deleted." -STARTLINE T ParticleExpression2.operation} addUserKnob {26 ""} addUserKnob {22 displayPoints l "display point numbers" t "Toggle the visibility of the particle ids in the 3D viewer." T "knob = nuke.activeViewer().node().knob('show_vertex_num')\nknob.setValue(1 - knob.value())" +STARTLINE} addUserKnob {6 colorPreview l "overwrite color with particle id" t "Replace the particles' color values with their ids for easy identification." -STARTLINE} addUserKnob {1 channels l INVISIBLE +INVISIBLE} channels "\[expr \{ \[value colorPreview] ? \"Color Preview Enabled\" : \"rgb\"\}]" } Input { inputs 0 name Input label "\[value number]" xpos 167 ypos -29 } ParticleExpression { colexpr id name ParticleExpression1 xpos 167 ypos 47 disable {{"max(parent.disable, (1 - parent.colorPreview))"}} } ParticleExpression { channelsexpr_onlynew true new_channels {} name ParticleExpression2 knobChanged "node = nuke.thisNode()\n\nmode = int(node.knob(\"operation\").getValue())\noperation = \[\"=\",\"!\"]\[mode]\ndivider = \[\"|\",\"&\"]\[mode]\ndivider = \" %s \"%(divider*2)\n\nnumbers = \[str(i) for i in range(10)]\n\nids = node.knob(\"ids\").value()\n\nids = ids.replace(\",\",\" \").split()\nids = sorted(list(set(\[int(id) for id in ids if all(\[number in numbers for number in id])])))\nids = \[\"id %s= %s\"%(operation, id) for id in ids]\n\nexpression = divider.join(ids)\n\nnode.knob(\"channelsexpr\").setValue(expression)" xpos 167 ypos 112 disable {{"max( parent.disable, (1 - clamp(\[string length \[value channelsexpr]])))"}} addUserKnob {20 killTab l Kill} addUserKnob {26 credits l "" +STARTLINE T "ParticleKiller v1.0 - Wouter Gilsing"} addUserKnob {1 ids} addUserKnob {4 operation -STARTLINE M {kill keep "" ""}} } Output { name Output1 xpos 167 ypos 193 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ParticleLights.gizmo ================================================ Group { name ParticleLights selected true addUserKnob {20 User} addUserKnob {26 info1 l "" +STARTLINE T "Particle Lights v1.1"} addUserKnob {26 info2 l "" +STARTLINE T "by Mads Hagbarth Lund"} addUserKnob {26 ""} addUserKnob {41 "blinnShader_Diffuse Multiplier" l "Diffuse Multiplier" T "BlinkScript8.blinnShader_Diffuse Multiplier"} addUserKnob {41 "blinnShader_Specular Power" l "Specular Power" T "BlinkScript8.blinnShader_Specular Power"} addUserKnob {41 "blinnShader_Specular Hardness" l "Specular Hardness" T "BlinkScript8.blinnShader_Specular Hardness"} addUserKnob {41 "blinnShader_Half Lambert" l "Half Lambert" T "BlinkScript8.blinnShader_Half Lambert"} } StickyNote { inputs 0 name StickyNote1 label "A bug in the blink node means that the input size must be atleast 2x2. \nSo we fake this by adding 2 null particles." xpos -847 ypos 354 } Group { inputs 0 name Light2 xpos -679 ypos 487 addUserKnob {20 User} addUserKnob {41 color T Point.color} addUserKnob {41 intensity T Point.intensity} addUserKnob {41 translate T Point.translate} } StickyNote { inputs 0 name StickyNote1 label "Ensure that we can use axis nodes\nto modify the position of the light." xpos -183 ypos -299 } StickyNote { inputs 0 name StickyNote2 label "Dummy object to make it look like a regular light" xpos -188 ypos -235 } StickyNote { inputs 0 name StickyNote4 label "Link positions via the world matrix to get exact position" xpos -300 ypos -55 } StickyNote { inputs 0 name StickyNote3 label "Link RGB to color and Alpha to Intensity" xpos -300 ypos -131 } Constant { inputs 0 color {{parent.Point.color} {parent.Point.color} {parent.Point.color} {parent.Point.intensity/10}} format "1 1 0 0 1 1 1 hg_light" name Constant2 xpos -399 ypos -148 } Sphere { display off render_mode off rows 1 columns 1 translate {{parent.Point.world_matrix.3 x1 11.42000103 x8 -18.5 2.000001907} {parent.Point.world_matrix.7 x1 1.620000005 x8 46.30000305 44.20000076} {parent.Point.world_matrix.11 x1 0.3999999762 x8 -50.79999924 -50.79999924}} uniform_scale 0.022 name Lightx xpos -399 ypos -52 } push 0 ParticleEmitter { inputs 2 display off render_mode off start_frame -5 emit_channels {b} emit_from bbox emit_order uniformly randomize_type "randomize outwards" rate 4 lifetime 1 velocity 0 size 1 size_channel rgba.alpha color_from_texture true name ParticleEmitter1 xpos -399 ypos 46 } Output { name Output1 xpos -399 ypos 150 } Input { inputs 0 name Input1 xpos -276 ypos -296 } Light { color {0 0 0} intensity 0 depthmap_slope_bias 0.01 name Point xpos -266 ypos -216 } end_group Group { inputs 0 name Light1 xpos -684 ypos 428 addUserKnob {20 User} addUserKnob {41 color T Point.color} addUserKnob {41 intensity T Point.intensity} addUserKnob {41 translate T Point.translate} } StickyNote { inputs 0 name StickyNote1 label "Ensure that we can use axis nodes\nto modify the position of the light." xpos -183 ypos -299 } StickyNote { inputs 0 name StickyNote2 label "Dummy object to make it look like a regular light" xpos -188 ypos -235 } StickyNote { inputs 0 name StickyNote4 label "Link positions via the world matrix to get exact position" xpos -300 ypos -55 } StickyNote { inputs 0 name StickyNote3 label "Link RGB to color and Alpha to Intensity" xpos -300 ypos -131 } Constant { inputs 0 color {{parent.Point.color} {parent.Point.color} {parent.Point.color} {parent.Point.intensity/10}} format "1 1 0 0 1 1 1 hg_light" name Constant2 xpos -399 ypos -148 } Sphere { display off render_mode off rows 1 columns 1 translate {{parent.Point.world_matrix.3 x1 11.42000103 x8 -18.5 2.000001907} {parent.Point.world_matrix.7 x1 1.620000005 x8 46.30000305 44.20000076} {parent.Point.world_matrix.11 x1 0.3999999762 x8 -50.79999924 -50.79999924}} uniform_scale 0.022 name Lightx xpos -399 ypos -52 } push 0 ParticleEmitter { inputs 2 display off render_mode off start_frame -5 emit_channels {b} emit_from bbox emit_order uniformly randomize_type "randomize outwards" rate 4 lifetime 1 velocity 0 size 1 size_channel rgba.alpha color_from_texture true name ParticleEmitter1 xpos -399 ypos 46 } Output { name Output1 xpos -399 ypos 150 } Input { inputs 0 name Input1 xpos -276 ypos -296 } Light { color {0 0 0} intensity 0 depthmap_slope_bias 0.01 name Point xpos -266 ypos -216 } end_group push 0 Input { inputs 0 name Particles xpos -452 ypos 324 } ParticleMerge { inputs 4 name ParticleMerge1 xpos -452 ypos 428 } add_layer {hag_pos hag_pos.red hag_pos.green hag_pos.blue hag_pos.alpha} add_layer {hag_active hag_active.a} ParticleToImage { pos hag_pos active hag_active.a name ParticleToImage1 xpos -452 ypos 511 } set N4d0e2420 [stack 0] Shuffle { in hag_pos name light_pos xpos -329 ypos 511 } Dot { name Dot2 xpos -295 ypos 559 } push $N4d0e2420 Shuffle { in rgb in2 hag_active alpha red2 name light_color xpos -452 ypos 581 } Input { inputs 0 name Camera xpos -149 ypos 282 number 1 } Camera2 { name Camera1 xpos -136 ypos 320 } Dot { name Dot1 xpos -112 ypos 396 } Input { inputs 0 name Scene3D xpos -275 ypos 323 number 2 } push 0 add_layer {P P.red P.green P.blue P.alpha} add_layer {N N.red N.green N.blue N.alpha} ScanlineRender { inputs 3 max_tessellation 2 motion_vectors_type distance output_shader_vectors true P_channel P N_channel N name ScanlineRender2 xpos -275 ypos 393 } Dot { name Dot10 xpos -241 ypos 421 } set N4e0a23c0 [stack 0] Dot { name Dot3 xpos -152 ypos 421 } Shuffle { in N in2 rgba alpha alpha2 name NormalSplit xpos -186 ypos 472 } push $N4e0a23c0 Shuffle { in P in2 rgba alpha alpha2 name PointPosSplit xpos -275 ypos 472 } BlinkScript { inputs 4 ProgramGroup 1 KernelDescription "1 \"blinnShader\" iterate pixelWise 4b6604ba5b4299095f03f9edf77da6dbf1f946c319dc7f6e6962ca67a375f9f8 5 \"pointPos\" Read Point \"normal\" Read Point \"light_color\" Read Random \"light_pos\" Read Random \"dst\" Write Point 5 \"Camera Position\" Float 3 AACAPwAAgD8AAIA/AAAAAA== \"Diffuse Multiplier\" Float 1 AACAPw== \"Specular Power\" Float 1 AAAgQQ== \"Specular Hardness\" Float 1 AADIQg== \"Half Lambert\" Bool 1 AQ==" kernelSource "kernel blinnShader : ImageComputationKernel\n\{\n Image pointPos; //the input image\n Image normal; //the input image\n Image light_color; //the input image\n Image light_pos; //the input image\n\n Image dst; //the output image\n\n param:\n float3 cameraPosition;\n float diffuseMultiplier;\n float specularPower;\n float specularHardness;\n bool halfLambert;\n\n local:\n float3 lightDir;\n float3 viewDir;\n\n void define() \{\n defineParam(halfLambert,\"Half Lambert\",bool(1));\n defineParam(cameraPosition, \"Camera Position\", float3(1.0f,1.0f,1.0f));\n defineParam(diffuseMultiplier,\"Diffuse Multiplier\",float(1.0f));\n defineParam(specularPower,\"Specular Power\",float(10.0f));\n defineParam(specularHardness,\"Specular Hardness\",float(100.0f));\n \}\n\n void init() \{\n \}\n\n void process() \{\n\n SampleType(dst) sampleBase(0.0f);\n\n float newVal = 0;\n for(int j = 0; j < light_pos.bounds.y2; j++) \{\n for(int i = 0; i < light_pos.bounds.x2; i++) \{\n if (light_color(i,j).w == 1) \{ \n\n lightDir = (float3(light_pos(i,j).x,light_pos(i,j).y,light_pos(i,j).z)-float3(pointPos(0),pointPos(1),pointPos(2)));\n float distance = length(lightDir);\n lightDir = normalize(lightDir);\n distance = distance * distance;\n\n viewDir = (cameraPosition-float3(pointPos(0),pointPos(1),pointPos(2)));\n viewDir = normalize(viewDir);\n\n\n //Calculating Diffuse\n float NdotL = dot(float3(normal(0),normal(1),normal(2)),lightDir);\n if (halfLambert) \{ \n NdotL = NdotL * 0.5 + 0.5; //Added option for half lambert\n \}\n else\n \{\n NdotL = min(1.0f,max(0.0f,NdotL));\n \}\n\n float diffuse = NdotL * (light_pos(i,j).w*diffuseMultiplier) / distance;\n\n\n //Calculating Specular\n float3 H = normalize(lightDir+viewDir);\n float NdotH = dot(float3(normal(0),normal(1),normal(2)),H);\n float intensity = pow(NdotH,specularHardness);\n float specular = intensity * specularPower / distance;\n\n\n SampleType(dst) sample(0.0f);\n sample.x = max(0.0f,(diffuse+specular) * light_color(i,j).x);\n sample.y = max(0.0f,(diffuse+specular) * light_color(i,j).y);\n sample.z = max(0.0f, (diffuse+specular) * light_color(i,j).z);\n sampleBase += sample;\n \}\n \}\n \}\n\n dst() = sampleBase+float4(0,0,0,pointPos(3)); //Reaplying Alpha\n \}\n\};" useGPUIfAvailable false vectorize false rebuild "" "blinnShader_Camera Position" {{parent.Camera1.world_matrix.3} {parent.Camera1.world_matrix.7} {parent.Camera1.world_matrix.11}} "blinnShader_Diffuse Multiplier" 4 "blinnShader_Specular Power" 0.45 "blinnShader_Specular Hardness" 200 "blinnShader_Half Lambert" false rebuild_finalise "" name BlinkScript8 xpos -186 ypos 575 } set N4e0c4f40 [stack 0] Premult { name Premult1 xpos -186 ypos 718 } Output { name Output1 xpos -186 ypos 785 } push $N4e0c4f40 end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_PerspectiveGuide.gizmo ================================================ Group { name PerspectiveGuide_BB tile_color 0x566d6dff note_font Verdana selected true mapsize {0.15 0.15} addUserKnob {20 options l Options} addUserKnob {4 overlay l Overlay t "Choose layer operation." M {add over ""}} overlay over addUserKnob {6 invertOver t "If you're using over operation, you can use the lines with the background image's inverted colour values." -STARTLINE} addUserKnob {3 linesVisible t "Choose the amount of visible lines. (1-8)"} linesVisible 8 addUserKnob {7 linesThickness R 0 10} addUserKnob {18 lineColour} lineColour {1 1 1} addUserKnob {6 lineColour_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 horizonGrp l horizon n 1} addUserKnob {6 horizon +STARTLINE} horizon true addUserKnob {18 horizonColour} horizonColour {1 0 0} addUserKnob {6 horizonColour_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 lineOpacity} lineOpacity 1 addUserKnob {20 endGroup n -1} addUserKnob {22 resetPoints l "Reset Points" T "def setPerspectivePointValues():\n w = int (nuke.thisNode().width())\n h = int (nuke.thisNode().height())\n wHalf = int (w/2)\n hHalf = int (h/2)\n\n persp = nuke.thisNode()\n persp\[ 'origin' ].setValue( \[wHalf, hHalf] )\n persp\[ 'point1' ].setValue( \[0, h] )\n persp\[ 'point2' ].setValue( \[wHalf+1, h] )\n persp\[ 'point3' ].setValue( \[w, h] )\n persp\[ 'point4' ].setValue( \[0, hHalf+1] )\n persp\[ 'point5' ].setValue( \[w, hHalf+1] )\n persp\[ 'point6' ].setValue( \[0, 0] )\n persp\[ 'point7' ].setValue( \[wHalf+1, 0] )\n persp\[ 'point8' ].setValue( \[w, 0] )\n\nsetPerspectivePointValues()" +STARTLINE} addUserKnob {12 origin l Origin} origin {960 540} addUserKnob {12 point1 l Point1} point1 {0 1080} addUserKnob {12 point2 l Point2} point2 {961 1080} addUserKnob {12 point3 l Point3} point3 {1920 1080} addUserKnob {12 point4 l Point4} point4 {0 541} addUserKnob {12 point5 l Point5} point5 {1920 541} addUserKnob {12 point6 l Point6} addUserKnob {12 point7 l Point7} point7 {961 0} addUserKnob {12 point8 l Point8} point8 {1920 0} addUserKnob {26 ""} addUserKnob {26 version l "" t "Horizon Line added" +STARTLINE T "version 1.1.0"} addUserKnob {26 Copyright l "" +STARTLINE T "Copyright 2010 Baseblack (London) Ltd."} } RotoPaint { inputs 0 cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 512} {t x44800000 x44428000} {a} {curvegroup Bezier2 1536 bezier {{cc {f 8192} {p {} {{=origin.x x4474c000} {=origin.y x442c8000}} {} {} {{=0 xbca3d70a} {=origin.y+1 x44074000}} {}}} {cc {f 8192} {p {} {} {} {} {} {}}}} {t x443fe000 x4402e000} {a spx 0 spy 0 sb 1 tt x40800000}} {curvegroup Bezier1 1536 bezier {{cc {f 8192} {p {} {{=origin.x x4474c000} {=origin.y x442c8000}} {} {} {{=1920 xbca3d70a} {=origin.y+1 x44074000}} {}}} {cc {f 8192} {p {} {} {} {} {} {}}}} {t x443fe000 x4402e000} {a spx 0 spy 0 sb 1 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 tt 5 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 tt 6 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 tt 7 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { addPoints str 1 ssx 1 ssy 1 sf 1 tt 8 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_autokey false toolbar_ripple_range_type "to end" toolbar_ripple_range_from 1 toolbar_ripple_range_to 1 toolbar_feather_link false toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {320 240} lifetime_type "all frames" view {} motionblur_on true motionblur_shutter_offset_type centred source_black_outside true name RotoPaint10 xpos -806 ypos -179 disable {{"linesVisible < 5"}} } Grade { channels rgba whitepoint 0 white_clamp true name Grade3 xpos -806 ypos -131 } Dilate { size {{linesThickness+1 i}} name Dilate2 xpos -806 ypos -89 } set Nec3247a0 [stack 0] Grade { channels rgba whitepoint 0 multiply {{horizonColour i} {horizonColour i} {horizonColour i} {curve i}} white_clamp true name horizonGrade xpos -806 ypos -1 } Multiply { value {{lineOpacity i}} name Multiply2 xpos -806 ypos 62 } RotoPaint { inputs 0 cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 512} {t x44800000 x44428000} {a} {curvegroup Bezier1 1536 bezier {{cc {f 8192} {p {} {{=origin.x x44ceb333} {=origin.y x44921333}} {} {} {{=point1.x x43400000} {=point1.y x4492c000}} {}}} {cc {f 8192} {p {} {} {} {} {} {}}}} {t x4447a000 x442d8000} {a spx x44800000 spy x44428000 sb 1 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 tt 5 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 tt 6 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 tt 7 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { addPoints str 1 ssx 1 ssy 1 sf 1 tt 8 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_autokey false toolbar_ripple_range_type "to end" toolbar_ripple_range_from 1 toolbar_ripple_range_to 1 toolbar_feather_link false toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {320 240} colorOverlay 0 lifetime_type "all frames" locked true motionblur_shutter_offset_type centred source_translate_round false source_black_outside true name RotoPaint1 xpos -590 ypos -565 disable {{"linesVisible < 1" i}} } RotoPaint { cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 512} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier2 1536 bezier {{cc {f 8192} {p {} {{=point2.x x44d50000} {=point2.y x4492d000}} {} {} {{=origin.x x448f8000} {=origin.y x42cc0000}} {}}} {cc {f 8192} {p {} {} {} {} {} {}}}} {t x44654000 x442af000} {a spx 0 spy 0 sb 1 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 tt 5 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 tt 6 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 tt 7 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { addPoints str 1 ssx 1 ssy 1 sf 1 tt 8 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_autokey false toolbar_ripple_range_type "to end" toolbar_ripple_range_from 1 toolbar_ripple_range_to 1 toolbar_feather_link false toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {320 240} lifetime_type "all frames" view {} motionblur_on true motionblur_shutter_offset_type centred source_black_outside true name RotoPaint2 xpos -590 ypos -516 disable {{"linesVisible < 2" i}} } RotoPaint { cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 512} {t x44800000 x44428000} {a} {curvegroup Bezier3 1536 bezier {{cc {f 8192} {p {} {{=origin.x x4496e000} {=origin.y x443e0000}} {} {} {{=point3.x x44da8000} {=point3.y x44994000}} {}}} {cc {f 8192} {p {} {} {} {} {} {}}}} {t x44b8b000 x44784000} {a spx 0 spy 0 sb 1 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 tt 5 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 tt 6 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 tt 7 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { addPoints str 1 ssx 1 ssy 1 sf 1 tt 8 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_autokey false toolbar_ripple_range_type "to end" toolbar_ripple_range_from 1 toolbar_ripple_range_to 1 toolbar_feather_link false toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {320 240} colorOverlay 0 lifetime_type "all frames" locked true motionblur_shutter_offset_type centred source_translate_round false source_black_outside true name RotoPaint3 xpos -590 ypos -467 disable {{"linesVisible < 3" i}} } RotoPaint { cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 512} {t x44800000 x44428000} {a} {curvegroup Bezier4 1536 bezier {{cc {f 8192} {p {} {{=origin.x x4474c000} {=origin.y x442c8000}} {} {} {{=point4.x x440b0000} {=point4.y x43b28000}} {}}} {cc {f 8192} {p {} {} {} {} {} {}}}} {t x443fe000 x4402e000} {a spx 0 spy 0 sb 1 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 tt 5 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 tt 6 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 tt 7 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { addPoints str 1 ssx 1 ssy 1 sf 1 tt 8 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_autokey false toolbar_ripple_range_type "to end" toolbar_ripple_range_from 1 toolbar_ripple_range_to 1 toolbar_feather_link false toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {320 240} colorOverlay 0 lifetime_type "all frames" locked true motionblur_shutter_offset_type centred source_translate_round false source_black_outside true name RotoPaint4 xpos -590 ypos -420 disable {{"linesVisible < 4" i}} } RotoPaint { cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 512} {t x44800000 x44428000} {a} {curvegroup Bezier5 1536 bezier {{cc {f 8192} {p {} {{=origin.x x448e6000} {=origin.y x43ea0000}} {} {} {{=point5.x x44f0a000} {=point5.y x43f30000}} {}}} {cc {f 8192} {p {} {} {} {} {} {}}}} {t x44bf8000 x43ee8000} {a spx 0 spy 0 sb 1 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 tt 5 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 tt 6 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 tt 7 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { addPoints str 1 ssx 1 ssy 1 sf 1 tt 8 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_autokey false toolbar_ripple_range_type "to end" toolbar_ripple_range_from 1 toolbar_ripple_range_to 1 toolbar_feather_link false toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {320 240} colorOverlay 0 lifetime_type "all frames" locked true motionblur_shutter_offset_type centred source_translate_round false source_black_outside true name RotoPaint5 xpos -590 ypos -371 disable {{"linesVisible < 5" i}} } RotoPaint { cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 512} {t x44800000 x44428000} {a} {curvegroup Bezier6 1536 bezier {{cc {f 8192} {p {} {{=origin.x x44780000} {=origin.y x441ac000}} {} {} {{=point6.x x43c78000} {=point6.y x43790000}} {}}} {cc {f 8192} {p {} {} {} {} {} {}}}} {t x442de000 x43d90000} {a spx 0 spy 0 sb 1 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 tt 5 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 tt 6 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 tt 7 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { addPoints str 1 ssx 1 ssy 1 sf 1 tt 8 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_autokey false toolbar_ripple_range_type "to end" toolbar_ripple_range_from 1 toolbar_ripple_range_to 1 toolbar_feather_link false toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {320 240} colorOverlay 0 lifetime_type "all frames" locked true motionblur_shutter_offset_type centred source_translate_round false source_black_outside true name RotoPaint6 xpos -590 ypos -323 disable {{"linesVisible < 6" i}} } RotoPaint { cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 512} {t x44800000 x44428000} {a} {curvegroup Bezier7 1536 bezier {{cc {f 8192} {p {} {{=origin.x x4486c000} {=origin.y x441a0000}} {} {} {{=point7.x x44bd4000} {=point7.y x43a10000}} {}}} {cc {f 8192} {p {} {} {} {} {} {}}}} {t x44a20000 x43ea8000} {a spx 0 spy 0 sb 1 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 tt 5 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 tt 6 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 tt 7 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { addPoints str 1 ssx 1 ssy 1 sf 1 tt 8 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_autokey false toolbar_ripple_range_type "to end" toolbar_ripple_range_from 1 toolbar_ripple_range_to 1 toolbar_feather_link false toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {320 240} colorOverlay 0 lifetime_type "all frames" locked true motionblur_shutter_offset_type centred source_translate_round false source_black_outside true name RotoPaint7 xpos -590 ypos -276 disable {{"linesVisible < 7" i}} } RotoPaint { cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 512} {t x44800000 x44428000} {a} {curvegroup Bezier8 1536 bezier {{cc {f 8192} {p {} {{=origin.x x4489e000} {=origin.y x44284000}} {} {} {{=point8.x x44cd0000} {=point8.y x43aa0000}} {}}} {cc {f 8192} {p {} {} {} {} {} {}}}} {t x44ab7000 x43fd4000} {a spx 0 spy 0 sb 1 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 tt 5 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 tt 6 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 tt 7 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { addPoints str 1 ssx 1 ssy 1 sf 1 tt 8 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_autokey false toolbar_ripple_range_type "to end" toolbar_ripple_range_from 1 toolbar_ripple_range_to 1 toolbar_feather_link false toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {320 240} colorOverlay 0 lifetime_type "all frames" locked true motionblur_shutter_offset_type centred source_translate_round false source_black_outside true name RotoPaint8 xpos -590 ypos -227 disable {{"linesVisible < 8" i}} } Grade { channels rgba whitepoint 0 white_clamp true name Grade1 xpos -590 ypos -176 } Dilate { size {{linesThickness i}} name Dilate1 xpos -590 ypos -138 } set Nec27c3a0 [stack 0] Grade { multiply {{lineColour.r i} {lineColour.g i} {lineColour.b i} {1 i}} white_clamp true name Grade2 xpos -590 ypos -82 } Multiply { value {{lineOpacity i}} name Multiply1 xpos -590 ypos -42 } Merge2 { inputs 2 name Merge4 xpos -696 ypos 69 disable {{"horizon == 0 ? 1:0" i}} } Clamp { name Clamp1 xpos -590 ypos 62 } set Nec1c19e0 [stack 0] Dot { name Dot3 xpos -556 ypos 114 } push $Nec3247a0 push $Nec27c3a0 Merge2 { inputs 2 operation max also_merge all name Max xpos -480 ypos -131 disable {{"horizon == 0 ? 1:0" i}} } Input { inputs 0 name Input1 xpos -370 ypos -611 } set Nec251570 [stack 0] Dot { name Dot2 xpos -226 ypos -606 } set Nec22c640 [stack 0] Dot { name Dot1 xpos -6 ypos -606 } Invert { name Invert1 xpos -40 ypos -330 } Blur { size 3 name Blur1 label "\[value size]" xpos -40 ypos -265 } ShuffleCopy { inputs 2 name ShuffleCopy1 xpos -40 ypos -131 } Premult { name Premult1 xpos -40 ypos 61 } push $Nec22c640 Merge2 { inputs 2 name Merge3 xpos -260 ypos 61 disable {{"invertOver == 0 ? 1:0" i}} } Merge2 { inputs 2 name Merge2 xpos -260 ypos 110 disable {{"invertOver == 1 ? 1:0" i}} } Dot { name Dot4 xpos -226 ypos 186 } push $Nec1c19e0 push $Nec251570 Merge2 { inputs 2 operation plus name Merge1 xpos -370 ypos 68 } Dissolve { inputs 2 which {{overlay i}} name Dissolve1 xpos -370 ypos 176 } Output { name Output1 xpos -370 ypos 251 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_PlanarProjection.gizmo ================================================ Group { name PlanarProjection help "Planar Projection\nGenerates 2D coordinates for points in 3D space. Type in 3D point coordinates, or use vertex selection in 3D viewer and click set to pick average of selected points, or set points to set all four points at once. \n\nYou can connect node output to scene together with your pointcloud or geometry and see where your points are located in 3d space. Double click any of them to move it in 3d space like any traditional nuke transform control. \n\nA matrix transform is also generated to be used with RotoPaint, SplineWarp and GridWarp nodes. If you are using matrix in GridWarp, points have to be in clockwise order, pick them one by one! \n\nCommand set points doesn't respect selection order! \n\nCheck out the demo video on my website! Kudos to Ivan Busquets for help with matrix math. \n\n-- developed by Vit Sedlacek 2012 www.vitsedlacek.com \n\n-- Modified by Jed Smith to make calculation time nearly instantaneous, fix some bugs and create a BG input so that the sampled format could be easily specified instead of using nuke.root() format. Also enabled animated 3d input points, and added some functionality in the set knobs to snarf data from axis nodes.\nhttp://gist.github.com/jedypod" addUserKnob {20 PlanarProjection} addUserKnob {26 ""} addUserKnob {26 usage_label_header l " " T "\nInput 3D Positions"} addUserKnob {20 usage_label_grp l " help" n 1} usage_label_grp 0 addUserKnob {26 usage_label l " " T "\nSelect any number of points in the 3D view, in vertex selection mode.
\nSet from Selection: 4 points will be set based on the selection bounds.
\nSet from Axes: Gets position from 4 axis nodes with or without animation.
\nSet Animated: Set the target point. For animated geometry.
\nSet Point: Set point from vertex selection. If no vertex selection,
\n set from selected Axis. If no axis, set from selected pixel value (for PWorld).
\n     "} addUserKnob {20 endGroup n -1} addUserKnob {22 set_from_selection l "Set from Selection" t "Set value of all points If Axis nodes are selected, it grabs translate values from them. If not, the first 4 selected vertexes in the 3D viewport is used instead. " T "## Set points to selected\nfrom __future__ import with_statement\nfrom nukescripts import snap3d as sn\n\n\nnode = nuke.thisNode()\nnode.begin()\nmatch_sel = nuke.toNode('_MATCH_SELECTION_')\n\nsn.translateRotateScaleToPoints(match_sel)\n\naxes = \[nuke.toNode('LL'), nuke.toNode('LR'), nuke.toNode('UR'), nuke.toNode('UL')]\nfor i, axis in enumerate(axes):\n matrix = axis\['world_matrix']\n translate = \[matrix.getValue(3), matrix.getValue(7), matrix.getValue(11)]\n node\['ip\{0\}'.format(i+1)].setValue(translate)" +STARTLINE} addUserKnob {22 set_from_axes l "Set from Axes" t "Select up to 4 different axes, which can be animated. This button will set the points to each axis in selection order." -STARTLINE T "node = nuke.thisNode()\nnuke.root().begin()\n\naxis_nodes = \[axis for axis in nuke.selectedNodes() if axis.Class() == \"Axis2\"]\nif axis_nodes:\n if len(axis_nodes) > 4:\n nuke.message(\"More than 4 axis nodes selected: Will only use the first 4 selected ones.\")\n axis_nodes = list(reversed(axis_nodes)) # Reverse selected so it goes in selection order\n for i in range(4):\n point = node\[\"ip\{0\}\".format(i+1)]\n axis = axis_nodes\[i]\n if axis\['translate'].isAnimated():\n point.clearAnimated()\n point.copyAnimations(axis\['translate'].animations())\n else:\n point.clearAnimated()\n point.setValue(axis\['translate'].getValue())"} addUserKnob {22 clear_input l Clear t "Remove all animated and non-default knob values." -STARTLINE T "n = nuke.thisNode()\n\nfor i in range(4):\n kip = n\['ip'+str(i+1)]\n kip.clearAnimated()\n kip.setValue(kip.defaultValue())"} addUserKnob {22 set_single_animated l "Set Animated" t "Sets single point to selected vertex position. Set the target knob to put the data on." T "import nuke\nfrom nukescripts import snap3d as sn\n\ndef _get_framerange():\n first_frame = int(nuke.numvalue('root.first_frame'))\n last_frame = int(nuke.numvalue('root.last_frame'))\n step = 1\n default_frange = str(nuke.FrameRange(first_frame, last_frame, step))\n frange = nuke.getInput('Enter Frame Range:', default_frange)\n if not frange:\n return None\n else:\n try:\n return nuke.FrameRange(frange)\n except:\n nuke.message('Invalid frame range')\n return None\n\ndef get_vertex_position(frame):\n # return last selected vertex position on specified frame\n vertices = sn.getSelection()\n if not vertices:\n nuke.message(\"A vertex must be selected.\")\n return\n center = sn.calcAveragePosition(vertices)\n vertices.translate(-center)\n return center\n\ndef calc_vertex_positions():\n framerange = _get_framerange()\n if not framerange:\n return\n curvetool = nuke.nodes.CurveTool()\n positions_animcurve = \[\[], \[], \[]]\n for frame in framerange:\n nuke.execute(curvetool, frame, frame)\n curpos = get_vertex_position(frame)\n if curpos:\n for i in range(3):\n positions_animcurve\[i].append(nuke.AnimationKey(frame, curpos\[i]))\n if curvetool:\n nuke.delete(curvetool)\n return positions_animcurve\n\nnode = nuke.thisNode()\nnuke.root().begin()\niptarget = node\['iptarget'].getValue()\nipknob = node\['ip\{0\}'.format(int(iptarget)+1)]\nipknob.clearAnimated()\nipknob.setAnimated()\n\npositions = calc_vertex_positions()\nfor index, curve in enumerate(ipknob.animations()):\n curve.addKey(positions\[index])" +STARTLINE} addUserKnob {22 set_point l "Set Point" -STARTLINE T "import nuke\nfrom nukescripts import snap3d as sn\n\ndef get_vertex_position():\n points = sn.getSelection()\n if not points:\n return None\n pos = sn.calcAveragePosition(points)\n return pos\n\nif __name__==\"__main__\":\n node = nuke.thisNode()\n nuke.root().begin()\n axis_nodes = \[axis for axis in nuke.selectedNodes() if axis.Class() == \"Axis2\"]\n iptarget = node\['iptarget'].getValue()\n ipknob = node\['ip\{0\}'.format(int(iptarget)+1)]\n pos = get_vertex_position()\n if pos:\n ipknob.setValue(pos)\n elif axis_nodes:\n axis = axis_nodes\[-1]\n if axis\['translate'].isAnimated():\n ipknob.clearAnimated()\n ipknob.copyAnimations(axis\['translate'].animations())\n else:\n ipknob.clearAnimated()\n ipknob.setValue(axis\['translate'].getValue())\n else:\n viewer = nuke.activeViewer().node()\n if viewer.input(0):\n viewed_node = viewer.input(0)\n if not nuke.selectedNodes():\n viewed_node.setSelected(1)\n else:\n viewed_node = nuke.activeViewer().node()\n bboxinfo = nuke.activeViewer().node()\['colour_sample_bbox'].value()\n aspect = float(viewed_node.width() * viewed_node.pixelAspect()) / float(viewed_node.height())\n cornerA = \[(bboxinfo\[0]*0.5+0.5) * viewed_node.width(), (((bboxinfo\[1] * 0.5) + (0.5/aspect)) * aspect) * viewed_node.height()]\n cornerB = \[(bboxinfo\[2]*0.5+0.5) * viewed_node.width(), (((bboxinfo\[3] * 0.5) + (0.5/aspect)) * aspect) * viewed_node.height()]\n area = \[cornerB\[0] - cornerA\[0], cornerB\[1] - cornerA\[1]]\n center = \[cornerA\[0] + (area\[0]/2), cornerA\[1] + (area\[1] / 2)]\n color_sample = \[viewed_node.sample('rgba.red', center\[0], center\[1], area\[0], area\[1]), viewed_node.sample('rgba.green', center\[0], center\[1], area\[0], area\[1]), viewed_node.sample('rgba.blue', center\[0], center\[1], area\[0], area\[1])]\n ipknob.setValue(color_sample)"} addUserKnob {4 iptarget l "     target" -STARTLINE M {"point 1" "point 2" "point 3" "point 4" "" ""}} iptarget "point 2" addUserKnob {41 ip1 l "point 1" T point_1.translate} addUserKnob {22 set_ip1 l "Set 1" t "Set point 1 to current selection." -STARTLINE T "node = nuke.thisNode()\nnode\['iptarget'].setValue(0)\nnode\['set_point'].execute()"} addUserKnob {41 ip2 l "point 2" T point_2.translate} addUserKnob {22 set_ip2 l "Set 2" t "Set point 2 to current selection." -STARTLINE T "node = nuke.thisNode()\nnode\['iptarget'].setValue(1)\nnode\['set_point'].execute()"} addUserKnob {41 ip3 l "point 3" T point_3.translate} addUserKnob {22 set_ip3 l "Set 3" t "Set point 3 to current selection." -STARTLINE T "node = nuke.thisNode()\nnode\['iptarget'].setValue(2)\nnode\['set_point'].execute()"} addUserKnob {41 ip4 l "point 4" T point_4.translate} addUserKnob {22 set_ip4 l "Set 4" t "Set point 4 to current selection." -STARTLINE T "node = nuke.thisNode()\nnode\['iptarget'].setValue(3)\nnode\['set_point'].execute()"} addUserKnob {26 ""} addUserKnob {26 reconcile_explanation l " " T "Reconcile Points into Screen Space"} addUserKnob {20 reconcile_points_grp l " help" n 1} reconcile_points_grp 0 addUserKnob {26 reconcile_points_help l " " T "Press Calculate and the 3D points will be reconciled into 2d tracking data.
\nA perspective transform matrix is also calculated.
This enables tracking in \ntranslation, rotation, scale and perspective.\n     "} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {22 Calculate t "Calculate the reconciled 2D points for each 3D point.\n\nAlso calculate a matrix transform for the planar surface, if there are 4 total points. This can then be used for Rotos and CornerPins." T "import nuke\nfrom nukescripts import snap3d as sn\nimport math\n\n\ndef cameraProjectionMatrix(cameraNode, frame, imageformat):\n ## modified code from nukescripts/Snap3D\n\n # Matrix to transform points into camera-relative coords.\n wm = nuke.math.Matrix4()\n for i in range(16):\n wm\[i] = cameraNode\['matrix'].getValueAt(frame,i)\n wm.transpose()\n camTransform = wm.inverse()\n\n # Matrix to take the camera projection knobs into account\n roll = float(cameraNode\['winroll'].getValueAt(frame,0))\n scale_x = float(cameraNode\['win_scale'].getValueAt(frame,0))\n scale_y = float(cameraNode\['win_scale'].getValueAt(frame,1))\n translate_x = float(cameraNode\['win_translate'].getValueAt(frame,0))\n translate_y = float(cameraNode\['win_translate'].getValueAt(frame,1))\n m = nuke.math.Matrix4()\n m.makeIdentity()\n m.rotateZ(math.radians(roll))\n m.scale(1.0 / scale_x, 1.0 / scale_y, 1.0)\n m.translate(-translate_x, -translate_y, 0.0)\n\n # Projection matrix based on the focal length, aperture and clipping planes of the camera\n focal_length = float(cameraNode\['focal'].getValueAt(frame))\n h_aperture = float(cameraNode\['haperture'].getValueAt(frame))\n near = float(cameraNode\['near'].getValueAt(frame))\n far = float(cameraNode\['far'].getValueAt(frame))\n projection_mode = int(cameraNode\['projection_mode'].getValueAt(frame))\n p = nuke.math.Matrix4()\n p.projection(focal_length / h_aperture, near, far, projection_mode == 0)\n\n # Matrix to translate the projected points into normalised pixel coords\n imageAspect = float(imageformat.height()) / float(imageformat.width())\n\n t = nuke.math.Matrix4()\n t.makeIdentity()\n t.translate( 1.0, 1.0 - (1.0 - imageAspect / float(imageformat.pixelAspect())), 0.0 )\n\n # Matrix to scale normalised pixel coords into actual pixel coords.\n x_scale = float(imageformat.width()) / 2.0\n y_scale = x_scale * imageformat.pixelAspect()\n s = nuke.math.Matrix4()\n s.makeIdentity()\n s.scale(x_scale, y_scale, 1.0)\n\n # The projection matrix transforms points into camera coords, modifies based\n # on the camera knob values, projects points into clip coords, translates the\n # clip coords so that they lie in the range 0,0 - 2,2 instead of -1,-1 - 1,1,\n # then scales the clip coords to proper pixel coords.\n return s * t * p * m * camTransform\n\n\n\ndef pointsToMatrix(frame, node, reference_frame=None):\n cpToMtx = nuke.math.Matrix4()\n cpFromMtx = nuke.math.Matrix4()\n\n # Get a list of Vector2 objects for each of the 'to' knobs and each of the 'from' knobs.\n ToVectors = \[nuke.math.Vector2(node\[f].getValueAt(frame, 0), node\[f].getValueAt(frame, 1)) for f in sorted(node.knobs().keys()) if f.startswith('op')]\n\n # Feed all 4 coordinates into the mapUnitSquareToQuad() function\n cpToMtx.mapUnitSquareToQuad(ToVectors\[0].x, ToVectors\[0].y, ToVectors\[1].x, ToVectors\[1].y, ToVectors\[2].x, ToVectors\[2].y, ToVectors\[3].x, ToVectors\[3].y)\n\n # If we have a reference frame, use the to vectors on that frame as our from matrix, otherwise use the image width and height\n if reference_frame:\n FromVectors = \[nuke.math.Vector2(node\[f].getValueAt(reference_frame, 0), node\[f].getValueAt(reference_frame, 1)) for f in sorted(node.knobs().keys()) if f.startswith('op')]\n cpFromMtx.mapUnitSquareToQuad(FromVectors\[0].x, FromVectors\[0].y, FromVectors\[1].x, FromVectors\[1].y, FromVectors\[2].x, FromVectors\[2].y, FromVectors\[3].x, FromVectors\[3].y)\n else:\n cpFromMtx.mapUnitSquareToQuad(0, 0, node.width(), 0, node.width(), node.height(), 0, node.height())\n\n transform_matrix = cpToMtx * cpFromMtx.inverse()\n\n # This is not needed to apply the transformation. The matrix is already correct.\n # However, the matrix knob in rotopaint is indexed differently (row major), so I just transpose the matrix here to make it easier to copy its values to the knob\n transform_matrix.transpose()\n\n # Fill in the transform_matrix knob of the target node\n return transform_matrix\n\n\n\ndef projectPoints(frame, camera=None, point=None, imageformat=None):\n # Modify projectpoint function in nukescripts.snap3d to add frame argument\n if not imageformat:\n imageformat = nuke.root()\['format'].value()\n camMatrix = cameraProjectionMatrix(camera, frame, imageformat)\n if camMatrix == None:\n raise RuntimeError(\"snap3d.cameraProjectionMatrix() returned None for camera.\")\n\n if not ( isinstance(point, list) or isinstance(point, tuple) ):\n raise ValueError(\"Argument point must be a list or tuple.\")\n\n for point in point:\n # Would be nice to not do this for every item but since lists/tuples can\n # containg anything...\n if isinstance(point, nuke.math.Vector3):\n pt = point\n elif isinstance(point, list) or isinstance(point, tuple):\n pt = nuke.math.Vector3(point\[0], point\[1], point\[2])\n else:\n raise ValueError(\"All items in point must be nuke.math.Vector3 or list/tuple of 3 floats.\")\n\n tPos = camMatrix * nuke.math.Vector4(pt.x, pt.y, pt.z, 1.0)\n #print tPos\n try:\n yield nuke.math.Vector2(tPos.x / tPos.w, tPos.y / tPos.w)\n except ZeroDivisionError:\n print(\"Zero Division Error on frame \{0\} with point data \{1\}\".format(frame, point))\n yield nuke.math.Vector2()\n\n\ndef calculate(node):\n # Get the input Camera and verify it is right. (Assume camera is topnode of input to handle dots)\n cam_input = node.input(1)\n # Sanity check\n if not (cam_input and isinstance(cam_input, nuke.Node)):\n nuke.message(\"A Camera node must be connected.\")\n return\n if 'Camera' in cam_input.Class():\n cam = cam_input\n else:\n cam = nuke.toNode(nuke.tcl(\"full_name \[topnode %s]\" % cam_input.name()))\n bg = node.input(0)\n if not bg:\n nuke.message(\"BG not connected, so the root format will be used to reconcile the 3D points into screen space.\")\n\n # Get framerange to operate on from camera animation curves\n first = None\n last = None\n try:\n if cam\['translate'].isAnimated():\n for curve in cam\['translate'].animations():\n if first == None:\n first = int(curve.keys()\[0].x)\n else:\n first = min(first, int(curve.keys()\[0].x))\n for curve in cam\['translate'].animations():\n if last == None:\n last = int(curve.keys()\[-1].x)\n else:\n last = max(last, int(curve.keys()\[-1].x))\n elif cam\['rotate'].isAnimated():\n for curve in cam\['rotate'].animations():\n if first == None:\n first = int(curve.keys()\[0].x)\n else:\n first = min(first, int(curve.keys()\[0].x))\n for curve in cam\['rotate'].animations():\n if last == None:\n last = int(curve.keys()\[-1].x)\n else:\n last = max(last, int(curve.keys()\[-1].x))\n else:\n nuke.message(\"Input Camera is not animated.\")\n return\n except:\n nuke.message(\"Something went wrong getting the camera animation. Using Root framerange...\")\n first = nuke.root().firstFrame()\n last = nuke.root().lastFrame()\n\n\n framerange = nuke.FrameRange('\{0\}-\{1\}'.format(first, last))\n\n # Loop through the 3D points, reconcile the coordinates through the camera into screen space\n for opnum in range(4):\n # Only run if the ip knob is not default\n ipknob = node\[\"ip\{0\}\".format(opnum+1)]\n if not ipknob.notDefault():\n print(\"Skipping \{0\} because it is still default!\".format('ip'+str(opnum+1)))\n continue\n\n opknob = node\[\"op\{0\}\".format(opnum+1)]\n opknob.clearAnimated()\n opknob.setAnimated()\n\n # Building the data into a list of AnimationKey objects,\n # and then applying that list to the knob using addKey is significantly faster than other methods.\n # This makes the Calculate button instantaneous instead of taking forever.\n point_animcurve = \[\[], \[]]\n for frame in framerange:\n\n #print \"values are \", ipknob.getValueAt(frame)\n # Sample input point knob on every frame if it's animated or expression-linked\n if ipknob.isAnimated() or ipknob.hasExpression():\n point = projectPoints(frame, cam, \[ipknob.getValueAt(frame)], node.format()).next()\n else:\n point = projectPoints(frame, cam, \[ipknob.value()], node.format()).next()\n for index in range(2):\n point_animcurve\[index].append(nuke.AnimationKey(frame, point\[index]))\n\n for index, curve in enumerate(opknob.animations()):\n curve.addKey(point_animcurve\[index])\n\n # Calculate the transformation Matrix, if we have 4 output points\n for i in range(4):\n ipknob = node\[\"op\{0\}\".format(i+1)]\n #print 'op'+str(i+1)+' IS NOT DEFAULT'\n if not ipknob.notDefault():\n return\n mknob = node\['matrix']\n mknob.clearAnimated()\n mknob.setAnimated()\n\n use_reference_frame = True\n reference_frame = node\['identity_frame'].getValue()\n\n matrix_animcurve = \[\[] for i in range(16)]\n for frame in framerange:\n if use_reference_frame:\n matrix_data = pointsToMatrix(frame, node, reference_frame)\n else:\n matrix_data = pointsToMatrix(frame, node)\n for index in range(16):\n matrix_animcurve\[index].append(nuke.AnimationKey(frame, matrix_data\[index]))\n matrix_animcurve = \[\[] for i in range(16)]\n for frame in framerange:\n if use_reference_frame:\n matrix_data = pointsToMatrix(frame, node, reference_frame)\n else:\n matrix_data = pointsToMatrix(frame, node)\n for index in range(16):\n matrix_animcurve\[index].append(nuke.AnimationKey(frame, matrix_data\[index]))\n\n for index, item in enumerate(mknob.animations()):\n item.addKey(matrix_animcurve\[index])\n for index, item in enumerate(mknob.animations()):\n item.addKey(matrix_animcurve\[index])\n\nif __name__==\"__main__\":\n calculate(nuke.thisNode())" +STARTLINE} addUserKnob {22 clear_out l Clear t "Clear output knobs." -STARTLINE T "n = nuke.thisNode()\n\nfor i in range(4):\n kop = n\['op'+str(i+1)]\n kop.clearAnimated()\n kop.setValue(kop.defaultValue())\n n\['matrix'].clearAnimated()\n n\['matrix'].setValue(\[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])"} addUserKnob {12 op1 l "point 1"} addUserKnob {12 op2 l "point 2"} addUserKnob {12 op3 l "point 3"} addUserKnob {12 op4 l "point 4"} addUserKnob {41 matrix t "Calculated matrix." T Matrix_original.matrix} addUserKnob {26 identity_frame_label l " " T "\nIdentity Frame"} addUserKnob {3 identity_frame l " " t "If a frame is specified here, the matrix calculated will be relative to this frame. On the reference frame the matrix will be a null transformation."} identity_frame 1001 addUserKnob {22 set_current l Current -STARTLINE T nuke.thisNode().knob('identity_frame').setValue(nuke.frame())} addUserKnob {26 ""} addUserKnob {26 link_tracking_label l " " T "Link Tracking Data to Nodes"} addUserKnob {20 link_tracking_help_grp l " help" n 1} link_tracking_help_grp 0 addUserKnob {26 link_tracking_help l " " T "\nExpression link will keep a live expression to the data on this node, in case it is updated.\n
Independent identity frame will add extra knobs to the created node to allow you to \n
specify an independent identity frame on the node. It's heavier!\n
    "} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {22 create_tracker3 l Tracker3 t "Create a Tracker3 class Tracker node, in case this is what you prefer to link roto shapes to." T "# Create tracker3 node\nfrom __future__ import with_statement\ngrid_x = int(nuke.toNode('preferences').knob('GridWidth').value())\ngrid_y = int(nuke.toNode('preferences').knob('GridHeight').value())\npproj = nuke.thisNode()\nwith nuke.root():\n track_node = nuke.nodes.Tracker3()\n track_node.setXYpos(pproj.xpos()-grid_x*0, pproj.ypos()+grid_y*2)\n _ = \[n.setSelected(False) for n in nuke.allNodes()]\n track_node.setSelected(True)\n enable_knobs = \['enable1', 'enable2', 'enable3', 'enable4']\n trs_knobs = \['use_for1', 'use_for2', 'use_for3', 'use_for4']\n track_knobs = \['track1', 'track2', 'track3', 'track4']\n\n for i, k in enumerate(enable_knobs):\n if pproj\['op\{0\}'.format(i+1)].isAnimated():\n track_node\[k].setValue(True)\n for i, k in enumerate(trs_knobs):\n if pproj\['op\{0\}'.format(i+1)].isAnimated():\n track_node\[k].setValue(7)\n for i, track in enumerate(track_knobs):\n if pproj\['op\{0\}'.format(i+1)].isAnimated():\n tknob = track_node\[track]\n tknob.clearAnimated()\n tknob.setAnimated()\n for x, c in enumerate(tknob.animations()):\n opknob = pproj\['op\{0\}'.format(track.split('track')\[-1])]\n if opknob.isAnimated():\n c.addKey(opknob.animation(x).keys())\n else:\n tknob.clearAnimated()\n # This hackiness is necessary so knob values work correctly\n track_node.setTab(2)\n track_node.showControlPanel()\n track_node\[trs_knobs\[0]].setValue(1)\n track_node\[trs_knobs\[0]].setValue(7)\n track_node.hideControlPanel()" +STARTLINE} addUserKnob {22 create_tracker4 l Tracker4 t "Create Tracker4 class tracker node." -STARTLINE T "from __future__ import with_statement\n\n# http://community.foundry.com/discuss/topic/99665\n# https://www.mail-archive.com/nuke-python@support.thefoundry.co.uk/msg04697.html\n\ngrid_x = int(nuke.toNode('preferences').knob('GridWidth').value())\ngrid_y = int(nuke.toNode('preferences').knob('GridHeight').value())\nnode = nuke.thisNode()\nexpression_link = node\['expression_link'].getValue()\n# pros not worth the cons ... disabling expression linking Tracker4 nodes for now\nexpression_link = False\n\nif expression_link:\n nuke.message(\"Warning: If expression linking a Tracker4 node, it must be placed in the \\nimage stream in order to evaluate correctly.\")\n\nwith nuke.root():\n _ = \[n.setSelected(False) for n in nuke.allNodes()]\n track_node = nuke.createNode('Tracker4')\n track_node.setXYpos(node.xpos()-grid_x*0, node.ypos()+grid_y*2)\n _ = \[n.setSelected(False) for n in nuke.allNodes()]\n track_node.setSelected(True)\n\n # First line 3rd number is length of tracks: explicitly setting it to 4 here.\n tracks_fromscript = \"\{ 1 31 4 \} \\n\{ \{ 5 1 20 enable e 1 \} \\n\{ 3 1 75 name name 1 \} \\n\{ 2 1 58 track_x track_x 1 \} \\n\{ 2 1 58 track_y track_y 1 \} \\n\{ 2 1 63 offset_x offset_x 1 \} \\n\{ 2 1 63 offset_y offset_y 1 \} \\n\{ 4 1 27 T T 1 \} \\n\{ 4 1 27 R R 1 \} \\n\{ 4 1 27 S S 1 \} \\n\{ 2 0 45 error error 1 \} \\n\{ 1 1 0 error_min error_min 1 \} \\n\{ 1 1 0 error_max error_max 1 \} \\n\{ 1 1 0 pattern_x pattern_x 1 \} \\n\{ 1 1 0 pattern_y pattern_y 1 \} \\n\{ 1 1 0 pattern_r pattern_r 1 \} \\n\{ 1 1 0 pattern_t pattern_t 1 \} \\n\{ 1 1 0 search_x search_x 1 \} \\n\{ 1 1 0 search_y search_y 1 \} \\n\{ 1 1 0 search_r search_r 1 \} \\n\{ 1 1 0 search_t search_t 1 \} \\n\{ 2 1 0 key_track key_track 1 \} \\n\{ 2 1 0 key_search_x key_search_x 1 \} \\n\{ 2 1 0 key_search_y key_search_y 1 \} \\n\{ 2 1 0 key_search_r key_search_r 1 \} \\n\{ 2 1 0 key_search_t key_search_t 1 \} \\n\{ 2 1 0 key_track_x key_track_x 1 \} \\n\{ 2 1 0 key_track_y key_track_y 1 \} \\n\{ 2 1 0 key_track_r key_track_r 1 \} \\n\{ 2 1 0 key_track_t key_track_t 1 \} \\n\{ 2 1 0 key_centre_offset_x key_centre_offset_x 1 \} \\n\{ 2 1 0 key_centre_offset_y key_centre_offset_y 1 \} \\n\} \"\n default_track_end_script = \" \{0\} \{0\} 1 1 1 \{0\} 1 0 -32 -32 32 32 -22 -22 22 22 \{0\} \{0\} \{0\} \{0\} \{0\} \{0\} \{0\} \{0\} \{0\} \{0\} \{0\} \}\\n\"\n\n # Loop through each 2d track knob and add it's animation to the Tracker4 node.\n track_knobs = \['op1', 'op2', 'op3', 'op4']\n all_trackdata = \[]\n for i, knobname in enumerate(track_knobs):\n opknob = node\[knobname]\n if opknob.isAnimated():\n trackdata = \[]\n # Gather animation data from opknobs\n for i, curve in enumerate(opknob.animations()):\n if expression_link:\n if i == 0:\n dimension = 'x'\n elif i == 1:\n dimension = 'y'\n trackdata_string = \" \{\{\{0\}\}\}\".format(\"parent.\{0\}.\{1\}.\{2\}\".format(node.fullName(), knobname, dimension))\n trackdata.append(trackdata_string)\n # livelink_transform must be true in order for expression links to work correctly on a tracker node\n track_node\['livelink_transform'].setValue(True)\n else:\n trackdata_string = \" \{ curve\"\n for key in curve.keys():\n trackdata_string += \" x\{0\} \{1\}\".format(int(key.x), key.y)\n trackdata_string += \"\}\"\n trackdata.append(trackdata_string)\n all_trackdata.append(trackdata)\n\n else:\n i -= 1\n continue\n # Append data to fromscript\n tracks_fromscript += \"\\n\{\\n\"\n for i, curve in enumerate(all_trackdata):\n tracks_fromscript += \" \{ \{1\} \"\n tracks_fromscript += \"\\\"track_\{0\}\\\"\".format(i)\n for dim in curve:\n tracks_fromscript += \"\{0\}\".format(dim)\n tracks_fromscript += default_track_end_script\n tracks_fromscript += \"\\n\}\"\n tracks_knob = track_node\['tracks']\n tracks_knob.fromScript(tracks_fromscript)\n # Force update of Translate / Rotate / Scale\n track_node.showControlPanel()\n track_node.setTab(0)\n tracks_knob.setValue(0, 6)\n tracks_knob.setValue(1, 6)\n track_node.hideControlPanel()\n track_node\['keyframe_display'].setValue(3)"} addUserKnob {6 expression_link l "expression link" t "If enabled, expression links will be created instead of copying the animation curves" +STARTLINE} expression_link true addUserKnob {6 independent_identity_frame l "independent identity frame" t "Add an independent identity frame to the output node. (More expressions! Use with caution.)" -STARTLINE} addUserKnob {22 create_rotopaint l "Roto / Add Layer" t "Create a roto node with a layer that has the matrix transform in it to use for tracking. \n\nWorks with any number of Existing Roto / RotoPaint / SplineWarp nodes as well if they are selected." T "## Create Rotopaint\nimport nuke\nimport nuke.rotopaint as rp\nimport _curvelib as cl\n\ngrid_x = int(nuke.toNode('preferences').knob('GridWidth').value())\ngrid_y = int(nuke.toNode('preferences').knob('GridHeight').value())\nnode = nuke.thisNode()\nmatrix = node\['matrix']\nnuke.root().begin()\nidentity_frame = int(node\['identity_frame'].getValue())\nexpression_link = node\['expression_link'].getValue()\nindependent_identity_frame = node\['independent_identity_frame'].getValue()\n\nfirst = None\nfor every in matrix.animations():\n if first == None:\n first = int(every.keys()\[0].x)\n else:\n first = min(first, int(every.keys()\[0].x))\n\nlast = None\nfor every in matrix.animations():\n if last == None:\n last = int(every.keys()\[0].x)\n else:\n last = max(last, int(every.keys()\[-1].x))\n\n\nif first != None and last != None:\n if matrix.isAnimated():\n # Get all selected roto nodes\n selected_roto_nodes = \[n for n in nuke.selectedNodes() if n.Class() in \[\"Roto\", \"RotoPaint\", \"SplineWarp3\"]]\n if not selected_roto_nodes:\n _ = \[n.setSelected(False) for n in nuke.allNodes()]\n roto_node = nuke.createNode(\"Roto\", inpanel=False)\n roto_node.setXYpos(node.xpos()-grid_x*0, node.ypos()+grid_y*2)\n roto_node.setSelected(True)\n selected_roto_nodes = \[roto_node]\n\n for roto_node in selected_roto_nodes:\n\n curve_knob = roto_node\['curves']\n roto_layer = rp.Layer(curve_knob)\n roto_layer.name = node.name()\n\n curve = \[cl.AnimCurve() for i in range(16)]\n\n # Add independent identity frame calculation onto the target node.\n if expression_link and independent_identity_frame:\n # Add identity frame knob\n roto_node.addKnob(nuke.Tab_Knob('Identity Frame'))\n roto_node.addKnob(nuke.Int_Knob('identity_frame', 'identity frame'))\n roto_node\['identity_frame'].setValue(int(node\['identity_frame'].getValue()))\n roto_node.addKnob(nuke.PyScript_Knob('identity_to_curframe', 'Current'))\n roto_node.knob('identity_to_curframe').setTooltip(\"Set identity frame to current frame.\")\n roto_node.knob('identity_to_curframe').setCommand(\"nuke.thisNode().knob('identity_frame').setValue(nuke.frame())\")\n roto_node.setTab(1)\n\n roto_node.addKnob(nuke.Double_Knob('determinant', 'determinant'))\n determinant = \"parent.\{0\}.matrix.3(identity_frame) * parent.\{0\}.matrix.6(identity_frame) * parent.\{0\}.matrix.9(identity_frame) * parent.\{0\}.matrix.12(identity_frame)- parent.\{0\}.matrix.2(identity_frame) * parent.\{0\}.matrix.7(identity_frame) * parent.\{0\}.matrix.9(identity_frame) * parent.\{0\}.matrix.12(identity_frame)- parent.\{0\}.matrix.3(identity_frame) * parent.\{0\}.matrix.5(identity_frame) * parent.\{0\}.matrix.10(identity_frame) * parent.\{0\}.matrix.12(identity_frame)+ parent.\{0\}.matrix.1(identity_frame) * parent.\{0\}.matrix.7(identity_frame) * parent.\{0\}.matrix.10(identity_frame) * parent.\{0\}.matrix.12(identity_frame)+ parent.\{0\}.matrix.2(identity_frame) * parent.\{0\}.matrix.5(identity_frame) * parent.\{0\}.matrix.11(identity_frame) * parent.\{0\}.matrix.12(identity_frame)- parent.\{0\}.matrix.1(identity_frame) * parent.\{0\}.matrix.6(identity_frame) * parent.\{0\}.matrix.11(identity_frame) * parent.\{0\}.matrix.12(identity_frame)- parent.\{0\}.matrix.3(identity_frame) * parent.\{0\}.matrix.6(identity_frame) * parent.\{0\}.matrix.8(identity_frame) * parent.\{0\}.matrix.13(identity_frame)+ parent.\{0\}.matrix.2(identity_frame) * parent.\{0\}.matrix.7(identity_frame) * parent.\{0\}.matrix.8(identity_frame) * parent.\{0\}.matrix.13(identity_frame)+ parent.\{0\}.matrix.3(identity_frame) * parent.\{0\}.matrix.4(identity_frame) * parent.\{0\}.matrix.10(identity_frame) * parent.\{0\}.matrix.13(identity_frame)- parent.\{0\}.matrix.0(identity_frame) * parent.\{0\}.matrix.7(identity_frame) * parent.\{0\}.matrix.10(identity_frame) * parent.\{0\}.matrix.13(identity_frame)- parent.\{0\}.matrix.2(identity_frame) * parent.\{0\}.matrix.4(identity_frame) * parent.\{0\}.matrix.11(identity_frame) * parent.\{0\}.matrix.13(identity_frame)+ parent.\{0\}.matrix.0(identity_frame) * parent.\{0\}.matrix.6(identity_frame) * parent.\{0\}.matrix.11(identity_frame) * parent.\{0\}.matrix.13(identity_frame)+ parent.\{0\}.matrix.3(identity_frame) * parent.\{0\}.matrix.5(identity_frame) * parent.\{0\}.matrix.8(identity_frame) * parent.\{0\}.matrix.14(identity_frame)- parent.\{0\}.matrix.1(identity_frame) * parent.\{0\}.matrix.7(identity_frame) * parent.\{0\}.matrix.8(identity_frame) * parent.\{0\}.matrix.14(identity_frame)- parent.\{0\}.matrix.3(identity_frame) * parent.\{0\}.matrix.4(identity_frame) * parent.\{0\}.matrix.9(identity_frame) * parent.\{0\}.matrix.14(identity_frame)+ parent.\{0\}.matrix.0(identity_frame) * parent.\{0\}.matrix.7(identity_frame) * parent.\{0\}.matrix.9(identity_frame) * parent.\{0\}.matrix.14(identity_frame)+ parent.\{0\}.matrix.1(identity_frame) * parent.\{0\}.matrix.4(identity_frame) * parent.\{0\}.matrix.11(identity_frame) * parent.\{0\}.matrix.14(identity_frame)- parent.\{0\}.matrix.0(identity_frame) * parent.\{0\}.matrix.5(identity_frame) * parent.\{0\}.matrix.11(identity_frame) * parent.\{0\}.matrix.14(identity_frame)- parent.\{0\}.matrix.2(identity_frame) * parent.\{0\}.matrix.5(identity_frame) * parent.\{0\}.matrix.8(identity_frame) * parent.\{0\}.matrix.15(identity_frame)+ parent.\{0\}.matrix.1(identity_frame) * parent.\{0\}.matrix.6(identity_frame) * parent.\{0\}.matrix.8(identity_frame) * parent.\{0\}.matrix.15(identity_frame)+ parent.\{0\}.matrix.2(identity_frame) * parent.\{0\}.matrix.4(identity_frame) * parent.\{0\}.matrix.9(identity_frame) * parent.\{0\}.matrix.15(identity_frame)- parent.\{0\}.matrix.0(identity_frame) * parent.\{0\}.matrix.6(identity_frame) * parent.\{0\}.matrix.9(identity_frame) * parent.\{0\}.matrix.15(identity_frame)- parent.\{0\}.matrix.1(identity_frame) * parent.\{0\}.matrix.4(identity_frame) * parent.\{0\}.matrix.10(identity_frame) * parent.\{0\}.matrix.15(identity_frame)+ parent.\{0\}.matrix.0(identity_frame) * parent.\{0\}.matrix.5(identity_frame) * parent.\{0\}.matrix.10(identity_frame) * parent.\{0\}.matrix.15(identity_frame)\".format(node.fullName())\n roto_node\['determinant'].setExpression(determinant)\n for i in range(4):\n roto_node.addKnob(nuke.BBox_Knob(\"invmatrix\{0\}\".format(i)))\n # view-source:https://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n roto_node\['invmatrix0'].setExpression(\"(parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.13(identity_frame) + parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.14(identity_frame) - parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.14(identity_frame) - parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.15(identity_frame) + parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.15(identity_frame))/determinant\".format(node.fullName()), 0)\n roto_node\['invmatrix0'].setExpression(\"(parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.14(identity_frame) + parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.14(identity_frame) + parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.15(identity_frame) - parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.15(identity_frame))/determinant\".format(node.fullName()), 1)\n roto_node\['invmatrix0'].setExpression(\"(parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.13(identity_frame) + parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.14(identity_frame) - parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.14(identity_frame) - parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.15(identity_frame) + parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.15(identity_frame))/determinant\".format(node.fullName()), 2)\n roto_node\['invmatrix0'].setExpression(\"(parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.9(identity_frame) - parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.9(identity_frame) - parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.10(identity_frame) + parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.10(identity_frame) + parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.11(identity_frame) - parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.11(identity_frame))/determinant\".format(node.fullName()), 3)\n roto_node\['invmatrix1'].setExpression(\"(parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.14(identity_frame) + parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.14(identity_frame) + parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.15(identity_frame) - parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.15(identity_frame))/determinant\".format(node.fullName()), 0)\n roto_node\['invmatrix1'].setExpression(\"(parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.12(identity_frame) + parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.14(identity_frame) - parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.14(identity_frame) - parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.15(identity_frame) + parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.15(identity_frame))/determinant\".format(node.fullName()), 1)\n roto_node\['invmatrix1'].setExpression(\"(parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.14(identity_frame) + parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.14(identity_frame) + parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.15(identity_frame) - parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.15(identity_frame))/determinant\".format(node.fullName()), 2)\n roto_node\['invmatrix1'].setExpression(\"(parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.8(identity_frame) - parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.8(identity_frame) + parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.10(identity_frame) - parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.10(identity_frame) - parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.11(identity_frame) + parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.11(identity_frame))/determinant\".format(node.fullName()), 3)\n roto_node\['invmatrix2'].setExpression(\"(parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.12(identity_frame) + parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.15(identity_frame) + parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.15(identity_frame))/determinant\".format(node.fullName()), 0)\n roto_node\['invmatrix2'].setExpression(\"(parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.13(identity_frame) + parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.13(identity_frame) + parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.15(identity_frame) - parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.15(identity_frame))/determinant\".format(node.fullName()), 1)\n roto_node\['invmatrix2'].setExpression(\"(parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.12(identity_frame) + parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.15(identity_frame) + parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.15(identity_frame))/determinant\".format(node.fullName()), 2)\n roto_node\['invmatrix2'].setExpression(\"(parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.8(identity_frame) - parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.8(identity_frame) - parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.9(identity_frame) + parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.9(identity_frame) + parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.11(identity_frame) - parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.11(identity_frame))/determinant\".format(node.fullName()), 3)\n roto_node\['invmatrix3'].setExpression(\"(parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.13(identity_frame) + parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.13(identity_frame) + parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.14(identity_frame) - parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.14(identity_frame))/determinant\".format(node.fullName()), 0)\n roto_node\['invmatrix3'].setExpression(\"(parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.12(identity_frame) + parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.14(identity_frame) + parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.14(identity_frame))/determinant\".format(node.fullName()), 1)\n roto_node\['invmatrix3'].setExpression(\"(parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.13(identity_frame) + parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.13(identity_frame) + parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.14(identity_frame) - parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.14(identity_frame))/determinant\".format(node.fullName()), 2)\n roto_node\['invmatrix3'].setExpression(\"(parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.8(identity_frame) - parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.8(identity_frame) + parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.9(identity_frame) - parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.9(identity_frame) - parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.10(identity_frame) + parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.10(identity_frame))/determinant\".format(node.fullName()), 3)\n\n # view-source:https://www.euclideanspace.com/maths/algebra/matrix/arithmetic/fourD/index.htm\n curve\[0].expressionString = \"parent.\{0\}.matrix.0*invmatrix0.0 + parent.\{0\}.matrix.1*invmatrix1.0 + parent.\{0\}.matrix.2*invmatrix2.0 + parent.\{0\}.matrix.3*invmatrix3.0\".format(node.fullName())\n curve\[1].expressionString = \"parent.\{0\}.matrix.0*invmatrix0.1 + parent.\{0\}.matrix.1*invmatrix1.1 + parent.\{0\}.matrix.2*invmatrix2.1 + parent.\{0\}.matrix.3*invmatrix3.1\".format(node.fullName())\n curve\[2].expressionString = \"parent.\{0\}.matrix.0*invmatrix0.2 + parent.\{0\}.matrix.1*invmatrix1.2 + parent.\{0\}.matrix.2*invmatrix2.2 + parent.\{0\}.matrix.3*invmatrix3.2\".format(node.fullName())\n curve\[3].expressionString = \"parent.\{0\}.matrix.0*invmatrix0.3 + parent.\{0\}.matrix.1*invmatrix1.3 + parent.\{0\}.matrix.2*invmatrix2.3 + parent.\{0\}.matrix.3*invmatrix3.3\".format(node.fullName())\n\n curve\[4].expressionString = \"parent.\{0\}.matrix.4*invmatrix0.0 + parent.\{0\}.matrix.5*invmatrix1.0 + parent.\{0\}.matrix.6*invmatrix2.0 + parent.\{0\}.matrix.7*invmatrix3.0\".format(node.fullName())\n curve\[5].expressionString = \"parent.\{0\}.matrix.4*invmatrix0.1 + parent.\{0\}.matrix.5*invmatrix1.1 + parent.\{0\}.matrix.6*invmatrix2.1 + parent.\{0\}.matrix.7*invmatrix3.1\".format(node.fullName())\n curve\[6].expressionString = \"parent.\{0\}.matrix.4*invmatrix0.2 + parent.\{0\}.matrix.5*invmatrix1.2 + parent.\{0\}.matrix.6*invmatrix2.2 + parent.\{0\}.matrix.7*invmatrix3.2\".format(node.fullName())\n curve\[7].expressionString = \"parent.\{0\}.matrix.4*invmatrix0.3 + parent.\{0\}.matrix.5*invmatrix1.3 + parent.\{0\}.matrix.6*invmatrix2.3 + parent.\{0\}.matrix.7*invmatrix3.3\".format(node.fullName())\n\n curve\[8].expressionString = \"parent.\{0\}.matrix.8*invmatrix0.0 + parent.\{0\}.matrix.9*invmatrix1.0 + parent.\{0\}.matrix.10*invmatrix2.0 + parent.\{0\}.matrix.11*invmatrix3.0\".format(node.fullName())\n curve\[9].expressionString = \"parent.\{0\}.matrix.8*invmatrix0.1 + parent.\{0\}.matrix.9*invmatrix1.1 + parent.\{0\}.matrix.10*invmatrix2.1 + parent.\{0\}.matrix.11*invmatrix3.1\".format(node.fullName())\n curve\[10].expressionString = \"parent.\{0\}.matrix.8*invmatrix0.2 + parent.\{0\}.matrix.9*invmatrix1.2 + parent.\{0\}.matrix.10*invmatrix2.2 + parent.\{0\}.matrix.11*invmatrix3.2\".format(node.fullName())\n curve\[11].expressionString = \"parent.\{0\}.matrix.8*invmatrix0.3 + parent.\{0\}.matrix.9*invmatrix1.3 + parent.\{0\}.matrix.10*invmatrix2.3 + parent.\{0\}.matrix.11*invmatrix3.3\".format(node.fullName())\n\n curve\[12].expressionString = \"parent.\{0\}.matrix.12*invmatrix0.0 + parent.\{0\}.matrix.13*invmatrix1.0 + parent.\{0\}.matrix.14*invmatrix2.0 + parent.\{0\}.matrix.15*invmatrix3.0\".format(node.fullName())\n curve\[13].expressionString = \"parent.\{0\}.matrix.12*invmatrix0.1 + parent.\{0\}.matrix.13*invmatrix1.1 + parent.\{0\}.matrix.14*invmatrix2.1 + parent.\{0\}.matrix.15*invmatrix3.1\".format(node.fullName())\n curve\[14].expressionString = \"parent.\{0\}.matrix.12*invmatrix0.2 + parent.\{0\}.matrix.13*invmatrix1.2 + parent.\{0\}.matrix.14*invmatrix2.2 + parent.\{0\}.matrix.15*invmatrix3.2\".format(node.fullName())\n curve\[15].expressionString = \"parent.\{0\}.matrix.12*invmatrix0.3 + parent.\{0\}.matrix.13*invmatrix1.3 + parent.\{0\}.matrix.14*invmatrix2.3 + parent.\{0\}.matrix.15*invmatrix3.3\".format(node.fullName())\n\n for i in range(16):\n curve\[i].useExpression = True\n roto_node\['label'].setValue('\{0\}: x\[value identity_frame]'.format(node.name()))\n\n elif expression_link and not independent_identity_frame:\n # Just expression link\n for f in range(first,last+1):\n for i in range(16):\n if node\['expression_link'].getValue():\n curve\[i].expressionString = \"parent.\{0\}.matrix.\{1\}\".format(node.fullName(), i)\n curve\[i].useExpression = True\n else:\n curve\[i].addKey(int(f), matrix.valueAt(f)\[i])\n roto_node\['label'].setValue('\{0\}: x\{1\}'.format(node.name(), identity_frame))\n else:\n # Copy the animation curves as is\n for f in range(first, last+1):\n for i in range(16):\n curve\[i].addKey(int(f), node\['matrix'].getValueAt(f, i))\n roto_node\['label'].setValue('\{0\}: x\{1\}'.format(node.name(), identity_frame))\n\n for y in range(1,5):\n for x in range(1,5):\n cell = ((y-1)*4)+x-1\n roto_layer.getTransform().setExtraMatrixAnimCurve(y-1,x-1, curve\[cell])\n curve_knob.rootLayer.append(roto_layer)\n roto_node.setTab(1)" +STARTLINE} addUserKnob {22 create_cornerpin l CornerPin t "Create a cornerpin node, using the specified identity frame, if enabled. \n\nIf you need a CornerPin stabilizing, click the invert checkbox." -STARTLINE T "## Create Cornerpin\ngrid_x = int(nuke.toNode('preferences').knob('GridWidth').value())\ngrid_y = int(nuke.toNode('preferences').knob('GridHeight').value())\n\nnode = nuke.thisNode()\nnuke.root().begin()\n\n_ = \[n.setSelected(False) for n in nuke.allNodes()]\ncornerpin = nuke.createNode(\"CornerPin2D\", inpanel=False)\ncornerpin.setXYpos(node.xpos()-grid_x*0, node.ypos()+grid_y*2)\ncornerpin.setSelected(True)\ncornerpin.addKnob(nuke.Tab_Knob('Identity Frame'))\ncornerpin.addKnob(nuke.Int_Knob('identity_frame', 'identity frame'))\nreference_frame = int(node\['identity_frame'].getValue())\ncornerpin\['identity_frame'].setValue(int(node\['identity_frame'].getValue()))\ncornerpin\['label'].setValue(\"PlanarProjection : ref x\{0\}\".format('\[value identity_frame]'))\n\nfor i in range(1, 5):\n if node\['expression_link'].getValue():\n cornerpin\['to\{0\}'.format(i)].setExpression(\"parent.\{0\}.op\{1\}\".format(node.fullName(), i))\n else:\n cornerpin\['to\{0\}'.format(i)].copyAnimations(node\['op\{0\}'.format(i)].animations())\n cornerpin\['from\{0\}'.format(i)].setExpression('to\{0\}(identity_frame)'.format(i))\ncornerpin.setTab(1)"} addUserKnob {22 create_cornerpin_matrix l "CornerPin Matrix" t "Create a Cornerpin with the animation in the extra matrix knob instead of the to/from knobs." -STARTLINE T "## Create Cornerpin with tracking data in matrix\ngrid_x = int(nuke.toNode('preferences').knob('GridWidth').value())\ngrid_y = int(nuke.toNode('preferences').knob('GridHeight').value())\n\nnode = nuke.thisNode()\nnuke.root().begin()\n\n_ = \[n.setSelected(False) for n in nuke.allNodes()]\ncornerpin = nuke.createNode(\"CornerPin2D\", inpanel=False)\ncornerpin.setXYpos(node.xpos()-grid_x*0, node.ypos()+grid_y*2)\ncornerpin.setSelected(True)\n\n\nreference_frame = int(node\['identity_frame'].getValue())\nexpression_link = node\['expression_link'].getValue()\nindependent_identity_frame = node\['independent_identity_frame'].getValue()\ncpmatrix = cornerpin\['transform_matrix']\n\nif expression_link and independent_identity_frame:\n # Add identity frame knob\n cornerpin.addKnob(nuke.Tab_Knob('Identity Frame'))\n cornerpin.addKnob(nuke.Int_Knob('identity_frame', 'identity frame'))\n cornerpin\['identity_frame'].setValue(int(node\['identity_frame'].getValue()))\n cornerpin.addKnob(nuke.PyScript_Knob('identity_to_curframe', 'Current'))\n cornerpin.knob('identity_to_curframe').setTooltip(\"Set identity frame to current frame.\")\n cornerpin.knob('identity_to_curframe').setCommand(\"nuke.thisNode().knob('identity_frame').setValue(nuke.frame())\")\n cornerpin.setTab(1)\n\n cornerpin.addKnob(nuke.Double_Knob('determinant', 'determinant'))\n determinant = \"parent.\{0\}.matrix.3(identity_frame) * parent.\{0\}.matrix.6(identity_frame) * parent.\{0\}.matrix.9(identity_frame) * parent.\{0\}.matrix.12(identity_frame)- parent.\{0\}.matrix.2(identity_frame) * parent.\{0\}.matrix.7(identity_frame) * parent.\{0\}.matrix.9(identity_frame) * parent.\{0\}.matrix.12(identity_frame)- parent.\{0\}.matrix.3(identity_frame) * parent.\{0\}.matrix.5(identity_frame) * parent.\{0\}.matrix.10(identity_frame) * parent.\{0\}.matrix.12(identity_frame)+ parent.\{0\}.matrix.1(identity_frame) * parent.\{0\}.matrix.7(identity_frame) * parent.\{0\}.matrix.10(identity_frame) * parent.\{0\}.matrix.12(identity_frame)+ parent.\{0\}.matrix.2(identity_frame) * parent.\{0\}.matrix.5(identity_frame) * parent.\{0\}.matrix.11(identity_frame) * parent.\{0\}.matrix.12(identity_frame)- parent.\{0\}.matrix.1(identity_frame) * parent.\{0\}.matrix.6(identity_frame) * parent.\{0\}.matrix.11(identity_frame) * parent.\{0\}.matrix.12(identity_frame)- parent.\{0\}.matrix.3(identity_frame) * parent.\{0\}.matrix.6(identity_frame) * parent.\{0\}.matrix.8(identity_frame) * parent.\{0\}.matrix.13(identity_frame)+ parent.\{0\}.matrix.2(identity_frame) * parent.\{0\}.matrix.7(identity_frame) * parent.\{0\}.matrix.8(identity_frame) * parent.\{0\}.matrix.13(identity_frame)+ parent.\{0\}.matrix.3(identity_frame) * parent.\{0\}.matrix.4(identity_frame) * parent.\{0\}.matrix.10(identity_frame) * parent.\{0\}.matrix.13(identity_frame)- parent.\{0\}.matrix.0(identity_frame) * parent.\{0\}.matrix.7(identity_frame) * parent.\{0\}.matrix.10(identity_frame) * parent.\{0\}.matrix.13(identity_frame)- parent.\{0\}.matrix.2(identity_frame) * parent.\{0\}.matrix.4(identity_frame) * parent.\{0\}.matrix.11(identity_frame) * parent.\{0\}.matrix.13(identity_frame)+ parent.\{0\}.matrix.0(identity_frame) * parent.\{0\}.matrix.6(identity_frame) * parent.\{0\}.matrix.11(identity_frame) * parent.\{0\}.matrix.13(identity_frame)+ parent.\{0\}.matrix.3(identity_frame) * parent.\{0\}.matrix.5(identity_frame) * parent.\{0\}.matrix.8(identity_frame) * parent.\{0\}.matrix.14(identity_frame)- parent.\{0\}.matrix.1(identity_frame) * parent.\{0\}.matrix.7(identity_frame) * parent.\{0\}.matrix.8(identity_frame) * parent.\{0\}.matrix.14(identity_frame)- parent.\{0\}.matrix.3(identity_frame) * parent.\{0\}.matrix.4(identity_frame) * parent.\{0\}.matrix.9(identity_frame) * parent.\{0\}.matrix.14(identity_frame)+ parent.\{0\}.matrix.0(identity_frame) * parent.\{0\}.matrix.7(identity_frame) * parent.\{0\}.matrix.9(identity_frame) * parent.\{0\}.matrix.14(identity_frame)+ parent.\{0\}.matrix.1(identity_frame) * parent.\{0\}.matrix.4(identity_frame) * parent.\{0\}.matrix.11(identity_frame) * parent.\{0\}.matrix.14(identity_frame)- parent.\{0\}.matrix.0(identity_frame) * parent.\{0\}.matrix.5(identity_frame) * parent.\{0\}.matrix.11(identity_frame) * parent.\{0\}.matrix.14(identity_frame)- parent.\{0\}.matrix.2(identity_frame) * parent.\{0\}.matrix.5(identity_frame) * parent.\{0\}.matrix.8(identity_frame) * parent.\{0\}.matrix.15(identity_frame)+ parent.\{0\}.matrix.1(identity_frame) * parent.\{0\}.matrix.6(identity_frame) * parent.\{0\}.matrix.8(identity_frame) * parent.\{0\}.matrix.15(identity_frame)+ parent.\{0\}.matrix.2(identity_frame) * parent.\{0\}.matrix.4(identity_frame) * parent.\{0\}.matrix.9(identity_frame) * parent.\{0\}.matrix.15(identity_frame)- parent.\{0\}.matrix.0(identity_frame) * parent.\{0\}.matrix.6(identity_frame) * parent.\{0\}.matrix.9(identity_frame) * parent.\{0\}.matrix.15(identity_frame)- parent.\{0\}.matrix.1(identity_frame) * parent.\{0\}.matrix.4(identity_frame) * parent.\{0\}.matrix.10(identity_frame) * parent.\{0\}.matrix.15(identity_frame)+ parent.\{0\}.matrix.0(identity_frame) * parent.\{0\}.matrix.5(identity_frame) * parent.\{0\}.matrix.10(identity_frame) * parent.\{0\}.matrix.15(identity_frame)\".format(node.fullName())\n cornerpin\['determinant'].setExpression(determinant)\n for i in range(4):\n cornerpin.addKnob(nuke.BBox_Knob(\"invmatrix\{0\}\".format(i)))\n # view-source:https://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n cornerpin\['invmatrix0'].setExpression(\"(parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.13(identity_frame) + parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.14(identity_frame) - parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.14(identity_frame) - parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.15(identity_frame) + parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.15(identity_frame))/determinant\".format(node.fullName()), 0)\n cornerpin\['invmatrix0'].setExpression(\"(parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.14(identity_frame) + parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.14(identity_frame) + parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.15(identity_frame) - parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.15(identity_frame))/determinant\".format(node.fullName()), 1)\n cornerpin\['invmatrix0'].setExpression(\"(parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.13(identity_frame) + parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.14(identity_frame) - parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.14(identity_frame) - parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.15(identity_frame) + parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.15(identity_frame))/determinant\".format(node.fullName()), 2)\n cornerpin\['invmatrix0'].setExpression(\"(parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.9(identity_frame) - parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.9(identity_frame) - parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.10(identity_frame) + parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.10(identity_frame) + parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.11(identity_frame) - parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.11(identity_frame))/determinant\".format(node.fullName()), 3)\n cornerpin\['invmatrix1'].setExpression(\"(parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.14(identity_frame) + parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.14(identity_frame) + parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.15(identity_frame) - parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.15(identity_frame))/determinant\".format(node.fullName()), 0)\n cornerpin\['invmatrix1'].setExpression(\"(parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.12(identity_frame) + parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.14(identity_frame) - parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.14(identity_frame) - parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.15(identity_frame) + parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.15(identity_frame))/determinant\".format(node.fullName()), 1)\n cornerpin\['invmatrix1'].setExpression(\"(parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.14(identity_frame) + parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.14(identity_frame) + parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.15(identity_frame) - parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.15(identity_frame))/determinant\".format(node.fullName()), 2)\n cornerpin\['invmatrix1'].setExpression(\"(parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.8(identity_frame) - parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.8(identity_frame) + parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.10(identity_frame) - parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.10(identity_frame) - parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.11(identity_frame) + parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.11(identity_frame))/determinant\".format(node.fullName()), 3)\n cornerpin\['invmatrix2'].setExpression(\"(parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.12(identity_frame) + parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.15(identity_frame) + parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.15(identity_frame))/determinant\".format(node.fullName()), 0)\n cornerpin\['invmatrix2'].setExpression(\"(parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.13(identity_frame) + parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.11(identity_frame)*parent.\{0\}.matrix.13(identity_frame) + parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.15(identity_frame) - parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.15(identity_frame))/determinant\".format(node.fullName()), 1)\n cornerpin\['invmatrix2'].setExpression(\"(parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.12(identity_frame) + parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.15(identity_frame) + parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.15(identity_frame))/determinant\".format(node.fullName()), 2)\n cornerpin\['invmatrix2'].setExpression(\"(parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.8(identity_frame) - parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.8(identity_frame) - parent.\{0\}.matrix.3(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.9(identity_frame) + parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.7(identity_frame)*parent.\{0\}.matrix.9(identity_frame) + parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.11(identity_frame) - parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.11(identity_frame))/determinant\".format(node.fullName()), 3)\n cornerpin\['invmatrix3'].setExpression(\"(parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.13(identity_frame) + parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.13(identity_frame) + parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.14(identity_frame) - parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.14(identity_frame))/determinant\".format(node.fullName()), 0)\n cornerpin\['invmatrix3'].setExpression(\"(parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.12(identity_frame) + parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.10(identity_frame)*parent.\{0\}.matrix.13(identity_frame) - parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.8(identity_frame)*parent.\{0\}.matrix.14(identity_frame) + parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.9(identity_frame)*parent.\{0\}.matrix.14(identity_frame))/determinant\".format(node.fullName()), 1)\n cornerpin\['invmatrix3'].setExpression(\"(parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.12(identity_frame) - parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.13(identity_frame) + parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.13(identity_frame) + parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.14(identity_frame) - parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.14(identity_frame))/determinant\".format(node.fullName()), 2)\n cornerpin\['invmatrix3'].setExpression(\"(parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.8(identity_frame) - parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.8(identity_frame) + parent.\{0\}.matrix.2(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.9(identity_frame) - parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.6(identity_frame)*parent.\{0\}.matrix.9(identity_frame) - parent.\{0\}.matrix.1(identity_frame)*parent.\{0\}.matrix.4(identity_frame)*parent.\{0\}.matrix.10(identity_frame) + parent.\{0\}.matrix.0(identity_frame)*parent.\{0\}.matrix.5(identity_frame)*parent.\{0\}.matrix.10(identity_frame))/determinant\".format(node.fullName()), 3)\n\n # view-source:https://www.euclideanspace.com/maths/algebra/matrix/arithmetic/fourD/index.htm\n cpmatrix.setExpression(\"parent.\{0\}.matrix.0*invmatrix0.0 + parent.\{0\}.matrix.1*invmatrix1.0 + parent.\{0\}.matrix.2*invmatrix2.0 + parent.\{0\}.matrix.3*invmatrix3.0\".format(node.fullName()), 0)\n cpmatrix.setExpression(\"parent.\{0\}.matrix.0*invmatrix0.1 + parent.\{0\}.matrix.1*invmatrix1.1 + parent.\{0\}.matrix.2*invmatrix2.1 + parent.\{0\}.matrix.3*invmatrix3.1\".format(node.fullName()), 1)\n cpmatrix.setExpression(\"parent.\{0\}.matrix.0*invmatrix0.2 + parent.\{0\}.matrix.1*invmatrix1.2 + parent.\{0\}.matrix.2*invmatrix2.2 + parent.\{0\}.matrix.3*invmatrix3.2\".format(node.fullName()), 2)\n cpmatrix.setExpression(\"parent.\{0\}.matrix.0*invmatrix0.3 + parent.\{0\}.matrix.1*invmatrix1.3 + parent.\{0\}.matrix.2*invmatrix2.3 + parent.\{0\}.matrix.3*invmatrix3.3\".format(node.fullName()), 3)\n cpmatrix.setExpression(\"parent.\{0\}.matrix.4*invmatrix0.0 + parent.\{0\}.matrix.5*invmatrix1.0 + parent.\{0\}.matrix.6*invmatrix2.0 + parent.\{0\}.matrix.7*invmatrix3.0\".format(node.fullName()), 4)\n cpmatrix.setExpression(\"parent.\{0\}.matrix.4*invmatrix0.1 + parent.\{0\}.matrix.5*invmatrix1.1 + parent.\{0\}.matrix.6*invmatrix2.1 + parent.\{0\}.matrix.7*invmatrix3.1\".format(node.fullName()), 5)\n cpmatrix.setExpression(\"parent.\{0\}.matrix.4*invmatrix0.2 + parent.\{0\}.matrix.5*invmatrix1.2 + parent.\{0\}.matrix.6*invmatrix2.2 + parent.\{0\}.matrix.7*invmatrix3.2\".format(node.fullName()), 6)\n cpmatrix.setExpression(\"parent.\{0\}.matrix.4*invmatrix0.3 + parent.\{0\}.matrix.5*invmatrix1.3 + parent.\{0\}.matrix.6*invmatrix2.3 + parent.\{0\}.matrix.7*invmatrix3.3\".format(node.fullName()), 7)\n cpmatrix.setExpression(\"parent.\{0\}.matrix.8*invmatrix0.0 + parent.\{0\}.matrix.9*invmatrix1.0 + parent.\{0\}.matrix.10*invmatrix2.0 + parent.\{0\}.matrix.11*invmatrix3.0\".format(node.fullName()), 8)\n cpmatrix.setExpression(\"parent.\{0\}.matrix.8*invmatrix0.1 + parent.\{0\}.matrix.9*invmatrix1.1 + parent.\{0\}.matrix.10*invmatrix2.1 + parent.\{0\}.matrix.11*invmatrix3.1\".format(node.fullName()), 9)\n cpmatrix.setExpression(\"parent.\{0\}.matrix.8*invmatrix0.2 + parent.\{0\}.matrix.9*invmatrix1.2 + parent.\{0\}.matrix.10*invmatrix2.2 + parent.\{0\}.matrix.11*invmatrix3.2\".format(node.fullName()), 10)\n cpmatrix.setExpression(\"parent.\{0\}.matrix.8*invmatrix0.3 + parent.\{0\}.matrix.9*invmatrix1.3 + parent.\{0\}.matrix.10*invmatrix2.3 + parent.\{0\}.matrix.11*invmatrix3.3\".format(node.fullName()), 11)\n cpmatrix.setExpression(\"parent.\{0\}.matrix.12*invmatrix0.0 + parent.\{0\}.matrix.13*invmatrix1.0 + parent.\{0\}.matrix.14*invmatrix2.0 + parent.\{0\}.matrix.15*invmatrix3.0\".format(node.fullName()), 12)\n cpmatrix.setExpression(\"parent.\{0\}.matrix.12*invmatrix0.1 + parent.\{0\}.matrix.13*invmatrix1.1 + parent.\{0\}.matrix.14*invmatrix2.1 + parent.\{0\}.matrix.15*invmatrix3.1\".format(node.fullName()), 13)\n cpmatrix.setExpression(\"parent.\{0\}.matrix.12*invmatrix0.2 + parent.\{0\}.matrix.13*invmatrix1.2 + parent.\{0\}.matrix.14*invmatrix2.2 + parent.\{0\}.matrix.15*invmatrix3.2\".format(node.fullName()), 14)\n cpmatrix.setExpression(\"parent.\{0\}.matrix.12*invmatrix0.3 + parent.\{0\}.matrix.13*invmatrix1.3 + parent.\{0\}.matrix.14*invmatrix2.3 + parent.\{0\}.matrix.15*invmatrix3.3\".format(node.fullName()), 15)\n\n cornerpin\['label'].setValue(\"PlanarProjection : ref x\{0\}\".format('\[value identity_frame]'))\nelif expression_link and not independent_identity_frame:\n cornerpin\['label'].setValue('\{0\}: x\{1\}'.format(node.name(), reference_frame))\n for i in range(16):\n cpmatrix.setExpression(\"parent.\{0\}.matrix.\{1\}\".format(node.fullName(), i), i)\nelse:\n cornerpin\['label'].setValue('\{0\}: x\{1\}'.format(node.name(), reference_frame))\n cpmatrix.copyAnimations(matrix.animations())"} addUserKnob {22 create_gridwarp l GridWarp -STARTLINE T "node = nuke.thisNode()\nmatrix = node\['matrix']\nnuke.root().begin()\ngrid_x = int(nuke.toNode('preferences').knob('GridWidth').value())\ngrid_y = int(nuke.toNode('preferences').knob('GridHeight').value())\nexpression_link = node\['expression_link'].getValue()\n\nif matrix.isAnimated():\n _ = \[n.setSelected(False) for n in nuke.allNodes()]\n gridwarp = nuke.createNode(\"GridWarp3\")\n gridwarp.setXYpos(node.xpos()-grid_x*0, node.ypos()+grid_y*2)\n gridwarp.setSelected(True)\n\n # Add Label\n reference_frame = int(node\['identity_frame'].getValue())\n if expression_link:\n gridwarp\['label'].setValue('\{0\}: x\[value identity_frame]'.format(node.name()))\n else:\n gridwarp\['label'].setValue('\{0\}: x\{1\}'.format(node.name(), reference_frame))\n\n gridwarp_matrices = \[gridwarp\['source_grid_transform_matrix'], gridwarp\['destination_grid_transform_matrix']]\n\n if expression_link:\n for i in range(16):\n for gridwarp_matrix in gridwarp_matrices:\n gridwarp_matrix.setExpression(\"parent.\{0\}.matrix.\{1\}\".format(node.fullName(), i), i)\n else:\n gridwarp_matrices\[0].copyAnimations(matrix.animations())"} addUserKnob {26 ""} addUserKnob {26 desc l " " T "developed by Vit Sedlacek www.vitsedlacek.com\noptimized and improved by Jed Smith - http://gist.github.com/jedypod"} } Axis2 { inputs 0 useMatrix true name Matrix_original xpos -276 ypos -260 disable true } Input { inputs 0 name InputBG label "\[value number]" xpos 620 ypos -304 addUserKnob {20 User} addUserKnob {18 ip1 R -100 100} ip1 {0 0 0} addUserKnob {6 ip1_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 ip1_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 ip1_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 ip1_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 ip2 l "" +STARTLINE R -100 100} ip2 {0 0 0} addUserKnob {6 ip2_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 ip2_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 ip2_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 ip2_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 ip3 l "" +STARTLINE R -100 100} ip3 {0 0 0} addUserKnob {6 ip3_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 ip3_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 ip3_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 ip3_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 ip4 l "" +STARTLINE R -100 100} ip4 {0 0 0} addUserKnob {6 ip4_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 ip4_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 ip4_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 ip4_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } Output { name Output1 xpos 600 ypos 531 } Axis2 { inputs 0 translate {0.5 0.5 0} useMatrix true matrix { {{parent._MATCH_SELECTION_.matrix} {parent._MATCH_SELECTION_.matrix} {parent._MATCH_SELECTION_.matrix} {parent._MATCH_SELECTION_.matrix}} {{parent._MATCH_SELECTION_.matrix} {parent._MATCH_SELECTION_.matrix} {parent._MATCH_SELECTION_.matrix} {parent._MATCH_SELECTION_.matrix}} {{parent._MATCH_SELECTION_.matrix} {parent._MATCH_SELECTION_.matrix} {parent._MATCH_SELECTION_.matrix} {parent._MATCH_SELECTION_.matrix}} {{parent._MATCH_SELECTION_.matrix} {parent._MATCH_SELECTION_.matrix} {parent._MATCH_SELECTION_.matrix} {parent._MATCH_SELECTION_.matrix}} } name CENTER xpos -190 ypos 78 addUserKnob {20 User} addUserKnob {7 plane_size l "" +STARTLINE R 0.1 100} plane_size 1 } set Na05aa70 [stack 0] Axis2 { translate {{parent.CENTER.plane_size/2} {parent.CENTER.plane_size/2} 0} name UR xpos -131 ypos 222 } push $Na05aa70 Axis2 { translate {{-parent.CENTER.plane_size/2} {parent.CENTER.plane_size/2} 0} name UL xpos -23 ypos 222 } push $Na05aa70 Axis2 { translate {{parent.CENTER.plane_size/2} {-parent.CENTER.plane_size/2} 0} name LR xpos -241 ypos 222 } push $Na05aa70 Axis2 { translate {{-parent.CENTER.plane_size/2} {-parent.CENTER.plane_size/2} 0} name LL xpos -367 ypos 222 } TransformGeo { inputs 0 translate {-53.84128952 26.45331383 -89.45389557} rotate {-36.82652664 86.55776215 93.70707703} scaling {3.87788868 4.277028561 1.28276515} name _MATCH_SELECTION_ xpos -40 ypos 99 } Input { inputs 0 name InputCam label "\[value number]" xpos 440 ypos -303 number 1 } push 0 Axis2 { inputs 0 name point_4 xpos 300 ypos -270 } Axis2 { inputs 0 name point_3 xpos 190 ypos -270 } Axis2 { inputs 0 name point_2 xpos 80 ypos -270 } Axis2 { inputs 0 name point_1 xpos -30 ypos -271 } Scene { inputs 6 name Scene1 xpos 450 ypos -95 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_PlotScanline.gizmo ================================================ Group { name PlotScanline tile_color 0x9c0000ff selected true addUserKnob {20 Controls} addUserKnob {4 mode l "Sampling method" M {"Slice Per Pixel (faster)" "Slice Area (slower)" "Full Scanline" "" "" ""}} mode "Full Scanline" addUserKnob {6 add2image l "Add to original" +STARTLINE} add2image true addUserKnob {6 Normalize -STARTLINE} addUserKnob {6 tonemap l "Tone Map (HDRI)" -STARTLINE} addUserKnob {6 curve l "Plot as curve" +STARTLINE} curve true addUserKnob {3 curveFat l "Curve Thickness" -STARTLINE} addUserKnob {3 sa l "Sample Area" t "Disabled when using pr pixel method."} sa 1 addUserKnob {7 lift l Lift R -1 1} addUserKnob {7 scale l Scale R 0 5} scale 1 addUserKnob {26 ""} addUserKnob {12 p1 l "Start Point"} p1 {376 418} addUserKnob {12 p2 l "End Point" -STARTLINE} p2 {428.5 425.5} addUserKnob {26 ""} addUserKnob {26 "" l "About " T "Plot Scanline v0.4 | theo@euqahuba.com\nUse P1 to select your scanline and/or you start slice."} } Input { inputs 0 name Input1 xpos -480 ypos 62 } set N29fc2280 [stack 0] Expression { temp_name0 length temp_expr0 sqrt(r*r+g*g+b*b) expr0 r/length expr1 g/length expr2 b/length name Normalize xpos -480 ypos 108 disable {{1-parent.Normalize i}} } Expression { expr0 r/(r+1) expr1 g/(g+1) expr2 b/(b+1) name tonamap xpos -480 ypos 134 disable {{1-parent.tonemap i}} } set N29c18730 [stack 0] Expression { temp_name0 rExpr temp_expr0 "min(max(0,\r\nceil(r(x,parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" temp_name1 gExpr temp_expr1 "min(max(0,\r\nceil(g(x,parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" temp_name2 bExpr temp_expr2 "min(max(0,\r\nceil(b(x,parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" expr0 rExpr expr1 gExpr expr2 bExpr expr3 0 name scanline xpos -302 ypos 193 addUserKnob {20 User} } push $N29c18730 Expression { temp_name0 rExpr temp_expr0 "min(max(0,\r\nceil(r((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y,parent.sa,parent.sa)-((y/height+parent.lift)*parent.scale))),1)" temp_name1 gExpr temp_expr1 "min(max(0,\r\nceil(g((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y,parent.sa,parent.sa)-((y/height+parent.lift)*parent.scale))),1)" temp_name2 bExpr temp_expr2 "min(max(0,\r\nceil(b((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y,parent.sa,parent.sa)-((y/height+parent.lift)*parent.scale))),1)" expr0 rExpr expr1 gExpr expr2 bExpr expr3 0 name Expression_highQuality xpos -515 ypos 197 addUserKnob {20 User} } push $N29c18730 Expression { temp_name0 rExpr temp_expr0 "min(max(0,\r\nceil(r((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" temp_name1 gExpr temp_expr1 "min(max(0,\r\nceil(g((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" temp_name2 bExpr temp_expr2 "min(max(0,\r\nceil(b((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" expr0 rExpr expr1 gExpr expr2 bExpr expr3 0 name perPixel xpos -419 ypos 201 addUserKnob {20 User} } Switch { inputs 3 which {{parent.mode i}} name Switch2 xpos -480 ypos 253 } Matrix { matrix { {0 1 0} {1 -4 1} {0 1 0} } name Matrix2 selected true xpos -480 ypos 284 disable {{-1+parent.curve i x70 1}} } Dilate { size {{parent.curveFat}} name Dilate1 xpos -480 ypos 326 disable {{-1+parent.curve.main}} } Clamp { name Clamp1 xpos -480 ypos 383 } set N2a7d6ae0 [stack 0] push $N29fc2280 Dot { name Dot1 xpos -556 ypos 66 } Clamp { maximum 331 name Clamp2 xpos -590 ypos 352 } Merge2 { inputs 2 operation plus bbox intersection name Merge1 xpos -590 ypos 394 } Dot { name Dot2 xpos -556 ypos 433 } push $N2a7d6ae0 Switch { inputs 2 which {{parent.add2image i}} name Switch1 xpos -480 ypos 425 } Output { name Output1 xpos -480 ypos 470 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_PointCloudKeyer.gizmo ================================================ Group { name PointCloudKeyer onCreate "try: \n n = nuke.thisNode()\n n\['translate'].setFlag(0x0000002000000000)\nexcept:\n print('failed to set flag')" tile_color 0xff00ff selected true addUserKnob {20 PointCloudKeyer} addUserKnob {4 view l View t "Point Cloud - plots the x,y values from the selected color space\nComposite - premulted Fg over Bg\nFinal Result - unpremulted Fg with alpha from the key\n" M {"Point Cloud" Composite "Final Result" "" "" "" "" "" "" "" "" ""}} view Composite addUserKnob {6 overlayPointCloud l "overlay point cloud" +STARTLINE} addUserKnob {26 _2 l "Point Cloud"} addUserKnob {4 colorspace l "color space" t "Chroma Red/Blue - YCbCr colorspace. Plots chroma difference blue vs chroma different red. Generally gives the most predictable results.\n\nChroma x/y - CIE-Yxy colorspace. Plots choma red vs chroma blue. Similar to the Chroma Red/Blue but different math. \n\nChroma/Hue - CIE-LCH colorspace. Plots choma vs hue.\n\nRed/Blue Average - Plots the g channel vs (r+b)/2\n\nCustom - use the channels input" M {"Chroma Red/Blue" "Chroma x/y" Chroma/Hue "Red/Blue Average" Custom "" "" "" "" "" "" "" "" "" "" "" "" ""}} addUserKnob {12 translate} addUserKnob {14 scale t "Increasing this value by a large amount will mirror the point cloud" R 0 100} scale 1 addUserKnob {6 densePointCloud l "dense point cloud" t "Merges additional points under the generated point cloud. " +STARTLINE} addUserKnob {6 mirror l "swap axis" -STARTLINE} addUserKnob {41 disable_1 l "invert alpha" T Invert1.disable} addUserKnob {20 about} addUserKnob {26 _4 l "" +STARTLINE T "instructions and demo at "} addUserKnob {26 _3 l "" -STARTLINE T "isaacspiegel.com/blog"} addUserKnob {26 ""} addUserKnob {26 _1 l "" +STARTLINE T "by isaac spiegel\nisaacspiegel.com\n\nfeedback on this tool? email me!\nisaacspiegel.freelance@gmail.com"} } Input { inputs 0 name custom xpos -150 ypos 62 number 3 } Dot { name Dot12 note_font_size 25 xpos -119 ypos 183 } Input { inputs 0 name Src xpos -590 ypos -106 } Dot { name Dot7 label "input footage" note_font_size 25 xpos -559 ypos -57 } Dot { name Dot2 note_font_size 25 xpos -559 ypos 63 } set N10d16a50 [stack 0] Expression { expr0 g expr1 (r+b)/2 name Expression1 label "red/blue average" xpos -260 ypos 104 } push $N10d16a50 Colorspace { colorspace_out CIE-LCH name Colorspace2 label CIE-LCH xpos -370 ypos 104 } push $N10d16a50 Colorspace { colorspace_out CIE-Yxy name Colorspace1 label CIE_Yxy xpos -480 ypos 104 } push $N10d16a50 Colorspace { colorspace_out YCbCr name Colorspace3 label yCbCr xpos -590 ypos 104 } Switch { inputs 5 which {{parent.colorspace}} name colorspace xpos -590 ypos 182 } Dot { name Dot8 note_font_size 25 xpos -559 ypos 279 } set N10d8cf40 [stack 0] Shuffle { red blue blue alpha name Shuffle_horiz xpos -480 ypos 326 } push $N10d8cf40 Shuffle { red green green blue blue alpha name Shuffle_vert xpos -590 ypos 326 } set N1155d430 [stack 0] Switch { inputs 2 which {{parent.mirror}} name layout xpos -590 ypos 398 } Grade { blackpoint {{(parent.scale.0-1)/scaleDiv} {(parent.scale.1-1)/scaleDiv} 0 0} whitepoint {{1-((parent.scale.0-1))/scaleDiv} {1-((parent.scale.1-1))/scaleDiv} 1 1} add {{parent.translate.0/width} {parent.translate.1/height} 0 0} black_clamp false name Grade_translate label "offset: L/R/Up/Dn" xpos -590 ypos 440 addUserKnob {20 User} addUserKnob {3 scaleDiv} scaleDiv 200 } set N1158be90 [stack 0] Input { inputs 0 name Shape xpos -40 ypos -106 number 1 } Dot { name Dot4 label "input roto" note_font_size 25 xpos -9 ypos -57 } STMap { inputs 2 uv rgb name STMap1 xpos -40 ypos 440 } Invert { name Invert1 xpos -40 ypos 488 } push $N10d16a50 Dot { name Dot3 note_font_size 25 xpos -669 ypos 63 } Dot { name Dot1 note_font_size 25 xpos -669 ypos 543 } set N115c2870 [stack 0] Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos -40 ypos 536 } set N115c7780 [stack 0] Dot { name Dot6 label "output alpha + rgba" note_font_size 25 xpos -9 ypos 711 } set N115d5d00 [stack 0] Dot { name Dot17 note_font_size 25 xpos 101 ypos 879 } push $N1158be90 push $N115c2870 BlinkScript { inputs 2 recompileCount 2 ProgramGroup 1 KernelDescription "2 \"InverseSTKernel\" iterate pixelWise 79737837f0b8f5ef5ba9dd8c86c9e76f184ef0da76c94577b5431d3e3e08b063 3 \"src\" Read Point \"stmap\" Read Point \"dst\" Write Random 1 \"resolution\" Float 2 AAAAAAAAAAA= 1 \"resolution\" 2 1 0" kernelSource "// Original Kernel by Mads Hagbarth, modified to use STMaps by Erwan Leroy\n\nkernel InverseSTKernel : ImageComputationKernel\n\{\n Image src;\n Image stmap;\n Image dst;\n\n param:\n float2 resolution;\n\n void process() \{\n float2 uv;\n uv.x = stmap().x * resolution.x - 0.5f;\n uv.y = stmap().y * resolution.y - 0.5f;\n //always make sure that you don't write outside bounds\n //as it will usually crash nuke.\n if (dst.bounds.inside(uv.x,uv.y)) \{ \n dst(uv.x,uv.y) = src(); \n \}\n \}\n\};" useGPUIfAvailable false rebuild "" InverseSTKernel_resolution {{width} {height}} rebuild_finalise "" name BlinkScript1 xpos -590 ypos 608 } Dot { name Dot14 note_font_size 25 xpos -559 ypos 663 } set N115fcac0 [stack 0] Blur { channels rgba size 1.5 name Blur3 xpos -810 ypos 662 } set N116015d0 [stack 0] Expression { expr0 r/a expr1 g/a expr2 b/a expr3 "a > 0 ? 1 : a" name Expression2 xpos -810 ypos 708 } Premult { name Premult3 xpos -810 ypos 734 } push $N115fcac0 Merge2 { inputs 2 operation under bbox B name Merge4 xpos -590 ypos 734 disable {{!parent.densePointCloud}} } Dot { name Dot15 note_font_size 25 xpos -559 ypos 783 } set N12a097d0 [stack 0] Dot { name Dot16 note_font_size 25 xpos -119 ypos 783 } set N12a0e480 [stack 0] push $N115d5d00 Merge2 { inputs 2 bbox B name Merge3 xpos -40 ypos 830 disable {{!parent.overlayPointCloud}} } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy2 xpos -40 ypos 872 } push $N115c7780 Premult { name Premult1 xpos 180 ypos 542 } set N12a32630 [stack 0] Input { inputs 0 name Bg xpos 400 ypos 302 number 2 } Dot { name Dot10 label "BG input" note_font_size 25 xpos 431 ypos 375 } Merge2 { inputs 2 bbox B name Merge1 xpos 400 ypos 542 } push $N12a32630 Switch { inputs 2 which {{"\[exists parent.input2]"}} name Switch_BgInput xpos 400 ypos 602 } Dot { name Dot18 note_font_size 25 xpos 431 ypos 711 } set N12a5d4b0 [stack 0] Dot { name Dot19 note_font_size 25 xpos 541 ypos 879 } push $N12a0e480 push $N12a5d4b0 Merge2 { inputs 2 bbox B name Merge2 xpos 400 ypos 782 disable {{!parent.overlayPointCloud}} } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy3 xpos 400 ypos 872 } Dot { name Dot11 label composite note_font_size 25 xpos 431 ypos 927 } set N12a864b0 [stack 0] push $N12a097d0 Dot { name Dot5 label "output view help" note_font_size 25 xpos -559 ypos 879 } Dot { name Dot9 note_font_size 25 xpos -559 ypos 927 } Switch { inputs 3 which {{parent.view}} name output_toggle xpos -40 ypos 926 } Output { name Output1 xpos -40 ypos 998 } push $N12a864b0 push $N116015d0 push $N1155d430 Viewer { inputs 3 frame_range 1-37 colour_sample_bbox {-0.2989583313 -0.08749999851 -0.2979166806 -0.08645833284} name Viewer1 xpos 220 ypos 1214 hide_input true addUserKnob {20 Lock} addUserKnob {6 lock_all_buffers l "lock all buffers" -STARTLINE} addUserKnob {6 lock_buffer_1 l "lock buffer 1" +STARTLINE} addUserKnob {6 lock_buffer_2 l "lock buffer 2" +STARTLINE} addUserKnob {6 lock_buffer_3 l "lock buffer 3" +STARTLINE} addUserKnob {6 lock_buffer_4 l "lock buffer 4" +STARTLINE} addUserKnob {6 lock_buffer_5 l "lock buffer 5" +STARTLINE} addUserKnob {6 lock_buffer_6 l "lock buffer 6" +STARTLINE} addUserKnob {6 lock_buffer_7 l "lock buffer 7" +STARTLINE} addUserKnob {6 lock_buffer_8 l "lock buffer 8" +STARTLINE} addUserKnob {6 lock_buffer_9 l "lock buffer 9" +STARTLINE} addUserKnob {6 lock_buffer_0 l "lock buffer 0" +STARTLINE} addUserKnob {6 toAddBtn -STARTLINE} toAddBtn true } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_PosMatte_MJ.gizmo ================================================ Group { name PosMatte tile_color 0x5f3f7fff addUserKnob {20 tab_general l General} addUserKnob {41 geo_select T geoCTRL.geo_select} addUserKnob {41 transform T geoCTRL.transform} addUserKnob {41 position l "world position" t "Select position (world space) channel.\nIf position is camera space, use 'ConvertPNZ' to convert to world space." T shuffle_pos.in} addUserKnob {6 unpremult_src l "unpremult source" t "Anti-aliasing edge will process improper matte on the edge. Unpremult the data with alpha will fix this issue.\n\n* input must contain alpha in alpha channel.\n** uncheck this box if position data is un-filtered.\n*** this can be fix the external edge, but not the intersect edge." +STARTLINE} addUserKnob {6 premult_result l "premult result" t "Toggle the premult result." -STARTLINE} premult_result true addUserKnob {26 title_matte l MATTE} addUserKnob {41 mat_shape l shape T menu02.mat_shape} addUserKnob {6 invert_matte l "invert matte" t "Invert the matte of the shape. Same as deepHoldout but with falloff support (soften matte)." -STARTLINE} addUserKnob {26 ""} addUserKnob {41 pos2D l "2D pos" t "Select the matte spot in 2D space." T menu03.pos2D} addUserKnob {41 mat_translate l "3D pos" T geoCTRL.translate} addUserKnob {41 file_menu l @FolderIcon T geoCTRL.file_menu} addUserKnob {41 snap_menu l @AxisIcon -STARTLINE T geoCTRL.snap_menu} addUserKnob {26 ""} addUserKnob {41 mat_rot_order l "rotation order" T geoCTRL.rot_order} addUserKnob {41 mat_rotate l rotate T geoCTRL.rotate} addUserKnob {41 mat_scaling l scale T geoCTRL.scaling} addUserKnob {41 mat_uniform_scale l "uniform scale" T geoCTRL.uniform_scale} addUserKnob {41 mat_skew l skew T geoCTRL.skew} addUserKnob {41 mat_pivot l pivot T geoCTRL.pivot} addUserKnob {22 set_link l "link to selected axis/geo" t "Select any 3D nodes and link the node with this button. It gives you a control in 3D for transformation." T "def getLevel() :\n ### level define ###\n if len(nuke.thisNode().fullName().split('.')) == 1 :\n ggLevel = nuke.root()\n else :\n nodePath = nuke.thisNode().fullName().split('.')\n nodePath.pop()\n ggLevel = nuke.toNode('.'.join(nodePath))\n return ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\nmainKnobs = \['mat_rot_order','mat_translate','mat_rotate','mat_scaling','mat_uniform_scale','mat_skew','mat_pivot']\n\naxWhiteList = \['Axis','Axis2','Cube','Sphere','Cylinder','Card','Card2','ReadGeo','ReadGeo2','TransformGeo']\n\ntry :\n with root :\n selNode = nuke.selectedNode()\n \n with thisGRP :\n if axWhiteList.count(selNode.Class()) != 0 :\n for knob in mainKnobs :\n thisGRP\[knob].clearAnimated()\n \n thisGRP\[mainKnobs\[0]].setExpression( '\{0\}.rot_order'.format(selNode.name()) )\n thisGRP\[mainKnobs\[1]].setExpression( '\{0\}.translate'.format(selNode.name()) )\n thisGRP\[mainKnobs\[2]].setExpression( '\{0\}.rotate'.format(selNode.name()) )\n thisGRP\[mainKnobs\[3]].setExpression( '\{0\}.scaling'.format(selNode.name()) )\n thisGRP\[mainKnobs\[4]].setExpression( '\{0\}.uniform_scale'.format(selNode.name()) )\n thisGRP\[mainKnobs\[5]].setExpression( '\{0\}.skew'.format(selNode.name()) )\n thisGRP\[mainKnobs\[6]].setExpression( '\{0\}.pivot'.format(selNode.name()) )\n else :\n nuke.message('No support node selected.')\nexcept :\n nuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the expression link but won't reset any data. So the transformation data still works if input doesn't contain any movement." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['mat_rot_order','mat_translate','mat_rotate','mat_scaling','mat_uniform_scale','mat_skew','mat_pivot']\n\nfor i in range (0, len(mainKnobs), 1) :\n thisGRP\[mainKnobs\[i]].clearAnimated()"} addUserKnob {22 bake_link l "bake expression link" t "Baked out the existing expression link back to this node itself. After that, the linked node is not required for this node anymore. Baked value is base on the frame range in project setting of the nuke script.\n\n* Nuke 11.2 has issue with expression link on this node. It will crash your nuke in some cases, but it will be fine when re-open the nuke script. Because of this issue, recommand to bake the value." T "thisGRP = nuke.thisGroup()\n\nframeST = nuke.root().firstFrame()\nframeED = nuke.root().lastFrame()\n\nallknobs = \['mat_translate','mat_rotate','mat_scaling','mat_uniform_scale','mat_skew','mat_pivot']\nalldata = \{\}\n\nchknobs = 0\nfor knob in allknobs :\n\tif thisGRP\[knob].hasExpression() :\n\t\tchknobs = 1\n\nif chknobs :\n\tfor knob in allknobs :\n\t\tfor t in range( frameST, frameED+1, 1 ) :\n\t\t\ttry :\n\t\t\t\talldata\[knob].append( thisGRP\[knob].getValueAt(t) )\n\t\t\texcept :\n\t\t\t\talldata\[knob] = \[ thisGRP\[knob].getValueAt(t) ]\n\n\tfor knob in allknobs :\n\t\tthisGRP\[knob].clearAnimated()\n\t\tthisGRP\[knob].setAnimated()\n\n\tfor knob in allknobs :\n\t\tfor t in range( frameST, frameED+1, 1 ) :\n\t\t\tif type( alldata\[knob]\[t-frameST] ) is float :\n\t\t\t\tthisGRP\[knob].setValueAt( alldata\[knob]\[t-frameST] , t )\n\t\t\tif type( alldata\[knob]\[t-frameST] ) is list :\n\t\t\t\tfor i in range( len( alldata\[knob]\[t-frameST] ) ) :\n\t\t\t\t\tthisGRP\[knob].setValueAt( alldata\[knob]\[t-frameST]\[i] , t , i )\nelse :\n\tnuke.message('no expression link found.')" +STARTLINE} addUserKnob {22 copy_data l "copy from selected axis/geo" t "Select the axis/geo, then this will process 'link to selected axis/geo' and 'bake expression link' in once.\n\n* Nuke 11.2 has issue with expression link on this node. It will crash your nuke in some cases, but it will be fine when re-open the nuke script. Because of this issue, recommand to bake the value." -STARTLINE T "thisGRP = nuke.thisGroup()\nthisGRP\['set_link'].execute()\nthisGRP\['bake_link'].execute()"} addUserKnob {20 grp_3dpreview l "Pointcloud preview" n 1} grp_3dpreview 0 addUserKnob {4 display_ptc_type l "display type" t "When you open this node's panel, you can check the pointcloud under 3D view.\n\nnone\nwill not show the pointcloud in 3D\n\nraw pointcloud\nshow the pointcloud from input data, without any effects from this node\n\nwith matte applied\nThis can show the instant result of the projection. Since it feedback in real time, it might slow down the progress in 3D space." M {"no pointcloud preview" "raw pointcloud" "with matte applied" ""}} display_ptc_type "raw pointcloud" addUserKnob {41 detail l "point detail" T PositionToPoints.detail} addUserKnob {41 pointSize l "point size" T PositionToPoints.pointSize} addUserKnob {20 endGroup n -1} addUserKnob {26 spacer l "" +STARTLINE T
} addUserKnob {26 title_falloff l FALLOFF} addUserKnob {13 cube3d_falloff l "cube3D falloff" +DISABLED} cube3d_falloff {1 1 1} addUserKnob {41 falloff_type l "falloff type" T menu01.falloff_type} addUserKnob {7 uniform_falloff l "uniform falloff" t "This is a globel falloff value. Support for any shape of matte." R 0.001 1} uniform_falloff 0.5 addUserKnob {7 exp_in l "exponential in" +DISABLED R 0.1 10} exp_in 1 addUserKnob {7 exp_out l out -STARTLINE +DISABLED R 0.1 10} exp_out 4 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.2} addUserKnob {26 l_DATE l "Date Modified" T 2020-09-04} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"v1.2
'PosMatte'
  - fix '2D sample' will break animated '3D pos' knob
  - fix 'cube3D falloff' separation
  - fix matte: cube pivot, also in 3D preview
'PosProjection'
  - support overscan

1.1
'PosMatte'
  - corrected pivot result
  - 'position' knob label changed to 'world position'

1.0
- using Deep2VP setup in 2D comp\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -1509 ypos 255 bdwidth 270 bdheight 479 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x7f7f7fff label bin note_font_size 42 xpos -1164 ypos 257 bdwidth 452 bdheight 1357 } Input { inputs 0 name CG xpos 0 ypos -32 } Dot { name Dot1 xpos 34 ypos 86 } set N1e8ac800 [stack 0] Unpremult { channels all name Unpremult1 xpos -524 ypos 79 disable {{!parent.unpremult_src}} } set N1e8ac400 [stack 0] Shuffle { in none in2 alpha alpha red2 name shuffle_pos xpos -524 ypos 167 } Remove { operation keep channels rgba name Remove3 xpos -524 ypos 247 } Add { channels rgb value {{-geoCTRL.translate} {-geoCTRL.translate} {-geoCTRL.translate} {curve}} name Add1 xpos -524 ypos 313 } Add { channels rgb value {{-parent.mat_pivot} {-parent.mat_pivot} {-parent.mat_pivot} {curve}} name Add3 xpos -524 ypos 395 } ColorMatrix { matrix { {{ax_data.world_matrix.0} {ax_data.world_matrix.1} {ax_data.world_matrix.2}} {{ax_data.world_matrix.4} {ax_data.world_matrix.5} {ax_data.world_matrix.6}} {{ax_data.world_matrix.8} {ax_data.world_matrix.9} {ax_data.world_matrix.10}} } invert true name ColorMatrix1 xpos -524 ypos 523 } Add { channels rgb value {{parent.mat_pivot} {parent.mat_pivot} {parent.mat_pivot} {curve}} name Add2 xpos -524 ypos 627 } Dot { name Dot2 xpos -490 ypos 707 } set N1e8d4800 [stack 0] Expression { temp_name0 circle temp_expr0 "sqrt( pow2( red ) + pow2( blue ) )" temp_name1 height temp_expr1 "abs( green )" expr3 "( \[value parent.invert_matte] ? clamp( max( circle , height ) ) : 1 - clamp( max( circle , height ) ) ) * alpha" name Expression3 label cylinder xpos -404 ypos 782 } push $N1e8d4800 Expression { temp_name0 newR temp_expr0 "clamp( 1-(1-abs(red)) * (1/ clamp(\[value parent.cube3d_falloff.x],0.00001,1) ) )" temp_name1 newG temp_expr1 "clamp( 1-(1-abs(green)) * (1/ clamp(\[value parent.cube3d_falloff.y],0.00001,1) ) )" temp_name2 newB temp_expr2 "clamp( 1-(1-abs(blue)) * (1/ clamp(\[value parent.cube3d_falloff.z],0.00001,1) ) )" expr3 "( \[value parent.invert_matte] ? clamp(max(abs(newR),abs(newG),abs(newB))) : 1 - clamp(max(abs(newR),abs(newG),abs(newB))) ) * alpha" name Expression7 label cube xpos -524 ypos 781 } push $N1e8d4800 Expression { temp_name0 shape temp_expr0 "clamp( sqrt( pow2(red) + pow2(green) + pow2(blue) ) )" expr3 "( \[value parent.invert_matte] ? shape : 1 - shape ) * alpha" name Expression9 label sphere xpos -633 ypos 782 addUserKnob {20 User} addUserKnob {3 type} addUserKnob {1 sphere} sphere "clamp( sqrt( pow2(red) + pow2(green) + pow2(blue) ) )" } Switch { inputs 3 which {{parent.mat_shape}} name Switch1 xpos -524 ypos 882 } Expression { temp_name0 gfo temp_expr0 "alpha * (1/ clamp(\[value parent.uniform_falloff],0.00001,1) )" expr3 "\[value type] == 0 ? ( gfo > 0 ? 1 : 0 ) : \[value type] == 1 ? gfo : \[value type] == 2 ? smoothstep( 0 , 1 , gfo ) : \[value type] == 3 ? clamp( pow2 ( gfo ) ) : \[value type] == 4 ? clamp( gfo ** 3 ) : pow( 1 - pow( 1 - gfo , \[value parent.exp_in] ) , \[value parent.exp_out] )" name Expression4 label falloff xpos -524 ypos 953 addUserKnob {20 User} addUserKnob {3 type} type {{parent.falloff_type}} } push $N1e8ac800 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 0 ypos 953 } Premult { channels all name Premult1 xpos 0 ypos 1092 disable {{!parent.premult_result}} } Dot { name Dot3 xpos 34 ypos 1186 } set N1f92a800 [stack 0] add_layer {ptc ptc.red ptc.green ptc.blue} Shuffle { in {{{shuffle_pos.in}}} out ptc name Shuffle3 xpos -525 ypos 1183 } Remove { operation keep channels rgba channels2 ptc name Remove1 xpos -525 ypos 1264 } Unpremult { channels all name Unpremult2 xpos -525 ypos 1346 } Expression { expr3 "alpha > 0 ? 1 : 0" name Expression5 xpos -525 ypos 1440 } push $N1e8ac400 Dot { name Dot8 xpos -969 ypos 89 } Shuffle { in {{{shuffle_pos.in}}} out ptc name Shuffle2 xpos -1003 ypos 1276 } Remove { operation keep channels rgba channels2 ptc name Remove2 xpos -1003 ypos 1358 } push 0 Switch { inputs 3 which {{parent.display_ptc_type}} name Switch2 xpos -1003 ypos 1440 } PositionToPoints2 { display textured render_mode textured P_channel ptc detail 0.1 pointSize 1 name PositionToPoints xpos -1003 ypos 1499 disable {{!parent.display_ptc_type}} } Cylinder { inputs 0 display wireframe selectable false render_mode off rows 1 columns 10 name Cylinder1 xpos 631 ypos 222 } Cube { inputs 0 display wireframe selectable false render_mode off cast_shadow false receive_shadow false rows 1 columns 1 separate_faces false uniform_scale 2 name Cube1 xpos 508 ypos 220 } Sphere { inputs 0 display wireframe selectable false render_mode off cast_shadow false receive_shadow false rows 8 columns 8 name Sphere1 xpos 387 ypos 218 } Switch { inputs 3 which {{mat_shape}} name Switch4 xpos 508 ypos 291 } TransformGeo { name geoCTRL xpos 508 ypos 373 } Scene { display wireframe render_mode wireframe name Scene1 xpos 518 ypos 1011 } push 0 ScanlineRender { inputs 2 conservative_shader_sampling false motion_vectors_type off MB_channel none name ScanlineRender1 xpos 508 ypos 1133 } push $N1f92a800 Switch { inputs 2 name preview_3D xpos 0 ypos 1337 } Output { name Output1 xpos 0 ypos 1644 } NoOp { inputs 0 name menu01 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['falloff_type'].getValue() == 5 :\n thisGRP\['exp_in'].setEnabled(True)\n thisGRP\['exp_out'].setEnabled(True)\nelse :\n thisGRP\['exp_in'].setEnabled(False)\n thisGRP\['exp_out'].setEnabled(False)\n" xpos -1420 ypos 400 addUserKnob {20 User} addUserKnob {4 falloff_type l "falloff type" M {none linear smooth quadratic cubic exponential}} falloff_type linear } NoOp { inputs 0 name menu02 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['mat_shape'].getValue() == 1 :\n thisGRP\['cube3d_falloff'].setEnabled(True)\nelse :\n thisGRP\['cube3d_falloff'].setEnabled(False)\n" xpos -1421 ypos 461 addUserKnob {20 User} addUserKnob {4 mat_shape l shape M {Sphere Cube Cylinder}} } NoOp { inputs 0 name menu03 knobChanged "\nloop = \['red','green','blue']\nsamPos = nuke.thisGroup()\['pos2D'].getValue()\nfor i in range(3) :\n nuke.thisGroup()\['mat_translate'].setValue( nuke.toNode('shuffle_pos').sample( loop\[i], samPos\[0], samPos\[1] ) , i )\n" xpos -1420 ypos 529 addUserKnob {20 User} addUserKnob {12 pos2D l "2D pos"} } Axis { inputs 0 rot_order {{parent.mat_rot_order}} rotate {{parent.mat_rotate} {parent.mat_rotate} {parent.mat_rotate}} scaling {{parent.mat_scaling} {parent.mat_scaling} {parent.mat_scaling}} uniform_scale {{parent.mat_uniform_scale}} skew {{parent.mat_skew} {parent.mat_skew} {parent.mat_skew}} pivot {{parent.mat_pivot} {parent.mat_pivot} {parent.mat_pivot}} name ax_data xpos -849 ypos 510 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_PosPattern_MJ.gizmo ================================================ Group { name PosPattern tile_color 0x5f3f7fff addUserKnob {20 tab_general l General} addUserKnob {41 position l "world position" t "Select position (world space) channel.\nIf position is camera space, use 'ConvertPNZ' to convert to world space." T shuffle_pos.in} addUserKnob {6 unpremult_src l "unpremult source" t "Anti-aliasing edge will process improper matte on the edge. Unpremult the data with alpha will fix this issue.\n\n* input must contain alpha in alpha channel.\n** uncheck this box if position data is un-filtered.\n*** this can be fix the external edge, but not the intersect edge." +STARTLINE} addUserKnob {6 premult_result l "premult result" t "Toggle the premult result." -STARTLINE} premult_result true addUserKnob {26 title_pattern l PATTERN} addUserKnob {41 pattern_type l "pattern type" t "Select parttern type on world space position.\n\nfBm : octaves, lacunarity, gain, gamma setting available.\nturbulence : octaves, lacunarity, gain, gamma setting available.\nnoise : gain, gamma setting available.\nrandom : gain, gamma setting available.\nstripes : xyz can be enable separate. gain, gamma setting available.\nripple : gain, gamma setting available.\nrays : gain, gamma, number of rays setting available." T menu.pattern_type} addUserKnob {41 file_menu l @FolderIcon T transformation.file_menu} addUserKnob {41 snap_menu l @AxisIcon -STARTLINE T transformation.snap_menu} addUserKnob {41 n_translate l translate T transformation.translate} addUserKnob {41 n_scale l scale T transformation.scaling} addUserKnob {41 n_uniform_scale l "uniform scale" T transformation.uniform_scale} addUserKnob {6 invert l "invert pattern" +STARTLINE} addUserKnob {26 ""} addUserKnob {6 stripes_x l x +HIDDEN +STARTLINE} stripes_x true addUserKnob {6 stripes_y l y -STARTLINE +HIDDEN} stripes_y true addUserKnob {6 stripes_z l z -STARTLINE +HIDDEN} stripes_z true addUserKnob {3 octaves} octaves 4 addUserKnob {7 lacunarity R 1 10} lacunarity 2 addUserKnob {7 gain R 0.1 2} gain 1 addUserKnob {7 gamma R 0 2} gamma 1 addUserKnob {3 rays l "numbers of rays" +HIDDEN} rays 10 addUserKnob {26 ""} addUserKnob {20 grp_3dpreview l "Pointcloud preview" n 1} grp_3dpreview 0 addUserKnob {4 display_ptc_type l "display type" t "When you open this node's panel, you can check the pointcloud under 3D view.\n\nnone\nwill not show the pointcloud in 3D\n\nraw pointcloud\nshow the pointcloud from input data, without any effects from this node\n\nwith pattern applied\nThis can show the instant result of the pattern. Since it feedback in real time, it might slow down the progress in 3D space." M {"no pointcloud preview" "raw pointcloud" "with pattern applied" "" "" ""}} display_ptc_type "raw pointcloud" addUserKnob {41 detail l "point detail" T PositionToPoints.detail} addUserKnob {41 pointSize l "point size" T PositionToPoints.pointSize} addUserKnob {20 endGroup n -1} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.2} addUserKnob {26 l_DATE l "Date Modified" T 2020-09-04} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"v1.2
'PosMatte'
  - fix '2D sample' will break animated '3D pos' knob
  - fix 'cube3D falloff' separation
  - fix matte: cube pivot, also in 3D preview
'PosProjection'
  - support overscan

1.1
'PosMatte'
  - corrected pivot result
  - 'position' knob label changed to 'world position'

1.0
- using Deep2VP setup in 2D comp\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -2000 ypos 339 bdwidth 368 bdheight 186 } BackdropNode { inputs 0 name BackdropNode2 label bin xpos -1535 ypos 169 bdwidth 498 bdheight 1286 } NoOp { inputs 0 name menu knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['pattern_type'].getValue() == 0 or thisGRP\['pattern_type'].getValue() == 1 :\n thisGRP\['octaves'].setVisible(True)\n thisGRP\['lacunarity'].setVisible(True)\nelse :\n thisGRP\['octaves'].setVisible(False)\n thisGRP\['lacunarity'].setVisible(False)\n\nif thisGRP\['pattern_type'].getValue() == 4 :\n thisGRP\['stripes_x'].setVisible(True)\n thisGRP\['stripes_y'].setVisible(True)\n thisGRP\['stripes_z'].setVisible(True)\nelse :\n thisGRP\['stripes_x'].setVisible(False)\n thisGRP\['stripes_y'].setVisible(False)\n thisGRP\['stripes_z'].setVisible(False)\n\nif thisGRP\['pattern_type'].getValue() == 6 :\n thisGRP\['rays'].setVisible(True)\nelse :\n thisGRP\['rays'].setVisible(False)\n" xpos -1918 ypos 440 addUserKnob {20 User} addUserKnob {4 pattern_type l "pattern type" M {fBm turbulence noise random stripes ripple rays "" "" ""}} } Input { inputs 0 name CG xpos 0 ypos 2 } Dot { name Dot1 xpos 34 ypos 122 } set N1e6bf800 [stack 0] Unpremult { channels all name Unpremult1 xpos -572 ypos 112 disable {{!parent.unpremult_src}} } set N1e6bf400 [stack 0] Shuffle { in none in2 alpha alpha red2 name shuffle_pos xpos -572 ypos 206 } Remove { operation keep channels rgba name Remove3 xpos -572 ypos 288 } Dot { name Dot2 xpos -538 ypos 370 } set N1e6be800 [stack 0] Expression { temp_name0 pnx temp_expr0 "( red - \[value parent.n_translate.x] ) * ( 1 / ( \[value parent.n_uniform_scale] * \[value parent.n_scale.x] ) ) " temp_name1 pny temp_expr1 "( green - \[value parent.n_translate.y] ) * ( 1 / ( \[value parent.n_uniform_scale] * \[value parent.n_scale.y] ) )" temp_name2 pnz temp_expr2 "( blue - \[value parent.n_translate.z] ) * ( 1 / ( \[value parent.n_uniform_scale] * \[value parent.n_scale.z] ) )" expr3 "clamp( ( ( sin( atan(pnx, pnz) * \[value parent.rays] + atan(pnx, pny) * \[value parent.rays] + atan(pny, pnz) * \[value parent.rays] ) +1) /2 ) * \[value gain]) * alpha" name Expression7 label rays xpos -197 ypos 499 } push $N1e6be800 Expression { temp_name0 pnx temp_expr0 "( red - \[value parent.n_translate.x] ) * ( 1 / ( \[value parent.n_uniform_scale]*\[value parent.n_scale.x] ) )" temp_name1 pny temp_expr1 "( green - \[value parent.n_translate.y] ) * ( 1 / ( \[value parent.n_uniform_scale]*\[value parent.n_scale.y] ) )" temp_name2 pnz temp_expr2 "( blue - \[value parent.n_translate.z] ) * ( 1 / ( \[value parent.n_uniform_scale]*\[value parent.n_scale.z] ) )" expr3 "clamp ( ( ( sin( sqrt( pow2(pnx) + pow2(pny) + pow2(pnz) ) ) +1) /2 ) * \[value gain] ) * alpha" name Expression6 label ripple xpos -331 ypos 499 } push $N1e6be800 Expression { temp_name0 pnx temp_expr0 "\[value status_x] == 0 ? 0 : ( sin( ( red - \[value parent.n_translate.x] ) * ( 1 / ( \[value parent.n_uniform_scale] * \[value parent.n_scale.x] ) ) ) + 1 ) / 2" temp_name1 pny temp_expr1 "\[value status_y] == 0 ? 0 : ( sin( ( green - \[value parent.n_translate.y] ) * ( 1 / ( \[value parent.n_uniform_scale] * \[value parent.n_scale.y] ) ) ) + 1 ) / 2" temp_name2 pnz temp_expr2 "\[value status_z] == 0 ? 0 : ( sin( ( blue - \[value parent.n_translate.z] ) * ( 1 / ( \[value parent.n_uniform_scale] * \[value parent.n_scale.z] ) ) ) + 1 ) / 2" expr3 "max( clamp( pnx * \[value gain] ), clamp( pny * \[value gain] ), clamp( pnz * \[value gain] ) ) * alpha" name Expression5 label strip xpos -451 ypos 501 addUserKnob {20 User} addUserKnob {7 status_x} status_x {{parent.stripes_x}} addUserKnob {7 status_y} status_y {{parent.stripes_y}} addUserKnob {7 status_z} status_z {{parent.stripes_z}} } push $N1e6be800 Expression { temp_name0 pnx temp_expr0 "( red - \[value parent.n_translate.x] ) * ( 1 / ( \[value parent.n_uniform_scale] * \[value parent.n_scale.x] ) )" temp_name1 pny temp_expr1 "( green - \[value parent.n_translate.y] ) * ( 1 / ( \[value parent.n_uniform_scale] * \[value parent.n_scale.y] ) )" temp_name2 pnz temp_expr2 "( blue - \[value parent.n_translate.z] ) * ( 1 / ( \[value parent.n_uniform_scale] * \[value parent.n_scale.z] ) )" expr3 "clamp( random(pnx, pny, pnz) * \[value gain] ) * alpha" name Expression4 label random xpos -572 ypos 501 } push $N1e6be800 Expression { temp_name0 pnx temp_expr0 "( red - \[value parent.n_translate.x] ) * ( 1 / ( \[value parent.n_uniform_scale] * \[value parent.n_scale.x] ) )" temp_name1 pny temp_expr1 "( green - \[value parent.n_translate.y] ) * ( 1 / ( \[value parent.n_uniform_scale] * \[value parent.n_scale.y] ) )" temp_name2 pnz temp_expr2 "( blue - \[value parent.n_translate.z] ) * ( 1 / ( \[value parent.n_uniform_scale] * \[value parent.n_scale.z] ) )" expr3 "clamp( (noise(pnx, pny, pnz)+0.5) * \[value gain] ) * alpha" name Expression3 label noise xpos -703 ypos 499 } push $N1e6be800 Expression { temp_name0 pnx temp_expr0 "( red - \[value parent.n_translate.x] ) * ( 1 / ( \[value parent.n_uniform_scale] * \[value parent.n_scale.x] ) )" temp_name1 pny temp_expr1 "( green - \[value parent.n_translate.y] ) * ( 1 / ( \[value parent.n_uniform_scale] * \[value parent.n_scale.y] ) )" temp_name2 pnz temp_expr2 "( blue - \[value parent.n_translate.z] ) * ( 1 / ( \[value parent.n_uniform_scale] * \[value parent.n_scale.z] ) )" expr3 "clamp( turbulence(pnx, pny, pnz, \[value octaves], \[value lacunarity], \[value gain]/2) ) * alpha" name Expression2 label turbulence xpos -837 ypos 499 } push $N1e6be800 Expression { temp_name0 pnx temp_expr0 "( red - \[value parent.n_translate.x] ) * ( 1 / ( \[value parent.n_uniform_scale] * \[value parent.n_scale.x] ) )" temp_name1 pny temp_expr1 "( green - \[value parent.n_translate.y] ) * ( 1 / ( \[value parent.n_uniform_scale] * \[value parent.n_scale.y] ) )" temp_name2 pnz temp_expr2 "( blue - \[value parent.n_translate.z] ) * ( 1 / ( \[value parent.n_uniform_scale] * \[value parent.n_scale.z] ) )" expr3 "clamp( fBm(pnx, pny, pnz, \[value octaves], \[value lacunarity], \[value gain]/2) ) * alpha" name Expression1 label fBm xpos -968 ypos 499 } Switch { inputs 7 which {{pattern_type}} name Switch1 xpos -572 ypos 644 } Invert { channels alpha name Invert1 xpos -572 ypos 726 disable {{!invert}} } Gamma { channels alpha value {{parent.gamma}} name Gamma1 xpos -572 ypos 820 } push $N1e6bf800 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 0 ypos 820 } Premult { channels all name Premult1 xpos 0 ypos 914 } Dot { name Dot5 xpos 34 ypos 1010 } set N1e72f800 [stack 0] Output { name Output1 xpos 0 ypos 1299 } Axis { inputs 0 display off name transformation xpos -1173 ypos 389 } push $N1e72f800 add_layer {ptc ptc.red ptc.green ptc.blue} Shuffle { in {{{shuffle_pos.in}}} out ptc name Shuffle3 xpos -573 ypos 1006 } Remove { operation keep channels rgba channels2 ptc name Remove1 xpos -573 ypos 1088 } Unpremult { channels all name Unpremult2 xpos -573 ypos 1170 } Expression { expr3 "alpha > 0 ? 1 : 0" name Expression8 xpos -573 ypos 1264 } push $N1e6bf400 Dot { name Dot3 xpos -1295 ypos 122 } Shuffle { in {{{shuffle_pos.in}}} out ptc name Shuffle1 xpos -1329 ypos 1100 } Remove { operation keep channels rgba channels2 ptc name Remove2 xpos -1329 ypos 1182 } push 0 Switch { inputs 3 which {{parent.display_ptc_type}} name Switch2 xpos -1329 ypos 1264 } PositionToPoints2 { display textured render_mode off cast_shadow false receive_shadow false P_channel ptc detail 0.1 pointSize 1 name PositionToPoints xpos -1329 ypos 1346 disable {{"parent.display_ptc_type == 0 ? 1 : 0"}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_PosProjection_MJ.gizmo ================================================ Group { name PosProjection tile_color 0x5f3f7fff addUserKnob {20 tab_general l General} addUserKnob {41 position l "world position" t "Select position (world space) channel.\nIf position is camera space, use 'ConvertPNZ' to convert to world space." T shuffle_pos.in} addUserKnob {6 unpremult_src l "unpremult source" t "Anti-aliasing edge will process improper matte on the edge. Unpremult the data with alpha will fix this issue.\n\n* input must contain alpha in alpha channel.\n** uncheck this box if position data is un-filtered.\n*** this can be fix the external edge, but not the intersect edge." +STARTLINE} addUserKnob {26 title_projcam l PROJECTION} addUserKnob {41 freeze_frame l "freeze frame" t "Check this box to enable framehold function for animated camera" T menu01.freeze_frame} addUserKnob {3 proj_framehold l framehold t "Input the frame number and freeze the projection camera's animation" +DISABLED} proj_framehold 1001 addUserKnob {22 setframe l "set current frame" t "Automatically set frame frame into framehold knob." -STARTLINE +DISABLED T "nuke.thisGroup()\['proj_framehold'].setValue( nuke.frame() )"} addUserKnob {14 overscan t "The number of pixels to render beyond the left/right and top/bottom of frame, if requested by subsequent operations." R 0 100} addUserKnob {78 proj_zrange l "project z range" n 4} proj_zrange {0 1 999999 1000000} addUserKnob {26 spacer l "" +STARTLINE T
} addUserKnob {22 set_link l "link to selected camera" t "Selected any Camera nodes and this button will link the position to the projection camera." T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\nmainKnobs = \['proj_focal','proj_haperture','proj_win_translate','proj_win_scale','proj_winroll','proj_world_matrix']\ndefaultKnobs = \{\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll' ,\n\t\t\t'world matrix' : 'world_matrix'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tfor knob in mainKnobs :\n\t\t\t\tthisGRP\[knob].clearAnimated()\n\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression( '\{0\}.focal'.format(CAMnode) )\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression( '\{0\}.haperture'.format(CAMnode) )\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression( '\{0\}.win_translate'.format(CAMnode) )\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression( '\{0\}.win_scale'.format(CAMnode) )\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression( '\{0\}.winroll'.format(CAMnode) )\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression( '\{0\}.world_matrix'.format(CAMnode) )\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tfor knob in mainKnobs :\n\t\t\t\t\tthisGRP\[knob].clearAnimated()\n\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression( '\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']) )\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression( '\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']) )\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression( '\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']) )\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression( '\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']) )\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression( '\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['winroll']) )\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression( '\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']) )\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['proj_focal','proj_haperture','proj_win_translate','proj_win_scale','proj_winroll','proj_world_matrix']\n\nfor i in range (0, len(mainKnobs), 1) :\n thisGRP\[mainKnobs\[i]].clearAnimated()"} addUserKnob {22 bake_link l "bake expression link" t "Baked out the existing expression link back to this node itself. After that, camera node is not required for this node anymore. Baked value is base on the frame range in project setting of the nuke script.\n\n* Nuke 11.2 has issue with expression link on this node. It will crash your nuke in some cases, but it will be fine when re-open the nuke script. Because of this issue, recommand to bake the value." T "thisGRP = nuke.thisGroup()\n\nframeST = nuke.root().firstFrame()\nframeED = nuke.root().lastFrame()\n\nallknobs = \['proj_focal','proj_haperture','proj_win_translate','proj_win_scale','proj_winroll','proj_world_matrix']\nalldata = \{\}\n\nchknobs = 0\nfor knob in allknobs :\n\tif thisGRP\[knob].hasExpression() :\n\t\tchknobs = 1\n\nif chknobs :\n\tfor knob in allknobs :\n\t\tfor t in range( frameST, frameED+1, 1 ) :\n\t\t\ttry :\n\t\t\t\talldata\[knob].append( thisGRP\[knob].getValueAt(t) )\n\t\t\texcept :\n\t\t\t\talldata\[knob] = \[ thisGRP\[knob].getValueAt(t) ]\n\n\tfor knob in allknobs :\n\t\tthisGRP\[knob].clearAnimated()\n\t\tthisGRP\[knob].setAnimated()\n\n\tfor knob in allknobs :\n\t\tfor t in range( frameST, frameED+1, 1 ) :\n\t\t\tif type( alldata\[knob]\[t-frameST] ) is float :\n\t\t\t\tthisGRP\[knob].setValueAt( alldata\[knob]\[t-frameST] , t )\n\t\t\tif type( alldata\[knob]\[t-frameST] ) is list :\n\t\t\t\tfor i in range( len( alldata\[knob]\[t-frameST] ) ) :\n\t\t\t\t\tthisGRP\[knob].setValueAt( alldata\[knob]\[t-frameST]\[i] , t , i )\nelse :\n\tnuke.message('no expression link found.')" +STARTLINE} addUserKnob {22 copy_data l "copy from selected camera" t "Select the camera, then this will process 'link to selected camera' and 'bake expression link' in once.\n\n* Nuke 11.2 has issue with expression link on this node. It will crash your nuke in some cases, but it will be fine when re-open the nuke script. Because of this issue, recommand to bake the value." -STARTLINE T "thisGRP = nuke.thisGroup()\nthisGRP\['set_link'].execute()\nthisGRP\['bake_link'].execute()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 proj_focal l "focal length" R 5 100} addUserKnob {7 proj_haperture l "horiz aperture" R 0.1 50} addUserKnob {30 proj_win_translate l "window translate"} addUserKnob {30 proj_win_scale l "window scale"} addUserKnob {7 proj_winroll l "window roll" R -45 45} addUserKnob {41 proj_world_matrix l "world matrix" T ui_mtx.matrix} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 grp_3dpreview l "Pointcloud preview" n 1} grp_3dpreview 0 addUserKnob {4 display_ptc_type l "display type" t "When you open this node's panel, you can check the pointcloud under 3D view.\n\nnone\nwill not show the pointcloud in 3D\n\nraw pointcloud\nshow the pointcloud from input data, without any effects from this node\n\nwith project image\nThis can show the instant result of the projection. Since it feedback in real time, it might slow down the progress in 3D space." M {"no pointcloud preview" "raw pointcloud" "with project image (slow)" "" "" "" "" ""}} display_ptc_type "raw pointcloud" addUserKnob {41 detail l "point detail" t "When you open this node's panel, you can check the pointcloud under 3D view.\n\nThis control the density of the pointcloud." T PositionToPoints.detail} addUserKnob {41 pointSize l "point size" t "When you open this node's panel, you can check the pointcloud under 3D view.\n\nThis control the point size of the pointcloud." T PositionToPoints.pointSize} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 spacer01 l "" +STARTLINE T
} addUserKnob {26 title_output l "OUTPUT SETTING"} addUserKnob {4 output t "wrapped texture + source\nwhich is a projected texture composite with the input.\n\nwrapped texture\nwhich is only projected texture\n\nuv\nwhich is a uv map, can use this with STMap in downstream." M {"wrapped texture + source" "wrapped texture" uv "" ""}} addUserKnob {20 grp_stmap l "STMap setting" n 1} grp_stmap 0 addUserKnob {41 channels l "apply channels" t "Select channel to apply this projected texture." T STMap.channels} addUserKnob {41 filter t "pixel filter of projected texture." T STMap.filter} addUserKnob {6 black_outside l "black outside" +STARTLINE} black_outside true addUserKnob {20 endGroup n -1} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.2} addUserKnob {26 l_DATE l "Date Modified" T 2020-09-04} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"v1.2
'PosMatte'
  - fix '2D sample' will break animated '3D pos' knob
  - fix 'cube3D falloff' separation
  - fix matte: cube pivot, also in 3D preview
'PosProjection'
  - support overscan

1.1
'PosMatte'
  - corrected pivot result
  - 'position' knob label changed to 'world position'

1.0
- using Deep2VP setup in 2D comp\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "don't touch" note_font_size 42 xpos -1839 ypos 247 bdwidth 390 bdheight 201 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x4f4f4fff label bin note_font_size 42 xpos -1375 ypos 247 bdwidth 484 bdheight 1262 } NoOp { inputs 0 name menu01 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['freeze_frame'].getValue() == 1 :\n thisGRP\['proj_framehold'].setEnabled(True)\n thisGRP\['setframe'].setEnabled(True)\nelse :\n thisGRP\['proj_framehold'].setEnabled(False)\n thisGRP\['setframe'].setEnabled(False)\n" xpos -1805 ypos 322 addUserKnob {20 User} addUserKnob {6 freeze_frame l "freeze frame" +STARTLINE} } NoOp { inputs 0 name menu02 knobChanged "\nthisGRP = nuke.thisGroup()\nif not thisGRP\['proj_zrange'].isAnimated() :\n thisGRP\['proj_zrange_buffer'].clearAnimated()\n thisGRP\['proj_zrange_buffer'].setValue( thisGRP\['proj_zrange'].getValue() )\nelse :\n thisGRP\['proj_zrange_buffer'].setAnimated()\n anizrange0 = thisGRP\['proj_zrange'].animation( 0 )\n anizrange1 = thisGRP\['proj_zrange'].animation( 1 )\n anizrange2 = thisGRP\['proj_zrange'].animation( 2 )\n anizrange3 = thisGRP\['proj_zrange'].animation( 3 )\n for key in anizrange0.keys() :\n thisGRP\['proj_zrange_buffer'].setValueAt( key.y, key.x, 0 )\n for key in anizrange1.keys() :\n thisGRP\['proj_zrange_buffer'].setValueAt( key.y, key.x, 1 )\n for key in anizrange2.keys() :\n thisGRP\['proj_zrange_buffer'].setValueAt( key.y, key.x, 2 )\n for key in anizrange3.keys() :\n thisGRP\['proj_zrange_buffer'].setValueAt( key.y, key.x, 3 )\n" xpos -1679 ypos 321 addUserKnob {20 User} addUserKnob {78 proj_zrange l "distance range" n 4} } Input { inputs 0 name CG xpos 132 ypos -107 } Dot { name Dot1 xpos 166 ypos 150 } set N1e7e7400 [stack 0] Unpremult { channels all name Unpremult1 xpos -524 ypos 140 disable {{!parent.unpremult_src}} } set N1e7e7000 [stack 0] Shuffle { in none in2 alpha alpha red2 name shuffle_pos xpos -524 ypos 275 } Remove { operation keep channels rgba name Remove1 xpos -524 ypos 346 } Add { channels rgb value {{-projCam_data.world_matrix.3} {-projCam_data.world_matrix.7} {-projCam_data.world_matrix.11} {curve}} name Add1 xpos -524 ypos 428 } ColorMatrix { matrix { {{projCam_data.world_matrix.0} {projCam_data.world_matrix.1} {projCam_data.world_matrix.2}} {{projCam_data.world_matrix.4} {projCam_data.world_matrix.5} {projCam_data.world_matrix.6}} {{projCam_data.world_matrix.8} {projCam_data.world_matrix.9} {projCam_data.world_matrix.10}} } invert true name ColorMatrix1 xpos -524 ypos 510 } Expression { temp_name0 newR temp_expr0 "( red - ( \[value globalm.hratio] * abs( blue ) * \[value projFB_data.win_translate.u] / 2 ) ) * 1 / \[value projFB_data.win_scale.u]" temp_name1 newG temp_expr1 "( green - ( \[value globalm.hratio] * abs( blue ) * \[value projFB_data.win_translate.v] / 2 ) ) * 1 / \[value projFB_data.win_scale.v]" expr0 "newR * \[value projFB_data.world_matrix.0] + newG *\n\[value projFB_data.world_matrix.1]" expr1 "newR * \[value projFB_data.world_matrix.4] + newG *\n\[value projFB_data.world_matrix.5]" name Expression1 xpos -524 ypos 592 } Dot { name Dot2 xpos -490 ypos 710 } set N1e809800 [stack 0] Expression { expr0 "( r / ( abs(b) * \[value globalm.hratio] ) ) + 0.5" expr1 "( g / ( ( abs(b) * \[value globalm.hratio] ) / ( \[value tex_dot.width] / \[value tex_dot.height] ) ) ) + 0.5" name Expression2 xpos -524 ypos 816 } set N1e809400 [stack 0] Dot { name Dot6 xpos -265 ypos 819 } set N1e809000 [stack 0] Dot { name Dot7 xpos -265 ypos 1168 } push $N1e809800 Dot { name Dot3 xpos -697 ypos 710 } Expression { temp_name0 posb temp_expr0 "abs( blue )" expr3 "posb < \[value parent.proj_zrange.0] || posb > \[value parent.proj_zrange.3] ? 0 : posb < \[value parent.proj_zrange.1] ? clamp( ( posb - \[value parent.proj_zrange.0] ) / ( \[value parent.proj_zrange.1] - \[value parent.proj_zrange.0] ) ) * alpha : posb > \[value parent.proj_zrange.2] ? clamp( 1 - ( posb - \[value parent.proj_zrange.2] ) / ( \[value parent.proj_zrange.3] - \[value parent.proj_zrange.2] ) ) * alpha : alpha" name Expression3 xpos -731 ypos 811 } Dot { name Dot4 xpos -697 ypos 930 } push $N1e809400 Merge2 { inputs 2 operation mask name Merge1 xpos -524 ypos 926 } push $N1e809000 Input { inputs 0 name tex xpos -134 ypos -106 number 1 } Crop { box {{-parent.overscan.w} {-parent.overscan.h} {input.width+parent.overscan.w} {input.height+parent.overscan.h}} crop {{parent.black_outside}} name Crop1 xpos -134 ypos -26 } Dot { name tex_dot xpos -100 ypos 56 } STMap { inputs 2 channels rgba uv rgba maskChannel rgba.alpha name STMap xpos -134 ypos 815 } Merge2 { inputs 2 operation mask name Merge2 xpos -134 ypos 926 } set N1e834800 [stack 0] push $N1e834800 push $N1e7e7400 Merge2 { inputs 2 name Merge3 xpos 132 ypos 926 } Dot { name Dot10 xpos 166 ypos 1061 } set N1e834000 [stack 0] Switch { inputs 3 which {{output}} name Switch2 xpos 132 ypos 1313 } Output { name Output1 xpos 132 ypos 1539 } push $N1e834000 add_layer {ptc ptc.red ptc.green ptc.blue} Shuffle { in {{{shuffle_pos.in}}} out ptc name Shuffle3 xpos -713 ypos 1057 } Remove { operation keep channels rgba channels2 ptc name Remove3 xpos -713 ypos 1139 } Unpremult { channels all name Unpremult2 xpos -713 ypos 1221 } Expression { expr3 "alpha > 0 ? 1 : 0" name Expression5 xpos -713 ypos 1315 } push $N1e7e7000 Dot { name Dot8 xpos -1252 ypos 150 } Shuffle { in {{{shuffle_pos.in}}} out ptc name Shuffle2 xpos -1286 ypos 1151 } Remove { operation keep channels rgba channels2 ptc name Remove2 xpos -1286 ypos 1233 } push 0 Switch { inputs 3 which {{parent.display_ptc_type}} name Switch3 xpos -1286 ypos 1315 } PositionToPoints2 { display textured render_mode off cast_shadow false receive_shadow false P_channel ptc detail 0.1 pointSize 1 name PositionToPoints xpos -1286 ypos 1397 disable {{"parent.display_ptc_type == 0 ? 1 : 0"}} } Camera { inputs 0 display off selectable false rotate {0 0 {"parent.freeze_frame ? \nparent.proj_winroll( parent.proj_framehold ) : \nparent.proj_winroll"}} win_translate {{"parent.freeze_frame ? \nparent.proj_win_translate(parent.proj_framehold) : \nparent.proj_win_translate"} {"parent.freeze_frame ? \nparent.proj_win_translate(parent.proj_framehold) : \nparent.proj_win_translate"}} win_scale {{"parent.freeze_frame ? \nparent.proj_win_scale(parent.proj_framehold) : \nparent.proj_win_scale"} {"parent.freeze_frame ? \nparent.proj_win_scale(parent.proj_framehold) : \nparent.proj_win_scale"}} name projFB_data xpos -1090 ypos 507 } NoOp { inputs 0 name globalm xpos -1097 ypos 629 addUserKnob {20 User} addUserKnob {7 hratio} hratio {{"parent.freeze_frame ? parent.proj_haperture( parent.proj_framehold )/parent.proj_focal( parent.proj_framehold ) : parent.proj_haperture/parent.proj_focal"}} } Camera { inputs 0 display off selectable false useMatrix true matrix { {{"parent.freeze_frame ? parent.proj_world_matrix( parent.proj_framehold ) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix( parent.proj_framehold ) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix( parent.proj_framehold ) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix( parent.proj_framehold ) : parent.proj_world_matrix"}} {{"parent.freeze_frame ? parent.proj_world_matrix( parent.proj_framehold ) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix( parent.proj_framehold ) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix( parent.proj_framehold ) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix( parent.proj_framehold ) : parent.proj_world_matrix"}} {{"parent.freeze_frame ? parent.proj_world_matrix( parent.proj_framehold ) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix( parent.proj_framehold ) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix( parent.proj_framehold ) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix( parent.proj_framehold ) : parent.proj_world_matrix"}} {{"parent.freeze_frame ? parent.proj_world_matrix( parent.proj_framehold ) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix( parent.proj_framehold ) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix( parent.proj_framehold ) : parent.proj_world_matrix"} {"parent.freeze_frame ? parent.proj_world_matrix( parent.proj_framehold ) : parent.proj_world_matrix"}} } name projCam_data xpos -1089 ypos 418 } Camera { inputs 0 useMatrix true matrix { {0 0 0 0} {0 0 0 0} {0 0 0 0} {0 0 0 0} } name ui_mtx xpos -1088 ypos 319 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ProductMatrix4.gizmo ================================================ Group { name ProductMatrix4_ help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N1dd52c30 [stack 0] push $N1dd52c30 push $N1dd52c30 push $N1dd52c30 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } add_layer {matrix0 matrix0.0 matrix0.1 matrix0.2 matrix0.3} MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } add_layer {matrix1 matrix1.0 matrix1.1 matrix1.2 matrix1.3} MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } add_layer {matrix2 matrix2.0 matrix2.1 matrix2.2 matrix2.3} MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } add_layer {matrix3 matrix3.0 matrix3.1 matrix3.2 matrix3.3} MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 selected true xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Pyclopedia.gizmo ================================================ Group { inputs 0 name Pyclopedia onCreate "\nimport os, pydoc, re\n\n##########\n\ndef pyclopediaLoadField( _thisG ) :\n usrStar = \[]\n if _thisG\['use_module'].getValue() :\n importMod = _thisG\['module'].value()\n if len( importMod ) :\n exec ('import \{0\}'.format( importMod ))\n\n try :\n usrStar = pyclopediaListStar( _thisG )\[importMod]\n except :\n pass\n\n else :\n\n try :\n usrStar = pyclopediaListStar( _thisG )\['']\n except :\n pass\n\n try :\n knobstatus = pyclopediaGetKnobs( _thisG )\n\n cline = _thisG\['cmd_line'].value().replace( ' ' , '' )\n kwfilter = _thisG\['keyword_filter'].value().replace( ' ' , '' )\n if len( cline ) :\n if knobstatus\[0] == 0 :\n _thisG\['basechk'].setValue( cline )\n\n if _thisG\['basechk'].value() == cline :\n if len( knobstatus\[1] ) :\n knobstatus\[1].sort()\n for knob in knobstatus\[1] :\n cline = cline + '.' + _thisG\[knob].value().replace('\[*] ','')\n\n matchStar = pyclopediaMatchStar( usrStar , cline , knobstatus\[0] )\n matchStar.sort()\n matchStar.reverse()\n\n try :\n fields = \[]\n for i in eval( 'dir( \{0\} )'.format( cline ) ) :\n if not i\[:2] == '__' and not i\[:1] == '_' :\n if len(kwfilter) :\n if kwfilter.lower() in i.lower() :\n fields.append(i)\n else :\n fields.append(i)\n\n for star in matchStar :\n try :\n fields.remove( star )\n fields.insert( 0, '\[*] '+star )\n except ValueError :\n pass\n\n ### generate ###\n if len( fields ) :\n _thisG\[ 'field_' + str( knobstatus\[0]+1 ) ].setVisible( True )\n _thisG\[ 'field_' + str( knobstatus\[0]+1 ) ].setValues( fields )\n else :\n nuke.message( 'no more sub-field' )\n except NameError as err :\n nuke.message( 'NameError : \{0\}

Make sure the command line belongs to correct module.'.format( err ) )\n else :\n _thisG\['reset'].execute()\n pyclopediaLoadField( _thisG )\n else :\n nuke.message('command line is empty.')\n except AttributeError as err :\n if nuke.ask( 'AttributeError : \{0\}

Do you want to fix this error?'.format( err ) ) :\n pyclopediaFixField( _thisG )\n\n##########\n\ndef pyclopediaGetKnobs( _thisG ) :\n maxfield = 0\n fieldknobs = \[]\n\n for knob in _thisG.knobs() :\n if knob\[:6] == 'field_' :\n if len( _thisG\[knob].values()\[0] ) :\n fieldknobs.append( knob )\n\n if int( knob.split('_')\[1] ) > maxfield :\n maxfield = int( knob.split('_')\[1] )\n else :\n _thisG\[knob].setVisible( False )\n _thisG\[knob].setValue(0)\n _thisG\[knob].setValues( \[''] )\n\n return maxfield, fieldknobs\n\n##########\n\ndef pyclopediaFixField( _thisG ) :\n if _thisG\['use_module'].getValue() :\n importMod = _thisG\['module'].value()\n if len( importMod ) :\n exec ('import \{0\}'.format( importMod ))\n\n knobstatus = pyclopediaGetKnobs( _thisG )\n\n cline = _thisG\['cmd_line'].value()\n if knobstatus\[0] == 0 :\n _thisG\['basechk'].setValue( cline )\n\n knobstatus\[1].sort()\n\n check = 0\n while check < len(knobstatus\[1]) :\n try :\n temp = \[ _thisG\[knobstatus\[1]\[i]].value() for i in range( check+1 ) ]\n temp.insert( 0, cline )\n eval( 'dir( \{0\} )'.format( '.'.join( temp ) ) )\n check += 1\n except :\n for knob in knobstatus\[1]\[check:] :\n _thisG\[ knob ].setVisible( False )\n _thisG\[ knob ].setValue(0)\n _thisG\[ knob ].setValues( \[''] )\n check = len(knobstatus\[1])\n\n##########\n\ndef pyclopediaShowDoc( _thisG ) :\n try :\n if _thisG\['use_module'].getValue() :\n importMod = _thisG\['module'].value()\n if len( importMod ) :\n exec ('import \{0\}'.format( importMod ))\n\n fieldknobs = \[]\n\n for knob in _thisG.knobs() :\n if knob\[:6] == 'field_' :\n if len( _thisG\[knob].values()\[0] ) :\n fieldknobs.append( knob )\n\n cline = _thisG\['cmd_line'].value()\n\n if len( fieldknobs ) :\n fieldknobs.sort()\n for knob in fieldknobs :\n cline = cline + '.' + _thisG\[knob].value().replace('\[*] ','')\n\n content = pydoc.plain( pydoc.render_doc( eval( cline ) ) )\n\n displayPanel = pyclopediaPanel( cline , content )\n if displayPanel\[1] :\n pyclopediaAddStar( _thisG , displayPanel\[0].value('line') )\n\n except AttributeError as err :\n if nuke.ask( 'AttributeError : \{0\}

Do you want to fix this error?'.format( err ) ) :\n pyclopediaFixField( _thisG )\n _thisG\['show_doc'].execute()\n\n##########\n\ndef pyclopediaPanel( _line , _content ) :\n p = nuke.Panel( 'Help on : \{0\}'.format( _line ) )\n p.addSingleLineInput( 'line' , _line )\n p.addNotepad( '', _content )\n p.addButton('Close')\n p.addButton('Starred this')\n p.setWidth( 960 )\n return ( p , p.show() )\n\n##########\n\ndef pyclopediaBackField( _thisG ) :\n knobstatus = pyclopediaGetKnobs( _thisG )\n\n if knobstatus\[0] :\n _thisG\[ 'field_' + str(knobstatus\[0]) ].setVisible( False )\n _thisG\[ 'field_' + str(knobstatus\[0]) ].setValue(0)\n _thisG\[ 'field_' + str(knobstatus\[0]) ].setValues( \[''] )\n\n##########\n\ndef pyclopediaReset( _thisG ) :\n for knob in _thisG.knobs() :\n if knob\[:6] == 'field_' :\n _thisG\[knob].setVisible( False )\n _thisG\[knob].setValue(0)\n _thisG\[knob].setValues( \[''] )\n _thisG\['basechk'].setValue('')\n\n##########\n\ndef pyclopediaReadStar() :\n nkfolder = \[ os.environ\['HOME'] , '.nuke' ]\n file = open( os.sep.join( nkfolder + \[ 'pyclopedia' , 'favourite' ] ) , 'r' )\n context = file.readlines()\n file.close()\n return context\n\n##########\n\ndef pyclopediaWriteStar( _context=\[] , _mode='update') :\n nkfolder = \[ os.environ\['HOME'] , '.nuke' ]\n if _mode == 'new' :\n os.mkdir( os.sep.join( nkfolder + \[ 'pyclopedia' ] ) )\n file = open( os.sep.join( nkfolder + \[ 'pyclopedia' , 'favourite' ] ) , 'w' )\n if _mode == 'update' :\n file.write( ''.join( _context ) )\n file.close()\n\n##########\n\ndef pyclopediaAddStar( _thisG , _line ) :\n nkfolder = \[ os.environ\['HOME'] , '.nuke' ]\n\n ##### if file not exist, create one\n try :\n context = pyclopediaReadStar()\n except IOError :\n pyclopediaWriteStar( _mode='new' )\n context = \[]\n\n if _thisG\['use_module'].value() :\n fline = '|'.join( \[ _thisG\['module'].value() , _line ] ) + '\\n'\n else :\n fline = '|'.join( \[ '' , _line ] ) + '\\n'\n\n if fline not in context :\n context.append( fline )\n pyclopediaWriteStar( context )\n pyclopediaGetFData( _thisG )\n else :\n nuke.message('This command already in Starred list.')\n\n##########\n\ndef pyclopediaListStar( _thisG ) :\n starItems = \{\}\n try :\n context = pyclopediaReadStar()\n for line in context :\n items = re.split( '\\||\\n' , line )\[:2]\n try :\n starItems\[items\[0]].append( items\[1] )\n except :\n starItems\[items\[0]] = \[ items\[1] ]\n except :\n pass\n return starItems\n\n##########\n\ndef pyclopediaMatchStar( _listStar , _cin , _kcount ) :\n matchStar = \[]\n for star in _listStar :\n if len( star.split('.') ) == _kcount + 2 :\n if star.split('.')\[:_kcount+1] == _cin.split('.') :\n matchStar.append( star.split('.')\[-1:]\[0] )\n return matchStar\n\n##########\n\ndef pyclopediaGetFData( _thisG ) :\n data = pyclopediaListStar( _thisG )\n temp = \[]\n for key, value in data.items() :\n for cmd in value :\n if key == '' :\n temp.append( '\{set ' + '\"\"' + ' ' + cmd + '\}' )\n else :\n temp.append( '\{set \"' + key + '\" ' + cmd + '\}' )\n _thisG\['modStarData'].fromScript( '\\n'.join(temp) )\n\n##########\n\ndef pyclopediaModFData( _thisG ) :\n fmd = _thisG\['modStarData'].toScript().split('\\n')\n context = \[]\n for line in fmd :\n if len( ''.join( line\[5:-1].replace('\"','').split(' ') ) ) :\n mod = ' '.join( line\[5:-1].split(' ')\[:-1] )\n cmd = line\[5:-1].split(' ')\[-1:]\[0]\n context.append( ''.join( \[ '|'.join( \[ mod, cmd ] ).replace('\"','') , '\\n' ] ) )\n try :\n pyclopediaWriteStar( context )\n except :\n pyclopediaWriteStar( _mode='new')\n\n##### startup command #####\n\npyclopediaGetFData( nuke.thisGroup() )\n" tile_color 0x7f7f7fff selected true addUserKnob {20 tab_general l General} addUserKnob {1 keyword_filter l "keyword filter" t "keyword to filter next field result.\n\n*non-case sensitive"} addUserKnob {22 get_sub_field l "get sub field" t "get next field" -STARTLINE T "pyclopediaLoadField( nuke.thisGroup() )"} addUserKnob {22 back_field l "back field" t "revert to one field backward" -STARTLINE T "pyclopediaBackField( nuke.thisGroup() )"} addUserKnob {22 show_doc l "show doc" -STARTLINE T "pyclopediaShowDoc( nuke.thisGroup() )"} addUserKnob {22 reset -STARTLINE +INVISIBLE T "pyclopediaReset( nuke.thisGroup() )"} addUserKnob {26 ""} addUserKnob {1 basechk +HIDDEN} basechk nuke addUserKnob {41 use_module l "import module" T menu01.use_module} addUserKnob {1 module +HIDDEN} addUserKnob {1 cmd_line l "command line"} cmd_line nuke addUserKnob {4 field_1 l "field 1" +HIDDEN M {""}} addUserKnob {4 field_2 l "field 2" +HIDDEN M {""}} addUserKnob {4 field_3 l "field 3" +HIDDEN M {""}} addUserKnob {4 field_4 l "field 4" +HIDDEN M {""}} addUserKnob {4 field_5 l "field 5" +HIDDEN M {""}} addUserKnob {4 field_6 l "field 6" +HIDDEN M {""}} addUserKnob {4 field_7 l "field 7" +HIDDEN M {""}} addUserKnob {4 field_8 l "field 8" +HIDDEN M {""}} addUserKnob {4 field_9 l "field 9" +HIDDEN M {""}} addUserKnob {4 field_10 l "field 10" +HIDDEN M {""}} addUserKnob {20 starred_manager l "starred manager" n 1} starred_manager 0 addUserKnob {41 modStarData l "" +STARTLINE T ModifyMetaData.metadata} addUserKnob {22 clear_all l "clear all starred command" T "pyclopediaWriteStar( \[] )\npyclopediaGetFData( nuke.thisGroup() )" +STARTLINE} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.4} addUserKnob {26 l_DATE l "Date Modified" T 2021-03-18} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.4
- compatible with python3

1.3
- remove gizmo version, some setup not compatible in gizmo format.

1.2
- enhanced entire code
- improved error detection
- removed reset button
- some labels updated the name
- added 'starred' function
- added 'keyword filter'

1.1
- fixed 'back level' error

1.0
- python encyclopedia\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -287 ypos -247 bdwidth 296 bdheight 273 } NoOp { inputs 0 name menu01 knobChanged "\nnuke.thisGroup()\['module'].setVisible( nuke.thisGroup()\['use_module'].value() )\n" xpos -183 ypos -157 addUserKnob {20 User} addUserKnob {6 use_module l "use module" +STARTLINE} } ModifyMetaData { inputs 0 name ModifyMetaData knobChanged "pyclopediaModFData( nuke.thisGroup() )" xpos -180 ypos -77 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Python_and_TCL.gizmo ================================================ Group { inputs 0 name Python_and_TCL knobChanged "\nnk = nuke.thisNode()\nk = nuke.thisKnob()\n\nif ('operation' in k.name() and int(nk\['operation'].getValue()) == 0 ):\n python = nuke.toNode('StickyNote_PythonOverview')\['label'].getValue()\n tcl = nuke.toNode('StickyNote_TCLOverview')\['label'].getValue()\n website = nuke.toNode('StickyNote_WebsiteOverview')\['label'].getValue()\n\nelif ('operation' in k.name() and int(nk\['operation'].getValue()) == 1 ):\n python = nuke.toNode('StickyNote_CreateNode')\['label'].getValue()\n tcl = \"\"\n website = nuke.toNode('StickyNote_CreateNode_website')\['label'].getValue()\n\nelif ('operation' in k.name() and int(nk\['operation'].getValue()) == 2 ):\n python = nuke.toNode('StickyNote_SelectNode')\['label'].getValue()\n tcl = \"\"\n website = \"\"\n\nelif ('operation' in k.name() and int(nk\['operation'].getValue()) == 3 ):\n python = nuke.toNode('StickyNote_ConnectNodes')\['label'].getValue()\n tcl = \"\"\n website = \"\"\n\nelif ('operation' in k.name() and int(nk\['operation'].getValue()) == 4 ):\n python = nuke.toNode('StickyNote_ReadKnob')\['label'].getValue()\n tcl = \"\"\n website = \"\"\n\nelif ('operation' in k.name() and int(nk\['operation'].getValue()) == 5 ):\n python = nuke.toNode('StickyNote_WriteKnob')\['label'].getValue()\n tcl = \"\"\n website = \"\"\n\nelif ('operation' in k.name() and int(nk\['operation'].getValue()) == 6 ):\n python = nuke.toNode('StickyNote_CreateKnob')\['label'].getValue()\n tcl = \"\"\n website = nuke.toNode('StickyNote_CreateKnob_website')\['label'].getValue()\n\nelif ('operation' in k.name() and int(nk\['operation'].getValue()) == 7 ):\n python = nuke.toNode('StickyNote_Animation')\['label'].getValue()\n tcl = \"\"\n website = nuke.toNode('StickyNote_Animation_website')\['label'].getValue()\n\nelif ('operation' in k.name() and int(nk\['operation'].getValue()) == 8 ):\n python = nuke.toNode('StickyNote_PythonExpression')\['label'].getValue()\n tcl = nuke.toNode('StickyNote_TCLExpression')\['label'].getValue()\n website = nuke.toNode('StickyNote_WebsiteExpression')\['label'].getValue()\n\nelif ('operation' in k.name() and int(nk\['operation'].getValue()) == 9 ):\n python = nuke.toNode('StickyNote_PythonMath')\['label'].getValue()\n tcl = nuke.toNode('StickyNote_TCLMath')\['label'].getValue()\n website = nuke.toNode('StickyNote_websiteMath')\['label'].getValue()\n\nelif ('operation' in k.name() and int(nk\['operation'].getValue()) == 10 ):\n python = nuke.toNode('StickyNote_Def')\['label'].getValue()\n tcl = \"\"\n website = \"\"\n\nelif ('operation' in k.name() and int(nk\['operation'].getValue()) == 11 ):\n python = nuke.toNode('StickyNote_Callbacks')\['label'].getValue()\n tcl = \"\"\n website = nuke.toNode('StickyNote_websiteCallbacks')\['label'].getValue()\n\nelif ('operation' in k.name() and int(nk\['operation'].getValue()) == 12 ):\n python = nuke.toNode('StickyNote_CustomPanels')\['label'].getValue()\n tcl = \"\"\n website = nuke.toNode('StickyNote_WebsiteCustomPanels')\['label'].getValue()\n\nelif ('operation' in k.name() and int(nk\['operation'].getValue()) == 13 ):\n python = nuke.toNode('StickyNote_Tricks')\['label'].getValue()\n tcl = \"\"\n website = nuke.toNode('StickyNote_WebsiteTricks')\['label'].getValue()\n\nif ('operation' in k.name()):\n nk\['message_python'].setValue(python)\n nk\['message_tcl'].setValue(tcl)\n nk\['message_website'].setValue(website)\n" autolabel "nuke.thisNode().name() + \"\\n\" + '(' + nuke.thisNode()\['operation'].value() + ')' " tile_color 0xff00ffff note_font "Bitstream Vera Sans Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" note_font_size 13 selected true addUserKnob {20 read l "Read Me"} addUserKnob {4 operation M {"00. Python & TCL Overview" "01. Create node" "02. Select a node" "03. Connect nodes" "04. Read from a knob" "05. Write into a knob" "06. Create new knob" "07. Animation and Curve" "08. Expressions" "09. Math functions and Wave Generator" "10. Functions def()" "11. Callbacks" "12. Custom Panels" "13. Tricks" "" "" "" "" "" "" "" "" "" "" "" "" ""}} addUserKnob {22 create_sticky_note l "Create Sticky Note" -STARTLINE T "n=nuke.thisNode()\nname = n.name()\nnuke.root().begin()\n\ndef create_sticky():\n if(text!=\"\"):\n stickyNote = nuke.createNode('StickyNote')\n nuke.autoplace(stickyNote)\n stickyNote\[\"label\"].setValue(text)\n\n\ntext=n\['message_python'].getValue()\ncreate_sticky()\n\ntext=n\['message_tcl'].getValue()\ncreate_sticky()\n\ntext=n\['message_website'].getValue()\ncreate_sticky()"} addUserKnob {26 ""} addUserKnob {41 message_python l Python T Text_python.message} addUserKnob {41 message_tcl l TCL T Text_TCL.message} addUserKnob {41 message_website l Website T Text_websites.message} addUserKnob {26 "" +STARTLINE} addUserKnob {26 message l "" +STARTLINE T "Python and TCL v1.1\nby Andrea Geremia\n"} addUserKnob {26 "" +STARTLINE} addUserKnob {22 tutorial l "Tutorial" T "nuke.tcl('start', 'http://www.andreageremia.it/tutorial_python_tcl.html')\n" +STARTLINE} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x8e388e00 note_font_size 42 xpos -13 ypos -126 bdwidth 103 bdheight 456 } Output { inputs 0 name Output1 xpos 0 ypos 300 } StickyNote { inputs 0 name StickyNote_TCLOverview label "TCL OVERVIEW\n\nGetting a knob’s value of a specific node:\n\n#First frame of current read/write:\n\[value Read1.first]\n\n#Getting a knob’s value of current node:\n\[value this.first_frame]\n\n#Return label value of the input node:\n\[value this.size]\n\n#Name of the input node:\n\[value this.input0.label]\n\n#Name of the node before the group (Outside):\n\[value this.input.name]\n\n#Return 1 if the node is on error otherwise 0:\n\[value this.parent.input.name]\n\n#Get the bounding Box from the input of the node:\n\[value error]\n\n\n#Here some expression for the Format\nformat.x\nformat.y\nwidth\nheight\nbbox.x\nbbox.y\nbbox.w\nbbox.h\n\n#Get the format from the input of the node:\n\[value input.bbox.x]#left boundary\n\[value input.bbox.r]#right boundary\n\nGet the format from the input of the node:\n\[value input.format.r]#width\n\[value input.format.t]#height\n\n#Get the x position of the point #3 of the Bezier1 of the Roto1 node:\n\[value Roto1.curves.Bezier1.curve_points.3.main.x]\n\n#Return sample pixel value of the node Add1 reading in the red at position of knob Center:\n\[sample Add1 Red Center.x Center.y]\n\n#Get the value of the channel of a node, at a specific pixelcoordinates (e.g.: 10,10):\n\[sample \[node input] red 10 10]\n\n#---------------------------------------------------------------------\n#SET VALUES\n\n#Setting a knob’s value of a specific node:\n\[knob Read1.first 10]\n\n#Setting a variable, without returning that (useful in a textnode):\n\[set seq \[value Read1.file]; return]\n\n#---------------------------------------------------------------------\n#STRING\n\n#Replace string in current node file knob with regex (string “proj” to “projects” in all occurences):\n\[regsub -all \"proj\" \[value \[node this].file] \"projects\"] \n\n#String map (replace multiple stringpairs) (this returns: xxffffxxyy):\n\[string map \{\"aa\" \"xx\" \"bb\" \"yy\"\} \"aaffffaabb\" ]\n\n#Compare strings:\n\[string equal \[value Text1.message] \"bla\"]\n\n#Regexp matching:\n\[regexp -inline \"_v\\\[0-9]\{3\}\" \[value Read2.file]] \n\n#Evaluating string\n\[python os.getenv('rotate') == 'xavierb']\n\n#---------------------------------------------------------------------\n#IF CONDITION\n\n\[if \{condition\} \{expr1\} else \{expr2\}]\n\n#Example:\n\[if \{\[value blackpoint]==1\} \{return 2\} \{return 3\}]\n\[if \{\[value blackpoint]==1\} \{return True\} \{return False\}]\n\[if \{\[value blackpoint]==1\} \{return blackpoint\} \{return whitepoint\}]\n\[if \{\[value filter]==\"gaussian\"\} \{return filter\} \{return False\}]\n\n#OTHER METHOD\ncondition ? then : else\n\n#Example:\n#if (r==1)? return 0: else (return r*2)\nr ==1 ? 0 : r*2\n\n#---------------------------------------------------------------------\n#PATH MANIPULATIONS:\n\n#Filepath without extension:\n\[file rootname \[value \[topnode].file]]\n\n#Filename only:\n\[basename \[value \[topnode].file ]]\n\n#Filename only without extension:\n\[basename\[file rootname \[value \[topnode].file]]]" xpos -1411 ypos -3379 } StickyNote { inputs 0 name StickyNote_PythonOverview label "PYTHON OVERVIEW\n\n#-------------------------------------------------------\n#PRINT and VARIABLES\nprint 'Hello World'\n\nname = 'Andrea'\nprint 'Hello' + name\n\n#-------------------------------------------------------\n#VARIABLES TYPES\n\nint(x)\nlong(x)\nfloat(x)\nstr(x)\n\n#convert string o int\nint (stringa)\n\n#convert int to string\nstr(integer)\n\n#-------------------------------------------------------\n#STRINGs\n\nvar1 = 'Hello World!'\nprint \"Updated String : \", var1\[:6] + 'Python'\n#Result: Updated String : Hello Python\n\nvar2 = \"Hello, Ciao, Halo,\"\nlist = var2.split(',')\nfor x in list:\n print(x)\n#Result \tHello\n#\tCiao\n# \tHalo\n\n#-------------------------------------------------------\n#IF CONDITION\n\nif expression:\n statement(s)\nelse:\n statement(s)\n\n#Example 01\nif var == 200:\n\tprint 'ciao'\nelif var<200:\n\tprint 'ok'\n\n#Example 02\nanswer = 'y'\nif answer is 'y':\n print(\"answer is equal to 'y'\")\n\n#Example 03\nif answer in \['y', 'Y', 'yes', 'Yes', 'YES']:\n print(\"answer is in this list\")\n\n#-------------------------------------------------------\n#IF CONDITION in 1 line\n(\"some string\" if expression else \"another string\")\n\n#if size > 100 then print 'big', otherwise print 'small'\n(' big!' if nuke.thisNode()\['size'].value()>100 else ' small')\n\n#-------------------------------------------------------\nFOR LOOP\n\n#simple structure\nfor x in range(0, 3):\nprint x\n\n#Lists as an iterable\ncollection = \['hey', 5, 'd']\nfor x in collection:\n print x\n\n#-------------------------------------------------------\nWHILE LOOP\n\ncount = 0\nwhile (count < 9):\n print 'The count is:', count\n count = count + 1\n\nprint \"Good bye!\"\n\n# Result: The count is: 0\n#The count is: 1\n#The count is: 2\n#The count is: 3\n#The count is: 4\n#The count is: 5\n#The count is: 6\n#The count is: 7\n#The count is: 8\n#Good bye!" xpos -1822 ypos -3379 } StickyNote { inputs 0 name StickyNote_WebsiteOverview label "https://www.tutorialspoint.com/python/index.htm\n\nhttps://learn.foundry.com/nuke/developers/63/pythondevguide/basics.html\n\nhttps://learn.foundry.com/nuke/developers/63/pythondevguide/index.html\n\n#----------------------------------------------------------------------------------------------\n\nhttp://www.nukepedia.com/tcl/tcl-reference\n\nhttp://www.nukepedia.com/reference/Tcl/group__tcl__builtin.html\\\n\nhttp://www.lookinvfx.com/nuke-tcl-snippets/\n\nhttp://thoughtvfx.blogspot.de/2012/12/nuke-tcl-tips.html\n" xpos -825 ypos -3383 } StickyNote { inputs 0 name StickyNote_CreateNode label "CREATE NODE\n\n#create node with nuke.nodes.xxx()\nnuke.nodes.Blur()\nnuke.createNode(\"Grade\")\n\n#create 3 Blur Nodes\nfor x in range(0, 3):\n nuke.nodes.Blur()\n\n#----------------------------------------------------------------------------------\n#Python Button in a Group create a Blur Node outside the Group\n#Copy this in a Python Button in a Group\n#Example01\nnuke.root().begin()\nstickyNote = nuke.createNode('Blur')\n\n\n#Python Button in a Group create a StickyNode outside the Group, reading the value in the knob 'python'\n#Example02\nn=nuke.thisNode()\nname = n.name()\ntext=nuke.toNode(name)\['python'].getValue()\n\nnuke.root().begin()\nstickyNote = nuke.createNode('StickyNote')\nstickyNote\[\"label\"].setValue(text)" xpos -1750 ypos -1942 } StickyNote { inputs 0 name StickyNote_CreateNode_website label "#https://learn.foundry.com/nuke/developers/63/pythondevguide/basics.html\n\n#List of all the nodes in Nuke: http://nukexexperts.blogspot.de/2013/05/nuke-node-reference-image-nodes.html\n" xpos -1122 ypos -1926 } StickyNote { inputs 0 name StickyNote_ReadKnob label "READ KNOB\n\n# List all knobs for selected node\nprint( nuke.toNode('Read1') )\n\n# List all knobs for specific node\nprint( nuke.selectedNode() )\n\n# Get value from specific node, method 01\nvalue = nuke.toNode('Read1').knob('file').getValue()\n\n#Print value from specific node, method 02\nnode = nuke.toNode(\"Blur1\")\nprint node\['size'].value()\n\n# Get value from selected node\nvalue = nuke.selectedNode().knob('file').getValue()\n\n#Get default value\nnuke.toNode('Blur6').knob('size').defaultValue()\n\n# Get value from specific node and evaluate it (good for expressions)\nvalue = nuke.toNode('Read1').knob('file').evaluate()\n\n#get the expression of a knob\nif nuke.toNode('Blur6').knob('size').hasExpression():\n print nuke.toNode('Blur6').knob('size').toScript()\n\n#Get value XY_knob individually\nnuke.toNode('Transform1').knob('scale').getValue(0)\t#w\nnuke.toNode('Transform1').knob('scale').getValue(1)\t#h\n\n#get me the height and width from a selected node\nnuke.selectedNode().height()\nnuke.selectedNode().width()\nnuke.selectedNode().pixelAspect\n\n#--------------------------------------------------------------------------------\n#DROPDOWN MENU / PULLDOWN CHOICE\n\n#Get value from Pulldown Choice (name)\nnuke.selectedNode()\['attribute'].value()\n\n#Get index from Pulldown Choice (name)\nint(nuke.toNode('Blur6').knob('filter').getValue())\nint(nuke.selectedNode().knob('filter').getValue())\n\n#--------------------------------------------------------------------------------\n#Check the name of a knob (will be useful later)\nnode = nuke.selectedNode()\nknob = node\['filter']\nif('filter' in knob.name()):\n print \"found it!\"\n\n#Calculate the max and min value in a framerange\nret = nuke.getFramesAndViews('get range', '1-100')\nframe_range = ret\[0].split('-')\n\nmin=0\nmax=0\n\nfor i in range(int(frame_range\[0]), int(frame_range\[1])+1):\n knob = nuke.selectedNode()\['size'].getValueAt(i)\n print 'value: ' + knob\n print 'frame: ' + i\n if (knob > max):\n max = knob\n\n if (knob < min):\n min = knob\n\nprint 'max is', max\nprint 'min is', min\n\n#--------------------------------------------------------------------------------\n#Get Frame Range from node\nfirst_frame = nuke.selectedNode().firstFrame()\nlast_frame = nuke.selectedNode().lastFrame()\n\n#-------------------------------------------------------------------------------\n#READ KNOB INSIDE GROUP\n#Get a knob of a Node inside a Group. This works only into a Python Button of the Group\nn=nuke.thisNode()\nname = n.name()\nprint nuke.toNode('StickyNote_PythonOverview')\['label'].getValue()\n" xpos -1664 ypos -407 } StickyNote { inputs 0 name StickyNote_WriteKnob label "WRITE KNOB\n#Set default value for a knob\nnuke.knobDefault( 'Blur.size', '77' )\nnuke.knobDefault( 'channels', 'rgba' )\n\n# Set specific node's value\nnuke.toNode('Read1').knob('file').setValue('c:/hello.tif')\nnuke.toNode('Transform2').knob('scale').setValue(2)\n\n# Set selected node's value\nnuke.selectedNode().knob('file').setValue('c:/hello.tif')\nnuke.selectedNode()\['scale'].setValue(3)\n\n# Set this node's value\nnuke.thisNode().knob('file').setValue('c:/hello.tif')\n\n#Set knob with 4 values (x, y, w, h)\nn = nuke.selectedNode()\nn\['box'].setValue((0, 150, 4096, 2010))\n\n#Set knob with 2 values (w, h)\nnuke.selectedNode()\['scale'].setValue(1250, 0)\n\n#When a node has XY Knob, use this code to split values and assign 2 different values\nnuke.selectedNode()\['scale'].setSingleValue(False)\nnuke.selectedNode()\['scale'].setExpression('scale.w*2',1)\n\n# Set specific node's knob to default value\nnuke.toNode('Grade1').knob('gamma').setValue( nuke.toNode('Grade1').knob('gamma').defaultValue() )\n\n#set Expression in a knob\nnode = nuke.selectedNode()\nnode.knob('mix').setExpression('size + 5')\n\n#disable a node\nnuke.toNode('Blur7')\['disable'].setValue(True)\n\n#single or multiple values in a Knob\nnuke.toNode('Transform2')\['scale'].setSingleValue(True)\n\n#set a checkbox\nnuke.toNode('Transform2')\['invert_matrix'].setValue(True)\nnuke.toNode('Transform2')\['invert_matrix'].setValue(1)\n\n#--------------------------------------------------------------------------------\n#DROPDOWN MENU / PULLDOWN CHOICE\n\n#set a pulldown choice\nnuke.toNode('Transform2')\['filter'].setValue(2)\n\n#populate pulldown choice (dropdown menu)\npulldown = nuke.toNode('Group1')\n\npulldown\['id'].setValues(\['a', 'b', 'c'])\n\n\n#expression in Pulldown choice\ntcl:\nin Transform1.filter \{set_expression \{Transform2.filter\}\}\n\npython\nk=nuke.toNode('Transform1')\['filter']\nk.setExpression('Transform2.filter',0)\n\n#--------------------------------------------------------------------------------\n#set a knob as the current frame\nnk = nuke.thisNode()\nnk.knob('translate').setValue(nuke.frame())" xpos -1744 ypos 686 } StickyNote { inputs 0 name StickyNote_CreateKnob label "CREATE KNOB\n\n#formula\nnode = nuke.toNode('Name Node')\nknob = nuke.nuke.Double_Knob('name', 'Label')\nnode.addKnob(knob)\n\n\n#create a Slider knob\nnode = nuke.selectedNode()\nknob = nuke.nuke.Double_Knob('slider', 'Slider') \nknob.setRange(1,100)\nknob.setValue(10)\nnode.addKnob(knob)\n\n#------------------------------------------------------------------------------\n# create a Checkbox\nsn = nuke.selectedNode()\n\nuk = nuke.nuke.Boolean_Knob('checkbox', 'Checkbox') \nuk.setValue(True)\nsn.addKnob(uk)" xpos -1741 ypos 1567 } StickyNote { inputs 0 name StickyNote_CreateKnob_website label "#Find all the Knob Types here:\n\nhttps://learn.foundry.com/nuke/developers/63/ndkdevguide/knobs-and-handles/knobtypes.html" xpos -1411 ypos 1567 } StickyNote { inputs 0 name StickyNote_Animation label "ANIMATION\n\n#current frame\nprint nuke.frame()\n\n#go to frame x\nnuke.frame(x)\n\n#get value of knob at frame 5\nknob = nuke.selectedNode()\['size'].getValueAt(5)\n\n#if knob is animated\nnode = nuke.createNode( 'Blur' )\nk = node\['size']\nk.isAnimated()\n\n#if has an expression\nk.hasExpression()\n\n#Return True if there is a keyframe at the current frame \nk.isKey()\n\n#Return True if there is a keyframe at the frame 5 \nk.isKeyAt(5)\n\n#get key value at frame 3\nnuke.selectedNode()\['rotate'].getValueAt(3)\n\n# print key value at current frame\nnk = nuke.selectedNode()\nknob = nk.knob('rotate')\nprint knob.getValueAt(nuke.frame())\n\n#set knob to accept animation\nnode = nuke.createNode( 'Blur' )\nk = node\['size']\nk.setAnimated()\n\n#set key in the current frame\nk.setValue( 5 )\n\n#two more keys at frame 10 and 100 with values of 55 and 66 respectively\nk.setValueAt( 55, 10 )\nk.setValueAt( 66, 100 )\n\n\n#if knob is an array, this sets the first field/channel to 77 and the second to 88 at frame 100\nk.setValueAt( 77, 100, 0 )\nk.setValueAt( 88, 100, 1 )\n\n#------------------------------------------------------------------------------------------------\n#print all the keys with the values for the given animation curve\nfor key in animCurve.keys():\n xValue = key.x\n yValue = key.y\n print 'ket at %s has value %s' % ( xValue, yValue )\n\n# Result:\nket at 1.0 has value 5.0\nket at 10.0 has value 55.0\nket at 100.0 has value 77.0\n\n#------------------------------------------------------------------------------------------------\n#Clear all the animation in a node\nn=nuke.selectedNode()\nk=n.allKnobs()\nfor i in k:\n i.clearAnimated()\n----------------------------------------------------------------------------\n\n#Bake animation\nhttps://learn.foundry.com/nuke/developers/63/pythondevguide/animation.html\n\n----------------------------------------------------------------------------\n#Example 01: Select the anim curve\ng1 = nuke.toNode(\"Grade1\")\ngBlack = g1\['blackpoint']\nanim = gBlack.animation(0)\nprint anim\n\n\n#------------------------------------------------------------------------------------------------\n#Example 02: create a Frade Node with 2 keys on the blackpoint at frame 1 and 10\ng = nuke.nodes.Grade()\na = nuke.AnimationC urve(g\['blackpo int'], 0, 'r')\na.setKey(1, .1)\na.setKey(10, .125)\ng\['blackpoint'].copyAnimation(0, a)\n#------------------------------------------------------------------------------------------------\n#Evaluate: This simply takes a numeric frame argument (int or float) and returns the curve’s value at that frame\nanim.evaluate(30)\n\n#frame number and a key value\nanim.setKey(48, .044)\n\n#This returns True if the animation is driven by keys, or False if the animation is linked by an expression. \nanim.noExpression()\n\n#attach an expression to an AnimationCurve\ngWhite = g1\['whitepoint']\ngWhite.setAnimated()\nanim2 = gWhite.animation(0)\nanim2.setExpression(\"blackpoint\")\n\n#------------------------------------------------------------------------------------------------\n#this method will still return the value ‘curve if the parent knob isn’t linked using an expression\nanim.expression()\n\n#This returns a list of AnimationKey objects\nkeys = anim.keys()\nprint keys\n#------------------------------------------------------------------------------------------------\n#DELETE ANIMATION\n\n#Delete all keys from the curve\nanim.clear()\n\n#Remove key \nknob.removeKey()\n\n#Remove key at time 't' \nknob.removeKeyAt(t)\n\n#Delete the animation from all the selected nodes\nnodes = nuke.selectedNodes()\nfor n in nodes:\n knobs = n.allKnobs()\nfor k in knobs:\n k.clearAnimated()" xpos -1771 ypos 1901 } StickyNote { inputs 0 name StickyNote_Animation_website label "http://www.nukepedia.com/python/animationcurve-and-animationkey-objects\n\nhttps://learn.foundry.com/nuke/developers/63/pythondevguide/animation.html\n\nhttps://learn.foundry.com/nuke/developers/80/pythonreference/nuke.Knob-class.html\n\nhttps://learn.foundry.com/nuke/developers/63/pythondevguide/basics.html#copying-an-animation-curve-between-nodes" xpos -1120 ypos 1898 } StickyNote { inputs 0 name StickyNote_PythonExpression label "EXPRESSION in PYTHON\n\n• nuke.expression() to use a Nuke expression in Python code.\n\n• expression to use a Nuke expression in TCL.\n\n• nuke.tcl() to run TCL code in Python.\n\n• python to run Python code in TCL\n\n• \[ ] (square brackets) to embed TCL in a Nuke expression (or a string knob)\n\n• \[python \{...\}] to embed Python in a Nuke expression.\n\n\n#set knob with an Expression\nnode = nuke.selectedNode()\nnode.knob('mix').setExpression('size + 5')\n\n#another example\nnode = nuke.toNode('Grade1')\nnode.knob('whitepoint').setExpression('gain + 1')\n\n#Use Python in the Expression (with TCL)\n\[python nuke.thisNode().metadata().keys()]\n\n\[python nuke.thisNode().metadata()\\\['input/filename'\\]]\n\n\[python \{nuke.thisNode().metadata\['input/filename']\}]\n\n\[python \{nuke.thisNode().metadata\['input/filename']\}]\n\n#Use python in Expression\n\[python \{nuke.thisNode().knob(\\'rotate\\').value()\}]\n\n\n#TCL in Python\nnuke.tcl('return '+nuke.selectedNode()\['filter'].value())" xpos -1895 ypos 3622 } StickyNote { inputs 0 name StickyNote_TCLExpression label "EXPRESSION TCL\n\nGetting a knob’s value of a specific node:\n\n#First frame of current read/write:\n\[value Read1.first]\n\n#Getting a knob’s value of current node:\n\[value this.first_frame]\n\n#Return label value of the input node:\n\[value this.size]\n\n#Name of the input node:\n\[value this.input0.label]\n\n#Name of the node before the group (Outside):\n\[value this.input.name]\n\n#Return 1 if the node is on error otherwise 0:\n\[value this.parent.input.name]\n\n#Get the bounding Box from the input of the node:\n\[value error]\n\n\n#Here some expression for the Format\nformat.x\nformat.y\nwidth\nheight\nbbox.x\nbbox.y\nbbox.w\nbbox.h\n\n#Get the format from the input of the node:\n\[value input.bbox.x]#left boundary\n\[value input.bbox.r]#right boundary\n\nGet the format from the input of the node:\n\[value input.format.r]#width\n\[value input.format.t]#height\n\n#Get the x position of the point #3 of the Bezier1 of the Roto1 node:\n\[value Roto1.curves.Bezier1.curve_points.3.main.x]\n\n#Return sample pixel value of the node Add1 reading in the red at position of knob Center:\n\[sample Add1 Red Center.x Center.y]\n\n#Get the value of the channel of a node, at a specific pixelcoordinates (e.g.: 10,10):\n\[sample \[node input] red 10 10]\n\n#---------------------------------------------------------------------\n#SET VALUES\n\n#Setting a knob’s value of a specific node:\n\[knob Read1.first 10]\n\n#Setting a variable, without returning that (useful in a textnode):\n\[set seq \[value Read1.file]; return]\n\n#---------------------------------------------------------------------\n#STRING\n\n#Replace string in current node file knob with regex (string “proj” to “projects” in all occurences):\n\[regsub -all \"proj\" \[value \[node this].file] \"projects\"] \n\n#String map (replace multiple stringpairs) (this returns: xxffffxxyy):\n\[string map \{\"aa\" \"xx\" \"bb\" \"yy\"\} \"aaffffaabb\" ]\n\n#Compare strings:\n\[string equal \[value Text1.message] \"bla\"]\n\n#Regexp matching:\n\[regexp -inline \"_v\\\[0-9]\{3\}\" \[value Read2.file]] \n\n#Evaluating string\n\[python os.getenv('rotate') == 'xavierb']\n\n#---------------------------------------------------------------------\n#IF CONDITION\n\n\[if \{condition\} \{expr1\} else \{expr2\}]\n\n#Example:\n\[if \{\[value blackpoint]==1\} \{return 2\} \{return 3\}]\n\[if \{\[value blackpoint]==1\} \{return True\} \{return False\}]\n\[if \{\[value blackpoint]==1\} \{return blackpoint\} \{return whitepoint\}]\n\[if \{\[value filter]==\"gaussian\"\} \{return filter\} \{return False\}]\n\n#OTHER METHOD\ncondition ? then : else\n\n#Example:\n#if (r==1)? return 0: else (return r*2)\nr ==1 ? 0 : r*2\n\n#---------------------------------------------------------------------\n#PATH MANIPULATIONS:\n\n#Filepath without extension:\n\[file rootname \[value \[topnode].file]]\n\n#Filename only:\n\[basename \[value \[topnode].file ]]\n\n#Filename only without extension:\n\[basename\[file rootname \[value \[topnode].file]]]" xpos -1364 ypos 3624 } StickyNote { inputs 0 name StickyNote_WebsiteExpression label "http://community.foundry.com/discuss/topic/101836\n\nhttps://docs.python.org/3/reference/expressions.html\n\n#----------------------------------------------------------------------------\n\nhttp://www.nukepedia.com/tcl/tcl-reference\n\nhttp://www.nukepedia.com/reference/Tcl/group__tcl__builtin.html\\\n\nhttp://www.lookinvfx.com/nuke-tcl-snippets/\n\nhttp://thoughtvfx.blogspot.de/2012/12/nuke-tcl-tips.html\n" xpos -784 ypos 3632 } StickyNote { inputs 0 name StickyNote_TCLMath label "MATH FUNCTIONS\nTCL\n\n#Returns the absolute value of the floating-point number x.\nabs (x)\n\n#Round x up to the nearest integer.\nceil (x)\n\n#Round x down to the nearest integer.\nfloor (x)\n\n#Round x to the nearest integer not larger in absolute value\nint (x)\n\n#Return x clamped to \[0.0 ... 1.0].\nclamp (x)\n\n#Returns the cosine of x.\ncos(x)\n\n#Returns the sine of x.\nsin (x)\n\n#Returns the y value of the animation curve at the given frame\ncurve (frame)\nrotate(frame)\n\n#Returns the current frame\nframe\n\n#Convert the angle x from radians into degrees\ndegrees (x)\n\n#Convert the angle x from degrees into radians\nradians (x)\n\n#Return the greatest of all values\nmax (x, y, ... )\n\n#Return the smallest of all values\nmin (x, y, ... )\n\n#Return the value for pi (3.141592654...)\npi\n\n#Returns the value of x raised to the power of y.\npow (x, y)\n\n#Returns the non-negative square root of x.\nsqrt (x)\n\n#Evaluates the y value for an animation at the given frame\nvalue (frame)" xpos -1839 ypos 5097 } StickyNote { inputs 0 name StickyNote_Def label "DEF\n\n#sintax\ndef function_name( parameters ):\n \"function_docstring\"\n function_suite\n return \[expression]\n\n#example\ndef printme( str ):\n \"This prints a passed string into this function\"\n print str\n return\n\ndef sum(a, b)\n c = a+b \n return c\n---------------------\n print \"the sum is \" + sum(10, 5)" xpos -1543 ypos 5822 } StickyNote { inputs 0 name StickyNote_Callbacks label "#CALLBACKS\n\n#----------------------------------------------------------------\n#KNOB CHANGED\n\n#sintax\n#copy this in the Script Editor in Nuke, select your node (or subsistute nuke.selectedNode() with nuke.toNode(\"NodeName\")) and launch the script\n#Example 01\n\nnuke.selectedNode().knob('knobChanged').setValue(\"\nnk = nuke.thisNode()\nk = nuke.thisKnob()\nif ('rotate' in k.name()):\n #YOUR CODE\")\n\n\n#every time that rotate will change, it will execute your code\n#This was just an example, in your Script Editor use THIS VERSION with \\n for a new line\nnuke.selectedNode().knob('knobChanged').setValue(\"nk = nuke.thisNode()\\nk =nuke.thisKnob()\\nif ('rotate' in k.name()): #YOUR CODE\")\n\n#----------------------------------------------------------------\n#Example 02\n#To avoid the \\n to every line, just use \"\"\"\nnuke.selectedNode().knob('knobChanged').setValue(\"\"\"\nnk = nuke.thisNode()\nk = nuke.thisKnob()\nif ('gain' in k.name()):\n print 'ciao'\n\"\"\")\n\n#----------------------------------------------------------------\nnuke.selectedNode()\['knobChanged'].setValue(\"if nuke.thisKnob().name() == 'inputChange': print 'input has Changed'\")\n\n#remember to use the ' ' instead of \" \" inside the python code\n\n#----------------------------------------------------------------\n#ON CREATE\nnuke.selectedNode().knob('onCreate').setValue(\"nk = nuke.thisNode()\\nk = nk\['first_frame']\\nk.setValue(nuke.frame())\")" xpos -1786 ypos 6103 } StickyNote { inputs 0 name StickyNote_websiteCallbacks label "https://learn.foundry.com/nuke/developers/63/pythondevguide/callbacks.html\n\nhttps://learn.foundry.com/nuke/developers/63/ndkdevguide/knobs-and-handles/knobchanged.html\n" xpos -963 ypos 6117 } StickyNote { inputs 0 name StickyNote_WebsiteCustomPanels label "https://learn.foundry.com/nuke/developers/63/pythondevguide/custom_panels.html\n" xpos -1247 ypos 6654 } StickyNote { inputs 0 name StickyNote_WebsiteTricks label #http://www.comp-fu.com/2014/07/nuke-autolabel-magic/ xpos -900 ypos 6831 } StickyNote { inputs 0 name StickyNote_CustomPanels label "CUSTOM PANELS\n\n#----------------------------------------------------------------\npan = nuke.Panel('test')\nchoices = 'fistchoice secondchoice thridchoice'\npan.addEnumerationPulldown('choice:', choices)\npan.show()" xpos -1624 ypos 6639 } StickyNote { inputs 0 name StickyNote_SelectNode label "SELECT NODE\n#get selected node\nnuke.selectedNode()\n\n#get multiple nodes selected\nnuke.selectedNodes()\n\n#select node by name\nnode = nuke.toNode(\"Blur1\")\nnode.knob('selected').setValue(True)\n\n#select all the nodes\nfor node in nuke.allNodes():\t\t\t# The 'for loop'\n node\['selected'].setValue(True)\t\t#Attribute 'selected' becomes True\n\n#-------------------------------------------------------------------------------------\n#select nodes that start with a specific \"string\"\nfor node in nuke.allNodes():\n if node\['name'].value().startswith(\"ColorCor\"):\t#Instead of 'ColorCor' put the name that you want\n node\['selected'].setValue(True)\n\n#-------------------------------------------------------------------------------------\n#select node by class\nfor node in nuke.allNodes():\n if node.Class() == \"Blur\":\t\t#Select all the Blur nodes\n node\['selected'].setValue(True)\n\n\n#-------------------------------------------------------------------------------------\n#Run a script for every selected node\nsn = nuke.selectedNodes() \t# The list of nodes.\nfor node in sn:\t\t\n print nodes\['name'].getValue() \t# Put your code here.\n\n#-------------------------------------------------------------------------------------\n#Add name of nodes into a Array (List). Select nodes and create a list of all the names\narray = \[]\t\t\t#create the array\nfor node in nuke.selectedNodes():\t\n n = node\['name'].value()\n array.append(n)\t\t#Add the value to the list\nprint array\t\t\t#print the list\n\n#---------------------------------------------------------------------------------------\n#DESELECT ALL SELECTED NODES\nif nuke.selectedNodes():\n\tfor i in nuke.selectedNodes():\n\t\ti\['selected'].setValue(False)" xpos -1715 ypos -1578 } StickyNote { inputs 0 name StickyNote_ConnectNodes label "CONNECT NODES\n\n#Connect the output of the select node to the input 0 of ColorCorrect\nnuke.toNode('ColorCorrect3').setInput( 0, nuke.selectedNode() )\n\n#Connect the output of the select node to the input 1 (mask) of ColorCorrect\nnuke.toNode('ColorCorrect3').setInput( 1, nuke.selectedNode() )\n\n#Connect output of ColorCorrection to all the selected nodes\nfor i in nuke.selectedNodes():\n i.setInput( 0, nuke.toNode('ColorCorrect3'))\n\n#-------------------------------------------------------------------------------------\n#Create a merge node e connect the inputs to the selected nodes\na = nuke.createNode('Merge')\nb = nuke.selectedNodes()\nx=0\nfor i in b:\n if x==2:\n x+=1\n continue\n a.setInput(x,i)\n x+=1\n\n#-------------------------------------------------------------------------------------\n#DISCONNECT NODES\n\n#Disconnect input\nnuke.selectedNode().setInput(1, None)\n\n#Disconnect all the inputs of the selected node\nfor i in range(0, nuke.selectedNode().maxInputs()):\n nuke.selectedNode().setInput(i, None)\n\n#-------------------------------------------------------------------------------------\n#DEPENDENT AND DEPENDENCIES\n\n#List of nodes dependent and dependencies\nnuke.selectedNode().dependent()\nnuke.selectedNode().dependencies()\n\n#Print the name of the nodes\nfor i in nuke.selectedNode().dependencies():\n print i.name()" xpos -1644 ypos -976 } Text2 { inputs 0 font_size_toolbar 100 font_width_toolbar 100 font_height_toolbar 100 message "PYTHON OVERVIEW\n\n#-------------------------------------------------------\n#PRINT and VARIABLES\nprint 'Hello World'\n\nname = 'Andrea'\nprint 'Hello' + name\n\n#-------------------------------------------------------\n#VARIABLES TYPES\n\nint(x)\nlong(x)\nfloat(x)\nstr(x)\n\n#convert string o int\nint (stringa)\n\n#convert int to string\nstr(integer)\n\n#-------------------------------------------------------\n#STRINGs\n\nvar1 = 'Hello World!'\nprint \"Updated String : \", var1\[:6] + 'Python'\n#Result: Updated String : Hello Python\n\nvar2 = \"Hello, Ciao, Halo,\"\nlist = var2.split(',')\nfor x in list:\n print(x)\n#Result \tHello\n#\tCiao\n# \tHalo\n\n#-------------------------------------------------------\n#IF CONDITION\n\nif expression:\n statement(s)\nelse:\n statement(s)\n\n#Example 01\nif var == 200:\n\tprint 'ciao'\nelif var<200:\n\tprint 'ok'\n\n#Example 02\nanswer = 'y'\nif answer is 'y':\n print(\"answer is equal to 'y'\")\n\n#Example 03\nif answer in \['y', 'Y', 'yes', 'Yes', 'YES']:\n print(\"answer is in this list\")\n\n#-------------------------------------------------------\n#IF CONDITION in 1 line\n(\"some string\" if expression else \"another string\")\n\n#if size > 100 then print 'big', otherwise print 'small'\n(' big!' if nuke.thisNode()\['size'].value()>100 else ' small')\n\n#-------------------------------------------------------\nFOR LOOP\n\n#simple structure\nfor x in range(0, 3):\nprint x\n\n#Lists as an iterable\ncollection = \['hey', 5, 'd']\nfor x in collection:\n print x\n\n#-------------------------------------------------------\nWHILE LOOP\n\ncount = 0\nwhile (count < 9):\n print 'The count is:', count\n count = count + 1\n\nprint \"Good bye!\"\n\n# Result: The count is: 0\n#The count is: 1\n#The count is: 2\n#The count is: 3\n#The count is: 4\n#The count is: 5\n#The count is: 6\n#The count is: 7\n#The count is: 8\n#Good bye!" old_message {{69 88 80 82 69 83 83 73 79 78 32 105 110 32 80 89 84 72 79 78 10 10 8226 32 110 117 107 101 46 101 120 112 114 101 115 115 105 111 110 40 41 32 116 111 32 117 115 101 32 97 32 78 117 107 101 32 101 120 112 114 101 115 115 105 111 110 32 105 110 32 80 121 116 104 111 110 32 99 111 100 101 46 10 10 8226 32 101 120 112 114 101 115 115 105 111 110 32 116 111 32 117 115 101 32 97 32 78 117 107 101 32 101 120 112 114 101 115 115 105 111 110 32 105 110 32 84 67 76 46 10 10 8226 32 110 117 107 101 46 116 99 108 40 41 32 116 111 32 114 117 110 32 84 67 76 32 99 111 100 101 32 105 110 32 80 121 116 104 111 110 46 10 10 8226 32 112 121 116 104 111 110 32 116 111 32 114 117 110 32 80 121 116 104 111 110 32 99 111 100 101 32 105 110 32 84 67 76 10 10 8226 32 91 32 93 32 40 115 113 117 97 114 101 32 98 114 97 99 107 101 116 115 41 32 116 111 32 101 109 98 101 100 32 84 67 76 32 105 110 32 97 32 78 117 107 101 32 101 120 112 114 101 115 115 105 111 110 32 40 111 114 32 97 32 115 116 114 105 110 103 32 107 110 111 98 41 10 10 8226 32 91 112 121 116 104 111 110 32 123 46 46 46 125 93 32 116 111 32 101 109 98 101 100 32 80 121 116 104 111 110 32 105 110 32 97 32 78 117 107 101 32 101 120 112 114 101 115 115 105 111 110 46 10 10 10 35 115 101 116 32 107 110 111 98 32 119 105 116 104 32 97 110 32 69 120 112 114 101 115 115 105 111 110 10 110 111 100 101 32 61 32 110 117 107 101 46 115 101 108 101 99 116 101 100 78 111 100 101 40 41 10 110 111 100 101 46 107 110 111 98 40 39 109 105 120 39 41 46 115 101 116 69 120 112 114 101 115 115 105 111 110 40 39 115 105 122 101 32 43 32 53 39 41 10 10 35 97 110 111 116 104 101 114 32 101 120 97 109 112 108 101 10 110 111 100 101 32 61 32 110 117 107 101 46 116 111 78 111 100 101 40 39 71 114 97 100 101 49 39 41 10 110 111 100 101 46 107 110 111 98 40 39 119 104 105 116 101 112 111 105 110 116 39 41 46 115 101 116 69 120 112 114 101 115 115 105 111 110 40 39 103 97 105 110 32 43 32 49 39 41 10 10 35 85 115 101 32 80 121 116 104 111 110 32 105 110 32 116 104 101 32 69 120 112 114 101 115 115 105 111 110 32 40 119 105 116 104 32 84 67 76 41 10 91 93 10 10 91 112 121 116 104 111 110 32 110 117 107 101 46 116 104 105 115 78 111 100 101 40 41 46 109 101 116 97 100 97 116 97 40 41 92 91 39 105 110 112 117 116 47 102 105 108 101 110 97 109 101 39 92 93 93 10 10 91 112 121 116 104 111 110 32 123 110 117 107 101 46 116 104 105 115 78 111 100 101 40 41 46 109 101 116 97 100 97 116 97 91 39 105 110 112 117 116 47 102 105 108 101 110 97 109 101 39 93 125 93 10 10 91 112 121 116 104 111 110 32 123 110 117 107 101 46 116 104 105 115 78 111 100 101 40 41 46 109 101 116 97 100 97 116 97 91 39 105 110 112 117 116 47 102 105 108 101 110 97 109 101 39 93 125 93 10 10 35 85 115 101 32 112 121 116 104 111 110 32 105 110 32 69 120 112 114 101 115 115 105 111 110 10 91 112 121 116 104 111 110 32 123 110 117 107 101 46 116 104 105 115 78 111 100 101 40 41 46 107 110 111 98 40 92 39 114 111 116 97 116 101 92 39 41 46 118 97 108 117 101 40 41 125 93 10 10 10 35 84 67 76 32 105 110 32 80 121 116 104 111 110 10 110 117 107 101 46 116 99 108 40 39 114 101 116 117 114 110 32 39 43 110 117 107 101 46 115 101 108 101 99 116 101 100 78 111 100 101 40 41 91 39 102 105 108 116 101 114 39 93 46 118 97 108 117 101 40 41 41} } old_expression_markers {{210 212 581 582 675 692 730 747 885 894} } box {0 -1121 3385 1580} transforms {{0 2} } cursor_position 1735 scale {1 1} center {1536 790} cursor_initialised true initial_cursor_position {{0 1580} } group_animations {{0} imported: 0 selected: 0 items: "root transform/"} animation_layers {{1 11 1536 790 0 0 1 1 0 0 0 0} } name Text_python xpos -1 ypos -46 } Text2 { inputs 0 font_size_toolbar 100 font_width_toolbar 100 font_height_toolbar 100 message "TCL OVERVIEW\n\nGetting a knob’s value of a specific node:\n\n#First frame of current read/write:\n\[value Read1.first]\n\n#Getting a knob’s value of current node:\n\[value this.first_frame]\n\n#Return label value of the input node:\n\[value this.size]\n\n#Name of the input node:\n\[value this.input0.label]\n\n#Name of the node before the group (Outside):\n\[value this.input.name]\n\n#Return 1 if the node is on error otherwise 0:\n\[value this.parent.input.name]\n\n#Get the bounding Box from the input of the node:\n\[value error]\n\n\n#Here some expression for the Format\nformat.x\nformat.y\nwidth\nheight\nbbox.x\nbbox.y\nbbox.w\nbbox.h\n\n#Get the format from the input of the node:\n\[value input.bbox.x]#left boundary\n\[value input.bbox.r]#right boundary\n\nGet the format from the input of the node:\n\[value input.format.r]#width\n\[value input.format.t]#height\n\n#Get the x position of the point #3 of the Bezier1 of the Roto1 node:\n\[value Roto1.curves.Bezier1.curve_points.3.main.x]\n\n#Return sample pixel value of the node Add1 reading in the red at position of knob Center:\n\[sample Add1 Red Center.x Center.y]\n\n#Get the value of the channel of a node, at a specific pixelcoordinates (e.g.: 10,10):\n\[sample \[node input] red 10 10]\n\n#---------------------------------------------------------------------\n#SET VALUES\n\n#Setting a knob’s value of a specific node:\n\[knob Read1.first 10]\n\n#Setting a variable, without returning that (useful in a textnode):\n\[set seq \[value Read1.file]; return]\n\n#---------------------------------------------------------------------\n#STRING\n\n#Replace string in current node file knob with regex (string “proj” to “projects” in all occurences):\n\[regsub -all \"proj\" \[value \[node this].file] \"projects\"] \n\n#String map (replace multiple stringpairs) (this returns: xxffffxxyy):\n\[string map \{\"aa\" \"xx\" \"bb\" \"yy\"\} \"aaffffaabb\" ]\n\n#Compare strings:\n\[string equal \[value Text1.message] \"bla\"]\n\n#Regexp matching:\n\[regexp -inline \"_v\\\[0-9]\{3\}\" \[value Read2.file]] \n\n#Evaluating string\n\[python os.getenv('rotate') == 'xavierb']\n\n#---------------------------------------------------------------------\n#IF CONDITION\n\n\[if \{condition\} \{expr1\} else \{expr2\}]\n\n#Example:\n\[if \{\[value blackpoint]==1\} \{return 2\} \{return 3\}]\n\[if \{\[value blackpoint]==1\} \{return True\} \{return False\}]\n\[if \{\[value blackpoint]==1\} \{return blackpoint\} \{return whitepoint\}]\n\[if \{\[value filter]==\"gaussian\"\} \{return filter\} \{return False\}]\n\n#OTHER METHOD\ncondition ? then : else\n\n#Example:\n#if (r==1)? return 0: else (return r*2)\nr ==1 ? 0 : r*2\n\n#---------------------------------------------------------------------\n#PATH MANIPULATIONS:\n\n#Filepath without extension:\n\[file rootname \[value \[topnode].file]]\n\n#Filename only:\n\[basename \[value \[topnode].file ]]\n\n#Filename only without extension:\n\[basename\[file rootname \[value \[topnode].file]]]" old_message {{69 88 80 82 69 83 83 73 79 78 32 84 67 76 10 10 71 101 116 116 105 110 103 32 97 32 107 110 111 98 8217 115 32 118 97 108 117 101 32 111 102 32 97 32 115 112 101 99 105 102 105 99 32 110 111 100 101 58 10 10 35 70 105 114 115 116 32 102 114 97 109 101 32 111 102 32 99 117 114 114 101 110 116 32 114 101 97 100 47 119 114 105 116 101 58 10 91 118 97 108 117 101 32 82 101 97 100 49 46 102 105 114 115 116 93 10 10 35 71 101 116 116 105 110 103 32 97 32 107 110 111 98 8217 115 32 118 97 108 117 101 32 111 102 32 99 117 114 114 101 110 116 32 110 111 100 101 58 10 49 10 10 35 82 101 116 117 114 110 32 108 97 98 101 108 32 118 97 108 117 101 32 111 102 32 116 104 101 32 105 110 112 117 116 32 110 111 100 101 58 10 91 118 97 108 117 101 32 116 104 105 115 46 115 105 122 101 93 10 10 35 78 97 109 101 32 111 102 32 116 104 101 32 105 110 112 117 116 32 110 111 100 101 58 10 91 118 97 108 117 101 32 116 104 105 115 46 105 110 112 117 116 48 46 108 97 98 101 108 93 10 10 35 78 97 109 101 32 111 102 32 116 104 101 32 110 111 100 101 32 98 101 102 111 114 101 32 116 104 101 32 103 114 111 117 112 32 40 79 117 116 115 105 100 101 41 58 10 91 118 97 108 117 101 32 116 104 105 115 46 105 110 112 117 116 46 110 97 109 101 93 10 10 35 82 101 116 117 114 110 32 49 32 105 102 32 116 104 101 32 110 111 100 101 32 105 115 32 111 110 32 101 114 114 111 114 32 111 116 104 101 114 119 105 115 101 32 48 58 10 91 118 97 108 117 101 32 116 104 105 115 46 112 97 114 101 110 116 46 105 110 112 117 116 46 110 97 109 101 93 10 10 35 71 101 116 32 116 104 101 32 98 111 117 110 100 105 110 103 32 66 111 120 32 102 114 111 109 32 116 104 101 32 105 110 112 117 116 32 111 102 32 116 104 101 32 110 111 100 101 58 10 48 10 10 10 35 72 101 114 101 32 115 111 109 101 32 101 120 112 114 101 115 115 105 111 110 32 102 111 114 32 116 104 101 32 70 111 114 109 97 116 10 102 111 114 109 97 116 46 120 10 102 111 114 109 97 116 46 121 10 119 105 100 116 104 10 104 101 105 103 104 116 10 98 98 111 120 46 120 10 98 98 111 120 46 121 10 98 98 111 120 46 119 10 98 98 111 120 46 104 10 10 35 71 101 116 32 116 104 101 32 102 111 114 109 97 116 32 102 114 111 109 32 116 104 101 32 105 110 112 117 116 32 111 102 32 116 104 101 32 110 111 100 101 58 10 91 118 97 108 117 101 32 105 110 112 117 116 46 98 98 111 120 46 120 93 35 108 101 102 116 32 98 111 117 110 100 97 114 121 10 91 118 97 108 117 101 32 105 110 112 117 116 46 98 98 111 120 46 114 93 35 114 105 103 104 116 32 98 111 117 110 100 97 114 121 10 10 71 101 116 32 116 104 101 32 102 111 114 109 97 116 32 102 114 111 109 32 116 104 101 32 105 110 112 117 116 32 111 102 32 116 104 101 32 110 111 100 101 58 10 91 118 97 108 117 101 32 105 110 112 117 116 46 102 111 114 109 97 116 46 114 93 35 119 105 100 116 104 10 91 118 97 108 117 101 32 105 110 112 117 116 46 102 111 114 109 97 116 46 116 93 35 104 101 105 103 104 116 10 10 35 71 101 116 32 116 104 101 32 120 32 112 111 115 105 116 105 111 110 32 111 102 32 116 104 101 32 112 111 105 110 116 32 35 51 32 111 102 32 116 104 101 32 66 101 122 105 101 114 49 32 111 102 32 116 104 101 32 82 111 116 111 49 32 110 111 100 101 58 10 91 118 97 108 117 101 32 82 111 116 111 49 46 99 117 114 118 101 115 46 66 101 122 105 101 114 49 46 99 117 114 118 101 95 112 111 105 110 116 115 46 51 46 109 97 105 110 46 120 93 10 10 35 82 101 116 117 114 110 32 115 97 109 112 108 101 32 112 105 120 101 108 32 118 97 108 117 101 32 111 102 32 116 104 101 32 110 111 100 101 32 65 100 100 49 32 114 101 97 100 105 110 103 32 105 110 32 116 104 101 32 114 101 100 32 97 116 32 112 111 115 105 116 105 111 110 32 111 102 32 107 110 111 98 32 67 101 110 116 101 114 58 10 91 115 97 109 112 108 101 32 65 100 100 49 32 82 101 100 32 67 101 110 116 101 114 46 120 32 67 101 110 116 101 114 46 121 93 10 10 35 71 101 116 32 116 104 101 32 118 97 108 117 101 32 111 102 32 116 104 101 32 99 104 97 110 110 101 108 32 111 102 32 97 32 110 111 100 101 44 32 97 116 32 97 32 115 112 101 99 105 102 105 99 32 112 105 120 101 108 99 111 111 114 100 105 110 97 116 101 115 32 40 101 46 103 46 58 32 49 48 44 49 48 41 58 10 91 115 97 109 112 108 101 32 91 110 111 100 101 32 105 110 112 117 116 93 32 114 101 100 32 49 48 32 49 48 93 10 10 35 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 10 35 83 69 84 32 86 65 76 85 69 83 10 10 35 83 101 116 116 105 110 103 32 97 32 107 110 111 98 8217 115 32 118 97 108 117 101 32 111 102 32 97 32 115 112 101 99 105 102 105 99 32 110 111 100 101 58 10 91 107 110 111 98 32 82 101 97 100 49 46 102 105 114 115 116 32 49 48 93 10 10 35 83 101 116 116 105 110 103 32 97 32 118 97 114 105 97 98 108 101 44 32 119 105 116 104 111 117 116 32 114 101 116 117 114 110 105 110 103 32 116 104 97 116 32 40 117 115 101 102 117 108 32 105 110 32 97 32 116 101 120 116 110 111 100 101 41 58 10 91 115 101 116 32 115 101 113 32 91 118 97 108 117 101 32 82 101 97 100 49 46 102 105 108 101 93 59 32 114 101 116 117 114 110 93 10 10 35 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 10 35 83 84 82 73 78 71 10 10 35 82 101 112 108 97 99 101 32 115 116 114 105 110 103 32 105 110 32 99 117 114 114 101 110 116 32 110 111 100 101 32 102 105 108 101 32 107 110 111 98 32 119 105 116 104 32 114 101 103 101 120 32 40 115 116 114 105 110 103 32 8220 112 114 111 106 8221 32 116 111 32 8220 112 114 111 106 101 99 116 115 8221 32 105 110 32 97 108 108 32 111 99 99 117 114 101 110 99 101 115 41 58 10 91 114 101 103 115 117 98 32 45 97 108 108 32 34 112 114 111 106 34 32 91 118 97 108 117 101 32 110 111 100 101 49 52 48 97 56 49 51 50 48 46 102 105 108 101 93 32 34 112 114 111 106 101 99 116 115 34 93 32 10 10 35 83 116 114 105 110 103 32 109 97 112 32 40 114 101 112 108 97 99 101 32 109 117 108 116 105 112 108 101 32 115 116 114 105 110 103 112 97 105 114 115 41 32 40 116 104 105 115 32 114 101 116 117 114 110 115 58 32 120 120 102 102 102 102 120 120 121 121 41 58 10 120 120 102 102 102 102 120 120 121 121 10 10 35 67 111 109 112 97 114 101 32 115 116 114 105 110 103 115 58 10 91 115 116 114 105 110 103 32 101 113 117 97 108 32 91 118 97 108 117 101 32 84 101 120 116 49 46 109 101 115 115 97 103 101 93 32 34 98 108 97 34 93 10 10 35 82 101 103 101 120 112 32 109 97 116 99 104 105 110 103 58 10 91 114 101 103 101 120 112 32 45 105 110 108 105 110 101 32 34 95 118 92 91 48 45 57 93 123 51 125 34 32 91 118 97 108 117 101 32 82 101 97 100 50 46 102 105 108 101 93 93 32 10 10 35 69 118 97 108 117 97 116 105 110 103 32 115 116 114 105 110 103 10 70 97 108 115 101 10 10 35 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 10 35 73 70 32 67 79 78 68 73 84 73 79 78 10 10 91 105 102 32 123 99 111 110 100 105 116 105 111 110 125 32 123 101 120 112 114 49 125 32 101 108 115 101 32 123 101 120 112 114 50 125 93 10 10 35 69 120 97 109 112 108 101 58 10 91 105 102 32 123 91 118 97 108 117 101 32 98 108 97 99 107 112 111 105 110 116 93 61 61 49 125 32 123 114 101 116 117 114 110 32 50 125 32 123 114 101 116 117 114 110 32 51 125 93 10 91 105 102 32 123 91 118 97 108 117 101 32 98 108 97 99 107 112 111 105 110 116 93 61 61 49 125 32 123 114 101 116 117 114 110 32 84 114 117 101 125 32 123 114 101 116 117 114 110 32 70 97 108 115 101 125 93 10 91 105 102 32 123 91 118 97 108 117 101 32 98 108 97 99 107 112 111 105 110 116 93 61 61 49 125 32 123 114 101 116 117 114 110 32 98 108 97 99 107 112 111 105 110 116 125 32 123 114 101 116 117 114 110 32 119 104 105 116 101 112 111 105 110 116 125 93 10 91 105 102 32 123 91 118 97 108 117 101 32 102 105 108 116 101 114 93 61 61 34 103 97 117 115 115 105 97 110 34 125 32 123 114 101 116 117 114 110 32 102 105 108 116 101 114 125 32 123 114 101 116 117 114 110 32 70 97 108 115 101 125 93 10 10 35 79 84 72 69 82 32 77 69 84 72 79 68 10 99 111 110 100 105 116 105 111 110 32 63 32 116 104 101 110 32 58 32 101 108 115 101 10 10 35 69 120 97 109 112 108 101 58 10 35 105 102 32 40 114 61 61 49 41 63 32 114 101 116 117 114 110 32 48 58 32 101 108 115 101 32 40 114 101 116 117 114 110 32 114 42 50 41 10 114 32 61 61 49 32 63 32 48 32 58 32 114 42 50 10 10 35 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 10 35 80 65 84 72 32 77 65 78 73 80 85 76 65 84 73 79 78 83 58 10 10 35 70 105 108 101 112 97 116 104 32 119 105 116 104 111 117 116 32 101 120 116 101 110 115 105 111 110 58 10 91 102 105 108 101 32 114 111 111 116 110 97 109 101 32 91 118 97 108 117 101 32 110 111 100 101 49 52 48 97 56 49 51 50 48 46 102 105 108 101 93 93 10 10 35 70 105 108 101 110 97 109 101 32 111 110 108 121 58 10 91 98 97 115 101 110 97 109 101 32 91 118 97 108 117 101 32 110 111 100 101 49 52 48 97 56 49 51 50 48 46 102 105 108 101 32 93 93 10 10 35 70 105 108 101 110 97 109 101 32 111 110 108 121 32 119 105 116 104 111 117 116 32 101 120 116 101 110 115 105 111 110 58 10 91 98 97 115 101 110 97 109 101 91 102 105 108 101 32 114 111 111 116 110 97 109 101 32 91 118 97 108 117 101 32 110 111 100 101 49 52 48 97 56 49 51 50 48 46 102 105 108 101 93 93 93} } old_expression_markers {{158 158 471 471 1627 1639 1732 1741 1895 1899 2531 2543 2586 2598 2674 2686} } transforms {{0 2} } cursor_position 954 scale {1 1} center {1536 790} group_animations {{0} imported: 0 selected: 0 items: "root transform/"} animation_layers {{1 11 1536 790 0 0 1 1 0 0 0 0} } name Text_TCL xpos -2 ypos 35 } Text2 { inputs 0 font_size_toolbar 100 font_width_toolbar 100 font_height_toolbar 100 message "https://www.tutorialspoint.com/python/index.htm\n\nhttps://learn.foundry.com/nuke/developers/63/pythondevguide/basics.html\n\nhttps://learn.foundry.com/nuke/developers/63/pythondevguide/index.html\n\n#----------------------------------------------------------------------------------------------\n\nhttp://www.nukepedia.com/tcl/tcl-reference\n\nhttp://www.nukepedia.com/reference/Tcl/group__tcl__builtin.html\\\n\nhttp://www.lookinvfx.com/nuke-tcl-snippets/\n\nhttp://thoughtvfx.blogspot.de/2012/12/nuke-tcl-tips.html\n" old_message {{101 119 113 101 113 119 101 113} } transforms {{0 2} } cursor_position 52 scale {1 1} center {1536 790} cursor_initialised true initial_cursor_position {{0 1580} } group_animations {{0} imported: 0 selected: 0 items: "root transform/"} animation_layers {{1 11 1536 790 0 0 1 1 0 0 0 0} } name Text_websites xpos -3 ypos 115 } StickyNote { inputs 0 name StickyNote_PythonMath label "#MATH FUNCTIONS AND WAVE GENERATOR\n#PYTHON\n#--------------------------------------------------------\n\n#IMPORT THE MATH LIBRARY\nimport math\n\n#--------------------------------------------------------\n#WAVE GENERATOR\n\n#RANDOM WAVE\nrandom((frame+offset)/waveLength) * (maxVal-minVal) + minVal\n\n#NOISE WAVE\n(noise((frame+offset)/waveLength)+1)/2 * (maxVal-minVal) + minVal\n\n#SINE WAVE\n(sin(2*pi*(frame+offset)/waveLength)+1)/2 * (maxVal-minVal) + minVal\n\n#TRIANGLE WAVE\n(asin(sin(2*pi*(frame+offset)/waveLength))/pi+0.5) * (maxVal-minVal) + minVal\n\n#SQUARE WAVE\nint(sin(2*pi*(frame+offset)/waveLength)+1) * (maxVal-minVal) + minVal\n\n#SAWTOOTH WAVE\n((frame+offset) % waveLength)/waveLength * (maxVal-minVal) + minVal\n\n#SAWTOOTH (PARABOLIC) WAVE\nsin((pi*(frame+offset)/(2*waveLength)) % (pi/2)) * (maxVal-minVal) + minVal\n\n#SAWTOOTH (PARABOLIC REVERSED) WAVE\ncos((pi*(frame+offset)/(2*waveLength)) % (pi/2)) * (maxVal-minVal) + minVal\n\n#SAWTOOTH (EXPONENTIAL) WAVE\n(exp(2*pi*((frame+offset) % waveLength)/waveLength)-1)/exp(2*pi) * (maxVal-minVal) + minVal\n\n#BOUNCE WAVE\nabs(sin(pi*(frame + offset)/waveLength))* (maxVal-minVal) + minVal\n\n#BLIP\n((frame+(offset+waveLength)) % (waveLength+blipLength)/(waveLength)) *(waveLength/blipLength) - (waveLength/blipLength) >= 0 ? maxVal : minVa\n\n#SINEBLIP\n((int((frame+offset) % waveLength)) >= 0 ? ((int((frame+offset) % waveLength)) <= (0+(blipLength-1)) ? ((sin(pi*((frame+offset) % waveLength)/blipLength)/2+1/2) * (2*maxVal-2*minVal) + (2*minVal-maxVal)) : minVal) : minVal)\n" xpos -1473 ypos 5091 } StickyNote { inputs 0 name StickyNote_websiteMath label "www.cameroncarson.com/nuke-wave-expressions/\n\nhttps://docs.python.org/2/library/math.html\n\nhttps://en.wikibooks.org/wiki/Python_Programming/Basic_Math\n\n#--------------------------------------------------------------------------\n\nhttps://help.thefoundry.co.uk/nuke/8.0/content/user_guide/expressions/adding_math_functions.html\n" xpos -415 ypos 5085 } StickyNote { inputs 0 name StickyNote_Tricks label "TRICKS\n\n#-----------------------------------------------------------------------------\n#In case you would like to switch the antialiasing inside a Scanline Renderer to “high” when rendering on the farm, but keep working in the GUI with “none”, you could use a line like this:\nnuke.selectedNode()\['antialiasing'].setExpression('\$gui? 0:3')\n\n#-----------------------------------------------------------------------------\ntcl:\nin Transform1.filter \{set_expression \{Transform2.filter\}\}\npython\nk=nuke.toNode('Transform1')\['filter']\nk.setExpression('Transform2.filter',0)\n\n#-----------------------------------------------------------------------------\n#Switch Node change only in the frames in the list\n# If you use this inside a Switch Node, it can change value only in those frames\nnuke.frame() in \[1025,1072,1074]\n\n#current frame\nprint nuke.frame()\n\n#go to frame x\nnuke.frame(x)\n\n#------------------------------------------------------------------------------------------\n#AUTOLABEL\n\nn = nuke.selectedNodes()\nfor p in n:\n p\['autolabel'].setValue(\"nuke.thisNode().name()\")\n\n#Example01\n#Try this with a Grade Node\nn = nuke.selectedNodes()\nfor p in n:\n p\['autolabel'].setValue(\"nuke.thisNode().name() + \\\"\\\\n\\\" + '(' + str(nuke.thisNode()\['white'].value()) + ')' \")\n\n#Example02\n#Try this with a Blur Node\nn = nuke.selectedNodes()\nfor p in n:\n p\['autolabel'].setValue(\"nuke.thisNode().name() + \\\"\\\\n\\\" + '(' + nuke.thisNode()\['filter'].value() + ')' \")\n\n#Example03\n#When you create a Blur node, every time you will see this autolabel\ndef BlurLabel():\n n = nuke.thisNode()\n if n.Class() == \"Blur\":\n autoLabel = n.name() + (' big!' if n\['size'].value()>100 else ' small')\n if n\['label'].value():\n autoLabel = autoLabel + '\\n' + str(n\['size'].value())\n return autoLabel\n \nnuke.addAutolabel(BlurLabel)" selected true xpos -1890 ypos 6835 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_RP_Reformat.gizmo ================================================ Group { name RP_Reformat onCreate "\nnuke.thisGroup()\['old_pixel_aspect'].setFlag(0x00000100)\nnuke.thisGroup()\['new_pixel_aspect'].setFlag(0x00000100)\n" tile_color 0x115918ff note_font "DejaVu LGC Sans" addUserKnob {20 tab_general l General} addUserKnob {26 title_oldres l "OLD RESOLUTION"} addUserKnob {41 use_from l "use 'from' input to define" T menu01.use_from} addUserKnob {3 old_width l width/height +DISABLED} old_width 1280 addUserKnob {3 old_height l "" -STARTLINE +DISABLED} old_height 720 addUserKnob {78 old_pixel_aspect l "pixel aspect" +DISABLED n 1} old_pixel_aspect 1 addUserKnob {26 title_newres l "NEW RESOLUTION"} addUserKnob {41 use_to l "use 'to' input to define" T menu02.use_to} addUserKnob {3 new_width l width/height +DISABLED} new_width 1920 addUserKnob {3 new_height l "" -STARTLINE +DISABLED} new_height 1080 addUserKnob {78 new_pixel_aspect l "pixel aspect" +DISABLED n 1} new_pixel_aspect 1 addUserKnob {26 ""} addUserKnob {4 resize l "resize type" t "Choose which direction controls the scaling factor:\n\nwidth : scale so it fills the output width\nheight : scale so it fills the output height\ndistort : non-uniform scale to match both width & height" M {width height "distort " "" "" "" "" ""}} addUserKnob {26 ""} addUserKnob {6 new_connection l "connect to the new roto/rotopaint node(s)" t "Replace the new reformated Roto/Rotopaint into the tree." +STARTLINE} addUserKnob {22 convert_rp l "convert roto/rotopaint node(s)" t "Convertion will generate a new roto/rotopaint node instead of override the existing one. Support multiple roto/rotopaint selected at the same time.\n\nGenerated roto/rotopaint node :\n\nclip to : will force to 'no clip'\n\nfeather : will multiply the value change\n\ntranslate : only override the new value when resize type is width/height\nscale : will override the new value\ncenter : will override the new value\n\nbrush size : will multiply the value change\neffect : will multiply the value change\n\nclone\nsource translate : will multiply the value change" T "import nuke.rotopaint as rp\nimport _curvelib as cl\nimport random\n\n##### function #####\n\ndef getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\ndef getItems( rpn , eleD , mode ) :\n\tif mode == 'root' :\n\t\tfor element in rpn\['curves'].rootLayer :\n\t\t\tif isinstance( element , rp.Shape ) :\n\t\t\t\teleD\['Shape'].append( element.name )\n\t\t\tif isinstance( element , rp.Stroke ) :\n\t\t\t\teleD\['Stroke'].append( element.name )\n\t\t\tif isinstance( element , rp.Layer ) :\n\t\t\t\teleD\['Layer'].append( element.name )\n\tif mode == 'sub' :\n\t\ttempLay = \[]\n\t\tfor i in eleD\['Layer'] :\n\t\t\tfor j in rpn\['curves'].toElement( i ) :\n\t\t\t\tif isinstance( j , rp.Shape ) :\n\t\t\t\t\teleD\['Shape'].append( i + '/' + j.name )\n\t\t\t\tif isinstance( j , rp.Stroke ) :\n\t\t\t\t\teleD\['Stroke'].append( i + '/' + j.name )\n\t\t\t\tif isinstance( j , rp.Layer ) :\n\t\t\t\t\ttempLay.append( i + '/' + j.name )\n\t\teleD\['Layer'] = tempLay\n\treturn eleD\n\ndef checkLay( layList ) :\n\tif len( layList ) > 0 :\n\t\tstatus = 0\n\telse :\n\t\tstatus = 1\n\treturn status\n\ndef duplicateNode( srcNode ) :\n\tdNode = nuke.createNode( srcNode.Class(), srcNode.writeKnobs( nuke.TO_SCRIPT | nuke.WRITE_NON_DEFAULT_ONLY ) )\n\tdNode\['cliptype'].setValue(0)\n\tfor i in range( dNode.inputs() ) :\n\t\tdNode.setInput( i, None )\n\tdNode.hideControlPanel()\n\treturn dNode\n\ndef gatherDown( srcNode ) :\n\tds = srcNode.dependent()\n\tdsCon = \[]\n\tfor dnode in ds :\n\t\ttemp = \[ dnode ]\n\t\tfor i in range( dnode.inputs() ) :\n\t\t\ttry :\n\t\t\t\tif dnode.input(i).name() == srcNode.name() :\t\t\t\t\t\t\t\n\t\t\t\t\ttemp.append( i )\n\t\t\texcept :\n\t\t\t\tpass\n\t\tdsCon.append( temp )\n\treturn dsCon\n\n###############\n\n##### base #####\nrpNodes = \[]\nrpCon = \{\}\n\nthisGRP = nuke.thisGroup()\n\nif thisGRP\['use_from'].value() :\n\tifrom = nuke.toNode('from')\n\toldres = \[ int( ifrom.width() ) , int( ifrom.height() ) , float( ifrom.pixelAspect() ) ]\nelse :\n\toldres = \[ int( thisGRP\['old_width'].getValue() ) , int( thisGRP\['old_height'].getValue() ) , float( thisGRP\['old_pixel_aspect'].getValue() ) ]\n\nif thisGRP\['use_to'].value() :\n\tito = nuke.toNode('to')\n\tnewres = \[ int( ito.width() ) , int( ito.height() ) , float( ito.pixelAspect() ) ]\nelse :\n\tnewres = \[ int( thisGRP\['new_width'].getValue() ) , int( thisGRP\['new_height'].getValue() ) , float( thisGRP\['new_pixel_aspect'].getValue() ) ]\n\nxGrid = int( nuke.toNode('preferences')\['GridWidth'].getValue() )\n\nwith getLevel() :\n\tnodeCheck = 0\n\n\tfor node in nuke.selectedNodes() :\n\t\tif node.Class() == 'Roto' or node.Class() == 'RotoPaint' :\n\t\t\trpNodes.append( node )\n\t\t\tnodeCheck = 1\n\n\tif nodeCheck :\n\n\t\t##### transformation curve #####\n\n\t\tif thisGRP\['resize'].getValue() == 0 :\n\t\t\twidthRatio = newres\[0] / oldres\[0]\n\t\t\theightRatio = ( newres\[0] / oldres\[0] ) * ( newres\[2] / oldres\[2] )\n\t\telif thisGRP\['resize'].getValue() == 1 :\n\t\t\twidthRatio = ( newres\[1] / oldres\[1] ) * ( oldres\[2] / newres\[2] )\n\t\t\theightRatio = newres\[1] / oldres\[1]\n\t\telse :\n\t\t\twidthRatio = newres\[0] / oldres\[0]\n\t\t\theightRatio = newres\[1] / oldres\[1]\n\n\t\tTranslateNC_x = cl.AnimCurve()\n\t\tTranslateNC_y = cl.AnimCurve()\n\t\tScaleNC_x = cl.AnimCurve()\n\t\tScaleNC_y = cl.AnimCurve()\n\t\tPivotNC = cl.AnimCurve()\n\n\t\tif thisGRP\['resize'].getValue() == 0 :\n\t\t\tTranslateNC_y.expressionString = str( (newres\[1]-(oldres\[1]*heightRatio))/2 )\n\t\tif thisGRP\['resize'].getValue() == 1 :\n\t\t\tTranslateNC_x.expressionString = str( (newres\[0]-(oldres\[0]*widthRatio))/2 )\n\t\tScaleNC_x.expressionString = str( widthRatio )\n\t\tScaleNC_y.expressionString = str( heightRatio )\n\t\tPivotNC.expressionString = '0'\n\t\tfor curve in \[ TranslateNC_x , TranslateNC_y , ScaleNC_x , ScaleNC_y , PivotNC ]:\n\t\t\tcurve.useExpression = True\n\n\t\t###############\n\n\t\tfor o_rpNode in rpNodes :\n\t\t\teleD = \{\n\t\t\t\t'Shape' : \[] ,\n\t\t\t\t'Stroke' : \[] ,\n\t\t\t\t'Layer' : \[]\n\t\t\t\t\}\n\n\t\t\tdownNodes = gatherDown( o_rpNode )\n\n\t\t\trpNode = duplicateNode( o_rpNode )\n\t\t\trpNode.setXYpos( int( o_rpNode.xpos() + xGrid + random.randint( 0 , xGrid ) ) , int( o_rpNode.ypos() ) )\n\t\t\trpNode\['output'].setValue( o_rpNode\['output'].value() )\n\t\t\trpNode\['label'].setValue( 'old : \{0\}x\{1\} \{2\}
new : \{3\}x\{4\} \{5\}
reize type : \{6\}'.format( str(oldres\[0]) , str(oldres\[1]) , str(int(oldres\[2])) , str(newres\[0]) , str(newres\[1]) , str(int(newres\[2])) , thisGRP\['resize'].value() ) )\n\n\t\t\tif thisGRP\['new_connection'].value() :\n\t\t\t\tif len(o_rpNode.dependencies()) :\n\t\t\t\t\trpCon\[rpNode.name()] = \[ o_rpNode.dependencies()\[0] , downNodes ]\n\t\t\t\telse :\n\t\t\t\t\trpCon\[rpNode.name()] = \[ None , downNodes ]\n\t\t\telse :\n\t\t\t\tif len(o_rpNode.dependencies()) :\n\t\t\t\t\trpCon\[o_rpNode.name()] = \[ o_rpNode.dependencies()\[0] , downNodes ]\n\t\t\t\telse :\n\t\t\t\t\trpCon\[o_rpNode.name()] = \[ None , downNodes ]\n\n\t\t\t##### get all items #####\n\t\t\teleD = getItems( rpNode , eleD , 'root' )\n\t\t\tchkstatus = checkLay( eleD\['Layer'] )\n\t\t\twhile chkstatus < 1 :\n\t\t\t\teleD = getItems( rpNode , eleD , 'sub' )\n\t\t\t\tchkstatus = checkLay( eleD\['Layer'] )\n\t\t\tdel eleD\['Layer']\n\n\t\t\t##### process #####\n\t\t\tfor key in eleD.keys() :\n\t\t\t\tfor i in eleD\[key] :\n\t\t\t\t\tshape = rpNode\['curves'].toElement( i )\n\t\t\t\t\tst = shape.getTransform()\n\t\t\t\t\tsa = shape.getAttributes()\n\n\t\t\t\t\tst.setTranslationAnimCurve( 0 , TranslateNC_x )\n\t\t\t\t\tst.setTranslationAnimCurve( 1 , TranslateNC_y )\n\t\t\t\t\tst.setScaleAnimCurve( 0 , ScaleNC_x )\n\t\t\t\t\tst.setScaleAnimCurve( 1 , ScaleNC_y )\n\t\t\t\t\tst.setPivotPointAnimCurve( 0 , PivotNC )\n\t\t\t\t\tst.setPivotPointAnimCurve( 1 , PivotNC )\n\n\t\t\t\t\ttry :\n\t\t\t\t\t\tsa.set( 'fx' , sa.getCurve('fx').constantValue * widthRatio )\n\t\t\t\t\t\tsa.set( 'fy' , sa.getCurve('fy').constantValue * heightRatio )\n\t\t\t\t\texcept :\n\t\t\t\t\t\tpass\n\n\t\t\t\t\tif key == 'Stroke' :\n\t\t\t\t\t\tsa.set( 'bs' , sa.getCurve('bs').constantValue * widthRatio )\n\t\t\t\t\t\tsa.set( 'ep1' , sa.getCurve('ep1').constantValue * widthRatio )\n\t\t\t\t\t\tsa.set( 'stx' , sa.getCurve('stx').constantValue * widthRatio )\n\t\t\t\t\t\tsa.set( 'sty' , sa.getCurve('sty').constantValue * heightRatio )\n\n\t\t\trpNode\['curves'].changed()\n\n\t\tfor key, value in rpCon.items() :\n\t\t\tnuke.toNode(key).setInput( 0, value\[0] )\n\t\t\tfor dNode in value\[1] :\n\t\t\t\tfor i in range( 1 , len(dNode) , 1 ) :\n\t\t\t\t\tdNode\[0].setInput( dNode\[i] , nuke.toNode( key ) )\n\n\telse :\n\t\tnuke.message('Only work with Roto / RotoPaint node(s).

Select one or more Roto / RotoPaint node(s) and run again.')" +STARTLINE} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.4} addUserKnob {26 l_DATE l "Date Modified" T 2020-05-06} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.4
- fixed gizmo is a gizmo, not group

1.2
- Tong Lyons's feedback :
  added 'from' & 'to' input for the old/new resolution

1.1
- fixed the Rotopaint nodes connection issue
- fixed the new Rotopaint node's output channel,
  will keep that same as the source node.
- added 'resize type' info in new RP node's label
- removed the animation menu on pixel_aspect knob.

1.0
- batch resize Roto / RotoPaint's vector data \"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -412 ypos -182 bdwidth 226 bdheight 208 } Input { inputs 0 name to xpos 62 ypos -125 number 1 } Input { inputs 0 name from xpos -99 ypos -124 } NoOp { inputs 0 name menu01 knobChanged "\nknobs = \['old_width','old_height','old_pixel_aspect']\nfor knob in knobs :\n nuke.thisGroup()\[knob].setEnabled( not nuke.thisGroup()\['use_from'].value() )\n" xpos -343 ypos -95 addUserKnob {20 User} addUserKnob {6 use_from l "use 'from' input to define" +STARTLINE} use_from true } NoOp { inputs 0 name menu02 knobChanged "\nknobs = \['new_width','new_height','new_pixel_aspect']\nfor knob in knobs :\n nuke.thisGroup()\[knob].setEnabled( not nuke.thisGroup()\['use_to'].value() )\n" xpos -343 ypos -32 addUserKnob {20 User} addUserKnob {6 use_to l "use 'to' input to define" +STARTLINE} use_to true } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_RadialAdvanced.gizmo ================================================ Group { name RadialAdvanced tile_color 0x5f5f5fff note_font "Verdana Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" note_font_color 0xffffffff selected true addUserKnob {20 RadialAdvanced} addUserKnob {41 format l "output format" T Reformat1.format} addUserKnob {6 replace +STARTLINE} addUserKnob {6 invert -STARTLINE} addUserKnob {41 color T OUTER_EDGE_RADIAL.color} addUserKnob {26 ""} addUserKnob {41 scale l "Master Scale" T MasterTransform.scale} addUserKnob {26 ""} addUserKnob {26 innerDiv l Inner} addUserKnob {41 scale_1 l "Inner Scale" T InnerControl.scale} addUserKnob {7 innerFeather l "Inner Feather"} innerFeather 0.3 addUserKnob {26 ""} addUserKnob {26 OuterDiv l Outer} addUserKnob {41 size l "Blur Outer Edge" T Outer_Edge_Blur.size} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask -STARTLINE T Merge3.maskChannelMask} addUserKnob {41 inject -STARTLINE T Merge3.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge3.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge3.fringe} addUserKnob {41 mix T Merge3.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "sliders and controls to easier animate Radial Tool" T RadialAdvanced} addUserKnob {26 ver l Version: T v03} } Input { inputs 0 name Input xpos -230 ypos -583 } Reformat { pbb true name Reformat1 xpos -230 ypos -527 disable {{"\[exists parent.input0]"}} } Dot { name Dot9 note_font_size 41 xpos -196 ypos -457 } set N9918c220 [stack 0] Dot { name Dot8 note_font_size 41 xpos -349 ypos -457 } set N991900f0 [stack 0] Dot { name Dot6 note_font_size 41 xpos -459 ypos -457 } set N99193fd0 [stack 0] Dot { name Dot5 note_font_size 41 xpos -549 ypos -457 } Transform { center {{input.width/2} {input.height/2}} name MasterTransform xpos -583 ypos -405 } push $N99193fd0 Transform { center {{input.width/2} {input.height/2}} name InnerControl xpos -493 ypos -406 } Input { inputs 0 name Inputmask xpos -544 ypos 135 number 1 } push $N9918c220 Remove { operation keep channels rgba name Remove1 xpos -230 ypos -424 } Shuffle { red black green black blue black alpha black name Shuffle1 label "\[value in]" xpos -230 ypos -400 } Dot { name Dot1 xpos -196 ypos -352 } set N991beaa0 [stack 0] Dot { name Dot3 xpos -72 ypos -352 } Radial { area {4 4 {input.width-4} {input.height-4}} softness {{3*parent.innerFeather}} name INNER_EDGE_RADIAL xpos -106 ypos -307 } Crop { box {0 0 {input.width} {input.height}} name Crop2 xpos -106 ypos -261 } Transform { scale {{parent.InnerControl.scale}} center {{input.width/2} {input.height/2}} filter Mitchell name Transform3 xpos -106 ypos -216 } Blur { channels rgba crop false name Inner_Edge_Blur label "\[value size]" xpos -106 ypos -171 } Dot { name Dot2 xpos -72 ypos -97 } set N991e6d30 [stack 0] push $N991beaa0 Radial { area {{parent.INNER_EDGE_RADIAL.area} {parent.INNER_EDGE_RADIAL.area} {parent.INNER_EDGE_RADIAL.area} {parent.INNER_EDGE_RADIAL.area}} softness 0 name OUTER_EDGE_RADIAL xpos -230 ypos -286 } Crop { box {0 0 {input.width} {input.height}} name Crop1 xpos -230 ypos -262 } Blur { channels rgba size 2 crop false name Outer_Edge_Blur label "\[value size]" xpos -230 ypos -169 } Dot { name Dot4 note_font_size 41 xpos -196 ypos -103 } set N9930ecc0 [stack 0] Merge2 { inputs 2 operation mask bbox A name Merge2 xpos -106 ypos -46 } push $N991e6d30 push $N9930ecc0 Merge2 { inputs 2 operation stencil bbox B name Merge1 xpos -230 ypos -53 } Switch { inputs 2 which {{parent.invert i}} name INVERT_SWITCH xpos -230 ypos 13 } Transform { scale {{parent.MasterTransform.scale}} center {{parent.Transform3.center} {parent.Transform3.center}} filter Mitchell black_outside false name transform4 xpos -230 ypos 65 } Dot { name Dot7 note_font_size 41 xpos -196 ypos 138 } push $N991beaa0 push $N991900f0 Switch { inputs 2 which {{parent.replace}} name Switch1 xpos -383 ypos -355 } Merge2 { inputs 2+1 Achannels {-rgba.red -rgba.green -rgba.blue -rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue -rgba.alpha} output {-rgba.red -rgba.green -rgba.blue -rgba.alpha} also_merge rgba name Merge3 xpos -383 ypos 135 } Output { name Output1 xpos -383 ypos 221 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_RadialDilate.gizmo ================================================ Group { name RadialDilate tile_color 0xcc804eff note_font_color 0xffffffff addUserKnob {20 RadialDilate} addUserKnob {41 "Local GPU: " T BlinkScript4.gpuName} addUserKnob {41 "Use GPU if Available" T BlinkScript4.useGPUIfAvailable} addUserKnob {26 ""} addUserKnob {41 size_wh l size T BlinkScript4.size_wh} addUserKnob {41 blackoutside l "black outside" -STARTLINE T BlinkScript4.blackoutside} addUserKnob {26 _1 l "" +STARTLINE} addUserKnob {41 maskChannelMask l mask -STARTLINE T Merge1.maskChannelMask} addUserKnob {41 inject -STARTLINE T Merge1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge1.fringe} addUserKnob {41 mix T Merge1.mix} addUserKnob {26 ""} addUserKnob {26 credit l "" +STARTLINE T "Chris Fryer | 2021\n"} } Input { inputs 0 name Inputmask xpos -54 ypos 43 number 1 } Dot { name Dot1 xpos -20 ypos 106 } Input { inputs 0 name Input xpos -270 ypos -100 } AdjBBox { numpixels {{ceil(abs(parent.BlinkScript4.size_wh.w))} {ceil(abs(parent.BlinkScript4.size_wh.h))}} name AdjBBox1 xpos -270 ypos -45 } set N6b5f9400 [stack 0] BlackOutside { name BlackOutside1 xpos -195 ypos -5 disable {{1-parent.BlinkScript4.blackoutside}} } BlinkScript { recompileCount 69 ProgramGroup 1 KernelDescription "2 \"RadialDilate\" iterate pixelWise 575f702e36ae4a4540fceb6e0eb10c07d958cba14a62650f9022854aca2b2c0d 2 \"src\" Read Ranged2D \"dst\" Write Point 2 \"size\" Float 2 AAAAAAAAAAA= \"invert\" Bool 1 AA== 2 \"size\" 2 1 \"invert\" 1 1 3 \"srcrangeMin\" Int 2 1 AAAAAAAAAAA= \"srcrangeMax\" Int 2 1 AAAAAAAAAAA= \"output\" Float 4 1 AAAAAAAAAAAAAAAAAAAAAA==" kernelSource "\nkernel RadialDilate : ImageComputationKernel\n\{\n Image src; // the input image\n \n Image dst; // the output image\n\n param:\n\n //user controls for size\n float2 size;\n //hidden control to decide min vs max\n bool invert;\n local:\n // will become our output image\n float4 output = 0;\n\n void define() \{\n\n \}\n\n void init() \{\n\n src.setRange(-size.x, -size.y, size.x, size.y);\n\n \}\n\n void process() \{\n\n //this applies a foundation for our output (stops us getting minimum values of zero unless they're in the image)\n output = src(0,0);\n\n for(int X = -size.x; X <= size.x; X++)\{\n for(int Y = -size.y; Y <= size.y; Y++)\{ \n\n //only includes values inside out virtual radial\n if( (size.x - pow((pow(float(X),2)+pow(float(Y*(float(size.x)/float(size.y))),2)),0.5f)) > 0)\{\n\n //assigns min vs max output depending on whether or not the input size is negative \n output = invert ? min(output,src(X,Y)) : max(output,src(X,Y));\n\n \}\n \}\n\n \}\n\n dst() = output;\n \n \}\n\};\n" rebuild "" RadialDilate_size {{abs(size_wh.w)+1} {abs(size_wh.h)+1}} RadialDilate_invert {{"size_wh.w < 0 || size_wh.h < 0 "}} rebuild_finalise "" name BlinkScript4 selected true xpos -195 ypos 44 addUserKnob {20 User} addUserKnob {6 blackoutside l "black outside" +STARTLINE} addUserKnob {14 size_wh R -100 100} } push $N6b5f9400 Merge2 { inputs 2+1 operation copy name Merge1 xpos -270 ypos 103 } set N6b5f8800 [stack 0] Output { name Output1 xpos -270 ypos 180 } push $N6b5f8800 Viewer { frame_range 1-100 name Viewer1 xpos -270 ypos 127 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_RainMaker.gizmo ================================================ Group { name RainMaker selected true addUserKnob {20 User l RainMaker} addUserKnob {6 rainonly l "Rain only (No comp)" +STARTLINE} addUserKnob {6 dropspass l "Use Pre-Rendered Drops input" t "If you have pre-rendered the \"Rain only?\" outpout, you can use this instead of re-siming at rendertime. " +STARTLINE} addUserKnob {20 globals_1 l Globals n 1} addUserKnob {7 emissionmulti l "Emission Multiplier"} emissionmulti 1 addUserKnob {7 res l Resolution t "This controls the resolution for the render of the effect. The default value (0.5) works well in most cases." R 0.25 1} res 0.5 addUserKnob {41 start_frame l "Big start frame" T ParticleEmitter1.start_frame} addUserKnob {41 start_frame_1 l "Med start frame" T ParticleEmitter3.start_frame} addUserKnob {41 start_frame_2 l "Small start frame" T ParticleEmitter2.start_frame} addUserKnob {41 lifetime T ParticleEmitter1.lifetime} addUserKnob {7 ygravity l "Y Gravity Component" R -1 1} ygravity -1 addUserKnob {7 xgravity l "X Gravity Component" R -1 1} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {20 particles l Particles n 1} particles 0 addUserKnob {6 bigenabled l Big? +STARTLINE} bigenabled true addUserKnob {6 medenabled l Medium? -STARTLINE} medenabled true addUserKnob {6 smalenabled l Small? -STARTLINE} smalenabled true addUserKnob {6 trailkill l "Disable trails" t "Turning off the trails, will speed things up considerably. Its best to disable the trails while you get the drops right, then turn them back on later (if you have moving particles)" +STARTLINE} addUserKnob {20 bigparts l "Big Ctrls" n 1} addUserKnob {41 seed l "random seed" T ParticleEmitter1.seed} addUserKnob {7 bigamount l Amount} bigamount 0.1 addUserKnob {41 size T ParticleEmitter1.size} addUserKnob {41 size_variation l "size variation" T ParticleEmitter1.size_variation} addUserKnob {6 biggravity l "Gravity Enabled?" +STARTLINE} biggravity true addUserKnob {7 gravity l "Gravity Multiplier"} gravity 0.1 addUserKnob {41 probability l "Gravity Probability" T ParticleGravity1.probability} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {20 meddrop l "Med Ctrls" n 1} addUserKnob {41 seed_1 l "random seed" T ParticleEmitter3.seed} addUserKnob {7 medrate l Amount R 0 5} medrate 1.5 addUserKnob {41 size_1 l size T ParticleEmitter3.size} addUserKnob {41 size_variation_1 l "size variation" T ParticleEmitter3.size_variation} addUserKnob {6 medgrav l "Gravity Enabled?" +STARTLINE} medgrav true addUserKnob {7 medgavity l "Gravity Multiplier"} medgavity 0.05 addUserKnob {41 probability_1 l "Gravity Probability" T ParticleGravity2.probability} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 smldrop l "Small Ctrls" n 1} smldrop 0 addUserKnob {7 smallrate l Amount R 0 10} smallrate 10 addUserKnob {41 seed_2 l "random seed" T ParticleEmitter2.seed} addUserKnob {41 size_2 l size T ParticleEmitter2.size} addUserKnob {41 size_variation_2 l "size variation" T ParticleEmitter2.size_variation} addUserKnob {20 endGroup_3 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 endGroup_4 l endGroup n -1} addUserKnob {20 effects l Effects n 1} effects 0 addUserKnob {7 blobify l "blobify radius" R 0 10} blobify 3.95 addUserKnob {7 displace l "Displace Amount"} displace 0.23 addUserKnob {41 size_3 l "Displace Noise Size" T Noise2.size} addUserKnob {3 trails l "Trail Length" t "slows it down considerably"} trails 20 addUserKnob {20 endGroup_5 l endGroup n -1} addUserKnob {20 comp l Comp n 1} comp 0 addUserKnob {6 alpha l "Copy rain to alpha?" +STARTLINE} addUserKnob {41 size_4 l "Blur Size" T Blur2.size} addUserKnob {7 ringing l "Gamma Lift"} ringing 0.19 addUserKnob {7 ringing_1 l "Ringing Ratio"} ringing_1 0.25 addUserKnob {41 mix l "Emboss Amount" T Merge2.mix} addUserKnob {41 displace_2 l Displace T Group3.displace} addUserKnob {41 size_5 l Defocus T Blur1.size} addUserKnob {20 endGroup_6 l endGroup n -1} addUserKnob {26 txt l "" +STARTLINE T "\nMade by Matt Richardson (matt_richardson_@hotmail.com)"} } Input { inputs 0 name Drops xpos 1107 ypos -58 number 1 } AddChannels { channels rgba name AddChannels2 xpos 1107 ypos -20 } Constant { inputs 0 channels rgb name Constant2 xpos 667 ypos -220 } Reformat { type scale scale {{parent.res x336 1}} name Reformat1 xpos 816 ypos -173 } set C5fb5bc00 [stack 0] Noise { size 120 zoffset 1 octaves 4 center {960 410} name Noise2 xpos 953 ypos -173 } Input { inputs 0 name BG xpos 1815 ypos -818 } set N5fb5b000 [stack 0] Camera2 { translate {0 0 42.04999924} name Camera1 xpos 1485 ypos -562 } set N5fb5ac00 [stack 0] Constant { inputs 0 channels rgb color 1 format "256 256 0 0 256 256 1 square_256" name Constant1 xpos 1043 ypos -719 } Radial { invert true area {9.5 8.5 246.5 247.5} softness 0 color 0 name Radial1 xpos 1043 ypos -597 } set N5fb5a400 [stack 0] Constant { inputs 0 channels rgb name Constant3 xpos 1537 ypos -680 } set N5fb5a000 [stack 0] Card2 { translate {0 0 38.72000122} uniform_scale 1.7 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card1 xpos 1327 ypos -656 } set N5fb59c00 [stack 0] push $N5fb5b000 ParticleEmitter { inputs 3 emit_from faces rate {{"parent.emissionmulti * parent.medrate"}} rate_variation 1 lifetime {{parent.ParticleEmitter1.lifetime}} velocity 0 size 0.024 size_variation 0.5 seed 2 name ParticleEmitter3 xpos 1175 ypos -517 disable {{1-parent.medenabled}} } ParticleGravity { to {{"parent.medgavity * 0.0002 * parent.xgravity"} {"parent.medgavity * 0.0002 * parent.ygravity"} 0} probability 0.1 name ParticleGravity2 xpos 1175 ypos -459 disable {{1-parent.medgrav}} } push $N5fb5a400 push $N5fb59c00 push $N5fb5b000 ParticleEmitter { inputs 3 emit_from faces rate {{"parent.bigamount * parent.emissionmulti"}} rate_variation 1 lifetime 100 velocity 0 size 0.05 size_variation 1 seed 1 name ParticleEmitter1 xpos 1327 ypos -597 disable {{1-parent.bigenabled}} } ParticleGravity { to {{"parent.gravity * 0.007 * parent.xgravity"} {"parent.gravity * 0.007 * parent.ygravity"} 0} probability 0.03 name ParticleGravity1 xpos 1327 ypos -523 disable {{1-parent.biggravity}} } ParticleMerge { inputs 2 name ParticleMerge1 xpos 1327 ypos -418 } push $N5fb5a000 clone $C5fb5bc00 { xpos 1537 ypos -404 selected false } set N5fb58400 [stack 0] ScanlineRender { inputs 3 ztest_enabled false filter impulse motion_vectors_type distance name ScanlineRender1 xpos 1327 ypos -361 } Erode { channels rgb size {{0-Erode3.size}} name Erode2 xpos 1327 ypos -308 } set N435ab400 [stack 0] Erode { channels rgb size -5 name Erode4 xpos 1217 ypos -309 } push $N5fb5ac00 push $N5fb5a400 push $N5fb59c00 push $N5fb5b000 ParticleEmitter { inputs 3 emit_from faces rate {{"parent.smallrate * parent.emissionmulti"}} rate_variation 1 lifetime {{parent.ParticleEmitter1.lifetime}} velocity 0 size 0.006 size_variation 1 name ParticleEmitter2 xpos 1043 ypos -488 disable {{1-parent.smalenabled}} } push $N5fb58400 ScanlineRender { inputs 3 ztest_enabled false filter impulse motion_vectors_type distance name ScanlineRender2 xpos 1043 ypos -373 } ColorCorrect { inputs 1+1 gain 0 maskChannelMask rgba.red name ColorCorrect3 xpos 1043 ypos -309 } push $N435ab400 Erode { channels rgb size {{parent.blobify}} name Erode3 xpos 1327 ypos -271 } Merge2 { inputs 2 name Merge1 xpos 1327 ypos -228 } Group { inputs 2 name Group1 xpos 1327 ypos -185 addUserKnob {20 "" l Glass} addUserKnob {7 displace l Displace R 0 20} displace {{parent.displace}} addUserKnob {41 size_1 l "smooth vectors" T Blur1.size} addUserKnob {7 abberation l Abberation} addUserKnob {26 "" l Defocus} addUserKnob {6 useDef l "Apply Defocus" -STARTLINE} addUserKnob {41 size T ZBlur1.size} addUserKnob {41 max_size l maximum T ZBlur1.max_size} addUserKnob {41 shape l "filter shape" T ZBlur1.shape} } Input { inputs 0 name img xpos -289 ypos 81 } set N435a9800 [stack 0] Dot { name Dot1 xpos -255 ypos 634 } Input { inputs 0 name control xpos -64 ypos -388 number 1 } set N435a9000 [stack 0] push $N435a9000 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy6 xpos -64 ypos -354 disable {{hasError i}} } set N435a8c00 [stack 0] Dot { name Dot2 xpos 94 ypos -343 } set N435a8800 [stack 0] Transform { translate {0 -1} center {320 240} name down xpos 60 ypos -140 } push $N435a8c00 Dot { name Dot3 xpos -122 ypos -343 } Dot { name Dot4 xpos -207 ypos -343 } Transform { translate {0 1} center {320 240} name up xpos -241 ypos -180 } push $N435a8800 Dot { name Dot5 xpos 176 ypos -343 } Transform { translate {1 0} center {320 240} name right xpos 142 ypos -221 } push $N435a8c00 Shuffle { in alpha green black blue black out rgb name Shuffle1 xpos -64 ypos -311 } Transform { translate {-1 0} center {320 240} name left xpos -64 ypos -285 } Copy { inputs 2 from0 rgba.alpha to0 rgba.green name Copy2 xpos -64 ypos -228 } Copy { inputs 2 from0 rgba.alpha to0 rgba.blue name Copy3 xpos -64 ypos -187 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy4 xpos -64 ypos -147 } Expression { temp_name0 l temp_expr0 red temp_name1 r temp_expr1 green temp_name2 u temp_expr2 blue temp_name3 d temp_expr3 alpha channel0 {forward.u -forward.v none -backward.u} expr0 (l-r)*width channel1 {-forward.u forward.v none -backward.u} expr1 (d-u)*width channel2 depth expr2 (abs(l-r)+abs(d-u))*width/2 name Expression1 xpos -64 ypos -15 } Blur { channels motion crop false name Blur1 xpos -64 ypos 13 } set N60f55000 [stack 0] Dot { name Dot6 xpos 89 ypos 22 } Dot { name Dot7 xpos 89 ypos 193 } push $N60f55000 push $N435a9800 Copy { inputs 2 from0 -rgba.alpha to0 -rgba.alpha channels forward name Copy1 xpos -64 ypos 67 } Copy { inputs 2 from0 -rgba.alpha to0 -rgba.alpha channels depth name Copy8 xpos -64 ypos 175 } ZBlur { channels rgba math -linear shape 1 name ZBlur1 xpos -64 ypos 229 disable {{!parent.useDef}} } set N60ef7800 [stack 0] IDistort { channels rgba uv forward uv_scale {{parent.displace i}} name IDistort4 xpos 98 ypos 491 } push $N60ef7800 IDistort { channels {-rgba.red -rgba.green rgba.blue rgba.alpha} uv forward uv_scale {{parent.displace/(1+parent.abberation/10)}} name IDistort3 xpos 66 ypos 314 } push $N60ef7800 IDistort { channels {rgba.red -rgba.green -rgba.blue rgba.alpha} uv forward uv_scale {{parent.displace/(1-parent.abberation/10)}} name IDistort1 xpos -188 ypos 309 } push $N60ef7800 IDistort { channels {-rgba.red rgba.green -rgba.blue rgba.alpha} uv forward uv_scale {{parent.displace i}} name IDistort2 xpos -64 ypos 311 } Copy { inputs 2 from0 rgba.red to0 rgba.red name Copy9 xpos -64 ypos 372 } Copy { inputs 2 from0 rgba.blue to0 rgba.blue name Copy10 xpos -64 ypos 412 } Switch { inputs 2 which {{parent.abberation==0}} name Switch1 xpos -64 ypos 491 addUserKnob {20 "" l Weta} addUserKnob {32 knob l "update input order" t "changes the input order according to the input nodes' horizontal order (left most node becomes input 0)" -STARTLINE T " reconnectInputs"} } Copy { inputs 2 from0 -rgba.alpha to0 -rgba.alpha channels depth name Copy5 xpos -64 ypos 616 } Output { name Output1 xpos -59 ypos 747 } end_group TimeEcho { framesbehind {{parent.trails}} frmaesfade {{parent.trails}} name TimeEcho2 xpos 1327 ypos -124 disable {{parent.trailkill}} } Switch { inputs 2 which {{parent.dropspass}} name Switch2 xpos 1327 ypos -48 } set N61b2c800 [stack 0] push $N61b2c800 Reformat { name Reformat2 xpos 1449 ypos -124 } set N60ef5000 [stack 0] Shuffle { alpha green name Shuffle1 xpos 1651 ypos -221 } set N60ef4800 [stack 0] Blur { size 11 name Blur1 xpos 1982 ypos 88 } set C60ef4400 [stack 0] set N60ef4400 [stack 0] push $N60ef4400 push $N61b2c800 Emboss { Angle 53 name Emboss1 xpos 1327 ypos 32 } ColorCorrect { gain 2 offset -1 name ColorCorrect2 xpos 1327 ypos 102 } Reformat { name Reformat3 xpos 1512 ypos 102 } clone $C60ef4400 { xpos 1653 ypos 96 selected false } push $N60ef5000 push $N60ef5000 Erode { channels rgb size 0.25 maskChannelMask rgba.red name Erode1 xpos 1576 ypos -124 } push $N60ef5000 ColorCorrect { inputs 1+1 gain 0 maskChannelMask rgba.red name ColorCorrect4 xpos 1576 ypos -64 } Merge2 { inputs 2 operation max mix {{parent.ringing_1}} name Merge3 xpos 1576 ypos 3 } clone $C60ef4400 { xpos 1716 ypos -3 selected false } push $N60ef4800 push $N60ef5000 clone $C60ef4400 { xpos 1473 ypos -330 selected false } push $N5fb5b000 AddChannels { channels rgba name AddChannels3 xpos 1815 ypos -780 } AddChannels { channels alpha color 1 name AddChannels1 xpos 1815 ypos -738 } set N616a9400 [stack 0] Blur { inputs 1+1 size 8 maskChannelMask rgba.red name Blur2 xpos 1815 ypos -330 } Group { inputs 2 name Group3 xpos 1815 ypos -221 addUserKnob {20 "" l Glass} addUserKnob {7 displace l Displace R 0 20} displace 0.4 addUserKnob {41 size_1 l "smooth vectors" T Blur1.size} addUserKnob {7 abberation l Abberation} abberation 1 addUserKnob {26 "" l Defocus} addUserKnob {6 useDef l "Apply Defocus" -STARTLINE} addUserKnob {41 size T ZBlur1.size} addUserKnob {41 max_size l maximum T ZBlur1.max_size} addUserKnob {41 shape l "filter shape" T ZBlur1.shape} } Input { inputs 0 name img xpos -289 ypos 81 } set N616a8c00 [stack 0] Dot { name Dot1 xpos -255 ypos 634 } Input { inputs 0 name control xpos -64 ypos -388 number 1 } set N616a8400 [stack 0] push $N616a8400 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy6 xpos -64 ypos -354 disable {{hasError i}} } set N43597c00 [stack 0] Dot { name Dot2 xpos 94 ypos -343 } set N43597800 [stack 0] Transform { translate {0 -1} center {320 240} name down xpos 60 ypos -140 } push $N43597c00 Dot { name Dot3 xpos -122 ypos -343 } Dot { name Dot4 xpos -207 ypos -343 } Transform { translate {0 1} center {320 240} name up xpos -241 ypos -180 } push $N43597800 Dot { name Dot5 xpos 176 ypos -343 } Transform { translate {1 0} center {320 240} name right xpos 142 ypos -221 } push $N43597c00 Shuffle { in alpha green black blue black out rgb name Shuffle1 xpos -64 ypos -311 } Transform { translate {-1 0} center {320 240} name left xpos -64 ypos -285 } Copy { inputs 2 from0 rgba.alpha to0 rgba.green name Copy2 xpos -64 ypos -228 } Copy { inputs 2 from0 rgba.alpha to0 rgba.blue name Copy3 xpos -64 ypos -187 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy4 xpos -64 ypos -147 } Expression { temp_name0 l temp_expr0 red temp_name1 r temp_expr1 green temp_name2 u temp_expr2 blue temp_name3 d temp_expr3 alpha channel0 {forward.u -forward.v none -backward.u} expr0 (l-r)*width channel1 {-forward.u forward.v none -backward.u} expr1 (d-u)*width channel2 depth expr2 (abs(l-r)+abs(d-u))*width/2 name Expression1 xpos -64 ypos -15 } Blur { channels motion size 15 crop false name Blur1 xpos -64 ypos 13 } set N43594400 [stack 0] Dot { name Dot6 xpos 89 ypos 22 } Dot { name Dot7 xpos 89 ypos 193 } push $N43594400 push $N616a8c00 Copy { inputs 2 from0 -rgba.alpha to0 -rgba.alpha channels forward name Copy1 xpos -64 ypos 67 } Copy { inputs 2 from0 -rgba.alpha to0 -rgba.alpha channels depth name Copy8 xpos -64 ypos 175 } ZBlur { channels rgba math -linear max_size 2.2 shape 1 name ZBlur1 xpos -64 ypos 229 disable {{!parent.useDef}} } set N60e7ec00 [stack 0] IDistort { channels rgba uv forward uv_scale {{parent.displace i}} name IDistort4 xpos 98 ypos 491 } push $N60e7ec00 IDistort { channels {-rgba.red -rgba.green rgba.blue rgba.alpha} uv forward uv_scale {{parent.displace/(1+parent.abberation/10)}} name IDistort3 xpos 66 ypos 314 } push $N60e7ec00 IDistort { channels {rgba.red -rgba.green -rgba.blue rgba.alpha} uv forward uv_scale {{parent.displace/(1-parent.abberation/10)}} name IDistort1 xpos -188 ypos 309 } push $N60e7ec00 IDistort { channels {-rgba.red rgba.green -rgba.blue rgba.alpha} uv forward uv_scale {{parent.displace i}} name IDistort2 xpos -64 ypos 311 } Copy { inputs 2 from0 rgba.red to0 rgba.red name Copy9 xpos -64 ypos 372 } Copy { inputs 2 from0 rgba.blue to0 rgba.blue name Copy10 xpos -64 ypos 412 } Switch { inputs 2 which {{parent.abberation==0}} name Switch1 xpos -64 ypos 491 addUserKnob {20 "" l Weta} addUserKnob {32 knob l "update input order" t "changes the input order according to the input nodes' horizontal order (left most node becomes input 0)" -STARTLINE T " reconnectInputs"} } Copy { inputs 2 from0 -rgba.alpha to0 -rgba.alpha channels depth name Copy5 xpos -64 ypos 616 } Output { name Output1 xpos -59 ypos 747 } end_group ColorCorrect { inputs 1+1 gamma {{"1 + parent.ringing"}} maskChannelMask rgba.red name ColorCorrect1 xpos 1815 ypos 3 } Merge2 { inputs 2 operation plus sRGB true Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} mix 0.085 name Merge2 xpos 1815 ypos 102 } clone $C60ef4400 { xpos 1815 ypos 178 selected false } push $N616a9400 Dot { name Dot1 xpos 2131 ypos -112 } Merge2 { inputs 2+1 name Merge4 xpos 2097 ypos 205 } ShuffleCopy { inputs 2 alpha red name ShuffleCopy1 xpos 2097 ypos 310 disable {{1-parent.alpha}} } Switch { inputs 2 which 1 name Switch1 xpos 2097 ypos 389 disable {{1-parent.rainonly}} } Output { name Output1 xpos 2097 ypos 474 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Randomizer.gizmo ================================================ Group { name Randomizer tile_color 0x5f5f5fff label "\[value type]" note_font "Verdana Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" note_font_color 0xffffffff selected true mapsize {0.15 0.15} addUserKnob {20 Settings} addUserKnob {4 type l Type: M {random noise sine triangle square bounce sawtooth "sawtooth (parabolic)" "sawtooth (parabolic reversed)" "sawtooth (exponential)" blip "sine blip" "" "" "" "" ""}} addUserKnob {4 scaleAmpFrom l "Amplitude Pivot:" M {center min max "" "" "" "" ""}} addUserKnob {7 scaleFromNum -STARTLINE +INVISIBLE} scaleFromNum {{"scaleAmpFrom == 0 ? 0 : scaleAmpFrom == 1 ? -.5 : .5"}} addUserKnob {41 Amplitude T Randomizer.Amplitude} addUserKnob {3 pivotFrame l "Pivot Frame"} addUserKnob {41 Frequency T Randomizer.Frequency} addUserKnob {26 ""} addUserKnob {41 PositionX T Randomizer.PositionX} addUserKnob {41 PositionY T Randomizer.PositionY} addUserKnob {26 ""} addUserKnob {6 squarify l "squarify | " +STARTLINE} addUserKnob {3 seed -STARTLINE} seed 12345 addUserKnob {22 randomSeedButton l "Randomize Seed" -STARTLINE T "import random\nnuke.thisNode().knob('seed').setValue(random.randint(1,99999))"} addUserKnob {41 output l "Output Curve" T Randomizer.Curve} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Creates a random curve with controls.\nBest to view curve editor while tweaking." T Randomizer} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 289 ypos -533 } NoOp { name Randomizer selected true xpos 289 ypos -486 addUserKnob {20 Settings} addUserKnob {7 Curve t "Copy this Curve to another nodes attributes and use the below sliders to adjust this curve. Use graph editor for guidance.\n" R -1 1} Curve {{"type == 0 ? squarify == 1 ? Amplitude*((random(floor(((frame+seed-pivotFrame)/Frequency+pivotFrame)/2)+PositionX))-scaleFromNum)-(abs(Amplitude/2))+(PositionY+scaleFromNum) : Amplitude*((random((((frame+seed-pivotFrame)/Frequency+pivotFrame)/2)+PositionX))-scaleFromNum)-(abs(Amplitude/2))+(PositionY+scaleFromNum) :\ntype == 1 ? squarify == 1 ? Amplitude*(((noise(((floor((frame+seed-pivotFrame)/Frequency+pivotFrame)/2)+PositionX))/2)-scaleFromNum+.5))-(abs(Amplitude/2))+(PositionY+scaleFromNum) : Amplitude*(((noise((((frame+seed-pivotFrame)/Frequency+pivotFrame)/2)+PositionX))/2)-scaleFromNum+.5)-(abs(Amplitude/2))+(PositionY+scaleFromNum) :\ntype == 2 ? Amplitude*(((sin(2*pi*((((frame+seed-pivotFrame)/Frequency+pivotFrame)/10)+PositionX))+1)/2)-scaleFromNum) -(abs(Amplitude/2))+(PositionY+scaleFromNum) :\ntype == 3 ? Amplitude*((asin(sin(2*pi*((((frame+seed-pivotFrame)/Frequency+pivotFrame)/10)+PositionX)))/pi+0.5)-scaleFromNum) -(abs(Amplitude/2))+(PositionY+scaleFromNum) :\ntype == 4 ? Amplitude*(int(sin(2*pi*((((frame+seed-pivotFrame)/Frequency+pivotFrame)/10)+PositionX))+1)-scaleFromNum) -(abs(Amplitude/2))+(PositionY+scaleFromNum) :\ntype == 5 ? Amplitude*(abs(sin(pi*((((frame+seed-pivotFrame)/Frequency+pivotFrame)/10)+PositionX)))-scaleFromNum)-(abs(Amplitude/2))+(PositionY+scaleFromNum) :\ntype == 6 ? Amplitude*(((((((frame+seed-pivotFrame)/Frequency+pivotFrame)/10)+PositionX)% 1)/1)-scaleFromNum) -(abs(Amplitude/2))+(PositionY+scaleFromNum) :\ntype == 7 ? Amplitude*((sin((pi*((((frame+seed-pivotFrame)/Frequency+pivotFrame)/10)+PositionX)/2) % (pi/2)))-scaleFromNum) -(abs(Amplitude/2))+(PositionY+scaleFromNum) :\ntype == 8 ? Amplitude*((cos((pi*((((frame+seed-pivotFrame)/Frequency+pivotFrame)/10)+PositionX)/(2)) % (pi/2)))-scaleFromNum) -(abs(Amplitude/2))+(PositionY+scaleFromNum) :\ntype == 9 ? Amplitude*(((exp(2*pi*(((((frame+seed-pivotFrame)/Frequency+pivotFrame)/10)+PositionX) % 1)/1)-1)/exp(2*pi))-scaleFromNum) -(abs(Amplitude/2))+(PositionY+scaleFromNum) :\ntype == 10 ? Amplitude*((((((((frame+seed-pivotFrame)/Frequency+pivotFrame)/10)+PositionX) % (1+1)/(1)) *(1/1) - (1/1) >= 0 ? -.5 : .5)+.5)-scaleFromNum) -(abs(Amplitude/2))+(PositionY+scaleFromNum) :\ntype == 11 ? Amplitude*((((int((((frame+seed-pivotFrame)/Frequency+pivotFrame)/10+PositionX) % 2)) >= 0 ? ((int((((frame+seed-pivotFrame)/Frequency+pivotFrame)/10+PositionX) % 2)) <= (0+(1-1)) ? ((sin(pi*((((frame+seed-pivotFrame)/Frequency+pivotFrame)/10+PositionX) % 2)/1)/2+1/2) * (2*.5-2*-.5) + (2*-.5-.5)) : -.5) : -.5)+.5)-scaleFromNum) -(abs(Amplitude/2))+(PositionY+scaleFromNum) :\n0"}} addUserKnob {26 ""} addUserKnob {7 Amplitude t "Use this to control the amplitude or \"height\" of the curve." R 0 3} Amplitude 1 addUserKnob {7 Frequency t "Use this to control the frequency or \"height\" of the curve." R 0.1 20} Frequency 1 addUserKnob {26 ""} addUserKnob {7 PositionX t "This will \"slide\" the Random curve along the X axis. It is most useful for creating a variation of the random curve.\n\nEx: A curve with this set to 1 will be way different than a curve with this set to 430." R -10 10} addUserKnob {7 PositionY t "This changes the Y position of the curve in the graph editor along the Y axis.\n\nKeyframing this will create a new curve which the random curve will be guided along.\n" R -4 4} } Output { name Output1 xpos 289 ypos -392 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_RankFilter.gizmo ================================================ Group { inputs 0 name RankFilter tile_color 0x168696ff addUserKnob {20 RankFilter} addUserKnob {41 "Local GPU: " T BlinkScript1.gpuName} addUserKnob {41 "Use GPU if Available" T BlinkScript1.useGPUIfAvailable} addUserKnob {26 ""} addUserKnob {7 rankpicker_1 l "Rank Picker"} rankpicker_1 0.5 addUserKnob {41 "filter size" T "BlinkScript1.RankFilter_filter size"} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge1.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge1.fringe} addUserKnob {41 mix T Merge1.mix} addUserKnob {26 ""} addUserKnob {26 credit l "" +STARTLINE T "Rank Filter made by Josh Parks\n"} addUserKnob {26 credit2 l "" +STARTLINE T www.joshparks.co.uk} } Input { inputs 0 name Inputmask xpos -199 ypos -188 number 1 } Input { inputs 0 name Input xpos -356 ypos -444 } Dot { name Dot1 note_font_size 41 xpos -322 ypos -370 } set N37d4400 [stack 0] AddChannels { channels rgba name AddChannels1 xpos -356 ypos -318 } BlinkScript { recompileCount 136 ProgramGroup 1 KernelDescription "2 \"RankFilter\" iterate componentWise 8f4632feddf6438e381689a2ba97b17de2940d93cef050361f5f241bb1ec4f00 2 \"imageIn\" Read Ranged2D \"imageOut\" Write Point 2 \"filter size\" Int 1 AQAAAA== \"number picker\" Float 1 AACAPw== 2 \"size\" 1 1 \"number_picker\" 1 1 2 \"imageInrangeMin\" Int 2 1 AAAAAAAAAAA= \"imageInrangeMax\" Int 2 1 AAAAAAAAAAA=" kernelSource "kernel RankFilter : public ImageComputationKernel\n\{\n Image imageIn; \n Image imageOut; \n\nparam:\n int size; //The filter size\n float number_picker; \n\nlocal:\n\n\n void define() \{\n defineParam(size, \"filter size\", 1); \n defineParam(number_picker, \"number picker\", 1.0f); \n \}\n\n void init()\n \{\n imageIn.setRange(-size-1, -size-1, size+1, size+1);\n\n \}\n\n void process()\n \{\n\n float vals\[512]; ///creates array is this to big?\n\n float size_ref = size; \n\n \n\n for (int j = -size_ref, index = 0; j <= size_ref; j++) \{ //this section is just collecting all the values in the filter size and putting them in the array\n for (int i = -size_ref; i <= size_ref; i++, index++) \{\n vals\[index] = imageIn(i, j);\n \}\n \}\n\n\n float tempvaluesforsorting;\n int filterSizeref = (2 * size_ref + 1) * (2 * size_ref + 1); // setting the amount of times to run the sort\n\n for (int i = 0; i < filterSizeref; i++) \{ //this is sorting the values\n for (int j = 0; j < (filterSizeref - i - 1); j++) \{\n if (vals\[j] > vals\[j + 1]) \{\n tempvaluesforsorting = vals\[j];\n vals\[j] = vals\[j + 1];\n vals\[j + 1] = tempvaluesforsorting;\n \}\n \}\n \}\n\n \n int normalised = number_picker *((2 * size_ref + 1) * (2 * size_ref + 1)-1);\n\n imageOut() = vals\[normalised]; // selecting a certain value in the aray\n \n \}\n\};" vectorize false rebuild "" "RankFilter_number picker" {{slider}} rebuild_finalise "" name BlinkScript1 xpos -356 ypos -262 addUserKnob {20 User} addUserKnob {7 slider} slider {{rankpicker_1}} } push $N37d4400 Dot { name Dot2 note_font_size 41 xpos -487 ypos -370 } Dot { name Dot3 note_font_size 41 xpos -487 ypos -184 } Merge2 { inputs 2+1 operation copy bbox B name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -356 ypos -188 } Output { name Output1 xpos -356 ypos -97 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_RayDeepAO.gizmo ================================================ Group { name RayDeepAO onCreate "\nthisGRP = nuke.thisGroup()\nfor knob in thisGRP.knobs() :\n try :\n if knob.split('_')\[1] == 'panelDropped' :\n thisGRP.removeKnob( thisGRP\[knob] )\n except :\n pass\n" tile_color 0xffee00ff addUserKnob {20 tab_general l General} addUserKnob {41 use_texture l "use texture" t "The 5th input is the texture for main scene (msc). Texture need to be UV space" T menu01.use_texture} addUserKnob {18 diffuse_color l "diffuse color"} diffuse_color 1 addUserKnob {6 diffuse_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {26 t_ao l "ambient occlusion" T " "} addUserKnob {41 samples T AmbientOcclusion2.samples} addUserKnob {41 spread T AmbientOcclusion2.spread} addUserKnob {41 falloff T AmbientOcclusion2.falloff} addUserKnob {41 near l "near clip" T AmbientOcclusion2.near} addUserKnob {41 far l "far clip" T AmbientOcclusion2.far} addUserKnob {26 ""} addUserKnob {7 stochastic_samples l "stochastic samples" t "Number of samples per pixel to use in stochastic estimation. Zero disables stochastic sampling. It is recommended for motion blur that the number of scenes to sample (samples knob) is adjusted. This will also provide anti-aliasing by jittering the sample point." R 0 50} addUserKnob {26 ""} addUserKnob {41 output_shader_vectors l "output vectors" T dRender.output_shader_vectors} addUserKnob {41 P_channel l "surface point" T dRender.P_channel} addUserKnob {41 N_channel l "surface normal" T dRender.N_channel} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-12-18} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.1
- added diffuse color parameter
- added use texture input option
- added output vectors option in deep

1.0
- render AO in deep with non-renderable objects\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -627 ypos -267 bdwidth 258 bdheight 190 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x4c4c4cff label AO note_font_size 42 xpos 1076 ypos -161 bdwidth 337 bdheight 720 } Input { inputs 0 name cam label "\[value number]" xpos -46 ypos -352 number 1 } Dot { name Dot3 xpos -12 ypos -259 } set Nbf344000 [stack 0] Constant { inputs 0 format "256 256 0 0 256 256 1 square_256" name Constant5 xpos 1275 ypos -84 } Input { inputs 0 name ssc label "\[value number]" xpos 545 ypos -352 number 3 } Dot { name Dot4 xpos 579 ypos -259 } ApplyMaterial { inputs 2 name scene_noren_2 xpos 1275 ypos 322 } Input { inputs 0 name msc_tex xpos 756 ypos -346 number 4 } Dot { name Dot5 xpos 790 ypos -259 } Constant { inputs 0 channels rgb color {{parent.diffuse_color} {parent.diffuse_color} {parent.diffuse_color} {curve}} format "256 256 0 0 256 256 1 square_256" name Constant4 xpos 1138 ypos -85 } Switch { inputs 2 which {{parent.use_texture}} name Switch1 xpos 1138 ypos 38 } AmbientOcclusion { samples 16 name AmbientOcclusion2 xpos 1138 ypos 120 } Input { inputs 0 name msc label "\[value number]" xpos 384 ypos -352 number 2 } Dot { name Dot2 xpos 418 ypos -259 } set Nc5edb800 [stack 0] ApplyMaterial { inputs 2 name ApplyMaterial1 xpos 1138 ypos 319 } Scene { inputs 2 name mainSC xpos 1148 ypos 440 } Input { inputs 0 name bg label "\[value number]" xpos 121 ypos -352 } Dot { name Dot1 xpos 155 ypos -259 } set Nd0bfc800 [stack 0] RayRender { inputs 3 stochastic_samples {{parent.stochastic_samples}} name RayRender1 xpos 1138 ypos 796 } push $Nbf344000 push $Nc5edb800 push $Nd0bfc800 ScanlineRender { inputs 3 conservative_shader_sampling false stochastic_samples {{parent.stochastic_samples}} motion_vectors_type off MB_channel none name dRender xpos -46 ypos 596 } DeepRecolor { inputs 2 name DeepRecolor1 xpos -46 ypos 796 } Output { name Output1 xpos -46 ypos 1114 } NoOp { inputs 0 name menu01 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['use_texture'].getValue() == 1 :\n thisGRP\['diffuse_color'].setEnabled(False)\nelse :\n thisGRP\['diffuse_color'].setEnabled(True)\n" xpos -536 ypos -166 addUserKnob {20 User} addUserKnob {6 use_texture l "use texture" +STARTLINE} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ReProject_3D.gizmo ================================================ Group { name Reproject_3D help "This gizmo does camera projection using the STMap node to remap all the layers in the input image. It uses a 3D render of point positions in world space (as output by Nuke's ScanlineRender node) and a 3D camera to create UV texture coordinates that are then used to warp an input image such as a matte painting.\n\nNOTE: The projection works best with unmatted input images or at least unpremulted matting with some coverage, then all masking occurs within the gizmo.\n\nIt can mask the projected image in the following ways:\n- Input alpha from the 3D render.\n- Projecting on surfaces facing camera, using normal (N) in world space. This means all surfaces facing the projecting camera will receive the projection regardless of whether they are blocked by other geometry. This is like Nuke's existing camera projection masking." addUserKnob {20 reproject3d l ReProject3D} addUserKnob {41 pworld_channel l "Surface Pworld" t "Choose the input Position Pass layer from the \"Pworld\" input. Note that it needs to be rendered in world space." T ShuffleP.in} addUserKnob {41 maskChannelMask l "Surface Alpha" t "Choose the input surface's alpha channel, from the \"Pworld\" input. This is used as an overall object mask to matte the camera projection." T Multiply2.maskChannelMask} addUserKnob {26 ""} addUserKnob {6 front_only l "Project on Front Only (Requires Normals)" t "This will mask the projection in the same way Nuke does in full 3D. Requires world N (normals) in the stream of the \"Nworld\" input." +STARTLINE} addUserKnob {41 nworld l "Surface Normals" t "Choose the normal vectors layer (in world space) from the \"Nworld\" input. Used to derive the front-facing matte." T ShuffleN.in} addUserKnob {7 focal l INVISIBLE +INVISIBLE R 5 200} focal {{"\[python -execlocal #\\ Reproject_3D\\ Expression\\nnode\\ =\\ nuke.thisNode()\\nparent\\ =\\ node.input(2)\\nwhile\\ parent\\ and\\ parent.Class()\\ ==\\ 'Dot':\\n\\ \\ \\ \\ parent\\ =\\ parent.input(0)\\nif\\ parent\\ and\\ parent.Class()\\ ==\\ 'Camera2':\\n\\ \\ \\ \\ ret=\\ parent\\\['focal'\\].value()\\nelse:\\n\\ \\ \\ \\ ret\\ =\\ 50.0]"}} addUserKnob {7 h_apert l INVISIBLE +INVISIBLE} h_apert {{"\[python -execlocal #\\ Reproject_3D\\ Expression\\nnode\\ =\\ nuke.thisNode()\\nparent\\ =\\ node.input(2)\\nwhile\\ parent\\ and\\ parent.Class()\\ ==\\ 'Dot':\\n\\ \\ \\ \\ parent\\ =\\ parent.input(0)\\nif\\ parent\\ and\\ parent.Class()\\ ==\\ 'Camera2':\\n\\ \\ \\ \\ ret=\\ parent\\\['haperture'\\].value()\\nelse:\\n\\ \\ \\ \\ ret\\ =\\ 24.576]"}} addUserKnob {7 v_apert l INVISIBLE +INVISIBLE} v_apert {{"\[python -execlocal #\\ Reproject_3D\\ Expression\\nnode\\ =\\ nuke.thisNode()\\nparent\\ =\\ node.input(2)\\nwhile\\ parent\\ and\\ parent.Class()\\ ==\\ 'Dot':\\n\\ \\ \\ \\ parent\\ =\\ parent.input(0)\\nif\\ parent\\ and\\ parent.Class()\\ ==\\ 'Camera2':\\n\\ \\ \\ \\ ret=\\ parent\\\['vaperture'\\].value()\\nelse:\\n\\ \\ \\ \\ ret\\ =\\ 18.672]"}} addUserKnob {26 spin_copyright_div l "" +STARTLINE} addUserKnob {26 spin_copyright l "" t "© SPINVFX\nReProject_3D\nVersion 1.1\n2017" +STARTLINE T "SPINVFX - Version 1.1 - 2017 - Github Page"} } BackdropNode { inputs 0 name BackdropNode4 label "Pworld to Pcam" note_font_size 18 xpos 334 ypos 312 bdwidth 190 bdheight 338 } BackdropNode { inputs 0 name kbd7117 tile_color 0x625b575a label "Facing Bool" note_font_size 40 xpos -318 ypos 184 bdwidth 189 bdheight 428 } Input { inputs 0 name Pworld label "\[value number]" xpos -17 ypos -1 number 1 } Dot { name Dot1 tile_color 0xcccccc00 xpos 17 ypos 95 } set N3652e6b0 [stack 0] Dot { name Dot2 tile_color 0xcccccc00 xpos 127 ypos 95 } Dot { name Dot3 tile_color 0xcccccc00 xpos 127 ypos 206 } push $N3652e6b0 Shuffle { alpha white name ShuffleP xpos -17 ypos 145 } Multiply { inputs 1+1 channels alpha value {{"!\[value . maskChannelMask]"}} maskChannelMask none invert_mask true name Multiply2 xpos -17 ypos 196 disable {{"!\[exists parent.input0]" x1023 1}} } Dot { name Dot4 tile_color 0x7aa9ff00 xpos 17 ypos 262 } set N3655a770 [stack 0] Input { inputs 0 name Nworld label "\[value number]" xpos -269 ypos 4 number 3 } Shuffle { in none name ShuffleN xpos -269 ypos 124 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha bbox B name Copy1 xpos -269 ypos 252 } Unpremult { name Unpremult3 xpos -269 ypos 318 disable {{!Multiply2.maskChannelMask}} } ColorMatrix { matrix { {{Axis1.world_matrix.0 i} {Axis1.world_matrix.1 i} {Axis1.world_matrix.2 i}} {{Axis1.world_matrix.4 i} {Axis1.world_matrix.5 i} {Axis1.world_matrix.6 i}} {{Axis1.world_matrix.8 i} {Axis1.world_matrix.9 i} {Axis1.world_matrix.10 i}} } invert true name ColorMatrix2 label "Convert to camera space" xpos -269 ypos 377 } Multiply { channels {-rgba.red -rgba.green rgba.blue none} value -1 name Multiply10 label "reverse z" xpos -269 ypos 463 } Expression { expr0 clamp(-b) expr1 0 expr2 0 name Expression5 xpos -269 ypos 501 } Expression { channel0 rgba expr0 "step(0, r)" channel1 {-rgba.red -rgba.green -rgba.blue none} channel2 {-rgba.red -rgba.green -rgba.blue none} channel3 {none none none -rgba.alpha} name cull_backfaces label step xpos -269 ypos 540 } Dot { name Dot6 tile_color 0xcccccc00 xpos -235 ypos 917 } push $N3655a770 Dot { name Dot5 tile_color 0x7aa9ff00 xpos 17 ypos 811 } push $N3655a770 Dot { name Dot16 tile_color 0x7aa9ff00 xpos 427 ypos 264 } Unpremult { name Unpremult1 xpos 393 ypos 357 disable {{!Multiply2.maskChannelMask}} } Expression { temp_name0 R temp_expr0 Axis1.world_matrix.3 temp_name1 G temp_expr1 Axis1.world_matrix.7 temp_name2 B temp_expr2 Axis1.world_matrix.11 expr0 r-R expr1 g-G expr2 b-B name Expression14 label "translate Pworld to camera" xpos 393 ypos 383 } ColorMatrix { matrix { {{Axis1.world_matrix.0 i} {Axis1.world_matrix.1 i} {Axis1.world_matrix.2 i}} {{Axis1.world_matrix.4 i} {Axis1.world_matrix.5 i} {Axis1.world_matrix.6 i}} {{Axis1.world_matrix.8 i} {Axis1.world_matrix.9 i} {Axis1.world_matrix.10 i}} } invert true name ColorMatrix4 label "Rotate to camera" xpos 393 ypos 444 } Multiply { channels {-rgba.red -rgba.green rgba.blue none} value -1 name Multiply13 label "reverse Z" xpos 393 ypos 529 } Dot { name Dot7 tile_color 0x7aa9ff00 xpos 427 ypos 702 } set N36600e30 [stack 0] Expression { channel0 rgba expr0 b>0 name Expression15 label "clip Z behind cam" xpos 393 ypos 749 } push $N36600e30 Expression { temp_name0 h_tan temp_expr0 "(h_apert /2) / focal" temp_name1 v_tan temp_expr1 "(v_apert /2) / focal" expr0 "0.5 + 0.5 * r / h_tan / b" expr1 "0.5 + 0.5 * g / v_tan / b" expr2 0 channel3 {none none none -rgba.alpha} name Expression16 label CameraUVs xpos 477 ypos 692 addUserKnob {20 "" l User} addUserKnob {26 "" l "camera settings"} addUserKnob {7 focal l "focal length" t "Link to projecting camera's focal length" R 0 100} focal {{(parent.v_apert*(img.width/img.height))/(parent.h_apert/parent.focal)}} addUserKnob {7 h_apert l "horiz aperture" t "Link to projecting camera's horizontal aperture" R 0 50} h_apert {{parent.v_apert*(img.width/img.height)}} addUserKnob {7 v_apert l "vert aperture" t "Link to projecting camera's vertical aperture" R 0 50} v_apert {{parent.v_apert}} } Input { inputs 0 name img label "\[value number]" xpos 742 ypos 375 } BlackOutside { name BlackOutside1 xpos 742 ypos 472 } STMap { inputs 2 uv rgb blur -rgba.alpha blur_scale 0 maskChannel -rgba.alpha name STMap1 xpos 742 ypos 692 } Merge2 { inputs 2 operation multiply bbox B name Merge2 xpos 742 ypos 755 } Multiply { inputs 1+1 value {{"\[value . maskChannelMask]>0?0:1"}} invert_mask true name Multiply3 label "by surface alpha" xpos 742 ypos 795 } Merge2 { inputs 2 operation multiply bbox B name Merge1 xpos 742 ypos 913 disable {{!parent.front_only}} } Output { name Output1 xpos 742 ypos 1014 } Input { inputs 0 name cam label "\[value number]" xpos 94 ypos 397 number 2 } Axis2 { name Axis1 xpos 104 ypos 504 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Reconcile3DFast.gizmo ================================================ Group { inputs 3 name reconcile3DFast tile_color 0x421010ff addUserKnob {20 PlanarProjection l reconcile3DFast} addUserKnob {22 Calculate t "Calculate the reconciled 2D points for each 3D point.\n\nAlso calculate a matrix transform for the planar surface, if there are 4 total points. This can then be used for Rotos and CornerPins." T "import nuke\nfrom nukescripts import snap3d as sn\nimport math\n\n\n## Based on Planar Projection by Vit Sedlacek and Jed Smith\n\n\ndef cameraProjectionMatrix(cameraNode, frame, imageformat):\n ## modified code from nukescripts/Snap3D\n\n # Matrix to transform points into camera-relative coords.\n wm = nuke.math.Matrix4()\n for i in range(16):\n wm\[i] = cameraNode\['matrix'].getValueAt(frame, i)\n\n wm.transpose()\n camTransform = wm.inverse()\n\n # Matrix to take the camera projection knobs into account\n roll = float(cameraNode\['winroll'].getValueAt(frame, 0))\n scale_x = float(cameraNode\['win_scale'].getValueAt(frame, 0))\n scale_y = float(cameraNode\['win_scale'].getValueAt(frame, 1))\n translate_x = float(cameraNode\['win_translate'].getValueAt(frame, 0))\n translate_y = float(cameraNode\['win_translate'].getValueAt(frame, 1))\n m = nuke.math.Matrix4()\n m.makeIdentity()\n m.rotateZ(math.radians(roll))\n m.scale(1.0 / scale_x, 1.0 / scale_y, 1.0)\n m.translate(-translate_x, -translate_y, 0.0)\n\n # Projection matrix based on the focal length, aperture and clipping planes of the camera\n focal_length = float(cameraNode\['focal'].getValueAt(frame))\n h_aperture = float(cameraNode\['haperture'].getValueAt(frame))\n near = float(cameraNode\['near'].getValueAt(frame))\n far = float(cameraNode\['far'].getValueAt(frame))\n projection_mode = int(cameraNode\['projection_mode'].getValueAt(frame))\n p = nuke.math.Matrix4()\n p.projection(focal_length / h_aperture, near, far, projection_mode == 0)\n\n # Matrix to translate the projected points into normalised pixel coords\n imageAspect = float(imageformat.height()) / float(imageformat.width())\n\n t = nuke.math.Matrix4()\n t.makeIdentity()\n t.translate(1.0, 1.0 - (1.0 - imageAspect / float(imageformat.pixelAspect())), 0.0)\n\n # Matrix to scale normalised pixel coords into actual pixel coords.\n x_scale = float(imageformat.width()) / 2.0\n y_scale = x_scale * imageformat.pixelAspect()\n s = nuke.math.Matrix4()\n s.makeIdentity()\n s.scale(x_scale, y_scale, 1.0)\n\n # The projection matrix transforms points into camera coords, modifies based\n # on the camera knob values, projects points into clip coords, translates the\n # clip coords so that they lie in the range 0,0 - 2,2 instead of -1,-1 - 1,1,\n # then scales the clip coords to proper pixel coords.\n return s * t * p * m * camTransform\n\n\ndef projectPoints(frame, camera=None, point=None, imageformat=None):\n # Modify projectpoint function in nukescripts.snap3d to add frame argument\n if not imageformat:\n imageformat = nuke.root()\['format'].value()\n camMatrix = cameraProjectionMatrix(camera, frame, imageformat)\n if camMatrix == None:\n raise RuntimeError(\"snap3d.cameraProjectionMatrix() returned None for camera.\")\n\n if not (isinstance(point, list) or isinstance(point, tuple)):\n raise ValueError(\"Argument point must be a list or tuple.\")\n\n for point in point:\n # Would be nice to not do this for every item but since lists/tuples can\n # containg anything...\n if isinstance(point, nuke.math.Vector3):\n pt = point\n elif isinstance(point, list) or isinstance(point, tuple):\n pt = nuke.math.Vector3(point\[0], point\[1], point\[2])\n else:\n raise ValueError(\"All items in point must be nuke.math.Vector3 or list/tuple of 3 floats.\")\n\n tPos = camMatrix * nuke.math.Vector4(pt.x, pt.y, pt.z, 1.0)\n try:\n yield nuke.math.Vector2(tPos.x / tPos.w, tPos.y / tPos.w)\n except ZeroDivisionError:\n print(\"Zero Division Error on frame \{0\} with point data \{1\}\".format(frame, point))\n yield nuke.math.Vector2()\n\n\ndef calculate(node):\n # Get the input Camera and verify it is right. (Assume camera is topnode of input to handle dots)\n cam_input = node.input(1)\n # Sanity check\n if not (cam_input and isinstance(cam_input, nuke.Node)):\n nuke.message(\"A Camera node must be connected.\")\n return\n if 'Camera' in cam_input.Class():\n cam = cam_input\n else:\n cam = nuke.toNode(nuke.tcl(\"full_name \[topnode %s]\" % cam_input.name()))\n \n #AXIS INPUT\n axis_input = node.input(2)\n if not (axis_input and isinstance(axis_input, nuke.Node)):\n nuke.message(\"A axis node must be connected.\")\n return\n if 'Axis' in axis_input.Class():\n axis = axis_input\n else:\n axis = nuke.toNode(nuke.tcl(\"full_name \[topnode %s]\" % axis_input.name()))\n \n # BG INPUT \n bg = node.input(0)\n if not bg:\n nuke.message(\"BG not connected, so the root format will be used to reconcile the 3D point into screen space.\")\n\n # Get framerange to operate on from camera animation curves\n first = None\n last = None\n try:\n if cam\['translate'].isAnimated():\n for curve in cam\['translate'].animations():\n if first == None:\n first = int(curve.keys()\[0].x)\n else:\n first = min(first, int(curve.keys()\[0].x))\n for curve in cam\['translate'].animations():\n if last == None:\n last = int(curve.keys()\[-1].x)\n else:\n last = max(last, int(curve.keys()\[-1].x))\n elif cam\['rotate'].isAnimated():\n for curve in cam\['rotate'].animations():\n if first == None:\n first = int(curve.keys()\[0].x)\n else:\n\n first = min(first, int(curve.keys()\[0].x))\n for curve in cam\['rotate'].animations():\n if last == None:\n last = int(curve.keys()\[-1].x)\n else:\n last = max(last, int(curve.keys()\[-1].x))\n else:\n nuke.message(\"Input Camera is not animated.\")\n return\n except:\n nuke.message(\"Something went wrong getting the camera animation. Using Root framerange...\")\n first = nuke.root().firstFrame()\n last = nuke.root().lastFrame()\n\n framerange = nuke.FrameRange('\{0\}-\{1\}'.format(first, last))\n\n # Only run if the ip knob is not default\n ipknob = axis\[\"translate\"]\n\n opknob = node\[\"op1\"]\n opknob.clearAnimated()\n opknob.setAnimated()\n\n # Building the data into a list of AnimationKey objects,\n # and then applying that list to the knob using addKey is significantly faster than other methods.\n # This makes the Calculate button instantaneous instead of taking forever.\n point_animcurve = \[\[], \[]]\n for frame in framerange:\n\n # Sample input point knob on every frame if it's animated or expression-linked\n if ipknob.isAnimated() or ipknob.hasExpression():\n point = next(projectPoints(frame, cam, \[ipknob.getValueAt(frame)], node.format()))\n else:\n point = next(projectPoints(frame, cam, \[ipknob.value()], node.format()))\n for index in range(2):\n point_animcurve\[index].append(nuke.AnimationKey(frame, point\[index]))\n\n for index, curve in enumerate(opknob.animations()):\n curve.addKey(point_animcurve\[index])\n\n\nif __name__ == \"__main__\":\n calculate(nuke.thisNode())" +STARTLINE} addUserKnob {22 clear_out l Clear t "Clear output knobs." -STARTLINE T "n = nuke.thisNode()\n\nkop = n\['op1']\nkop.clearAnimated()\nkop.setValue(kop.defaultValue())"} addUserKnob {12 op1 l "XY output"} addUserKnob {22 Transform T "# Create tracker node\nfrom __future__ import with_statement\n\ngrid_x = int(nuke.toNode('preferences').knob('GridWidth').value())\ngrid_y = int(nuke.toNode('preferences').knob('GridHeight').value())\npproj = nuke.thisNode()\n\nwith nuke.root():\n transform_node = nuke.nodes.Transform()\n transform_node.setXYpos(pproj.xpos() - grid_x * 0, pproj.ypos() + grid_y * 2)\n \[n.setSelected(False) for n in nuke.allNodes()]\n transform_node.setSelected(True)\n\n if pproj\['op1'].isAnimated():\n tknob = transform_node\['translate']\n tknob.clearAnimated()\n tknob.setAnimated()\n for x, c in enumerate(tknob.animations()):\n opknob = pproj\['op1']\n if opknob.isAnimated():\n c.addKey(opknob.animation(x).keys())\n else:\n tknob.clearAnimated()" +STARTLINE} addUserKnob {26 ""} addUserKnob {26 lbl l "" +STARTLINE T "Reconcile3DFast v1.0"} addUserKnob {22 btn l DerekVFX.ca T "import os\nimport sys\nimport webbrowser\n\ndef _open(url, wait=0):\n try:\n if sys.platform == \"darwin\":\n cmd = \[\"open\", url]\n elif hasattr(os, \"startfile\"):\n return os.startfile(url)\n elif \"KDE_FULL_SESSION\" in os.environ or \"KDE_MULTIHEAD\" in os.environ or \\\n \"GNOME_DESKTOP_SESSION_ID\" in os.environ or \"GNOME_KEYRING_SOCKET\" in os.environ:\n cmd = \[\"xdg-open\", url]\n else:\n # Fallback option for unsupported desktops\n webbrowser.open(url)\n return\n\n _run(cmd, 0, wait)\n\n except OSError as e:\n print(f\"Error: \{e\}\")\n\ndef _run(cmd, shell, wait):\n try:\n subprocess.Popen(cmd, shell=shell, stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n if wait:\n opener.wait()\n except Exception as e:\n print(f\"Error: \{e\}\")\n\n_open('http://www.derekvfx.ca/')\n" +STARTLINE} } Input { inputs 0 name cam label "\[value number]" xpos 400 ypos -301 number 1 } Input { inputs 0 name axis label "\[value number]" xpos 197 ypos -307 number 2 } Input { inputs 0 name img label "\[value number]" xpos 620 ypos -302 } Output { name Output1 selected true xpos 620 ypos 158 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Relight_Simple.gizmo ================================================ Group { name Relight_Simple help "Simpliflied relight node.\nOnly requires a normal map to get started.\n\nThis node will not reproduce accurate lighting, as it does not take into account the actual 3D world space, but instead considers the image in its own local space." addUserKnob {20 relight_simple l Relight_Simple} addUserKnob {12 light l "Light XY" t "Controls the light position in X and Y axis"} light {50 50} addUserKnob {7 light_z l "Light Z" t "Controls the light position in Z axis" R 0 1000} light_z 150 addUserKnob {18 light_color l "Light Color" t "Change the color of the light"} light_color 1 addUserKnob {6 light_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {18 albedo l "Object Color (Albedo)" t "Control the color of the object being lit. Only used when the Albedo input is not connected."} albedo 1 addUserKnob {6 albedo_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {7 specularity l Specularity t "Amount of specularity"} specularity 0.2 addUserKnob {7 shine l Shininess t "Controls the shininess of the specular highlights." R 1 20} shine 10 addUserKnob {26 spin_copyright_div l "" +STARTLINE} addUserKnob {26 spin_copyright l "" t "© SPINVFX\nRelight_Simple\nVersion 1.0\n2018" +STARTLINE T "SPINVFX - Version 1.0 - 2018 - Github Page"} } Constant { inputs 0 channels rgb color {0 0 1 0} color_panelDropped true name Constant1 xpos 689 ypos 218 } Input { inputs 0 name Normals xpos 829 ypos 134 } Dot { name Dot1 tile_color 0xcccccc00 xpos 863 ypos 196 } set N82a6cc0 [stack 0] Switch { inputs 2 which {{"!\[exists parent.input]"}} name Switch2 xpos 829 ypos 241 } Dot { name Dot3 tile_color 0xcccccc00 xpos 863 ypos 296 } set Na305b260 [stack 0] Input { inputs 0 name Albedo xpos 1081 ypos 132 number 1 } push $N82a6cc0 Grade { multiply 0 add {{parent.albedo} {parent.albedo} {parent.albedo} {parent.albedo}} name Grade1 xpos 959 ypos 192 } Switch { inputs 2 which {{"\[exists parent.input1]"}} name Switch1 xpos 1081 ypos 192 } CopyBBox { inputs 2 name CopyBBox1 xpos 1081 ypos 292 } Dot { name Dot2 tile_color 0x9e3c6300 xpos 1115 ypos 354 } push $Na305b260 BlinkScript { inputs 2 recompileCount 15 ProgramGroup 1 KernelDescription "2 \"Dirlight\" iterate pixelWise af5b94d41d487f750c3564ae8419928a837a2e86bb8f7eba952ec26187d6fb21 3 \"src\" Read Point \"albedoIn\" Read Point \"dst\" Write Point 7 \"lightPos\" Float 2 AAAAAAAAAAA= \"lightZ\" Float 1 AAAAAA== \"lightColor\" Float 3 AAAAAAAAAAAAAAAAAAAAAA== \"specularity\" Float 1 AAAAAA== \"shininess\" Float 1 AAAAAA== \"softness\" Float 1 AAAAAA== \"proxy\" Float 1 AAAAAA== 7 \"lightPos\" 2 1 \"lightZ\" 1 1 \"lightColor\" 3 1 \"specularity\" 1 1 \"shininess\" 1 1 \"softness\" 1 1 \"proxy\" 1 1 0" kernelSource "kernel Dirlight : ImageComputationKernel\n\{\n Image src; //the input image\n Image albedoIn; //the input image\n Image dst; //the output image\n\n param:\n float2 lightPos;\n float lightZ;\n float3 lightColor;\n float specularity;\n float shininess;\n float softness;\n float proxy;\n\n local:\n\n\n //In define(), parameters can be given labels and default values.\n void define() \{\n \}\n\n //The init() function is run before any calls to kernel().\n void init() \{\n \}\n\n //The kernel function is run at every pixel to produce the output.\n void process(int2 pos) \{\n //Normalize LightDirection\n lightPos = lightPos*proxy;\n float3 normal = float3(src(0),src(1), src(2));\n float3 albedo = float3(albedoIn(0),albedoIn(1), albedoIn(2));\n float2 lightDir = lightPos-float2(pos.x, pos.y);\n float3 nLightDir = normalize(float3(lightDir.x, lightDir.y, lightZ*proxy));\n float3 nSpecDir = normalize(float3(nLightDir.x, nLightDir.y, nLightDir.z + 1.0f));\n float rawLight = max(0.0f,dot(normal, nLightDir)); // Lambertian\n rawLight = pow(rawLight,max(min(softness,3.0f), 1.0f));\n float3 diffuse = lightColor*albedo*rawLight;\n float rawSpecular = max(0.0f,dot(normal, nSpecDir));\n float n = max(2.0f, shininess);\n float shine = pow(rawSpecular, n) * ((n + 8.0f) / 25.0f) ;\n float3 specular = lightColor * specularity * shine;\n float3 lighting = (diffuse+specular);\n \n dst() = float4(lighting.x, lighting.y, lighting.z, 0.0f);\n \}\n\};\n\n" rebuild "" Dirlight_lightPos {{parent.light} {parent.light}} Dirlight_lightZ {{parent.light_z}} Dirlight_lightColor {{parent.light_color} {parent.light_color} {parent.light_color}} Dirlight_specularity {{parent.specularity}} Dirlight_shininess {{parent.shine*50+2}} Dirlight_softness 3 Dirlight_proxy {{"proxy ? (proxy_type ? proxy_scale : \[lindex \[value proxy_format] 0] / \[lindex \[value format] 0]) : 1"}} rebuild_finalise "" name BlinkScript2 xpos 829 ypos 344 } set N82cd0e0 [stack 0] Output { name Output1 xpos 829 ypos 428 } push $N82cd0e0 end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Relight_bb.gizmo ================================================ Group { name Relight_BB help "2D tool to help relight 3d renders with help of a normals pass\n\nFeed it with a normals pass through the \"image\" input, and select the right channel for it.\nUse the \"mask\" input to isolate a specific object in your scene.\n\n\n- Antialias normals to get rid of flickering\n- use ReNorm if your normals are coded from 0 to 1\n\nHave fun !\n\nby bflat (Bastien Brenot)\nmail@bastienbrenot.com" tile_color 0x55ffbfff label "diff \[value enableDiffuse] / spec \[value enableSpec] / AA \[value AntiAlias_normals]" selected true xpos 133 ypos 149 addUserKnob {20 Settings} addUserKnob {41 normalsChannel l "Normals : " T Shuffle15.in} addUserKnob {6 AntiAlias_normals l antiAlias -STARTLINE} addUserKnob {6 oldWay l "reNorm ( 0/1 -> -1/1 )" -STARTLINE} addUserKnob {6 testRange l "test range" +STARTLINE} addUserKnob {7 remapNorm l " // old max value :" -STARTLINE R 1 4} remapNorm 1 addUserKnob {6 softClip l "softClip ultra high" -STARTLINE} addUserKnob {26 ""} addUserKnob {6 SpecColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 DiffuseColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 lightdirection l "light direction" n 1} addUserKnob {6 enableDiffuse l "DIFFUSE " +STARTLINE} enableDiffuse true addUserKnob {6 enableSpec l "SPECULAR " -STARTLINE} enableSpec true addUserKnob {26 noText l "" +STARTLINE T " "} addUserKnob {7 X_Angle l "X Angle" R -180 180} X_Angle -15 addUserKnob {7 Y_Angle l "Y Angle" R -180 180} Y_Angle 75 addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 settings l "light settings" n 1} addUserKnob {26 void l " "} addUserKnob {18 DiffuseColor l "Diffuse Color"} DiffuseColor 1 addUserKnob {6 DiffuseColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 affectDiffuseAlpha l "affect alpha" -STARTLINE} affectDiffuseAlpha true addUserKnob {26 ""} addUserKnob {7 spec_cosinPower l "cosin power"} spec_cosinPower 0.75 addUserKnob {18 SpecColor l "Specular Color"} SpecColor 1 addUserKnob {6 SpecColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 affectSpecAlpha l "affect alpha" -STARTLINE} affectSpecAlpha true addUserKnob {6 boostSpec l "boost spec" +STARTLINE} boostSpec true addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 mask n 1} addUserKnob {26 void2 l " "} addUserKnob {6 postMult l "post multiply by original Alpha ? " +STARTLINE} addUserKnob {6 enableMask l "enable mask" +STARTLINE} addUserKnob {41 maskChannelMask l "" -STARTLINE T maskMultiply.maskChannelMask} addUserKnob {41 inject -STARTLINE T maskMultiply.inject} addUserKnob {41 invert_mask l invert -STARTLINE T maskMultiply.invert_mask} addUserKnob {41 fringe -STARTLINE T maskMultiply.fringe} addUserKnob {41 mix T maskMultiply.mix} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff00bfff label ZEBRAS note_font_size 42 xpos -638 ypos -74 bdwidth 643 bdheight 288 } BackdropNode { inputs 0 name BackdropNode13 tile_color 0x8e8e3800 label "RELIGHT DIFF + SPEC" note_font_size 42 xpos -1014 ypos -702 bdwidth 1025 bdheight 371 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x71c67100 label "remap normals\n\n+ softclip high\n\nPOSITIF\n\n\n\n\n\nNEGATIF" note_font_size 42 xpos -817 ypos -1664 bdwidth 827 bdheight 772 } Input { inputs 0 name InputNormals xpos -439 ypos -1994 } Dot { name Dot53 xpos -405 ypos -1914 } set Nb728d1c0 [stack 0] Shuffle { green blue blue green alpha black name Shuffle15 label "\[value in]" xpos -439 ypos -1875 } Dot { name Dot9 xpos -405 ypos -1803 } set Nb729dfc0 [stack 0] Dot { name Dot10 xpos -528 ypos -1803 } Expression { expr0 r*2-1 expr1 g*2-1 expr2 b*2-1 name normalize label "\[value expr0]" xpos -562 ypos -1756 } push $Nb729dfc0 Switch { inputs 2 which 1 name Switch_oldWay xpos -439 ypos -1750 disable {{parent.oldWay==0?1:0}} } set Nb72b11c0 [stack 0] Multiply { channels rgb value {{1/parent.remapNorm}} name Multiply_setNewRange label "\[value value]" xpos -439 ypos -1639 } Dot { name Dot14 xpos -405 ypos -1582 } set Nb72c1080 [stack 0] Dot { name Dot15 xpos -260 ypos -1582 } set Nb72c4cd0 [stack 0] ClipTest { channels rgb lower -10000 name ClipTest2 xpos -176 ypos -1585 } push $Nb72c4cd0 Difference { inputs 2 name Difference2 xpos -176 ypos -1546 } FilterErode { size -3 name FilterErode1 xpos -176 ypos -1510 } Blur { channels rgba size 5 name Blur1 label "\[value size]" xpos -176 ypos -1449 } Multiply { channels rgba value 1.2 name Multiply3 label "\[value value]" xpos -176 ypos -1413 } Clamp { name Clamp2 xpos -176 ypos -1377 } push $Nb72c1080 Dot { name Dot12 xpos -406 ypos -1482 } set Nb73070e0 [stack 0] Expression { temp_name0 Y temp_expr0 "0.2126*r + 0.7152*g + 0.0722*b" temp_name1 L temp_expr1 (r+g+b)/3 channel0 rgba expr0 Y name Expression1 label "\[value expr0]" xpos -296 ypos -1491 } ColorLookup { lut {master {curve C x0.3000000119 0 s0 x0.6999999881 1 s3.200000048} red {} green {} blue {} alpha {}} name ColorLookup1 xpos -296 ypos -1443 } Multiply { inputs 1+1 channels rgba value 0 invert_mask true name Multiply2 label "\[value value]" xpos -296 ypos -1377 } push $Nb73070e0 SoftClip { conversion "logarithmic compress" softclip_min 0.6 name SoftClip1 xpos -692 ypos -1371 } push $Nb73070e0 Keymix { inputs 3 name Keymix2 xpos -440 ypos -1377 disable {{!parent.softClip}} } Expression { expr0 -r expr1 -g expr2 -b name Expression2 label "\[value expr0]" xpos -439 ypos -1281 } Dot { name Dot16 xpos -405 ypos -1223 } set Nb7165f20 [stack 0] Dot { name Dot17 xpos -258 ypos -1223 } set Nb7169df0 [stack 0] ClipTest { channels rgb lower -10000 name ClipTest3 xpos -175 ypos -1226 } push $Nb7169df0 Difference { inputs 2 name Difference3 xpos -175 ypos -1188 } FilterErode { size -5 name FilterErode2 xpos -175 ypos -1152 } Blur { channels rgba size 5 name Blur2 label "\[value size]" xpos -175 ypos -1093 } Multiply { channels rgba value 1.2 name Multiply4 label "\[value value]" xpos -175 ypos -1057 } Clamp { name Clamp3 xpos -175 ypos -1021 } push $Nb7165f20 Dot { name Dot13 xpos -405 ypos -1189 } set Nb71a8b90 [stack 0] Expression { temp_name0 Y temp_expr0 "0.2126*r + 0.7152*g + 0.0722*b" temp_name1 L temp_expr1 (r+g+b)/3 channel0 rgba expr0 L name Expression3 label "\[value expr0]" xpos -295 ypos -1198 } ColorLookup { lut {master {curve C x0.3000000119 0 s0 x0.6999999881 1 s3.200000048} red {} green {} blue {} alpha {}} name ColorLookup2 xpos -295 ypos -1149 } Multiply { inputs 1+1 channels rgba value 0 invert_mask true name Multiply5 label "\[value value]" xpos -295 ypos -1021 } push $Nb71a8b90 SoftClip { conversion "logarithmic compress" softclip_min 0.6 name SoftClip2 xpos -691 ypos -1015 } push $Nb71a8b90 Keymix { inputs 3 name Keymix3 xpos -439 ypos -1021 disable {{!parent.softClip}} } Expression { expr0 -r expr1 -g expr2 -b name Expression4 label "\[value expr0]" xpos -439 ypos -971 } set Nb7316ed0 [stack 0] Dot { name Dot4 xpos -405 ypos -808 } set Nb731f1f0 [stack 0] Dot { name Dot3 xpos -1170 ypos -808 } Dot { name Dot8 xpos -1170 ypos 3 } Dot { name Dot7 xpos -536 ypos 3 } set Nb732ae70 [stack 0] Dot { name Dot6 xpos -536 ypos 137 } push $Nb732ae70 Dot { name Dot5 xpos -464 ypos 3 } ClipTest { channels rgb lower -1 name ClipTest1 xpos -498 ypos 38 } Difference { inputs 2 name Difference1 xpos -498 ypos 128 } Clamp { name Clamp1 xpos -331 ypos 128 } Dot { name Dot2 xpos -205 ypos 137 } set Nb7353150 [stack 0] push $Nb7353150 Grade { white 10 name Grade1 xpos -239 ypos 169 } push $Nb7353150 push $Nb728d1c0 Dot { name Dot55 xpos -727 ypos -1914 } Dot { name Dot11 xpos -727 ypos -175 } Input { inputs 0 name mask xpos 151 ypos -286 number 1 } Invert { name Invert1 xpos 9 ypos -292 } Expression { inputs 0 temp_name0 Xx temp_expr0 sin(pi*(parent.X_Angle)/180) temp_name1 Xy temp_expr1 cos(pi*(parent.X_Angle)/180) temp_name2 Yx temp_expr2 sin(pi*(parent.Y_Angle-90)/180) temp_name3 Yy temp_expr3 cos(pi*(parent.Y_Angle-90)/180) expr0 Xx*Yx expr1 Xy*Yx expr2 Yy name diffuseDirectionColor xpos -685 ypos -585 } set Nb71f2190 [stack 0] push $Nb731f1f0 Matrix { channels rgb matrix { {1 2 1} {2 4 2} {1 2 1} } normalize true name antiAlias_Normals xpos -439 ypos -768 disable {{parent.AntiAlias_normals==0?1:0}} } Dot { name Dot54 xpos -405 ypos -635 } set Nb7372960 [stack 0] Dot { name Dot1 xpos -547 ypos -635 } MergeExpression { inputs 2 temp_name0 X temp_expr0 A.r*B.r temp_name1 Y temp_expr1 A.g*B.g temp_name2 Z temp_expr2 A.b*B.b temp_name3 DIR temp_expr3 X+Y+Z channel0 rgba expr0 pow(DIR,(parent.spec_cosinPower/pow(parent.spec_cosinPower/1.2,5))) channel1 none channel2 none name SpecDirMult xpos -581 ypos -471 } Multiply { channels rgba value 3 name Spec_Multiply label "\[value value]" xpos -397 ypos -477 disable {{!parent.boostSpec}} } set Nb7386150 [stack 0] Multiply { channels alpha value {{(0.2126*parent.SpecColor.r+0.7152*parent.SpecColor.g+0.0722*parent.SpecColor.b)}} name MultiplySpecAlpha label "\[value value]" xpos -315 ypos -522 } push $Nb7386150 Multiply { channels rgb value {{parent.SpecColor.r} {parent.SpecColor.g} {parent.SpecColor.b} 1} name SpecColor label "\[value value]" xpos -317 ypos -431 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name CopySpecAlpha xpos -229 ypos -467 disable {{parent.affectSpecAlpha==0?1:0}} } push $Nb71f2190 push $Nb7372960 MergeExpression { inputs 2 temp_name0 X temp_expr0 A.r*B.r temp_name1 Y temp_expr1 A.g*B.g temp_name2 Z temp_expr2 A.b*B.b temp_name3 DIR temp_expr3 X+Y+Z channel0 rgba expr0 DIR channel1 none channel2 none name DiffuseDirMult xpos -439 ypos -585 } set Nb6719f70 [stack 0] Multiply { channels alpha value {{(0.2126*parent.DiffuseColor.r+0.7152*parent.DiffuseColor.g+0.0722*parent.DiffuseColor.b)}} name MultiplyDiffAlpha label "\[value value]" xpos -338 ypos -635 } push $Nb6719f70 Multiply { channels rgb value {{parent.DiffuseColor.r} {parent.DiffuseColor.g} {parent.DiffuseColor.b} {parent.affectDiffuseAlpha==0?1:((parent.DiffuseColor.r+parent.DiffuseColor.g+parent.DiffuseColor.b)/3)}} name DiffuseColor label "\[value value]" xpos -341 ypos -571 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name CopyDiffAlpha xpos -227 ypos -581 disable {{parent.affectDiffuseAlpha==0?1:0}} } push $Nb728d1c0 Dot { name Dot59 xpos -85 ypos -1914 } Expression { channel0 rgba expr0 0 name BlackExpression label "RGBA = 0" xpos -119 ypos -1845 } Merge2 { inputs 2 operation plus name Merge_DIFFUSE xpos -119 ypos -575 disable {{parent.enableDiffuse==0?1:0}} } Merge2 { inputs 2 operation plus name Merge_SPEC xpos -119 ypos -461 disable {{parent.enableSpec==0?1:0}} } Multiply { inputs 1+1 channels rgba value 0 name maskMultiply label "\[value value]" xpos -119 ypos -292 disable {{parent.enableMask==0?1:0}} } Multiply { inputs 1+1 channels rgba value 0 invert_mask true name postMultiply label "\[value value]" xpos -119 ypos -184 disable {{parent.postMult==0?1:0}} } Multiply { inputs 1+1 channels rgb value 0 name Multiply1 label "\[value value]" xpos -119 ypos 128 disable {{!parent.testRange}} } Keymix { inputs 3 channels {rgba.red -rgba.green rgba.blue none} name Keymix1 xpos -119 ypos 169 disable {{!parent.testRange}} } Output { name Output1 xpos -119 ypos 379 } Expression { inputs 0 temp_name0 Xx temp_expr0 sin(pi*(parent.X_Angle/2)/180) temp_name1 Xy temp_expr1 cos(pi*(parent.X_Angle/2)/180) temp_name2 Yx temp_expr2 sin(pi*(parent.Y_Angle/2-90)/180) temp_name3 Yy temp_expr3 cos(pi*(parent.Y_Angle/2-90)/180) expr0 Xx*Yx expr1 Xy*Yx expr2 Yy name specDirectionColor xpos -693 ypos -471 disable true } push $Nb72b11c0 ClipTest { channels rgb lower -1 upper 100 name ClipTest4 xpos -250 ypos -1703 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Rings_of_Power.gizmo ================================================ Group { name Rings_of_Power onCreate "n = nuke.thisNode()\nn.knob('outerRadius').setRange(0, 2)\nn.knob('innerRadius').setRange(0, 2)\nn.knob('outerBlur').setRange(0, 400)\nn.knob('innerBlur').setRange(0, 400)\nn.knob('noiseSize').setRange(0, 1000)" tile_color 0x7f764cff note_font "Bitstream Vera Sans Bold" note_font_color 0xffffffff selected true addUserKnob {20 RingsOfPower} addUserKnob {12 center} center {3334.5 1137} addUserKnob {22 setCenter l "set center" -STARTLINE T "n = nuke.thisNode()\nw= n.width()\nh=n.height()\nn\['center'].setValue(\[w/2,h/2])"} addUserKnob {7 size R 0 400} size 100 addUserKnob {7 speed R 0 2} speed 0.5 addUserKnob {7 phase R -10 10} addUserKnob {20 radialmask l "Radial Masks" n 1} radialmask 0 addUserKnob {26 outerMask l " Outer Mask" T " "} addUserKnob {6 outerRadiusCheck l toggle -STARTLINE} outerRadiusCheck true addUserKnob {14 outerRadius l radius R 0 2} outerRadius 0.5 addUserKnob {41 softness T RadialOuter.softness} addUserKnob {41 plinear l "perceptually linear" -STARTLINE T RadialOuter.plinear} addUserKnob {41 outerBlur l blur T Blur2.size} addUserKnob {26 innerMask l " Inner Mask" T " "} addUserKnob {6 innerMaskCheck l toggle -STARTLINE} addUserKnob {14 innerRadius l radius R 0 2} innerRadius 0.21 addUserKnob {41 softness_1 l softness T RadialInner.softness} addUserKnob {41 plinear_1 l "perceptually linear" -STARTLINE T RadialInner.plinear} addUserKnob {41 innerBlur l blur T Blur1.size} addUserKnob {20 endGroup n -1} addUserKnob {20 NoiseGroup l "Noise Mask" n 1} NoiseGroup 0 addUserKnob {26 Noise l " Noise" T " "} addUserKnob {6 noiseCheck l "toggle (heavy and little broken)" -STARTLINE} addUserKnob {41 type T Noise2.type} addUserKnob {14 noiseSize l x/ysize R 0 1000} noiseSize 350 addUserKnob {7 z R 0 5} addUserKnob {7 zSpeed R 0 4} addUserKnob {41 octaves T Noise2.octaves} addUserKnob {41 nyquist l "clip at Nyquist limit" T Noise2.nyquist} addUserKnob {41 lacunarity T Noise2.lacunarity} addUserKnob {41 gain T Noise2.gain} addUserKnob {41 gamma T Noise2.gamma} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {41 overscan T BBoxToFormat.overscanPercent} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge1.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge1.fringe} addUserKnob {41 mix T Circles.mix} } NoOp { inputs 0 name NoOp1 xpos 226 ypos -530 addUserKnob {20 User} addUserKnob {7 speed R 0 4} speed 0.25 addUserKnob {7 output} output {{-((frame-1000)*(parent.speed/2)*50)}} } Input { inputs 0 name Inputmask xpos -319 ypos 117 number 1 } Reformat { inputs 0 format "4096 4096 0 0 4096 4096 1 square_4k" black_outside true name Reformat5 xpos 886 ypos -491 } Group { name BBoxToFormat1 onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"overscanType\":\n if n.knob(\"overscanType\").getValue() == 1:\n n.knob(\"overscanPercent\").setVisible(True)\n n.knob(\"overscan\").setVisible(False)\n else:\n n.knob(\"overscanPercent\").setVisible(False)\n n.knob(\"overscan\").setVisible(True)" tile_color 0xa57aaaff note_font "Verdana Bold" note_font_color 0xffffffff xpos 886 ypos -433 addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} overscanType Percentage addUserKnob {14 overscan l Overscan +HIDDEN R 0 400} addUserKnob {14 overscanPercent l "Overscan Percent" R 1 4} overscanPercent {{parent.BBoxToFormat.outputBBox.r/4000}} addUserKnob {20 inputBbox l "BBox Data" n 1} inputBbox 0 addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set Na869eb00 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set Na869e400 [stack 0] push $Na869eb00 Crop { box {{curve} {curve} {input.width} {input.height}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set Na869dd00 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set Na869d600 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{input.bbox.r/2} {input.bbox.t/2}} shutteroffset centred name Transform1 xpos 120 ypos 555 } push $Na869d600 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $Na869e400 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $Na869dd00 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N240d9d00 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $N240d9d00 NoOp { name OutputBBox1 selected true xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group Expression { temp_name0 gg temp_expr0 (0.5+x)/(width)-.5 temp_name1 rr temp_expr1 (0.5+y)/(height)-.5 temp_name2 xx temp_expr2 sqrt(rr*rr+gg*gg)/(1.25*(parent.BBoxToFormat.outputBBox.r/4000)) temp_name3 yy temp_expr3 "atan2(x-width/2 , y-height/2 )/pi" channel0 {rgba.red -rgba.green -rgba.blue none} expr0 1-(yy<0?1-abs(yy)/2:yy/2) channel1 {-rgba.red rgba.green -rgba.blue none} expr1 (.5-xx)*2 channel2 {-rgba.red -rgba.green -rgba.blue none} expr2 0 channel3 {none none none -rgba.alpha} expr3 0 name Expression2 xpos 886 ypos -373 addUserKnob {20 User} } Transform { translate {{-width/2} {-width/2}} black_outside false shutteroffset centred name Transform1 xpos 886 ypos -277 } Reformat { inputs 0 format "2048 1024 0 0 2048 1024 1 2K_LatLong" pbb true name Reformat4 xpos 374 ypos -661 } set N9fbfb900 [stack 0] Ramp { p0 {{width/2} 0} p1 {{width} 0} name Ramp2 xpos 705 ypos -480 } set N9fbfb200 [stack 0] push $N9fbfb900 Ramp { p0 {{width/2} 0} p1 {0 0} name Ramp1 xpos 692 ypos -550 } set N9fbfa400 [stack 0] push $N9fbfb200 push $N9fbfa400 Merge2 { inputs 2 name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 512 ypos -529 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "import convertMergeToMergeAll;convertMergeToMergeAll.convertMergeToMergeAll()"} } push $N9fbfb900 Noise { inputs 1+1 output {rgba.red -rgba.green -rgba.blue -rgba.alpha} invert_mask true size {{parent.noiseSize*(parent.size/50)}} zoffset {{((frame*parent.zSpeed)*.1)+parent.z}} translate {0 {parent.NoOp1.output}} scale {-1 1} name Noise2 xpos 374 ypos -529 } Noise { inputs 1+1 output {rgba.red -rgba.green -rgba.blue -rgba.alpha} type {{parent.Noise2.type}} size {{parent.Noise2.size}} zoffset {{parent.Noise2.zoffset}} octaves {{parent.Noise2.octaves}} lacunarity {{parent.Noise2.lacunarity}} gain {{parent.Noise2.gain}} gamma {{parent.Noise2.gamma}} translate {{-width/2} {parent.NoOp1.output}} name Noise3 xpos 374 ypos -460 } Noise { inputs 1+1 output {rgba.red -rgba.green -rgba.blue -rgba.alpha} type {{parent.Noise2.type}} size {{parent.Noise2.size}} zoffset {{parent.Noise2.zoffset}} octaves {{parent.Noise2.octaves}} lacunarity {{parent.Noise2.lacunarity}} gain {{parent.Noise2.gain}} gamma {{parent.Noise2.gamma}} translate {{width/2} {parent.NoOp1.output}} name Noise1 xpos 374 ypos -390 } STMap { inputs 2 channels {rgba.red -rgba.green rgba.blue none} uv rgba name STMap2 xpos 374 ypos -277 } BlackOutside { name BlackOutside1 xpos 374 ypos -192 } Transform { translate {{parent.center.x} {parent.center.y}} shutteroffset centred name Transform2 xpos 374 ypos -147 } Reformat { type "to box" box_width {{parent.BBoxToFormat.inputFormat.r}} box_height {{parent.BBoxToFormat.inputFormat.t}} resize none center false pbb true name Reformat1 xpos 374 ypos -103 } Dot { name Dot8 note_font_size 41 xpos 408 ypos -26 } Grade { multiply 2 white_clamp true name Grade1 xpos -127 ypos -30 } Input { inputs 0 name Input xpos -489 ypos -775 } Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"overscanType\":\n if n.knob(\"overscanType\").getValue() == 1:\n n.knob(\"overscanPercent\").setVisible(True)\n n.knob(\"overscan\").setVisible(False)\n else:\n n.knob(\"overscanPercent\").setVisible(False)\n n.knob(\"overscan\").setVisible(True)" tile_color 0xa57aaaff note_font "Verdana Bold" note_font_color 0xffffffff xpos -489 ypos -651 addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} overscanType Percentage addUserKnob {14 overscan l Overscan +HIDDEN R 0 400} addUserKnob {14 overscanPercent l "Overscan Percent" R 1 4} overscanPercent 1 addUserKnob {20 inputBbox l "BBox Data" n 1} addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set N923e9d00 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set N923e9600 [stack 0] push $N923e9d00 Crop { box {{curve} {curve} {input.width} {input.height}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N923e8f00 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set N923e8800 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{input.bbox.r/2} {input.bbox.t/2}} shutteroffset centred name Transform1 xpos 120 ypos 555 } push $N923e8800 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $N923e9600 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $N923e8f00 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N7733cf00 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $N7733cf00 NoOp { name OutputBBox1 selected true xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group Remove { operation keep channels rgba name Remove1 xpos -489 ypos -582 } Fill { color 0 name Fill1 xpos -489 ypos -556 } Dot { name Dot1 note_font_size 41 xpos -455 ypos -492 } set N7acea400 [stack 0] Dot { name Dot4 note_font_size 41 xpos -344 ypos -492 } set N7ace9d00 [stack 0] Dot { name Dot5 note_font_size 41 xpos -222 ypos -492 } set N7ace9600 [stack 0] Dot { name Dot3 note_font_size 41 xpos -81 ypos -492 } Radial { output {-rgba.red -rgba.green -rgba.blue rgba.alpha} cliptype none replace true area {{"parent.center.x-(1+( (width/2)* outerRadius.w) )"} {"parent.center.y-(1+( (width/2)* outerRadius.h) )"} {"parent.center.x+(1+( (width/2)* outerRadius.w) )"} {"parent.center.y+(1+( (width/2)* outerRadius.h) )"}} name RadialOuter xpos -115 ypos -400 } Blur { channels {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Blur2 label "\[value size]" xpos -115 ypos -342 } Dot { name Dot2 note_font_size 41 xpos -81 ypos -191 } push $N7ace9600 Radial { output {-rgba.red -rgba.green -rgba.blue rgba.alpha} cliptype none replace true invert_mask true area {{"parent.center.x-(1+( (width/2)* innerRadius.w) )"} {"parent.center.y-(1+( (width/2)* innerRadius.h) )"} {"parent.center.x+(1+( (width/2)* innerRadius.w) )"} {"parent.center.y+(1+( (width/2)* innerRadius.h) )"}} softness 0.65 name RadialInner xpos -256 ypos -400 } Blur { channels {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Blur1 label "\[value size]" xpos -256 ypos -340 } Dot { name Dot6 note_font_size 41 xpos -222 ypos -263 } push $N7ace9d00 Expression { expr0 "clamp (sin( phase+((frame-1000)*speed) - (hypot( x-center.x, y-center.y ) / size ) ) )" channel1 {-rgba.red -rgba.green -rgba.blue none} channel2 {-rgba.red -rgba.green -rgba.blue none} channel3 {none none none -rgba.alpha} name Circles xpos -378 ypos -397 addUserKnob {20 User} addUserKnob {7 size R 0 10} size {{(width/4367*parent.size)}} addUserKnob {12 center} center {{parent.center.x} {parent.center.y}} addUserKnob {7 phase R -100 100} phase {{parent.phase}} addUserKnob {7 speed R 0 4} speed {{parent.speed}} } Multiply { inputs 1+1 channels {rgba.red -rgba.green -rgba.blue -rgba.alpha} value 0 name Multiply2 label "\[value value]" xpos -378 ypos -273 disable {{!parent.innerMaskCheck}} } Multiply { inputs 1+1 channels {rgba.red -rgba.green -rgba.blue -rgba.alpha} value 0 invert_mask true name Multiply1 label "\[value value]" xpos -378 ypos -201 disable {{!parent.outerRadiusCheck}} } Multiply { inputs 1+1 channels {rgba.red -rgba.green -rgba.blue -rgba.alpha} value 0 maskChannelMask rgba.red invert_mask true name Multiply3 label "\[value value]" xpos -378 ypos -36 disable {{!parent.noiseCheck}} } Shuffle { green red blue red alpha red name Shuffle1 tile_color 0x93000000 note_font_size 22 note_font_color 0xffffffff xpos -378 ypos 69 } push $N7acea400 Merge2 { inputs 2+1 operation copy name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos -489 ypos 117 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "import convertMergeToMergeAll;convertMergeToMergeAll.convertMergeToMergeAll()"} } push $N7acea400 Dot { name Dot9 note_font_size 41 xpos -565 ypos -492 } Dot { name Dot7 note_font_size 41 xpos -565 ypos 188 } Switch { inputs 2 which {{"parent.size == 0 || parent.outerRadius == 0 || parent.Circles.mix == 0 ? 0 : 1"}} name Switch1 label "\[value which]" xpos -489 ypos 178 } Output { name Output1 xpos -489 ypos 380 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_RotateMatrix4.gizmo ================================================ Group { name RotateMatrix4_ addUserKnob {20 Matrix4x4_Rotate} addUserKnob {4 rotation_unit l "rotation unit" M {radians degrees}} rotation_unit degrees addUserKnob {41 rot_order l "rotation order" T Axis1.rot_order} } BackdropNode { inputs 0 name BackdropNode3 tile_color 0xaaaaaa00 label Rx note_font_size 42 xpos 505 ypos 349 bdwidth 215 bdheight 180 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0xaaaaaa00 label Ry note_font_size 42 xpos 980 ypos 346 bdwidth 215 bdheight 180 } BackdropNode { inputs 0 name BackdropNode5 tile_color 0xaaaaaa00 label Rz note_font_size 42 xpos 1495 ypos 344 bdwidth 215 bdheight 180 } Input { inputs 0 name vector xpos 664 ypos 156 number 1 } Expression { expr0 radians(r) expr1 radians(g) expr2 radians(b) expr3 radians(a) name Expression1 xpos 664 ypos 201 disable {{1-parent.rotation_unit}} } Dot { name Dot1 xpos 698 ypos 251 } set Nc4142d10 [stack 0] Dot { name Dot3 xpos 698 ypos 432 } set N502e3990 [stack 0] push $N502e3990 push $N502e3990 push $N502e3990 Input { inputs 0 name matrix xpos 344 ypos 161 } Dot { name Dot6 xpos 378 ypos 296 } set N42f3b530 [stack 0] Dot { name Dot7 xpos 549 ypos 296 } set N52e82690 [stack 0] add_layer {matrix0 matrix0.0 matrix0.1 matrix0.2 matrix0.3} MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 1 channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 0 channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 0 channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 0 name MergeExpression9 xpos 515 ypos 429 } add_layer {matrix1 matrix1.0 matrix1.1 matrix1.2 matrix1.3} MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 0 channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 cos(Ar) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 -sin(Ar) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 0 name MergeExpression10 xpos 515 ypos 453 } add_layer {matrix2 matrix2.0 matrix2.1 matrix2.2 matrix2.3} MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 0 channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 sin(Ar) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 cos(Ar) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 0 name MergeExpression11 xpos 515 ypos 477 } add_layer {matrix3 matrix3.0 matrix3.1 matrix3.2 matrix3.3} MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 0 channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 0 channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 0 channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 1 name MergeExpression12 xpos 515 ypos 501 } NoOp { name X tile_color 0xff0000ff xpos 515 ypos 542 } Dot { name Dot12 tile_color 0xff0000ff xpos 549 ypos 773 } set N3b3a7680 [stack 0] Dot { name Dot16 tile_color 0xff0000ff xpos 549 ypos 907 } set N3f7deff0 [stack 0] Dot { name Dot21 tile_color 0xff0000ff xpos 549 ypos 1101 } set N3f7e3a90 [stack 0] Dot { name Dot31 tile_color 0xff0000ff xpos 549 ypos 1309 } set N3f7e80f0 [stack 0] Dot { name Dot35 tile_color 0xff0000ff xpos 549 ypos 1414 } set N1f1e44d0 [stack 0] Dot { name Dot41 tile_color 0xff0000ff xpos 549 ypos 1621 } push $Nc4142d10 Dot { name Dot4 xpos 1173 ypos 251 } set N1f1ed880 [stack 0] Dot { name Dot2 xpos 1173 ypos 429 } set N1f1f21d0 [stack 0] push $N1f1f21d0 push $N1f1f21d0 push $N1f1f21d0 push $N52e82690 Dot { name Dot8 xpos 1024 ypos 296 } set N1f1f6780 [stack 0] MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 cos(Ag) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 0 channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 sin(Ag) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 0 name MergeExpression13 xpos 990 ypos 426 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 0 channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 1 channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 0 channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 0 name MergeExpression14 xpos 990 ypos 450 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 -sin(Ag) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 0 channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 cos(Ag) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 0 name MergeExpression15 xpos 990 ypos 472 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 0 channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 0 channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 0 channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 1 name MergeExpression16 xpos 990 ypos 498 } NoOp { name Y tile_color 0xff00ff xpos 990 ypos 532 } Dot { name Dot13 tile_color 0xff00ff xpos 1024 ypos 813 } set N3af3db80 [stack 0] Dot { name Dot18 tile_color 0xff00ff xpos 1024 ypos 988 } set N3af426d0 [stack 0] Dot { name Dot26 tile_color 0xff00ff xpos 1024 ypos 1061 } set N3af46fe0 [stack 0] Dot { name Dot29 tile_color 0xff00ff xpos 1024 ypos 1228 } set N3af4b570 [stack 0] Dot { name Dot36 tile_color 0xff00ff xpos 1024 ypos 1455 } set N3af50110 [stack 0] Dot { name Dot40 tile_color 0xff00ff xpos 1024 ypos 1580 } push $N42f3b530 Dot { name Dot10 tile_color 0xcccccc00 xpos 378 ypos 633 } Dot { name Dot11 tile_color 0xcccccc00 xpos 460 ypos 633 } set N3af5dd10 [stack 0] Dot { name Dot15 tile_color 0xcccccc00 xpos 694 ypos 633 } set N3af62610 [stack 0] Dot { name Dot20 tile_color 0xcccccc00 xpos 859 ypos 633 } set N3af66c10 [stack 0] Dot { name Dot28 tile_color 0xcccccc00 xpos 1150 ypos 633 } set N3af6b420 [stack 0] Dot { name Dot33 tile_color 0xcccccc00 xpos 1369 ypos 633 } set N3af700a0 [stack 0] Dot { name Dot34 tile_color 0xcccccc00 xpos 1643 ypos 633 } push $N1f1ed880 Dot { name Dot5 xpos 1688 ypos 251 } Dot { name Dot22 xpos 1688 ypos 427 } set N3af7d660 [stack 0] push $N3af7d660 push $N3af7d660 push $N3af7d660 push $N1f1f6780 Dot { name Dot9 xpos 1539 ypos 296 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 cos(Ab) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 -sin(Ab) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 0 channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 0 name MergeExpression17 xpos 1505 ypos 424 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 sin(Ab) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 cos(Ab) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 0 channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 0 name MergeExpression18 xpos 1505 ypos 448 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 0 channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 0 channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 1 channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 0 name MergeExpression19 xpos 1505 ypos 472 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 0 channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 0 channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 0 channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 1 name MergeExpression20 xpos 1505 ypos 496 } NoOp { name Z tile_color 0xffff xpos 1505 ypos 540 } Dot { name Dot17 tile_color 0xffff xpos 1539 ypos 788 } Dot { name Dot14 tile_color 0xffff xpos 1539 ypos 854 } set N3ae440a0 [stack 0] Dot { name Dot19 tile_color 0xffff xpos 1539 ypos 947 } set N3ae48990 [stack 0] Dot { name Dot27 tile_color 0xffff xpos 1539 ypos 1142 } set N3ae4cd90 [stack 0] Dot { name Dot30 tile_color 0xffff xpos 1539 ypos 1268 } set N3ae51b90 [stack 0] Dot { name Dot37 tile_color 0xffff xpos 1539 ypos 1374 } set N3ae56460 [stack 0] Dot { name Dot39 tile_color 0xffff xpos 1539 ypos 1540 } Group { inputs 2 name ProductMatrix4_15 help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 1609 ypos 1537 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N3ae6c2d0 [stack 0] push $N3ae6c2d0 push $N3ae6c2d0 push $N3ae6c2d0 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Group { inputs 2 name ProductMatrix4_16 help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 1609 ypos 1577 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N5c7002b0 [stack 0] push $N5c7002b0 push $N5c7002b0 push $N5c7002b0 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Group { inputs 2 name ProductMatrix4_17 help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 1609 ypos 1618 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N5c74f310 [stack 0] push $N5c74f310 push $N5c74f310 push $N5c74f310 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Dot { name Dot42 tile_color 0xcccccc00 xpos 1643 ypos 1796 } push $N3af50110 push $N1f1e44d0 push $N3af700a0 push $N3ae56460 Group { inputs 2 name ProductMatrix4_12 help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 1335 ypos 1371 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N3ad61c90 [stack 0] push $N3ad61c90 push $N3ad61c90 push $N3ad61c90 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Group { inputs 2 name ProductMatrix4_13 help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 1335 ypos 1411 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N3ac30d80 [stack 0] push $N3ac30d80 push $N3ac30d80 push $N3ac30d80 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Group { inputs 2 name ProductMatrix4_14 help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 1335 ypos 1452 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N3ac7fed0 [stack 0] push $N3ac7fed0 push $N3ac7fed0 push $N3ac7fed0 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Dot { name Dot38 tile_color 0xcccccc00 xpos 1369 ypos 1791 } push $N3f7e80f0 push $N3ae51b90 push $N3af6b420 push $N3af4b570 Group { inputs 2 name ProductMatrix4_9 help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 1116 ypos 1225 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N3ab53a90 [stack 0] push $N3ab53a90 push $N3ab53a90 push $N3ab53a90 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Group { inputs 2 name ProductMatrix4_10 help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 1116 ypos 1265 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N3aba2cf0 [stack 0] push $N3aba2cf0 push $N3aba2cf0 push $N3aba2cf0 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Group { inputs 2 name ProductMatrix4_11 help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 1116 ypos 1306 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N3aa71bf0 [stack 0] push $N3aa71bf0 push $N3aa71bf0 push $N3aa71bf0 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Dot { name Dot32 tile_color 0xcccccc00 xpos 1150 ypos 1788 } push $N3ae4cd90 push $N3f7e3a90 push $N3af66c10 push $N3af46fe0 Group { inputs 2 name ProductMatrix4_6 help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 825 ypos 1058 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N3a9455e0 [stack 0] push $N3a9455e0 push $N3a9455e0 push $N3a9455e0 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Group { inputs 2 name ProductMatrix4_7 help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 825 ypos 1098 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N3a994610 [stack 0] push $N3a994610 push $N3a994610 push $N3a994610 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Group { inputs 2 name ProductMatrix4_8 help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 825 ypos 1139 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N3a8636e0 [stack 0] push $N3a8636e0 push $N3a8636e0 push $N3a8636e0 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Dot { name Dot25 tile_color 0xcccccc00 xpos 859 ypos 1801 } push $N3af426d0 push $N3ae48990 push $N3af62610 push $N3f7deff0 Group { inputs 2 name ProductMatrix4_3 help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 660 ypos 904 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N3a737030 [stack 0] push $N3a737030 push $N3a737030 push $N3a737030 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Group { inputs 2 name ProductMatrix4_4 help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 660 ypos 944 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N3a786160 [stack 0] push $N3a786160 push $N3a786160 push $N3a786160 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Group { inputs 2 name ProductMatrix4_5 help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 660 ypos 985 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N3a6551e0 [stack 0] push $N3a6551e0 push $N3a6551e0 push $N3a6551e0 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Dot { name Dot24 tile_color 0xcccccc00 xpos 694 ypos 1802 } push $N3ae440a0 push $N3af3db80 push $N3af5dd10 push $N3b3a7680 Group { inputs 2 name ProductMatrix4_ help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 426 ypos 770 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N3a528b40 [stack 0] push $N3a528b40 push $N3a528b40 push $N3a528b40 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Group { inputs 2 name ProductMatrix4_1 help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 426 ypos 810 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N3a577c40 [stack 0] push $N3a577c40 push $N3a577c40 push $N3a577c40 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Group { inputs 2 name ProductMatrix4_2 help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 426 ypos 851 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N3a446bf0 [stack 0] push $N3a446bf0 push $N3a446bf0 push $N3a446bf0 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Dot { name Dot23 tile_color 0xcccccc00 xpos 460 ypos 1794 } Switch { inputs 6 which {{parent.rot_order}} name Switch1 xpos 937 ypos 1948 } Output { name Output1 xpos 937 ypos 2058 } Axis2 { inputs 0 name Axis1 label "Only used for rotation order knob" xpos 98 ypos 187 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_RotateVector2.gizmo ================================================ Group { name RotateVector2_ help "Rotate a 2D vector on the same 2D plane." knobChanged "\nnode = nuke.thisNode()\nknob = nuke.thisKnob()\nif knob.name() == \"mode\":\n if knob.value() == \"Knob (Degrees 0-360)\":\n node\['angle'].setEnabled(True)\n else:\n node\['angle'].setEnabled(False)\n" addUserKnob {20 main_tab l "Rotate Vector2"} addUserKnob {41 in l "Vector B Layer" t "Layer containing the vector information for input B" T vector_layer.in} addUserKnob {4 mode l "Rotate by" t "Pick whether to rotate the input vector by:\nKnob (Degrees 0-360)\nAngle Map (Degrees 0-360)\nAngle Map (Degrees 0-1)\nAngle Map (Radians)\n\nAn Angle map is a single channel image (expected in red channel) that represents an angle value at each pixel." M {"Knob (Degrees 0-360)" "Angle Map (Degrees 0-360)" "Angle Map (Degrees 0-1)" "Angle Map (Radians)" "" "" ""}} addUserKnob {26 "" +STARTLINE} addUserKnob {7 angle l Angle R -180 180} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name angleMap xpos 479 ypos 5 number 1 } Multiply { channels rgb value 360 name Multiply_360 xpos 479 ypos 90 disable {{parent.mode!=2}} } Expression { expr0 radians(r) name Degrees_to_Radians xpos 479 ypos 132 disable {{parent.mode==3}} } Dot { name Dot5 tile_color 0xcccccc00 xpos 513 ypos 249 } Input { inputs 0 name vectorB xpos 0 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 108 } set N8a49d10 [stack 0] Shuffle { name vector_layer xpos 140 ypos 104 } Remove { operation keep channels rgba name Remove1 xpos 140 ypos 130 } Dot { name Dot3 tile_color 0x9e3c6300 xpos 174 ypos 181 } set N31f4270 [stack 0] Dot { name Dot4 tile_color 0x9e3c6300 xpos 372 ypos 181 } MergeExpression { inputs 2 expr0 "Br * cos(Ar) - Bg * sin(Ar)" expr1 "Br * sin(Ar) + Bg * cos(Ar)" name MergeExpression1 xpos 338 ypos 245 } Dot { name Dot6 tile_color 0x4b5ec600 xpos 372 ypos 311 } push $N31f4270 Expression { temp_name0 angleRad temp_expr0 radians(parent.angle) expr0 "r * cos(angleRad) - g * sin(angleRad)" expr1 "r * sin(angleRad) + g * cos(angleRad)" name Rotation xpos 140 ypos 240 } Switch { inputs 2 which {{parent.mode!=0}} name Switch1 xpos 140 ypos 307 } Dot { name Dot2 tile_color 0xcccccc00 xpos 174 ypos 364 } push $N8a49d10 ShuffleCopy { inputs 2 in2 none red red green green blue blue out {{{parent.vector_layer.in}}} name ShuffleCopy1 xpos 0 ypos 360 } Output { name Output1 xpos 0 ypos 506 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_RotateVector3.gizmo ================================================ Group { name RotateVector3_ help "Rotate a Vector3 in 3 dimensions." knobChanged "node = nuke.thisNode()\nknob = nuke.thisKnob()\nif knob.name() == \"mode\":\n if knob.value() == \"Knob\":\n node\['rotate'].setEnabled(True)\n node\['rot_order'].setEnabled(True)\n else:\n node\['rotate'].setEnabled(False)\n node\['rot_order'].setEnabled(False)\n" addUserKnob {20 main_tab l RotateVector3} addUserKnob {41 in l "Vector B Layer" t "Layer containing the vector information for input B" T vector_layer.in} addUserKnob {4 mode l "Rotate by" t "Either control the rotation by the knob present on this node, or via the Matrix input." M {Knob "Pixel Matrix" ""}} addUserKnob {26 ""} addUserKnob {4 rot_order l "rotation order" t "Specifies the order to apply euler angles to the rotation." M {XYZ XZY YXZ YZX ZXY ZYX "" "" ""}} rot_order ZXY addUserKnob {13 rotate} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vectorB xpos 0 ypos -30 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 72 } set N101e6610 [stack 0] Shuffle { name vector_layer xpos 366 ypos 68 } Remove { operation keep channels rgba name Remove1 xpos 366 ypos 94 } Dot { name Dot3 tile_color 0x9e3c6300 xpos 400 ypos 156 } set N102036e0 [stack 0] Dot { name Dot6 tile_color 0x9e3c6300 xpos 220 ypos 156 } Group { name Magnitude_Vector3_ help "Calculate the magnitude (scalar) of an input Vector3." xpos 186 ypos 231 addUserKnob {20 main_tab l "Magnitude Vector3"} addUserKnob {41 in l "Vector B Layer" t "Layer containing the vector information for input B" T vector_layer.in} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vectorB xpos 0 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 108 } set N10219760 [stack 0] Shuffle { name vector_layer xpos 140 ypos 104 } Remove { operation keep channels rgba name Remove1 xpos 140 ypos 130 } Expression { channel0 rgba expr0 sqrt((r*r)+(g*g)+(b*b)) channel2 {-rgba.red -rgba.green -rgba.blue none} channel3 {none none none -rgba.alpha} name Mag3 xpos 140 ypos 227 } Dot { name Dot2 tile_color 0xcccccc00 xpos 174 ypos 364 } push $N10219760 ShuffleCopy { inputs 2 in2 none red red green green blue blue out {{{parent.vector_layer.in}}} name ShuffleCopy1 xpos 0 ypos 360 } Output { name Output1 xpos 0 ypos 506 } end_group Dot { name Dot7 tile_color 0xcccccc00 xpos 220 ypos 529 } push $N102036e0 Dot { name Dot4 tile_color 0x9e3c6300 xpos 556 ypos 156 } set N10261db0 [stack 0] Input { inputs 0 name matrix xpos 614 ypos -30 number 1 } CopyBBox { inputs 2 name CopyBBox1 xpos 614 ypos 152 } push $N10261db0 Dot { name Dot5 tile_color 0x9e3c6300 xpos 556 ypos 198 } Group { inputs 2 name MultiplyVector3Matrix3_2 help "Multiply (transform) a Vector3 by a Matrix3. This is the equivalent of applying Rotation/Scale/Skew from a Matrix to the vector.\nA Matrix4 can be used, but the last row/column will be ignored." xpos 614 ypos 195 addUserKnob {20 main_tab l "Mutiply Vector3 Matrix3"} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name InputMatrix3 xpos 402 ypos 7 number 1 } Dot { name Dot3 tile_color 0xcccccc00 xpos 436 ypos 62 } add_layer {matrix0 matrix0.0 matrix0.1 matrix0.2 matrix0.3} Shuffle { in matrix0 name Shuffle1 label "in \[value in]-->out \[value out]" xpos 402 ypos 109 } set N102888a0 [stack 0] add_layer {matrix1 matrix1.0 matrix1.1 matrix1.2 matrix1.3} Shuffle { in matrix1 name Shuffle2 label "in \[value in]-->out \[value out]" xpos 402 ypos 147 } set N10298df0 [stack 0] add_layer {matrix2 matrix2.0 matrix2.1 matrix2.2 matrix2.3} Shuffle { in matrix2 name Shuffle3 label "in \[value in]-->out \[value out]" xpos 402 ypos 185 } set N102a9320 [stack 0] add_layer {matrix3 matrix3.0 matrix3.1 matrix3.2 matrix3.3} Shuffle { in matrix3 name Shuffle4 label "in \[value in]-->out \[value out]" xpos 402 ypos 223 } push $N102a9320 Dot { name Dot7 tile_color 0x9e3c6300 xpos 343 ypos 195 } push $N10298df0 Dot { name Dot6 tile_color 0x9e3c6300 xpos 343 ypos 157 } push $N102888a0 Dot { name Dot5 tile_color 0x9e3c6300 xpos 343 ypos 119 } Input { inputs 0 name InputVector3 xpos 219 ypos 8 } Dot { name Dot4 tile_color 0xcccccc00 xpos 253 ypos 115 } BlinkScript { inputs 4 recompileCount 12 ProgramGroup 1 KernelDescription "2 \"TransformVector3byMatrix3\" iterate pixelWise 156e29276da8287b847626148a2a784d9969b7d1a3ad81e28187d00a7aaafaca 5 \"src\" Read Point \"matrix0\" Read Point \"matrix1\" Read Point \"matrix2\" Read Point \"dst\" Write Point 0 0 0" kernelSource "kernel TransformVector3byMatrix3 : ImageComputationKernel\n\{\n Image src; // the input image\n Image matrix0; // the input image\n Image matrix1; // the input image\n Image matrix2; // the input image\n Image dst; // the output image\n\n void process() \{\n // Read the input image\n SampleType(src) input = src();\n SampleType(matrix0) m0 = matrix0();\n SampleType(matrix1) m1 = matrix1();\n SampleType(matrix2) m2 = matrix2();\n\n // Create the matrix object (matrix3 in this case)\n float3x3 matrix;\n matrix\[0]\[0] = m0.x;\n matrix\[0]\[1] = m0.y;\n matrix\[0]\[2] = m0.z;\n matrix\[1]\[0] = m1.x;\n matrix\[1]\[1] = m1.y;\n matrix\[1]\[2] = m1.z;\n matrix\[2]\[0] = m2.x;\n matrix\[2]\[1] = m2.y;\n matrix\[2]\[2] = m2.z;\n\n // Multiply the Matrix and the Vector\n float3 vector(input.x, input.y, input.z);\n vector = matrix*vector;\n\n // Write the result to the output image\n dst() = float4(vector.x, vector.y, vector.z, input.w);\n \}\n\};\n" rebuild "" rebuild_finalise "" name BlinkScript1 xpos 219 ypos 223 } Output { name Output1 xpos 219 ypos 323 } end_group Dot { name Dot2 tile_color 0xcccccc00 xpos 648 ypos 364 } push $N102036e0 ColorMatrix { matrix { {{Axis1.world_matrix.0} {Axis1.world_matrix.1} {Axis1.world_matrix.2}} {{Axis1.world_matrix.4} {Axis1.world_matrix.5} {Axis1.world_matrix.6}} {{Axis1.world_matrix.8} {Axis1.world_matrix.9} {Axis1.world_matrix.10}} } name ColorMatrix1 xpos 366 ypos 269 } Switch { inputs 2 which {{parent.mode}} name Switch1 xpos 366 ypos 360 } Group { name NormalizeVector3_ help "Normalize the magnitude of a Vector3 (to be of magnitude 1)" xpos 366 ypos 450 addUserKnob {20 main_tab l "Normalize Vector3"} addUserKnob {41 in l "Vector B Layer" t "Layer containing the vector information for input B" T vector_layer.in} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vectorB xpos 0 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 108 } set N1031bd80 [stack 0] Shuffle { name vector_layer xpos 140 ypos 104 } Remove { operation keep channels rgba name Remove1 xpos 140 ypos 130 } Dot { name Dot3 tile_color 0x9e3c6300 xpos 174 ypos 156 } set N10338e50 [stack 0] push $N10338e50 Dot { name Dot4 tile_color 0x9e3c6300 xpos 377 ypos 156 } Expression { channel0 rgba expr0 sqrt((r*r)+(g*g)+(b*b)) channel2 {-rgba.red -rgba.green -rgba.blue none} channel3 {none none none -rgba.alpha} name Mag3 xpos 343 ypos 209 } Dot { name Dot5 tile_color 0xcccccc00 xpos 377 ypos 271 } Merge2 { inputs 2 operation divide bbox B name Merge1 xpos 140 ypos 267 } Dot { name Dot2 tile_color 0x4b5ec600 xpos 174 ypos 364 } push $N1031bd80 ShuffleCopy { inputs 2 in2 none red red green green blue blue out {{{parent.vector_layer.in}}} name ShuffleCopy1 xpos 0 ypos 360 } Output { name Output1 xpos 0 ypos 506 } end_group Merge2 { inputs 2 operation multiply bbox B name Merge1 xpos 366 ypos 525 } Dot { name Dot8 tile_color 0x4b5ec600 xpos 400 ypos 601 } push $N101e6610 ShuffleCopy { inputs 2 in2 none red red green green blue blue out {{{parent.vector_layer.in}}} name ShuffleCopy1 xpos 0 ypos 597 } Output { name Output1 xpos 0 ypos 671 } Axis2 { inputs 0 rot_order {{parent.rot_order x1 2}} rotate {{parent.rotate.x} {parent.rotate.y} {parent.rotate.z}} name Axis1 xpos 471 ypos 252 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_RotoCentroid.gizmo ================================================ Group { name RotoCentroid tile_color 0x70ff66ff selected true addUserKnob {20 RotoCentroid} addUserKnob {12 centroid} centroid {1054.860665 666.3638309} addUserKnob {68 rotoshape M {Ellipse1}} addUserKnob {3 samples} samples 1000 addUserKnob {7 _calc l INVISIBLE +INVISIBLE} _calc {{"\[python -execlocal n=nuke.thisNode()\\n\\ntry:\\n\\ \\ \\ \\ #\\ Setup\\ input\\ shape\\ names\\n\\ \\ \\ \\ rs\\ =\\ n\\\[\\\"rotoshape\\\"\\]\\n\\ \\ \\ \\ rs_v\\ =\\ rs.value()\\n\\ \\ \\ \\ shpl\\ =\\ \\\[\\]\\n\\ \\ \\ \\ rotos=n.input(0)\\n\\ \\ \\ \\ curves=rotos\\\[\\\"curves\\\"\\].rootLayer\\n\\ \\ \\ \\ for\\ c\\ in\\ curves:\\n\\ \\ \\ \\ \\ \\ \\ \\ shpl.append(c.name)\\n\\ \\ \\ \\ rs.setValues(shpl)\\n\\ \\ \\ \\ rs.setValue(rs_v)\\n\\ \\ \\ \\ \\n\\ \\ \\ \\ \\n\\ \\ \\ \\ \\n\\ \\ \\ \\ \\n\\ \\ \\ \\ ev\\ =\\ rotos\\\[\\\"curves\\\"\\].toElement(rs_v).evaluate(0,nuke.frame())\\n\\ \\ \\ \\ samples\\ =\\ n\\\[\\\"samples\\\"\\].value()\\n\\ \\ \\ \\ nsamp\\ =\\ int(samples)\\n\\ \\ \\ \\ pts\\ =\\ \\\[list(ev.getPoint(i/samples))\\\[:2\\]\\ for\\ i\\ in\\ range(nsamp)\\]\\n\\ \\ \\ \\ \\n\\ \\ \\ \\ \\n\\ \\ \\ \\ def\\ centroid2d(*points):\\n\\ \\ \\ \\ \\ \\ \\ \\ dist\\ =\\ lambda\\ a,b\\ :\\ ((b\\\[0\\]-a\\\[0\\])**2\\ +\\ (b\\\[1\\]-a\\\[1\\])**2)**0.5\\n\\ \\ \\ \\ \\ \\ \\ \\ l\\ =\\ len(points)\\n\\ \\ \\ \\ \\ \\ \\ \\ subpts\\ =\\ \\\[\\]\\n\\ \\ \\ \\ \\ \\ \\ \\ weights\\ =\\ \\\[\\]\\n\\ \\ \\ \\ \\ \\ \\ \\ for\\ i\\ in\\ range(l):\\n\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ subpts.append(points\\\[i\\])\\n\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ weights.append(\\ dist(points\\\[i\\],\\ points\\\[(i+1)%l\\])+dist(points\\\[i\\],\\ points\\\[(i-1)%l\\])\\ )\\n\\ \\ \\ \\ \\ \\ \\ \\ \\n\\ \\ \\ \\ \\ \\ \\ \\ nweight\\ =\\ sum(weights)\\n\\ \\ \\ \\ \\ \\ \\ \\ rx\\ =\\ 0.0\\n\\ \\ \\ \\ \\ \\ \\ \\ ry\\ =\\ 0.0\\n\\ \\ \\ \\ \\ \\ \\ \\ for\\ i\\ in\\ range(l):\\n\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ w\\ =\\ weights\\\[i\\]/nweight\\n\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ rx\\ +=\\ subpts\\\[i\\]\\\[0\\]*w\\n\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ ry\\ +=\\ subpts\\\[i\\]\\\[1\\]*w\\n\\ \\ \\ \\ \\ \\ \\ \\ return\\ rx,ry\\n\\ \\ \\ \\ \\n\\ \\ \\ \\ \\n\\ \\ \\ \\ cent\\ =\\ centroid2d(*pts)\\n\\ \\ \\ \\ \\n\\ \\ \\ \\ n\\\[\\\"centroid\\\"\\].setValue(cent\\\[0\\],0)\\n\\ \\ \\ \\ n\\\[\\\"centroid\\\"\\].setValue(cent\\\[1\\],1)\\nexcept:pass\\nret=0\\n]"}} } Input { inputs 0 name Input1 xpos 0 } Output { name Output1 xpos 0 ypos 300 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_RotoPaintTransform.gizmo ================================================ Group { name RotoPaint_Transform onCreate "n = nuke.thisNode()\nn\['format'].setFlag(nuke.DISABLED)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\n#works only if knob 'operation' is changing.\nif ('operation' in k.name()):\n if(k.getValue()==0):\n n\['UV_offset'].setVisible(False)\n n\['UV_scale'].setVisible(False)\n n\['line'].setVisible(False)\n elif(k.getValue()==1):\n n\['UV_offset'].setVisible(True)\n n\['UV_scale'].setVisible(True)\n n\['line'].setVisible(True)\nelif ('output_1' in k.name()):\n if(k.getValue()==0):\n n\['operation'].setVisible(True)\n n\['filter'].setVisible(True)\n elif(k.getValue()==1):\n n\['operation'].setVisible(False)\n n\['filter'].setVisible(False)\n elif(k.getValue()==2):\n n\['operation'].setVisible(False)\n n\['filter'].setVisible(False)\nelif ('img_format' in k.name()):\n if(k.getValue()==0):\n n\['format'].clearFlag(nuke.DISABLED)\n elif(k.getValue()==1):\n n\['format'].setFlag(nuke.DISABLED)" tile_color 0xa57aaa00 note_font "Verdana Bold" selected true addUserKnob {20 Parameters} addUserKnob {26 instructions l "" +STARTLINE T "Click the button 'Select brush' below to select the right brush.
Paint to move the elements
\nClose the Properties to disable the node with D"} addUserKnob {26 ""} addUserKnob {26 output_2 l "OUTPUT"} addUserKnob {41 channels T STMap37.channels} addUserKnob {41 format T Constant1.format} addUserKnob {6 img_format l "format from img" -STARTLINE} img_format true addUserKnob {7 overscan R 0 100} addUserKnob {26 ""} addUserKnob {4 output t "Select which output you want to have: the final result with the distortion, the UV Map or the Vector Map to use with the iDistort node" M {"Final Result" "UV Map" Vector "" "" ""}} addUserKnob {4 operation t "Choose between\n- UVMap\n- Vector distort\n\nThe UVMap is without any control, the vector distort is used with the iDistort node, so you can also control the distortion with knobs Offset and Scale." M {"UV Map" Vector ""}} addUserKnob {4 filter M {Impulse Cubic Keys Simon Rifman Mitchell Parzen Notch Lanczos4 Lanczos6 Sinc4}} filter Cubic addUserKnob {26 line l "" +STARTLINE +HIDDEN} addUserKnob {7 UV_offset l "UV offset" +HIDDEN} addUserKnob {7 UV_scale l "UV scale" +HIDDEN R 0 100} UV_scale 2 addUserKnob {26 ""} addUserKnob {22 move l "Select brush" t "Select automatically the right brush" T "n = nuke.thisNode()\nn\['toolbox'].setValue(0)\nn\['toolbox'].setValue(25)" +STARTLINE} addUserKnob {6 check l "check painting" t "Use the checkerboard to check your paint" -STARTLINE} addUserKnob {41 size l smooth t "Smooth the paint" T Blur1.size} addUserKnob {26 paint l "PAINT"} addUserKnob {41 opacity l INVISIBLE +INVISIBLE T RotoPaint.opacity} addUserKnob {41 toolbar_opacity l opacity T RotoPaint.toolbar_opacity} addUserKnob {41 brush_hardness l "brush hardness" T RotoPaint.brush_hardness} addUserKnob {41 brush_spacing l "brush spacing" T RotoPaint.brush_spacing} addUserKnob {26 ""} addUserKnob {20 paint_1 l "" +STARTLINE n 1} addUserKnob {41 opacity_1 l opacity T RotoPaint.opacity} addUserKnob {41 lifetime_type l "lifetime type" T RotoPaint.lifetime_type} addUserKnob {41 lifetime_start l from -STARTLINE T RotoPaint.lifetime_start} addUserKnob {41 lifetime_end l to -STARTLINE T RotoPaint.lifetime_end} addUserKnob {41 toolbox l "" +STARTLINE T RotoPaint.toolbox} addUserKnob {41 curves l "" -STARTLINE T RotoPaint.curves} addUserKnob {20 endGroup n -1} addUserKnob {41 maskChannel l "mask channel" T STMap37.maskChannel} addUserKnob {41 invert_mask l invert -STARTLINE T STMap37.invert_mask} addUserKnob {26 ""} addUserKnob {41 mix T Merge1.mix} addUserKnob {20 "" l Transform} addUserKnob {41 transform T RotoPaint.transform} addUserKnob {41 translate T RotoPaint.translate} addUserKnob {41 rotate T RotoPaint.rotate} addUserKnob {41 scale_1 l scale T RotoPaint.scale} addUserKnob {41 skewX l "skew X" T RotoPaint.skewX} addUserKnob {41 skewY l "skew Y" T RotoPaint.skewY} addUserKnob {41 skew_order l "skew order" T RotoPaint.skew_order} addUserKnob {41 center T RotoPaint.center} addUserKnob {20 "extra matrix" n 2} "extra matrix" 1 addUserKnob {41 transform_matrix l "" -STARTLINE T RotoPaint.transform_matrix} addUserKnob {20 "" n -1} addUserKnob {20 email l @} addUserKnob {26 message l "" +STARTLINE T "RotoPaint Transform v1.2
\nby Andrea Geremia
\n
\nandrea.geremia89@gmail.com
\nwww.andreageremia.it
"} } Constant { inputs 0 channels rgb format "2048 2048 0 0 2048 2048 1 square_2K" name Constant1 xpos -177 ypos -392 } Input { inputs 0 name img xpos 179 ypos -505 } Dot { name Dot10 xpos 213 ypos -459 } set N67f29800 [stack 0] Remove { name Remove1 xpos -6 ypos -466 } Switch { inputs 2 which {{!parent.img_format}} name Switch_Format label "\[value which]" xpos -6 ypos -372 } AdjBBox { numpixels {{parent.overscan}} name AdjBBox1 xpos -6 ypos -272 } Expression { expr0 (x+0.5)/width expr1 (y+0.5)/height name Expression1 xpos -6 ypos -238 } Dot { name Dot8 xpos 28 ypos -201 } set N67f28800 [stack 0] Dot { name Dot11 xpos 28 ypos -115 } set N67f28400 [stack 0] push $N67f28800 RotoPaint { cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097664} {t x4493a000 x440b8000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0}}}}} toolbox {smear { { selectAll bs 487.9 h 1 src 1 str 1 ssx 1 ssy 1 sf 1 ep1 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush bs 180 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 1034 ltm 1034 tt 17 } { eraser bs 86.2 src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 1033 ltm 1033 tt 18 } { clone opc 0.1 bs 44.8 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 tt 19 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 tt 21 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 tt 22 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ep1 5 tt 23 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 tt 24 } { smear bs 487.9 h 1 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 tt 25 } } } toolbar_brush_size 487.8999939 toolbar_brush_hardness 1 toolbar_lifetime_type single toolbar_effect_parameter1 1 toolbar_paint_source fg toolbar_source_transform_scale {1 1} toolbar_source_transform_center {1024 778} colorOverlay {0 0 0 0} paint_source foreground view {} motionblur_on true motionblur_shutter_offset_type centred brush_type smear brush_size 487.8999939 brush_spacing 0.05000000075 brush_hardness 1 effect_parameter1 1 source_black_outside true name RotoPaint xpos -112 ypos -149 } set N79877c00 [stack 0] push $N67f28800 Dot { name Dot9 xpos -236 ypos -201 } Difference { inputs 2 gain 1000000 name Difference1 xpos -270 ypos -153 } Dilate { channels alpha size {{parent.Blur1.size}} name Dilate1 label "\[value size]" xpos -270 ypos -113 } push $N79877c00 Blur { inputs 1+1 channels rgb name Blur1 label "\[value size]" xpos -112 ypos -108 } CopyBBox { inputs 2 name CopyBBox1 xpos -112 ypos -48 } push $N67f28400 Merge2 { inputs 2 operation copy name Merge1 xpos -5 ypos -48 } set N79876400 [stack 0] Dot { name Dot2 xpos 28 ypos 9 } set N79876000 [stack 0] Expression { expr0 (r-(x+0.5)/width)*width expr1 (g-(y+0.5)/height)*height expr2 0 name Expression2 label "UVMap to Vector" xpos 301 ypos 2 } set N79875c00 [stack 0] Dot { name Dot3 xpos 335 ypos 176 } push $N79876000 Dot { name Dot1 xpos 28 ypos 176 } Input { inputs 0 name mask xpos 566 ypos -83 number 1 } Dot { name Dot7 xpos 600 ypos -45 } set N79874c00 [stack 0] Dot { name Dot6 xpos 600 ypos 42 } push $N79875c00 CheckerBoard2 { inputs 0 name CheckerBoard1 xpos 307 ypos -288 } push $N67f29800 Switch { inputs 2 which {{parent.check}} name Switch1 label "\[value which]" xpos 179 ypos -268 } Dot { name Dot4 xpos 213 ypos -132 } set N7fbe3c00 [stack 0] Dot { name Dot5 xpos 491 ypos -132 } ShuffleCopy { inputs 2 red red green green blue blue out motion name ShuffleCopy1 xpos 457 ypos 6 } IDistort { inputs 1+1 channels {{{parent.STMap37.channels}}} uv motion uv_offset {{parent.UV_offset}} uv_scale {{parent.UV_scale}} maskChannel {{{parent.STMap37.maskChannel}}} invert_mask {{parent.STMap37.invert_mask}} filter {{STMap37.filter}} name IDistort1 xpos 457 ypos 39 } push $N79874c00 push $N79876400 push $N7fbe3c00 STMap { inputs 2+1 channels rgba uv rgba blur_scale 0 filter {{parent.filter}} name STMap37 xpos 179 ypos -48 } Switch { inputs 2 which {{parent.operation}} name Switch_operation label "\[value which]" xpos 179 ypos 35 } Switch { inputs 3 which {{parent.output}} name Switch_output label "\[value which]" xpos 179 ypos 169 } Output { name Output1 xpos 179 ypos 230 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_RotoQC.gizmo ================================================ set cut_paste_input [stack 0] push 0 push $cut_paste_input Group { inputs 2 name RotoQC help "matte QC tool for checking roto work, choose between different overlay modes or merge-operations to QC the roto work.\n\nThe node is stackable, meaning the alpha carries over and is merged properly if you stack multiple matteQC nodes together (keep matte in alpha channel must be checked). This can be used to view Red, Green and Blue mattes at the same time in RGB mode for example.\n\nDeveloped by Tor Andreassen - www.fxtor.net" knobChanged "if nuke.thisKnob().name()=='mode':\n n=nuke.thisNode()\n\n val=n\['mode'].value()\n\n if val == 'red overlay':\n n\['tile_color'].setValue(0xff0000ff)\n\n elif val == 'green overlay':\n n\['tile_color'].setValue(0x3d962bff)\n\n elif val == 'blue overlay':\n n\['tile_color'].setValue(0x3b54b7ff)\n\n elif val == 'premult: grey':\n n\['tile_color'].setValue(0x8e8e8eff)\n\n elif val == 'premult: checkerboard':\n n\['tile_color'].setValue(0xf8ff00ff)\n\n elif val == 'premult: custom color':\n n\['tile_color'].setValue(0xf8ff00ff)\n\n elif val == 'stencil from rgb':\n n\['tile_color'].setValue(0x2c2c2cff)\n\n elif val == 'check core for holes':\n n\['tile_color'].setValue(0xf8ff00ff)" tile_color 0xff0000ff label "\[value mode]" note_font Verdana note_font_color 0xffffffff selected true addUserKnob {20 fxT_matteQC} addUserKnob {4 mode t "pick your display mode\n___________________________________________\nmost modes are self explaining.\n\npremult agains custom color: the custom color can be set in the 'custom BG color' slider.\n\ncheck core for holes:\nthis is an expression that sets the alpha to 0 if the alpha value is below 1, making it easier to see if overlapping shapes are giving you holes in the core of your matte." M {"red overlay" "green overlay" "blue overlay" "stencil from rgb" "premult: grey" "premult: checkerboard" "premult: custom color" "check core for holes" "" ""}} addUserKnob {26 ""} addUserKnob {7 colorOpacity l "color opacity" t "this will change the overlay opacity when the mode is set to red, green, or blue overlay."} colorOpacity 0.25 addUserKnob {41 color l "custom BG color" T AddCustom.value} addUserKnob {6 keepAlpha l "keep matte in alpha channel" t "When a matte is hooked into the node, this gives you the option to keep the matte in the alpha channel.\n\nIf the box is uncheked, the alpha channel will replaced with a solid alpha." +STARTLINE} keepAlpha true addUserKnob {6 bbox l "keep bbox" t "If this is checked, the bbox from the 'rgb' input will be used. Uncheck this checkbox to keep the bbox from the 'matte' input. " -STARTLINE} addUserKnob {6 pipeAlpaThrough l "pipe alpha through" t "This option lets you see the rgb input with alpha channel from the matte input. \n\nMode dropdown is ignorored to let you see the raw bg with alpha copied in." +STARTLINE} addUserKnob {6 invertMatte l "invert matte" t "Click this to invert the input matte.\n\nPS: This will only invert the matte if overlay mode is active (red,green, or blue)." -STARTLINE} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "// fxT_matteQC v2.4 © Tor Andreassen = www.fxtor.net"} addUserKnob {20 tab} addUserKnob {26 info l "" +STARTLINE T "This tool is intended for checking matte accuracy.
\nThe format will default to the rgb input's format.

\n\nThe node is stackable if you want to see R,G,B
\noverlay at the same time over the plate.

\nThe alpha will carry through between stacked nodes
\nif the 'keep matte in alpha channel' checkbox is checked.

\n\nPS: for the alpha to carry through, the nodename
\nneeds to start with 'fxT_matteQC', as it's based on regEx
\nto only stack alphas from fxT_matteQC nodes.
\n
"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x505a6101 label "BG COLOR OVERLAY\ndefined by user dropdown" note_font "Arial Black" note_font_size 25 note_font_color 0xffffff01 xpos -1211 ypos -1017 bdwidth 484 bdheight 559 } BackdropNode { inputs 0 name BackdropNode10 tile_color 0x505a6101 label "raw input, but pipe the alpha into the alpha-channel" note_font "Arial Black" note_font_size 25 note_font_color 0xffffff01 xpos -1205 ypos 1031 bdwidth 1756 bdheight 170 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x505a6101 label "WHEN PREMULTED AGAINST BG; USE THIS BG\ndefined by user dropdown" note_font "Arial Black" note_font_size 25 note_font_color 0xffffff01 xpos 484 ypos -1173 bdwidth 876 bdheight 721 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x505a6101 label "PREMULTED AGAINST RED,GREEN, BLUE OR INPUT\ndefined by user dropdown" note_font "Arial Black" note_font_size 25 note_font_color 0xffffff01 xpos -725 ypos -371 bdwidth 698 bdheight 551 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x505a6101 label "merge with or without mix depending on mode" note_font "Arial Black" note_font_size 25 note_font_color 0xffffff01 xpos -1211 ypos 297 bdwidth 1762 bdheight 411 } BackdropNode { inputs 0 name BackdropNode5 tile_color 0x505a6101 label "BG INPUT" note_font "Arial Black" note_font_size 25 note_font_color 0xffffff01 xpos 211 ypos -1603 bdwidth 365 bdheight 314 } BackdropNode { inputs 0 name BackdropNode7 tile_color 0x505a6101 label "keep RGB input's bbox" note_font "Arial Black" note_font_size 25 note_font_color 0xffffff01 xpos -1206 ypos 1222 bdwidth 1753 bdheight 109 } BackdropNode { inputs 0 name BackdropNode8 tile_color 0x505a6101 label "keep alpha" note_font "Arial Black" note_font_size 25 note_font_color 0xffffff01 xpos -1207 ypos 753 bdwidth 1756 bdheight 234 } BackdropNode { inputs 0 name BackdropNode12 tile_color 0x434b51ff label checkerboard note_font "Arial Black" note_font_size 20 note_font_color 0xffffff01 xpos 839 ypos -1045 bdwidth 188 bdheight 378 z_order 1 } BackdropNode { inputs 0 name BackdropNode13 tile_color 0x434b51ff label "custom color" note_font "Arial Black" note_font_size 20 note_font_color 0xffffff01 xpos 1093 ypos -1050 bdwidth 174 bdheight 386 z_order 1 } BackdropNode { inputs 0 name BackdropNode6 tile_color 0x434b51ff label "0.33 grey" note_font "Arial Black" note_font_size 20 note_font_color 0xffffff01 xpos 576 ypos -1047 bdwidth 194 bdheight 380 z_order 1 } StickyNote { inputs 0 name StickyNote1 tile_color 0xa8a8a8ff label "merge alpha from previous fxT_matteQC-node if the nodes are stacked.\nBased on regEx matching. so removing 'fxT_matteQC' from the node-name will break this" xpos -357 ypos 920 } Input { inputs 0 name rgb label "\[value number]" xpos 358 ypos -1537 } set N567ddb00 [stack 0] Shuffle { alpha white name Shuffle8 tile_color 0xffffffff label solidAlpha xpos 358 ypos -1348 } set N3e024400 [stack 0] Dot { name Dot15 xpos -1256 ypos -1347 } Dot { name Dot17 xpos -1256 ypos 1129 } set N59ef5860 [stack 0] Dot { name Dot19 xpos -1256 ypos 1271 } push $N567ddb00 push $N3e024400 Dot { name Dot9 xpos 383 ypos -870 } set N18f109b0 [stack 0] Remove { name Remove2 xpos 631 ypos -873 } set N36ff6dd0 [stack 0] push $N36ff6dd0 Shuffle { name Shuffle6 label rgba xpos 631 ypos -802 } set N21fd8bd0 [stack 0] Add { value 0.2 name AddCustom tile_color 0x191919ff label custom xpos 1140 ypos -807 } Shuffle { alpha white name Shuffle3 tile_color 0xffffffff label solidAlpha xpos 1140 ypos -744 } Dot { name Dot7 xpos 1168 ypos -605 } push $N36ff6dd0 Expression { channel0 rgb expr0 "(floor(x/64)+floor(y/64)) % 2 == 0 ? 0.1 : 0.5" channel1 none channel2 none name checkerBoard xpos 902 ypos -873 } Shuffle { alpha white name Shuffle7 tile_color 0xffffffff label solidAlpha xpos 902 ypos -839 } Dot { name Dot5 xpos 930 ypos -629 } push $N21fd8bd0 Add { channels rgba value {0.33 0.33 0.33 1} name Add tile_color 0x8e8e8eff label "grey: .33" xpos 631 ypos -755 } Dot { name Dot4 xpos 659 ypos -623 } push $N18f109b0 push $N18f109b0 push $N18f109b0 push $N18f109b0 Switch { inputs 8 which {{parent.mode}} name modeSwitch3 tile_color 0x262626ff xpos 364 ypos -480 } Dot { name Dot3 xpos 389 ypos -54 } set N4962a1a0 [stack 0] Shuffle { alpha white name Shuffle4 tile_color 0xffffffff label solidAlpha xpos -250 ypos -55 } Input { inputs 0 name matte label "\[value number]" xpos -427 ypos -275 number 1 } set N4ef04280 [stack 0] Invert { channels alpha name Invert1 xpos -534 ypos -200 disable {{modeSwitch01.which>3?1:0}} } push $N4ef04280 Switch { inputs 2 which {{parent.invertMatte}} name invertMatteSwitch tile_color 0x242424ff xpos -427 ypos -194 } Dot { name Dot14 xpos -399 ypos -133 } set N444b8130 [stack 0] Switch { inputs 2 which {{!parent.autoAlphaCheck.a}} name Switch1 tile_color 0x242424ff label autoInputCheck xpos -424 ypos -55 } Expression { channel0 alpha expr0 a<1?0:1 name Expression3 label checkCore xpos -424 ypos 10 disable {{parent.mode==7?0:1}} } push $N18f109b0 push $N18f109b0 push $N18f109b0 push $N18f109b0 push $N18f109b0 push $N18f109b0 Dot { name Dot10 xpos -970 ypos -870 } Remove { name Remove1 xpos -998 ypos -773 } Shuffle { name Shuffle5 label rgba xpos -998 ypos -709 } set N32555cc0 [stack 0] Add { value {0 0 1 1} name Add3 tile_color 0xffff xpos -899 ypos -648 } push $N32555cc0 Add { value {0 1 0 1} name Add2 tile_color 0xff00ff xpos -998 ypos -648 } push $N32555cc0 Add { value {1 0 0 1} name Add1 tile_color 0xff0000ff xpos -1107 ypos -647 } Switch { inputs 8 which {{parent.mode}} name modeSwitch01 tile_color 0x262626ff xpos -998 ypos -523 } Dot { name Dot2 xpos -973 ypos 74 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy8 xpos -424 ypos 73 } set N47636810 [stack 0] Dot { name Dot12 xpos -506 ypos 142 } Dot { name Dot18 note_font_size 50 xpos -506 ypos 800 } set N19a2bbc0 [stack 0] Dot { name Dot13 xpos -506 ypos 873 } ChannelMerge { inputs 2 name ChannelMerge1 xpos -196 ypos 863 disable {{"!\[regexp \"(fxT_matteQC)\" \[value this.parent.input.name] ?0:1]"}} } set N34d8a250 [stack 0] push $N59ef5860 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy2 xpos -196 ypos 1128 } push $N19a2bbc0 Shuffle { alpha white name Shuffle2 tile_color 0xffffffff label solidAlpha xpos 101 ypos 799 } push $N34d8a250 Switch { inputs 2 which {{!parent.keepAlpha}} name keepAlphaSwitch xpos 101 ypos 875 } push $N47636810 Premult { name Premult7 xpos -424 ypos 132 } Dot { name Dot1 xpos -399 ypos 412 } set N21f5d6d0 [stack 0] Dot { name Dot6 xpos -399 ypos 490 } set N3e0114c0 [stack 0] push $N4962a1a0 Dot { name Dot8 xpos 224 ypos 230 } set N4efa5a00 [stack 0] Merge2 { inputs 2 name Merge1 xpos 202 ypos 495 } set N8c7f26a0 [stack 0] push $N8c7f26a0 push $N8c7f26a0 push $N8c7f26a0 push $N3e0114c0 Dot { name Dot11 xpos -399 ypos 574 } push $N4efa5a00 Dot { name Dot16 xpos 127 ypos 230 } Merge2 { inputs 2 operation stencil name Merge2 xpos 102 ypos 579 } push $N21f5d6d0 push $N4962a1a0 Merge2 { inputs 2 mix {{parent.colorOpacity}} name Merge45 xpos 367 ypos 418 disable {{parent.disable}} } set N4b570570 [stack 0] push $N4b570570 push $N4b570570 Switch { inputs 8 which {{parent.mode}} name modeSwitch1 tile_color 0x262626ff xpos 358 ypos 677 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 367 ypos 871 } Switch { inputs 2 which {{parent.pipeAlpaThrough}} name pipeAlpaThroughSwitch xpos 367 ypos 1134 } CopyBBox { inputs 2 name CopyBBox1 xpos 367 ypos 1276 disable {{!parent.bbox}} } Output { name Output1 xpos 367 ypos 1486 } push $N444b8130 NoOp { name autoAlphaCheck xpos -540 ypos -122 addUserKnob {20 autoAlphaCheck} addUserKnob {6 a +STARTLINE} a {{"\[string first \".a\" \[channels \[input this 0]]]>-1"}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_SSMesh.gizmo ================================================ Group { name SSMesh tile_color 0x5c9e83ff label "Geo Output" addUserKnob {20 tab_general l General} addUserKnob {22 set_link l "link to selected camera" t "Click to link selected camera by expression. This tool will get the focal, haperture and world matrix from selected camera to generate" T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\n\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\ndefaultKnobs = \{\n\t\t\t'world matrix' : 'world_matrix',\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.focal'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.haperture'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.win_translate'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.win_scale'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.winroll'.format(CAMnode))\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']))\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']))\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']))\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']))\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window roll']))\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\n\nfor knob in thisGRP.knobs() :\n\tif mainKnobs.count(knob) != 0 :\n\t\t thisGRP\[knob].clearAnimated()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 cam_focal l "focal length" R 5 100} cam_focal 50 addUserKnob {7 cam_haperture l "horiz aperture" R 0.1 50} cam_haperture 24.576 addUserKnob {30 cam_win_translate l "window translate"} addUserKnob {30 cam_win_scale l "window scale"} cam_win_scale {1 1} addUserKnob {7 cam_winroll l "window roll" R -45 45} addUserKnob {41 world_matrix l "world matrix" T cam_data.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 spacer_5 l "" +STARTLINE T
} addUserKnob {26 title_basic l "BASIC SETTING"} addUserKnob {4 display l "3D display" t "How to draw in 3D preview. The viewer can override this setting." M {off wireframe soild solid+wireframe textured textured+wireframe "" "" ""}} display textured addUserKnob {4 data_type l "data type" t "data type\nUsing one of these data to convert into 3D mesh.\n\nPosition\nSupported world space or camera space position data.\n\nDepth (normalized far=0)\nNormalized depth data, which is same as depth data output by ScanlineRender.\n\nDeep / Depth (direct)\nRaw camera depth data. If using deep, need to convert DeepToImage first, and selected deep channel on 'channels' knob." M {"position (world space)" "position (camera space)" "depth (normalized far=0)" "deep / depth (direct)" "" "" ""}} data_type "depth (normalized far=0)" addUserKnob {41 channels t "Select which channel represented on selected data type." T shuffle_data.in} addUserKnob {6 unpm l unpremult t "3D data pass should be unpremult with alpha before process." -STARTLINE} unpm true addUserKnob {26 spacer_4 l "" +STARTLINE T
} addUserKnob {7 lod l "mesh LOD" t "Level of Details\n\nIf this value set to 1.0, subdivision of the mesh 1:1 to the data available in the resolution. Which mean 1 face of the mesh equal to 1 pixel.\n\nIf this value set to 1.0, it will slow down the render process.\n\nHighly recommend to use 0.1 - 0.5 if high resolution mesh details is not concern."} lod 0.1 addUserKnob {41 filter_size l "filter size" T DisplaceGeo.filter_size} addUserKnob {41 filter T DisplaceGeo.filter} addUserKnob {26 spacer_2 l "" +STARTLINE T
} addUserKnob {26 title_drange l "" +STARTLINE T "distance range"} addUserKnob {7 drange_near l near t "clip the mesh in the min value in terms of depth." R 0 10000} addUserKnob {7 drange_far l far t "clip the mesh in the max value in terms of depth." R 0 10000} drange_far 10000 addUserKnob {6 clip_color l "distance clip on color" t "Apply the distance clip on colored texture." +STARTLINE} clip_color true addUserKnob {26 spacer_3 l "" +STARTLINE T
} addUserKnob {26 title_export l EXPORT} addUserKnob {41 file t "only support *.abc file extension (alembric) ." T WriteGeo.file} addUserKnob {22 export_geo l "Export Geo" T "def exportGeo() :\n\twgeo = nuke.toNode('WriteGeo')\n\twgeo\['Execute'].execute()\n\nthisGRP = nuke.thisGroup()\nfilepath = thisGRP\['file'].getValue()\n\nif not len(filepath) :\n\tnuke.message('file path is empty. Process denied.')\nelif not filepath.split('.')\[-1:]\[0].lower() == 'abc' :\n\tif nuke.ask('File extension invalue. Only support render *.abc . Do you want this tool to fix it and process ?') :\n\t\tthisGRP\['file'].setValue( thisGRP\['file'].getValue() + '.abc' )\n\t\texportGeo()\nelse :\n\texportGeo()" +STARTLINE} addUserKnob {22 import_geo l "Import Geo" -STARTLINE T "prefx = nuke.toNode('preferences')\['GridWidth'].value()\nthisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\nroot = getLevel()\n\nwith root :\n\trgeo = nuke.nodes.ReadGeo2( file=thisGRP\['file'].getValue() )\n\trgeo.setXYpos( int( thisGRP\['xpos'].getValue() + prefx ) , int( thisGRP\['ypos'].getValue() ) )"} addUserKnob {20 tab_misc l Miscellaneous} addUserKnob {26 title_focus_region l "FOCUS REGION"} addUserKnob {41 use_focus_region l "use focus region" t "use focus region to generate SSMesh in specific area. Save resources and possible to work with high LOD mesh." T menu2.use_focus_region} addUserKnob {15 focus_region l "focus region" t "Set focus region in screen space. These values are 2D coordinate." +DISABLED} focus_region {0 0 1280 720} addUserKnob {26 spacer_1 l "" +STARTLINE T
} addUserKnob {3 fregion_ref_frame l "ref frame" t "set reference frame for tracking focus region. 'focus region' & 'define z' will apply on this reference frame and process the tracking." +DISABLED} fregion_ref_frame 1 addUserKnob {22 fregion_set_frame l "set current frame" t "set current frame for focus region reference frame." -STARTLINE +DISABLED T "nuke.thisGroup()\['fregion_ref_frame'].setValue( nuke.frame() )"} addUserKnob {12 sample_point l "sample position" t "Toggle 'sample z' in 2D to enable this 2D sample coordinate." +DISABLED} addUserKnob {22 sample_z_toggle l "sample z in 2D" t "'sample z' is only works for sample value purpose. After sample is done, must turn off sample function." -STARTLINE +DISABLED T "thisGRP = nuke.thisGroup()\nszstatus = thisGRP\['sample_z_status'].value()\n\nstatus = \['\[ OFF ]','\[ ON ]']\n\nif szstatus == status\[0] :\n\tthisGRP\['sample_z_status'].setValue( status\[1] )\n\tthisGRP\['sample_point'].setEnabled(True)\n\tthisGRP\['updateUI'].setValue(\"goStore = nuke.toNode(\\'store\\')\\ngoStore\[\\'fn\\'].execute()\\nsample2d()\")\nelse :\n\tthisGRP\['sample_z_status'].setValue( status\[0] )\n\tthisGRP\['sample_point'].setEnabled(False)\n\tthisGRP\['updateUI'].setValue('')"} addUserKnob {26 sample_z_status l "" -STARTLINE +DISABLED T "\[ OFF ]"} addUserKnob {7 fregion_define_z l "define z" t "Define the z value on reference frame. Can use 'sample z in 2D' to get this value." +DISABLED R 0 10000} addUserKnob {22 track_focus_region l "\[ track focus region ]" t "Use the set focus region on reference frame to track with camera in 3D space.\n\n* project setting need to be same as image resolution to get the correct result." +DISABLED T "rootST = int( nuke.root()\['first_frame'].getValue() )\nrootED = int( nuke.root()\['last_frame'].getValue() )\n\ngetFrame = nuke.getFramesAndViews( 'frame range', str( rootST ) + '-' + str( rootED ) )\n\ntry :\n\tframeST = int( getFrame\[0].replace( ' ' , '' ).split('-')\[0] )\n\tframeED = int( getFrame\[0].replace( ' ' , '' ).split('-')\[1] )\n\n\tthisGRP = nuke.thisGroup()\n\trefframe = int( thisGRP\['fregion_ref_frame'].getValue() )\n\tcam = nuke.toNode('cam_data')\n\tpt1 = nuke.toNode('left_pt')\['translate'].getValue()\n\tpt2 = nuke.toNode('right_pt')\['translate'].getValue()\n\n\tct_hack = nuke.nodes.CurveTool()\n\n\twith nuke.root() :\n\n\t\tif frameED - frameST != 0 :\n\t\t\tthisGRP\['focus_region'].clearAnimated()\n\t\t\ttempbuffer1 = thisGRP\['focus_region'].getValue()\n\t\t\tthisGRP\['focus_region'].setAnimated()\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[0] , refframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[1] , refframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[2] , refframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[3] , refframe , 3 )\n\n\t\tfor trackframe in range( frameST, frameED+1 , 1 ) :\n\t\t\tnuke.execute( ct_hack, trackframe, trackframe )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[0] , trackframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[1] , trackframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[0] , trackframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[1] , trackframe , 3 )\n\n\tnuke.delete( ct_hack )\nexcept :\n pass" +STARTLINE} addUserKnob {26 spacer_6 l "" +STARTLINE T
} addUserKnob {20 grp_crop_preview l "3D crop preview" +DISABLED n 1} grp_crop_preview 0 addUserKnob {6 show_crop l "show crop point" t "It will show 2 spheres for the crop in 3D space. They set in the place which is where you set the focus region in screen space and defined by z." +DISABLED +STARTLINE} addUserKnob {7 crop_point_scale l scale t "Scale the preview crop points (spheres)." +DISABLED} crop_point_scale 0.3 addUserKnob {18 crop_point_color l color t "change color of the crop points (spheres)." +DISABLED} crop_point_color 1 addUserKnob {6 crop_point_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup n -1} addUserKnob {26 spacer l "" +STARTLINE T
} addUserKnob {26 title_uv l UV} addUserKnob {41 uv_stabilize l "uv stabilize" t "Turn this on if you need to stabilize in UV space. During UV stabilize on, the geo will not be animated. Set reference frame under 'mesh ref frame'." T menu1.uv_stabilize} addUserKnob {3 uv_ref_frame l "mesh ref frame" t "Select the frame number that will have identity geo shaped for UV texturing." +DISABLED} uv_ref_frame 1001 addUserKnob {22 uv_set_frame l "set current frame" -STARTLINE +DISABLED T "nuke.thisGroup()\['uv_ref_frame'].setValue( nuke.frame() )"} addUserKnob {6 black_outside l "black outside" t "black outside the UV texture." +DISABLED +STARTLINE} black_outside true addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.3} addUserKnob {26 l_DATE l "Date Modified" T 2019-11-08} addUserKnob {26 l_CHANGELOG l Changelog T "1.3\n- camera window supported\n- anamophic project supported\n- fix the conflict of 'force region' and 'UV stabilize'.\n can use both at the same time now.\n\n1.2\n- removed unuse camera link knobs\n- added focus region, so mesh can be\n form in specific area/object to save\n resources for higher LOD\n\n1.1\n- fix the missing line on 'Export Geo' \n button\n\n1.0\n- create mesh/geo in screen space\n using position/depth/deep data"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "don't touch" note_font_size 32 xpos -1142 ypos -169 bdwidth 202 bdheight 478 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x4c4c4cff label bin note_font_size 32 xpos -899 ypos -170 bdwidth 200 bdheight 280 } Input { inputs 0 name img xpos -100 ypos -184 } Dot { name img_dot xpos -66 ypos -83 } set N3835a2e0 [stack 0] Dot { name Dot3 xpos 758 ypos -83 } set N38bec0c0 [stack 0] Shuffle { in depth in2 alpha alpha red2 name shuffle_data label "\[value in]" xpos 724 ypos -32 } Unpremult { name Unpremult_data xpos 724 ypos 62 disable {{!parent.unpm}} } Dot { name Dot5 xpos 758 ypos 700 } set N38c0a4d0 [stack 0] Dot { name Dot6 xpos 928 ypos 700 } set N38c0f430 [stack 0] Dot { name Dot7 xpos 1106 ypos 700 } set N38c14460 [stack 0] Dot { name Dot8 xpos 1260 ypos 700 } Expression { temp_name0 dvalue temp_expr0 red temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression9 xpos 1226 ypos 774 } Dot { name Dot16 xpos 1260 ypos 889 } push $N38c14460 Expression { temp_name0 dvalue temp_expr0 "1 / red" temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression6 xpos 1072 ypos 774 } Dot { name Dot17 xpos 1106 ypos 863 } push $N38c0f430 Expression { expr2 -blue name Expression7 label "fix z" xpos 894 ypos 774 } Dot { name Dot18 xpos 928 ypos 876 } push $N38c0a4d0 Expression { temp_name0 nx temp_expr0 "red - cam_data.world_matrix.3" temp_name1 ny temp_expr1 "green - cam_data.world_matrix.7" temp_name2 nz temp_expr2 "blue - cam_data.world_matrix.11" expr0 "nx * \[value inverseMatrix.invMatrix.0] + ny * \[value inverseMatrix.invMatrix.1] + nz * \[value inverseMatrix.invMatrix.2]" expr1 "nx * \[value inverseMatrix.invMatrix.3] + ny * \[value inverseMatrix.invMatrix.4] + nz * \[value inverseMatrix.invMatrix.5]" expr2 "nx * \[value inverseMatrix.invMatrix.6] + ny * \[value inverseMatrix.invMatrix.7] + nz * \[value inverseMatrix.invMatrix.8]" name Expression3 label "position invert" xpos 724 ypos 774 } Switch { inputs 4 which {{parent.data_type}} name Switch1 xpos 724 ypos 984 } Dot { name Dot13 xpos 758 ypos 1113 } set N38b56b50 [stack 0] Dot { name sam_dot xpos 551 ypos 1113 } NoOp { inputs 0 name menu1 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['uv_stabilize'].getValue() == 1 :\n thisGRP\['uv_ref_frame'].setEnabled(True)\n thisGRP\['uv_set_frame'].setEnabled(True)\n thisGRP\['black_outside'].setEnabled(True)\nelse :\n thisGRP\['uv_ref_frame'].setEnabled(False)\n thisGRP\['uv_set_frame'].setEnabled(False)\n thisGRP\['black_outside'].setEnabled(False)\n" xpos -1085 ypos -42 addUserKnob {20 User} addUserKnob {6 uv_stabilize l "uv stabilize" +STARTLINE} } NoOp { inputs 0 name menu2 onCreate "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nthisGRP\[fregion_knobs\[4]].setEnabled(True)\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n else :\n thisGRP\[i].setEnabled(False)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" knobChanged "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" xpos -1085 ypos 25 addUserKnob {20 User} addUserKnob {6 use_focus_region l "use focus region" +STARTLINE} } Camera { inputs 0 display off selectable false useMatrix true focal {{parent.cam_focal}} haperture {{cam_haperture}} name cam_data xpos -335 ypos 2204 } push $N38b56b50 Expression { temp_name0 unpremultA temp_expr0 "alpha * ( 1 / alpha )" temp_name1 max temp_expr1 blue expr3 "abs( max ) < \[value parent.drange_near] || abs( max ) > \[value parent.drange_far] ? 0 : isnan(unpremultA) ? 0 : unpremultA" name Expression1 label "distance crop" xpos 724 ypos 1244 } Premult { name Premult1 xpos 724 ypos 1332 } Dot { name Dot9 xpos 758 ypos 1640 } set N38b951c0 [stack 0] push $N3835a2e0 Dot { name Dot10 xpos -66 ypos 1552 } set N38b9a030 [stack 0] Unpremult { name Unpremult1 xpos 48 ypos 1549 } Merge2 { inputs 2 operation mask name Merge2 xpos 48 ypos 1637 } Premult { name Premult3 xpos 48 ypos 1719 } push $N38b9a030 Switch { inputs 2 which {{parent.clip_color}} name Switch2 xpos -100 ypos 1828 } Project3D2 { inputs 2 crop {{parent.black_outside}} name Project3D2 xpos -100 ypos 2224 } push $N38bec0c0 Dot { name Dot2 xpos 1576 ypos -84 } Shuffle { red black green black blue black alpha black name Shuffle1 label "\[value in]" xpos 1542 ypos 30 } Remove { name Remove1 xpos 1542 ypos 118 } Reformat { type scale black_outside true name Reformat1 xpos 1542 ypos 212 } Expression { temp_name0 xpos temp_expr0 "( ( x + 0.5 ) / input.width - 0.5) * \[value global_math.hratio] * abs( \[value parent.drange_far] )" temp_name1 ypos temp_expr1 "( ( y + 0.5 ) / input.height -0.5 ) * ( \[value global_math.hratio] * abs( \[value parent.drange_far] ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name2 zpos temp_expr2 "-\[value parent.drange_far]" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression8 xpos 1542 ypos 845 } ColorMatrix { matrix { {{cam_data.world_matrix.0} {cam_data.world_matrix.1} {cam_data.world_matrix.2}} {{cam_data.world_matrix.4} {cam_data.world_matrix.5} {cam_data.world_matrix.6}} {{cam_data.world_matrix.8} {cam_data.world_matrix.9} {cam_data.world_matrix.10}} } name ColorMatrix1 xpos 1542 ypos 970 } Add { channels rgb value {{cam_data.world_matrix.3} {cam_data.world_matrix.7} {cam_data.world_matrix.11} 0} name Add1 xpos 1542 ypos 1052 } Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop1 xpos 1542 ypos 1476 disable {{!parent.use_focus_region}} addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Dot { name Dot4 xpos 1576 ypos 2402 } push $N38b951c0 Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop4 selected true xpos 724 ypos 1714 disable {{!parent.use_focus_region}} addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Unpremult { name Unpremult3 xpos 724 ypos 1851 } Expression { temp_name0 nx temp_expr0 red temp_name1 ny temp_expr1 green temp_name2 nz temp_expr2 blue expr0 "( nx * \[value cam_data.world_matrix.0] + ny * \[value cam_data.world_matrix.1] + nz * \[value cam_data.world_matrix.2] ) + \[value cam_data.world_matrix.3]" expr1 "( nx * \[value cam_data.world_matrix.4] + ny * \[value cam_data.world_matrix.5] + nz * \[value cam_data.world_matrix.6] ) + \[value cam_data.world_matrix.7]" expr2 "( nx * \[value cam_data.world_matrix.8] + ny * \[value cam_data.world_matrix.9] + nz * \[value cam_data.world_matrix.10] ) + \[value cam_data.world_matrix.11]" name Expression4 label "position revert" xpos 724 ypos 1933 } Premult { name Premult2 xpos 724 ypos 2027 } Merge2 { inputs 2 operation under name Merge1 xpos 724 ypos 2398 } Card { inputs 0 image_aspect false rows {{"img_dot.height * parent.lod"}} columns {{"img_dot.width * parent.lod"}} name ssmesh xpos 343 ypos 2317 } DisplaceGeo { inputs 2 source "rgb absolute" scale 1 filter_size 1 name DisplaceGeo xpos 343 ypos 2399 } FrameHold { firstFrame {{parent.uv_ref_frame}} name FrameHold xpos 343 ypos 2479 disable {{!parent.uv_stabilize}} } ApplyMaterial { inputs 2 name ApplyMaterial1 xpos -100 ypos 2483 } Scene { display {{parent.display}} name gl_scene xpos -90 ypos 3072 } set N387e4310 [stack 0] WriteGeo { file_type abc name WriteGeo xpos 120 ypos 3093 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt2.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name right_pt xpos -600 ypos 3218 } CheckerBoard2 { inputs 0 format "256 256 0 0 256 256 1 square_256" name CheckerBoard1 xpos -789 ypos 2694 } Multiply { channels rgb value {{parent.crop_point_color.r} {parent.crop_point_color.g} {parent.crop_point_color.b} 1} name Multiply xpos -789 ypos 2822 } Clamp { channels rgba name Clamp1 xpos -789 ypos 2905 } Sphere { selectable false cast_shadow false receive_shadow false rows 10 columns 10 uniform_scale {{parent.crop_point_scale}} name Sphere1 xpos -789 ypos 2987 disable {{!show_crop}} } Dot { name Dot24 xpos -755 ypos 3065 } set N388567f0 [stack 0] Dot { name Dot25 xpos -456 ypos 3065 } TransformGeo { inputs 2 selectable false name TransformGeo2 xpos -490 ypos 3238 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt1.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name left_pt xpos -899 ypos 3220 } push $N388567f0 TransformGeo { inputs 2 selectable false name TransformGeo1 xpos -789 ypos 3240 } Scene { inputs 2 selectable false name Scene1 xpos -480 ypos 3395 } ApplyMaterial { display off selectable false render_mode off name material_switch xpos -490 ypos 3523 } push $N387e4310 Scene { inputs 2 name Scene2 xpos -90 ypos 3502 } Output { name Output1 xpos -100 ypos 4030 } Group { inputs 0 name inverseMatrix tile_color 0x337f4cff xpos 576 ypos 780 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path cam_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2011-11-28} addUserKnob {26 l_CHANGELOG l Changelog T "v1.0\n- reveal the calculate output of \n inverse matrix which is c44matrix\n and colormatrix doesn't show\n "} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group Camera { inputs 0 rotate {0 0 {-parent.cam_winroll}} win_translate {{parent.cam_win_translate} {parent.cam_win_translate}} win_scale {{parent.cam_win_scale} {parent.cam_win_scale}} name fb_data xpos -340 ypos 2087 } NoOp { inputs 0 name store xpos -843 ypos 28 addUserKnob {20 User} addUserKnob {22 fn T "### level define ###\n\ndef getLevel() :\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\tggLevel = nuke.root()\n\telse :\n\t\tnodePath = nuke.thisNode().fullName().split('.')\n\t\tnodePath.pop()\n\t\tggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\n### sample z in 2D ###\n\ndef sample2d() :\n\tthisGRP = nuke.thisGroup()\n\tif thisGRP\['sample_z_status'].value() == '\[ ON ]' :\n\t\tsam_co = thisGRP\['sample_point'].getValue()\n\t\tzdata = nuke.toNode('sam_dot').sample('blue', sam_co\[0], sam_co\[1]) * -1\n\t\tthisGRP\['fregion_define_z'].setValue( zdata )" +STARTLINE} addUserKnob {15 fregion} fregion {{parent.focus_region} {parent.focus_region} {parent.focus_region} {parent.focus_region}} } NoOp { inputs 0 name global_math xpos -842 ypos -43 addUserKnob {20 User} addUserKnob {7 hratio} hratio {{"cam_data.haperture / cam_data.focal"}} addUserKnob {7 maxwidth} maxwidth {{"hratio * parent.fregion_define_z"}} addUserKnob {7 maxheight} maxheight {{"hratio * parent.fregion_define_z * ( img_dot.height / img_dot.width )"}} addUserKnob {13 pt1} pt1 {{"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + \n( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} addUserKnob {13 pt2} pt2 {{"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_STMapToVector2.gizmo ================================================ Group { name STMapToVector2_ help "Transforms a distorted UV Map to Motion Vectors corresponding to the distortion." addUserKnob {20 UV_to_Vectors l "STMap to Vector2"} addUserKnob {41 in l UV_Layer t "Select the layer containing your UV_map" T UV_Channel.in} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name Input xpos -291 ypos -63 } set Na0950a0 [stack 0] Shuffle { name UV_Channel xpos -151 ypos -17 } Expression { expr0 -x+r*width-0.5 expr1 -y+g*height-0.5 channel2 {-rgba.red -rgba.green -rgba.blue none} channel3 {none none none -rgba.alpha} name UV_to_Vectors1 xpos -151 ypos 97 } push $Na0950a0 ShuffleCopy { inputs 2 in2 none red red green green alpha black out {{{parent.UV_Channel.in}}} name ShuffleCopy1 xpos -291 ypos 97 } Output { name Output1 xpos -291 ypos 167 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_STmapInverse.gizmo ================================================ Group { name STMapInverse tile_color 0x196654ff selected true addUserKnob {20 InverseSTMap} addUserKnob {41 in l channels T Shuffle1.in} addUserKnob {41 in2 l "UV channels" T Shuffle1.in2} addUserKnob {41 box_width l "UV size" T Reformat1.box_width} addUserKnob {6 fill_gap l "Fill Gap" +STARTLINE} fill_gap true addUserKnob {41 size -STARTLINE T Blur1.size} addUserKnob {26 ""} addUserKnob {41 detail l "point detail" T PositionToPoints1.detail} addUserKnob {41 pointSize l "point size" T PositionToPoints1.pointSize} addUserKnob {26 ""} addUserKnob {32 Lookin T "start http://www.lookinvfx.com/tools/" +STARTLINE} addUserKnob {26 text l "" -STARTLINE T " in_inverseSTMap v1.0 | Luca Mignardi | 2014"} } Camera2 { inputs 0 translate {0.5 0.5 1} projection_mode orthographic focal 25 haperture 25 vaperture 25 near 0.5 far 1.5 name Camera1 xpos 93 ypos 157 } Input { inputs 0 name Input1 xpos -58 ypos -118 } Shuffle { in2 forward red red2 green green2 black red white green red2 blue green2 alpha out forward out2 rgba name Shuffle1 xpos -58 ypos -64 } Unpremult { name Unpremult2 xpos -58 ypos -12 } Unpremult { channels forward name Unpremult3 xpos -58 ypos 37 } set N1e54a7c0 [stack 0] push $N1e54a7c0 Shuffle { in forward blue black alpha black name Shuffle2 label "\[value in]" xpos 64 ypos 37 } PositionToPoints { inputs 2 render_mode textured detail 1 pointSize 10 name PositionToPoints1 xpos -58 ypos 108 } set N1e55bbf0 [stack 0] Reformat { inputs 0 type "to box" format "1024 1024 0 0 1024 1024 1 square_1K" box_width 1024 box_height {{box_width i}} box_fixed true name Reformat1 selected true xpos -196 ypos 177 } ScanlineRender { inputs 3 max_tessellation 1 motion_vectors_type off MB_channel none name ScanlineRender1 xpos -58 ypos 177 } Premult { name Premult1 xpos -58 ypos 220 } Dot { name Dot1 xpos -24 ypos 276 } set N1e601350 [stack 0] Blur { size 1.6 name Blur1 xpos 49 ypos 266 } Unpremult { name Unpremult1 xpos 49 ypos 316 } push $N1e601350 Merge2 { inputs 2 operation under name Merge1 xpos -58 ypos 316 disable {{1-fill_gap}} } set N1e616fd0 [stack 0] Output { name Output1 xpos -58 ypos 375 } push $N1e616fd0 push $N1e55bbf0 end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ScaleMatrix4.gizmo ================================================ Group { name ScaleMatrix4_ help "Scale a matrix4 using a control channel (rgb from vector input) for which each channel is considered as a scalar for x, y and z" addUserKnob {20 ScaleMatrix4} addUserKnob {26 Description l "" +STARTLINE T "Scale a matrix4 using a control channel (rgb) for which each channel is considered as a scalar for x, y and z"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vector xpos 491 ypos 162 number 1 } Dot { name Dot1 xpos 525 ypos 252 } Input { inputs 0 name matrix xpos 344 ypos 161 } add_layer {matrix0 matrix0.0 matrix0.1 matrix0.2 matrix0.3} add_layer {matrix1 matrix1.0 matrix1.1 matrix1.2 matrix1.3} add_layer {matrix2 matrix2.0 matrix2.1 matrix2.2 matrix2.3} MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 matrix0.0*Ar channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 matrix1.1*Ag channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 matrix2.2*Ab channel3 none name MergeExpression1 xpos 344 ypos 249 } Output { name Output1 xpos 344 ypos 349 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_SceneDepthCalculator.gizmo ================================================ Group { inputs 0 name SceneDepthCalculator tile_color 0xd6ff32ff selected true addUserKnob {20 General} addUserKnob {26 title_cam_1 l camera} addUserKnob {22 set_link_cam l "link to selected camera" T "goStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\nknobLS = \['world_matrix_cam']\nsetLink( knobLS )" +STARTLINE} addUserKnob {22 remove_link_cam l "remove linked camera expression" -STARTLINE T "nuke.thisGroup()\['world_matrix_cam'].clearAnimated()"} addUserKnob {20 title_cam l "world matrix" n 1} title_cam 0 addUserKnob {41 world_matrix_cam l "" -STARTLINE T camData.matrix} addUserKnob {20 endGroup n -1} addUserKnob {26 title_target_1 l target} addUserKnob {22 set_link_tgt l "link to selected target" T "goStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\nknobLS = \['world_matrix_tgt']\nsetLink( knobLS )" +STARTLINE} addUserKnob {22 remove_link_tgt l "remove linked target expression" -STARTLINE T "nuke.thisGroup()\['world_matrix_tgt'].clearAnimated()"} addUserKnob {20 title_target l "world matrix" n 1} title_target 0 addUserKnob {41 world_matrix_tgt l "" -STARTLINE T axData.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {41 depth T math.depth} addUserKnob {41 lock l lock/unlock -STARTLINE T math.lock} addUserKnob {7 offset R -100 100} addUserKnob {7 result l "result"} result {{"invert_depth ? 1/(depth+offset) : (depth+offset)"}} addUserKnob {6 invert_depth l 1/z -STARTLINE} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 2.0} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-25} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"2.0
- changed camera & target to use world matrix instead
- instant live result of depth value
- re-work the interface\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode2 tile_color 0xaaaaaa00 label bin note_font_size 42 xpos -474 ypos 425 bdwidth 192 bdheight 166 } Group { inputs 0 name iMatrix44 tile_color 0x337f4cff xpos -246 ypos 562 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path camData.world_matrix addUserKnob {26 ""} addUserKnob {41 id T assignID.matrix} addUserKnob {26 ""} addUserKnob {20 grp_math l math n 1} grp_math 0 addUserKnob {7 m l determinant} m {{"\[value \[value knob_path].\[value id.0]] * \n(\n\[value \[value knob_path].\[value id.5]] * \n(( \[value \[value knob_path].\[value id.10]] * \[value \[value knob_path].\[value id.15]] )\n-\n( \[value \[value knob_path].\[value id.11]] * \[value \[value knob_path].\[value id.14]] ))\n-\n\[value \[value knob_path].\[value id.6]] * \n(( \[value \[value knob_path].\[value id.9]] * \[value \[value knob_path].\[value id.15]] )\n-\n( \[value \[value knob_path].\[value id.11]] * \[value \[value knob_path].\[value id.13]] ))\n+\n\[value \[value knob_path].\[value id.7]] * \n(( \[value \[value knob_path].\[value id.9]] * \[value \[value knob_path].\[value id.14]] )\n-\n( \[value \[value knob_path].\[value id.10]] * \[value \[value knob_path].\[value id.13]] ))\n)\n\n-\n\n\[value \[value knob_path].\[value id.1]] * \n(\n\[value \[value knob_path].\[value id.4]] * \n(( \[value \[value knob_path].\[value id.10]] * \[value \[value knob_path].\[value id.15]] )\n-\n( \[value \[value knob_path].\[value id.11]] * \[value \[value knob_path].\[value id.14]] ))\n-\n\[value \[value knob_path].\[value id.6]] * \n(( \[value \[value knob_path].\[value id.8]] * \[value \[value knob_path].\[value id.15]] )\n-\n( \[value \[value knob_path].\[value id.11]] * \[value \[value knob_path].\[value id.12]] ))\n+\n\[value \[value knob_path].\[value id.7]] * \n(( \[value \[value knob_path].\[value id.8]] * \[value \[value knob_path].\[value id.14]] )\n-\n( \[value \[value knob_path].\[value id.10]] * \[value \[value knob_path].\[value id.12]] ))\n)\n\n+\n\n\[value \[value knob_path].\[value id.2]] * \n(\n\[value \[value knob_path].\[value id.4]] * \n(( \[value \[value knob_path].\[value id.9]] * \[value \[value knob_path].\[value id.15]] )\n-\n( \[value \[value knob_path].\[value id.11]] * \[value \[value knob_path].\[value id.13]] ))\n-\n\[value \[value knob_path].\[value id.5]] * \n(( \[value \[value knob_path].\[value id.8]] * \[value \[value knob_path].\[value id.15]] )\n-\n( \[value \[value knob_path].\[value id.11]] * \[value \[value knob_path].\[value id.12]] ))\n+\n\[value \[value knob_path].\[value id.7]] * \n(( \[value \[value knob_path].\[value id.8]] * \[value \[value knob_path].\[value id.13]] )\n-\n( \[value \[value knob_path].\[value id.9]] * \[value \[value knob_path].\[value id.12]] ))\n)\n\n-\n\n\[value \[value knob_path].\[value id.3]] * \n(\n\[value \[value knob_path].\[value id.4]] * \n(( \[value \[value knob_path].\[value id.9]] * \[value \[value knob_path].\[value id.14]] )\n-\n( \[value \[value knob_path].\[value id.10]] * \[value \[value knob_path].\[value id.13]] ))\n-\n\[value \[value knob_path].\[value id.5]] * \n(( \[value \[value knob_path].\[value id.8]] * \[value \[value knob_path].\[value id.14]] )\n-\n( \[value \[value knob_path].\[value id.10]] * \[value \[value knob_path].\[value id.12]] ))\n+\n\[value \[value knob_path].\[value id.6]] * \n(( \[value \[value knob_path].\[value id.8]] * \[value \[value knob_path].\[value id.13]] )\n-\n( \[value \[value knob_path].\[value id.9]] * \[value \[value knob_path].\[value id.12]] ))\n)"}} addUserKnob {41 a l cofactor T co.matrix} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {41 iMatrix T result.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2021-02-24} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"live inverse matrix
iMatrix33
iMatrix44\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2 3} {4 5 6 7} {8 9 10 11} {12 13 14 15} } name assignID xpos -150 ypos -255 } Matrix { inputs 0 matrix { {{"pow(-1,0+0) * (\n+\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.13]]\n+\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.14]]\n-\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,0+1) * (\n+\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,0+2) * (\n+\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,0+3) * (\n+\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.14]]\n+\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.14]]\n-\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.13]]\n)"}} {{"pow(-1,1+0) * (\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.13]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.14]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,1+1) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,1+2) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,1+3) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.14]]\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.9]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.14]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.10]]*\[value \[value knob_path].\[value id.13]]\n)"}} {{"pow(-1,2+0) * (\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.13]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.14]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.11]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,2+1) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,2+2) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.15]]\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.15]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.14]]\n)"} {"pow(-1,2+3) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.14]]\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.12]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.13]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.12]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.14]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.13]]\n)"}} {{"pow(-1,3+0) * (\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.11]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.9]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.10]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.9]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.11]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.10]]\n)"} {"pow(-1,3+1) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.11]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.8]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.10]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.8]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.11]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.10]]\n)"} {"pow(-1,3+2) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.11]]\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.8]]\n+\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.9]]\n-\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.8]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.11]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.9]]\n)"} {"pow(-1,3+3) * (\n+\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.10]]\n+\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.8]]\n+\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.9]]\n-\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.8]]\n-\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.10]]\n-\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.9]]\n)"}} } name co xpos -44 ypos -255 } Matrix { inputs 0 matrix { {{"a.0==0 || m==0 ? 0 : a.0/m"} {"a.4==0 || m==0 ? 0 : a.4/m"} {"a.8==0 || m==0 ? 0 : a.8/m"} {"a.12==0 || m==0 ? 0 : a.12/m"}} {{"a.1==0 || m==0 ? 0 : a.1/m"} {"a.5==0 || m==0 ? 0 : a.5/m"} {"a.9==0 || m==0 ? 0 : a.9/m"} {"a.13==0 || m==0 ? 0 : a.13/m"}} {{"a.2==0 || m==0 ? 0 : a.2/m"} {"a.6==0 || m==0 ? 0 : a.6/m"} {"a.10==0 || m==0 ? 0 : a.10/m"} {"a.14==0 || m==0 ? 0 : a.14/m"}} {{"a.3==0 || m==0 ? 0 : a.3/m"} {"a.7==0 || m==0 ? 0 : a.7/m"} {"a.11==0 || m==0 ? 0 : a.11/m"} {"a.15==0 || m==0 ? 0 : a.15/m"}} } name result xpos 56 ypos -254 } end_group NoOp { inputs 0 name store xpos -411 ypos 512 addUserKnob {20 User} addUserKnob {22 fn T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\n##########\n\ndef setLink( _knobLS ) :\n\troot = getLevel()\n\tthisGRP = nuke.thisGroup()\n\n\tmainKnobs = _knobLS\n\tdefaultKnobs = \{\n\t\t\t\t'world matrix' : 'world_matrix',\n\t\t\t\t\}\n\tselNodeKnobs = \[]\n\tmissingKnob = \[]\n\n\ttry :\n\t\twith root :\n\t\t\tselNode = nuke.selectedNode()\n\n\t\tfor knob in selNode.knobs() :\n\t\t\tselNodeKnobs.append( knob )\n\n\t\tselNodeKnobs.sort()\n\n\t\tfor key,value in defaultKnobs.items() :\n\t\t\tif value not in selNodeKnobs :\n\t\t\t\tmissingKnob.append( key )\n\n\t\tif not len(missingKnob) :\n\t\t\twith root :\n\t\t\t\tfor knob in mainKnobs :\n\t\t\t\t\tthisGRP\[knob].clearAnimated()\n\t\t\t\t\t\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\t\telse :\n\t\t\tp = nuke.Panel('Select knobs :')\n\t\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\t\tfor rk in missingKnob :\n\t\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\t\tif p.show() :\n\t\t\t\ttry :\n\t\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\t\texcept :\n\t\t\t\t\tpass\n\n\t\t\t\twith root :\n\t\t\t\t\tfor knob in mainKnobs :\n\t\t\t\t\t\tthisGRP\[knob].clearAnimated()\n\t\t\t\t\t\n\t\t\t\t\tCAMnode = selNode.name()\n\t\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\n\texcept :\n\t\tnuke.message('no node selected.')" +STARTLINE} } NoOp { inputs 0 name math xpos -126 ypos 564 addUserKnob {20 User} addUserKnob {22 lock l lock/unlock T "nuke.thisNode()\['depth'].setEnabled( not nuke.thisNode()\['depth'].enabled() )" +STARTLINE} addUserKnob {7 depth +DISABLED R 0 100} depth {{"-( axData.matrix.3 * iMatrix44.iMatrix.8 + axData.matrix.7 * iMatrix44.iMatrix.9 + axData.matrix.11 * iMatrix44.iMatrix.10 + iMatrix44.iMatrix.11 )"}} } Camera { inputs 0 display off selectable false useMatrix true name camData xpos -237 ypos 446 } Axis { inputs 0 display off selectable false useMatrix true name axData xpos -113 ypos 447 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ShadowMult.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { name ShadowMult tile_color 0x5c7fc0ff note_font "Bitstream Vera Sans Bold Bold" note_font_color 0xffffffff selected true addUserKnob {20 ShadowMult} addUserKnob {41 inputShadowChannel l "Shadow Channel" T ShuffleInputShadow.in} addUserKnob {26 text l "" +STARTLINE T " "} addUserKnob {41 multiply T Grade.multiply} addUserKnob {41 gamma T Grade.gamma} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge20.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge20.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge20.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge20.fringe} addUserKnob {41 mix T Merge20.mix} } Input { inputs 0 name Inputmask xpos 223 ypos -145 number 2 } Input { inputs 0 name InputshadowMatte xpos 377 ypos -447 number 1 } Shuffle { name ShuffleInputShadow label "\[value in]" xpos 377 ypos -398 } Grade { reverse true name Grade xpos 377 ypos -348 } Dot { name Dot294 note_font_size 41 xpos 411 ypos -287 } set N28220bf0 [stack 0] Dot { name Dot296 note_font_size 41 xpos 411 ypos -249 } set N28224ad0 [stack 0] Dot { name Dot297 note_font_size 41 xpos 411 ypos -211 } Shuffle { red blue green blue alpha blue name ShuffleBlue tile_color 0x3d3f8e00 xpos 233 ypos -215 } push $N28224ad0 Shuffle { red green blue green alpha green name ShuffleGreen tile_color 0x3f633800 xpos 231 ypos -253 } push $N28220bf0 Shuffle { green red blue red alpha red name ShuffleRed tile_color 0x93000000 xpos 233 ypos -291 } Input { inputs 0 name Inputimg xpos -35 ypos -443 } Dot { name Dot299 note_font_size 41 xpos -1 ypos -359 } set N28258920 [stack 0] Dot { name Dot295 note_font_size 41 xpos 128 ypos -359 } Multiply { inputs 1+1 channels rgba value {0 1 1 1} name MultiplyRed label "\[value value]" xpos 94 ypos -297 } Multiply { inputs 1+1 channels rgba value {1 0 1 1} name MultiplyGreen label "\[value value]" xpos 94 ypos -259 } Multiply { inputs 1+1 channels rgba value {1 1 0 1} name MultiplyBlue label "\[value value]" xpos 94 ypos -221 } push $N28258920 Dot { name Dot298 note_font_size 41 xpos -1 ypos -141 } Merge2 { inputs 2+1 operation copy name Merge20 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 94 ypos -145 } Output { name Output1 xpos 94 ypos -45 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_SimpleSSS.gizmo ================================================ Group { name SimpleSSS tile_color 0xff5155ff selected true addUserKnob {20 User} addUserKnob {26 infoLabel l " " T "Simple Subsurface Scattering / Translucency\nby Hagbarth 2020"} addUserKnob {26 didiver_general l "General"} addUserKnob {6 ScatterColor_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} ScatterColor_panelDropped true addUserKnob {4 method l Method t "First Backface will calculate the distance from the front facing surface to the first backfacing surface.\n\nFull Backface will calculate the distance from the front facing surface to the surface furthest away from the camera" M {"First Backface" "Full Backface" "" ""}} addUserKnob {7 scene_scale l "Scene Scale" t "The size of the scene where the object is or the width (in nuke units) of the object." -STARTLINE R 0 1000} scene_scale 10 addUserKnob {26 divider_scatter l "Scattering"} addUserKnob {7 diffusion l "Scatter Diffusion" t "How much blur to be applied to the depth map."} diffusion 0.25 addUserKnob {7 scattering l "Scatter Depth" t "How deep should the translucency be visible."} scattering 0.4 addUserKnob {18 scatter_color l "Scatter Color" t "The color of the translucency"} scatter_color {1 0.5 0.4} addUserKnob {6 scatter_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} scatter_color_panelDropped true addUserKnob {6 color_rgb_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} color_rgb_panelDropped true addUserKnob {26 dividerr_light l "Light"} addUserKnob {6 scenecolor l "Use Scene Color" t "If enabled the tool will use the color and light intensity from the scene itself.\nIf disabled it will use a constant white (1.0) across the object." +STARTLINE} addUserKnob {6 normalize l "Normalize Scene Light" t "If enabled the scene color will be \"normalized\" so that the intensity is evenly distributed across the object." -STARTLINE} addUserKnob {41 white l "Light Gain" t "This will let you control the gain of the light" T GrainAndGamma.white} addUserKnob {41 gamma l "Light Gamma" t "This will let you control the gamma of the light" T GrainAndGamma.gamma} addUserKnob {7 softlight l "Soften Scene Light" t "How much blur should be applied to the scene light? Setting this low will look like porcelain, and hig more like jade"} softlight 0.1 addUserKnob {7 frontbackmix l "Front<->Back mix" t "This will control how much light from the back and from the front will affect the light intensity.\n\nIf set to -1 only light from the back will cause an effect.\nIf set to 0 both back and front light will have an effect.\nIf set to 1 only light comming from the front will have an effect." R -1 1} addUserKnob {26 ""} } Input { inputs 0 name Camera xpos 413 ypos -523 } Dot { name Dot5 xpos 447 ypos -410 } set N13e5ff90 [stack 0] Dot { name Dot2 xpos 447 ypos -269 } BasicMaterial { inputs 0 specular 0 name BasicMaterial1 xpos 224 ypos -276 } Input { inputs 0 name Scene xpos 132 ypos -523 number 1 } Dot { name Dot1 xpos 166 ypos -272 } set N13958ae0 [stack 0] ApplyMaterial { inputs 2 name ApplyMaterial1 xpos 224 ypos -252 } push 0 add_layer {point point.red point.green point.blue point.alpha} add_layer {normal normal.red normal.green normal.blue normal.alpha} ScanlineRender { inputs 3 motion_vectors_type distance output_shader_vectors true P_channel point N_channel normal name ScanlineRender2 xpos 282 ypos -181 } Dot { name Dot3 xpos 316 ypos 7 } set N13a25120 [stack 0] Multiply { channels rgb value {{min(1,1+parent.frontbackmix)}} name Multiply2 xpos -29 ypos 4 } push $N13e5ff90 Camera2 { inputs 0 useMatrix true matrix { {{parent.DummyCam.world_matrix} {parent.DummyCam.world_matrix} {parent.DummyCam.world_matrix} {parent.DummyCam.world_matrix}} {{parent.DummyCam.world_matrix} {parent.DummyCam.world_matrix} {parent.DummyCam.world_matrix} {parent.DummyCam.world_matrix}} {{parent.DummyCam.world_matrix} {parent.DummyCam.world_matrix} {parent.DummyCam.world_matrix} {parent.DummyCam.world_matrix}} {{parent.DummyCam.world_matrix} {parent.DummyCam.world_matrix} {parent.DummyCam.world_matrix} {parent.DummyCam.world_matrix}} } focal {{parent.DummyCam.focal}} haperture {{parent.DummyCam.haperture}} vaperture {{parent.DummyCam.vaperture}} near {{parent.DummyCam.far}} far 0.1 win_translate {{parent.DummyCam.win_translate} {parent.DummyCam.win_translate}} win_scale {{parent.DummyCam.win_scale} {parent.DummyCam.win_scale}} winroll {{parent.DummyCam.winroll}} focal_point {{parent.DummyCam.focal_point}} fstop {{parent.DummyCam.fstop}} name Camera2 xpos -127 ypos -434 } Switch { inputs 2 which {{!parent.method}} name Switch1 xpos -137 ypos -306 } Dot { name Dot4 xpos -103 ypos -270 } set N12cc2430 [stack 0] push $N12cc2430 BasicMaterial { inputs 0 specular 0 name BasicMaterial2 xpos 31 ypos -297 } Project3D2 { inputs 2 project_on back name Project3D1 xpos 31 ypos -273 } push $N13958ae0 ApplyMaterial { inputs 2 name ApplyMaterial3 xpos 31 ypos -234 } push 0 ScanlineRender { inputs 3 motion_vectors_type distance output_shader_vectors true P_channel point N_channel normal name ScanlineRender5 xpos 31 ypos -164 } set N128e6230 [stack 0] Dot { name Dot6 xpos -105 ypos -161 } Multiply { channels rgb value {{min(1,1-parent.frontbackmix)}} name Multiply1 xpos -139 ypos -60 } Merge2 { inputs 2 operation plus Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge1 xpos -139 ypos 4 } Inpaint2 { fillRegion "Source Inverted Alpha" center {640 360} name Inpaint1 xpos -262 ypos 4 } Blur { channels rgb size {{(parent.softlight*1000)+4}} name Blur2 xpos -262 ypos 52 } Dot { name Dot7 xpos -448 ypos 55 } Fill { output {rgba.red rgba.green rgba.blue -rgba.alpha} name NoLight xpos -482 ypos 138 disable {{parent.scenecolor}} } Colorspace { colorspace_out CIE-Lab name Colorspace1 xpos -482 ypos 256 } Grade { channels {rgba.red -rgba.green -rgba.blue none} black_clamp false name GrainAndGamma xpos -482 ypos 280 } Colorspace { colorspace_in CIE-Lab name Colorspace2 xpos -482 ypos 316 } Expression { expr0 a>0?r/max(r,g,b):0 expr1 a>0?g/max(r,g,b):0 expr2 a>0?b/max(r,g,b):0 name NormalizeLight xpos -482 ypos 388 disable {{!parent.normalize}} } Premult { name Premult1 xpos -482 ypos 499 } push $N13a25120 Shuffle { in depth in2 rgba red blue green blue alpha alpha2 name Shuffle6 xpos 282 ypos 216 } push $N128e6230 Shuffle { in depth in2 rgba red blue green blue alpha alpha2 name Shuffle7 xpos 31 ypos 249 } Merge2 { inputs 2 operation minus Bchannels rgb name Merge4 xpos 282 ypos 249 } Blur { channels rgb size {{parent.diffusion*100}} name Blur3 xpos 282 ypos 499 } Grade { white {{parent.scene_scale}} black_clamp false name Grade11 xpos -24 ypos 499 } MergeExpression { inputs 2 expr0 "exp(-B.r * sigma_t.r) * A.r" expr1 "exp(-B.g * sigma_t.g) * A.g" expr2 "exp(-B.b * sigma_t.b) * A.b" name MergeExpression1 xpos -156 ypos 499 addUserKnob {20 User} addUserKnob {18 sigma_t} sigma_t {{(((1/((parent.scattering*parent.scatter_color)+0.0000001))-0.9999999)*(parent.scene_scale/3))} {(((1/((parent.scattering*parent.scatter_color)+0.0000001))-0.9999999)*(parent.scene_scale/3))} {(((1/((parent.scattering*parent.scatter_color)+0.0000001))-0.9999999)*(parent.scene_scale/3))}} addUserKnob {6 sigma_t_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 color_rgb_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} color_rgb_panelDropped true } Output { name Output1 xpos -156 ypos 640 } push $N13e5ff90 Camera { projection_mode {{"\[expression \[value the_cam]projection_mode(\[value the_frame])]"}} focal {{"\[expression \[value the_cam]focal(\[value the_frame])]"}} haperture {{"\[expression \[value the_cam]haperture(\[value the_frame])]"}} vaperture {{"\[expression \[value the_cam]vaperture(\[value the_frame])]"}} near {{"\[expression \[value the_cam]near(\[value the_frame])]"}} far {10000} win_translate {{"\[expression \[value the_cam]win_translate.u(\[value the_frame])]"} {"\[expression \[value the_cam]win_translate.v(\[value the_frame])]"}} win_scale {{"\[expression \[value the_cam]win_scale.u(\[value the_frame])]"} {"\[expression \[value the_cam]win_scale.v(\[value the_frame])]"}} winroll {{"\[expression \[value the_cam]winroll(\[value the_frame])]"}} focal_point {{"\[expression \[value the_cam]focal_point(\[value the_frame])]"}} fstop {{"\[expression \[value the_cam]fstop(\[value the_frame])]"}} name DummyCam help "DummyCam by Adrian Pueyo\n\nCamera that apart from the matrices also grabs all the \"Projection\" values from the upstream camera that it's connected to. Turns into a default Camera if no Camera connected. Can also be used inside of groups and gizmos, as many levels deep as you want :D All using live and super fast TCL.\n\nUpdated v1.1: Now grabs the correct frame too (thanks Erwan Leroy for the idea).\n\nUpdated v1.3: Now accepts Nuke13's Camera3\n\nadrianpueyo.com, 2019-2021" onCreate "n = nuke.thisNode()\nfor k in \[\"projection_mode\",\"focal\",\"haperture\",\"vaperture\",\"near\",\"far\",\"win_translate\",\"win_scale\",\"winroll\",\"focal_point\",\"fstop\"]:\n n\[k].setFlag(0x0000000010000000)" label "By Adrian Pueyo" xpos 11 ypos -434 addUserKnob {20 DummyCam l Defaults} addUserKnob {43 the_cam +INVISIBLE} the_cam "\[\n#DummyCam v1.3 - Updated 5 May 2021.\nset starting_point \"this.input0\"\nset default \"this.d_\"\n\n# If cam has no inputs, return the default.\nif \{\[exists \$starting_point]\} \{\n set x \[node \$starting_point]\n\} \{ \n return \$default\n\}\n\nset finished 0\nwhile \{\$finished != 1\} \{\n\n # First look for a Cam or Input or topnode.\n while \{\[class \$x] != \"Camera3\" && \[class \$x] != \"Camera2\" && \[class \$x] != \"Camera\" && \[class \$x] != \"Input\" && \$x != \[topnode \$x]\} \{\n set x \[node \$x.input0]\n \}\n\n # Then, check if node is a cam (and return), and otherwise, if it's an input, see if the parent exists and move to it.\n if \{\[class \$x]==\"Camera3\"||\[class \$x]==\"Camera2\"||\[class \$x]==\"Camera\"\} \{\n set x \[append x \".\"]\n return \$x\n \} \{ \n if \{ \[class \$x]==\"Input\" \} \{ \n set inp \"\$x.parent.input\"\n set inputNum \[value \$x.number]\n set inp \[append inp \$inputNum]\n if \{ \[exists \$inp] \} \{\n set x \[node \$inp]\n \} \{ \n set finished 1\n \}\n \} \{ \n set finished 1\n \}\n \}\n\}\nreturn \$default\n]" addUserKnob {43 the_frame +INVISIBLE} the_frame "\[\nset the_camera \[string trimright \[value the_cam] .]\nif \{\[exists \$the_camera]\} \{\n return \[value \$the_camera.frame]\n\} \{ \n return \[frame]\n\}\n]" addUserKnob {4 d_projection_mode l projection M {perspective orthographic uv spherical ""}} addUserKnob {7 d_focal l "focal length" R 0 100} d_focal 50 addUserKnob {7 d_haperture l "horiz aperture" R 0 50} d_haperture 24.576 addUserKnob {7 d_vaperture l "vert aperture" R 0 50} d_vaperture 18.672 addUserKnob {7 d_near l near R 0 10} d_near 0.1 addUserKnob {7 d_far l far R 0 10000} d_far 10000 addUserKnob {30 d_win_translate l "window translate"} addUserKnob {30 d_win_scale l "window scale"} d_win_scale {1 1} addUserKnob {7 d_winroll l "window roll" R 0 45} addUserKnob {7 d_focal_point l "focal distance" R 0 10} d_focal_point 2 addUserKnob {7 d_fstop l fstop R 0 30} d_fstop 16 addUserKnob {26 version l " " t "Updated 5 May 2021" T "
DummyCam v1.3 - adrianpueyo.com, 2019-2021
"} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_SkyMatte.gizmo ================================================ Group { name SkyMatte tile_color 0x3c9cd8ff note_font "Bitstream Vera Sans Bold" note_font_color 0xffffffff selected true addUserKnob {20 SkyMatteINGI l "Sky MatteINGI"} addUserKnob {41 type l Channel T channelstype.type} addUserKnob {7 bpmin l Blackpoint t "Set like a normal blackpoint from a keyer, there is no whitepoint to set however." R 0.0005 1} bpmin 0.15 addUserKnob {6 inverted l Invert +STARTLINE} inverted true addUserKnob {26 Slices} addUserKnob {41 on l "(RGB)Preview Slices" t "RGB only" T showslices.on} addUserKnob {7 previewgamma l /Gamma t "Gamma of the plate under the red slices." -STARTLINE} previewgamma 1.8 addUserKnob {7 previewgain l Gain t "Gain of the plate under the red slices." -STARTLINE} previewgain 0.15 addUserKnob {7 spread l Spread t "Keep as low as possible (more precision). If you are missing slices in the higher values increase the value to spread them." R 0.002 1} spread 0.1 addUserKnob {26 Refine} addUserKnob {7 offsets l offset t "Repeats the process 4 times with slight offsets to make the slices seamless. The bigger the value, the more different each repetition is." R 0 0.4} offsets 0.03 addUserKnob {26 alert l "" -STARTLINE T "0=No refine"} addUserKnob {4 refine t "Depends on offset. Min offers higher precision but can have lines appearing, average is smoother." M {Min Average ""}} refine Average addUserKnob {26 Contrast} addUserKnob {41 blackpoint T Contrastpost.blackpoint} addUserKnob {41 whitepoint T Contrastpost.whitepoint} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelMask l "" -STARTLINE T Merge11.maskChannelMask} addUserKnob {41 inject -STARTLINE T Merge11.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge11.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge11.fringe} addUserKnob {41 mix T Merge11.mix} addUserKnob {26 _1 l "" +STARTLINE T "
Sky Matte INGI V1 by Corentin Fievet
"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x332d6801 note_font "Helvetica Bold" note_font_size 20 xpos -1179 ypos -726 bookmark false bdwidth 611 bdheight 396 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x35543a01 note_font "Helvetica Bold" note_font_size 20 xpos 126 ypos 301 bookmark false bdwidth 388 bdheight 322 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x664c6d01 note_font "Helvetica Bold" note_font_size 50 xpos -1253 ypos 57 bookmark false bdwidth 1305 bdheight 556 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x663d6801 note_font "Helvetica Bold" note_font_size 50 xpos 3904 ypos 3942 bookmark false bdwidth 534 bdheight 629 } StickyNote { inputs 0 name StickyNote1 tile_color 0xffffffff label "Channels ." note_font "Helvetica Bold" note_font_size 20 xpos -1179 ypos -765 } StickyNote { inputs 0 name StickyNote2 tile_color 0xffffffff label "edgefix ." note_font "Helvetica Bold" note_font_size 20 xpos 126 ypos 263 } StickyNote { inputs 0 name StickyNote3 tile_color 0xffffffff label "Slice_prep ." note_font "Helvetica Bold" note_font_size 50 xpos -1253 ypos -13 } StickyNote { inputs 0 name StickyNote4 tile_color 0xffffffff label "Preview Slices ." note_font "Helvetica Bold" note_font_size 50 xpos 3904 ypos 3872 } Input { inputs 0 name mask xpos 3916 ypos 5739 number 1 } Input { inputs 0 name Input xpos -832 ypos -1060 } Remove { operation keep channels rgb name Remove2 xpos -832 ypos -993 } Dot { name Dot78 xpos -798 ypos -944 } set N3bfdb200 [stack 0] Reformat { type scale resize none name Reformat1 xpos -832 ypos -670 } Dot { name Dot23 xpos -798 ypos -578 } set N3bfda400 [stack 0] Shuffle { red blue green blue alpha blue name Shuffle5 label "\[value in]" xpos -680 ypos -505 } push $N3bfda400 Shuffle { red green blue green alpha green name Shuffle1 label "\[value in]" xpos -790 ypos -501 } push $N3bfda400 Shuffle { green red blue red alpha red name Shuffle2 label "\[value in]" xpos -885 ypos -506 } push $N3bfda400 Saturation { saturation 0 name Saturation1 xpos -991 ypos -522 } Shuffle { green red blue red alpha red name Shuffle41 label "\[value in]" xpos -991 ypos -494 } Switch { inputs 4 which {{parent.channelstype.type}} name Switch2 label "\[value which]" xpos -826 ypos -403 } Reformat { type scale resize none name Reformat2 xpos -826 ypos -158 } Clamp { channels rgba maximum {{parent.ControlsD.thirty}} name Clamp2 xpos -826 ypos -117 } set N3bf9eb00 [stack 0] Dot { name Dot52 xpos -1855 ypos -112 } Dot { name Dot68 xpos -1850 ypos 946 } push $N3bf9eb00 Dot { name Dot60 xpos 318 ypos -118 } Shuffle { red white green white blue white alpha white name Shuffle4 label "\[value in]" xpos 284 ypos 386 } set N3bf87200 [stack 0] Transform { translate {0 {parent.Main_dilate.size*-2}} center {1112 774} shutteroffset centred name Transform4 xpos 419 ypos 460 } push $N3bf87200 Transform { translate {0 {parent.Main_dilate.size*2}} center {1112 774} shutteroffset centred name Transform3 xpos 333 ypos 461 } push 0 push $N3bf87200 Transform { translate {{parent.Main_dilate.size*2} 0} center {1112 774} shutteroffset centred name Transform1 xpos 138 ypos 464 } push $N3bf87200 Transform { translate {{parent.Main_dilate.size*-2} 0} center {1112 774} shutteroffset centred name Transform2 xpos 234 ypos 460 } Merge2 { inputs 4+1 operation min name Merge1 xpos 279 ypos 520 } Blur { channels rgba size {{parent.Transform1.translate.x*0.5}} name Blur1 label "\[value size]" xpos 279 ypos 548 } Dot { name Dot2 xpos 313 ypos 771 } push $N3bf9eb00 Dot { name Dot12 xpos -792 ypos 142 } set N3bf53900 [stack 0] Dot { name Dot36 xpos -291 ypos 142 } set N3bf53200 [stack 0] Dilate { channels rgba size {{parent.Dilate1.size/2}} name Dilate4 xpos -112 ypos 256 } Dot { name Dot77 xpos -78 ypos 552 } push $N3bf53900 Dot { name Dot34 xpos -1115 ypos 142 } set N3bf51d00 [stack 0] Grade { channels rgba blackpoint {{parent.Controls1.min*8}} whitepoint {{parent.Controls1.min*16}} white_clamp true name Grade14 xpos -1243 ypos 484 } push $N3bf53200 Dilate { channels rgba size {{parent.Main_dilate.size*0.4}} name Dilate1 xpos -215 ypos 255 } Dot { name Dot24 xpos -181 ypos 489 } push $N3bf51d00 Grade { channels rgba blackpoint {{parent.Controls1.min*4}} whitepoint {{parent.Controls1.min*8}} white_clamp true name Grade13 xpos -1124 ypos 435 } push $N3bf53200 Dilate { channels rgba size {{parent.Main_dilate.size*0.7}} name Dilate2 xpos -325 ypos 253 } Dot { name Dot61 xpos -291 ypos 440 } push $N3bf51d00 Grade { channels rgba blackpoint {{parent.Controls1.min*2}} whitepoint {{parent.Controls1.min*4}} white_clamp true name Grade12 xpos -1026 ypos 385 } push $N3bf53200 Dilate { channels rgba size {{width/88.9}} name Main_dilate xpos -425 ypos 253 } Dot { name Dot62 xpos -391 ypos 390 } push $N3bf51d00 Grade { channels rgba blackpoint {{parent.Controls1.min}} whitepoint {{parent.Controls1.min*2}} white_clamp true name Grade11 xpos -949 ypos 324 } push $N3bf53200 Dilate { channels rgba size {{parent.Main_dilate.size*1.5}} name Dilate3 xpos -525 ypos 256 } Dot { name Dot85 xpos -491 ypos 329 } push $N3bf53200 Dilate { channels rgba size {{parent.Main_dilate.size*2}} name Dilate5 xpos -639 ypos 256 } Merge2 { inputs 2+1 operation copy name Merge2 xpos -796 ypos 324 } Merge2 { inputs 2+1 operation copy name Merge3 xpos -796 ypos 385 } Merge2 { inputs 2+1 operation copy name Merge4 xpos -796 ypos 435 } Merge2 { inputs 2+1 operation copy name Merge5 xpos -796 ypos 484 } Keymix { inputs 3 channels rgba invertMask true name Keymix1 xpos -565 ypos 766 } Blur { channels rgba size {{parent.Main_dilate.size}} name Blur14 label "\[value size]" xpos -565 ypos 806 } Reformat { type scale resize none name Reformat3 xpos -565 ypos 848 } Input { inputs 0 name CleanPlateOptional xpos -710 ypos 896 number 2 } Switch { inputs 2 which {{"!\[exists parent.input2]"}} name SwitchDefault xpos -565 ypos 896 } add_layer {input input.red input.green input.blue input.alpha} ShuffleCopy { inputs 2 red red green green blue blue out input name ShuffleCopy1 xpos -565 ypos 944 } Dot { name Dot1 xpos -531 ypos 998 } set N3beaeb00 [stack 0] Shuffle { in input name Shuffle30 label "\[value in]" xpos -1594 ypos 1743 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.ControlsA.one*0.9} {parent.ControlsB.one*0.9} {parent.ControlsC.one*0.9} {parent.ControlsD.one*0.9}} white_clamp true name Grade60 xpos -1594 ypos 1785 } push $N3beaeb00 Dot { name Dot17 xpos -1397 ypos 1700 } set N6766a400 [stack 0] Shuffle { in input name Shuffle29 label "\[value in]" xpos -1479 ypos 1746 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice.whitepoint} {parent.slice.whitepoint} {parent.slice.whitepoint} {parent.slice.whitepoint}} white_clamp true name Grade59 xpos -1479 ypos 1824 addUserKnob {20 User} } push $N6766a400 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice xpos -1386 ypos 1773 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus one addUserKnob {1 number} number two } Dot { name Dot16 xpos -1349 ypos 1820 } Group { inputs 3 name MultiMaskKeyMix22 tile_color 0x495bc4ff xpos -1479 ypos 1880 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set N6764cf00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N67637900 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set N67636400 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $N6764cf00 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N67637900 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $N67636400 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $N6764cf00 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N67637900 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $N67636400 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $N6764cf00 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N67637900 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $N67636400 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N3beaeb00 Dot { name Dot18 xpos -1216 ypos 1798 } set N675cdd00 [stack 0] Shuffle { in input name Shuffle28 label "\[value in]" xpos -1323 ypos 1834 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice2.whitepoint} {parent.slice2.whitepoint} {parent.slice2.whitepoint} {parent.slice2.whitepoint}} white_clamp true name Grade58 xpos -1323 ypos 1915 addUserKnob {20 User} } push $N675cdd00 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice2 xpos -1227 ypos 1853 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus two addUserKnob {1 number} number three } Dot { name Dot15 xpos -1193 ypos 1908 } Group { inputs 3 name MultiMaskKeyMix21 tile_color 0x495bc4ff xpos -1323 ypos 1968 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set N675a4800 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N6758f200 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set N6758dd00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $N675a4800 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N6758f200 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $N6758dd00 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $N675a4800 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N6758f200 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $N6758dd00 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $N675a4800 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N6758f200 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $N6758dd00 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N3beaeb00 Dot { name Dot19 xpos -1060 ypos 1916 } set N67521600 [stack 0] Shuffle { in input name Shuffle27 label "\[value in]" xpos -1174 ypos 1952 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice3.whitepoint} {parent.slice3.whitepoint} {parent.slice3.whitepoint} {parent.slice3.whitepoint}} white_clamp true name Grade57 xpos -1174 ypos 2032 addUserKnob {20 User} } push $N67521600 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice3 xpos -1078 ypos 1974 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus three addUserKnob {1 number} number four } Dot { name Dot14 xpos -1044 ypos 2026 } Group { inputs 3 name MultiMaskKeyMix20 tile_color 0x495bc4ff xpos -1174 ypos 2086 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set N674f0100 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N674e2b00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set N674e1600 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $N674f0100 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N674e2b00 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $N674e1600 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $N674f0100 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N674e2b00 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $N674e1600 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $N674f0100 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N674e2b00 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $N674e1600 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N3beaeb00 Dot { name Dot22 xpos -899 ypos 1988 } set N6748cf00 [stack 0] Shuffle { in input name Shuffle26 label "\[value in]" xpos -1009 ypos 2026 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice4.whitepoint} {parent.slice4.whitepoint} {parent.slice4.whitepoint} {parent.slice4.whitepoint}} white_clamp true name Grade56 xpos -1009 ypos 2108 addUserKnob {20 User} } push $N6748cf00 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice4 xpos -913 ypos 2046 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus four addUserKnob {1 number} number five } Dot { name Dot13 xpos -879 ypos 2100 } Group { inputs 3 name MultiMaskKeyMix19 tile_color 0x495bc4ff xpos -1009 ypos 2160 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set N6743b900 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N6743a400 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set N67438f00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $N6743b900 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N6743a400 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $N67438f00 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $N6743b900 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N6743a400 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $N67438f00 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $N6743b900 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N6743a400 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $N67438f00 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N3beaeb00 Dot { name Dot21 xpos -741 ypos 2082 } set N673e0800 [stack 0] Shuffle { in input name Shuffle25 label "\[value in]" xpos -837 ypos 2125 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice5.whitepoint} {parent.slice5.whitepoint} {parent.slice5.whitepoint} {parent.slice5.whitepoint}} white_clamp true name Grade55 xpos -837 ypos 2207 addUserKnob {20 User} } push $N673e0800 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice5 xpos -741 ypos 2147 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus five addUserKnob {1 number} number six } Dot { name Dot11 xpos -707 ypos 2200 } Group { inputs 3 name MultiMaskKeyMix18 tile_color 0x495bc4ff xpos -837 ypos 2260 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set N67393200 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N67391d00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set N67390800 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $N67393200 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N67391d00 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $N67390800 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $N67393200 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N67391d00 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $N67390800 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $N67393200 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N67391d00 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $N67390800 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N3beaeb00 Dot { name Dot20 xpos -579 ypos 2181 } set N6733c100 [stack 0] Shuffle { in input name Shuffle24 label "\[value in]" xpos -676 ypos 2216 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice6.whitepoint} {parent.slice6.whitepoint} {parent.slice6.whitepoint} {parent.slice6.whitepoint}} white_clamp true name Grade54 xpos -676 ypos 2294 addUserKnob {20 User} } push $N6733c100 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice6 xpos -580 ypos 2231 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus six addUserKnob {1 number} number seven } Dot { name Dot10 xpos -546 ypos 2288 } Group { inputs 3 name MultiMaskKeyMix17 tile_color 0x495bc4ff xpos -676 ypos 2348 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set N672eab00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N672e9600 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set N672e8100 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $N672eab00 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N672e9600 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $N672e8100 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $N672eab00 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N672e9600 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $N672e8100 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $N672eab00 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N672e9600 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $N672e8100 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N3beaeb00 Dot { name Dot25 xpos -417 ypos 2241 } set N3ff8f900 [stack 0] Shuffle { in input name Shuffle23 label "\[value in]" xpos -500 ypos 2290 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice7.whitepoint} {parent.slice7.whitepoint} {parent.slice7.whitepoint} {parent.slice7.whitepoint}} white_clamp true name Grade53 xpos -500 ypos 2371 addUserKnob {20 User} } push $N3ff8f900 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice7 xpos -404 ypos 2307 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus seven addUserKnob {1 number} number eight } Dot { name Dot9 xpos -370 ypos 2364 } Group { inputs 3 name MultiMaskKeyMix16 tile_color 0x495bc4ff xpos -500 ypos 2424 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set N3ff82400 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N3ff80f00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set N3ff57900 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $N3ff82400 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N3ff80f00 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $N3ff57900 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $N3ff82400 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N3ff80f00 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $N3ff57900 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $N3ff82400 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N3ff80f00 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $N3ff57900 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N3beaeb00 Dot { name Dot26 xpos -241 ypos 2300 } set N3feef200 [stack 0] Shuffle { in input name Shuffle22 label "\[value in]" xpos -324 ypos 2364 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice8.whitepoint} {parent.slice8.whitepoint} {parent.slice8.whitepoint} {parent.slice8.whitepoint}} white_clamp true name Grade52 xpos -324 ypos 2444 addUserKnob {20 User} } push $N3feef200 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice8 xpos -228 ypos 2384 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus eight addUserKnob {1 number} number nine } Dot { name Dot8 xpos -194 ypos 2438 } Group { inputs 3 name MultiMaskKeyMix15 tile_color 0x495bc4ff xpos -324 ypos 2498 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set N3fed9d00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N3fed8800 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set N3feaf200 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $N3fed9d00 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N3fed8800 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $N3feaf200 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $N3fed9d00 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N3fed8800 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $N3feaf200 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $N3fed9d00 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N3fed8800 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $N3feaf200 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N3beaeb00 Dot { name Dot43 xpos 1079 ypos 1540 } set N3fe52b00 [stack 0] Dot { name Dot27 xpos -61 ypos 2368 } set N3fe52400 [stack 0] Shuffle { in input name Shuffle21 label "\[value in]" xpos -152 ypos 2434 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice9.whitepoint} {parent.slice9.whitepoint} {parent.slice9.whitepoint} {parent.slice9.whitepoint}} white_clamp true name Grade51 xpos -152 ypos 2513 addUserKnob {20 User} } push $N3fe52400 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice9 xpos -56 ypos 2453 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus nine addUserKnob {1 number} number ten } Dot { name Dot7 xpos -22 ypos 2507 } Group { inputs 3 name MultiMaskKeyMix14 tile_color 0x495bc4ff xpos -152 ypos 2567 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set N3fe24f00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N3fe07900 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set N3fe06400 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $N3fe24f00 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N3fe07900 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $N3fe06400 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $N3fe24f00 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N3fe07900 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $N3fe06400 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $N3fe24f00 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N3fe07900 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $N3fe06400 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N3fe52b00 Dot { name Dot28 xpos 122 ypos 2440 } set N3fda5d00 [stack 0] Shuffle { in input name Shuffle17 label "\[value in]" xpos 27 ypos 2509 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice10.whitepoint} {parent.slice10.whitepoint} {parent.slice10.whitepoint} {parent.slice10.whitepoint}} white_clamp true name Grade50 xpos 27 ypos 2589 addUserKnob {20 User} } push $N3fda5d00 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice10 xpos 123 ypos 2521 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus ten addUserKnob {1 number} number eleven } Dot { name Dot6 xpos 157 ypos 2583 } Group { inputs 3 name MultiMaskKeyMix13 tile_color 0x495bc4ff xpos 27 ypos 2643 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set N3fd80800 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N3fd6b200 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set N3fd69d00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $N3fd80800 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N3fd6b200 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $N3fd69d00 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $N3fd80800 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N3fd6b200 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $N3fd69d00 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $N3fd80800 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N3fd6b200 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $N3fd69d00 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N3fe52b00 Dot { name Dot29 xpos 304 ypos 2515 } set N3fcfd600 [stack 0] Shuffle { in input name Shuffle14 label "\[value in]" xpos 210 ypos 2599 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice11.whitepoint} {parent.slice11.whitepoint} {parent.slice11.whitepoint} {parent.slice11.whitepoint}} white_clamp true name Grade49 xpos 210 ypos 2679 addUserKnob {20 User} } push $N3fcfd600 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice11 xpos 306 ypos 2615 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus eleven addUserKnob {1 number} number twelve } Dot { name Dot5 xpos 340 ypos 2673 } Group { inputs 3 name MultiMaskKeyMix12 tile_color 0x495bc4ff xpos 210 ypos 2733 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set N3fccc100 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N3fcbeb00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set N3fcbd600 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $N3fccc100 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N3fcbeb00 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $N3fcbd600 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $N3fccc100 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N3fcbeb00 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $N3fcbd600 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $N3fccc100 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N3fcbeb00 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $N3fcbd600 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N3fe52b00 Dot { name Dot30 xpos 488 ypos 2613 } set N3fc60f00 [stack 0] Shuffle { in input name Shuffle20 label "\[value in]" xpos 387 ypos 2674 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice12.whitepoint} {parent.slice12.whitepoint} {parent.slice12.whitepoint} {parent.slice12.whitepoint}} white_clamp true name Grade48 xpos 387 ypos 2754 addUserKnob {20 User} } push $N3fc60f00 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice12 xpos 483 ypos 2689 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus twelve addUserKnob {1 number} number thirteen } Dot { name Dot4 xpos 517 ypos 2748 } Group { inputs 3 name MultiMaskKeyMix11 tile_color 0x495bc4ff xpos 387 ypos 2808 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set N3fc17900 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N3fc16400 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set N3fc14f00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $N3fc17900 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N3fc16400 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $N3fc14f00 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $N3fc17900 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N3fc16400 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $N3fc14f00 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $N3fc17900 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N3fc16400 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $N3fc14f00 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N3fe52b00 Dot { name Dot3 xpos 669 ypos 2675 } set Na03ac800 [stack 0] Shuffle { in input name Shuffle6 label "\[value in]" xpos 568 ypos 2737 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice13.whitepoint} {parent.slice13.whitepoint} {parent.slice13.whitepoint} {parent.slice13.whitepoint}} white_clamp true name Grade10 xpos 568 ypos 2815 addUserKnob {20 User} } push $Na03ac800 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice13 xpos 664 ypos 2752 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus thirteen addUserKnob {1 number} number fourteen } Dot { name Dot31 xpos 698 ypos 2810 } Group { inputs 3 name MultiMaskKeyMix1 tile_color 0x495bc4ff xpos 568 ypos 2870 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set Na0363200 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set Na0361d00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set Na0360800 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $Na0363200 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $Na0361d00 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $Na0360800 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $Na0363200 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $Na0361d00 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $Na0360800 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $Na0363200 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $Na0361d00 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $Na0360800 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N3fe52b00 Dot { name Dot32 xpos 836 ypos 2754 } set Na0308100 [stack 0] Shuffle { in input name Shuffle7 label "\[value in]" xpos 735 ypos 2815 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice14.whitepoint} {parent.slice14.whitepoint} {parent.slice14.whitepoint} {parent.slice14.whitepoint}} white_clamp true name Grade15 xpos 735 ypos 2894 addUserKnob {20 User} } push $Na0308100 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice14 xpos 831 ypos 2829 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus fourteen addUserKnob {1 number} number fifteen } Dot { name Dot33 xpos 865 ypos 2889 } Group { inputs 3 name MultiMaskKeyMix2 tile_color 0x495bc4ff xpos 735 ypos 2949 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set Na02c2b00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set Na02c1600 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set Na02c0100 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $Na02c2b00 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $Na02c1600 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $Na02c0100 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $Na02c2b00 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $Na02c1600 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $Na02c0100 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $Na02c2b00 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $Na02c1600 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $Na02c0100 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N3fe52b00 Dot { name Dot35 xpos 1018 ypos 2808 } set Na022f900 [stack 0] Shuffle { in input name Shuffle8 label "\[value in]" xpos 917 ypos 2871 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice15.whitepoint} {parent.slice15.whitepoint} {parent.slice15.whitepoint} {parent.slice15.whitepoint}} white_clamp true name Grade24 xpos 917 ypos 2946 addUserKnob {20 User} } push $Na022f900 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice15 xpos 1013 ypos 2882 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus fifteen addUserKnob {1 number} number sixteen } Dot { name Dot37 xpos 1047 ypos 2943 } Group { inputs 3 name MultiMaskKeyMix3 tile_color 0x495bc4ff xpos 917 ypos 3003 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set Na020e400 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set Na020cf00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set Na01ef900 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $Na020e400 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $Na020cf00 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $Na01ef900 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $Na020e400 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $Na020cf00 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $Na01ef900 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $Na020e400 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $Na020cf00 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $Na01ef900 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N3fe52b00 Dot { name Dot38 xpos 1192 ypos 2869 } set Na0187200 [stack 0] Shuffle { in input name Shuffle9 label "\[value in]" xpos 1091 ypos 2931 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice16.whitepoint} {parent.slice16.whitepoint} {parent.slice16.whitepoint} {parent.slice16.whitepoint}} white_clamp true name Grade25 xpos 1091 ypos 3009 addUserKnob {20 User} } push $Na0187200 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice16 xpos 1187 ypos 2946 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus sixteen addUserKnob {1 number} number seventeen } Dot { name Dot39 xpos 1221 ypos 3004 } Group { inputs 3 name MultiMaskKeyMix4 tile_color 0x495bc4ff xpos 1091 ypos 3064 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set Na016dd00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set Na016c800 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set Na0147200 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $Na016dd00 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $Na016c800 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $Na0147200 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $Na016dd00 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $Na016c800 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $Na0147200 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $Na016dd00 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $Na016c800 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $Na0147200 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N3fe52b00 Dot { name Dot45 xpos 2337 ypos 1947 } set Na00e2b00 [stack 0] Dot { name Dot40 xpos 1366 ypos 2938 } set Na00e2400 [stack 0] Shuffle { in input name Shuffle10 label "\[value in]" xpos 1265 ypos 2998 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice17.whitepoint} {parent.slice17.whitepoint} {parent.slice17.whitepoint} {parent.slice17.whitepoint}} white_clamp true name Grade26 xpos 1265 ypos 3078 addUserKnob {20 User} } push $Na00e2400 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice17 xpos 1361 ypos 3014 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus seventeen addUserKnob {1 number} number eighteen } Dot { name Dot41 xpos 1395 ypos 3073 } Group { inputs 3 name MultiMaskKeyMix5 tile_color 0x495bc4ff xpos 1265 ypos 3133 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set Na00bcf00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set Na009f900 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set Na009e400 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $Na00bcf00 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $Na009f900 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $Na009e400 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $Na00bcf00 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $Na009f900 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $Na009e400 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $Na00bcf00 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $Na009f900 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $Na009e400 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $Na00e2b00 Dot { name Dot42 xpos 1555 ypos 2991 } set Na003dd00 [stack 0] Shuffle { in input name Shuffle11 label "\[value in]" xpos 1454 ypos 3052 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice18.whitepoint} {parent.slice18.whitepoint} {parent.slice18.whitepoint} {parent.slice18.whitepoint}} white_clamp true name Grade27 xpos 1454 ypos 3132 addUserKnob {20 User} } push $Na003dd00 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice18 xpos 1550 ypos 3072 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus eighteen addUserKnob {1 number} number nineteen } Dot { name Dot44 xpos 1584 ypos 3126 } Group { inputs 3 name MultiMaskKeyMix6 tile_color 0x495bc4ff xpos 1454 ypos 3186 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set Na0018800 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N8b3f3200 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set N8b3f1d00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $Na0018800 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N8b3f3200 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $N8b3f1d00 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $Na0018800 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N8b3f3200 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $N8b3f1d00 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $Na0018800 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N8b3f3200 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $N8b3f1d00 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $Na00e2b00 Dot { name Dot46 xpos 1748 ypos 3038 } set N8b385600 [stack 0] Shuffle { in input name Shuffle12 label "\[value in]" xpos 1647 ypos 3098 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice19.whitepoint} {parent.slice19.whitepoint} {parent.slice19.whitepoint} {parent.slice19.whitepoint}} white_clamp true name Grade28 xpos 1647 ypos 3178 addUserKnob {20 User} } push $N8b385600 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice19 xpos 1743 ypos 3119 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus nineteen addUserKnob {1 number} number twenty } Dot { name Dot48 xpos 1777 ypos 3173 } Group { inputs 3 name MultiMaskKeyMix7 tile_color 0x495bc4ff xpos 1647 ypos 3233 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set N8b35c100 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N8b352b00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set N8b351600 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $N8b35c100 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N8b352b00 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $N8b351600 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $N8b35c100 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N8b352b00 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $N8b351600 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $N8b35c100 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N8b352b00 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $N8b351600 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $Na00e2b00 Dot { name Dot49 xpos 1943 ypos 3091 } set N8b2e8f00 [stack 0] Shuffle { in input name Shuffle13 label "\[value in]" xpos 1842 ypos 3152 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice20.whitepoint} {parent.slice20.whitepoint} {parent.slice20.whitepoint} {parent.slice20.whitepoint}} white_clamp true name Grade29 xpos 1842 ypos 3233 addUserKnob {20 User} } push $N8b2e8f00 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice20 xpos 1938 ypos 3173 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus twenty addUserKnob {1 number} number twentyone } Dot { name Dot50 xpos 1972 ypos 3226 } Group { inputs 3 name MultiMaskKeyMix8 tile_color 0x495bc4ff xpos 1842 ypos 3286 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set N8b2ab900 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N8b2aa400 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set N8b2a8f00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $N8b2ab900 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N8b2aa400 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $N8b2a8f00 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $N8b2ab900 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N8b2aa400 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $N8b2a8f00 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $N8b2ab900 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N8b2aa400 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $N8b2a8f00 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $Na00e2b00 Dot { name Dot51 xpos 2147 ypos 3140 } set N8b23c800 [stack 0] Shuffle { in input name Shuffle15 label "\[value in]" xpos 2046 ypos 3200 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice21.whitepoint} {parent.slice21.whitepoint} {parent.slice21.whitepoint} {parent.slice21.whitepoint}} white_clamp true name Grade30 xpos 2046 ypos 3279 addUserKnob {20 User} } push $N8b23c800 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice21 xpos 2142 ypos 3217 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus twentyone addUserKnob {1 number} number twentytwo } Dot { name Dot53 xpos 2176 ypos 3275 } Group { inputs 3 name MultiMaskKeyMix9 tile_color 0x495bc4ff xpos 2046 ypos 3335 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set N8b1fb200 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N8b1f9d00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set N8b1f8800 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $N8b1fb200 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N8b1f9d00 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $N8b1f8800 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $N8b1fb200 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N8b1f9d00 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $N8b1f8800 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $N8b1fb200 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N8b1f9d00 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $N8b1f8800 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $Na00e2b00 Dot { name Dot54 xpos 2337 ypos 3188 } set N8b194100 [stack 0] Shuffle { in input name Shuffle16 label "\[value in]" xpos 2236 ypos 3248 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice22.whitepoint} {parent.slice22.whitepoint} {parent.slice22.whitepoint} {parent.slice22.whitepoint}} white_clamp true name Grade34 xpos 2236 ypos 3328 addUserKnob {20 User} } push $N8b194100 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice22 xpos 2332 ypos 3270 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus twentytwo addUserKnob {1 number} number twentythree } Dot { name Dot55 xpos 2366 ypos 3323 } Group { inputs 3 name MultiMaskKeyMix10 tile_color 0x495bc4ff xpos 2236 ypos 3383 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set N8b15ab00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N8b159600 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set N8b158100 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $N8b15ab00 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N8b159600 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $N8b158100 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $N8b15ab00 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N8b159600 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $N8b158100 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $N8b15ab00 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N8b159600 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $N8b158100 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $Na00e2b00 Dot { name Dot56 xpos 2539 ypos 3224 } set N8b0cb900 [stack 0] Shuffle { in input name Shuffle18 label "\[value in]" xpos 2434 ypos 3286 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice23.whitepoint} {parent.slice23.whitepoint} {parent.slice23.whitepoint} {parent.slice23.whitepoint}} white_clamp true name Grade35 xpos 2438 ypos 3364 addUserKnob {20 User} } push $N8b0cb900 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice23 xpos 2534 ypos 3304 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus twentythree addUserKnob {1 number} number twentyfour } Dot { name Dot57 xpos 2568 ypos 3359 } Group { inputs 3 name MultiMaskKeyMix23 tile_color 0x495bc4ff xpos 2438 ypos 3419 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set N8b0b2400 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N8b0b0f00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set N8b087900 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $N8b0b2400 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N8b0b0f00 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $N8b087900 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $N8b0b2400 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N8b0b0f00 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $N8b087900 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $N8b0b2400 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N8b0b0f00 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $N8b087900 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $Na00e2b00 Dot { name Dot47 xpos 3573 ypos 2358 } set N8b01f200 [stack 0] Dot { name Dot58 xpos 2740 ypos 3281 } set N8b01eb00 [stack 0] Shuffle { in input name Shuffle19 label "\[value in]" xpos 2639 ypos 3343 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice24.whitepoint} {parent.slice24.whitepoint} {parent.slice24.whitepoint} {parent.slice24.whitepoint}} white_clamp true name Grade36 xpos 2639 ypos 3422 addUserKnob {20 User} } push $N8b01eb00 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice24 xpos 2735 ypos 3360 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus twentyfour addUserKnob {1 number} number twentyfive } Dot { name Dot59 xpos 2769 ypos 3416 } Group { inputs 3 name MultiMaskKeyMix24 tile_color 0x495bc4ff xpos 2639 ypos 3476 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set N8b009600 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set N8b008100 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set Na13ceb00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $N8b009600 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $N8b008100 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $Na13ceb00 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $N8b009600 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $N8b008100 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $Na13ceb00 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $N8b009600 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $N8b008100 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $Na13ceb00 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N8b01f200 Dot { name Dot63 xpos 2929 ypos 3334 } set Na1372400 [stack 0] Shuffle { in input name Shuffle31 label "\[value in]" xpos 2828 ypos 3396 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice25.whitepoint} {parent.slice25.whitepoint} {parent.slice25.whitepoint} {parent.slice25.whitepoint}} white_clamp true name Grade37 xpos 2828 ypos 3474 addUserKnob {20 User} } push $Na1372400 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice25 xpos 2924 ypos 3414 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus twentyfive addUserKnob {1 number} number twentysix } Dot { name Dot64 xpos 2958 ypos 3469 } Group { inputs 3 name MultiMaskKeyMix25 tile_color 0x495bc4ff xpos 2828 ypos 3529 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set Na1348f00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set Na132b900 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set Na132a400 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $Na1348f00 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $Na132b900 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $Na132a400 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $Na1348f00 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $Na132b900 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $Na132a400 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $Na1348f00 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $Na132b900 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $Na132a400 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N8b01f200 Dot { name Dot65 xpos 3128 ypos 3374 } set Na12d1d00 [stack 0] Shuffle { in input name Shuffle32 label "\[value in]" xpos 3027 ypos 3435 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice26.whitepoint} {parent.slice26.whitepoint} {parent.slice26.whitepoint} {parent.slice26.whitepoint}} white_clamp true name Grade38 xpos 3027 ypos 3514 addUserKnob {20 User} } push $Na12d1d00 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice26 xpos 3119 ypos 3451 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus twentysix addUserKnob {1 number} number twentyseven } Dot { name Dot66 xpos 3157 ypos 3509 } Group { inputs 3 name MultiMaskKeyMix26 tile_color 0x495bc4ff xpos 3027 ypos 3569 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set Na12a0800 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set Na127f200 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set Na127dd00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $Na12a0800 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $Na127f200 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $Na127dd00 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $Na12a0800 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $Na127f200 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $Na127dd00 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $Na12a0800 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $Na127f200 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $Na127dd00 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N8b01f200 Dot { name Dot67 xpos 3315 ypos 3432 } set Na1229600 [stack 0] Shuffle { in input name Shuffle33 label "\[value in]" xpos 3214 ypos 3493 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice27.whitepoint} {parent.slice27.whitepoint} {parent.slice27.whitepoint} {parent.slice27.whitepoint}} white_clamp true name Grade39 xpos 3214 ypos 3572 addUserKnob {20 User} } push $Na1229600 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice27 xpos 3310 ypos 3514 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus twentyseven addUserKnob {1 number} number twentyeight } Dot { name Dot69 xpos 3344 ypos 3567 } Group { inputs 3 name MultiMaskKeyMix27 tile_color 0x495bc4ff xpos 3214 ypos 3627 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set Na11f4100 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set Na11deb00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set Na11dd600 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $Na11f4100 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $Na11deb00 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $Na11dd600 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $Na11f4100 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $Na11deb00 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $Na11dd600 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $Na11f4100 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $Na11deb00 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $Na11dd600 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N8b01f200 Dot { name Dot70 xpos 3503 ypos 3491 } set Na117cf00 [stack 0] Shuffle { in input name Shuffle34 label "\[value in]" xpos 3402 ypos 3553 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice28.whitepoint} {parent.slice28.whitepoint} {parent.slice28.whitepoint} {parent.slice28.whitepoint}} white_clamp true name Grade40 xpos 3402 ypos 3631 addUserKnob {20 User} } push $Na117cf00 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice28 xpos 3494 ypos 3572 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus twentyeight addUserKnob {1 number} number twentynine } Dot { name Dot71 xpos 3532 ypos 3626 } Group { inputs 3 name MultiMaskKeyMix28 tile_color 0x495bc4ff xpos 3402 ypos 3686 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set Na113b900 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set Na113a400 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set Na1138f00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $Na113b900 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $Na113a400 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $Na1138f00 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $Na113b900 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $Na113a400 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $Na1138f00 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $Na113b900 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $Na113a400 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $Na1138f00 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group push $N8b01f200 Dot { name Dot72 xpos 3698 ypos 3545 } set Na10e0800 [stack 0] Shuffle { in input name Shuffle35 label "\[value in]" xpos 3597 ypos 3606 disable {{showslices.on}} } Grade { channels rgba blackpoint {{parent.ControlsA.min} {parent.ControlsB.min} {parent.ControlsC.min} {parent.ControlsD.min}} whitepoint {{parent.slice29.whitepoint} {parent.slice29.whitepoint} {parent.slice29.whitepoint} {parent.slice29.whitepoint}} white_clamp true name Grade41 xpos 3597 ypos 3687 addUserKnob {20 User} } push $Na10e0800 Grade { channels rgba blackpoint {{"parent.ControlsA.\[value this.numberminus]"} {"parent.ControlsB.\[value this.numberminus]"} {"parent.ControlsC.\[value this.numberminus]"} {"parent.ControlsD.\[value this.numberminus]"}} whitepoint {{"parent.ControlsA.\[value this.number]"} {"parent.ControlsB.\[value this.number]"} {"parent.ControlsC.\[value this.number]"} {"parent.ControlsD.\[value this.number]"}} white_clamp true name slice29 xpos 3693 ypos 3628 addUserKnob {20 User} addUserKnob {1 numberminus} numberminus twentynine addUserKnob {1 number} number thirty } Dot { name Dot73 xpos 3727 ypos 3680 } Group { inputs 3 name MultiMaskKeyMix29 tile_color 0x495bc4ff xpos 3597 ypos 3740 } Input { inputs 0 name masks xpos -588 ypos 316 } Dot { name Dot16 xpos -554 ypos 355 } set Na1093200 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle19 label "\[value in]" xpos -491 ypos 516 } Input { inputs 0 name A xpos -854 ypos 309 number 1 } Dot { name Dot14 xpos -820 ypos 375 } set Na1091d00 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle27 label "\[value in]" xpos -813 ypos 632 } Input { inputs 0 name B xpos -950 ypos 268 number 2 } Dot { name Dot15 xpos -916 ypos 310 } set Na1090800 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle26 label "\[value in]" xpos -903 ypos 638 } Keymix { inputs 3 channels rgba name MultiMaskMix3 xpos -854 ypos 703 } push $Na1093200 Shuffle { red blue green blue alpha blue name Shuffle18 label "\[value in]" xpos -588 ypos 479 } push $Na1091d00 Shuffle { red blue green blue alpha blue name Shuffle25 label "\[value in]" xpos -955 ypos 573 } push $Na1090800 Shuffle { red blue green blue alpha blue name Shuffle24 label "\[value in]" xpos -1038 ypos 585 } Keymix { inputs 3 channels rgba name MultiMaskMix2 xpos -1038 ypos 665 } push $Na1093200 Shuffle { red green blue green alpha green name Shuffle16 label "\[value in]" xpos -687 ypos 426 } push $Na1091d00 Shuffle { red green blue green alpha green name Shuffle23 label "\[value in]" xpos -1103 ypos 517 } push $Na1090800 Shuffle { red green blue green alpha green name Shuffle22 label "\[value in]" xpos -1147 ypos 459 } Keymix { inputs 3 channels rgba name MultiMaskMix1 xpos -1147 ypos 588 } push $Na1093200 Shuffle { green red blue red alpha red name Shuffle15 label "\[value in]" xpos -746 ypos 383 } push $Na1091d00 Shuffle { green red blue red alpha red name Shuffle21 label "\[value in]" xpos -1204 ypos 407 } push $Na1090800 Shuffle { green red blue red alpha red name Shuffle20 label "\[value in]" xpos -1283 ypos 373 } Keymix { inputs 3 channels rgba name MultiMaskMix xpos -1267 ypos 552 } ShuffleCopy { inputs 2 red alpha2 green alpha blue black alpha black name ShuffleCopy2 xpos -1218 ypos 701 } ShuffleCopy { inputs 2 blue alpha alpha black name ShuffleCopy3 xpos -1038 ypos 783 } ShuffleCopy { inputs 2 name ShuffleCopy4 xpos -863 ypos 824 } Output { name Output1 xpos -863 ypos 924 } end_group set Na10a8100 [stack 0] push $Na10a8100 Invert { channels rgba name Invert2 xpos 3496 ypos 3876 } set Na1038100 [stack 0] Merge2 { inputs 2 operation copy name Merge8 xpos 3597 ypos 3951 disable {{parent.inverted}} } Dot { name Dot81 xpos 3631 ypos 4027 } Dot { name Dot87 xpos 3631 ypos 4368 } set Na1006b00 [stack 0] Dot { name Dot74 xpos 3631 ypos 4809 } set Na1006400 [stack 0] Shuffle { red alpha green alpha blue alpha name Shuffle39 label "\[value in]" xpos 3717 ypos 4870 } set Na1005d00 [stack 0] push $Na1006400 Shuffle { red blue green blue alpha blue name Shuffle38 label "\[value in]" xpos 3630 ypos 4871 } set Na1005600 [stack 0] push 0 push $Na1006400 Shuffle { green red blue red alpha red name Shuffle36 label "\[value in]" xpos 3450 ypos 4869 } set Na1004f00 [stack 0] push $Na1006400 Shuffle { red green blue green alpha green name Shuffle37 label "\[value in]" xpos 3540 ypos 4870 } set Na1004800 [stack 0] Merge2 { inputs 4+1 operation plus name Merge6 xpos 3501 ypos 4975 } Grade { channels rgba white 0.25 white_clamp true name Grade2 xpos 3501 ypos 5003 } push $Na1005d00 push $Na1005600 push 0 push $Na1004f00 push $Na1004800 Merge2 { inputs 4+1 operation min name Merge7 xpos 3663 ypos 4984 } Switch { inputs 2 which {{parent.refine}} name averageorminswitch label "\[value which]" xpos 3579 ypos 5080 } Grade { channels rgba name Contrastpost xpos 3579 ypos 5254 } Shuffle { red alpha green alpha blue alpha name Shuffle3 label "\[value in]" xpos 3579 ypos 5401 } push $N3bfdb200 Dot { name Dot79 xpos 4227 ypos -920 } Dot { name Dot83 xpos 4235 ypos 4035 } set N90f9eb00 [stack 0] Dot { name Dot84 xpos 4328 ypos 4087 } Keyer { operation "luminance key" range {0.2 1 1 1} name Keyer1 xpos 4290 ypos 4205 } push $Na1038100 Dot { name Dot82 xpos 4107 ypos 4027 } Grade { channels rgba gamma 2 white_clamp true name Grade3 xpos 4073 ypos 4231 } ColorLookup { lut {master {curve C k 0 s0 l x0.400000006 1 k 0 s0} red {} green {} blue {} alpha {}} name ColorLookup1 xpos 4073 ypos 4259 } Shuffle { red alpha green alpha blue alpha name Shuffle40 label "\[value in]" xpos 4073 ypos 4287 } push $Na1006b00 Constant { inputs 0 channels rgb color {1 0 0 0} color_panelDropped true name Constant1 xpos 3939 ypos 4289 } CopyBBox { inputs 2 name CopyBBox1 xpos 3939 ypos 4363 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 4073 ypos 4353 } push $N90f9eb00 Grade { white {{parent.previewgain}} gamma {{parent.previewgamma}} name Grade4 xpos 4197 ypos 4117 } Merge2 { inputs 2+1 operation matte name Merge9 xpos 4197 ypos 4360 } Shuffle { alpha black name Shuffle42 label "\[value in]" xpos 4197 ypos 4448 } Dot { name Dot80 xpos 4235 ypos 5600 } Merge2 { inputs 2 operation copy name Merge10 xpos 3579 ypos 5595 disable {{showslices.on x1442 0}} } push $N3bfdb200 Dot { name Dot76 xpos -2306 ypos -944 } Dot { name Dot75 xpos -2301 ypos 5744 } Remove { operation keep channels rgba name Remove1 xpos 3103 ypos 5739 } Grade { channels rgba white 0 name Grade6 xpos 3276 ypos 5739 } Merge2 { inputs 2+1 operation copy name Merge11 xpos 3579 ypos 5739 } Remove { operation keep channels rgba name Remove3 xpos 3579 ypos 5838 } Output { name Output1 xpos 3579 ypos 5916 } NoOp { inputs 0 name ControlsA xpos -1580 ypos 4146 addUserKnob {20 User} addUserKnob {7 min} min {{Controls1.offsetA}} addUserKnob {7 one} one {{this.min*2}} addUserKnob {7 two} two {{this.one+(this.one)*(decrease+curved_decrease*0)}} addUserKnob {7 three} three {{this.two+(this.one)*(decrease+curved_decrease*1)}} addUserKnob {7 four} four {{this.three+(this.one)*(decrease+curved_decrease*2)}} addUserKnob {7 five} five {{this.four+(this.one)*(decrease+curved_decrease*3)}} addUserKnob {7 six} six {{this.five+(this.one)*(decrease+curved_decrease*4)}} addUserKnob {7 seven} seven {{this.six+(this.one)*(decrease+curved_decrease*5)}} addUserKnob {7 eight} eight {{this.seven+(this.one)*(decrease+curved_decrease*6)}} addUserKnob {7 nine} nine {{this.eight+(this.one)*(decrease+curved_decrease*7)}} addUserKnob {7 ten} ten {{this.nine+(this.one)*(decrease+curved_decrease*8)}} addUserKnob {7 eleven} eleven {{this.ten+(this.one)*(decrease+curved_decrease*9)}} addUserKnob {7 twelve} twelve {{this.eleven+(this.one)*(decrease+curved_decrease*10)}} addUserKnob {7 thirteen} thirteen {{this.twelve+(this.one)*(decrease+curved_decrease*11)}} addUserKnob {7 fourteen} fourteen {{this.thirteen+(this.one)*(decrease+curved_decrease*12)}} addUserKnob {7 fifteen} fifteen {{this.fourteen+(this.one)*(decrease+curved_decrease*13)}} addUserKnob {7 sixteen} sixteen {{this.fifteen+(this.one)*(decrease+curved_decrease*14)}} addUserKnob {7 seventeen} seventeen {{this.sixteen+(this.one)*(decrease+curved_decrease*15)}} addUserKnob {7 eighteen} eighteen {{this.seventeen+(this.one)*(decrease+curved_decrease*16)}} addUserKnob {7 nineteen} nineteen {{this.eighteen+(this.one)*(decrease+curved_decrease*17)}} addUserKnob {7 twenty} twenty {{this.nineteen+(this.one)*(decrease+curved_decrease*18)}} addUserKnob {7 twentyone} twentyone {{this.twenty+(this.one)*(decrease+curved_decrease*19)}} addUserKnob {7 twentytwo} twentytwo {{this.twentyone+(this.one)*(decrease+curved_decrease*20)}} addUserKnob {7 twentythree} twentythree {{this.twentytwo+(this.one)*(decrease+curved_decrease*21)}} addUserKnob {7 twentyfour} twentyfour {{this.twentythree+(this.one)*(decrease+curved_decrease*22)}} addUserKnob {7 twentyfive} twentyfive {{this.twentyfour+(this.one)*(decrease+curved_decrease*23)}} addUserKnob {7 twentysix} twentysix {{this.twentyfive+(this.one)*(decrease+curved_decrease*24)}} addUserKnob {7 twentyseven} twentyseven {{this.twentysix+(this.one)*(decrease+curved_decrease*25)}} addUserKnob {7 twentyeight} twentyeight {{this.twentyseven+(this.one)*(decrease+curved_decrease*26)}} addUserKnob {7 twentynine} twentynine {{this.twentyeight+(this.one)*(decrease+curved_decrease*27)}} addUserKnob {7 thirty} thirty {{this.twentynine+(this.one)*(decrease+curved_decrease*28)}} addUserKnob {7 decrease} decrease {{parent.Controls1.decrease}} addUserKnob {7 curved_decrease} curved_decrease {{this.decrease*0.8}} } NoOp { inputs 0 name ControlsB xpos -711 ypos 4538 addUserKnob {20 User} addUserKnob {7 min} min {{parent.Controls1.offsetB}} addUserKnob {7 one} one {{this.min*2}} addUserKnob {7 two} two {{this.one+(this.one)*(decrease+curved_decrease*0)}} addUserKnob {7 three} three {{this.two+(this.one)*(decrease+curved_decrease*1)}} addUserKnob {7 four} four {{this.three+(this.one)*(decrease+curved_decrease*2)}} addUserKnob {7 five} five {{this.four+(this.one)*(decrease+curved_decrease*3)}} addUserKnob {7 six} six {{this.five+(this.one)*(decrease+curved_decrease*4)}} addUserKnob {7 seven} seven {{this.six+(this.one)*(decrease+curved_decrease*5)}} addUserKnob {7 eight} eight {{this.seven+(this.one)*(decrease+curved_decrease*6)}} addUserKnob {7 nine} nine {{this.eight+(this.one)*(decrease+curved_decrease*7)}} addUserKnob {7 ten} ten {{this.nine+(this.one)*(decrease+curved_decrease*8)}} addUserKnob {7 eleven} eleven {{this.ten+(this.one)*(decrease+curved_decrease*9)}} addUserKnob {7 twelve} twelve {{this.eleven+(this.one)*(decrease+curved_decrease*10)}} addUserKnob {7 thirteen} thirteen {{this.twelve+(this.one)*(decrease+curved_decrease*11)}} addUserKnob {7 fourteen} fourteen {{this.thirteen+(this.one)*(decrease+curved_decrease*12)}} addUserKnob {7 fifteen} fifteen {{this.fourteen+(this.one)*(decrease+curved_decrease*13)}} addUserKnob {7 sixteen} sixteen {{this.fifteen+(this.one)*(decrease+curved_decrease*14)}} addUserKnob {7 seventeen} seventeen {{this.sixteen+(this.one)*(decrease+curved_decrease*15)}} addUserKnob {7 eighteen} eighteen {{this.seventeen+(this.one)*(decrease+curved_decrease*16)}} addUserKnob {7 nineteen} nineteen {{this.eighteen+(this.one)*(decrease+curved_decrease*17)}} addUserKnob {7 twenty} twenty {{this.nineteen+(this.one)*(decrease+curved_decrease*18)}} addUserKnob {7 twentyone} twentyone {{this.twenty+(this.one)*(decrease+curved_decrease*19)}} addUserKnob {7 twentytwo} twentytwo {{this.twentyone+(this.one)*(decrease+curved_decrease*20)}} addUserKnob {7 twentythree} twentythree {{this.twentytwo+(this.one)*(decrease+curved_decrease*21)}} addUserKnob {7 twentyfour} twentyfour {{this.twentythree+(this.one)*(decrease+curved_decrease*22)}} addUserKnob {7 twentyfive} twentyfive {{this.twentyfour+(this.one)*(decrease+curved_decrease*23)}} addUserKnob {7 twentysix} twentysix {{this.twentyfive+(this.one)*(decrease+curved_decrease*24)}} addUserKnob {7 twentyseven} twentyseven {{this.twentysix+(this.one)*(decrease+curved_decrease*25)}} addUserKnob {7 twentyeight} twentyeight {{this.twentyseven+(this.one)*(decrease+curved_decrease*26)}} addUserKnob {7 twentynine} twentynine {{this.twentyeight+(this.one)*(decrease+curved_decrease*27)}} addUserKnob {7 thirty} thirty {{this.twentynine+(this.one)*(decrease+curved_decrease*28)}} addUserKnob {7 decrease} decrease {{parent.Controls1.decrease}} addUserKnob {7 curved_decrease} curved_decrease {{this.decrease*0.8}} } NoOp { inputs 0 name ControlsC xpos 421 ypos 4754 addUserKnob {20 User} addUserKnob {7 min} min {{parent.Controls1.offsetC}} addUserKnob {7 one} one {{this.min*2}} addUserKnob {7 two} two {{this.one+(this.one)*(decrease+curved_decrease*0)}} addUserKnob {7 three} three {{this.two+(this.one)*(decrease+curved_decrease*1)}} addUserKnob {7 four} four {{this.three+(this.one)*(decrease+curved_decrease*2)}} addUserKnob {7 five} five {{this.four+(this.one)*(decrease+curved_decrease*3)}} addUserKnob {7 six} six {{this.five+(this.one)*(decrease+curved_decrease*4)}} addUserKnob {7 seven} seven {{this.six+(this.one)*(decrease+curved_decrease*5)}} addUserKnob {7 eight} eight {{this.seven+(this.one)*(decrease+curved_decrease*6)}} addUserKnob {7 nine} nine {{this.eight+(this.one)*(decrease+curved_decrease*7)}} addUserKnob {7 ten} ten {{this.nine+(this.one)*(decrease+curved_decrease*8)}} addUserKnob {7 eleven} eleven {{this.ten+(this.one)*(decrease+curved_decrease*9)}} addUserKnob {7 twelve} twelve {{this.eleven+(this.one)*(decrease+curved_decrease*10)}} addUserKnob {7 thirteen} thirteen {{this.twelve+(this.one)*(decrease+curved_decrease*11)}} addUserKnob {7 fourteen} fourteen {{this.thirteen+(this.one)*(decrease+curved_decrease*12)}} addUserKnob {7 fifteen} fifteen {{this.fourteen+(this.one)*(decrease+curved_decrease*13)}} addUserKnob {7 sixteen} sixteen {{this.fifteen+(this.one)*(decrease+curved_decrease*14)}} addUserKnob {7 seventeen} seventeen {{this.sixteen+(this.one)*(decrease+curved_decrease*15)}} addUserKnob {7 eighteen} eighteen {{this.seventeen+(this.one)*(decrease+curved_decrease*16)}} addUserKnob {7 nineteen} nineteen {{this.eighteen+(this.one)*(decrease+curved_decrease*17)}} addUserKnob {7 twenty} twenty {{this.nineteen+(this.one)*(decrease+curved_decrease*18)}} addUserKnob {7 twentyone} twentyone {{this.twenty+(this.one)*(decrease+curved_decrease*19)}} addUserKnob {7 twentytwo} twentytwo {{this.twentyone+(this.one)*(decrease+curved_decrease*20)}} addUserKnob {7 twentythree} twentythree {{this.twentytwo+(this.one)*(decrease+curved_decrease*21)}} addUserKnob {7 twentyfour} twentyfour {{this.twentythree+(this.one)*(decrease+curved_decrease*22)}} addUserKnob {7 twentyfive} twentyfive {{this.twentyfour+(this.one)*(decrease+curved_decrease*23)}} addUserKnob {7 twentysix} twentysix {{this.twentyfive+(this.one)*(decrease+curved_decrease*24)}} addUserKnob {7 twentyseven} twentyseven {{this.twentysix+(this.one)*(decrease+curved_decrease*25)}} addUserKnob {7 twentyeight} twentyeight {{this.twentyseven+(this.one)*(decrease+curved_decrease*26)}} addUserKnob {7 twentynine} twentynine {{this.twentyeight+(this.one)*(decrease+curved_decrease*27)}} addUserKnob {7 thirty} thirty {{this.twentynine+(this.one)*(decrease+curved_decrease*28)}} addUserKnob {7 decrease} decrease {{parent.Controls1.decrease}} addUserKnob {7 curved_decrease} curved_decrease {{this.decrease*0.8}} } NoOp { inputs 0 name ControlsD xpos 1332 ypos 4935 addUserKnob {20 User} addUserKnob {7 min} min {{parent.Controls1.offsetD}} addUserKnob {7 one} one {{this.min*2}} addUserKnob {7 two} two {{this.one+(this.one)*(decrease+curved_decrease*0)}} addUserKnob {7 three} three {{this.two+(this.one)*(decrease+curved_decrease*1)}} addUserKnob {7 four} four {{this.three+(this.one)*(decrease+curved_decrease*2)}} addUserKnob {7 five} five {{this.four+(this.one)*(decrease+curved_decrease*3)}} addUserKnob {7 six} six {{this.five+(this.one)*(decrease+curved_decrease*4)}} addUserKnob {7 seven} seven {{this.six+(this.one)*(decrease+curved_decrease*5)}} addUserKnob {7 eight} eight {{this.seven+(this.one)*(decrease+curved_decrease*6)}} addUserKnob {7 nine} nine {{this.eight+(this.one)*(decrease+curved_decrease*7)}} addUserKnob {7 ten} ten {{this.nine+(this.one)*(decrease+curved_decrease*8)}} addUserKnob {7 eleven} eleven {{this.ten+(this.one)*(decrease+curved_decrease*9)}} addUserKnob {7 twelve} twelve {{this.eleven+(this.one)*(decrease+curved_decrease*10)}} addUserKnob {7 thirteen} thirteen {{this.twelve+(this.one)*(decrease+curved_decrease*11)}} addUserKnob {7 fourteen} fourteen {{this.thirteen+(this.one)*(decrease+curved_decrease*12)}} addUserKnob {7 fifteen} fifteen {{this.fourteen+(this.one)*(decrease+curved_decrease*13)}} addUserKnob {7 sixteen} sixteen {{this.fifteen+(this.one)*(decrease+curved_decrease*14)}} addUserKnob {7 seventeen} seventeen {{this.sixteen+(this.one)*(decrease+curved_decrease*15)}} addUserKnob {7 eighteen} eighteen {{this.seventeen+(this.one)*(decrease+curved_decrease*16)}} addUserKnob {7 nineteen} nineteen {{this.eighteen+(this.one)*(decrease+curved_decrease*17)}} addUserKnob {7 twenty} twenty {{this.nineteen+(this.one)*(decrease+curved_decrease*18)}} addUserKnob {7 twentyone} twentyone {{this.twenty+(this.one)*(decrease+curved_decrease*19)}} addUserKnob {7 twentytwo} twentytwo {{this.twentyone+(this.one)*(decrease+curved_decrease*20)}} addUserKnob {7 twentythree} twentythree {{this.twentytwo+(this.one)*(decrease+curved_decrease*21)}} addUserKnob {7 twentyfour} twentyfour {{this.twentythree+(this.one)*(decrease+curved_decrease*22)}} addUserKnob {7 twentyfive} twentyfive {{this.twentyfour+(this.one)*(decrease+curved_decrease*23)}} addUserKnob {7 twentysix} twentysix {{this.twentyfive+(this.one)*(decrease+curved_decrease*24)}} addUserKnob {7 twentyseven} twentyseven {{this.twentysix+(this.one)*(decrease+curved_decrease*25)}} addUserKnob {7 twentyeight} twentyeight {{this.twentyseven+(this.one)*(decrease+curved_decrease*26)}} addUserKnob {7 twentynine} twentynine {{this.twentyeight+(this.one)*(decrease+curved_decrease*27)}} addUserKnob {7 thirty} thirty {{this.twentynine+(this.one)*(decrease+curved_decrease*28)}} addUserKnob {7 decrease} decrease {{parent.Controls1.decrease}} addUserKnob {7 curved_decrease} curved_decrease {{this.decrease*0.8}} } NoOp { inputs 0 name showslices xpos 2955 ypos 2368 addUserKnob {20 User} addUserKnob {6 on l "" t "RGB only" +STARTLINE +STARTLINE} } NoOp { inputs 0 name Controls1 xpos -308 ypos 5196 addUserKnob {20 User} addUserKnob {7 offset R 1 1.3} offset {{parent.offsets}} addUserKnob {7 offsetlimit} offsetlimit {{offset<0?0:offset}} addUserKnob {7 offsetA} offsetA {{offsetB/((offsetlimit)+1)}} addUserKnob {7 offsetB} offsetB {{this.min/((offsetlimit/2)+1)}} addUserKnob {7 offsetC} offsetC {{this.min*((offsetlimit/2)+1)}} addUserKnob {7 offsetD} offsetD {{this.offsetC*((offsetlimit+1))}} addUserKnob {7 min} min {{parent.bpmin==0?0.0005:parent.bpmin}} addUserKnob {7 one R 0 20} one {{this.min*2}} addUserKnob {7 two R 0 20} two {{this.one+(this.one)*(decrease+curved_decrease*0)}} addUserKnob {7 three R 0 20} three {{this.two+(this.one)*(decrease+curved_decrease*1)}} addUserKnob {7 four R 0 20} four {{this.three+(this.one)*(decrease+curved_decrease*2)}} addUserKnob {7 five R 0 20} five {{this.four+(this.one)*(decrease+curved_decrease*3)}} addUserKnob {7 six R 0 20} six {{this.five+(this.one)*(decrease+curved_decrease*4)}} addUserKnob {7 seven R 0 20} seven {{this.six+(this.one)*(decrease+curved_decrease*5)}} addUserKnob {7 eight R 0 20} eight {{this.seven+(this.one)*(decrease+curved_decrease*6)}} addUserKnob {7 nine R 0 20} nine {{this.eight+(this.one)*(decrease+curved_decrease*7)}} addUserKnob {7 ten R 0 20} ten {{this.nine+(this.one)*(decrease+curved_decrease*8)}} addUserKnob {7 eleven R 0 20} eleven {{this.ten+(this.one)*(decrease+curved_decrease*9)}} addUserKnob {7 twelve R 0 20} twelve {{this.eleven+(this.one)*(decrease+curved_decrease*10)}} addUserKnob {7 thirteen R 0 20} thirteen {{this.twelve+(this.one)*(decrease+curved_decrease*11)}} addUserKnob {7 fourteen R 0 20} fourteen {{this.thirteen+(this.one)*(decrease+curved_decrease*12)}} addUserKnob {7 fifteen R 0 20} fifteen {{this.fourteen+(this.one)*(decrease+curved_decrease*13)}} addUserKnob {7 sixteen R 0 20} sixteen {{this.fifteen+(this.one)*(decrease+curved_decrease*14)}} addUserKnob {7 seventeen R 0 20} seventeen {{this.sixteen+(this.one)*(decrease+curved_decrease*15)}} addUserKnob {7 eighteen R 0 20} eighteen {{this.seventeen+(this.one)*(decrease+curved_decrease*16)}} addUserKnob {7 nineteen R 0 20} nineteen {{this.eighteen+(this.one)*(decrease+curved_decrease*17)}} addUserKnob {7 twenty R 0 20} twenty {{this.nineteen+(this.one)*(decrease+curved_decrease*18)}} addUserKnob {7 twentyone R 0 20} twentyone {{this.twenty+(this.one)*(decrease+curved_decrease*19)}} addUserKnob {7 twentytwo R 0 20} twentytwo {{this.twentyone+(this.one)*(decrease+curved_decrease*20)}} addUserKnob {7 twentythree R 0 20} twentythree {{this.twentytwo+(this.one)*(decrease+curved_decrease*21)}} addUserKnob {7 twentyfour R 0 20} twentyfour {{this.twentythree+(this.one)*(decrease+curved_decrease*22)}} addUserKnob {7 twentyfive R 0 20} twentyfive {{this.twentyfour+(this.one)*(decrease+curved_decrease*23)}} addUserKnob {7 twentysix R 0 20} twentysix {{this.twentyfive+(this.one)*(decrease+curved_decrease*24)}} addUserKnob {7 twentyseven R 0 20} twentyseven {{this.twentysix+(this.one)*(decrease+curved_decrease*25)}} addUserKnob {7 twentyeight R 0 20} twentyeight {{this.twentyseven+(this.one)*(decrease+curved_decrease*26)}} addUserKnob {7 twentynine R 0 20} twentynine {{this.twentyeight+(this.one)*(decrease+curved_decrease*27)}} addUserKnob {7 thirty R 0 20} thirty {{this.twentynine+(this.one)*(decrease+curved_decrease*28)}} addUserKnob {7 decrease} decrease {{parent.spread}} addUserKnob {7 curved_decrease} curved_decrease {{this.decrease*0.8}} } PostageStamp { inputs 0 name channelstype xpos -1007 ypos -399 addUserKnob {20 User} addUserKnob {4 type M {Luminance Red Green Blue}} type Blue } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_SliceTool.gizmo ================================================ Group { name SliceTool selected true addUserKnob {20 User} addUserKnob {4 output M {Over Right Left Top Bottom ResultOnly}} addUserKnob {7 thickness} thickness 0.5 addUserKnob {12 pos1} pos1 {160 122} addUserKnob {12 pos2} pos2 {392 326} } Input { inputs 0 name Input1 xpos -535 ypos -255 } set Ned85690 [stack 0] Transform { translate {{-parent.pos1 i} {-parent.pos1 i}} black_outside false name Transform4 label T xpos -535 ypos -231 } Transform { rotate {{"-degrees( atan2(parent.pos2.y-parent.pos1.y, parent.pos2.x-parent.pos1.x) )" i}} black_outside false name Transform5 label "R\n" xpos -535 ypos -197 } Transform { scale {{"width / sqrt(pow(parent.pos2.x-parent.pos1.x,2) + pow(parent.pos2.y-parent.pos1.y,2))" i}} black_outside false name Transform6 label S xpos -535 ypos -160 } Crop { box {0 0 {Input1.width} 1} reformat true crop false name Crop1 xpos -536 ypos -121 } Reformat { type "to box" box_width {{Input1.width}} box_height {{Input1.height}} box_fixed true resize distort filter Impulse name Reformat1 xpos -536 ypos -92 } Expression { expr0 "fabs((y/height)-r)<=tolerance ? 1 : 0" expr1 "fabs((y/height)-g)<=tolerance ? 1 : 0" expr2 "fabs((y/height)-b)<=tolerance ? 1 : 0" name Expression3 xpos -536 ypos -47 addUserKnob {20 User} addUserKnob {7 tolerance} tolerance {{parent.thickness/100}} } set N3aace450 [stack 0] push $N3aace450 ChannelMerge { inputs 2 A rgba.red B rgba.green name ChannelMerge1 xpos -536 ypos -9 } set N3af6cfc0 [stack 0] push $N3af6cfc0 ChannelMerge { inputs 2 B rgba.blue name ChannelMerge2 xpos -536 ypos 37 } set N3af6d330 [stack 0] push $N3aace450 Dot { name Dot3 xpos -293 ypos -44 } set N3aace7c0 [stack 0] Dot { name Dot4 xpos -192 ypos -44 } set N3aaceb30 [stack 0] Dot { name Dot6 xpos -93 ypos -44 } set N3aaceea0 [stack 0] Dot { name Dot9 xpos 29 ypos -44 } push $Ned85690 Dot { name Dot2 xpos -367 ypos -252 } set N3aacf580 [stack 0] Dot { name Dot1 xpos -249 ypos -252 } set N3aacf8f0 [stack 0] Dot { name Dot5 xpos -136 ypos -252 } set N3aacfc60 [stack 0] Dot { name Dot8 xpos -26 ypos -252 } set N3aacffd0 [stack 0] Dot { name Dot7 xpos 90 ypos -252 } ContactSheet { inputs 2 width {{Input1.width i}} height {{Input1.height*2 i}} rows 2 columns 1 roworder TopBottom name ContactSheet2 xpos 56 ypos -23 } push $N3aaceea0 push $N3aacffd0 ContactSheet { inputs 2 width {{Input1.width i}} height {{Input1.height*2 i}} rows 2 columns 1 name ContactSheet3 xpos -56 ypos -21 } push $N3aaceb30 push $N3aacfc60 ContactSheet { inputs 2 width {{Input1.width*2 i}} height {{Input1.height i}} rows 1 columns 2 colorder RightLeft name ContactSheet4 xpos -170 ypos -16 } push $N3aace7c0 push $N3aacf8f0 ContactSheet { inputs 2 width {{Input1.width*2 i}} height {{Input1.height i}} rows 1 columns 2 name ContactSheet1 xpos -283 ypos -17 } push $N3af6d330 push $N3aacf580 Merge2 { inputs 2 name Merge1 xpos -401 ypos 48 } Switch { inputs 6 which {{parent.output}} name Switch1 xpos -283 ypos 126 } Output { name Output1 xpos -283 ypos 193 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Sparky.gizmo ================================================ Group { name Sparky tile_color 0xbd4600ff label "\[if \{\[value ROrP]==false\} \{return \"Render Mode\"\} \{return \"!! PARTICLE MODE !! \\nENABLED\"\}]" note_font "Bitstream Vera Sans Bold" selected true lock_connections true addUserKnob {20 SparkTab l "Sparky Settings"} addUserKnob {41 start_frame l "Initial Frame" T SparkEmit.start_frame} addUserKnob {7 EmissionRate l "Emission Amount" R 0 100} EmissionRate 15 addUserKnob {26 ""} addUserKnob {26 emittertext l "" +STARTLINE T "Emitter Settings"} addUserKnob {13 Direction t "Set the initial velocity applied to the particles. This will orient the sparks in 3D space."} Direction {100 40 0} addUserKnob {7 MaxLife l "Particle Life" t "Maximum amount of frames the particles will live for." R 10 100} MaxLife 60 addUserKnob {7 LifeRange l "Life Range" t "Randomizes the Life Range of the particles." R 0 2} LifeRange 0.75 addUserKnob {3 seed l "Particle Seed" t "Randomizes the simulation."} seed 123 addUserKnob {26 ""} addUserKnob {7 ParticleSize l "Particle Size" t "Change Particle Size" R 1 5} ParticleSize 2 addUserKnob {7 Explosivity t "Changes how much influence the initial force has on the particles." R 0 100} Explosivity 45 addUserKnob {7 Scatter t "Adds some randomness between particles." R 0 100} Scatter 100 addUserKnob {41 Softness l "Particle Softness" T CustomKnobs.Softness} addUserKnob {26 ""} addUserKnob {4 ROption l "Render Options" t "Multi Scanline: Output is a ScanlineRender with motionblur enabled. Can be DeepMerged\nVectorBlur: 2D motionblur added post-render. Can get rid of sample issues, but is not Deep compatible." M {"Multi Scanline" VectorBlur "" ""}} addUserKnob {41 format l Format T RootFormatSetup.format} addUserKnob {14 Overscan R 0 100} Overscan 100 addUserKnob {6 ROrP l "Output As Particles" t "Check this to output Particles instead of a 2D render.\nIt can then be plugged into a 3D scene." +INVISIBLE +STARTLINE} addUserKnob {6 OutputDeep l "Output Deep" t "Warning: Will output in Multi-Scanlinde mode only. Doesn't have any effect if \"Output As Particles is selected\"." -STARTLINE} addUserKnob {22 outParticles l "Output As Particles" t "Click this to output Particles instead of a 2D render.\nIt can then be plugged into a 3D scene." T "n = nuke.thisNode()\n\nn.begin()\n\nSwitch = nuke.toNode('DotSwitch')\nP= nuke.toNode('ParticlesDot')\nR= nuke.toNode('RenderDot')\n\nif n\['ROrP'].value() ==0:\n Switch.setInput(0,P)\n n\['ROrP'].setValue(1)\n n\['outParticles'].setLabel(\"Output As 2D Render\")\nelse:\n Switch.setInput(0,R)\n n\['ROrP'].setValue(0)\n n\['outParticles'].setLabel(\"Output As Particles\")\n\nn.end()\n" +STARTLINE} addUserKnob {20 Presets} addUserKnob {4 AnimPreset l "Animation Presets" t "None: This wont do anything. Serves as safety to not enable a preset accidentally\nSingle Hit Heavy: Heavy hit with a double pop.\nSingle Hit Light : Light pop of sparks.\nWelding : Expression that will mimic a natural welding feeling.\nWavy : Constant sim with some strong variation in birth rate.\nConstant : Softer variation than the Wavy preset.\nLoopy : Loops the same pop of Sparks." M {None "Single Hit Heavy" "Single Hit Light" Welding Wavy Constant Loopy "" "" "" "" ""}} addUserKnob {22 Apply l "Apply Preset" t " " T "def checkPreset():\n preset = int(nuke.thisNode()\['AnimPreset'].getValue())\n print(preset)\n if preset ==0:\n return False\n else:\n return preset\n\ndef checkFrame():\n InitFrame = nuke.getInput(\"Enter Initial Frame\", '1001')\n if InitFrame:\n try:\n InitFrame = int(InitFrame)\n return InitFrame\n except ValueError:\n nuke.message(\"Not a valid frame number\")\n return False\n\n\nif checkPreset() == False:\n nuke.ask(\"No preset selected\")\nelse:\n n=nuke.thisNode()\['EmissionRate']\n s=int(nuke.thisNode()\['AnimPreset'].getValue())\n cf=checkFrame()\n if cf!=False and cf!=None:\n if s == 1: \n print(\"Initial frame is x\" + str(cf))\n nuke.thisNode()\['start_frame'].setValue(cf)\n n.clearAnimated()\n n.setAnimated()\n sCurve = '\{curve K x%v1 0 S 400 x%v2 0 12 x%v3 175 x%v4 20 0\}'\n sCurve=sCurve.replace(\"%v1\",str(cf))\n sCurve=sCurve.replace(\"%v2\",str(cf+3))\n sCurve=sCurve.replace(\"%v3\",str(cf+6))\n sCurve=sCurve.replace(\"%v4\",str(cf+12))\n n.fromScript(sCurve)\n nuke.message(\"Applied Single Hit Heavy Preset\")\n elif s == 2:\n print(\"Initial frame is x\" + str(cf))\n nuke.thisNode()\['start_frame'].setValue(cf)\n n.clearAnimated()\n n.setAnimated()\n sCurve = '\{curve K x%v1 0 S 140 x%v2 0\}'\n sCurve=sCurve.replace(\"%v1\",str(cf))\n sCurve=sCurve.replace(\"%v2\",str(cf+3))\n n.fromScript(sCurve)\n nuke.message(\"Applied Single Hit Light Preset\")\n elif s == 3:\n print(\"Initial frame is x\" + str(cf))\n nuke.thisNode()\['start_frame'].setValue(cf)\n n.clearAnimated()\n n.setExpression(\"max(0,(random(frame+seed)*120*((sin(frame+seed)+1)*0.5)-12))*3\")\n nuke.message(\"Applied Welding Preset\")\n elif s == 4:\n print(\"Initial frame is x\" + str(cf))\n nuke.thisNode()\['start_frame'].setValue(cf)\n n.clearAnimated()\n n.setExpression(\"random(frame+seed)*120*((sin(frame+seed)+1)*0.5)\")\n nuke.message(\"Applied Wavy Preset\")\n elif s == 5:\n print(\"Initial frame is x\" + str(cf))\n nuke.thisNode()\['start_frame'].setValue(cf)\n n.clearAnimated()\n n.setExpression(\"random(frame/5+seed)*100+60\")\n nuke.message(\"Applied Constant Preset\")\n else:\n print(\"Initial frame is x\" + str(cf))\n nuke.thisNode()\['start_frame'].setValue(cf)\n n.clearAnimated()\n n.setAnimated()\n sCurve = '\{curve(((frame-%v1)%(%v6-%v1+1))+%v1) K x%v1 0 S 400 x%v2 0 x%v3 12 175 x%v4 20 x%v5 0 x%v6 0\}'\n sCurve=sCurve.replace(\"%v1\",str(cf))\n sCurve=sCurve.replace(\"%v2\",str(cf+3))\n sCurve=sCurve.replace(\"%v3\",str(cf+4))\n sCurve=sCurve.replace(\"%v4\",str(cf+7))\n sCurve=sCurve.replace(\"%v5\",str(cf+11))\n sCurve=sCurve.replace(\"%v6\",str(cf+14))\n n.fromScript(sCurve)\n nuke.message(\"Applied Loopy Preset\")\n\n" +STARTLINE} addUserKnob {20 Advanced l "Advanced Settings"} addUserKnob {7 TVelocity l "Transfer Velocity"} TVelocity 0.5 addUserKnob {7 TWindow l "Transfer window" R 0 5} TWindow 2 addUserKnob {7 Spread l "Emission Spread"} Spread 0.1 addUserKnob {26 ""} addUserKnob {41 samples l "Scanline Samples" T MultiSampleRender.samples} addUserKnob {7 Shutter} Shutter 0.5 addUserKnob {41 shutteroffset l "Shutter Offset" T MultiSampleRender.shutteroffset} addUserKnob {41 shuttercustomoffset l "" -STARTLINE T MultiSampleRender.shuttercustomoffset} addUserKnob {20 Instructions} addUserKnob {26 info l "" +STARTLINE T "Sparky v1.5\n\nEasy to use particle setup for Sparks.\n\nOutputs an image by default, but can be configured to be rendered through a specific Camera or\nto output as particles, which allows you to plug Sparky into a 3D scene.\n\nIf you wish to use the 3D version of this Gizmo, simply plug your Camera and plug an Axis to \nmove and place the sparks where you need them.\n\nFor more information about presets and changelogs, head to the Nukepedia page!"} } BackdropNode { inputs 0 name BackdropNode9 tile_color 0x557fffff label "Welcome Curious Comper!\n\nI hope you'll find answers\nto what you are looking for\ninside here! " note_font "Bitstream Vera Sans" note_font_size 111 xpos -2486 ypos -861 bdwidth 2780 bdheight 1970 } Input { inputs 0 name Camera xpos -1457 ypos 312 } Dot { name Dot3 xpos -1423 ypos 551 } Camera2 { inputs 0 translate {0 -100 1200} focal 20 haperture 24 vaperture 13.5 near 1 far 1000000 name Default2DCam xpos -1217 ypos 210 } Switch { inputs 2 which {{"\[exists parent.input0]"}} name Switch1 xpos -1227 ypos 548 } set N10a85330 [stack 0] ColorWheel { inputs 0 format "256 256 0 0 256 256 1 square_256" gamma 0.45 name ColorWheel1 xpos -1170 ypos -537 } Saturation { saturation 0 mode Maximum name Saturation1 xpos -1170 ypos -427 } FilterErode { channels all size {{abs(parent.CustomKnobs.Softness)}} filter gaussian name ErodeSoft xpos -1170 ypos -384 } Reformat { type scale scale 0.125 resize distort black_outside true name Reformat2 xpos -1170 ypos -325 } Grade { white {0.9 0.35 0.085 1} name Grade1 xpos -1170 ypos -267 } BlendMat { operation max surfaceblend modulate name BlendMat1 xpos -971 ypos -267 } Noise { inputs 0 size 750 zoffset {{frame/5+CustomKnobs.time_offset}} octaves 6 lacunarity 1.45 gain 0.6 center {1440 810} name Noise6 xpos -676 ypos -548 } set N10a0e6f0 [stack 0] Sphere { name Sphere1 xpos -770 ypos -456 } push $N10a0e6f0 Sphere { translate {{parent.input1.translate} {parent.input1.translate} {parent.input1.translate}} rotate {{parent.input1.rotate} {parent.input1.rotate} {parent.input1.rotate}} scaling {{parent.input1.scaling} {parent.input1.scaling} {parent.input1.scaling}} name Sphere2 xpos -575 ypos -460 } Switch { inputs 2 which {{"!\[exists parent.input1]"}} name Switch3 xpos -676 ypos -342 } push 0 ParticleEmitter { inputs 3 start_frame 1001 emit_from faces randomize_type "randomized direction" rate {{parent.EmissionRate}} rate_variation 0.5 rate_channel rgba.red lifetime {{parent.MaxLife}} lifetime_variation {{parent.LifeRange}} halflife {{lifetime/2.5}} velocity {{"!\[exists parent.input1]?7.5+(10*Explosivity/100):7.5+(10*Explosivity/100)*((parent.input1.uniform_scale-1)*0.25+1)"}} velocity_variation {{0.125+abs((min(100,parent.Scatter)*0.035))}} size {{"!\[exists parent.input1]?max(0.1,parent.ParticleSize):max(0.01,parent.ParticleSize)*((parent.input1.uniform_scale-1)*0.25+1)"}} size_variation 1.6 mass {{"!\[exists parent.input1]?0.5+(1-(clamp(parent.Explosivity,0,100))/100)*3.5:(0.5+((1-(clamp(parent.Explosivity,0,100))/100)*3.5))*(((parent.input1.uniform_scale-1)*0.25)+1)"}} mass_variation {{1.5*(clamp(parent.Scatter,0,100))/100}} transfer_velocity {{parent.TVelocity}} transfer_window {{parent.TWindow}} spread {{parent.Spread}} color {0.9 0.35 0.085 1} seed {{CustomKnobs.time_offset}} name SparkEmit xpos -676 ypos -267 } ParticleDirectionalForce { strength {{"parent.Direction*(\[exists parent.input1]?1+(parent.input1.uniform_scale-1)*0.85:1)"} {"parent.Direction*(\[exists parent.input1]?1+(parent.input1.uniform_scale-1)*0.85:1)"} {"parent.Direction*(\[exists parent.input1]?1+(parent.input1.uniform_scale-1)*0.85:1)"}} max_age {{1/(max(1,parent.SparkEmit.lifetime*1.25))}} name ParticleDirectionalForce xpos -676 ypos -120 } ParticleDrag { drag 0.6 name ParticleDrag xpos -676 ypos -36 } ParticleTurbulence { strength {2 0.85 4} scale {5 10 20} name ParticleTurbulence xpos -676 ypos 22 } ParticleDrag { drag 0.1 name ParticleDrag2 xpos -676 ypos 86 } ParticleGravity { to {0 {"!\[exists parent.input1]?-3:-1-(2*(parent.input1.uniform_scale))"} 0} min_age 0.1 name ParticleGravity xpos -676 ypos 148 } ParticleCurve { curves {r {curve L x0.04740819708 1 S l x0.4987964034 0.7955223322 x1 0} g {curve L x0.04740819708 1 S l x0.4987964034 0.7955223322 x1 0} b {curve L x0.04740819708 1 S l x1 0} a {curve L x0.04740819708 1 S l x0.4939824343 0.7353233099 x1 0} size {} mass {}} seed {{HiddenSeed}} name FadeOut xpos -676 ypos 201 } ParticleSettings { name ParticleSettings1 xpos -676 ypos 265 } set Na063a70 [stack 0] Dot { name Dot6 xpos -642 ypos 516 } set Na06c0d0 [stack 0] Constant { inputs 0 name Constant1 xpos -161 ypos 316 } Reformat { resize none name RootFormatSetup xpos -161 ypos 406 addUserKnob {20 User} addUserKnob {14 Overscan R 0 100} Overscan {{parent.Overscan}} } Dot { name Dot4 xpos -127 ypos 551 } set Na08a170 [stack 0] ScanlineRender { inputs 3 conservative_shader_sampling false antialiasing high overscan {{parent.RootFormatSetup.Overscan}} spatial_jitter 0.1 motion_vectors_type velocity name NO_Motionblur xpos -449 ypos 548 } VectorBlur2 { channels rgba uv forward alpha -rgba.alpha scale 0.5 motion_falloff 0.65 offset 0 grow_bbox 40 normalize false name MBlur xpos -448 ypos 708 } push $N10a85330 Dot { name Dot48 xpos -1192 ypos 640 } push $Na06c0d0 push $Na08a170 Dot { name Dot5 xpos -126 ypos 640 } ScanlineRender { inputs 3 conservative_shader_sampling false antialiasing high ambient {{parent.RootFormatSetup.Overscan}} samples 30 shutter {{parent.Shutter}} spatial_jitter 0.025 motion_vectors_type velocity name MultiSampleRender xpos -676 ypos 637 } Switch { inputs 2 which {{OutputDeep==1?0:ROption}} name Switch2 xpos -677 ypos 714 } Dot { name RenderDot xpos -643 ypos 763 } Dot { name DotSwitch xpos -643 ypos 904 } Output { name Output xpos -677 ypos 1014 } NoOp { inputs 0 name CustomKnobs tile_color 0xff9fff xpos -90 ypos -264 addUserKnob {20 User} addUserKnob {7 Softness R 0 100} Softness 10 addUserKnob {3 time_offset l Seed} time_offset {{parent.seed}} } Input { inputs 0 name Axis xpos -358 ypos -541 number 1 } Dot { name Dot7 xpos -324 ypos -479 } push $Na063a70 Dot { name Dot2 xpos -924 ypos 711 } Dot { name ParticlesDot xpos -924 ypos 831 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Spill_Correct.gizmo ================================================ Group { name Spill_Correct help "Use this tool to \"despill\" or mute colors introduced from Red/Green/Blue screens." knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nkName = k.name()\nif kName == \"neutralize\":\n n.knob('neutral_color').setEnabled(k.value())\n n.knob('plate_only').setEnabled(k.value())" addUserKnob {20 Spill_Correct} addUserKnob {68 algorithm l Algorithm t "Choose Algorithm to perform Despill.\nKillspill is using an IBK inspired process.\nAverage/Double Average/Limits are algorithms taken from Despill_Madness, extrapolated to work on red despill as well." M {KeySpill Average "Double Average R>G>B" "Double Average B>G>R" "Limit R>G>B" "Limit B>G>R" "" ""}} addUserKnob {18 screen_color l "Screen Color" t "Pick the color of the spill to remove."} screen_color {0 1 0} addUserKnob {6 screen_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 fine_tune l "Fine Tune" t "Tweak for the algorithms." R 0.5 1.5} fine_tune 1 addUserKnob {26 ""} addUserKnob {6 neutralize l "Neutralize Color" t "On a plate with an overall color tint, the despill might affect more than the spill areas. \nNeutralizing the color before the despill can solve these this problem." +STARTLINE} addUserKnob {18 neutral_color l "Neutral Color" t "Pick the color to protect.\nNote: No Neutralize will happen if one of the color values is 0, as this would break the math." +DISABLED} neutral_color {1 1 1} addUserKnob {6 neutral_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 plate_only l "Plate Only" t "By cheking this box, the Neutralize will leave the replacement color untouched. \nOtherwise, the replacement color will be tinted according to the original plate tint." -STARTLINE +DISABLED} plate_only true addUserKnob {26 ""} addUserKnob {18 replace l "Replacement Gain" t "Spill color is desaturated to preserve brightness.\nGain this up or down to fix dark/bright edges." R 0 2} replace 1 addUserKnob {6 replace_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 gamma l "Replacement Gamma" t "Gamma correct your spill replacement." R 0.5 1.5} gamma 1 addUserKnob {6 gamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {6 out_alpha l "Output Spill Alpha" t "If checked, the node will output an alpha of the area despilled. Otherwise the original alpha will be left untouched." +STARTLINE} addUserKnob {7 mix l Mix t "Mix between original and despilled version."} mix 1 addUserKnob {26 spin_copyright_div l "" +STARTLINE} addUserKnob {26 spin_copyright l "" t "© SPINVFX\nSpill_Correct\nVersion 2.0" +STARTLINE T "SPINVFX - Version 2.0 - 2017-2019 - Github Page"} } BackdropNode { inputs 0 name kbd8310 tile_color 0x5963525e label "KeySpill(IBK Style)" note_font_size 40 xpos -168 ypos -650 bdwidth 532 bdheight 471 } BackdropNode { inputs 0 name kbd9376 tile_color 0x5b655f64 label Average note_font_size 40 xpos 414 ypos -650 bdwidth 408 bdheight 359 z_order 1 } BackdropNode { inputs 0 name kbd1 tile_color 0x587077ff label "Double Average BGR" note_font_size 40 xpos 1270 ypos -648 bdwidth 408 bdheight 359 z_order 2 } BackdropNode { inputs 0 name kbd2 tile_color 0x587077ff label "Limit BGR" note_font_size 40 xpos 2127 ypos -649 bdwidth 408 bdheight 359 z_order 2 } BackdropNode { inputs 0 name kbd3 tile_color 0x5850645d label "Limit RGB" note_font_size 40 xpos 1716 ypos -647 bdwidth 408 bdheight 359 z_order 2 } BackdropNode { inputs 0 name kbd3580 tile_color 0x5850645d label "Double Average RGB" note_font_size 40 xpos 859 ypos -647 bdwidth 408 bdheight 359 z_order 2 } Input { inputs 0 name mask xpos 151 ypos 1031 number 1 } Input { inputs 0 name Input xpos 262 ypos -920 } Grade { whitepoint {{parent.neutral_color} {parent.neutral_color} {parent.neutral_color} {parent.neutral_color}} white {{parent.neutral_color.r*0.2126+parent.neutral_color.g*0.7152+parent.neutral_color.b*0.0722}} black_clamp false name Neutralize xpos 262 ypos -860 disable {{(parent.neutral_color.r==0|parent.neutral_color.g==0|parent.neutral_color.b==0)|!parent.neutralize}} } Dot { name Dot12 tile_color 0x7aa9ff00 xpos 296 ypos -725 } set N615f5000 [stack 0] Dot { name Dot13 tile_color 0x7aa9ff00 xpos 616 ypos -725 } set N615f4c00 [stack 0] Dot { name Dot24 tile_color 0x7aa9ff00 xpos 1061 ypos -725 } set N615f4800 [stack 0] Dot { name Dot26 tile_color 0x7aa9ff00 xpos 1472 ypos -725 } set N615f4400 [stack 0] Dot { name Dot31 tile_color 0x7aa9ff00 xpos 1918 ypos -725 } set N615f4000 [stack 0] Dot { name Dot36 tile_color 0x7aa9ff00 xpos 2329 ypos -725 } Dot { name Dot37 tile_color 0x7aa9ff00 xpos 2329 ypos -559 } set N61611800 [stack 0] Dot { name Dot38 tile_color 0x7aa9ff00 xpos 2439 ypos -559 } Expression { temp_name0 LimitPercentage temp_expr0 parent.fine_tune expr2 b>g*LimitPercentage?g*LimitPercentage:b name Limit_BG xpos 2405 ypos -457 } push $N61611800 Expression { temp_name0 LimitPercentage temp_expr0 parent.fine_tune expr1 g>r*LimitPercentage?r*LimitPercentage:g name Limit_GR xpos 2295 ypos -459 } push $N61611800 Dot { name Dot39 tile_color 0x7aa9ff00 xpos 2211 ypos -559 } Expression { temp_name0 LimitPercentage temp_expr0 parent.fine_tune expr0 r>b*LimitPercentage?b*LimitPercentage:r name Limit_RB xpos 2177 ypos -460 } Switch { inputs 3 which {{parent.screen_color.r>max(parent.screen_color.g,parent.screen_color.b)?0:parent.screen_color.b>=max(parent.screen_color.r,parent.screen_color.g)?2:1}} name Switch_maxRGB6 xpos 2295 ypos -360 } Dot { name Dot40 xpos 2329 ypos -130 } push $N615f4000 Dot { name Dot32 tile_color 0x7aa9ff00 xpos 1918 ypos -557 } set N61637800 [stack 0] Dot { name Dot33 tile_color 0x7aa9ff00 xpos 2028 ypos -557 } Expression { temp_name0 LimitPercentage temp_expr0 parent.fine_tune expr2 b>r*LimitPercentage?r*LimitPercentage:b name Limit_BR xpos 1994 ypos -455 } push $N61637800 Expression { temp_name0 LimitPercentage temp_expr0 parent.fine_tune expr1 g>b*LimitPercentage?b*LimitPercentage:g name Limit_GB xpos 1884 ypos -457 } push $N61637800 Dot { name Dot34 tile_color 0x7aa9ff00 xpos 1800 ypos -557 } Expression { temp_name0 LimitPercentage temp_expr0 parent.fine_tune expr0 r>g*LimitPercentage?g*LimitPercentage:r name Limit_RG xpos 1766 ypos -458 } Switch { inputs 3 which {{parent.screen_color.r>max(parent.screen_color.g,parent.screen_color.b)?0:parent.screen_color.b>=max(parent.screen_color.r,parent.screen_color.g)?2:1}} name Switch_maxRGB5 xpos 1884 ypos -358 } Dot { name Dot35 xpos 1918 ypos -119 } push $N615f4400 Dot { name Dot27 tile_color 0x7aa9ff00 xpos 1472 ypos -558 } set N6165f800 [stack 0] Dot { name Dot28 tile_color 0x7aa9ff00 xpos 1582 ypos -558 } Expression { temp_name0 LimitPercentage temp_expr0 parent.fine_tune expr2 b>(2*g+r)/2*LimitPercentage?(r+2*g)/2*LimitPercentage:b name DoubleAverage_B_2 xpos 1548 ypos -456 } push $N6165f800 Expression { temp_name0 LimitPercentage temp_expr0 parent.fine_tune expr1 g>(b+2*r)/3*LimitPercentage?(b+2*r)/3*LimitPercentage:g name DoubleAverage_G_2 xpos 1438 ypos -458 } push $N6165f800 Dot { name Dot29 tile_color 0x7aa9ff00 xpos 1354 ypos -558 } Expression { temp_name0 LimitPercentage temp_expr0 parent.fine_tune expr0 r>(g+2*b)/3*LimitPercentage?(g+2*b)/3*LimitPercentage:r name DoubleAverage_R_2 xpos 1320 ypos -459 } Switch { inputs 3 which {{parent.screen_color.r>max(parent.screen_color.g,parent.screen_color.b)?0:parent.screen_color.b>=max(parent.screen_color.r,parent.screen_color.g)?2:1}} name Switch_maxRGB4 xpos 1438 ypos -359 } Dot { name Dot30 xpos 1472 ypos -130 } push $N615f4800 Dot { name Dot21 tile_color 0x7aa9ff00 xpos 1061 ypos -557 } set N61689800 [stack 0] Dot { name Dot22 tile_color 0x7aa9ff00 xpos 1171 ypos -557 } Expression { temp_name0 LimitPercentage temp_expr0 parent.fine_tune expr2 b>(g+2*r)/2*LimitPercentage?(2*r+g)/2*LimitPercentage:b name DoubleAverage_B_1 xpos 1137 ypos -455 } push $N61689800 Expression { temp_name0 LimitPercentage temp_expr0 parent.fine_tune expr1 g>(2*b+r)/3*LimitPercentage?(2*b+r)/3*LimitPercentage:g name DoubleAverage_G_1 xpos 1027 ypos -457 } push $N61689800 Dot { name Dot23 tile_color 0x7aa9ff00 xpos 943 ypos -557 } Expression { temp_name0 LimitPercentage temp_expr0 parent.fine_tune expr0 r>(2*g+b)/3*LimitPercentage?(2*g+b)/3*LimitPercentage:r name DoubleAverage_R_1 xpos 909 ypos -458 } Switch { inputs 3 which {{parent.screen_color.r>max(parent.screen_color.g,parent.screen_color.b)?0:parent.screen_color.b>=max(parent.screen_color.r,parent.screen_color.g)?2:1}} name Switch_maxRGB3 xpos 1027 ypos -358 } Dot { name Dot25 xpos 1061 ypos -119 } push $N615f4c00 Dot { name Dot6 tile_color 0x7aa9ff00 xpos 616 ypos -560 } set N636b1800 [stack 0] Dot { name Dot15 tile_color 0x7aa9ff00 xpos 726 ypos -560 } Expression { temp_name0 LimitPercentage temp_expr0 parent.fine_tune expr2 b>(r+g)/2*LimitPercentage?(r+g)/2*LimitPercentage:b name Average_B xpos 692 ypos -458 } push $N636b1800 Expression { temp_name0 LimitPercentage temp_expr0 parent.fine_tune expr1 g>(b+r)/2*LimitPercentage?(b+r)/2*LimitPercentage:g name Average_G xpos 582 ypos -460 } push $N636b1800 Dot { name Dot14 tile_color 0x7aa9ff00 xpos 498 ypos -560 } Expression { temp_name0 LimitPercentage temp_expr0 parent.fine_tune expr0 r>(g+b)/2*LimitPercentage?(g+b)/2*LimitPercentage:r name Average_R xpos 464 ypos -461 } Switch { inputs 3 which {{parent.screen_color.r>max(parent.screen_color.g,parent.screen_color.b)?0:parent.screen_color.b>=max(parent.screen_color.r,parent.screen_color.g)?2:1}} name Switch_maxRGB2 xpos 582 ypos -361 } Dot { name Dot20 xpos 616 ypos -130 } push $N615f5000 Dot { name Dot9 tile_color 0x7aa9ff00 xpos 296 ypos -560 } set N636d9800 [stack 0] Dot { name Dot3 tile_color 0x7aa9ff00 xpos 296 ypos -505 } set N636d9400 [stack 0] Dot { name Dot11 tile_color 0x7aa9ff00 xpos 229 ypos -505 } set N636d9000 [stack 0] Expression { temp_name0 weight temp_expr0 parent.fine_tune-0.5 channel0 rgba expr0 (b-(g*weight+r*(1-weight)))/(parent.screen_color.b-(parent.screen_color.g*weight+parent.screen_color.r*(1-weight))) name SpillMatte_B xpos 195 ypos -451 } push $N636d9000 Dot { name Dot10 tile_color 0x7aa9ff00 xpos 122 ypos -505 } set N636d8800 [stack 0] Expression { temp_name0 weight temp_expr0 parent.fine_tune-0.5 channel0 rgba expr0 (g-(r*weight+b*(1-weight)))/(parent.screen_color.g-(parent.screen_color.r*weight+parent.screen_color.b*(1-weight))) name SpillMatte_G xpos 88 ypos -451 } push $N636d8800 Dot { name Dot1 tile_color 0x7aa9ff00 xpos 25 ypos -505 } Expression { temp_name0 weight temp_expr0 parent.fine_tune-0.5 channel0 rgba expr0 (r-(b*weight+g*(1-weight)))/(parent.screen_color.r-(parent.screen_color.b*weight+parent.screen_color.g*(1-weight))) name SpillMatte_R xpos -9 ypos -454 } Switch { inputs 3 which {{parent.screen_color.r>max(parent.screen_color.g,parent.screen_color.b)?0:parent.screen_color.b>=max(parent.screen_color.r,parent.screen_color.g)?2:1}} name Switch_maxRGB1 xpos 89 ypos -395 } Clamp { maximum_enable false name Clamp1 xpos 89 ypos -365 } Expression { channel0 rgba expr0 "isinf(r)? 0:r" name fix_inf xpos 89 ypos -327 } Expression { channel0 rgba expr0 "isnan(r)? 0:r" name fix_nan xpos 89 ypos -301 } Dot { name Dot8 xpos 123 ypos -276 } Dot { name Dot7 xpos -50 ypos -276 } push $N636d9800 Dot { name Dot2 tile_color 0x7aa9ff00 xpos -84 ypos -560 } Expression { expr0 parent.screen_color.r expr1 parent.screen_color.g expr2 parent.screen_color.b name Screen_Color xpos -118 ypos -479 } Dot { name Dot47 xpos -84 ypos -419 } set N2421e800 [stack 0] Merge2 { inputs 2 operation multiply bbox B name Merge1 xpos -118 ypos -251 } push $N636d9400 Merge2 { inputs 2 operation from bbox B name Merge2 xpos 262 ypos -251 } Dot { name Dot4 xpos 296 ypos -139 } Switch { inputs 6 which {{parent.algorithm}} name Algorithm_Switch xpos 582 ypos 225 } Dot { name Dot19 tile_color 0xcccccc00 xpos 616 ypos 310 } set N6372e800 [stack 0] push $N615f5000 Dot { name Dot17 tile_color 0x7aa9ff00 xpos -236 ypos -725 } Dot { name Dot18 tile_color 0x7aa9ff00 xpos -236 ypos 310 } set N6372e000 [stack 0] Merge2 { inputs 2 operation from bbox B name Merge3 xpos 371 ypos 306 } Saturation { saturation 0 name DeSaturate xpos 371 ypos 362 } set N63755800 [stack 0] Input { inputs 0 name Inputbg xpos -198 ypos 364 number 2 } push $N2421e800 Dot { name Dot48 xpos -155 ypos -419 } Saturation { saturation 0 name DeSaturate1 xpos -68 ypos 211 } Merge2 { inputs 2 operation divide name Merge7 xpos -68 ypos 362 } Merge2 { inputs 2 operation multiply name Merge6 xpos 88 ypos 362 } set N2421ec00 [stack 0] Dot { name Dot49 xpos 122 ypos 416 } push $N63755800 Switch { inputs 2 which {{"\[exists parent.input2]"}} name Switch2 xpos 371 ypos 412 } Dot { name Dot43 tile_color 0x7aa9ff00 xpos 405 ypos 450 } set N63755400 [stack 0] Multiply { value {{parent.replace} {parent.replace} {parent.replace} {parent.replace}} name Replace_color_Mult xpos 371 ypos 484 } Gamma { value {{parent.gamma} {parent.gamma} {parent.gamma} {parent.gamma}} name Gamma xpos 371 ypos 536 } Dot { name Dot16 tile_color 0x7aa9ff00 xpos 405 ypos 609 } push $N6372e800 Grade { whitepoint {{parent.neutral_color} {parent.neutral_color} {parent.neutral_color} {parent.neutral_color}} white {{parent.neutral_color.r*0.2126+parent.neutral_color.g*0.7152+parent.neutral_color.b*0.0722}} reverse true black_clamp false name Neutralize1 xpos 582 ypos 456 disable {{((parent.neutral_color.r==0|parent.neutral_color.g==0|parent.neutral_color.b==0)|!parent.neutralize)|!parent.plate_only}} } Merge2 { inputs 2 operation plus bbox B output rgb name Merge5 xpos 582 ypos 605 } Dot { name Dot44 tile_color 0x4b5ec600 xpos 616 ypos 692 } push $N6372e000 Copy { inputs 2 from0 rgba.red to0 rgba.red from1 rgba.green to1 rgba.green from2 rgba.blue to2 rgba.blue bbox B name Copy2 xpos -270 ypos 670 } push $N6372e000 Dot { name Dot46 tile_color 0x7aa9ff00 xpos -346 ypos 310 } Dot { name Dot41 tile_color 0x7aa9ff00 xpos -346 ypos 879 } set N63784c00 [stack 0] Dissolve { inputs 2 which {{parent.mix}} name Dissolve1 xpos -270 ypos 869 } set N63784800 [stack 0] Expression { expr0 0 expr1 0 expr2 0 expr3 1 name Expression1 xpos 26 ypos 875 } Switch { inputs 2 which {{"\[exists parent.input1] "}} name Switch1 xpos 26 ypos 1031 } Invert { channels alpha name Invert1 xpos -88 ypos 1025 } set N637afc00 [stack 0] push $N63755400 Dot { name Dot5 tile_color 0x7aa9ff00 xpos 295 ypos 450 } Multiply { value {{parent.mix}} name Multiply1 xpos 261 ypos 917 } Dot { name Dot45 tile_color 0x7aa9ff00 xpos 295 ypos 1162 } Merge2 { inputs 2 operation stencil bbox B name Merge4 xpos -88 ypos 1158 } Clamp { channels alpha name Clamp2 xpos -88 ypos 1238 } push $N637afc00 push $N63784c00 Dot { name Dot42 tile_color 0x7aa9ff00 xpos -346 ypos 1035 } push $N63784800 Keymix { inputs 3 bbox B name Keymix1 xpos -270 ypos 1025 } Copy { inputs 2 from0 rgba.red to0 rgba.alpha bbox B name Copy1 xpos -270 ypos 1238 disable {{!parent.out_alpha}} } Grade { whitepoint {{parent.neutral_color} {parent.neutral_color} {parent.neutral_color} {parent.neutral_color}} white {{parent.neutral_color.r*0.2126+parent.neutral_color.g*0.7152+parent.neutral_color.b*0.0722}} reverse true black_clamp false name Neutralize2 xpos -270 ypos 1332 disable {{((parent.neutral_color.r==0|parent.neutral_color.g==0|parent.neutral_color.b==0)|!parent.neutralize)|parent.plate_only}} } Output { name Output1 xpos -270 ypos 1429 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_SpotFlare.gizmo ================================================ Group { inputs 0 name SpotFlare tile_color 0x2f66ff addUserKnob {20 User} addUserKnob {26 Headline l "" +STARTLINE T "SpotFlarev1.0"} addUserKnob {26 HeadlineB l "" +STARTLINE T "by Mads Hagbarth Lund"} addUserKnob {26 devider001 l "General"} addUserKnob {12 Position} Position {1036 496} addUserKnob {7 Gain} Gain 0.63 addUserKnob {7 Gamma R 0 5} Gamma 1.12 addUserKnob {7 Scale} Scale 0.55 addUserKnob {6 SoftClip t "By default, spotflare will be very bright at the center. Use softclip to limit the maximum brightness." +STARTLINE} addUserKnob {7 softclipmax l max -STARTLINE R 1 100} softclipmax 10 addUserKnob {6 glow_enable l Glow +STARTLINE} glow_enable true addUserKnob {6 EffectOnly l "Effect Only" +STARTLINE} EffectOnly true addUserKnob {22 FixJitter l "Fix Jitter" t "This does nothing... yet still fixes the bug with the expression node not updating its cashe from time to time.\nPlease fix The Foundry!" +STARTLINE} addUserKnob {26 devider02 l "Color"} addUserKnob {18 GainTint} GainTint {0.601217 0.681301 1} addUserKnob {6 GainTint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} GainTint_panelDropped true addUserKnob {18 GammaTint} GammaTint {1 1 1} addUserKnob {6 GammaTint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} GammaTint_panelDropped true addUserKnob {26 devide01 l "" +STARTLINE T " "} addUserKnob {22 Reset l "Reset Color" T "nuke.thisNode().knob(\"GainTint\").setValue(1,0)\nnuke.thisNode().knob(\"GainTint\").setValue(1,1)\nnuke.thisNode().knob(\"GainTint\").setValue(1,2)\nnuke.thisNode().knob(\"GainTint\").setValue(1,3)\nnuke.thisNode().knob(\"GammaTint\").setValue(1,0)\nnuke.thisNode().knob(\"GammaTint\").setValue(1,1)\nnuke.thisNode().knob(\"GammaTint\").setValue(1,2)\nnuke.thisNode().knob(\"GammaTint\").setValue(1,3)" +STARTLINE} addUserKnob {26 DeviderShimmer l "Shimmer"} addUserKnob {6 shimmer_enable l Shimmer +STARTLINE} shimmer_enable true addUserKnob {7 lacunarity l Detail R 0 5} lacunarity 3.5 addUserKnob {7 noise_gain l Gain} noise_gain 1 addUserKnob {7 Speed} Speed 0.76 addUserKnob {7 Noise_Gang l "Time Offset" R 0 1000} Noise_Gang 240 addUserKnob {26 devider04 l "Masking"} addUserKnob {6 Mask +STARTLINE} addUserKnob {7 MaskRotation l "Mask Rotation"} MaskRotation 0.31 addUserKnob {7 MaskGain l "Mask Gain"} MaskGain 0.4 addUserKnob {7 MaskSoftness R 0 10} MaskSoftness 2.35 } BackdropNode { inputs 0 name BackdropNode5 tile_color 0x71c67100 label "Spot Facing" note_font_size 42 xpos -1463 ypos 208 bdwidth 252 bdheight 258 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x388e8e00 label Glow note_font_size 42 xpos -597 ypos 209 bdwidth 280 bdheight 258 } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x7171c600 label Spike note_font_size 42 xpos -222 ypos 207 bdwidth 270 bdheight 257 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0xffffffff gl_color 0xff label "WELCOME TO SPOTFLARE" note_font_size 42 xpos -904 ypos -206 bdwidth 523 bdheight 138 } BackdropNode { inputs 0 name BackdropNode6 tile_color 0xff label "PLEASE ENJOY" note_font_size 42 xpos -801 ypos 896 bdwidth 333 bdheight 160 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x8e388e00 label Glare note_font_size 42 xpos -1156 ypos 207 bdwidth 468 bdheight 298 } StickyNote { inputs 0 name StickyNote2 label "This is a super inefficient way\nto avoid the 1-0 seam and\na major performence hit.\nIf anyone have a better solution,\nplease mail me! =)" note_font_size 8 xpos -1045 ypos 350 } StickyNote { inputs 0 name StickyNote1 tile_color 0xcc0000ff gl_color 0xcc0000ff label "not yet implamented" xpos -222 ypos 206 } Dot { inputs 0 name Dot19 tile_color 0xff0000ff xpos -674 ypos -127 hide_input true } Dot { inputs 0 name Dot20 tile_color 0xffff00ff xpos -658 ypos -127 hide_input true } Dot { inputs 0 name Dot21 tile_color 0xff00ff xpos -641 ypos -127 hide_input true } Dot { inputs 0 name Dot22 tile_color 0xffffff xpos -624 ypos -127 hide_input true } Dot { inputs 0 name Dot23 tile_color 0xffff xpos -607 ypos -127 hide_input true } Input { inputs 0 name Input1 xpos -674 ypos -106 } Dot { name Dot13 xpos -640 ypos -25 } set N60fa3bb0 [stack 0] Reformat { black_outside true name Reformat1 xpos -674 ypos 11 } Shuffle { red black green black blue black alpha black name Shuffle3 xpos -674 ypos 35 } Dot { name Dot1 xpos -640 ypos 131 } set N60fa4600 [stack 0] Dot { name Dot9 xpos -456 ypos 131 } set N60fa8e30 [stack 0] Dot { name Dot2 xpos -61 ypos 131 } Expression { expr0 "(atan(x-parent.Position.x,-y--parent.Position.y)+ (pi))/(pi*2)" name Expression8 xpos -95 ypos 268 } Expression { expr0 sin(r*(16*pi)) name Expression14 xpos -95 ypos 310 } Grade { white 0.89 gamma 0.2 name Grade6 xpos -95 ypos 352 } Shuffle { green red blue red alpha red name Shuffle2 xpos -95 ypos 396 } push $N60fa8e30 Expression { temp_name0 xd temp_expr0 parent.Position.x-x temp_name1 yd temp_expr1 parent.Position.y-y temp_name2 dist temp_expr2 "sqrt(xd*xd + yd*yd)" temp_name3 scale temp_expr3 "dist / ((parent.Scale*1))" expr0 scale channel1 {-rgba.red -rgba.green -rgba.blue none} channel2 {-rgba.red -rgba.green -rgba.blue none} channel3 {none none none -rgba.alpha} enable_mix_luminance false name distance xpos -490 ypos 262 } Grade { white {{pow(1-parent.Gain,4)}} gamma {{pow2(parent.Gamma)}} name Grade16 xpos -490 ypos 305 } Expression { temp_name3 invsqr temp_expr3 isnan(r)?0:1/(r*r) expr0 invsqr expr1 invsqr expr2 invsqr name Inverse_Square xpos -490 ypos 341 } Grade { white {{parent.GainTint.r} {parent.GainTint.g} {parent.GainTint.b} 1} white_panelDropped true multiply {1 1 1 1} multiply_panelDropped true gamma {{parent.GammaTint} {parent.GammaTint} {parent.GammaTint} 1} name Grade2 xpos -490 ypos 387 } Clamp { maximum 59999 MinClampTo_enable true MaxClampTo {{maximum}} MaxClampTo_enable true name Clamp_Superbrights xpos -490 ypos 428 } set N60fa9f60 [stack 0] Merge2 { inputs 2 operation multiply name Merge3 xpos -95 ypos 434 } Dot { name Dot3 xpos -61 ypos 708 } Dot { name Dot15 xpos -572 ypos 708 } push $N60fa4600 Dot { name Dot16 xpos -750 ypos 131 } set N60fa4970 [stack 0] Dot { name Dot17 xpos -868 ypos 131 } Dot { name Dot7 xpos -1332 ypos 131 } Expression { temp_name0 theta temp_expr0 pi*(parent.MaskRotation*2) temp_name1 px temp_expr1 "cos(theta) * (x-parent.Position.x) - sin(theta) * (y-parent.Position.y) + parent.Position.x" temp_name2 py temp_expr2 "sin(theta) * (x-parent.Position.x) + cos(theta) * (y-parent.Position.y) + parent.Position.y" temp_name3 val temp_expr3 "(atan(px-parent.Position.x,-py--parent.Position.y)+ pi)/+ (pi*2)" expr0 "smoothstep(0,1, sin(val*pi))" name Expression1 xpos -1366 ypos 298 } Grade { black 0.033 white {{(pow(parent.MaskGain,2)*10)+0.0001}} gamma {{(pow(parent.MaskSoftness,2)/2)+0.15}} name Grade9 xpos -1366 ypos 336 } Expression { expr0 max(0,1-r) expr1 max(0,1-r) expr2 max(0,1-r) name Expression17 xpos -1366 ypos 380 } Dot { name Dot8 xpos -1332 ypos 745 } push $N60fa4970 Dot { name Dot4 xpos -750 ypos 230 } set N60fa6180 [stack 0] Dot { name Dot5 xpos -868 ypos 230 } Expression { expr0 "(atan(x-parent.Position.x,-y--parent.Position.y)+ pi)/+ (pi*2)" name inversefacing xpos -902 ypos 267 } set N60fa6860 [stack 0] Dot { name Dot18 xpos -978 ypos 270 } Expression { expr0 pow(sin(r*pi),16) name reduction xpos -1012 ypos 313 } set N60fa6f40 [stack 0] Dot { name Dot10 xpos -978 ypos 415 } push $N60fa6f40 push $N60fa6860 ShuffleCopy { inputs 2 green red alpha alpha2 name ShuffleCopy1 xpos -902 ypos 313 } Expression { temp_name0 octaves temp_expr0 5 temp_name1 lacunarity temp_expr1 parent.lacunarity temp_name2 gain temp_expr2 parent.noise_gain temp_name3 Noise temp_expr3 g>0.0001?fBm(r,1,1+((frame+parent.Noise_Gang)/((1.0001-parent.Speed)*10000)),octaves,lacunarity,gain):0 expr0 Noise expr1 Noise expr2 Noise name noise_top xpos -902 ypos 348 } Grade { black 0.54 gamma 0.585 black_clamp false name Grade14 xpos -902 ypos 388 } push $N60fa6180 Expression { temp_name0 xd temp_expr0 parent.Position.x-x temp_name1 yd temp_expr1 parent.Position.y-y temp_name2 dist temp_expr2 "sqrt(xd*xd + yd*yd)" expr0 "(atan(x-parent.Position.x,y-parent.Position.y)+ pi)/+ (pi*2)" expr1 dist/width name facing xpos -784 ypos 267 } Expression { temp_name0 octaves temp_expr0 5 temp_name1 lacunarity temp_expr1 parent.lacunarity temp_name2 gain temp_expr2 parent.noise_gain temp_name3 Noise temp_expr3 fBm(r,1,1+((frame+8+parent.Noise_Gang)/((1.0001-parent.Speed)*10000)),octaves,lacunarity,gain) expr0 Noise expr1 Noise expr2 Noise name noise xpos -784 ypos 314 } Grade { black 0.54 gamma 0.585 black_clamp false name Grade15 xpos -784 ypos 412 } Merge2 { inputs 2+1 operation copy maskChannelMask rgba.red name FixSeam xpos -902 ypos 412 } push $N60fa9f60 Merge2 { inputs 2 operation multiply name Merge1 xpos -902 ypos 436 } Clamp { maximum_enable false name Clamp_Negative_Numbers xpos -902 ypos 460 } Dot { name Dot6 xpos -868 ypos 660 } push $N60fa9f60 Dot { name Dot11 xpos -456 ypos 587 } push $N60fa4600 Merge2 { inputs 2 operation plus name Merge6 xpos -674 ypos 584 disable {{1-parent.glow_enable}} } Merge2 { inputs 2 operation plus name Merge2 xpos -674 ypos 657 disable {{1-parent.shimmer_enable x2012 1}} } Merge2 { inputs 2 operation multiply name Merge5 xpos -674 ypos 742 disable {{1-parent.Mask}} } SoftClip { conversion "preserve hue and saturation" softclip_min 1 softclip_max {{parent.softclipmax}} name SoftClip1 xpos -674 ypos 766 disable {{1-parent.SoftClip}} } push $N60fa3bb0 Dot { name Dot12 xpos -689 ypos -25 } Grade { multiply 0 black_clamp false enable_mix_luminance false name Grade1 xpos -723 ypos 77 disable {{1-parent.EffectOnly}} } Dot { name Dot14 xpos -692 ypos 794 } Merge2 { inputs 2 operation plus name Merge7 xpos -674 ypos 791 } Output { name Output1 xpos -674 ypos 991 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_SpotLight.gizmo ================================================ Group { name SpotLight onCreate "n = nuke.thisNode()\nn.knob('outerRadius').setRange(0, 2)\nn.knob('innerRadius').setRange(0, 2)\nn.knob('outerBlur').setRange(0, 400)\nn.knob('innerBlur').setRange(0, 400)\nn.knob('overallSize').setRange(0, 4)" tile_color 0x4c7b7fff note_font "Bitstream Vera Sans Bold" note_font_color 0xffffffff selected true addUserKnob {20 SpotLight} addUserKnob {6 replace +STARTLINE} replace true addUserKnob {6 invert -STARTLINE} addUserKnob {12 center} center {1024 1024} addUserKnob {22 setCenter l "set center" -STARTLINE T "n = nuke.thisNode()\nw= n.width()\nh=n.height()\nn\['center'].setValue(\[w/2,h/2])"} addUserKnob {14 overallSize l "Overall Size" R 0 4} overallSize 1 addUserKnob {26 outerMask l " Outer Mask" T " "} addUserKnob {14 outerRadius l size R 0 2} outerRadius 0.4 addUserKnob {41 softness T RadialOuter.softness} addUserKnob {41 plinear l "perceptually linear" -STARTLINE T RadialOuter.plinear} addUserKnob {41 outerBlur l blur T Blur2.size} addUserKnob {26 innerMask l " Inner Mask" T " "} addUserKnob {6 innerMaskCheck l toggle -STARTLINE} addUserKnob {14 innerRadius l size R 0 2} innerRadius 0.3 addUserKnob {41 softness_1 l softness T RadialInner.softness} addUserKnob {41 plinear_1 l "perceptually linear" -STARTLINE T RadialInner.plinear} addUserKnob {41 innerBlur l blur T Blur1.size} addUserKnob {26 ""} addUserKnob {41 overscanPercent l "Overscan Percent" T BBoxToFormat.overscanPercent} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge1.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge1.fringe} addUserKnob {41 mix T RadialOuter.opacity} addUserKnob {20 Noise} addUserKnob {6 noiseCheck l Enable +STARTLINE} addUserKnob {41 type T Noise1.type} addUserKnob {41 size l x/ysize T Noise1.size} addUserKnob {7 noiseZ l z R 0 5} addUserKnob {7 zSpeed l "z speed"} addUserKnob {41 octaves T Noise1.octaves} addUserKnob {41 nyquist l "clip at Nyquist limit" T Noise1.nyquist} addUserKnob {41 lacunarity T Noise1.lacunarity} addUserKnob {41 gain T Noise1.gain} addUserKnob {41 gamma T Noise1.gamma} addUserKnob {41 noiseMix l mix T Noise1.opacity} } Input { inputs 0 name Inputmask xpos -201 ypos 284 number 1 } Input { inputs 0 name Input xpos -487 ypos -803 } Reformat { type "to box" box_width {{"\[exists input0] ? parent.width : root.format.w"}} box_height {{"\[exists input0] ? parent.height : root.format.h"}} box_fixed true resize none center false pbb true name Reformat1 xpos -489 ypos -647 } Dot { name Dot1 note_font_size 41 xpos -455 ypos -492 } set N2f9d1d00 [stack 0] Dot { name Dot5 note_font_size 41 xpos -321 ypos -492 } set N2f9d2b00 [stack 0] Radial { output {-rgba.red -rgba.green -rgba.blue rgba.alpha} cliptype none replace true invert_mask true area {{"parent.center.x-(1+( (width/2)* (innerRadius.w*overallSize) ) )"} {"parent.center.y-(1+( (width/2)* (innerRadius.h*overallSize) ) )"} {"parent.center.x+(1+( (width/2)* (innerRadius.w*overallSize) ) )"} {"parent.center.y+(1+( (width/2)* (innerRadius.h*overallSize)) )"}} softness 0.8 name RadialInner xpos -355 ypos -409 } Blur { channels {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Blur1 label "\[value size]" xpos -355 ypos -349 } Dot { name Dot6 note_font_size 41 xpos -321 ypos -242 } push $N2f9d2b00 Dot { name Dot3 note_font_size 41 xpos -180 ypos -492 } set N907bdd00 [stack 0] Radial { output {-rgba.red -rgba.green -rgba.blue rgba.alpha} cliptype none replace true area {{"parent.center.x-(1+( (width/2)* (outerRadius.w*overallSize) ) )"} {"parent.center.y-(1+( (width/2)* (outerRadius.h*overallSize) ) )"} {"parent.center.x+(1+( (width/2)* (outerRadius.w*overallSize) ) )"} {"parent.center.y+(1+( (width/2)* (outerRadius.h*overallSize) ) )"}} name RadialOuter xpos -214 ypos -409 } Blur { channels {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Blur2 label "\[value size]" xpos -214 ypos -351 } Multiply { inputs 1+1 channels {-rgba.red -rgba.green -rgba.blue rgba.alpha} value 0 name Multiply2 label "\[value value]" xpos -214 ypos -258 disable {{!parent.innerMaskCheck}} } set N65c2f900 [stack 0] push $N907bdd00 Dot { name Dot2 note_font_size 41 xpos -51 ypos -492 } Noise { output {-rgba.red -rgba.green -rgba.blue rgba.alpha} replace true size 250 zoffset {{parent.noiseZ+(frame*zSpeed)*.2}} translate {{parent.center.x} {parent.center.y}} scale {{parent.overallSize} {parent.overallSize}} name Noise1 xpos -85 ypos -404 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -85 ypos -246 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "import convertMergeToMergeAll;convertMergeToMergeAll.convertMergeToMergeAll()"} } Dot { name Dot9 note_font_size 41 xpos -51 ypos -172 } push $N65c2f900 Multiply { inputs 1+1 channels {-rgba.red -rgba.green -rgba.blue rgba.alpha} value 0 invert_mask true name Multiply1 label "\[value value]" xpos -214 ypos -188 disable {{!parent.noiseCheck}} } Shuffle { red alpha green alpha blue alpha name Shuffle2 tile_color 0xffffffff note_font_size 22 note_font_color 0xffffffff xpos -214 ypos -115 } BlackOutside { name BlackOutside1 xpos -214 ypos -43 } Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"overscanType\":\n if n.knob(\"overscanType\").getValue() == 1:\n n.knob(\"overscanPercent\").setVisible(True)\n n.knob(\"overscan\").setVisible(False)\n else:\n n.knob(\"overscanPercent\").setVisible(False)\n n.knob(\"overscan\").setVisible(True)" tile_color 0xa57aaaff note_font "Verdana Bold" note_font_color 0xffffffff xpos -214 ypos -2 disable {{!parent.invert}} addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} overscanType Percentage addUserKnob {14 overscan l Overscan +HIDDEN R 0 400} addUserKnob {14 overscanPercent l "Overscan Percent" R 1 4} overscanPercent 1.1 addUserKnob {20 inputBbox l "BBox Data" n 1} inputBbox 0 addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set N953b1600 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set N953b0f00 [stack 0] push $N953b1600 Crop { box {{curve} {curve} {input.width} {input.height}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N953b0800 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set N953b0100 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{input.bbox.r/2} {input.bbox.t/2}} shutteroffset centred name Transform1 xpos 120 ypos 555 } push $N953b0100 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $N953b0f00 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $N953b0800 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N19bf0800 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $N19bf0800 NoOp { name OutputBBox1 xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group Invert { channels rgba name Invert1 xpos -214 ypos 40 disable {{!parent.invert}} } Dot { name Dot12 note_font_size 41 xpos -180 ypos 113 } set N658e6b00 [stack 0] push $N658e6b00 push $N2f9d1d00 Dot { name Dot10 note_font_size 41 xpos -455 ypos -152 } set N658e6400 [stack 0] Dot { name Dot11 note_font_size 41 xpos -329 ypos -152 } Merge2 { inputs 2 name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -363 ypos 109 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "import convertMergeToMergeAll;convertMergeToMergeAll.convertMergeToMergeAll()"} } Switch { inputs 2 which {{parent.replace}} name Switch2 label "\[value which]" xpos -363 ypos 163 } Dot { name Dot8 note_font_size 41 xpos -329 ypos 230 } push $N658e6400 Merge2 { inputs 2+1 operation copy name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -489 ypos 284 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "import convertMergeToMergeAll;convertMergeToMergeAll.convertMergeToMergeAll()"} } push $N2f9d1d00 Dot { name Dot7 note_font_size 41 xpos -699 ypos -492 } Dot { name Dot4 note_font_size 41 xpos -699 ypos 389 } Switch { inputs 2 which {{"parent.outerRadius == 0 ? 0 : 1"}} name Switch1 label "\[value which]" xpos -489 ypos 379 } BlackOutside { name BlackOutside2 xpos -489 ypos 456 } Output { name Output1 xpos -489 ypos 592 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Suppress_RGBCMY.gizmo ================================================ Group { name Suppress_RGBCMY help "Suppress specific colors in RGBCMY space" tile_color 0xa3bbe6ff selected true addUserKnob {20 colorSuppress l "Color Suppression"} addUserKnob {7 red l Red t "Suppress this color"} red 1 addUserKnob {18 red_luma l "Red Luma" t "Restore the luma of this color.\nCan be used to introduce other colors as well."} red_luma 1 addUserKnob {6 red_luma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {7 green l Green t "Suppress this color"} green 1 addUserKnob {18 green_luma l "Green Luma" t "Restore the luma of this color.\nCan be used to introduce other colors as well."} green_luma 1 addUserKnob {6 green_luma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {7 blue l Blue t "Suppress this color"} blue 1 addUserKnob {18 blue_luma l "Blue Luma" t "Restore the luma of this color.\nCan be used to introduce other colors as well."} blue_luma 1 addUserKnob {6 blue_luma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {7 cyan l Cyan t "Suppress this color"} cyan 1 addUserKnob {18 cyan_luma l "Cyan Luma" t "Restore the luma of this color.\nCan be used to introduce other colors as well."} cyan_luma 1 addUserKnob {6 cyan_luma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {7 magenta l Magenta t "Suppress this color"} magenta 1 addUserKnob {18 magenta_luma l "Magenta Luma" t "Restore the luma of this color.\nCan be used to introduce other colors as well."} magenta_luma 1 addUserKnob {6 magenta_luma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {7 yellow l Yellow t "Suppress this color"} yellow 1 addUserKnob {18 yellow_luma l "Yellow Luma" t "Restore the luma of this color.\nCan be used to introduce other colors as well."} yellow_luma 1 addUserKnob {6 yellow_luma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge7.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge7.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge7.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge7.fringe} addUserKnob {41 mix T Merge7.mix} addUserKnob {26 "" +STARTLINE} addUserKnob {26 spin_copyright l "" t "© SPINVFX\nSuppress_RGBCMY\nVersion 1.2\n2017-2018" +STARTLINE T "SPINVFX - Version 1.2 - 2017-2018 - Github Page"} } Input { inputs 0 name Inputmask xpos -267 ypos 1207 number 1 } Input { inputs 0 name img xpos -389 ypos -272 } Dot { name Dot7 xpos -355 ypos -137 } set N4b898800 [stack 0] Dot { name Dot3 xpos -106 ypos -137 } Dot { name Dot8 xpos -106 ypos 11 } set N4a04f900 [stack 0] Dot { name Dot1 xpos -106 ypos 211 } set N4a04f200 [stack 0] Dot { name Dot6 xpos -106 ypos 399 } set N4a04eb00 [stack 0] Dot { name Dot5 xpos -106 ypos 585 } set N4a04e400 [stack 0] Dot { name Dot4 xpos -106 ypos 783 } set N4a04dd00 [stack 0] Dot { name Dot2 xpos -106 ypos 989 } Expression { temp_name0 yel temp_expr0 "max(min(r-b, g-b),0)" expr0 yel expr1 yel expr2 0 name Yellow xpos -258 ypos 985 } set N4a04cf00 [stack 0] Saturation { saturation {{parent.yellow}} name Saturation6 xpos -258 ypos 1038 } Clamp { maximum_enable false name Clamp_negatif5 xpos -258 ypos 1076 } Multiply { value {{parent.yellow_luma} {parent.yellow_luma} {parent.yellow_luma} {parent.yellow_luma}} name Multiply6 xpos -258 ypos 1114 } push $N4a04cf00 push $N4a04dd00 Expression { temp_name0 mag temp_expr0 "max(min(r-g, b-g),0)" expr0 mag expr1 0 expr2 mag name Magenta xpos -258 ypos 779 } set N5a838f00 [stack 0] Saturation { saturation {{parent.magenta}} name Saturation5 xpos -258 ypos 820 } Clamp { maximum_enable false name Clamp_negatif4 xpos -258 ypos 858 } Multiply { value {{parent.magenta_luma} {parent.magenta_luma} {parent.magenta_luma} {parent.magenta_luma}} name Multiply5 xpos -258 ypos 896 } push $N5a838f00 push $N4a04e400 Expression { temp_name0 cyan temp_expr0 "max(min(g-r, b-r),0)" expr0 0 expr1 cyan expr2 cyan name Cyan xpos -258 ypos 581 } set N4c5a0f00 [stack 0] Saturation { saturation {{parent.cyan}} name Saturation4 xpos -258 ypos 622 } Clamp { maximum_enable false name Clamp_negatif3 xpos -258 ypos 660 } Multiply { value {{parent.cyan_luma} {parent.cyan_luma} {parent.cyan_luma} {parent.cyan_luma}} name Multiply4 xpos -258 ypos 698 } push $N4c5a0f00 push $N4a04eb00 Expression { expr0 0 expr1 0 expr2 b-min(max(g,r),b) name Blue xpos -258 ypos 395 } set N4718cf00 [stack 0] Saturation { saturation {{parent.blue}} name Saturation3 xpos -258 ypos 436 } Clamp { maximum_enable false name Clamp_negatif2 xpos -258 ypos 474 } Multiply { value {{parent.blue_luma} {parent.blue_luma} {parent.blue_luma} {parent.blue_luma}} name Multiply3 xpos -258 ypos 512 } push $N4718cf00 push $N4a04f200 Expression { expr0 0 expr1 g-min(max(r,b),g) expr2 0 name Green xpos -258 ypos 207 } set N6b16cf00 [stack 0] Saturation { saturation {{parent.green}} name Saturation2 xpos -258 ypos 248 } Clamp { maximum_enable false name Clamp_negatif1 xpos -258 ypos 286 } Multiply { value {{parent.green_luma} {parent.green_luma} {parent.green_luma} {parent.green_luma}} name Multiply2 xpos -258 ypos 324 } push $N6b16cf00 push $N4a04f900 Expression { expr0 r-min(max(g,b),r) expr1 0 expr2 0 name Red xpos -257 ypos 7 } set Na9ae0f00 [stack 0] Saturation { saturation {{parent.red}} name Saturation1 xpos -257 ypos 45 } Clamp { maximum_enable false name Clamp_negatif xpos -257 ypos 86 } Multiply { value {{parent.red_luma} {parent.red_luma} {parent.red_luma} {parent.red_luma}} name Multiply1 xpos -257 ypos 146 } push $Na9ae0f00 push $N4b898800 Merge2 { inputs 2 operation from output rgb name Merge1 xpos -389 ypos 7 } Merge2 { inputs 2 operation plus output rgb name redLuma xpos -389 ypos 152 } Merge2 { inputs 2 operation from output rgb name Merge2 xpos -389 ypos 207 } Merge2 { inputs 2 operation plus output rgb name greenLuma xpos -389 ypos 330 } Merge2 { inputs 2 operation from output rgb name Merge3 xpos -389 ypos 395 } Merge2 { inputs 2 operation plus output rgb name blueLuma xpos -389 ypos 518 } Merge2 { inputs 2 operation from output rgb name Merge4 xpos -389 ypos 581 } Merge2 { inputs 2 operation plus output rgb name CyanLuma xpos -389 ypos 704 } Merge2 { inputs 2 operation from output rgb name Merge5 xpos -389 ypos 779 } Merge2 { inputs 2 operation plus output rgb name magentaLuma xpos -389 ypos 902 } Merge2 { inputs 2 operation from output rgb name Merge6 xpos -389 ypos 985 } Merge2 { inputs 2 operation plus output rgb name yellowLuma xpos -389 ypos 1120 } push $N4b898800 Dot { name Dot9 note_font_size 41 xpos -553 ypos -137 } Dot { name Dot10 note_font_size 41 xpos -553 ypos 1211 } Merge2 { inputs 2+1 operation copy name Merge7 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos -389 ypos 1207 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "import convertMergeToMergeAll;convertMergeToMergeAll.convertMergeToMergeAll()"} } Output { name Output2 xpos -389 ypos 1401 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Symmetry.gizmo ================================================ set cut_paste_input [stack 0] version 12.2 v10 push $cut_paste_input Group { name Symmetry knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"steps\":\n s = int(k.value())\n if s<1:\n k.setValue(1)\n \n else:\n with n:\n start = nuke.toNode(\"Start\")\n end = nuke.toNode(\"End\")\n side = nuke.toNode(\"side\")\n merge = nuke.toNode(\"Merge1\")\n \n startX = side.xpos()\n startY = side.ypos()\n \n \n steps = int( n.knob(\"steps\").getValue() )\n \n for i in range(1,merge.inputs()):\n merge.setInput(i,None)\n merge.setInput(0, side)\n \[nuke.delete(i) for i in nuke.allNodes() if i.xpos()>start.xpos()]\n for i in range(1,steps):\n \n t = nuke.nodes.Transform()\n t.setXYpos(startX+i*100,startY) \n t.setInput(0,start)\n fr = (360/steps)\n t\['center'].setExpression(\"width/2\", 0)\n t\['center'].setExpression(\"height/2\", 1)\n\n t\['rotate'].setValue(fr*i)\n merge.setInput(i if i<2 else i+1, t)" tile_color 0xa57aaaff note_font "Bitstream Vera Sans Bold" note_font_color 0xffffffff selected true xpos -2605 ypos 4458 addUserKnob {20 Symmetry} addUserKnob {41 operation T Merge1.operation} addUserKnob {3 steps -STARTLINE} steps 6 addUserKnob {26 ""} addUserKnob {20 addTransform l "Additional Pre-Transform" n 1} addTransform 0 addUserKnob {41 translate T Transform10.translate} addUserKnob {41 rotate T Transform10.rotate} addUserKnob {41 scale T Transform10.scale} addUserKnob {41 skewX l "skew X" T Transform10.skewX} addUserKnob {41 skewY l "skew Y" T Transform10.skewY} addUserKnob {41 skew_order l "skew order" T Transform10.skew_order} addUserKnob {41 center T Transform10.center} addUserKnob {22 setCenter l "Set Center" -STARTLINE T "n = nuke.thisNode()\nw= n.width()\nh=n.height()\nn\['center'].setValue(\[w/2,h/2])"} addUserKnob {20 endGroup n -1} } Input { inputs 0 name Input xpos 742 ypos -567 } Transform { center {1024 1024} name Transform10 selected true xpos 742 ypos -437 } NoOp { name Start xpos 742 ypos -353 } set Na81fb900 [stack 0] Transform { rotate 300 center {{width/2} {height/2}} name Transform5 xpos 1242 ypos -270 } push $Na81fb900 Transform { rotate 240 center {{width/2} {height/2}} name Transform4 xpos 1142 ypos -270 } push $Na81fb900 Transform { rotate 180 center {{width/2} {height/2}} name Transform3 xpos 1042 ypos -270 } push $Na81fb900 Transform { rotate 120 center {{width/2} {height/2}} name Transform2 xpos 942 ypos -270 } push 0 push $Na81fb900 Transform { rotate 60 center {{width/2} {height/2}} name Transform1 xpos 842 ypos -270 } push $Na81fb900 NoOp { name side xpos 742 ypos -270 } Merge2 { inputs 6+1 operation plus name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 742 ypos -174 } NoOp { name End xpos 742 } Output { name Output1 xpos 742 ypos 58 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_TProject.gizmo ================================================ Group { name TProject help "it is just transform tracked\nnothing fancy at all\nplay with the buttons, have fun" knobChanged "nn = nuke.thisNode()\nk = nuke.thisKnob()\nkn = k.name()\n\nif kn == \"cropP\":\n\n if nn\['cropP'].value() in \[\"Hard Crop\"]:\n nn\[\"growBbox\"].setVisible(False)\n nn\[\"text\"].setValue(\"Image is cropped to Input, Concatenation preserved.\")\n\n elif nn\['cropP'].value() in \[\"Adjustable Crop\"]:\n nn\[\"growBbox\"].setVisible(True)\n nn\[\"text\"].setValue(\"Adjust your Bbox , Downward Concatenation is broken.\")\n\n elif nn\['cropP'].value() in \[\"No Crop\"]:\n nn\[\"growBbox\"].setVisible(False)\n nn\[\"text\"].setValue(\"No Crop applied, Concatenation preserved.\")" tile_color 0x7a4389ff note_font Verdana note_font_size 14 note_font_color 0x28565eff addUserKnob {20 User l CProject} addUserKnob {6 FreezeInput l "freeze input" t "freezing the input on the refrence frame, \nsame as putting the framehold before the node" +STARTLINE} addUserKnob {22 python_button l "set current as reference frame" T "\nn = nuke.thisNode()\nn\[\"translate_1\"].setValue(\[n\[\"translate\"].value(0)*-1,n\[\"translate\"].value(1)*-1]) \n\n\nframe = nuke.frame()\nn\['refFrame'].setValue(frame)\nn\['label'].setValue(str(frame))\n\nnuke.toNode(\"FHold\")\['first_frame'].setValue(frame)\n" +STARTLINE} addUserKnob {26 text_2 l "" -STARTLINE T or} addUserKnob {22 setRefFrame l "set reference frame" t "setting the reference frame,\nsame as the reference frame when you are doing projection with the camera on the card.\nyou should expect that the input will be unchenged on this frame." -STARTLINE T "\nn = nuke.thisNode()\nframe = int(n\['refFrame'].value())\n\nn\[\"translate_1\"].setValue(\[n\[\"translate\"].getValueAt(0,frame)*-1,n\[\"translate\"].getValue(1,frame)*-1]) \n\n\nn\['label'].setValue(str(frame))\n\nnuke.toNode(\"FHold\")\['first_frame'].setValue(frame)\n\n"} addUserKnob {3 refFrame l "" -STARTLINE} addUserKnob {41 stabilize T Transform1.invert_matrix} addUserKnob {41 motionblur_1 l motionblur T Transform1.motionblur} addUserKnob {41 shutter_1 l shutter T Transform1.shutter} addUserKnob {20 s l transforms n 1} s 0 addUserKnob {41 translate T Transform1.translate} addUserKnob {41 center -STARTLINE T Transform1.center} addUserKnob {41 rotate T Transform1.rotate} addUserKnob {41 scale T Transform1.scale} addUserKnob {41 skewX l "skew X" T Transform1.skewX} addUserKnob {41 skewY l "skew Y" -STARTLINE T Transform1.skewY} addUserKnob {41 shutteroffset_1 l "shutter offset" T Transform1.shutteroffset} addUserKnob {41 shuttercustomoffset l "" -STARTLINE T Transform1.shuttercustomoffset} addUserKnob {41 filter_1 l filter T Reformat1.filter} addUserKnob {41 clamp -STARTLINE T Transform1.clamp} addUserKnob {41 black_outside l "black outside" -STARTLINE T Transform1.black_outside} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 cropP l crop M {"Hard Crop" "Adjustable Crop" "No Crop"}} addUserKnob {7 growBbox l "grow Bbox" -STARTLINE +HIDDEN R 0 200} growBbox 50 addUserKnob {41 o l overscan +DISABLED +HIDDEN +INVISIBLE T Crop1.o} addUserKnob {26 text l tip T "Image is cropped to Input, Concatenation preserved."} addUserKnob {26 ""} addUserKnob {41 translate_1 l translate +INVISIBLE T refPall.translate} } Input { inputs 0 name Input1 xpos 112 ypos -280 } FrameHold { name FHold selected true xpos 112 ypos -229 disable {{!parent.FreezeInput}} } Transform { invert_matrix false name Transform1 xpos 112 ypos -176 } Transform { translate {61.92474365 295.9479017} center {1024 778} invert_matrix {{parent.Transform1.invert_matrix}} name refPall xpos 112 ypos -140 } set Nd51711c0 [stack 0] Dot { name Dot1 xpos 14 ypos -62 } push $Nd51711c0 Crop { box {{curve-parent.growBbox} {curve-parent.growBbox} {width+parent.growBbox} {height+parent.growBbox}} name Crop1 xpos 112 ypos -62 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } push $Nd51711c0 Reformat { type "to box" format "4096 2160 0 0 4096 2160 1 4K_DCP" box_width {{width}} box_height {{height}} box_pixel_aspect {{pixel_aspect}} resize none name Reformat1 xpos 223 ypos -68 } Switch { inputs 3 which {{parent.cropP x1000 0}} name Switch1 label "\[value which]" xpos 112 ypos 10 } Output { name Output1 xpos 112 ypos 106 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_TProject2.gizmo ================================================ Group { name TProject help "TProject has only transformation of the point in XY space, it has no scale or rotation, usefull if you want simple one point stabilisation" knobChanged "nn = nuke.thisNode()\nk = nuke.thisKnob()\nkn = k.name()\n\nif kn == \"cropP\":\n\n if nn\['cropP'].value() in \[\"Hard Crop\"]:\n nn\[\"growBbox\"].setVisible(False)\n nn\[\"text\"].setValue(\"Image is cropped to Input, Concatenation preserved.\")\n\n elif nn\['cropP'].value() in \[\"Adjustable Crop\"]:\n nn\[\"growBbox\"].setVisible(True)\n nn\[\"text\"].setValue(\"Adjust your Bbox , Downward Concatenation is broken.\")\n\n elif nn\['cropP'].value() in \[\"No Crop\"]:\n nn\[\"growBbox\"].setVisible(False)\n nn\[\"text\"].setValue(\"No Crop applied, Concatenation preserved.\")" tile_color 0x7a4389ff label "Matchmove\n46" note_font Verdana note_font_size 14 note_font_color 0x28565eff addUserKnob {20 User l TProject} addUserKnob {26 card_to_track l "" +STARTLINE T "CardToTrack3:transform: ujo"} addUserKnob {26 ""} addUserKnob {6 FreezeInput l "freeze input" t "freezing the input on the refrence frame, \nsame as putting the framehold before the node" +STARTLINE} addUserKnob {22 mode_toggle l "

Matchmove" t "Toggle between Matchmove and Stabilize modes.\nPay attention to the reference frame - on this frame no transformation will be applied. You can see it as a projection frame if compare to camera project" T "import nuke\nntn = nuke.thisNode()\nntk = nuke.thisKnob()\nref_frame = str(int(ntn\['refFrame'].value()))\nlab = ntk.label()\nmm = \"

Matchmove\"\nstab = \"

Stabilize\"\nif lab == mm:\n ntk.setLabel(stab)\n ntn\['invert'].setValue(True)\n ntn\['tile_color'].setValue(1834205695)\n ntn\['label'].setValue(\"Stabilize\\n\"+ref_frame)\n with ntn:\n nuke.toNode('refPall')\['disable'].setValue(False)\nelif lab == stab:\n ntk.setLabel(mm)\n ntn\['invert'].setValue(False)\n ntn\['tile_color'].setValue(2051246591)\n ntn\['label'].setValue(\"Matchmove\\n\"+ref_frame)\n with ntn:\n nuke.toNode('refPall')\['disable'].setValue(True)" +STARTLINE} addUserKnob {22 setCurrentAsRefFrame l "set current as reference frame" T "import nuke\nntn = nuke.thisNode()\nframe = int(nuke.frame())\nwith ntn:\n pall = nuke.toNode(\"refPall\")\n papa = nuke.toNode(\"Transform1\")\n pall\['disable'].setValue(False)\n knobs = \[\"translate\", \"rotate\", \"scale\", \"center\"]\n for one in knobs:\n pall\[one].setValue(papa\[one].value())\nntn\['label'].setValue(ntn\['mode_toggle'].label().rpartition(\">\")[2]+\"\\n\"+str(frame))\nntn\['refFrame'].setValue(frame)\nwith ntn:\n nuke.toNode(\"FHold\")\['first_frame'].setValue(frame)\n\n\n\n\n" +STARTLINE} addUserKnob {22 setRefFrame l "set reference frame" t "setting the reference frame,\nsame as the reference frame when you are doing projection with the camera on the card.\nyou should expect that the input will be unchenged on this frame." T "import nuke\nntn = nuke.thisNode()\nframe = int(nuke.thisNode()\['refFrame'].value())\nwith ntn:\n pall = nuke.toNode(\"refPall\")\n papa = nuke.toNode(\"Transform1\")\n pall\['disable'].setValue(False)\n knobs = \[\"translate\", \"rotate\", \"scale\", \"center\"]\n for one in knobs:\n pall\[one].setValue(papa\[one].value())\nntn\['label'].setValue(ntn\['mode_toggle'].label().rpartition(\">\")[2]+\"\\n\"+str(frame))\nntn\['refFrame'].setValue(frame)\nwith ntn:\n nuke.toNode(\"FHold\")\['first_frame'].setValue(frame)" +STARTLINE} addUserKnob {3 refFrame l "" -STARTLINE} refFrame 46 addUserKnob {41 invert l stabilize +INVISIBLE T Transform1.invert_matrix} addUserKnob {26 ""} addUserKnob {20 s l transforms n 1} s 0 addUserKnob {41 translate T Transform1.translate} addUserKnob {41 center -STARTLINE T Transform1.center} addUserKnob {41 rotate T Transform1.rotate} addUserKnob {41 scale T Transform1.scale} addUserKnob {41 skewX l "skew X" T Transform1.skewX} addUserKnob {41 skewY l "skew Y" -STARTLINE T Transform1.skewY} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {41 motionblur_1 l motionblur T Transform1.motionblur} addUserKnob {41 shutter_1 l shutter T Transform1.shutter} addUserKnob {41 shutteroffset_1 l "shutter offset" T Transform1.shutteroffset} addUserKnob {41 shuttercustomoffset l "" -STARTLINE T Transform1.shuttercustomoffset} addUserKnob {41 filter_1 l filter T Reformat1.filter} addUserKnob {41 clamp -STARTLINE T Transform1.clamp} addUserKnob {41 black_outside l "black outside" -STARTLINE T Transform1.black_outside} addUserKnob {26 ""} addUserKnob {4 cropP l crop M {"Hard Crop" "Adjustable Crop" "No Crop"}} addUserKnob {7 growBbox l "grow Bbox" -STARTLINE +HIDDEN R 0 200} growBbox 50 addUserKnob {41 o l overscan +DISABLED +HIDDEN +INVISIBLE T Crop1.o} addUserKnob {26 text l tip T "Image is cropped to Input, Concatenation preserved."} addUserKnob {26 ""} addUserKnob {41 translate_1 l translate +INVISIBLE T refPall.translate} } Input { inputs 0 name Input1 xpos 112 ypos -280 } FrameHold { name FHold selected true xpos 112 ypos -229 disable {{!parent.FreezeInput}} } Transform { center {960 540} name Transform1 xpos 112 ypos -165 } Transform { translate {{parent.Transform1.translate(parent.refFrame) x4 -128.3774678 x30 -128.3774678 x44 -128.3774678 x46 -128.3774678 x55 -128.3774678 x57 -128.3774678 -128.3774678 -128.3774678 x66 -128.3774678 x67 -128.3774678 x70 -128.3774678 x74 -128.3774678 x77 -128.3774678 x100 -128.3774678} {parent.Transform1.translate(parent.refFrame) x4 120.4071311 x30 67.89515688 x44 27.56713262 x46 22.99436951 x55 11.5775619 x57 11.87522766 13.52917343 16.70423745 x66 32.42253126 x67 37.07234251 x70 54.40229883 x74 86.01397339 x77 116.4269787 x100 379.3734408}} center {1024 778} invert_matrix {{!parent.Transform1.invert_matrix}} name refPall xpos 112 ypos -130 } Dot { name Dot2 xpos 146 ypos -96 } set N230475c0 [stack 0] Dot { name Dot1 xpos 14 ypos -62 } push $N230475c0 Crop { box {{curve-parent.growBbox} {curve-parent.growBbox} {width+parent.growBbox} {height+parent.growBbox}} name Crop1 xpos 112 ypos -62 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } push $N230475c0 Reformat { type "to box" format "4096 2160 0 0 4096 2160 1 4K_DCP" box_width {{width}} box_height {{height}} box_pixel_aspect {{pixel_aspect}} resize none name Reformat1 xpos 223 ypos -68 } Switch { inputs 3 which {{parent.cropP x1000 0}} name Switch1 label "\[value which]" xpos 112 ypos 10 } Output { name Output1 xpos 112 ypos 106 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_TimeMachine.gizmo ================================================ Group { name TimeMachine help "Does a per-pixel time offset on the image, based on a secondary mask input.\n\nPixels with a mask value of 1 will be offset by the number of frames set in \"frames\".\nMask values of 0 will return the image at the current frame. Values between 0-1 will return an interpolated offset." knobChanged "\n\ng = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() in \[\"frames\",\"method\"]:\n \n i = nuke.toNode(\"img\")\n i2 = nuke.toNode(\"mask\")\n o = nuke.toNode(\"Output1\")\n c = nuke.toNode(\"Copy1\")\n\n if k.name() == \"frames\":\n \n defaultNodes = \[i,i2,o,c]\n for n in nuke.allNodes():\n if n not in defaultNodes:\n nuke.delete(n)\n \n fvalue = g\['frames'].value()\n step = 1\n if fvalue < 0:\n step = -1\n \n for f in range(0,int(fvalue)+step,step):\n t = nuke.nodes.TimeOffset()\n t\['time_offset'].setValue(-f)\n t.setInput(0,i)\n \n if f == 0 :\n lastnode = t\n \n else :\n slice = nuke.nodes.Grade()\n slice\['channels'].setValue(\"alpha\")\n slice\['blackpoint'].setValue(abs((1/(fvalue+1))*abs(f)))\n slice\['whitepoint'].setValue(abs((1/(fvalue+1))*(abs(f)+1)))\n slice.setInput(0,c)\n exp = nuke.nodes.Expression()\n if g\['method'].value() == \"average\":\n exp\['expr3'].setValue('a>1?1:a')\n else:\n exp\['expr3'].setValue('a>0?1:0')\n exp.setInput(0,slice)\n km = nuke.nodes.Keymix()\n km.setInput(1,t)\n km.setInput(0,lastnode)\n km.setInput(2,exp)\n lastnode = km\n \n sw = nuke.nodes.Switch()\n sw.setInput(0,i)\n sw.setInput(1,lastnode)\n sw\['which'].setExpression('parent.maskChannel!=0')\n o.setInput(0,sw)\n \n for n in nuke.allNodes():\n nuke.autoplace(n)\n\n elif k.name() == \"method\":\n\n for e in nuke.allNodes('Expression'):\n if g\['method'].value() == \"average\":\n e\['expr3'].setValue('a>1?1:a')\n else:\n e\['expr3'].setValue('a>0?1:0')\n\n" selected true addUserKnob {20 TimeMachine} addUserKnob {41 maskChannel T Copy1.from0} addUserKnob {26 ""} addUserKnob {4 method M {nearest average}} addUserKnob {3 frames} } Input { inputs 0 name mask xpos 400 ypos -57 number 1 } set N40175820 [stack 0] push $N40175820 Copy { inputs 2 from0 rgba.alpha name Copy1 xpos 400 ypos -33 } Input { inputs 0 name img xpos 217 ypos -111 } set N400be0e0 [stack 0] TimeOffset { time "" name TimeOffset1 } push $N400be0e0 Switch { inputs 2 which {{parent.maskChannel!=0}} name Switch1 } Output { name Output1 xpos 1390 ypos 87 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_TransformCutOut.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { name TransformCutOut tile_color 0xa57aaaff note_font "Verdana Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" note_font_color 0xffffffff selected true addUserKnob {20 TransformCutOut} addUserKnob {41 matrix T Transform1.matrix} addUserKnob {41 translate T Transform1.translate} addUserKnob {41 rotate T Transform1.rotate} addUserKnob {41 scale T Transform1.scale} addUserKnob {41 skewX l "skew X" T Transform1.skewX} addUserKnob {41 skewY l "skew Y" T Transform1.skewY} addUserKnob {41 skew_order l "skew order" T Transform1.skew_order} addUserKnob {41 center T Transform1.center} addUserKnob {26 SetTo l "Set to:" T " "} addUserKnob {22 InputFormatCenter l "Input Format Center" -STARTLINE T "n = nuke.thisNode()\nw = n.width()\nh = n.height()\n\nc = n.knob(\"center\")\n\nc.setValue(w/2, 0)\nc.setValue(h/2, 1)"} addUserKnob {22 MaskBBox l "Mask BBox Center" -STARTLINE T "n = nuke.thisNode()\nb = nuke.toNode(\"BBoxToFormat\")\n\nbbx = b.knob(\"bboxCenter\").getValue(0)\nbby = b.knob(\"bboxCenter\").getValue(1)\n\nc = n.knob(\"center\")\n\nc.setValue(bbx, 0)\nc.setValue(bby, 1)"} addUserKnob {41 invert_matrix l invert T Transform1.invert_matrix} addUserKnob {41 filter T Transform1.filter} addUserKnob {41 clamp -STARTLINE T Transform1.clamp} addUserKnob {41 black_outside l "black outside" -STARTLINE T Transform1.black_outside} addUserKnob {41 motionblur T Transform1.motionblur} addUserKnob {41 shutter T Transform1.shutter} addUserKnob {41 shutteroffset l "shutter offset" T Transform1.shutteroffset} addUserKnob {41 shuttercustomoffset l "" -STARTLINE T Transform1.shuttercustomoffset} addUserKnob {26 ""} addUserKnob {7 mix} mix 1 addUserKnob {41 bbox l "set bbox to " T Merge48.bbox} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Cuts out and Transforms the Masked Region" T TransformCutOut} addUserKnob {26 ver l Version: T v01} } Input { inputs 0 name Inputmask xpos 319 ypos 113 number 1 } Dot { name Dot6 note_font_size 41 xpos 353 ypos 193 } set N8dc6b10 [stack 0] AddChannels { channels rgba name AddChannels1 xpos 319 ypos 264 } Dot { name Dot42 note_font_size 41 xpos 353 ypos 334 } set N8dd5170 [stack 0] Invert { channels rgba name Invert8 xpos 319 ypos 376 } Dot { name Dot39 note_font_size 41 xpos 353 ypos 427 } Input { inputs 0 name Input xpos 601 ypos 104 } AddChannels { channels rgba name AddChannels2 xpos 601 ypos 217 } Dot { name Dot41 note_font_size 41 xpos 635 ypos 281 } set N8e01e60 [stack 0] Dot { name Dot40 note_font_size 41 xpos 497 ypos 281 } Multiply { inputs 1+1 value 0 name Multiply18 label "\[value value]" xpos 463 ypos 411 } set N8e0bf00 [stack 0] push $N8dd5170 Dot { name Dot4 note_font_size 41 xpos 267 ypos 334 } Dot { name Dot5 xpos 267 ypos 476 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 334 ypos 466 } push $N8e0bf00 CopyBBox { inputs 2 name CopyBBox1 xpos 463 ypos 472 } Transform { center {960 540} shutteroffset centred name Transform1 xpos 463 ypos 512 } Dot { name Dot43 note_font_size 41 xpos 497 ypos 548 } push $N8dd5170 push $N8e01e60 Multiply { inputs 1+1 value 0 name Multiply19 label "\[value value]" xpos 601 ypos 318 } Merge2 { inputs 2 operation disjoint-over also_merge all name Merge48 xpos 601 ypos 545 } push $N8e01e60 Dot { name Dot1 note_font_size 41 xpos 777 ypos 281 } Dot { name Dot2 note_font_size 41 xpos 777 ypos 619 } set N8e556f0 [stack 0] Dissolve { inputs 2 which {{parent.mix}} name Dissolve1 label "\[value which]" xpos 601 ypos 603 } push $N8e556f0 Dot { name Dot3 note_font_size 41 xpos 777 ypos 687 } Switch { inputs 2 which {{"Dissolve1.which == 0 ? 0 : 1"}} name Switch1 label "\[value which]" xpos 601 ypos 677 } Output { name Output1 xpos 601 ypos 775 } push $N8dc6b10 Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"overscanType\":\n if n.knob(\"overscanType\").getValue() == 1:\n n.knob(\"overscanPercent\").setVisible(True)\n n.knob(\"overscan\").setVisible(False)\n else:\n n.knob(\"overscanPercent\").setVisible(False)\n n.knob(\"overscan\").setVisible(True)" tile_color 0xa57aaaff note_font "Verdana Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" note_font_color 0xffffffff xpos 409 ypos 190 addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} addUserKnob {14 overscan l Overscan R 0 400} addUserKnob {14 overscanPercent l "Overscan Percent" +HIDDEN R 1 4} overscanPercent 1 addUserKnob {20 inputBbox l "BBox Data" n 1} addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 bboxCenter l "BBox Center" R 0 100} bboxCenter {{"(inputBBox.r-inputBBox.x)/2 + inputBBox.x"} {"(inputBBox.t-inputBBox.y)/2 + inputBBox.y"}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set N8e8b480 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set N8e8ffb0 [stack 0] push $N8e8b480 Crop { box {{curve} {curve} {input.width} {input.height}} intersect true crop {{parent.blackOutside}} name Crop6 selected true xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_1 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_2 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_3 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_4 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_5 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_6 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_7 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_8 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_9 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_10 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_11 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_12 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_13 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_14 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_15 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_16 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_17 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_18 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_19 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_20 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_21 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N8e95460 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set N8ea44e0 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{input.bbox.r/2} {input.bbox.t/2}} shutteroffset centred name Transform1 xpos 120 ypos 555 } push $N8ea44e0 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $N8e8ffb0 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $N8e95460 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N8ef19b0 [stack 0] Output { name Output1 xpos 261 ypos 912 } push $N8ef19b0 NoOp { name OutputBBox1 xpos 372 ypos 836 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} } end_group end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_TransformMatrix.gizmo ================================================ Group { name TransformMatrix knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nmatrix = n\['matrix'].value()\n\n\nif (int(n\['visualize'].getValue()) == 1):\n matrix.translationOnly()\nelif (int(n\['visualize'].getValue()) == 2):\n matrix.rotationOnly()\nelif (int(n\['visualize'].getValue()) == 3):\n matrix.scaleOnly()\nelif (int(n\['visualize'].getValue()) == 4):\n matrix.scaleAndRotationOnly()\n\nif (n\['transpose'].getValue() == 1):\n matrix.transpose()\nn.node(\"Matrix1\")\['matrix'].setValue(matrix)" tile_color 0xa57aaa00 selected true addUserKnob {20 Transform} addUserKnob {12 translate} addUserKnob {7 rotate R -100 100} addUserKnob {7 rotateRad l "rotate Rad" R -10 10} rotateRad {{radians(rotate)}} addUserKnob {14 scale R 0 100} scale 1 addUserKnob {7 skewx l "skew X" R -1 1} addUserKnob {7 skewy l "skew Y" R -1 1} addUserKnob {12 center} addUserKnob {22 centerimg l "center in the img" -STARTLINE T "node = nuke.thisNode()\n\nfrom1x = 0\nfrom1y = 0\n\nfrom2x = from1x + node.width()\nfrom2y = from1y\n\nfrom3x = from1x+node.width()\nfrom3y = from1y + node.height()\n\nfrom4x = from1x\nfrom4y = from1y + node.height()\n\n\ncenterx= int((from2x+from1x)/2)\ncentery= int((from4y+from1y)/2)\n\nnode\['center'].setValue(centerx,0)\nnode\['center'].setValue(centery,1)"} addUserKnob {6 invert +STARTLINE} addUserKnob {26 ""} addUserKnob {26 message l "" +STARTLINE T "This is just a visualization. Can't modify directly this matrix"} addUserKnob {68 visualize t "Select what you want to visualize in the matrix" M {Translation-Rotation-Scale TranslationOnly RotationOnly scaleOnly scaleAndRotationOnly "" ""}} addUserKnob {6 transpose t "Operator which flips a matrix over its diagonal, that is it switches the row and column indices of the matrix " -STARTLINE} transpose true addUserKnob {41 matrix_3 l matrix T Matrix1.matrix} addUserKnob {7 cos l cosθ} cos {{cos(rotateRad)}} addUserKnob {7 sin l sinθ} sin {{sin(rotateRad)}} addUserKnob {41 matrix T Transform1.matrix} addUserKnob {20 email l @} addUserKnob {22 tutorial l Tutorial t http://www.andreageremia.it/tutorial_matrix_transform.html T "nuke.tcl('start', 'http://www.andreageremia.it/tutorial_matrix_transform.html')\n" +STARTLINE} addUserKnob {26 from l "" +STARTLINE T "Tool created by Andrea Geremia\n\nandrea.geremia89@gmail.com\nwww.andreageremia.it"} } Input { inputs 0 name Input1 xpos 269 ypos -186 } Transform { translate {{parent.translate} {parent.translate}} rotate {{parent.rotate}} scale {{parent.scale.w} {parent.scale.h}} skewX {{parent.skewx}} skewY {{parent.skewy}} center {{parent.center} {parent.center}} invert_matrix {{parent.invert}} shutteroffset centred name Transform1 selected true xpos 269 ypos -129 } Output { name Output1 xpos 269 ypos -46 } Matrix { inputs 0 matrix { {1 0 0 0} {0 1 0 0} {0 0 1 0} {0 0 0 1} } name Matrix1 xpos 420 ypos -145 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_TransformMatrix4.gizmo ================================================ Group { name TransformMatrix4_ selected true addUserKnob {20 Matrix4x4_Transform} addUserKnob {41 xform_order l "transform order" T Axis1.xform_order} addUserKnob {41 rot_order l "rotation order" T Axis1.rot_order} addUserKnob {41 translate T Axis1.translate} addUserKnob {41 rotate T Axis1.rotate} addUserKnob {41 scaling l scale T Axis1.scaling} addUserKnob {41 uniform_scale l "uniform scale" T Axis1.uniform_scale} addUserKnob {41 skew T Axis1.skew} addUserKnob {41 pivot T Axis1.pivot} addUserKnob {20 "" l "Local matrix" n 2} addUserKnob {41 useMatrix l "specify matrix" T Axis1.useMatrix} addUserKnob {41 matrix l "" +STARTLINE T Axis1.matrix} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xaaaaaa00 label "Transform\nTo Matrix" note_font_size 20 xpos 764 ypos 251 bdwidth 218 bdheight 180 } Input { inputs 0 name matrix xpos 451 ypos 137 } Dot { name Dot1 xpos 485 ypos 195 } set N1e536770 [stack 0] Dot { name Dot2 xpos 808 ypos 195 } add_layer {matrix0 matrix0.0 matrix0.1 matrix0.2 matrix0.3} Expression { channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 Axis1.world_matrix.0 channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 Axis1.world_matrix.1 channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 Axis1.world_matrix.2 channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 Axis1.world_matrix.3 name Expression1 xpos 774 ypos 331 } add_layer {matrix1 matrix1.0 matrix1.1 matrix1.2 matrix1.3} Expression { channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 Axis1.world_matrix.4 channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 Axis1.world_matrix.5 channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 Axis1.world_matrix.6 channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 Axis1.world_matrix.7 name Expression2 xpos 774 ypos 355 } add_layer {matrix2 matrix2.0 matrix2.1 matrix2.2 matrix2.3} Expression { channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 Axis1.world_matrix.8 channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 Axis1.world_matrix.9 channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 Axis1.world_matrix.10 channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 Axis1.world_matrix.11 name Expression3 xpos 774 ypos 379 } add_layer {matrix3 matrix3.0 matrix3.1 matrix3.2 matrix3.3} Expression { channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 Axis1.world_matrix.12 channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 Axis1.world_matrix.13 channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 Axis1.world_matrix.14 channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 Axis1.world_matrix.15 name Expression4 xpos 774 ypos 403 } Dot { name Dot3 xpos 808 ypos 574 } set N1e5759e0 [stack 0] push $N1e536770 push $N1e5759e0 Group { inputs 2 name Product_Matrix4_ help "Multiply two pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" xpos 451 ypos 571 addUserKnob {20 Matrix4Product l "Product Matrix4"} addUserKnob {26 Description l "" +STARTLINE T "Multiply two matrix4: matrixA*matrixB"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name matrixA xpos 344 ypos 139 } Dot { name Dot3 xpos 378 ypos 252 } set N1ef44020 [stack 0] push $N1ef44020 push $N1ef44020 push $N1ef44020 Input { inputs 0 name matrixB xpos 21 ypos 142 number 1 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 (Bmatrix0.0*Amatrix0.0)+(Bmatrix0.1*Amatrix1.0)+(Bmatrix0.2*Amatrix2.0)+(Bmatrix0.3*Amatrix3.0) channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 (Bmatrix0.0*Amatrix0.1)+(Bmatrix0.1*Amatrix1.1)+(Bmatrix0.2*Amatrix2.1)+(Bmatrix0.3*Amatrix3.1) channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 (Bmatrix0.0*Amatrix0.2)+(Bmatrix0.1*Amatrix1.2)+(Bmatrix0.2*Amatrix2.2)+(Bmatrix0.3*Amatrix3.2) channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 (Bmatrix0.0*Amatrix0.3)+(Bmatrix0.1*Amatrix1.3)+(Bmatrix0.2*Amatrix2.3)+(Bmatrix0.3*Amatrix3.3) name MergeExpression1 xpos 21 ypos 249 } MergeExpression { inputs 2 channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 (Bmatrix1.0*Amatrix0.0)+(Bmatrix1.1*Amatrix1.0)+(Bmatrix1.2*Amatrix2.0)+(Bmatrix1.3*Amatrix3.0) channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 (Bmatrix1.0*Amatrix0.1)+(Bmatrix1.1*Amatrix1.1)+(Bmatrix1.2*Amatrix2.1)+(Bmatrix1.3*Amatrix3.1) channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 (Bmatrix1.0*Amatrix0.2)+(Bmatrix1.1*Amatrix1.2)+(Bmatrix1.2*Amatrix2.2)+(Bmatrix1.3*Amatrix3.2) channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 (Bmatrix1.0*Amatrix0.3)+(Bmatrix1.1*Amatrix1.3)+(Bmatrix1.2*Amatrix2.3)+(Bmatrix1.3*Amatrix3.3) name MergeExpression2 xpos 21 ypos 273 } MergeExpression { inputs 2 channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 (Bmatrix2.0*Amatrix0.0)+(Bmatrix2.1*Amatrix1.0)+(Bmatrix2.2*Amatrix2.0)+(Bmatrix2.3*Amatrix3.0) channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 (Bmatrix2.0*Amatrix0.1)+(Bmatrix2.1*Amatrix1.1)+(Bmatrix2.2*Amatrix2.1)+(Bmatrix2.3*Amatrix3.1) channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 (Bmatrix2.0*Amatrix0.2)+(Bmatrix2.1*Amatrix1.2)+(Bmatrix2.2*Amatrix2.2)+(Bmatrix2.3*Amatrix3.2) channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 (Bmatrix2.0*Amatrix0.3)+(Bmatrix2.1*Amatrix1.3)+(Bmatrix2.2*Amatrix2.3)+(Bmatrix2.3*Amatrix3.3) name MergeExpression3 xpos 21 ypos 297 } MergeExpression { inputs 2 channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 (Bmatrix3.0*Amatrix0.0)+(Bmatrix3.1*Amatrix1.0)+(Bmatrix3.2*Amatrix2.0)+(Bmatrix3.3*Amatrix3.0) channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 (Bmatrix3.0*Amatrix0.1)+(Bmatrix3.1*Amatrix1.1)+(Bmatrix3.2*Amatrix2.1)+(Bmatrix3.3*Amatrix3.1) channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 (Bmatrix3.0*Amatrix0.2)+(Bmatrix3.1*Amatrix1.2)+(Bmatrix3.2*Amatrix2.2)+(Bmatrix3.3*Amatrix3.2) channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 (Bmatrix3.0*Amatrix0.3)+(Bmatrix3.1*Amatrix1.3)+(Bmatrix3.2*Amatrix2.3)+(Bmatrix3.3*Amatrix3.3) name MergeExpression4 selected true xpos 21 ypos 321 } Output { name Output1 xpos 21 ypos 421 } end_group Switch { inputs 2 which {{"\[exists parent.input]"}} name HasInput xpos 451 ypos 788 } Output { name Output1 xpos 451 ypos 852 } Input { inputs 0 name axis xpos 1041 ypos 158 number 1 } Dot { name Dot4 tile_color 0xcccccc00 xpos 1075 ypos 370 } Axis2 { name Axis1 xpos 912 ypos 346 addUserKnob {20 wpp} addUserKnob {18 pointPosition l "Point Position"} pointPosition {0 0 0} addUserKnob {6 pointPosition_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 pointPosition_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_TransformMix.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { name Transform_Mix help "Transform ( Mix - Dissolve )\n\nChange all knobs of a Transform node (linked in this curent node) using two different way.\n\nMix:\nMultiply all the Transform curves by the mix slider value.\n\nDissolve:\nMix two Transform nodes together.\nOn dissolve slider, \"0\" to keep the value of the Transform 1 and \"1\" the Transform 2.\n" knobChanged "node = nuke.thisNode()\nknob = nuke.thisKnob()\nmode = node\['mode'].value()\nglcolor = node\['gl_color'].value()\nsavecolor = node\['tile_color'].value()\n\nif knob.name() in ('mode', 'showPanel'):\n if mode == 'Mix':\n node\['mode_2'].setValue('Mix')\n node\['dissolve'].setVisible(False)\n node\['mix'].setVisible(True)\n node\['T2'].setVisible(False)\n\n if savecolor == (2989502719):\n node\['tile_color'].setValue(glcolor)\n node\['gl_color'].setValue(savecolor)\n else:\n node\['dissolve'].setVisible(True)\n node\['mix'].setVisible(False)\n node\['T2'].setVisible(True)\n\n allnodes = \[nodeT.name() for nodeT in nuke.allNodes(group=nuke.root())]\n if node.knob('T2').value() in allnodes:\n if savecolor == (2989502719):\n node\['gl_color'].setValue(savecolor)\n node\['tile_color'].setValue(glcolor)\n node\['mode_2'].setValue('Dissolve')\n else:\n if savecolor != (2989502719):\n node\['tile_color'].setValue(2989502719)\n node\['gl_color'].setValue(savecolor)\n nuke.thisNode()\['mode_2'].setValue('Need to be link to a Transform node')\n\nif knob.name() in \['T1', 'T2']:\n if mode == 'Dissolve':\n allnodes = \[nodeT.name() for nodeT in nuke.allNodes(group=nuke.root())]\n \n if node.knob('T2').value() in allnodes:\n if savecolor == (2989502719):\n node\['gl_color'].setValue(savecolor)\n node\['tile_color'].setValue(glcolor)\n nuke.thisNode()\['mode_2'].setValue('Dissolve')\n else:\n if savecolor != (2989502719):\n node\['tile_color'].setValue(2989502719)\n node\['gl_color'].setValue(savecolor)\n nuke.thisNode()\['mode_2'].setValue('Need to be link to a Transform node')\n else:\n if savecolor == (2776279807):\n glcolor = node\['gl_color'].value()\n if glcolor == (2776279807):\n node\['tile_color'].setValue(glcolor)\n else:\n pass\n" tile_color 0xb23030ff gl_color 0xa57aaaff selected true addUserKnob {20 FT l "Mix - Dissolve"} addUserKnob {4 mode l "@b;Mode" t "Mix:\nMultiply all the Transform curves by the mix slider value.\n\nDissolve:\nMix two Transform nodes together.\nOn dissolve slider, \"0\" to keep the value of the Trasform 1 and \"1\" the Trasform 2." M {Mix Dissolve "" "" "" "" "" "" "" ""}} mode Dissolve addUserKnob {26 S02 l " "} addUserKnob {41 T1 l " Transform 1" t "Type the Transform node name you want to mix / dissolve." T Input.T1} addUserKnob {1 T2 l " 2 " t "Type the Transform node name you want to dissolve with the Transform 1." -STARTLINE} T2 Transform_Name addUserKnob {7 mix l Mix t "Multiply all the Transform 1 curves by the mix value." +HIDDEN} mix 1 addUserKnob {7 dissolve l Dissolve t "\"0\" is the Trasform 1 curves value and \"1\" is the Trasform 2 curves value."} dissolve 1 addUserKnob {26 T01 l "" +STARTLINE} addUserKnob {20 transform_result l "Result (Transform)" n 1} transform_result 0 addUserKnob {26 S01 l " " T " "} addUserKnob {41 translate l Translate T Maths.translate} addUserKnob {41 rotate l Rotate T Maths.rotate} addUserKnob {41 scale l Scale T Maths.scale} addUserKnob {41 skewX l "Skew X" T Maths.skewX} addUserKnob {41 skewY l "Skew Y" T Maths.skewY} addUserKnob {41 skew_order l "Skew order" T T_RESULT.skew_order} addUserKnob {41 center l Center T Maths.center} addUserKnob {41 invert_matrix l Invert T T_RESULT.invert_matrix} addUserKnob {41 filter l Filter T T_RESULT.filter} addUserKnob {41 clamp l Clamp -STARTLINE T T_RESULT.clamp} addUserKnob {41 black_outside l "Black Outside" -STARTLINE T T_RESULT.black_outside} addUserKnob {41 motionblur l Motionblur T T_RESULT.motionblur} addUserKnob {41 shutter l Shutter T T_RESULT.shutter} addUserKnob {41 shutteroffset l "Shutter Offset" T T_RESULT.shutteroffset} addUserKnob {41 shuttercustomoffset l "" -STARTLINE T T_RESULT.shuttercustomoffset} addUserKnob {26 S03 l " " T " "} addUserKnob {22 create_transform l " Create Transform - Linked" t "Create a Transform node that have all knobs linked to this node." T "groupNode = nuke.thisNode()\nname = groupNode.name()\ncolornode = groupNode.knob('tile_color').value()\n\nNT = nuke.createNode(\"Transform\", inpanel=False )\nNT\['translate'].setExpression(name + \".translate\")\nNT\['rotate'].setExpression(name + \".rotate\")\nNT\['scale'].setExpression(name + \".scale\")\nNT\['scale'].setSingleValue(False)\nNT\['center'].setExpression(name + \".center\")\nNT\['invert_matrix'].setExpression(name + \".invert_matrix\")\nNT\['filter'].setExpression(name + \".filter\")\nNT\['clamp'].setExpression(name + \".clamp\")\nNT\['black_outside'].setExpression(name + \".black_outside\")\nNT\['motionblur'].setExpression(name + \".motionblur\")\nNT\['shutter'].setExpression(name + \".shutter\")\nNT\['shutteroffset'].setExpression(name + \".shutteroffset\")\nNT\['shuttercustomoffset'].setExpression(name + \".shuttercustomoffset\")\nNT\['label'].setValue(\"(\" +name + \")\")\nNT\['tile_color'].setValue(colornode)\nNT.setSelected(True)\n\nnuke.nodeCopy('%clipboard%')\n\nn = nuke.selectedNode()\nnuke.delete(n)\n\nnuke.selectAll() \nnuke.invertSelection()\n\nnodePos = ( nuke.thisNode().xpos(), nuke.thisNode().ypos()) \n\ngroupNode.end()\n\nfor node in nuke.allNodes():\n node.setSelected(False)\n\nnuke.nodePaste('%clipboard%')\n\ngroupNode.setSelected(False)\n\nnodesToPlace = sorted( nuke.selectedNodes(), key=lambda node: node.ypos())\n\nfor index,node in enumerate(nodesToPlace):\n node.setXYpos(nodePos\[0]+100, nodePos\[1])" +STARTLINE} addUserKnob {22 createb l "Create Transform - Baked" t "Create a Transform node with the same curves as the Camera Shake node." -STARTLINE T "groupNode = nuke.thisNode()\nname = groupNode.name()\ncolornode = groupNode.knob('tile_color').value()\n\nNT = nuke.createNode(\"Transform\", inpanel=False )\nNT\['translate'].setExpression(name + \".translate\")\nNT\['rotate'].setExpression(name + \".rotate\")\nNT\['scale'].setExpression(name + \".scale_1\")\nNT\['scale'].setSingleValue(False)\nNT\['center'].setExpression(name + \".center\")\nNT\['invert_matrix'].setExpression(name + \".invert_matrix\")\nNT\['filter'].setExpression(name + \".filter\")\nNT\['clamp'].setExpression(name + \".clamp\")\nNT\['black_outside'].setExpression(name + \".black_outside\")\nNT\['motionblur'].setExpression(name + \".motionblur\")\nNT\['shutter'].setExpression(name + \".shutter\")\nNT\['shutteroffset'].setExpression(name + \".shutteroffset\")\nNT\['shuttercustomoffset'].setExpression(name + \".shuttercustomoffset\")\nNT\['label'].setValue(\"(\" +name + \")\")\nNT\['tile_color'].setValue(colornode)\nNT.setSelected(True)\n\n\ndef bakeExpressions(nodes=None, start=None, end=None, views=None):\n\n if nodes is None:\n nodes = nuke.selectedNodes()\n if not nodes:\n nuke.message('No nodes to bake')\n return\n\n scriptRange = nuke.root().frameRange()\n if start is None:\n start = scriptRange.first()\n if end is None:\n end = scriptRange.last()\n\n if views is None:\n views = nuke.views()\n elif not views:\n nuke.message('No views to bake')\n return\n elif not set(views).issubset(nuke.views()):\n nuke.message('Not all views in %s exist in script' % views)\n return\n\n for node in nodes:\n for knob in node.knobs().values():\n if isinstance(knob, nuke.Array_Knob):\n for view in views:\n if knob.isAnimated(view=view):\n aSize = 1 if knob.singleValue(view) else knob.arraySize()\n for index in range(aSize):\n anim = knob.animation(index, view=view)\n if anim is None or anim.noExpression():\n continue\n for f in range(start, end + 1):\n anim.setKey(f, anim.evaluate(f))\n knob.setExpression('curve', channel=index, view=view)\n if anim.constant():\n knob.clearAnimated(index, view=view)\n\ndef promptAndBake():\n nodes = nuke.selectedNodes()\n fr = nuke.getFramesAndViews(\"Range to Bake\", str(nuke.root().frameRange()))\n if fr is None:\n return\n fr, v = fr\n try:\n fr = nuke.FrameRange(fr)\n except ValueError as e:\n nuke.message(str(e))\n return\n bakeExpressions(nodes=nodes, start=fr.first(), end=fr.last(), views=v)\n \npromptAndBake()\n\nnuke.nodeCopy('%clipboard%')\n\nn = nuke.selectedNode()\nnuke.delete(n)\n\nnuke.selectAll() \nnuke.invertSelection()\n\nnodePos = ( nuke.thisNode().xpos(), nuke.thisNode().ypos()) \n\ngroupNode.end()\n\nfor node in nuke.allNodes():\n node.setSelected(False)\n\nnuke.nodePaste('%clipboard%')\n\ngroupNode.setSelected(False)\n\nnodesToPlace = sorted( nuke.selectedNodes(), key=lambda node: node.ypos())\n\nfor index,node in enumerate(nodesToPlace):\n node.setXYpos(nodePos\[0]+100, nodePos\[1])"} addUserKnob {26 S04 l " "} addUserKnob {20 endGroup n -1} addUserKnob {26 by2 l " " T " "} addUserKnob {26 FTools l " " t "FranklinVFX.com\n" -STARTLINE T " Franklin VFX - 2017"} addUserKnob {1 output l INVISIBLE +INVISIBLE} output "\[if \{\[exists \[value T2]]==\"0\"\} \{return \"\[knob this.name_2 0]\"\} \{return \"\[knob this.name_2 1]\"\}]\[value mode_2]" addUserKnob {1 error l INVISIBLE +INVISIBLE} error "\[if \{\[exists \[value T2]]==\"0\"\} \{return \"\[knob this.name_2 0]\"\} \{return \"\[knob this.name_2 1]\"\}]" addUserKnob {1 name_2 l INVISIBLE +INVISIBLE} name_2 0 addUserKnob {1 mode_2 l INVISIBLE +INVISIBLE} mode_2 "Need to be link to a Transform node" } Transform { inputs 0 center {{"\[value parent.T1].center.x"} {"\[value parent.T1].center.y"}} shutteroffset centred name T0 tile_color 0xfefefeff xpos 399 ypos 703 hide_input true } Transform { translate {{"\[value parent.T1].translate"} {"\[value parent.T1].translate"}} rotate {{"\[value parent.T1].rotate"}} scale {{"\[value parent.T1].scale"}} skewX {{"\[value parent.T1].skewX"}} skewY {{"\[value parent.T1].skewY"}} center {{"\[value parent.T1].center.x"} {"\[value parent.T1].center.y"}} invert_matrix {{"\[value parent.T1].invert_matrix"}} shutteroffset centred name T1 tile_color 0xfefefeff label "\[value parent.T1]" xpos 399 ypos 729 } Transform { translate {{"\[value parent.T2].translate"} {"\[value parent.T2].translate"}} rotate {{"\[value parent.T2].rotate"}} scale {{"\[value parent.T2].scale"}} skewX {{"\[value parent.T2].skewX"}} skewY {{"\[value parent.T2].skewY"}} center {{"\[value parent.T2].center.x"} {"\[value parent.T2].center.y"}} invert_matrix {{"\[value parent.T2].invert_matrix"}} filter Impulse shutteroffset centred name T2 tile_color 0xfefefeff label "\[value parent.T2]\n" note_font Verdana xpos 399 ypos 767 } NoOp { name Maths label "\[value parent.T1]\n\[value parent.T2]" note_font Verdana xpos 399 ypos 803 hide_input true addUserKnob {20 User} addUserKnob {6 mode +STARTLINE} mode {{parent.mode}} addUserKnob {7 mixer2 l mix} mixer2 {{1-parent.mix}} addUserKnob {7 mixer l dissolve} mixer {{parent.dissolve}} addUserKnob {12 translate} translate {{"\[value mode] ? (\[exists \[value parent.T2]] ? ((\[value parent.T1].translate)*(1-mixer))+((\[value parent.T2].translate)*mixer) : ((\[value parent.T1].translate)*(1-mixer))+(0*mixer)) : (\[exists \[value parent.T2]] ? ((\[value parent.T1].translate)*(1-mixer2))+((T0.translate)*mixer2) : ((\[value parent.T1].translate)*(1-mixer2))+(0*mixer2))"} {"\[value mode] ? (\[exists \[value parent.T2]] ? ((\[value parent.T1].translate)*(1-mixer))+((\[value parent.T2].translate)*mixer) : ((\[value parent.T1].translate)*(1-mixer))+(0*mixer)) : (\[exists \[value parent.T2]] ? ((\[value parent.T1].translate)*(1-mixer2))+((T0.translate)*mixer2) : ((\[value parent.T1].translate)*(1-mixer2))+(0*mixer2))"}} addUserKnob {7 rotate R -180 180} rotate {{"\[value mode] ? (\[exists \[value parent.T2]] ? ((\[value parent.T1].rotate)*(1-mixer))+((\[value parent.T2].rotate)*mixer) : ((\[value parent.T1].rotate)*(1-mixer))+(0*mixer)) : (\[exists \[value parent.T2]] ? ((\[value parent.T1].rotate)*(1-mixer2))+((T0.rotate)*mixer2) : ((\[value parent.T1].rotate)*(1-mixer2))+(0*mixer2))"}} addUserKnob {14 scale R 0 100} scale {{"\[value mode] ? (\[exists \[value parent.T2]] ? ((\[value parent.T1].scale)*(1-mixer))+((\[value parent.T2].scale)*mixer) : ((\[value parent.T1].scale)*(1-mixer))+(1*mixer)) : (\[exists \[value parent.T2]] ? ((\[value parent.T1].scale)*(1-mixer2))+((T0.scale)*mixer2) : ((\[value parent.T1].scale)*(1-mixer2))+(1*mixer2))"} {"\[value mode] ? (\[exists \[value parent.T2]] ? ((\[value parent.T1].scale)*(1-mixer))+((\[value parent.T2].scale)*mixer) : ((\[value parent.T1].scale)*(1-mixer))+(1*mixer)) : (\[exists \[value parent.T2]] ? ((\[value parent.T1].scale)*(1-mixer2))+((T0.scale)*mixer2) : ((\[value parent.T1].scale)*(1-mixer2))+(1*mixer2))"}} addUserKnob {7 skewX l "skew X" R -1 1} skewX {{"\[value mode] ? (\[exists \[value parent.T2]] ? ((\[value parent.T1].skewX)*(1-mixer))+((\[value parent.T2].skewX)*mixer) : ((\[value parent.T1].skewX)*(1-mixer))+(0*mixer)) : (\[exists \[value parent.T2]] ? ((\[value parent.T1].skewX)*(1-mixer2))+((T0.skewX)*mixer2) : ((\[value parent.T1].skewX)*(1-mixer2))+(0*mixer2))"}} addUserKnob {7 skewY l "skew Y" R -1 1} skewY {{"\[value mode] ? (\[exists \[value parent.T2]] ? ((\[value parent.T1].skewY)*(1-mixer))+((\[value parent.T2].skewY)*mixer) : ((\[value parent.T1].skewY)*(1-mixer))+(0*mixer)) : (\[exists \[value parent.T2]] ? ((\[value parent.T1].skewY)*(1-mixer2))+((T0.skewY)*mixer2) : ((\[value parent.T1].skewY)*(1-mixer2))+(0*mixer2))"}} addUserKnob {12 center} center {{"\[value mode] ? (\[exists \[value parent.T2]] ? ((\[value parent.T1].center.x)*(1-mixer))+((\[value parent.T2].center.x)*mixer) : (\[value parent.T1].center.x)) : (\[exists \[value parent.T2]] ? ((\[value parent.T1].center.x)*(1-mixer2))+((T0.center.x)*mixer2) : (\[value parent.T1].center.x))"} {"\[value mode] ? (\[exists \[value parent.T2]] ? ((\[value parent.T1].center.y)*(1-mixer))+((\[value parent.T2].center.y)*mixer) : (\[value parent.T1].center.y)) : (\[exists \[value parent.T2]] ? ((\[value parent.T1].center.y)*(1-mixer2))+((T0.center.y)*mixer2) : (\[value parent.T1].center.y))"}} } Input { inputs 0 name Input xpos 399 ypos 285 addUserKnob {20 User} addUserKnob {1 T1} T1 "Transform Name" addUserKnob {1 T2} T2 "\[value parent.T2]" } Transform { translate {{parent.Maths.translate.x} {parent.Maths.translate.y}} rotate {{parent.Maths.rotate}} scale {{parent.Maths.scale.w} {parent.Maths.scale.h}} skewX {{parent.Maths.skewX}} skewY {{parent.Maths.skewY}} center {{parent.Maths.center.x} {parent.Maths.center.y}} shutteroffset centred name T_RESULT label "\[value filter]" selected true xpos 399 ypos 359 } Output { name FranklinVFX xpos 399 ypos 664 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_TransformVector2.gizmo ================================================ Group { name TransformVector2_ help "Transforms an image assuming it is a motion vector in RGBA.\nCompared to a regular transform, this will edit the pixel colors to compensate for vector direction and magnitude.\n\nWarning: This node breaks concatenation." tile_color 0xc692ccff addUserKnob {20 transform l "Transform Vector2"} addUserKnob {41 matrix T Transform1.matrix} addUserKnob {41 translate T Transform1.translate} addUserKnob {41 rotate T Transform1.rotate} addUserKnob {41 scale T Transform1.scale} addUserKnob {41 skewX l "skew X" T Transform1.skewX} addUserKnob {41 skewY l "skew Y" T Transform1.skewY} addUserKnob {41 skew_order l "skew order" T Transform1.skew_order} addUserKnob {41 center T Transform1.center} addUserKnob {41 invert_matrix l invert T Transform1.invert_matrix} addUserKnob {41 filter T Transform1.filter} addUserKnob {41 clamp -STARTLINE T Transform1.clamp} addUserKnob {41 black_outside l "black outside" -STARTLINE T Transform1.black_outside} addUserKnob {41 motionblur T Transform1.motionblur} addUserKnob {41 shutter T Transform1.shutter} addUserKnob {41 shutteroffset l "shutter offset" T Transform1.shutteroffset} addUserKnob {41 shuttercustomoffset l "" -STARTLINE T Transform1.shuttercustomoffset} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vectorB xpos -482 ypos -5 } set N9f70fb0 [stack 0] Transform { center {1024 778} shutteroffset centred name Transform1 xpos -482 ypos 92 } set N9f756d0 [stack 0] ColorMatrix { matrix { {{"\[python nuke.toNode('Transform1')\\\['matrix'\\].value()\\\[0\\]]"} {"\[python nuke.toNode('Transform1')\\\['matrix'\\].value()\\\[4\\]]"} 0} {{"\[python nuke.toNode('Transform1')\\\['matrix'\\].value()\\\[1\\]]"} {"\[python nuke.toNode('Transform1')\\\['matrix'\\].value()\\\[5\\]]"} 0} {0 0 0} } name ColorMatrix1 xpos -482 ypos 172 } Output { name Output1 xpos -482 ypos 232 } push $N9f756d0 push $N9f70fb0 end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_TransformVector3.gizmo ================================================ Group { name TransformVector3_ help "Transform a Vector3 in 3 dimensions." addUserKnob {20 main_tab l "Normalize Vector3"} addUserKnob {4 matrix_source l "Use matrix from" t "The vectors can be transformed either by the an Axis connected to the Axis input, or a pixel matrix connected to the matrix input.\nOnly one can be used at once." M {Axis "Pixel Matrix"}} addUserKnob {6 is_vec4 l "Use alpha as vector W" t "4x4 Matrices can only transform vectors of dimention 4. The common method to transform a vecor3 with a matrix4 is to promote the vector3 to a vector4 by setting the w dimention to 1.\nBy checking this box, the vector w will be set to the alpha value instead. Only use if you know what you are trying to achieve." +STARTLINE} addUserKnob {6 normalize l "Normalize result" t "When enabled, the resulting vector is divided by the vector.w after the transformation.\nFor some type of transformations (for example 3d to 2d projection), this step may be required." -STARTLINE} normalize true addUserKnob {6 invert l Invert t "Invert the transform Matrix" -STARTLINE} addUserKnob {41 mix T Merge1.mix} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name axis xpos 546 ypos -298 number 2 } Axis2 { useMatrix true name MatrixKnob xpos 556 ypos -206 } Input { inputs 0 name matrix xpos 358 ypos -303 number 1 } Input { inputs 0 name vector3 xpos 0 ypos -315 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos -190 } set Nf115350 [stack 0] add_layer {matrix0 matrix0.0 matrix0.1 matrix0.2 matrix0.3} Expression { channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 MatrixKnob.world_matrix.0 channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 MatrixKnob.world_matrix.1 channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 MatrixKnob.world_matrix.2 channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 MatrixKnob.world_matrix.3 name Expression1 xpos 195 ypos -193 } add_layer {matrix1 matrix1.0 matrix1.1 matrix1.2 matrix1.3} Expression { channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 MatrixKnob.world_matrix.4 channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 MatrixKnob.world_matrix.5 channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 MatrixKnob.world_matrix.6 channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 MatrixKnob.world_matrix.7 name Expression2 xpos 195 ypos -169 } add_layer {matrix2 matrix2.0 matrix2.1 matrix2.2 matrix2.3} Expression { channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 MatrixKnob.world_matrix.8 channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 MatrixKnob.world_matrix.9 channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 MatrixKnob.world_matrix.10 channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 MatrixKnob.world_matrix.11 name Expression3 xpos 195 ypos -145 } add_layer {matrix3 matrix3.0 matrix3.1 matrix3.2 matrix3.3} Expression { channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 MatrixKnob.world_matrix.12 channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 MatrixKnob.world_matrix.13 channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 MatrixKnob.world_matrix.14 channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 MatrixKnob.world_matrix.15 name Expression4 xpos 195 ypos -121 } Dot { name Dot2 tile_color 0xcccccc00 xpos 229 ypos -36 } Switch { inputs 2 which {{parent.matrix_source}} name Switch1 xpos 358 ypos -39 } Shuffle { in matrix0 name Shuffle1 label "in \[value in]-->out \[value out]" xpos 358 ypos 107 } set Ne5f8350 [stack 0] Shuffle { in matrix1 name Shuffle2 label "in \[value in]-->out \[value out]" xpos 358 ypos 147 } set Ne68eb10 [stack 0] Shuffle { in matrix2 name Shuffle3 label "in \[value in]-->out \[value out]" xpos 358 ypos 183 } set Ne36aef0 [stack 0] Shuffle { in matrix3 name Shuffle4 label "in \[value in]-->out \[value out]" xpos 358 ypos 220 } push $Ne36aef0 push $Ne68eb10 push $Ne5f8350 push $Nf115350 Dot { name Dot3 tile_color 0xcccccc00 xpos 30 ypos 165 } set N119252d0 [stack 0] BlinkScript { inputs 5 recompileCount 18 ProgramGroup 1 KernelDescription "2 \"TransformVector4\" iterate pixelWise e9bfb03cdbf363d4b657df0f835e68dba3bb796a594c3822ebad3f28e4e0e81c 6 \"src\" Read Point \"matrix0\" Read Point \"matrix1\" Read Point \"matrix2\" Read Point \"matrix3\" Read Point \"dst\" Write Point 3 \"Input is Vector 4\" Bool 1 AA== \"Divide by W\" Bool 1 AQ== \"Invert Transform\" Bool 1 AA== 3 \"is_vector4\" 1 1 \"do_normalization\" 1 1 \"invert\" 1 1 0" kernelSource "kernel TransformVector4 : ImageComputationKernel\n\{\n Image src; // the input image\n Image matrix0; // the input image\n Image matrix1; // the input image\n Image matrix2; // the input image\n Image matrix3; // the input image\n Image dst; // the output image\n\n param:\n bool is_vector4; \n bool do_normalization; \n bool invert;\n\n // In define(), parameters can be given labels and default values.\n void define() \{\n defineParam(is_vector4, \"Input is Vector 4\", false);\n defineParam(do_normalization, \"Divide by W\", true);\n defineParam(invert, \"Invert Transform\", false);\n \}\n\n void process() \{\n // Read the input image\n SampleType(src) vector = src();\n SampleType(matrix0) m0 = matrix0();\n SampleType(matrix1) m1 = matrix1();\n SampleType(matrix2) m2 = matrix2();\n SampleType(matrix3) m3 = matrix3();\n\n // Create the matrix object (matrix3 in this case)\n float4x4 matrix;\n matrix\[0]\[0] = m0.x;\n matrix\[0]\[1] = m0.y;\n matrix\[0]\[2] = m0.z;\n matrix\[0]\[3] = m0.w;\n matrix\[1]\[0] = m1.x;\n matrix\[1]\[1] = m1.y;\n matrix\[1]\[2] = m1.z;\n matrix\[1]\[3] = m1.w;\n matrix\[2]\[0] = m2.x;\n matrix\[2]\[1] = m2.y;\n matrix\[2]\[2] = m2.z;\n matrix\[2]\[3] = m2.w;\n matrix\[3]\[0] = m3.x;\n matrix\[3]\[1] = m3.y;\n matrix\[3]\[2] = m3.z;\n matrix\[3]\[3] = m3.w;\n\n if (invert) \{\n matrix = matrix.invert();\n \}\n\n // Transform\n float a = vector.w;\n if (!is_vector4) \{\n vector.w = 1.0f;\n \}\n vector = matrix*vector;\n if (do_normalization) \{\n vector = vector/vector.w;\n \}\n if (!is_vector4) \{\n vector.w = a;\n \}\n\n // Write the result to the output image\n dst() = float4(vector.x, vector.y, vector.z, vector.w);\n \}\n\};\n" rebuild "" "TransformVector4_Input is Vector 4" {{parent.is_vec4}} "TransformVector4_Divide by W" {{parent.normalize}} "TransformVector4_Invert Transform" {{parent.invert}} rebuild_finalise "" name BlinkScript1 xpos 128 ypos 156 } Dot { name Dot4 tile_color 0xcccccc00 xpos 162 ypos 296 } push $N119252d0 Merge2 { inputs 2 operation copy bbox B name Merge1 xpos -4 ypos 293 } Output { name Output1 xpos -4 ypos 544 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_TranslateMatrix4.gizmo ================================================ Group { name TranslateMatrix4_ help "Translate a matrix4 using a control channel (rgb from vector input) for which each channel is considered as a scalar for x, y and z" addUserKnob {20 Matrix4x4_Translate} addUserKnob {26 Description l "" +STARTLINE T "Translate a matrix4 using a control channel (rgb) for which each channel is considered as a scalar for x, y and z"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vector xpos 491 ypos 155 number 1 } Dot { name Dot1 xpos 525 ypos 252 } Input { inputs 0 name matrix xpos 344 ypos 161 } add_layer {matrix0 matrix0.0 matrix0.1 matrix0.2 matrix0.3} add_layer {matrix1 matrix1.0 matrix1.1 matrix1.2 matrix1.3} add_layer {matrix2 matrix2.0 matrix2.1 matrix2.2 matrix2.3} MergeExpression { inputs 2 channel0 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr0 matrix0.3+Ar channel1 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr1 matrix1.3+Ag channel2 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr2 matrix2.3+Ab channel3 none name MergeExpression1 xpos 344 ypos 249 } Output { name Output1 xpos 344 ypos 349 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_TransposeMatrix4.gizmo ================================================ Group { name TransposeMatrix4_ help "Transpose a pixel based Matrix4 (Defined as layers matrix0, matrix1, matrix2 and matrix3)" addUserKnob {20 Matrix4 l TransposeMatrix4} addUserKnob {26 Description l "" +STARTLINE T "Transpose matrix channels"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name Inputmatrix xpos 361 ypos 272 } Dot { name Dot31 tile_color 0xcccccc00 xpos 395 ypos 355 } set N2070ca60 [stack 0] Dot { name Dot32 tile_color 0xcccccc00 xpos 497 ypos 355 } set N15d21900 [stack 0] Dot { name Dot33 tile_color 0xcccccc00 xpos 619 ypos 355 } set N202b2f20 [stack 0] Dot { name Dot34 tile_color 0xcccccc00 xpos 736 ypos 355 } add_layer {matrix3 matrix3.0 matrix3.1 matrix3.2 matrix3.3} Expression { channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 matrix0.3 channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 matrix1.3 channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 matrix2.3 channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} name Expression56 xpos 702 ypos 402 } Dot { name Dot2 tile_color 0xcccccc00 xpos 736 ypos 638 } push $N202b2f20 add_layer {matrix2 matrix2.0 matrix2.1 matrix2.2 matrix2.3} Expression { channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 matrix0.2 channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 matrix1.2 channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 matrix3.2 name Expression55 xpos 585 ypos 399 } Dot { name Dot1 tile_color 0xcccccc00 xpos 619 ypos 548 } push $N15d21900 add_layer {matrix1 matrix1.0 matrix1.1 matrix1.2 matrix1.3} Expression { channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 matrix0.1 channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 matrix2.1 channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 matrix3.1 name Expression54 xpos 463 ypos 398 } Dot { name Dot37 tile_color 0xcccccc00 xpos 497 ypos 464 } push $N2070ca60 add_layer {matrix0 matrix0.0 matrix0.1 matrix0.2 matrix0.3} Expression { channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 matrix1.0 channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 matrix2.0 channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 matrix3.0 name Expression53 xpos 361 ypos 395 } Copy { inputs 2 from0 matrix1.0 to0 matrix1.0 from1 matrix1.2 to1 matrix1.2 from2 matrix1.3 to2 matrix1.3 bbox B name Copy1 xpos 361 ypos 442 } Copy { inputs 2 from0 matrix2.0 to0 matrix2.0 from1 matrix2.1 to1 matrix2.1 from2 matrix2.3 to2 matrix2.3 bbox B name Copy2 xpos 361 ypos 526 } Copy { inputs 2 from0 matrix3.0 to0 matrix3.0 from1 matrix3.1 to1 matrix3.1 from2 matrix3.2 to2 matrix3.2 bbox B name Copy3 xpos 361 ypos 616 } Output { name Output1 xpos 361 ypos 733 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_UVEditor.gizmo ================================================ Group { name UVEditor onCreate "\nthisGRP = nuke.thisGroup()\nif not thisGRP\['disable_error'].getValue() :\n import os\n import re\n\n fontpath = re.split( '/|\"\"' , nuke.EXE_PATH )\n fontpath.pop()\n fontpath += \['plugins','fonts']\n \n if os.path.isfile( '/'.join( fontpath + \['UtopiaBold.pfa'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['UtopiaBold.pfa'] ) )\n elif os.path.isfile( '/'.join( fontpath + \['CourierBold.pfa'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['CourierBold.pfa'] ) )\n elif os.path.isfile( '/'.join( fontpath + \['Courier10PitchBold.pfb'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['Courier10PitchBold.pfb'] ) )\n else :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['BitstreamCharterBold.pfb'] ) )\n" tile_color 0x6666ff addUserKnob {20 tab_general l General} addUserKnob {3 texSize l "texture size"} texSize 1024 addUserKnob {41 filter T SR.filter} addUserKnob {41 antialiasing T SR.antialiasing} addUserKnob {26 ""} addUserKnob {41 view_wireframe l "view wireframe" T menu02.view_wireframe} addUserKnob {7 wireframe_size l "wireframe size" R 0.1 10} wireframe_size 0.1 addUserKnob {26 ""} addUserKnob {41 output T menu01.output} addUserKnob {30 uv_shift l INVISIBLE +INVISIBLE} addUserKnob {41 scanRes +INVISIBLE T store.scanRes} addUserKnob {22 udim_export l export +DISABLED T "thisGRP = nuke.thisGroup()\ndataCheckNode = nuke.toNode('dataCheck')\n\n########################################################\n\nusrUV = thisGRP\['uv_shift'].getValue()\ndataReturn = \[]\n\nprogBar = nuke.ProgressTask('Checking UV')\njobCount = 0\n\nfor v in range (0, 10) :\n for u in range (0, 10) :\n\n ### progress bar\n jobCount += 1\n progShow = int(jobCount/100 * 100)\n if progBar.isCancelled() :\n break;\n progBar.setProgress(progShow)\n #################\n\n thisGRP\['uv_shift'].setValue(\[u,v])\n nuke.execute(dataCheckNode, nuke.frame(), nuke.frame())\n if dataCheckNode\['maxlumapixvalue'].getValue() != \[0.0, 0.0, 0.0] :\n dataReturn.append(1)\n else :\n dataReturn.append(0)\n\ndel progBar\n\ndataCheckNode\['maxlumapixdata'].clearAnimated()\ndataCheckNode\['maxlumapixvalue'].clearAnimated()\ndataCheckNode\['minlumapixdata'].clearAnimated()\ndataCheckNode\['minlumapixvalue'].clearAnimated()\n\nif len(dataReturn) == 100 :\n\tfor i in range (0, 100) :\n\t if dataReturn\[i] == 1 :\n\t uvMax = i\n\n\tthisGRP\['uv_shift'].setValue(usrUV)\n\n\t########################################################\n\n\tgoStore = nuke.toNode('store')\n\tgoStore\['fn'].execute()\n\n\troot = getLevel()\n\n\troot.begin()\n\toutFR = nuke.nodes.FrameRange()\n\toutFR\['first_frame'].setValue(1001)\n\toutFR\['last_frame'].setValue(1001 + uvMax)\n\toutFR\['label'].setValue( 'udim range : 1001 - \{0\}'.format( str(1001 + uvMax) ) )\n\toutFR.setInput(0, thisGRP)\n\toutFR.setXYpos(int(thisGRP\['xpos'].value()), int(thisGRP\['ypos'].value()+80))\n\n\texpDot = nuke.nodes.Dot()\n\texpDot\['label'].setValue('Texture modify here : swap the paint/patch texture into udim frame')\n\texpDot.setInput(0, outFR)\n\n\tyDot = nuke.nodes.Dot()\n\tyDot.setInput(0, expDot)\n\n\tuvGRP = nuke.nodes.Group()\n\tuvGRP\['label'].setValue('udim stitch for nuke')\n\n\tnDot = nuke.nodes.Dot()\n\tnDot\['label'].setValue('Connect to Geo')\n\troot.end()\n\n\tuvGRP.begin()\n\tinNode = nuke.nodes.Input(name='udim')\n\tcropNode = nuke.nodes.Crop()\n\tcropNode\['crop'].setValue(1)\n\tcropNode.setInput(0, inNode)\n\tallDot = nuke.nodes.Dot()\n\tallDot.setInput(0, cropNode)\n\n\tuvMerge = nuke.nodes.Merge2()\n\toutNode = nuke.nodes.Output()\n\toutNode.setInput(0, uvMerge)\n\n\tfor i in range (0, uvMax+1) :\n\t uDimHold = nuke.nodes.FrameHold()\n\t uDimHold\['first_frame'].setValue(1001+i)\n\t uDimHold.setInput(0, allDot)\n\t \n\t uvTran = nuke.nodes.Transform()\n\t uvTran.addKnob(nuke.UV_Knob('uv_offset'))\n\t if i < 10 :\n\t u = i\n\t v = 0\n\t else :\n\t if i < 100 :\n\t u = int(str(i)\[1])\n\t v = int(str(i)\[0])\n\t uvTran\['uv_offset'].setValue(\[u, v])\n\t uvTran\['translate'].setExpression('input.width*uv_offset.u', 0)\n\t uvTran\['translate'].setExpression('input.height*uv_offset.v', 1)\n\t uvTran.setInput(0, uDimHold)\n\n\t uvMerge.setInput(i+3, uvTran)\n\n\n\tuvGRP.end()\n\n\tuvGRP.setInput(0, yDot)\n\tnDot.setInput(0, uvGRP)\n\n\troot.begin()\n\texWrite = nuke.nodes.Write()\n\texWrite.setInput(0, yDot)\n\texWrite\['label'].setValue('export udim
render range : \[value input.first_frame] - \[value input.last_frame]')\n\troot.end()\n\n\tdel uvMax\nelse :\n\tnuke.message('Scan process terminated by user.')\n\ndel dataReturn" +STARTLINE} addUserKnob {26 ""} addUserKnob {41 font T store.font} addUserKnob {6 disable_error l "disable text" +STARTLINE} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.4} addUserKnob {26 l_DATE l "Date Modified" T 2020-04-24} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.4
- fix misspelling of knob's label
- fix not working disable text knob

1.3
- fix font issue
  works on linux, mac & windows

1.2
- preview in uv space set limited 
  in 1024 resolution for not drag 
  down speed purpose.
- added show tile number
- changed uv combine to uv stitch
  in export group
- code update
- scan size reduce, speed up process\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -1755 ypos 302 bdwidth 263 bdheight 296 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x424242ff label "UV preview" note_font_size 42 xpos -824 ypos 451 bdwidth 343 bdheight 672 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x424242ff label udim note_font_size 42 xpos -328 ypos 451 bdwidth 354 bdheight 675 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x424242ff label uvtile note_font_size 42 xpos 109 ypos 451 bdwidth 354 bdheight 675 } Input { inputs 0 name tex xpos -1000 ypos 83 number 1 } Wireframe { inputs 0 line_width {{wireframe_size}} name Wireframe1 xpos -866 ypos 207 } Switch { inputs 2 which {{!view_wireframe}} name Switch2 xpos -1000 ypos 207 } Input { inputs 0 name geo xpos -1171 ypos 82 } ApplyMaterial { inputs 2 name ApplyMaterial1 xpos -1171 ypos 207 } Dot { name Dot6 xpos -1137 ypos 287 } Dot { name Dot1 xpos -1137 ypos 384 } set Na180ec00 [stack 0] Reformat { inputs 0 type "to box" box_width {{store.scanRes}} box_height {{box_width}} box_fixed true name scanRes xpos -1061 ypos 595 } ScanlineRender { inputs 2 conservative_shader_sampling false transparency false ztest_enabled false projection_mode uv overscan {{store.scanRes*10}} shutteroffset centred motion_vectors_type off MB_channel none name SR1 xpos -1171 ypos 595 } Remove { operation keep channels rgb name Remove1 xpos -1171 ypos 675 } Transform { translate {{store.scanRes*uv_offset.u*-1} {store.scanRes*uv_offset*-1}} shutteroffset centred name pos_shift xpos -1171 ypos 740 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {{uv_shift} {uv_shift}} } Crop { box {0 0 {store.scanRes} {store.scanRes}} reformat true crop false name Crop1 xpos -1171 ypos 801 } CurveTool { operation "Max Luma Pixel" ROI {0 0 {store.scanRes} {store.scanRes}} intensitydata {0 0 0 0} maxlumapixvalue {0 0 0} minlumapixvalue {0 0 0} name dataCheck xpos -1171 ypos 881 } NoOp { inputs 0 name menu01 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['output'].getValue() == 1 :\n thisGRP\['udim_export'].setEnabled(True)\nelse :\n thisGRP\['udim_export'].setEnabled(False)\n" xpos -1669 ypos 392 addUserKnob {20 User} addUserKnob {4 output M {"preview in uv space" udim "uv tile" "uv pass"}} } Reformat { inputs 0 type "to box" box_width {{texSize*10}} box_height {{texSize*10}} box_fixed true resize none name Reformat4 xpos 719 ypos 638 } Expression { expr0 x/width expr1 y/height channel2 none channel3 none name uv xpos 719 ypos 720 } Multiply { channels rgb value {10 10 1 1} name Multiply1 xpos 719 ypos 798 } Reformat { type "to box" box_width {{texSize}} box_height {{texSize}} box_fixed true resize none center false pbb true name Reformat3 xpos 719 ypos 878 } Dot { name Dot8 xpos 753 ypos 1225 } push $Na180ec00 Dot { name Dot4 xpos -780 ypos 384 } set Na061a800 [stack 0] Reformat { inputs 0 type "to box" box_width {{texSize}} box_height {{box_width}} box_fixed true name res xpos 5 ypos 381 } ScanlineRender { inputs 2 conservative_shader_sampling false transparency false ztest_enabled false filter Impulse projection_mode uv overscan {{texSize*10 x1009 1948}} shutteroffset centred motion_vectors_type off MB_channel none name SR xpos -154 ypos 381 } Dot { name Dot2 xpos -120 ypos 628 } set Nb741d400 [stack 0] Shuffle { red black green black blue black alpha black name Shuffle1 xpos -292 ypos 625 } Text { output rgb cliptype none message " 91 92 93 94 95 96 97 98 99 00\n 81 82 83 84 85 86 87 88 89 90\n 71 72 73 74 75 76 77 78 79 80\n 61 62 63 64 65 66 67 68 69 70\n 51 52 53 54 55 56 57 58 59 60\n 41 42 43 44 45 46 47 48 49 50\n 31 32 33 34 35 36 37 38 39 40\n 21 22 23 24 25 26 27 28 29 30\n 11 12 13 14 15 16 17 18 19 20\n 01 02 03 04 05 06 07 08 09 10" font "\[value store.font]" kerning 0.236 leading 1.051 yjustify bottom Transform 1 box {0 0 1024 999} translate {0 {"( ( texSize * 10 ) / 1024 ) *25"}} scale {{"( texSize * 10 ) / 1024"}} name Text2 selected true xpos -292 ypos 707 disable {{disable_error}} } Multiply { channels rgb value {0 0.05 0.05 1} name Multiply3 xpos -292 ypos 769 } Dot { name Dot13 xpos -258 ypos 821 } Dot { name Dot11 xpos -178 ypos 821 } set Nbcba2000 [stack 0] Dot { name Dot12 xpos 221 ypos 821 } push $Nb741d400 Dot { name Dot5 xpos 281 ypos 628 } Merge2 { inputs 2 operation under Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge4 xpos 247 ypos 879 } Crop { box {0 0 {texSize*10} {texSize*10}} crop false name Crop4 xpos 247 ypos 961 } Dot { name Dot7 xpos 281 ypos 1204 } push $Nbcba2000 push $Nb741d400 Merge2 { inputs 2 operation under Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge3 xpos -154 ypos 879 } Transform { translate {{texSize*uv_offset.u*-1 i} {texSize*uv_offset*-1 i}} shutteroffset centred name pos_shift1 xpos -154 ypos 961 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {{"frame <=1001 ? 0 : (frame-1)%10"} {"frame < 1000 ? 0 : int(((frame-1)/10)-100)"}} } Dot { name Dot3 xpos -120 ypos 1202 } Reformat { inputs 0 format "1024 1024 0 0 1024 1024 1 square_1K" name Reformat2 xpos -693 ypos 712 } Dot { name Dot9 xpos -659 ypos 770 } set Nbcb68c00 [stack 0] Dot { name Dot10 xpos -533 ypos 770 } Text { output rgb message " 91 92 93 94 95 96 97 98 99 00\n 81 82 83 84 85 86 87 88 89 90\n 71 72 73 74 75 76 77 78 79 80\n 61 62 63 64 65 66 67 68 69 70\n 51 52 53 54 55 56 57 58 59 60\n 41 42 43 44 45 46 47 48 49 50\n 31 32 33 34 35 36 37 38 39 40\n 21 22 23 24 25 26 27 28 29 30\n 11 12 13 14 15 16 17 18 19 20\n 01 02 03 04 05 06 07 08 09 10" font "\[value store.font]" kerning 0.236 leading 1.051 yjustify bottom Transform 1 box {0 0 1024 999} translate {0 25} name Text1 xpos -567 ypos 818 disable {{disable_error}} } Multiply { channels rgb value {0 0.05 0.05 1} name Multiply2 xpos -567 ypos 887 } push $Nbcb68c00 Grid { name Grid1 xpos -693 ypos 814 } Merge2 { inputs 2 name Merge2 xpos -693 ypos 887 } push $Na061a800 Reformat { inputs 0 format "1024 1024 0 0 1024 1024 1 square_1K" name Reformat5 xpos -689 ypos 531 } Reformat { type scale scale 0.1 resize none name Reformat6 xpos -689 ypos 594 } ScanlineRender { inputs 2 conservative_shader_sampling false transparency false ztest_enabled false projection_mode uv overscan 2560 shutteroffset centred motion_vectors_type off MB_channel none name SR2 xpos -814 ypos 594 } Merge2 { inputs 2 operation under name Merge1 xpos -814 ypos 887 } Crop { box {0 0 1024 1024} reformat true crop false name Crop2 xpos -814 ypos 969 } Switch { inputs 4 which {{output}} name Switch1 xpos -814 ypos 1412 } Output { name Output1 xpos -814 ypos 1597 } NoOp { inputs 0 name menu02 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['view_wireframe'].getValue() == 1 :\n thisGRP\['wireframe_size'].setEnabled(True)\nelse :\n thisGRP\['wireframe_size'].setEnabled(False)\n" xpos -1668 ypos 484 addUserKnob {20 User} addUserKnob {6 view_wireframe l "view wireframe" +STARTLINE} view_wireframe true } NoOp { inputs 0 name store xpos -1419 ypos 388 addUserKnob {20 User} addUserKnob {22 fn T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel" +STARTLINE} addUserKnob {3 scanRes} scanRes 64 addUserKnob {2 font} font "C:/Program Files/Nuke12.0v3/plugins/fonts/UtopiaBold.pfa" } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_UV_Map.gizmo ================================================ Group { name UV_Map help "Create an uvmap from the input format or the selected format that can be used for example for baking transformations and applying them through a STmap node.\nUse the overscan to create values outside of the viewing window and the 0-1 range." tile_color 0x578100ff note_font "Bitstream Vera Sans" note_font_color 0xffffffff selected true mapsize {0.15 0.15} addUserKnob {20 tab l "UV Map"} addUserKnob {41 format T Constant1.format} addUserKnob {41 scale l overscan T Reformat1.scale} addUserKnob {6 alpha l "alpha 1" +STARTLINE} addUserKnob {41 black_outside l "black outside" -STARTLINE T Reformat2.black_outside} } Input { inputs 0 name Input xpos 620 ypos -370 } Shuffle { red black green black blue black alpha black name Shuffle1 xpos 620 ypos -309 } Constant { inputs 0 name Constant1 xpos 479 ypos -214 } Switch { inputs 2 which {{"\[exists parent.input0]"}} name Switch1 xpos 620 ypos -190 } Reformat { type scale resize none pbb true name Reformat1 xpos 620 ypos -71 } Reformat { type scale scale {{1/Reformat1.scale} {1/Reformat1.scale}} resize none black_outside true pbb true name Reformat2 xpos 620 ypos -45 } Shuffle { alpha white name Shuffle13 tile_color 0xffffff00 label "\[value in]" xpos 620 ypos 12 disable {{!parent.alpha}} } Expression { expr0 (x+0.5)/width expr1 (y+0.5)/height name Expression2 xpos 620 ypos 75 } Output { name Output1 xpos 620 ypos 127 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_UV_Mapper.gizmo ================================================ Group { name UV_Mapper knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == 'enable':\n if n.knob('enable').getValue() == 0:\n n.knob('UDIMinput').setEnabled(False)\n n.knob('selectUV').setEnabled(True)\n\n else:\n n.knob('UDIMinput').setEnabled(True)\n n.knob('selectUV').setEnabled(False)\n\nif k.name() == 'UDIMinput': \n UDIMinput = n.knob('UDIMinput')\n selectUV = n.knob('selectUV')\n \n UDIMnum = int(UDIMinput.getValue())\n\n \n u = ((UDIMnum - 1000) % 10) - 1\n v = (UDIMnum - 1000) // 10\n \n selectUV.setValue(u, 0)\n selectUV.setValue(v, 1)\n\n \n " tile_color 0x7f7f26ff label "UDIM: (\[value UDIMnumber])" note_font "DejaVu Sans" note_font_color 0xffffffff selected true addUserKnob {20 UV_Mapper} addUserKnob {26 UVs l "UVs" T " "} addUserKnob {6 previewUVs l "preview selected UVs" -STARTLINE} addUserKnob {41 operation l "Img Channels" T STMap1.channels} addUserKnob {41 UVchannels l "UV Channel" T Shuffle1.in} addUserKnob {3 UDIMinput l "UDIM number" +DISABLED} UDIMinput 1001 addUserKnob {6 enable -STARTLINE} addUserKnob {18 selectUV l "Select UV"} selectUV {0 0 0} addUserKnob {6 selectUV_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 color_rgb_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {30 uvCoord +INVISIBLE} uvCoord {{Grade1.add.r} {Grade1.add.g}} addUserKnob {3 UDIMnumber l "UDIM number" +DISABLED +INVISIBLE} UDIMnumber {{"1000 + (10*uvCoord.v) + (1+ uvCoord.u)"}} addUserKnob {6 killOutline l "Kill Outline" +STARTLINE} killOutline true addUserKnob {6 edgeExtendCheck l "Edge Extend" -STARTLINE} addUserKnob {20 EdgeExtendOptions l "Edge Extend Options" n 1} EdgeExtendOptions 0 addUserKnob {7 erodeSize l "Erode Size" R 0 10} erodeSize 1 addUserKnob {41 expandsize l "Expand Size" T Expand.size} addUserKnob {41 mode T Expand.mode} addUserKnob {20 endGroup n -1} addUserKnob {26 STmap l "STmap" T " "} addUserKnob {41 filter T STMap1.filter} addUserKnob {6 takeAlphaUVs l "Take Alpha From UVs" +STARTLINE} addUserKnob {6 previewInverseSTMap l "Preview Inverse STMap" +STARTLINE} addUserKnob {6 imgIsRenderBeauty l "img is Beauty render" -STARTLINE} addUserKnob {20 SettingsInverseSTMAP l "Inverse STMap settings" n 1} SettingsInverseSTMAP 0 addUserKnob {41 box_width l "UV size" T STMapInverse1.box_width} addUserKnob {41 fill_gap l "Fill Gap" T STMapInverse1.fill_gap} addUserKnob {41 size T STMapInverse1.size} addUserKnob {41 detail l "point detail" T STMapInverse1.detail} addUserKnob {41 pointSize l "point size" T STMapInverse1.pointSize} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 info} addUserKnob {26 Creator l Creator: T " Tony Lyons"} addUserKnob {26 desc l Name: T UV_Mapper} addUserKnob {26 ver l "Version: " T v02} } Input { inputs 0 name InputUVs xpos -457 ypos 137 } Shuffle { name Shuffle1 label "\[value in]" xpos -457 ypos 203 } Grade { multiply {1 1 0 1} add {{floor(parent.selectUV.r)} {floor(parent.selectUV.g)} 0 0} reverse true black_clamp false name Grade1 xpos -457 ypos 268 } Expression { expr0 "r<0 || r>1 || g<0 || g>1? 0:r" expr1 "r<0 || r>1 || g<0 || g>1? 0:g" expr3 "r<=0 || r>1 || g<=0 || g>1? 0:1" name Expression4 xpos -457 ypos 320 } set N107876b0 [stack 0] Dot { name Dot1 note_font_size 41 xpos -299 ypos 324 } Group { name BinaryAlpha tile_color 0x2a2a2aff label "(\[value an] --> \[value output1])" note_font Verdana note_font_color 0xfffff9ff xpos -333 ypos 364 addUserKnob {20 BinaryAlpha} addUserKnob {4 an l Analyze: M {rgb rgba alpha "" "" ""}} addUserKnob {4 output1 l Output: M {rgba alpha "" "" "" ""}} output1 alpha addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Analyzes channel input and creates a binary result 0 or 1 and outputs it into output channel" T BinaryAlpha} addUserKnob {26 ver l Version: T v03} } Input { inputs 0 name Input xpos -398 ypos 275 } Expression { temp_name0 rgb_an temp_expr0 "r !=0 || g!=0 || b!=0?1:0" temp_name1 rgba_an temp_expr1 "r!=0 || g!=0 || b!=0 || a!=0?1:0" temp_name2 alpha_an temp_expr2 a!=0?1:0 expr3 "parent.an == 0 ? rgb_an : parent.an == 1 ? rgba_an : alpha_an" name Expression xpos -398 ypos 341 } Shuffle { red alpha green alpha blue alpha name Shuffle label "\[value in]" xpos -398 ypos 367 disable {{parent.output1}} } Output { name Output1 xpos -398 ypos 456 } end_group set N1078c560 [stack 0] Dilate { channels alpha size {{-parent.Dilate2.size}} name Dilate1 xpos -208 ypos 367 } Dilate { channels alpha size 1 name Dilate2 xpos -208 ypos 405 } push $N1078c560 Switch { inputs 2 which {{parent.killOutline}} name Switch2 label "\[value which]" xpos -333 ypos 405 } Dilate { channels rgba size {{-erodeSize}} name Dilate3 xpos -333 ypos 460 disable {{!parent.edgeExtendCheck}} } Dot { name Dot3 note_font_size 41 xpos -299 ypos 514 } push $N107876b0 Merge2 { inputs 2 operation mask bbox A name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -457 ypos 510 } Dot { name Dot2 note_font_size 41 xpos -423 ypos 584 } set N107ad920 [stack 0] Group { name Expand xpos -334 ypos 581 addUserKnob {20 User} addUserKnob {41 size t "Size of Blur" T Blur1.size} addUserKnob {7 transparencyBlend t "Amount of original transparency retained when blending with the blurred version"} transparencyBlend 0.33 addUserKnob {4 mode t "the mode how the blured version is combined with the original\n - : original\nMin: min blurred and original\nMax: max blurred and original\n(Min and Max may help with artifacts on the edges, best used on Z-Depth)" M {" - " Min Max "" ""}} mode Min } Input { inputs 0 name Input1 xpos 0 ypos -57 } set N10800070 [stack 0] push $N10800070 Shuffle { red alpha green alpha blue alpha alpha black name Shuffle1 xpos 0 ypos -11 } Histogram { in {0 1 {transparencyBlend i}} name Histogram1 xpos 0 ypos 47 } push $N10800070 Blur { channels rgba size 4 name Blur1 xpos -176 ypos 59 } Unpremult { name Unpremult1 xpos -176 ypos 109 } set N109e3300 [stack 0] Dot { name Dot1 xpos 294 ypos 114 } set N107f0450 [stack 0] push $N10800070 Unpremult { name Unpremult2 xpos 140 ypos -11 } set N10a17500 [stack 0] Dot { name Dot2 xpos 414 ypos 54 } Merge2 { inputs 2 operation max name Max xpos 338 ypos 139 } push $N107f0450 push $N10a17500 Merge2 { inputs 2 operation min name Min xpos 200 ypos 139 } push $N10a17500 Switch { inputs 3 which {{parent.mode i}} name Switch1 xpos 125 ypos 199 } push $N109e3300 Keymix { inputs 3 channels rgb maskChannel rgba.red name Keymix1 xpos 0 ypos 229 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 70 ypos 312 } Output { name Output1 xpos 70 ypos 380 } end_group Group { name BinaryAlpha1 tile_color 0x2a2a2aff label "(\[value an] --> \[value output1])" note_font Verdana note_font_color 0xfffff9ff xpos -334 ypos 620 addUserKnob {20 BinaryAlpha} addUserKnob {4 an l Analyze: M {rgb rgba alpha "" "" ""}} addUserKnob {4 output1 l Output: M {rgba alpha "" "" "" ""}} output1 alpha addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Analyzes channel input and creates a binary result 0 or 1 and outputs it into output channel" T BinaryAlpha} addUserKnob {26 ver l Version: T v03} } Input { inputs 0 name Input xpos -398 ypos 275 } Expression { temp_name0 rgb_an temp_expr0 "r !=0 || g!=0 || b!=0?1:0" temp_name1 rgba_an temp_expr1 "r!=0 || g!=0 || b!=0 || a!=0?1:0" temp_name2 alpha_an temp_expr2 a!=0?1:0 expr3 "parent.an == 0 ? rgb_an : parent.an == 1 ? rgba_an : alpha_an" name Expression xpos -398 ypos 341 } Shuffle { red alpha green alpha blue alpha name Shuffle label "\[value in]" xpos -398 ypos 367 disable {{parent.output1}} } Output { name Output1 xpos -398 ypos 456 } end_group push $N107ad920 Switch { inputs 2 which {{edgeExtendCheck}} name Switch1 label "\[value which]" xpos -457 ypos 620 } Dot { name Dot4 note_font_size 41 xpos -423 ypos 764 } set N10cc3680 [stack 0] push $N10cc3680 Dot { name Dot5 note_font_size 41 xpos 132 ypos 764 } set N10cc86b0 [stack 0] Dot { name Dot6 note_font_size 41 xpos 132 ypos 819 } set N10ccd5a0 [stack 0] Dot { name Dot8 note_font_size 41 xpos 132 ypos 863 } push $N10ccd5a0 push $N10cc86b0 Reformat { inputs 0 format "1024 1024 0 0 1024 1024 1 square_1K" resize none center false pbb true name Reformat4 xpos -39 ypos -787 } set N10cd7440 [stack 0] Grid { number 8 size 2 name Grid1 xpos -155 ypos -713 } Grid { opacity 0.5 number 64 name Grid2 xpos -155 ypos -670 } Text2 { font_size_toolbar 100 font_width_toolbar 100 font_height_toolbar 100 kerning_toolbar -0.04899999872 tracking_toolbar -0.007000000216 message " 1 2 3 4 5 6 7 8\n 8 1 2 3 4 5 6 7\n 7 8 1 2 3 4 5 6\n 6 5 8 1 2 3 4 5\n 5 6 7 8 1 2 3 4\n 4 5 6 7 8 1 2 3\n 3 4 5 6 7 8 1 2\n 2 3 4 5 6 7 8 1" old_message {{32 49 32 32 32 50 32 32 32 51 32 32 32 52 32 32 32 53 32 32 32 54 32 32 32 55 32 32 32 56 10 32 56 32 32 32 49 32 32 32 50 32 32 32 51 32 32 32 52 32 32 32 53 32 32 32 54 32 32 32 55 10 32 55 32 32 32 56 32 32 32 49 32 32 32 50 32 32 32 51 32 32 32 52 32 32 32 53 32 32 32 54 10 32 54 32 32 32 53 32 32 32 56 32 32 32 49 32 32 32 50 32 32 32 51 32 32 32 52 32 32 32 53 10 32 53 32 32 32 54 32 32 32 55 32 32 32 56 32 32 32 49 32 32 32 50 32 32 32 51 32 32 32 52 10 32 52 32 32 32 53 32 32 32 54 32 32 32 55 32 32 32 56 32 32 32 49 32 32 32 50 32 32 32 51 10 32 51 32 32 32 52 32 32 32 53 32 32 32 54 32 32 32 55 32 32 32 56 32 32 32 49 32 32 32 50 10 32 50 32 32 32 51 32 32 32 52 32 32 32 53 32 32 32 54 32 32 32 55 32 32 32 56 32 32 32 49} } box {7 0 1024 1007} transforms {{0 2} } font_width_values {{0 100 1 100 2 100 3 100 4 100 5 100 6 100 7 100 8 100 9 100 10 100 11 100 12 100 13 100 14 100 15 100 16 100 17 100 18 100 19 100 20 100 21 100 22 100 23 100 24 100 25 100 26 100 27 100 28 100 29 100 30 100 31 100 33 100 34 100 35 100 37 100 38 100 39 100 41 100 42 100 43 100 45 100 46 100 47 100 49 100 50 100 51 100 53 100 54 100 55 100 57 100 58 100 59 100 0 96 1 96 2 96 3 96 4 96 5 96 6 96 7 96 8 96 9 96 10 96 11 96 12 96 13 96 14 96 15 96 16 96 17 96 18 96 19 96 20 96 21 96 22 96 23 96 24 96 25 96 26 96 27 96 28 96 29 96} } font_height_values {{0 100 1 100 2 100 3 100 4 100 5 100 6 100 7 100 8 100 9 100 10 100 11 100 12 100 13 100 14 100 15 100 16 100 17 100 18 100 19 100 20 100 21 100 22 100 23 100 24 100 25 100 26 100 27 100 28 100 29 100 30 100 31 100 33 100 34 100 35 100 37 100 38 100 39 100 41 100 42 100 43 100 45 100 46 100 47 100 49 100 50 100 51 100 53 100 54 100 55 100 57 100 58 100 59 100 0 100 1 100 2 100 3 100 4 100 5 100 6 100 7 100 8 100 9 100 10 100 11 100 12 100 13 100 14 100 15 100 16 100 17 100 18 100 19 100 20 100 21 100 22 100 23 100 24 100 25 100 26 100 27 100 28 100 29 100 30 100 31 100 33 100 34 100 35 100 37 100 38 100 39 100 41 100 42 100 43 100 45 100 46 100 47 100 49 100 50 100 51 100 53 100 54 100 55 100 57 100 58 100 59 100} } kern_values {{0 -0.049 1 -0.049 2 -0.049 3 -0.049 4 -0.049 5 -0.049 6 -0.049 7 -0.049 8 -0.049 9 -0.049 10 -0.049 11 -0.049 12 -0.049 13 -0.049 14 -0.049 15 -0.049 16 -0.049 17 -0.049 18 -0.049 19 -0.049 20 -0.049 21 -0.049 22 -0.049 23 -0.049 24 -0.049 25 -0.049 26 -0.049 27 -0.049 28 -0.049 29 -0.049 30 -0.049 31 -0.049 32 -0.04899999872 33 -0.049 34 -0.049 35 -0.049 36 -0.04899999872 37 -0.049 38 -0.049 39 -0.049 40 -0.04899999872 41 -0.049 42 -0.049 43 -0.049 44 -0.04899999872 45 -0.049 46 -0.049 47 -0.049 48 -0.04899999872 49 -0.049 50 -0.049 51 -0.049 52 -0.04899999872 53 -0.049 54 -0.049 55 -0.049 56 -0.04899999872 57 -0.049 58 -0.049 59 -0.049 60 -0.04899999872 61 -0.04899999872 62 -0.04899999872 63 -0.04899999872 64 -0.04899999872 65 -0.04899999872 66 -0.04899999872 67 -0.04899999872 68 -0.04899999872 69 -0.04899999872 70 -0.04899999872 71 -0.04899999872 72 -0.04899999872 73 -0.04899999872 74 -0.04899999872 75 -0.04899999872 76 -0.04899999872 77 -0.04899999872 78 -0.04899999872 79 -0.04899999872 80 -0.04899999872 81 -0.04899999872 82 -0.04899999872 83 -0.04899999872 84 -0.04899999872 85 -0.04899999872 86 -0.04899999872 87 -0.04899999872 88 -0.04899999872 89 -0.04899999872 90 -0.04899999872 91 -0.04899999872 92 -0.04899999872 93 -0.04899999872 94 -0.04899999872 95 -0.04899999872 96 -0.04899999872 97 -0.04899999872 98 -0.04899999872 99 -0.04899999872 100 -0.04899999872 101 -0.04899999872 102 -0.04899999872 103 -0.04899999872 104 -0.04899999872 105 -0.04899999872 106 -0.04899999872 107 -0.04899999872 108 -0.04899999872 109 -0.04899999872 110 -0.04899999872 111 -0.04899999872 112 -0.04899999872 113 -0.04899999872 114 -0.04899999872 115 -0.04899999872 116 -0.04899999872 117 -0.04899999872 118 -0.04899999872 119 -0.04899999872 120 -0.04899999872 121 -0.04899999872 122 -0.04899999872 123 -0.04899999872 124 -0.04899999872 125 -0.04899999872 126 -0.04899999872 127 -0.04899999872 128 -0.04899999872 129 -0.04899999872 130 -0.04899999872 131 -0.04899999872 132 -0.04899999872 133 -0.04899999872 134 -0.04899999872 135 -0.04899999872 136 -0.04899999872 137 -0.04899999872 138 -0.04899999872 139 -0.04899999872 140 -0.04899999872 141 -0.04899999872 142 -0.04899999872 143 -0.04899999872 144 -0.04899999872 145 -0.04899999872 146 -0.04899999872 147 -0.04899999872 148 -0.04899999872 149 -0.04899999872 150 -0.04899999872 151 -0.04899999872 152 -0.04899999872 153 -0.04899999872 154 -0.04899999872 155 -0.04899999872 156 -0.04899999872 157 -0.04899999872 158 -0.04899999872 159 -0.04899999872 160 -0.04899999872 161 -0.04899999872 162 -0.04899999872 163 -0.04899999872 164 -0.04899999872 165 -0.04899999872 166 -0.04899999872 167 -0.04899999872 168 -0.04899999872 169 -0.04899999872 170 -0.04899999872 171 -0.04899999872 172 -0.04899999872 173 -0.04899999872 174 -0.04899999872 175 -0.04899999872 176 -0.04899999872 177 -0.04899999872 178 -0.04899999872 179 -0.04899999872 180 -0.04899999872 181 -0.04899999872 182 -0.04899999872 183 -0.04899999872 184 -0.04899999872 185 -0.04899999872 186 -0.04899999872 187 -0.04899999872 188 -0.04899999872 189 -0.04899999872 190 -0.04899999872 191 -0.04899999872 192 -0.04899999872 193 -0.04899999872 194 -0.04899999872 195 -0.04899999872 196 -0.04899999872 197 -0.04899999872 198 -0.04899999872 199 -0.04899999872 200 -0.04899999872 201 -0.04899999872 202 -0.04899999872 203 -0.04899999872 204 -0.04899999872 205 -0.04899999872 206 -0.04899999872 207 -0.04899999872 208 -0.04899999872 209 -0.04899999872 210 -0.04899999872 211 -0.04899999872 212 -0.04899999872 213 -0.04899999872 214 -0.04899999872 215 -0.04899999872 216 -0.04899999872 217 -0.04899999872 218 -0.04899999872 219 -0.04899999872 220 -0.04899999872 221 -0.04899999872 222 -0.04899999872 223 -0.04899999872 224 -0.04899999872 225 -0.04899999872 226 -0.04899999872 227 -0.04899999872 228 -0.04899999872 229 -0.04899999872 230 -0.04899999872 231 -0.04899999872 232 -0.04899999872 233 -0.04899999872 234 -0.04899999872 235 -0.04899999872 236 -0.04899999872 237 -0.04899999872 238 -0.04899999872 239 -0.04899999872 240 -0.04899999872 241 -0.04899999872 242 -0.04899999872 243 -0.04899999872 244 -0.04899999872 245 -0.04899999872 246 -0.04899999872 0 0.012 1 0.012 2 0.012 3 0.012 4 0.012 5 0.012 6 0.012 7 0.012 8 0.012 9 0.012 10 0.012 11 0.012 12 0.012 13 0.012 14 0.012 15 0.012 16 0.012 17 0.012 18 0.012 19 0.012 20 0.012 21 0.012 22 0.012 23 0.012 24 0.012 25 0.012 26 0.012 27 0.012 28 0.012 29 0.012 30 0.012 31 0.012 33 0.012 34 0.012 35 0.012 37 0.012 38 0.012 39 0.012 41 0.012 42 0.012 43 0.012 45 0.012 46 0.012 47 0.012 49 0.012 50 0.012 51 0.012 53 0.012 54 0.012 55 0.012 57 0.012 58 0.012 59 0.012} } tracking_values {{1 -0.007 2 -0.007 3 -0.007 4 -0.007 5 -0.007 6 -0.007 7 -0.007 8 -0.007 9 -0.007 10 -0.007 11 -0.007 12 -0.007 13 -0.007 14 -0.007 15 -0.007 16 -0.007 17 -0.007 18 -0.007 19 -0.007 20 -0.007 21 -0.007 22 -0.007 23 -0.007 24 -0.007 25 -0.007 26 -0.007 27 -0.007 28 -0.007 29 -0.007 30 -0.007 31 -0.007 32 -0.007 33 -0.007 34 -0.007 35 -0.007 36 -0.007 37 -0.007 38 -0.007 39 -0.007 40 -0.007 41 -0.007 42 -0.007 43 -0.007 44 -0.007 45 -0.007 46 -0.007 47 -0.007 48 -0.007 49 -0.007 50 -0.007 51 -0.007 52 -0.007 53 -0.007 54 -0.007 55 -0.007 56 -0.007 57 -0.007 58 -0.007 59 -0.007 60 -0.007 61 -0.007 62 -0.007 63 -0.007 64 -0.007 65 -0.007 66 -0.007 67 -0.007 68 -0.007 69 -0.007 70 -0.007 71 -0.007 72 -0.007 73 -0.007 74 -0.007 75 -0.007 76 -0.007 77 -0.007 78 -0.007 79 -0.007 80 -0.007 81 -0.007 82 -0.007 83 -0.007 84 -0.007 85 -0.007 86 -0.007 87 -0.007 88 -0.007 89 -0.007 90 -0.007 91 -0.007 92 -0.007 93 -0.007 94 -0.007 95 -0.007 96 -0.007 97 -0.007 98 -0.007 99 -0.007 100 -0.007 101 -0.007 102 -0.007 103 -0.007 104 -0.007 105 -0.007 106 -0.007 107 -0.007 108 -0.007 109 -0.007 110 -0.007 111 -0.007 112 -0.007 113 -0.007 114 -0.007 115 -0.007 116 -0.007 117 -0.007 118 -0.007 119 -0.007 120 -0.007 121 -0.007 122 -0.007 123 -0.007 124 -0.007 125 -0.007 126 -0.007 127 -0.007 128 -0.007 129 -0.007 130 -0.007 131 -0.007 132 -0.007 133 -0.007 134 -0.007 135 -0.007 136 -0.007 137 -0.007 138 -0.007 139 -0.007 140 -0.007 141 -0.007 142 -0.007 143 -0.007 144 -0.007 145 -0.007 146 -0.007 147 -0.007 148 -0.007 149 -0.007 150 -0.007 151 -0.007 152 -0.007 153 -0.007 154 -0.007 155 -0.007 156 -0.007 157 -0.007 158 -0.007 159 -0.007 160 -0.007 161 -0.007 162 -0.007 163 -0.007 164 -0.007 165 -0.007 166 -0.007 167 -0.007 168 -0.007 169 -0.007 170 -0.007 171 -0.007 172 -0.007 173 -0.007 174 -0.007 175 -0.007 176 -0.007 177 -0.007 178 -0.007 179 -0.007 180 -0.007 181 -0.007 182 -0.007 183 -0.007 184 -0.007 185 -0.007 186 -0.007 187 -0.007 188 -0.007 189 -0.007 190 -0.007 191 -0.007 192 -0.007 193 -0.007 194 -0.007 195 -0.007 196 -0.007 197 -0.007 198 -0.007 199 -0.007 200 -0.007 201 -0.007 202 -0.007 203 -0.007 204 -0.007 205 -0.007 206 -0.007 207 -0.007 208 -0.007 209 -0.007 210 -0.007 211 -0.007 212 -0.007 213 -0.007 214 -0.007 215 -0.007 216 -0.007 217 -0.007 218 -0.007 219 -0.007 220 -0.007 221 -0.007 222 -0.007 223 -0.007 224 -0.007 225 -0.007 226 -0.007 227 -0.007 228 -0.007 229 -0.007 230 -0.007 231 -0.007 232 -0.007 233 -0.007 234 -0.007 235 -0.007 236 -0.007 237 -0.007 238 -0.007 239 -0.007 240 -0.007 241 -0.007 242 -0.007 243 -0.007 244 -0.007 245 -0.007 246 -0.007} } baseline_values {{0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99 0 100 0 101 0 102 0 103 0 104 0 105 0 106 0 107 0 108 0 109 0 110 0 111 0 112 0 113 0 114 0 115 0 116 0 117 0 118 0 119 0 120 0 121 0 122 0 123 0 124 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 141 0 142 0 143 0 144 0 145 0 146 0 147 0 148 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 156 0 157 0 158 0 159 0 160 0 161 0 162 0 163 0 164 0 165 0 166 0 167 0 168 0 169 0 170 0 171 0 172 0 173 0 174 0 175 0 176 0 177 0 178 0 179 0 180 0 181 0 182 0 183 0 184 0 185 0 186 0 187 0 188 0 189 0 190 0 191 0 192 0 193 0 194 0 195 0 196 0 197 0 198 0 199 0 200 0 201 0 202 0 203 0 204 0 205 0 206 0 207 0 208 0 209 0 210 0 211 0 212 0 213 0 214 0 215 0 216 0 217 0 218 0 219 0 220 0 221 0 222 0 223 0 224 0 225 0 226 0 227 0 228 0 229 0 230 0 231 0 232 0 233 0 234 0 235 0 236 0 237 0 238 0 239 0 240 0 241 0 242 0 243 0 244 0 245 0 246 0 0 1.7 1 1.7 2 1.7 3 1.7 4 1.7 5 1.7 6 1.7 7 1.7 8 1.7 9 1.7 10 1.7 11 1.7 12 1.7 13 1.7 14 1.7 15 1.7 16 1.7 17 1.7 18 1.7 19 1.7 20 1.7 21 1.7 22 1.7 23 1.7 24 1.7 25 1.7 26 1.7 27 1.7 28 1.7 29 1.7 30 1.7 31 1.7 33 1.7 34 1.7 35 1.7 37 1.7 38 1.7 39 1.7 41 1.7 42 1.7 43 1.7 45 1.7 46 1.7 47 1.7 49 1.7 50 1.7 51 1.7 53 1.7 54 1.7 55 1.7 57 1.7 58 1.7 59 1.7} } cursor_position 61 kerning -0.04899999872 tracking -0.007000000216 leading 0.28 center {960 540} cursor_initialised true autofit_bbox false initial_cursor_position {{496.7999878 690.000061} } group_animations {{0} imported: 0 selected: items: "root transform/"} animation_layers {{1 11 960 540 0 0 1 1 0 0 0 0} } name Text1 selected true xpos -155 ypos 39 } Dot { name Dot9 note_font_size 41 xpos -121 ypos 127 } push $N10cd7440 Roto { output alpha cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44700000 x44070000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup RectangleCusped8 512 bezier {{cc {f 8192} {px 1 {0 0} {x447fbd8a x3f519c2c} {0 0} {0 0} {x445fd6d3 x3f02d730} {0 0} {0 0} {x445fd8e5 x43008e71} {0 0} {0 0} {x447fc3c2 x4300830a} {0 0}}} idem} {tx 1 x43efcccc x42020000} {a osw x41200000 osf 0 str 1 spx x44700000 spy x44070000 sb 1 tt x41100000}} {curvegroup RectangleCusped7 512 bezier {{cc {f 8192} {px 1 {0 0} {x445fdb6b x43007ee2} {0 0} {0 0} {x443fe368 x43012090} {0 0} {0 0} {x443fe630 x4380422d} {0 0} {0 0} {x445fb9bc x438052df} {0 0}}} idem} {tx 1 x43cf8ccd x42c1ffff} {a osw x41200000 osf 0 str 1 spx x44700000 spy x44070000 sb 1 tt x41100000}} {curvegroup RectangleCusped6 512 bezier {{cc {f 8192} {px 1 {0 0} {x443fe81f x438038b8} {0 0} {0 0} {x44200149 x4380545b} {0 0} {0 0} {x44200949 x43c02d5c} {0 0} {0 0} {x443fef7b x43c00073} {0 0}}} idem} {tx 1 x43af9334 x4320f333} {a osw x41200000 osf 0 str 1 spx x44700000 spy x44070000 sb 1 tt x41100000}} {curvegroup RectangleCusped5 512 bezier {{cc {f 8192} {px 1 {0 0} {x441fed7f x43bff524} {0 0} {0 0} {x43fff86f x43c01d90} {0 0} {0 0} {x4400106d x43ffd7fc} {0 0} {0 0} {x441fe6c2 x43ffd7fc} {0 0}}} idem} {tx 1 x438f999a x4360cccd} {a osw x41200000 osf 0 str 1 spx x44700000 spy x44070000 sb 1 tt x41100000}} {curvegroup RectangleCusped4 512 bezier {{cc {f 8192} {px 1 {0 0} {x43fffdc2 x44000265} {0 0} {0 0} {x43c01e01 x44000265} {0 0} {0 0} {x43c019f1 x441ff0f9} {0 0} {0 0} {x43ffe698 x441fe76a} {0 0}}} idem} {tx 1 x435f199a x43906000} {a osw x41200000 osf 0 str 1 spx x44700000 spy x44070000 sb 1 tt x41100000}} {curvegroup RectangleCusped3 512 bezier {{cc {f 8192} {px 1 {0 0} {x43c0478c x44200d48} {0 0} {0 0} {x438034b2 x44200d48} {0 0} {0 0} {x438038cf x443fe853} {0 0} {0 0} {x43c0677c x4440015e} {0 0}}} idem} {tx 1 x431f199a x43b04000} {a osw x41200000 osf 0 str 1 spx x44700000 spy x44070000 sb 1 tt x41100000}} {curvegroup RectangleCusped2 512 bezier {{cc {f 8192} {px 1 {0 0} {x4380377e x443fe6ee} {0 0} {0 0} {x43007685 x443fdb75} {0 0} {0 0} {x4300a521 x445fe8a2} {0 0} {0 0} {x4380255a x445fdf8d} {0 0}}} idem} {tx 1 x42be0000 x43d04ccd} {a osw x41200000 osf 0 str 1 spx x44700000 spy x44070000 sb 1 tt x41100000}} {curvegroup RectangleCusped1 512 bezier {{cc {f 8192} {px 1 {0 0} {x4300e014 x445ff174} {0 0} {0 0} {x3cce8900 x445ff974} {0 0} {0 0} {xbdb51ac0 x447ffe00} {0 0} {0 0} {x4300a759 x447ffc8c} {0 0}}} idem} {tx 1 x41fccccd x43f0199a} {a osw x41200000 osf 0 str 1 spx x44700000 spy x44070000 sb 1 tt x41100000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 tt 9 } { createOpenSpline str 1 ssx 1 ssy 1 sf 1 tt 10 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {320 240} colorOverlay {0 0 0 0} lifetime_type "all frames" motionblur_shutter_offset_type centred source_black_outside true name Roto1 xpos -39 ypos -712 } set N10d62ff0 [stack 0] Transform { translate {-128 0} center {960 540} name Transform1 xpos -39 ypos -647 } set N10dd2950 [stack 0] Transform { translate {-128 0} center {960 540} name Transform2 xpos -39 ypos -529 } set N10e94e70 [stack 0] Transform { translate {-128 0} center {960 540} name Transform3 xpos -39 ypos -428 } set N10ea33e0 [stack 0] Transform { translate {-128 0} center {960 540} name Transform4 xpos -39 ypos -332 } set N10eb1960 [stack 0] Transform { translate {-128 0} center {960 540} name Transform5 xpos -39 ypos -234 } set N10ebfed0 [stack 0] Transform { translate {-128 0} center {960 540} name Transform6 xpos -39 ypos -137 } set N10ece440 [stack 0] Transform { translate {-128 0} center {960 540} name Transform7 xpos -39 ypos -29 } set N10edc9b0 [stack 0] Transform { translate {1024 0} center {960 540} name Transform8 xpos 71 ypos -29 } push $N10edc9b0 Merge2 { inputs 2 name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 71 ypos 13 } push $N10ece440 Transform { translate {1024 0} center {960 540} name Transform9 xpos 71 ypos -137 } push $N10ece440 Merge2 { inputs 2 name Merge4 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 71 ypos -99 } push $N10ebfed0 Transform { translate {1024 0} center {960 540} name Transform10 xpos 69 ypos -234 } push $N10ebfed0 Merge2 { inputs 2 name Merge5 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 69 ypos -189 } push $N10eb1960 Transform { translate {1024 0} center {960 540} name Transform11 xpos 71 ypos -332 } push $N10eb1960 Merge2 { inputs 2 name Merge6 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 71 ypos -291 } push $N10ea33e0 Transform { translate {1024 0} center {960 540} name Transform12 xpos 71 ypos -428 } push $N10ea33e0 Merge2 { inputs 2 name Merge7 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 71 ypos -387 } push $N10e94e70 Transform { translate {1024 0} center {960 540} name Transform13 xpos 71 ypos -529 } push $N10e94e70 Merge2 { inputs 2 name Merge8 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 71 ypos -488 } push $N10dd2950 Transform { translate {1025 0} center {960 540} name Transform14 xpos 82 ypos -647 } push $N10dd2950 Merge2 { inputs 2 name Merge9 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 82 ypos -606 } push $N10d62ff0 Constant { inputs 0 channels rgb format "1024 1024 0 0 1024 1024 1 square_1K" name Constant1 xpos 208 ypos -809 } Grade { inputs 1+1 add {0.7728846669 0.02618077211 0.03455101326 0} name Grade3 xpos 208 ypos -708 } Grade { inputs 1+1 add {0.9673250318 0.3451221585 0.1646387577 0} name Grade4 xpos 208 ypos -606 } Grade { inputs 1+1 add {0.2409069538 0.218536064 0.5103886724 0} name Grade5 xpos 208 ypos -488 } Grade { inputs 1+1 add {0.9280357361 0.3130359054 0.5264387727 0} name Grade6 xpos 208 ypos -387 } Grade { inputs 1+1 add {0.2122023106 0.0433825478 0.4666024148 0} name Grade7 xpos 208 ypos -291 } Grade { inputs 1+1 add {0.001658143476 0.9821226597 0.9885434508 0} name Grade8 xpos 208 ypos -189 } Grade { inputs 1+1 add {0.04277442023 0.4779824018 0.1838312 0} name Grade9 xpos 208 ypos -99 } Grade { inputs 1+1 add {0.9810473323 0.9179739952 0.1378139406 0} name Grade10 xpos 208 ypos 13 } Grade { inputs 1+1 multiply 0 name Grade11 xpos 208 ypos 124 } Shuffle { alpha white name Shuffle2 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat -> \[value out2]] \}]" note_font_size 21 note_font_color 0xffffffff xpos 208 ypos 148 } Input { inputs 0 name InputImg xpos 413 ypos 496 number 1 } set N11074630 [stack 0] Shuffle { alpha white name Shuffle3 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat -> \[value out2]] \}]" note_font_size 21 note_font_color 0xffffffff xpos 495 ypos 565 } push $N11074630 Switch { inputs 2 which {{previewInverseSTMap}} name Switch5 xpos 363 ypos 579 } set N1108a2c0 [stack 0] Switch { inputs 2 which {{"!\[exists parent.input1]"}} name SwitchDefault xpos 208 ypos 579 } STMap { inputs 2 uv rgba name STMap1 xpos 208 ypos 754 } Merge2 { inputs 2 operation mask bbox A name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 208 ypos 815 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 208 ypos 853 disable {{!parent.takeAlphaUVs}} } set N110b6c30 [stack 0] push $N1108a2c0 Dot { name Dot10 note_font_size 41 xpos 397 ypos 886 } Merge2 { inputs 2 operation mask name Merge10 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 363 ypos 934 } push $N110b6c30 Switch { inputs 2 which {{imgIsRenderBeauty}} name Switch6 xpos 43 ypos 977 } Copy { inputs 2 from0 rgba.red to0 forward.u from1 rgba.green to1 forward.v name Copy2 xpos -37 ypos 1042 } Group { name STMapInverse1 tile_color 0x196654ff xpos -37 ypos 1174 addUserKnob {20 InverseSTMap} addUserKnob {41 in l channels T Shuffle1.in} addUserKnob {41 in2 l "UV channels" T Shuffle1.in2} addUserKnob {41 box_width l "UV size" T Reformat1.box_width} addUserKnob {6 fill_gap l "Fill Gap" +STARTLINE} fill_gap true addUserKnob {41 size -STARTLINE T Blur1.size} addUserKnob {26 ""} addUserKnob {41 detail l "point detail" T PositionToPoints1.detail} addUserKnob {41 pointSize l "point size" T PositionToPoints1.pointSize} addUserKnob {26 ""} addUserKnob {32 Lookin T "start http://www.lookinvfx.com/tools/" +STARTLINE} addUserKnob {26 text l "" -STARTLINE T " in_inverseSTMap v1.0 | Luca Mignardi | 2014"} } Camera2 { inputs 0 translate {0.5 0.5 1} projection_mode orthographic focal 25 haperture 25 vaperture 25 near 0.5 far 1.5 name Camera1 xpos 93 ypos 157 } Input { inputs 0 name Input1 xpos -58 ypos -118 } Shuffle { in2 forward red red2 green green2 black red white green red2 blue green2 alpha out forward out2 rgba name Shuffle1 xpos -58 ypos -64 } Unpremult { name Unpremult2 xpos -58 ypos -12 } Unpremult { channels forward name Unpremult3 xpos -58 ypos 37 } set N111322a0 [stack 0] push $N111322a0 Shuffle { in forward blue black alpha black name Shuffle2 label "\[value in]" xpos 64 ypos 37 } PositionToPoints { inputs 2 render_mode textured detail 1 pointSize 1.1 name PositionToPoints1 xpos -58 ypos 108 } Reformat { inputs 0 type "to box" format "1024 1024 0 0 1024 1024 1 square_1K" box_width 512 box_height {{box_width i}} box_fixed true name Reformat1 xpos -196 ypos 177 } ScanlineRender { inputs 3 max_tessellation 1 motion_vectors_type off MB_channel none name ScanlineRender1 xpos -58 ypos 177 } Premult { name Premult1 xpos -58 ypos 220 } Dot { name Dot1 xpos -24 ypos 276 } set N1118b5e0 [stack 0] Blur { size 1 name Blur1 xpos 49 ypos 266 } Unpremult { name Unpremult1 xpos 49 ypos 316 } push $N1118b5e0 Merge2 { inputs 2 operation under name Merge1 xpos -58 ypos 316 disable {{1-fill_gap}} } Output { name Output1 xpos -58 ypos 375 } end_group push $N10cc3680 Dot { name Dot7 note_font_size 41 xpos -423 ypos 1103 } push $N110b6c30 Switch { inputs 2 which {{parent.previewUVs}} name Switch3 label "\[value which]" xpos 208 ypos 1096 } Switch { inputs 2 which {{previewInverseSTMap}} name Switch4 xpos 208 ypos 1174 } Output { name Output1 xpos 208 ypos 1326 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Unify3DCoordinate.gizmo ================================================ Group { name Unify3DCoordinate tile_color 0xffbf00ff gl_color 0xffbf00ff addUserKnob {20 tab_general l general} addUserKnob {41 frame_range l "frame range" T menu01.frame_range} addUserKnob {3 firstFR l "custom range" +DISABLED} firstFR 1001 addUserKnob {3 lastFR l "" -STARTLINE +DISABLED} lastFR 1100 addUserKnob {41 selVertex l "Calculate from selected vertex" T menu02.selVertex} addUserKnob {4 vertexTrans l "Tracking Type" +DISABLED M {translate translate,rotate translate,rotate,scale "" "" "" ""}} addUserKnob {22 calculate l "\[Calculate]" T "import threading\nimport math\n\nthisGRP = nuke.thisGroup()\n\nif thisGRP.input(0) == None :\n\n\tnuke.message('No upstream connected')\n\nelse :\n\n\tstNode = thisGRP.input(0)\n\n\tFRsetting = thisGRP\['frame_range'].getValue()\n\n\tif FRsetting == 0 :\n\t\tframeST = nuke.root().firstFrame()\n\t\tframeED = nuke.root().lastFrame()\n\n\tif FRsetting == 1 :\n\t\tframeST = int(nuke.frame())\n\t\tframeED = int(nuke.frame())\n\n\tif FRsetting == 2 :\n\t\tframeST = int(thisGRP\['firstFR'].getValue())\n\t\tframeED = int(thisGRP\['lastFR'].getValue())\n\n\tthisGRP\['reset'].execute()\n\n\tgoSTORE = nuke.toNode('store')\n\tgoSTORE\['generalFN'].execute()\n\n\tfilterCheck = thisGRP\['filterNonReverse'].getValue().split(',')\n\tfilter3DNodes = thisGRP\['filter3DNodes'].getValue().split(',')\n\n\tvertexOption = thisGRP\['selVertex'].getValue()\n\tvertexType = thisGRP\['vertexTrans'].getValue()\n\n\tnodesMap = upstreamNodes(stNode)\n\n\tif vertexOption == 1 :\n\t\tselectedID = vertexPack()\n\t\tif len(selectedID) < 1 :\n\t\t\tnuke.message('No vertex selected. Cannot process vertex tracking.')\n\t\telse :\n\t\t\tif vertexType == 0 :\n\t\t\t\tvertexSnap(thisGRP, selectedID)\n\n\t\t\tif vertexType == 1 :\n\t\t\t\tif len(selectedID) == 3 :\n\t\t\t\t\tvertexSnap(thisGRP, selectedID)\n\t\t\t\telse :\n\t\t\t\t\tnuke.message('Rotation tracking only support exact 3 vertex.')\n\n\t\t\tif vertexType == 2 :\n\t\t\t\tif len(selectedID) == 3 :\n\t\t\t\t\tvertexSnap(thisGRP, selectedID)\n\t\t\t\telse :\n\t\t\t\t\tnuke.message('Rotation and Scale tracking only support exact 3 vertex.')\n\n\t\t\trefineAnim(thisGRP)\n\telse : \n\t\tunify(nodesMap, thisGRP)" +STARTLINE} addUserKnob {20 resultTabStart l "" +STARTLINE n -2} addUserKnob {20 result l Result} addUserKnob {41 display T Unified_Axis.display} addUserKnob {41 selectable -STARTLINE T Unified_Axis.selectable} addUserKnob {41 xform_order l "transform order" T Unified_Axis.xform_order} addUserKnob {41 rot_order l "rotation order" T Unified_Axis.rot_order} addUserKnob {41 translate T Unified_Axis.translate} addUserKnob {41 rotate T Unified_Axis.rotate} addUserKnob {41 scaling l scale T Unified_Axis.scaling} addUserKnob {20 "" l "World matrix" n 2} addUserKnob {41 world_matrix l "" -STARTLINE T Unified_Axis.world_matrix} addUserKnob {20 "" n -1} addUserKnob {26 ""} addUserKnob {22 export l "export axis" T "thisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('store')\ngoStore\['generalFN'].execute()\n\nlocate = getLevel()\n\nwith locate :\n\tax = nuke.nodes.Axis()\n\tax.setXYpos( thisGRP.xpos() + 100 , thisGRP.ypos() )\n\tax\['label'].setValue('Export by Unify3DCoordinate')\n\n\tknobsLoop = \['translate','rotate','scaling']\n\n\tfor k in range(3) :\n\t\tif thisGRP\[knobsLoop\[k]].isAnimated() :\n\t\t\tani = thisGRP\[knobsLoop\[k]].animations()\n\t\t\tax\[knobsLoop\[k]].setAnimated()\n\t\t\tfor i in range(3) :\n\t\t\t\tfor key in ani\[i].keys() :\n\t\t\t\t\tax\[knobsLoop\[k]].setValueAt( key.y , key.x , i )\n\t\telse :\n\t\t\tfor i in range(3) :\n\t\t\t\tax\[knobsLoop\[k]].setValue( thisGRP\[knobsLoop\[k]].getValue()\[i] , i)" +STARTLINE} addUserKnob {22 reset -STARTLINE T "thisGRP = nuke.thisGroup()\n\ntoolKnobs = \['display','selectable','translate','rotate','scaling','world_matrix']\n\nfor i in range (0, len(toolKnobs), 1) :\n\tthisGRP\[toolKnobs\[i]].clearAnimated()\n\nthisGRP\['display'].setValue(1)\nthisGRP\['selectable'].setValue(1)\nthisGRP\['translate'].setValue(\[0,0,0])\nthisGRP\['rotate'].setValue(\[0,0,0])\nthisGRP\['scaling'].setValue(\[1,1,1])"} addUserKnob {20 resultTabEnd l "" -STARTLINE n -3} addUserKnob {20 tag_nodeClass l "node class data (dev)"} addUserKnob {43 filterNonReverse +DISABLED} filterNonReverse Camera,Camera2,Light,Light2,DirectLight,Environment,Axis,Axis2,Light3,Axis3,Camera3 addUserKnob {43 filter3DNodes +DISABLED} filter3DNodes Axis,Axis2,Card,Card2,Cube,Cylinder,Sphere,ReadGeo,ReadGeo2,Light,Light2,DirectLight,Spotlight,Environment,TransformGeo,EditGeo,Camera,Camera2,Light3,Axis3,Camera3 addUserKnob {22 add_class l "add new node class into the list" T "p = nuke.Panel('add new node class into the list :')\np.addBooleanCheckBox('Is it a non-reverse node?', False)\np.addSingleLineInput('Node class :', '')\n\nif p.show() :\n\tnewNR = p.value('Is it a non-reverse node?')\n\tnewItem = p.value('Node class :')\n\n\tif not newItem\[:1].isalpha() :\n\t\tnuke.message('Illegal first letter of new node class.
Only accept alphabet on the first letter.')\n\telse :\n\t\tthisGRP = nuke.thisGroup()\n\n\t\tfilterCheck = thisGRP\['filterNonReverse'].getValue().split(',')\n\t\tfilter3DNodes = thisGRP\['filter3DNodes'].getValue().split(',')\n\n\t\tcheckReturn = 0\n\n\t\tif newNR :\n\t\t\tif newItem in filterCheck :\n\t\t\t\tcheckReturn = 1\n\n\t\tif newItem in filter3DNodes :\n\t\t\tcheckReturn = 1\n\n\t\tif checkReturn :\n\t\t\tnuke.message('New node class already existed in the list.
If you want to modify it, please remove it first.')\n\t\telse :\n\t\t\tif newNR :\n\t\t\t\tfilterCheck.append( newItem )\n\t\t\t\tthisGRP\['filterNonReverse'].setValue( ','.join(filterCheck) )\n\n\t\t\tfilter3DNodes.append( newItem )\n\t\t\tthisGRP\['filter3DNodes'].setValue( ','.join(filter3DNodes) )" +STARTLINE} addUserKnob {22 remove_class l "remove custom class from the list" -STARTLINE T "thisGRP = nuke.thisGroup()\n\nfilterCheck = thisGRP\['filterNonReverse'].getValue().split(',')\nfilter3DNodes = thisGRP\['filter3DNodes'].getValue().split(',')\n\nnoDefault = \['Axis', 'Axis2', 'Card', 'Card2', 'Cube', 'Cylinder', 'Sphere', 'ReadGeo', 'ReadGeo2', 'Light', 'Light2', 'DirectLight', 'Spotlight', 'Environment', 'TransformGeo', 'EditGeo', 'Camera', 'Camera2']\n\ncustomClass = \[]\n\nfor i in filterCheck :\n\tif i not in noDefault :\n\t\tif i not in customClass :\n\t\t\tcustomClass.append( i )\n\nfor i in filter3DNodes :\n\tif i not in noDefault :\n\t\tif i not in customClass :\n\t\t\tcustomClass.append( i )\n\nif customClass :\n\tp = nuke.Panel('select custom class to remove :')\n\tp.addEnumerationPulldown( 'custom class in the list :', ' '.join(customClass) )\n\n\tif p.show() :\n\t\trmItem = p.value( 'custom class in the list :' )\n\n\t\ttry :\n\t\t\tfilterCheck.remove( rmItem )\n\t\t\tthisGRP\['filterNonReverse'].setValue( ','.join(filterCheck) )\n\t\texcept :\n\t\t\tpass\n\n\t\ttry :\n\t\t\tfilter3DNodes.remove( rmItem )\n\t\t\tthisGRP\['filter3DNodes'].setValue( ','.join(filter3DNodes) )\n\t\texcept :\n\t\t\tpass\nelse :\n\tnuke.message('No custom class found in the list.')"} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 2.4} addUserKnob {26 l_DATE l "Date Modified" T 2021-03-29} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"2.4
- added Camera3 class into detection list

2.3
- compatible with python3
- added Light3 & Axis3 class into detection list

2.2
- frame range added 'current 
  frame'option. For 1 frame calculation.
- exposed custom node class data.
  User can add custom node class 
  if there has special 3D nodes.
  * custom node class MUST
     included 'matrix' knob.

2.1
- added export axis

2.0
- mirror fix
  updated error message
  uncheck calculate vertex by default\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x2f4255ff label bin note_font_size 42 xpos -446 ypos -75 bdwidth 289 bdheight 332 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0xff label "Dont touch" note_font_size 42 xpos -704 ypos -74 bdwidth 217 bdheight 232 } Input { inputs 0 name input3D xpos -87 ypos -106 } Dot { name Dot1 xpos -53 ypos 53 } set Nb4369800 [stack 0] Output { name Output1 xpos -87 ypos 391 } CurveTool { inputs 0 ROI {512 389 1536 1167} autocropdata {512 389 1536 1167} intensitydata {0 0 0 0} name hack_ct xpos -413 ypos 174 } push $Nb4369800 Dot { name Dot2 xpos 80 ypos 53 } EditGeo { name transformationData xpos 46 ypos 87 } PythonGeo { name pgeoGet xpos 46 ypos 139 } Axis { inputs 0 name Unified_Axis gl_color 0xffbf00ff xpos -284 ypos 155 } NoOp { inputs 0 name menu02 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['selVertex'].getValue() == 1 :\n thisGRP\['vertexTrans'].setEnabled(True)\nelse :\n thisGRP\['vertexTrans'].setEnabled(False)\n" xpos -640 ypos 88 addUserKnob {20 User} addUserKnob {6 selVertex l "Calculate from selected vertex" +STARTLINE} } NoOp { inputs 0 name menu01 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['frame_range'].getValue() == 2 :\n thisGRP\['firstFR'].setEnabled(True)\n thisGRP\['lastFR'].setEnabled(True)\nelse :\n thisGRP\['firstFR'].setEnabled(False)\n thisGRP\['lastFR'].setEnabled(False)\n" xpos -639 ypos 21 addUserKnob {20 User} addUserKnob {4 frame_range l "frame range" M {"project setting" "current frame" custom ""}} } NoOp { inputs 0 name store xpos -347 ypos 39 addUserKnob {20 User} addUserKnob {22 generalFN T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\n#########################################################\n\ndef upstreamNodes(startNode) :\n\n\tmainStream = \[]\n\n\tcurNode = startNode\n\n\twhile curNode :\n\t\tif curNode.knob('matrix') :\n\t\t\tfor m in range (0,len(filter3DNodes)) :\n\t\t\t\tif curNode.Class() == filter3DNodes\[m] :\n\t\t\t\t\tsubStream = \[curNode.name()]\n\n\t\t\t\t\tfor x in range (1, curNode.inputs()) :\n\t\t\t\t\t\tsubNode = curNode.input(x)\n\t\t\t\t\t\tif subNode.knob('matrix') :\n\t\t\t\t\t\t\tsubStream.append(subNode.name())\n\n\t\t\t\t\t\twhile subNode :\n\t\t\t\t\t\t\tfor y in range (0, subNode.inputs()) :\n\t\t\t\t\t\t\t\tif subNode.input(y).knob('matrix') :\n\t\t\t\t\t\t\t\t\tsubStream.append(subNode.input(y).name())\n\t\t\t\t\t\t\tsubNode = subNode.input(0)\n\n\t\t\t\t\tmainStream.append(subStream)\n\t\tcurNode = curNode.input(0)\n\n\treturn mainStream\n\n#########################################################\n\ndef unify(mainStream, targetNode) :\n\n\torderCheck = 0\n\n\toutMTX = nuke.math.Matrix4()\n\tfailMSG = 0\n\tdisabledNode = \[]\n\tcheckANI = 0\n\n\tfor a in range (0, len(mainStream)) :\n\t\tfor b in range (0, len(mainStream\[a])) :\n\t\t\tif nuke.toNode(mainStream\[a]\[b]).knob('disable').getValue() == 1 :\n\t\t\t\tdisabledNode.append(mainStream\[a]\[b])\n\t\t\t\tfailMSG = 1\n\n\tif failMSG == 1 :\n\t\tdisabledList = '
'.join(disabledNode)\n\t\tnuke.message( 'Disabled nodes list:

' +disabledList + '

Please disconnect these transformation nodes from the tree.' )\n\telse :\n\n\t\t# check input node type ##########################################\n\n\t\tfor oc in range (0, len(filterCheck)) :\n\t\t\tif nuke.toNode(mainStream\[0]\[0]).Class() == filterCheck\[oc] :\n\t\t\t\torderCheck = 1\n\n\t\tif orderCheck == 0 :\n\t\t\tmainStream.reverse()\n\n\t\t# check ani ######################################################\n\n\t\tfor a in range (0, len(mainStream)) :\n\t\t\tfor b in range (0, len(mainStream\[a])) :\n\n\t\t\t\tgetMTX = nuke.math.Matrix4()\n\t\t\t\tfocusNode = nuke.toNode(mainStream\[a]\[b])\n\n\t\t\t\tfor aniCheck in focusNode.knobs().keys() :\n\t\t\t\t\tif focusNode.knob(aniCheck).isAnimated() == True :\n\t\t\t\t\t\tcheckANI = 1\n\n\t\t# unify in matrix #################################################\n\n\t\tif checkANI != 0 :\n\t\t\tfor p in range (frameST, frameED +1 ) :\n\t\t\t\tfor a in range (0, len(mainStream)) :\n\t\t\t\t\tfor b in range (0, len(mainStream\[a])) :\n\n\t\t\t\t\t\tgetMTX = nuke.math.Matrix4()\n\t\t\t\t\t\tfocusNode = nuke.toNode(mainStream\[a]\[b])\n\n\t\t\t\t\t\tfor q in range (0,16) :\n\t\t\t\t\t\t\tgetMTX\[q] = focusNode.knob('matrix').getValueAt(p)\[q]\n\n\t\t\t\t\t\tif a != 0 :\n\t\t\t\t\t\t\toutMTX = outMTX * getMTX\n\t\t\t\t\t\telse :\n\t\t\t\t\t\t\toutMTX = getMTX\n\n\t\t\t\toutMTX.transpose()\n\n\t\t\t\tmTranslate = nuke.math.Matrix4(outMTX)\n\t\t\t\tmTranslate.translationOnly()\n\t\t\t\tmRotate = nuke.math.Matrix4(outMTX)\n\t\t\t\tmRotate.rotationOnly()\n\t\t\t\tmScale = nuke.math.Matrix4(outMTX)\n\t\t\t\tmScale.scaleOnly()\n\n\t\t\t\ttranslate = (mTranslate\[12], mTranslate\[13], mTranslate\[14])\n\t\t\t\trotateRad = mRotate.rotationsZXY()\n\t\t\t\trotate = (math.degrees(rotateRad\[0]), math.degrees(rotateRad\[1]), math.degrees(rotateRad\[2]))\n\t\t\t\tscale = (mScale.xAxis().x, mScale.yAxis().y, mScale.zAxis().z)\n\n\n\t\t\t\ttargetNode\['translate'].setAnimated()\n\t\t\t\ttargetNode\['rotate'].setAnimated()\n\t\t\t\ttargetNode\['scaling'].setAnimated()\n\t\t\t\ttargetNode\['translate'].setValueAt(mTranslate\[12], p, 0)\n\t\t\t\ttargetNode\['translate'].setValueAt(mTranslate\[13], p, 1)\n\t\t\t\ttargetNode\['translate'].setValueAt(mTranslate\[14], p, 2)\n\t\t\t\ttargetNode\['rotate'].setValueAt(math.degrees(rotateRad\[0]), p, 0)\n\t\t\t\ttargetNode\['rotate'].setValueAt(math.degrees(rotateRad\[1]), p, 1)\n\t\t\t\ttargetNode\['rotate'].setValueAt(math.degrees(rotateRad\[2]), p, 2)\n\t\t\t\ttargetNode\['scaling'].setValueAt(mScale.xAxis().x, p, 0)\n\t\t\t\ttargetNode\['scaling'].setValueAt(mScale.yAxis().y, p, 1)\n\t\t\t\ttargetNode\['scaling'].setValueAt(mScale.zAxis().z, p, 2)\n\n\t\telse :\n\n\t\t\tfor a in range (0, len(mainStream)) :\n\t\t\t\tfor b in range (0, len(mainStream\[a])) :\n\n\t\t\t\t\tgetMTX = nuke.math.Matrix4()\n\t\t\t\t\tfocusNode = nuke.toNode(mainStream\[a]\[b])\n\n\t\t\t\t\tfor q in range (0,16) :\n\t\t\t\t\t\tgetMTX\[q] = focusNode.knob('matrix').getValue()\[q]\n\n\t\t\t\t\tif a != 0 :\n\t\t\t\t\t\toutMTX = outMTX * getMTX\n\t\t\t\t\telse :\n\t\t\t\t\t\toutMTX = getMTX\n\n\t\t\toutMTX.transpose()\n\n\t\t\tmTranslate = nuke.math.Matrix4(outMTX)\n\t\t\tmTranslate.translationOnly()\n\t\t\tmRotate = nuke.math.Matrix4(outMTX)\n\t\t\tmRotate.rotationOnly()\n\t\t\tmScale = nuke.math.Matrix4(outMTX)\n\t\t\tmScale.scaleOnly()\n\n\t\t\ttranslate = (mTranslate\[12], mTranslate\[13], mTranslate\[14])\n\t\t\trotateRad = mRotate.rotationsZXY()\n\t\t\trotate = (math.degrees(rotateRad\[0]), math.degrees(rotateRad\[1]), math.degrees(rotateRad\[2]))\n\t\t\tscale = (mScale.xAxis().x, mScale.yAxis().y, mScale.zAxis().z)\n\n\t\t\ttargetNode\['translate'].clearAnimated()\n\t\t\ttargetNode\['rotate'].clearAnimated()\n\t\t\ttargetNode\['scaling'].clearAnimated()\n\t\t\ttargetNode\['translate'].setValue(translate)\n\t\t\ttargetNode\['rotate'].setValue(rotate)\n\t\t\ttargetNode\['scaling'].setValue(scale)\n\n#########################################################\n\ndef checkVertex() :\n\tcount = \[]\n\tfor point in nukescripts.snap3d.selectedPoints() :\n\t\tcount.append(point)\n\n\treturn len(count)\n\n#########################################################\n\ndef convertIter(xyz) :\n\tfor i in range (0, len(xyz)) :\n\t\ttPos = nuke.math.Vector4(xyz\[i]\[0], xyz\[i]\[1], xyz\[i]\[2], 1.0)\n\t\tyield nukescripts.snap3d.VertexInfo(0, 0, 1, nuke.math.Vector3(tPos.x, tPos.y, tPos.z))\n\n#########################################################\n\ndef vertexPack() :\n\tselid = \[]\n\tfor i in nukescripts.snap3d.selectedVertexInfos() :\n\t\tif selid.count(i.index) == 0 :\n\t\t\tselid.append(i.index)\n\treturn selid\n\n\n#########################################################\n\ndef vertexSnap(targetNode, packID) :\n\tvertexType = targetNode\['vertexTrans'].getValue()\n\n\tif frameST != frameED :\n\t\ttargetNode\['translate'].setAnimated()\n\t\tif vertexType >=1 :\n\t\t\ttargetNode\['rotate'].setAnimated()\n\t\t\tif vertexType == 2 :\n\t\t\t\ttargetNode\['scaling'].setAnimated()\n\n\tpgeoGet = nuke.toNode('pgeoGet')\n\n\thack_ct = nuke.toNode('hack_ct')\n\n\tprogBar = nuke.ProgressTask('Sampling vertex')\n\tjobCount = 0\n\tjobTotal = (frameED+1)-frameST\n\n\tfor ctime in range (int(frameST), int(frameED+1), 1) :\n\t\tnuke.execute(hack_ct, ctime, ctime)\n\n\t\t### progress bar\n\t\tjobCount += 1\n\t\tprogShow = int(jobCount/jobTotal * 100)\n\t\tif progBar.isCancelled() :\n\t\t\tbreak;\n\t\tprogBar.setProgress(progShow)\n\t\t#################\n\n\t\tselPos = \[]\n\t\tfor i in range (0, len(packID)) :\n\t\t\tselPos.append(pgeoGet\['geo'].getGeometry()\[0].points()\[3*packID\[i]:(3*packID\[i])+3])\n\t\ttargetNode\['translate'].setValue(nukescripts.snap3d.calcAveragePosition(convertIter(selPos)))\n\t\tif vertexType >=1 :\n\t\t\tvec1 = nuke.math.Vector3(selPos\[0]\[0], selPos\[0]\[1], selPos\[0]\[2])\n\t\t\tvec2 = nuke.math.Vector3(selPos\[1]\[0], selPos\[1]\[1], selPos\[1]\[2])\n\t\t\tvec3 = nuke.math.Vector3(selPos\[2]\[0], selPos\[2]\[1], selPos\[2]\[2])\n\n\t\t\ttargetNode\['rotate'].setValue(math.degrees(nukescripts.snap3d.planeRotation((vec1, vec2, vec3), norm=None)\[0]), 0)\n\t\t\ttargetNode\['rotate'].setValue(math.degrees(nukescripts.snap3d.planeRotation((vec1, vec2, vec3), norm=None)\[1]), 1)\n\t\t\ttargetNode\['rotate'].setValue(math.degrees(nukescripts.snap3d.planeRotation((vec1, vec2, vec3), norm=None)\[2]), 2)\n\t\t\tif vertexType ==2 :\n\t\t\t\ttargetNode\['scaling'].setValue(math.sqrt(math.pow(selPos\[0]\[0]-selPos\[1]\[0], 2)+math.pow(selPos\[0]\[1]-selPos\[1]\[1], 2)+math.pow(selPos\[0]\[2]-selPos\[1]\[2], 2)), 0)\n\t\t\t\ttargetNode\['scaling'].setValue(math.sqrt(math.pow(selPos\[1]\[0]-selPos\[2]\[0], 2)+math.pow(selPos\[1]\[1]-selPos\[2]\[1], 2)+math.pow(selPos\[1]\[2]-selPos\[2]\[2], 2)), 1)\n\t\t\t\ttargetNode\['scaling'].setValue(math.sqrt(math.pow(selPos\[2]\[0]-selPos\[0]\[0], 2)+math.pow(selPos\[2]\[1]-selPos\[0]\[1], 2)+math.pow(selPos\[2]\[2]-selPos\[0]\[2], 2)), 2)\n\n\thack_ct\['intensitydata'].clearAnimated()\n\tdel progBar\n\n#########################################################\n\ndef refineAnim(targetNode) :\n\tif frameST != frameED :\n\t\tfor ctime in range (int(frameST), int(frameED+1), 1) :\n\t\t\ttr = targetNode\['translate'].getValueAt(ctime)\n\t\t\ttargetNode\['translate'].setValueAt(tr\[0], ctime, 0)\n\t\t\ttargetNode\['translate'].setValueAt(tr\[1], ctime, 1)\n\t\t\ttargetNode\['translate'].setValueAt(tr\[2], ctime, 2)\n\t\t\tif vertexType >=1 :\n\t\t\t\tro = targetNode\['rotate'].getValueAt(ctime)\n\t\t\t\ttargetNode\['rotate'].setValueAt(ro\[0], ctime, 0)\n\t\t\t\ttargetNode\['rotate'].setValueAt(ro\[1], ctime, 1)\n\t\t\t\ttargetNode\['rotate'].setValueAt(ro\[2], ctime, 2)\n\t\t\t\tif vertexType == 2 :\n\t\t\t\t\tsa = targetNode\['scaling'].getValueAt(ctime)\n\t\t\t\t\ttargetNode\['scaling'].setValueAt(sa\[0], ctime, 0)\n\t\t\t\t\ttargetNode\['scaling'].setValueAt(sa\[1], ctime, 1)\n\t\t\t\t\ttargetNode\['scaling'].setValueAt(sa\[2], ctime, 2)\n" +STARTLINE} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Vector2ToSTMap.gizmo ================================================ Group { name Vector2ToSTMap addUserKnob {20 VtoU l "Vector2 to STMap"} addUserKnob {41 in l Vector_Layer t "Pick the layer containing your motion vectors." T UV_Channel.in} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name Input xpos -303 ypos 114 } set Ne43e7b0 [stack 0] Shuffle { name UV_Channel xpos -163 ypos 114 } Expression { expr0 (r+x+0.5)/width expr1 (g+y+0.5)/height channel2 {-rgba.red -rgba.green -rgba.blue none} channel3 {none none none -rgba.alpha} name Vectors_to_UV xpos -163 ypos 228 } push $Ne43e7b0 ShuffleCopy { inputs 2 in2 none red red green green alpha black out {{{parent.UV_Channel.in}}} name ShuffleCopy1 xpos -303 ypos 228 } Output { name Output1 xpos -303 ypos 299 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Vector3ToMatrix4.gizmo ================================================ Group { name Vector3ToMatrix4_ knobChanged "# Knobchanged code:\nnode = nuke.thisNode()\nknob = nuke.thisKnob()\nif knob.name() == 'vector_representation':\n if knob.value() == 'Rotation (orientation vector)':\n node\['lookat'].setVisible(True)\n node\['minus_axis'].setVisible(True)\n else:\n node\['lookat'].setVisible(False)\n node\['minus_axis'].setVisible(False)\n" addUserKnob {20 main_tab l "Vector3 to Matrix4"} addUserKnob {4 vector_representation l "Use Vector as" t "A vector3 by itself cannot represent all the parts required for a matrix, however we are able to infer some transformation matrices from a vector3.\nFor a translation matrix, the x, y and z values are used as is for translate values.\nFor a rotation matrix, we calculate a rotation matrix so that a specified axis looks at the 3d point defined by the vector. If you are looking to rotate in x, y and z angles by the amount of each dimention of the vector, look at the RotateMatrix4 node instead.\nFor the scale vector, we use the magnitude here, so this will always result in an uniform scale. For non-uniform scaling, look at ScaleMatrix4." M {Translation "Rotation (orientation vector)" "Scale (magnitude)"}} addUserKnob {4 lookat l "Aim Axis" t "Aim the selected Axis in the direction of the 3d vector." +HIDDEN M {X Y Z "" ""}} addUserKnob {6 minus_axis l "Negative Axis" t "Use the negative axis rather than the positive axis" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x545454ff label "- Identity in\n matrix layers\n- Bypass other channels" note_font_size 20 xpos -39 ypos 277 bdwidth 280 bdheight 262 } Input { inputs 0 name vector3 xpos -335 ypos -120 } Dot { name Dot12 tile_color 0xcccccc00 xpos -301 ypos 97 } set N260f03c0 [stack 0] Group { name NormalizeVector3_1 help "Normalize the magnitude of a Vector3 (to be of magnitude 1)" xpos -145 ypos 94 addUserKnob {20 main_tab l "Normalize Vector3"} addUserKnob {41 in l "Vector B Layer" t "Layer containing the vector information for input B" T vector_layer.in} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vectorB xpos 0 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 108 } set N168e4560 [stack 0] Shuffle { name vector_layer xpos 140 ypos 104 } Remove { operation keep channels rgba name Remove1 xpos 140 ypos 130 } Dot { name Dot3 tile_color 0x9e3c6300 xpos 174 ypos 156 } set N1b5e0b90 [stack 0] push $N1b5e0b90 Dot { name Dot4 tile_color 0x9e3c6300 xpos 377 ypos 156 } Expression { channel0 rgba expr0 sqrt((r*r)+(g*g)+(b*b)) channel2 {-rgba.red -rgba.green -rgba.blue none} channel3 {none none none -rgba.alpha} name Mag3 xpos 343 ypos 209 } Dot { name Dot5 tile_color 0xcccccc00 xpos 377 ypos 271 } Merge2 { inputs 2 operation divide bbox B name Merge1 xpos 140 ypos 267 } Dot { name Dot2 tile_color 0x4b5ec600 xpos 174 ypos 364 } push $N168e4560 ShuffleCopy { inputs 2 in2 none red red green green blue blue out {{{parent.UV_Channel.in}}} name ShuffleCopy1 xpos 0 ypos 360 } Output { name Output1 xpos 0 ypos 506 } end_group Multiply { value -1 name Multiply1 xpos 269 ypos 88 disable {{!parent.minus_axis}} } Dot { name Dot1 tile_color 0x7aa9ff00 xpos 303 ypos 173 } set N1556f230 [stack 0] Dot { name Dot5 tile_color 0x7aa9ff00 xpos 376 ypos 173 } set N1cfd1db0 [stack 0] Constant { inputs 0 channels rgb color {1 0 0 1} name Pole_Vector1 xpos 609 ypos -35 } Constant { inputs 0 channels rgb color {0 0 1 1} name Pole_Vector2 xpos 506 ypos -36 } Constant { inputs 0 channels rgb color {0 1 0 1} name Pole_Vector xpos 407 ypos -38 } Switch { inputs 3 which {{parent.lookat}} name Pole_Picker xpos 407 ypos 88 } Group { inputs 2 name CrossProductVector3_ help "Calculates the cross product of 2 Vector3 inputs." xpos 407 ypos 225 addUserKnob {20 main_tab l "Cross Product Vector3"} addUserKnob {41 in l "Vector B Layer" t "Layer containing the vector information for input B" T vector_layer.in} addUserKnob {41 in_1 l "Vector A Layer" t "Layer containing the vector information for input A" T vector_layer1.in} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vectorA xpos 457 ypos -6 number 1 } Shuffle { name vector_layer1 xpos 457 ypos 103 } Remove { operation keep channels rgba name Remove2 xpos 457 ypos 129 } Dot { name Dot3 tile_color 0x9e3c6300 xpos 491 ypos 210 } Input { inputs 0 name vectorB xpos 0 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 108 } set N12b61dd0 [stack 0] Shuffle { name vector_layer xpos 140 ypos 104 } Remove { operation keep channels rgba name Remove1 xpos 140 ypos 130 } MergeExpression { inputs 2 expr0 "Ag*Bb - Ab*Bg" expr1 "Ab*Br - Ar*Bb" expr2 "Ar*Bg - Ag*Br" name MergeExpression2 xpos 140 ypos 206 } Dot { name Dot2 tile_color 0x4b5ec600 xpos 174 ypos 364 } push $N12b61dd0 ShuffleCopy { inputs 2 in2 none red red green green blue blue out {{{parent.UV_Channel.in}}} name ShuffleCopy1 xpos 0 ypos 360 } Output { name Output1 xpos 0 ypos 506 } end_group set N122b60e0 [stack 0] push $N260f03c0 Group { name Magnitude_Vector3_ help "Calculate the magnitude (scalar) of an input Vector3." xpos -560 ypos 94 addUserKnob {20 main_tab l "Magnitude Vector3"} addUserKnob {41 in l "Vector B Layer" t "Layer containing the vector information for input B" T vector_layer.in} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vectorB xpos 0 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 108 } set N355da1b0 [stack 0] Shuffle { name vector_layer xpos 140 ypos 104 } Remove { operation keep channels rgba name Remove1 xpos 140 ypos 130 } Expression { channel0 rgba expr0 sqrt((r*r)+(g*g)+(b*b)) channel2 {-rgba.red -rgba.green -rgba.blue none} channel3 {none none none -rgba.alpha} name Mag3 xpos 140 ypos 227 } Dot { name Dot2 tile_color 0xcccccc00 xpos 174 ypos 364 } push $N355da1b0 ShuffleCopy { inputs 2 in2 none red red green green blue blue out {{{parent.UV_Channel.in}}} name ShuffleCopy1 xpos 0 ypos 360 } Output { name Output1 xpos 0 ypos 506 } end_group push $N1556f230 Dot { name Dot8 tile_color 0x7aa9ff00 xpos 93 ypos 173 } Remove { name Remove1 xpos 59 ypos 229 } add_layer {matrix0 matrix0.0 matrix0.1 matrix0.2 matrix0.3} Expression { channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 1 channel1 {-matrix0.0 matrix0.1 -matrix0.2 -matrix0.3} expr1 0 channel2 {-matrix0.0 -matrix0.1 matrix0.2 -matrix0.3} expr2 0 channel3 {-matrix0.0 -matrix0.1 -matrix0.2 matrix0.3} expr3 0 name Expression1 xpos 59 ypos 402 } add_layer {matrix1 matrix1.0 matrix1.1 matrix1.2 matrix1.3} Expression { channel0 {matrix1.0 -matrix1.1 -matrix1.2 -matrix1.3} expr0 0 channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 1 channel2 {-matrix1.0 -matrix1.1 matrix1.2 -matrix1.3} expr2 0 channel3 {-matrix1.0 -matrix1.1 -matrix1.2 matrix1.3} expr3 0 name Expression2 xpos 59 ypos 426 } add_layer {matrix2 matrix2.0 matrix2.1 matrix2.2 matrix2.3} Expression { channel0 {matrix2.0 -matrix2.1 -matrix2.2 -matrix2.3} expr0 0 channel1 {-matrix2.0 matrix2.1 -matrix2.2 -matrix2.3} expr1 0 channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 1 channel3 {-matrix2.0 -matrix2.1 -matrix2.2 matrix2.3} expr3 0 name Expression3 xpos 59 ypos 450 } add_layer {matrix3 matrix3.0 matrix3.1 matrix3.2 matrix3.3} Expression { channel0 {matrix3.0 -matrix3.1 -matrix3.2 -matrix3.3} expr0 0 channel1 {-matrix3.0 matrix3.1 -matrix3.2 -matrix3.3} expr1 0 channel2 {-matrix3.0 -matrix3.1 matrix3.2 -matrix3.3} expr2 0 channel3 {-matrix3.0 -matrix3.1 -matrix3.2 matrix3.3} expr3 1 name Expression4 xpos 59 ypos 474 } Dot { name Dot13 tile_color 0xcccccc00 xpos 93 ypos 530 } set N2c4e4bb0 [stack 0] Dot { name Dot14 tile_color 0xcccccc00 xpos -202 ypos 530 } set N13be2b70 [stack 0] Group { inputs 2 name ScaleMatrix4_ help "Scale a matrix4 using a control channel (rgb from vector input) for which each channel is considered as a scalar for x, y and z" xpos -560 ypos 527 addUserKnob {20 ScaleMatrix4} addUserKnob {26 Description l "" +STARTLINE T "Scale a matrix4 using a control channel (rgb) for which each channel is considered as a scalar for x, y and z"} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vector xpos 491 ypos 162 number 1 } Dot { name Dot1 xpos 525 ypos 252 } Input { inputs 0 name matrix xpos 344 ypos 161 } MergeExpression { inputs 2 channel0 {matrix0.0 -matrix0.1 -matrix0.2 -matrix0.3} expr0 matrix0.0*Ar channel1 {-matrix1.0 matrix1.1 -matrix1.2 -matrix1.3} expr1 matrix1.1*Ag channel2 {-matrix2.0 -matrix2.1 matrix2.2 -matrix2.3} expr2 matrix2.2*Ab channel3 none name MergeExpression1 xpos 344 ypos 249 } Output { name Output1 xpos 344 ypos 349 } end_group Dot { name Dot16 tile_color 0xcccccc00 xpos -526 ypos 914 } push $N1556f230 Dot { name Dot3 tile_color 0x7aa9ff00 label "Aim Vector" xpos 303 ypos 358 } set N13f4f5e0 [stack 0] push $N122b60e0 Dot { name Dot2 tile_color 0xcccccc00 xpos 441 ypos 262 } set N1280eb70 [stack 0] push $N1cfd1db0 Dot { name Dot6 tile_color 0x7aa9ff00 xpos 595 ypos 173 } Group { inputs 2 name CrossProductVector3_1 help "Calculates the cross product of 2 Vector3 inputs." xpos 561 ypos 259 addUserKnob {20 main_tab l "Cross Product Vector3"} addUserKnob {41 in l "Vector B Layer" t "Layer containing the vector information for input B" T vector_layer.in} addUserKnob {41 in_1 l "Vector A Layer" t "Layer containing the vector information for input A" T vector_layer1.in} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vectorA xpos 457 ypos -6 number 1 } Shuffle { name vector_layer1 xpos 457 ypos 103 } Remove { operation keep channels rgba name Remove2 xpos 457 ypos 129 } Dot { name Dot3 tile_color 0x9e3c6300 xpos 491 ypos 210 } Input { inputs 0 name vectorB xpos 0 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 108 } set N1300e9c0 [stack 0] Shuffle { name vector_layer xpos 140 ypos 104 } Remove { operation keep channels rgba name Remove1 xpos 140 ypos 130 } MergeExpression { inputs 2 expr0 "Ag*Bb - Ab*Bg" expr1 "Ab*Br - Ar*Bb" expr2 "Ar*Bg - Ag*Br" name MergeExpression2 xpos 140 ypos 206 } Dot { name Dot2 tile_color 0x4b5ec600 xpos 174 ypos 364 } push $N1300e9c0 ShuffleCopy { inputs 2 in2 none red red green green blue blue out {{{parent.UV_Channel.in}}} name ShuffleCopy1 xpos 0 ypos 360 } Output { name Output1 xpos 0 ypos 506 } end_group Group { name NormalizeVector3_3 help "Normalize the magnitude of a Vector3 (to be of magnitude 1)" xpos 561 ypos 302 addUserKnob {20 main_tab l "Normalize Vector3"} addUserKnob {41 in l "Vector B Layer" t "Layer containing the vector information for input B" T vector_layer.in} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vectorB xpos 0 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 108 } set N1cbbba10 [stack 0] Shuffle { name vector_layer xpos 140 ypos 104 } Remove { operation keep channels rgba name Remove1 xpos 140 ypos 130 } Dot { name Dot3 tile_color 0x9e3c6300 xpos 174 ypos 156 } set N1c785c30 [stack 0] push $N1c785c30 Dot { name Dot4 tile_color 0x9e3c6300 xpos 377 ypos 156 } Expression { channel0 rgba expr0 sqrt((r*r)+(g*g)+(b*b)) channel2 {-rgba.red -rgba.green -rgba.blue none} channel3 {none none none -rgba.alpha} name Mag3 xpos 343 ypos 209 } Dot { name Dot5 tile_color 0xcccccc00 xpos 377 ypos 271 } Merge2 { inputs 2 operation divide bbox B name Merge1 xpos 140 ypos 267 } Dot { name Dot2 tile_color 0x4b5ec600 xpos 174 ypos 364 } push $N1cbbba10 ShuffleCopy { inputs 2 in2 none red red green green blue blue out {{{parent.UV_Channel.in}}} name ShuffleCopy1 xpos 0 ypos 360 } Output { name Output1 xpos 0 ypos 506 } end_group Dot { name Dot7 tile_color 0xcccccc00 label "Modified Pole Vector" xpos 595 ypos 355 } set N15c8e370 [stack 0] push $N1280eb70 Group { name NormalizeVector3_2 help "Normalize the magnitude of a Vector3 (to be of magnitude 1)" xpos 408 ypos 302 addUserKnob {20 main_tab l "Normalize Vector3"} addUserKnob {41 in l "Vector B Layer" t "Layer containing the vector information for input B" T vector_layer.in} addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name vectorB xpos 0 } Dot { name Dot1 tile_color 0xcccccc00 xpos 34 ypos 108 } set N1b5f6750 [stack 0] Shuffle { name vector_layer xpos 140 ypos 104 } Remove { operation keep channels rgba name Remove1 xpos 140 ypos 130 } Dot { name Dot3 tile_color 0x9e3c6300 xpos 174 ypos 156 } set N1dfc20b0 [stack 0] push $N1dfc20b0 Dot { name Dot4 tile_color 0x9e3c6300 xpos 377 ypos 156 } Expression { channel0 rgba expr0 sqrt((r*r)+(g*g)+(b*b)) channel2 {-rgba.red -rgba.green -rgba.blue none} channel3 {none none none -rgba.alpha} name Mag3 xpos 343 ypos 209 } Dot { name Dot5 tile_color 0xcccccc00 xpos 377 ypos 271 } Merge2 { inputs 2 operation divide bbox B name Merge1 xpos 140 ypos 267 } Dot { name Dot2 tile_color 0x4b5ec600 xpos 174 ypos 364 } push $N1b5f6750 ShuffleCopy { inputs 2 in2 none red red green green blue blue out {{{parent.UV_Channel.in}}} name ShuffleCopy1 xpos 0 ypos 360 } Output { name Output1 xpos 0 ypos 506 } end_group Dot { name Dot4 tile_color 0xcccccc00 label "Unconstrained Vector" xpos 441 ypos 354 } set N12ce8110 [stack 0] Switch { inputs 3 which {{parent.lookat}} name Z xpos 561 ypos 438 } Dot { name Dot9 tile_color 0xcccccc00 xpos 595 ypos 728 } push $N12ce8110 push $N13f4f5e0 push $N15c8e370 Switch { inputs 3 which {{parent.lookat}} name Y xpos 407 ypos 433 } Dot { name Dot10 tile_color 0xcccccc00 xpos 441 ypos 666 } push $N15c8e370 push $N12ce8110 push $N13f4f5e0 Switch { inputs 3 which {{parent.lookat}} name X xpos 269 ypos 432 } Dot { name Dot11 tile_color 0xcccccc00 xpos 303 ypos 604 } push $N2c4e4bb0 Copy { inputs 2 from0 rgba.red to0 matrix0.0 from1 rgba.green to1 matrix1.0 from2 rgba.blue to2 matrix2.0 bbox B name Copy1 xpos 59 ypos 582 } Copy { inputs 2 from0 rgba.red to0 matrix0.1 from1 rgba.green to1 matrix1.1 from2 rgba.blue to2 matrix2.1 bbox B name Copy2 xpos 59 ypos 644 } Copy { inputs 2 from0 rgba.red to0 matrix0.2 from1 rgba.green to1 matrix1.2 from2 rgba.blue to2 matrix2.2 bbox B name Copy3 xpos 59 ypos 706 } Dot { name Dot17 tile_color 0x9e3c6300 xpos 93 ypos 914 } push $N260f03c0 Dot { name Dot15 tile_color 0xcccccc00 xpos -301 ypos 606 } push $N13be2b70 Copy { inputs 2 from0 rgba.red to0 matrix0.3 from1 rgba.green to1 matrix1.3 from2 rgba.blue to2 matrix2.3 bbox B name Copy4 xpos -236 ypos 584 } Switch { inputs 3 which {{parent.vector_representation}} name Switch1 xpos -236 ypos 911 } Output { name Output1 xpos -236 ypos 1009 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_VectorExtendEdge.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { name VectorExtendEdge help "Push rgb pixels outwards using vectors generated perpedicular to a control matte edge." selected true addUserKnob {20 VectorExtendEdge} addUserKnob {4 premult l "input is" M {premultiplied unpremultiplied}} addUserKnob {41 from0 l "control matte channel" T Copy4.from0} addUserKnob {7 preblur l "pre-blur control matte" t "Blurring the control matte by a moderate amount will increase the width of the extended edge border and help with blending together the slices." R 0 10} preblur 1 addUserKnob {26 ""} addUserKnob {3 slices l "vector blur slices" t "The number of iterations of the vector blur operation, up to 10."} slices 5 addUserKnob {7 preblur_vector l "preblur vector" t "Blur the vector a bit before it's used to extend the rgb pixels. Can help with blending and will also extend the edge further." R 0 10} preblur_vector 1 addUserKnob {7 vector_length l "vector length" t "The length of the vector blur operation per slice. Best to avoid making this too high because it can slow things down when multiplied by the number of slices." R 1 10} vector_length 3 addUserKnob {26 ""} addUserKnob {4 output t "The default output is the rgb. The vector output options are just for checking what's going on under the hood. The \"-1 to 1\" range is the \"native\" format while the \"0 to 1\" range compresses the vectors so that negative values can be visualised." M {"extended rgb" "vectors (-1 to 1 range)" "vectors (0 to 1 range)" ""}} } Input { inputs 0 name ctrl_matte xpos 1122 ypos 457 number 1 } AddChannels { channels rgba name AddChannels2 selected true xpos 1122 ypos 504 } Input { inputs 0 name img xpos 840 ypos 457 } AddChannels { channels rgba name AddChannels1 xpos 840 ypos 502 } Dot { name Dot2 xpos 874 ypos 570 } set N918d19a0 [stack 0] Unpremult { name Unpremult11 xpos 965 ypos 566 disable {{parent.premult i}} } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy4 xpos 1122 ypos 559 disable {{"!\[exists parent.input1]" i}} } Blur { channels alpha size {{parent.preblur i}} name Blur12 label "pre-blur alpha" xpos 1122 ypos 648 } set N918da5f0 [stack 0] push $N918da5f0 push $N918da5f0 push $N918da5f0 Group { inputs 2 name ExtendEdge help "Very useful as a super unpremultiplier. The input matte is used as the source edge to extend the input colour channels beyond their existing alpha. It can also be used to do dilate/erode operations on an alpha. The effect can be extended by using multiple copies. The result should probably be re-comped with the original using an edge matte through a KeyMix so that only the desired areas are used. " xpos 1325 ypos 662 addUserKnob {20 Controls} addUserKnob {7 preblurVector R 0 10} preblurVector {{parent.preblur_vector i}} addUserKnob {41 scale l "vector length" T VectorBlur2.scale} } Input { inputs 0 name Input xpos 556 ypos -426 } set N918296f0 [stack 0] Dot { name Dot1 xpos 707 ypos -414 } Dot { name Dot2 xpos 707 ypos -121 } Input { inputs 0 name matte xpos 440 ypos -424 number 1 } Shuffle { red alpha green alpha blue alpha alpha black name Shuffle3 xpos 440 ypos -346 } Group { name Edge2Vec2 xpos 440 ypos -322 } Input { inputs 0 name Input1 xpos -172 ypos -315 } Clamp { channels rgb name Clamp1 xpos -172 ypos -250 } set N91c4b480 [stack 0] Position { translate {0 1} name Position2 xpos -63 ypos -106 } push $N91c4b480 Merge2 { inputs 2 operation minus name Merge2 xpos -103 ypos -28 } push $N91c4b480 Position { translate {1 0} name Position1 xpos -285 ypos -98 } push $N91c4b480 Merge2 { inputs 2 operation minus name Merge1 xpos -253 ypos -29 } Copy { inputs 2 from0 rgba.green to0 rgba.green name Copy3 xpos -179 ypos 27 } Grade { channels {rgba.red rgba.green -rgba.blue none} multiply {{Input1.height*Grade1.height i} {Input1.height*Grade1.height i} {curve i} {curve i}} black_clamp false name Grade1 xpos -179 ypos 196 addUserKnob {20 User} addUserKnob {7 height l Height} height 1 } set N918aa570 [stack 0] push $N918aa570 Expression { channel0 rgb expr0 sqrt((r*r)+(g*g)+(b*b)) name VectorLength selected true xpos -260 ypos 278 } Merge2 { inputs 2 operation divide name Merge4 selected true xpos -179 ypos 350 } Output { name Output1 xpos -179 ypos 494 } end_group Blur { channels rgb size {{parent.preblurVector i}} name Blur5 label "pre blur vector" xpos 440 ypos -296 } push $N918296f0 ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 label "rg to forward" xpos 556 ypos -194 } VectorBlur { channels rgba uv forward scale {{vector_length i}} offset 0 alpha -rgba.alpha maskChannelMask -rgba.alpha maskChannelInput -rgba.alpha name VectorBlur2 xpos 556 ypos -139 } CopyBBox { inputs 2 name CopyBBox1 xpos 556 ypos -92 } Output { name Output1 xpos 556 ypos -8 } end_group Keymix { inputs 3 channels rgb name Keymix11 xpos 1325 ypos 751 } set N9202a7d0 [stack 0] push $N9202a7d0 push $N9202a7d0 push $N9202a7d0 Group { inputs 2 name ExtendEdge1 help "Very useful as a super unpremultiplier. The input matte is used as the source edge to extend the input colour channels beyond their existing alpha. It can also be used to do dilate/erode operations on an alpha. The effect can be extended by using multiple copies. The result should probably be re-comped with the original using an edge matte through a KeyMix so that only the desired areas are used. " xpos 1509 ypos 743 addUserKnob {20 Controls} addUserKnob {7 preblurVector R 0 10} preblurVector {{parent.ExtendEdge.preblurVector i}} addUserKnob {41 scale l "vector length" T VectorBlur2.scale} } Input { inputs 0 name Input xpos 556 ypos -426 } set N92034310 [stack 0] Dot { name Dot1 xpos 707 ypos -414 } Dot { name Dot2 xpos 707 ypos -121 } Input { inputs 0 name matte xpos 440 ypos -424 number 1 } Shuffle { red alpha green alpha blue alpha alpha black name Shuffle3 xpos 440 ypos -346 } Group { name Edge2Vec2 xpos 440 ypos -322 } Input { inputs 0 name Input1 xpos -172 ypos -315 } Clamp { channels rgb name Clamp1 xpos -172 ypos -250 } set N91cad330 [stack 0] Position { translate {0 1} name Position2 xpos -63 ypos -106 } push $N91cad330 Merge2 { inputs 2 operation minus name Merge2 xpos -103 ypos -28 } push $N91cad330 Position { translate {1 0} name Position1 xpos -285 ypos -98 } push $N91cad330 Merge2 { inputs 2 operation minus name Merge1 xpos -253 ypos -29 } Copy { inputs 2 from0 rgba.green to0 rgba.green name Copy3 xpos -179 ypos 27 } Grade { channels {rgba.red rgba.green -rgba.blue none} multiply {{Input1.height*Grade1.height i} {Input1.height*Grade1.height i} {curve i} {curve i}} black_clamp false name Grade1 xpos -179 ypos 196 addUserKnob {20 User} addUserKnob {7 height l Height} height 1 } set N91c8c5e0 [stack 0] push $N91c8c5e0 Expression { channel0 rgb expr0 sqrt((r*r)+(g*g)+(b*b)) name VectorLength selected true xpos -260 ypos 278 } Merge2 { inputs 2 operation divide name Merge4 selected true xpos -179 ypos 350 } Output { name Output1 xpos -179 ypos 494 } end_group Blur { channels rgb size {{parent.preblurVector i}} name Blur5 label "pre blur vector" xpos 440 ypos -296 } push $N92034310 ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 label "rg to forward" xpos 556 ypos -194 } VectorBlur { channels rgba uv forward scale {{parent.parent.ExtendEdge.VectorBlur2.scale i}} offset 0 alpha -rgba.alpha maskChannelMask -rgba.alpha maskChannelInput -rgba.alpha name VectorBlur2 xpos 556 ypos -139 } CopyBBox { inputs 2 name CopyBBox1 xpos 556 ypos -92 } Output { name Output1 xpos 556 ypos -8 } end_group Keymix { inputs 3 channels rgb name Keymix12 xpos 1509 ypos 823 } set N91e0ff00 [stack 0] push $N91e0ff00 push $N91e0ff00 push $N91e0ff00 Group { inputs 2 name ExtendEdge2 help "Very useful as a super unpremultiplier. The input matte is used as the source edge to extend the input colour channels beyond their existing alpha. It can also be used to do dilate/erode operations on an alpha. The effect can be extended by using multiple copies. The result should probably be re-comped with the original using an edge matte through a KeyMix so that only the desired areas are used. " xpos 1695 ypos 823 addUserKnob {20 Controls} addUserKnob {7 preblurVector R 0 10} preblurVector {{parent.ExtendEdge.preblurVector}} addUserKnob {41 scale l "vector length" T VectorBlur2.scale} } Input { inputs 0 name Input xpos 556 ypos -426 } set N91e1ebe0 [stack 0] Dot { name Dot1 xpos 707 ypos -414 } Dot { name Dot2 xpos 707 ypos -121 } Input { inputs 0 name matte xpos 440 ypos -424 number 1 } Shuffle { red alpha green alpha blue alpha alpha black name Shuffle3 xpos 440 ypos -346 } Group { name Edge2Vec2 xpos 440 ypos -322 } Input { inputs 0 name Input1 xpos -172 ypos -315 } Clamp { channels rgb name Clamp1 xpos -172 ypos -250 } set N91e465e0 [stack 0] Position { translate {0 1} name Position2 xpos -63 ypos -106 } push $N91e465e0 Merge2 { inputs 2 operation minus name Merge2 xpos -103 ypos -28 } push $N91e465e0 Position { translate {1 0} name Position1 xpos -285 ypos -98 } push $N91e465e0 Merge2 { inputs 2 operation minus name Merge1 xpos -253 ypos -29 } Copy { inputs 2 from0 rgba.green to0 rgba.green name Copy3 xpos -179 ypos 27 } Grade { channels {rgba.red rgba.green -rgba.blue none} multiply {{Input1.height*Grade1.height i} {Input1.height*Grade1.height i} {curve i} {curve i}} black_clamp false name Grade1 xpos -179 ypos 196 addUserKnob {20 User} addUserKnob {7 height l Height} height 1 } set N91e85c70 [stack 0] push $N91e85c70 Expression { channel0 rgb expr0 sqrt((r*r)+(g*g)+(b*b)) name VectorLength selected true xpos -260 ypos 278 } Merge2 { inputs 2 operation divide name Merge4 selected true xpos -179 ypos 350 } Output { name Output1 xpos -179 ypos 494 } end_group Blur { channels rgb size {{parent.preblurVector i}} name Blur5 label "pre blur vector" xpos 440 ypos -296 } push $N91e1ebe0 ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 label "rg to forward" xpos 556 ypos -194 } VectorBlur { channels rgba uv forward scale {{parent.parent.ExtendEdge.VectorBlur2.scale i}} offset 0 alpha -rgba.alpha maskChannelMask -rgba.alpha maskChannelInput -rgba.alpha name VectorBlur2 xpos 556 ypos -139 } CopyBBox { inputs 2 name CopyBBox1 xpos 556 ypos -92 } Output { name Output1 xpos 556 ypos -8 } end_group Keymix { inputs 3 channels rgb name Keymix13 xpos 1695 ypos 895 } set N91deb530 [stack 0] push $N91deb530 push $N91deb530 push $N91deb530 Group { inputs 2 name ExtendEdge3 help "Very useful as a super unpremultiplier. The input matte is used as the source edge to extend the input colour channels beyond their existing alpha. It can also be used to do dilate/erode operations on an alpha. The effect can be extended by using multiple copies. The result should probably be re-comped with the original using an edge matte through a KeyMix so that only the desired areas are used. " xpos 1891 ypos 895 addUserKnob {20 Controls} addUserKnob {7 preblurVector R 0 10} preblurVector {{parent.ExtendEdge.preblurVector}} addUserKnob {41 scale l "vector length" T VectorBlur2.scale} } Input { inputs 0 name Input xpos 556 ypos -426 } set N91dfa1b0 [stack 0] Dot { name Dot1 xpos 707 ypos -414 } Dot { name Dot2 xpos 707 ypos -121 } Input { inputs 0 name matte xpos 440 ypos -424 number 1 } Shuffle { red alpha green alpha blue alpha alpha black name Shuffle3 xpos 440 ypos -346 } Group { name Edge2Vec2 xpos 440 ypos -322 } Input { inputs 0 name Input1 xpos -172 ypos -315 } Clamp { channels rgb name Clamp1 xpos -172 ypos -250 } set N90e575b0 [stack 0] Position { translate {0 1} name Position2 xpos -63 ypos -106 } push $N90e575b0 Merge2 { inputs 2 operation minus name Merge2 xpos -103 ypos -28 } push $N90e575b0 Position { translate {1 0} name Position1 xpos -285 ypos -98 } push $N90e575b0 Merge2 { inputs 2 operation minus name Merge1 xpos -253 ypos -29 } Copy { inputs 2 from0 rgba.green to0 rgba.green name Copy3 xpos -179 ypos 27 } Grade { channels {rgba.red rgba.green -rgba.blue none} multiply {{Input1.height*Grade1.height i} {Input1.height*Grade1.height i} {curve i} {curve i}} black_clamp false name Grade1 xpos -179 ypos 196 addUserKnob {20 User} addUserKnob {7 height l Height} height 1 } set N911a4c50 [stack 0] push $N911a4c50 Expression { channel0 rgb expr0 sqrt((r*r)+(g*g)+(b*b)) name VectorLength selected true xpos -260 ypos 278 } Merge2 { inputs 2 operation divide name Merge4 selected true xpos -179 ypos 350 } Output { name Output1 xpos -179 ypos 494 } end_group Blur { channels rgb size {{parent.preblurVector i}} name Blur5 label "pre blur vector" xpos 440 ypos -296 } push $N91dfa1b0 ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 label "rg to forward" xpos 556 ypos -194 } VectorBlur { channels rgba uv forward scale {{parent.parent.ExtendEdge.VectorBlur2.scale i}} offset 0 alpha -rgba.alpha maskChannelMask -rgba.alpha maskChannelInput -rgba.alpha name VectorBlur2 xpos 556 ypos -139 } CopyBBox { inputs 2 name CopyBBox1 xpos 556 ypos -92 } Output { name Output1 xpos 556 ypos -8 } end_group Keymix { inputs 3 channels rgb name Keymix14 xpos 1891 ypos 967 } set N91f510c0 [stack 0] push $N91f510c0 push $N91f510c0 push $N91f510c0 Group { inputs 2 name ExtendEdge4 help "Very useful as a super unpremultiplier. The input matte is used as the source edge to extend the input colour channels beyond their existing alpha. It can also be used to do dilate/erode operations on an alpha. The effect can be extended by using multiple copies. The result should probably be re-comped with the original using an edge matte through a KeyMix so that only the desired areas are used. " xpos 2077 ypos 967 addUserKnob {20 Controls} addUserKnob {7 preblurVector R 0 10} preblurVector {{parent.ExtendEdge.preblurVector}} addUserKnob {41 scale l "vector length" T VectorBlur2.scale} } Input { inputs 0 name Input xpos 556 ypos -426 } set N91f5fd70 [stack 0] Dot { name Dot1 xpos 707 ypos -414 } Dot { name Dot2 xpos 707 ypos -121 } Input { inputs 0 name matte xpos 440 ypos -424 number 1 } Shuffle { red alpha green alpha blue alpha alpha black name Shuffle3 xpos 440 ypos -346 } Group { name Edge2Vec2 xpos 440 ypos -322 } Input { inputs 0 name Input1 xpos -172 ypos -315 } Clamp { channels rgb name Clamp1 xpos -172 ypos -250 } set N91f87780 [stack 0] Position { translate {0 1} name Position2 xpos -63 ypos -106 } push $N91f87780 Merge2 { inputs 2 operation minus name Merge2 xpos -103 ypos -28 } push $N91f87780 Position { translate {1 0} name Position1 xpos -285 ypos -98 } push $N91f87780 Merge2 { inputs 2 operation minus name Merge1 xpos -253 ypos -29 } Copy { inputs 2 from0 rgba.green to0 rgba.green name Copy3 xpos -179 ypos 27 } Grade { channels {rgba.red rgba.green -rgba.blue none} multiply {{Input1.height*Grade1.height i} {Input1.height*Grade1.height i} {curve i} {curve i}} black_clamp false name Grade1 xpos -179 ypos 196 addUserKnob {20 User} addUserKnob {7 height l Height} height 1 } set N91f99b80 [stack 0] push $N91f99b80 Expression { channel0 rgb expr0 sqrt((r*r)+(g*g)+(b*b)) name VectorLength selected true xpos -260 ypos 278 } Merge2 { inputs 2 operation divide name Merge4 selected true xpos -179 ypos 350 } Output { name Output1 xpos -179 ypos 494 } end_group Blur { channels rgb size {{parent.preblurVector i}} name Blur5 label "pre blur vector" xpos 440 ypos -296 } push $N91f5fd70 ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 label "rg to forward" xpos 556 ypos -194 } VectorBlur { channels rgba uv forward scale {{parent.parent.ExtendEdge.VectorBlur2.scale i}} offset 0 alpha -rgba.alpha maskChannelMask -rgba.alpha maskChannelInput -rgba.alpha name VectorBlur2 xpos 556 ypos -139 } CopyBBox { inputs 2 name CopyBBox1 xpos 556 ypos -92 } Output { name Output1 xpos 556 ypos -8 } end_group Keymix { inputs 3 channels rgb name Keymix15 xpos 2077 ypos 1039 } set N91ba8de0 [stack 0] push $N91ba8de0 push $N91ba8de0 push $N91ba8de0 Group { inputs 2 name ExtendEdge5 help "Very useful as a super unpremultiplier. The input matte is used as the source edge to extend the input colour channels beyond their existing alpha. It can also be used to do dilate/erode operations on an alpha. The effect can be extended by using multiple copies. The result should probably be re-comped with the original using an edge matte through a KeyMix so that only the desired areas are used. " xpos 2263 ypos 1039 addUserKnob {20 Controls} addUserKnob {7 preblurVector R 0 10} preblurVector {{parent.ExtendEdge.preblurVector i}} addUserKnob {41 scale l "vector length" T VectorBlur2.scale} } Input { inputs 0 name Input xpos 556 ypos -426 } set N91beeca0 [stack 0] Dot { name Dot1 xpos 707 ypos -414 } Dot { name Dot2 xpos 707 ypos -121 } Input { inputs 0 name matte xpos 440 ypos -424 number 1 } Shuffle { red alpha green alpha blue alpha alpha black name Shuffle3 xpos 440 ypos -346 } Group { name Edge2Vec2 xpos 440 ypos -322 } Input { inputs 0 name Input1 xpos -172 ypos -315 } Clamp { channels rgb name Clamp1 xpos -172 ypos -250 } set N91d89700 [stack 0] Position { translate {0 1} name Position2 xpos -63 ypos -106 } push $N91d89700 Merge2 { inputs 2 operation minus name Merge2 xpos -103 ypos -28 } push $N91d89700 Position { translate {1 0} name Position1 xpos -285 ypos -98 } push $N91d89700 Merge2 { inputs 2 operation minus name Merge1 xpos -253 ypos -29 } Copy { inputs 2 from0 rgba.green to0 rgba.green name Copy3 xpos -179 ypos 27 } Grade { channels {rgba.red rgba.green -rgba.blue none} multiply {{Input1.height*Grade1.height i} {Input1.height*Grade1.height i} {curve i} {curve i}} black_clamp false name Grade1 xpos -179 ypos 196 addUserKnob {20 User} addUserKnob {7 height l Height} height 1 } set N91d40750 [stack 0] push $N91d40750 Expression { channel0 rgb expr0 sqrt((r*r)+(g*g)+(b*b)) name VectorLength selected true xpos -260 ypos 278 } Merge2 { inputs 2 operation divide name Merge4 selected true xpos -179 ypos 350 } Output { name Output1 xpos -179 ypos 494 } end_group Blur { channels rgb size {{parent.preblurVector i}} name Blur5 label "pre blur vector" xpos 440 ypos -296 } push $N91beeca0 ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 label "rg to forward" xpos 556 ypos -194 } VectorBlur { channels rgba uv forward scale {{parent.parent.ExtendEdge.VectorBlur2.scale i}} offset 0 alpha -rgba.alpha maskChannelMask -rgba.alpha maskChannelInput -rgba.alpha name VectorBlur2 xpos 556 ypos -139 } CopyBBox { inputs 2 name CopyBBox1 xpos 556 ypos -92 } Output { name Output1 xpos 556 ypos -8 } end_group Keymix { inputs 3 channels rgb name Keymix16 xpos 2263 ypos 1111 } set N91b5f6a0 [stack 0] push $N91b5f6a0 push $N91b5f6a0 push $N91b5f6a0 Group { inputs 2 name ExtendEdge6 help "Very useful as a super unpremultiplier. The input matte is used as the source edge to extend the input colour channels beyond their existing alpha. It can also be used to do dilate/erode operations on an alpha. The effect can be extended by using multiple copies. The result should probably be re-comped with the original using an edge matte through a KeyMix so that only the desired areas are used. " xpos 2449 ypos 1111 addUserKnob {20 Controls} addUserKnob {7 preblurVector R 0 10} preblurVector {{parent.ExtendEdge.preblurVector}} addUserKnob {41 scale l "vector length" T VectorBlur2.scale} } Input { inputs 0 name Input xpos 556 ypos -426 } set N91fa9a50 [stack 0] Dot { name Dot1 xpos 707 ypos -414 } Dot { name Dot2 xpos 707 ypos -121 } Input { inputs 0 name matte xpos 440 ypos -424 number 1 } Shuffle { red alpha green alpha blue alpha alpha black name Shuffle3 xpos 440 ypos -346 } Group { name Edge2Vec2 xpos 440 ypos -322 } Input { inputs 0 name Input1 xpos -172 ypos -315 } Clamp { channels rgb name Clamp1 xpos -172 ypos -250 } set N91fb94f0 [stack 0] Position { translate {0 1} name Position2 xpos -63 ypos -106 } push $N91fb94f0 Merge2 { inputs 2 operation minus name Merge2 xpos -103 ypos -28 } push $N91fb94f0 Position { translate {1 0} name Position1 xpos -285 ypos -98 } push $N91fb94f0 Merge2 { inputs 2 operation minus name Merge1 xpos -253 ypos -29 } Copy { inputs 2 from0 rgba.green to0 rgba.green name Copy3 xpos -179 ypos 27 } Grade { channels {rgba.red rgba.green -rgba.blue none} multiply {{Input1.height*Grade1.height i} {Input1.height*Grade1.height i} {curve i} {curve i}} black_clamp false name Grade1 xpos -179 ypos 196 addUserKnob {20 User} addUserKnob {7 height l Height} height 1 } set N91ff8bd0 [stack 0] push $N91ff8bd0 Expression { channel0 rgb expr0 sqrt((r*r)+(g*g)+(b*b)) name VectorLength selected true xpos -260 ypos 278 } Merge2 { inputs 2 operation divide name Merge4 selected true xpos -179 ypos 350 } Output { name Output1 xpos -179 ypos 494 } end_group Blur { channels rgb size {{parent.preblurVector i}} name Blur5 label "pre blur vector" xpos 440 ypos -296 } push $N91fa9a50 ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 label "rg to forward" xpos 556 ypos -194 } VectorBlur { channels rgba uv forward scale {{parent.parent.ExtendEdge.VectorBlur2.scale i}} offset 0 alpha -rgba.alpha maskChannelMask -rgba.alpha maskChannelInput -rgba.alpha name VectorBlur2 xpos 556 ypos -139 } CopyBBox { inputs 2 name CopyBBox1 xpos 556 ypos -92 } Output { name Output1 xpos 556 ypos -8 } end_group Keymix { inputs 3 channels rgb name Keymix17 xpos 2449 ypos 1183 } set N9201e2a0 [stack 0] push $N9201e2a0 push $N9201e2a0 push $N9201e2a0 Group { inputs 2 name ExtendEdge7 help "Very useful as a super unpremultiplier. The input matte is used as the source edge to extend the input colour channels beyond their existing alpha. It can also be used to do dilate/erode operations on an alpha. The effect can be extended by using multiple copies. The result should probably be re-comped with the original using an edge matte through a KeyMix so that only the desired areas are used. " xpos 2635 ypos 1183 addUserKnob {20 Controls} addUserKnob {7 preblurVector R 0 10} preblurVector {{parent.ExtendEdge.preblurVector}} addUserKnob {41 scale l "vector length" T VectorBlur2.scale} } Input { inputs 0 name Input xpos 556 ypos -426 } set N92151130 [stack 0] Dot { name Dot1 xpos 707 ypos -414 } Dot { name Dot2 xpos 707 ypos -121 } Input { inputs 0 name matte xpos 440 ypos -424 number 1 } Shuffle { red alpha green alpha blue alpha alpha black name Shuffle3 xpos 440 ypos -346 } Group { name Edge2Vec2 xpos 440 ypos -322 } Input { inputs 0 name Input1 xpos -172 ypos -315 } Clamp { channels rgb name Clamp1 xpos -172 ypos -250 } set N92178b00 [stack 0] Position { translate {0 1} name Position2 xpos -63 ypos -106 } push $N92178b00 Merge2 { inputs 2 operation minus name Merge2 xpos -103 ypos -28 } push $N92178b00 Position { translate {1 0} name Position1 xpos -285 ypos -98 } push $N92178b00 Merge2 { inputs 2 operation minus name Merge1 xpos -253 ypos -29 } Copy { inputs 2 from0 rgba.green to0 rgba.green name Copy3 xpos -179 ypos 27 } Grade { channels {rgba.red rgba.green -rgba.blue none} multiply {{Input1.height*Grade1.height i} {Input1.height*Grade1.height i} {curve i} {curve i}} black_clamp false name Grade1 xpos -179 ypos 196 addUserKnob {20 User} addUserKnob {7 height l Height} height 1 } set N921b81e0 [stack 0] push $N921b81e0 Expression { channel0 rgb expr0 sqrt((r*r)+(g*g)+(b*b)) name VectorLength selected true xpos -260 ypos 278 } Merge2 { inputs 2 operation divide name Merge4 selected true xpos -179 ypos 350 } Output { name Output1 xpos -179 ypos 494 } end_group Blur { channels rgb size {{parent.preblurVector i}} name Blur5 label "pre blur vector" xpos 440 ypos -296 } push $N92151130 ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 label "rg to forward" xpos 556 ypos -194 } VectorBlur { channels rgba uv forward scale {{parent.parent.ExtendEdge.VectorBlur2.scale i}} offset 0 alpha -rgba.alpha maskChannelMask -rgba.alpha maskChannelInput -rgba.alpha name VectorBlur2 xpos 556 ypos -139 } CopyBBox { inputs 2 name CopyBBox1 xpos 556 ypos -92 } Output { name Output1 xpos 556 ypos -8 } end_group Keymix { inputs 3 channels rgb name Keymix18 xpos 2635 ypos 1255 } set N92214680 [stack 0] push $N92214680 push $N92214680 push $N92214680 Group { inputs 2 name ExtendEdge8 help "Very useful as a super unpremultiplier. The input matte is used as the source edge to extend the input colour channels beyond their existing alpha. It can also be used to do dilate/erode operations on an alpha. The effect can be extended by using multiple copies. The result should probably be re-comped with the original using an edge matte through a KeyMix so that only the desired areas are used. " xpos 2829 ypos 1255 addUserKnob {20 Controls} addUserKnob {7 preblurVector R 0 10} preblurVector {{parent.ExtendEdge.preblurVector}} addUserKnob {41 scale l "vector length" T VectorBlur2.scale} } Input { inputs 0 name Input xpos 556 ypos -426 } set N92223300 [stack 0] Dot { name Dot1 xpos 707 ypos -414 } Dot { name Dot2 xpos 707 ypos -121 } Input { inputs 0 name matte xpos 440 ypos -424 number 1 } Shuffle { red alpha green alpha blue alpha alpha black name Shuffle3 xpos 440 ypos -346 } Group { name Edge2Vec2 xpos 440 ypos -322 } Input { inputs 0 name Input1 xpos -172 ypos -315 } Clamp { channels rgb name Clamp1 xpos -172 ypos -250 } set N9224ad00 [stack 0] Position { translate {0 1} name Position2 xpos -63 ypos -106 } push $N9224ad00 Merge2 { inputs 2 operation minus name Merge2 xpos -103 ypos -28 } push $N9224ad00 Position { translate {1 0} name Position1 xpos -285 ypos -98 } push $N9224ad00 Merge2 { inputs 2 operation minus name Merge1 xpos -253 ypos -29 } Copy { inputs 2 from0 rgba.green to0 rgba.green name Copy3 xpos -179 ypos 27 } Grade { channels {rgba.red rgba.green -rgba.blue none} multiply {{Input1.height*Grade1.height i} {Input1.height*Grade1.height i} {curve i} {curve i}} black_clamp false name Grade1 xpos -179 ypos 196 addUserKnob {20 User} addUserKnob {7 height l Height} height 1 } set N9228a3e0 [stack 0] push $N9228a3e0 Expression { channel0 rgb expr0 sqrt((r*r)+(g*g)+(b*b)) name VectorLength selected true xpos -260 ypos 278 } Merge2 { inputs 2 operation divide name Merge4 selected true xpos -179 ypos 350 } Output { name Output1 xpos -179 ypos 494 } end_group Blur { channels rgb size {{parent.preblurVector i}} name Blur5 label "pre blur vector" xpos 440 ypos -296 } push $N92223300 ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 label "rg to forward" xpos 556 ypos -194 } VectorBlur { channels rgba uv forward scale {{parent.parent.ExtendEdge.VectorBlur2.scale i}} offset 0 alpha -rgba.alpha maskChannelMask -rgba.alpha maskChannelInput -rgba.alpha name VectorBlur2 xpos 556 ypos -139 } CopyBBox { inputs 2 name CopyBBox1 xpos 556 ypos -92 } Output { name Output1 xpos 556 ypos -8 } end_group Keymix { inputs 3 channels rgb name Keymix19 xpos 2829 ypos 1327 } set N922e2900 [stack 0] push $N922e2900 push $N922e2900 push $N922e2900 Group { inputs 2 name ExtendEdge9 help "Very useful as a super unpremultiplier. The input matte is used as the source edge to extend the input colour channels beyond their existing alpha. It can also be used to do dilate/erode operations on an alpha. The effect can be extended by using multiple copies. The result should probably be re-comped with the original using an edge matte through a KeyMix so that only the desired areas are used. " xpos 3023 ypos 1327 addUserKnob {20 Controls} addUserKnob {7 preblurVector R 0 10} preblurVector {{parent.ExtendEdge.preblurVector i}} addUserKnob {41 scale l "vector length" T VectorBlur2.scale} } Input { inputs 0 name Input xpos 556 ypos -426 } set N91eeca70 [stack 0] Dot { name Dot1 xpos 707 ypos -414 } Dot { name Dot2 xpos 707 ypos -121 } Input { inputs 0 name matte xpos 440 ypos -424 number 1 } Shuffle { red alpha green alpha blue alpha alpha black name Shuffle3 xpos 440 ypos -346 } Group { name Edge2Vec2 xpos 440 ypos -322 } Input { inputs 0 name Input1 xpos -172 ypos -315 } Clamp { channels rgb name Clamp1 xpos -172 ypos -250 } set N923183f0 [stack 0] Position { translate {0 1} name Position2 xpos -63 ypos -106 } push $N923183f0 Merge2 { inputs 2 operation minus name Merge2 xpos -103 ypos -28 } push $N923183f0 Position { translate {1 0} name Position1 xpos -285 ypos -98 } push $N923183f0 Merge2 { inputs 2 operation minus name Merge1 xpos -253 ypos -29 } Copy { inputs 2 from0 rgba.green to0 rgba.green name Copy3 xpos -179 ypos 27 } Grade { channels {rgba.red rgba.green -rgba.blue none} multiply {{Input1.height*Grade1.height i} {Input1.height*Grade1.height i} {curve i} {curve i}} black_clamp false name Grade1 xpos -179 ypos 196 addUserKnob {20 User} addUserKnob {7 height l Height} height 1 } set N92333f40 [stack 0] push $N92333f40 Expression { channel0 rgb expr0 sqrt((r*r)+(g*g)+(b*b)) name VectorLength selected true xpos -260 ypos 278 } Merge2 { inputs 2 operation divide name Merge4 selected true xpos -179 ypos 350 } Output { name Output1 xpos -179 ypos 494 } end_group Blur { channels rgb size {{parent.preblurVector i}} name Blur5 label "pre blur vector" xpos 440 ypos -296 } push $N91eeca70 ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 label "rg to forward" xpos 556 ypos -194 } VectorBlur { channels rgba uv forward scale {{parent.parent.ExtendEdge.VectorBlur2.scale i}} offset 0 alpha -rgba.alpha maskChannelMask -rgba.alpha maskChannelInput -rgba.alpha name VectorBlur2 xpos 556 ypos -139 } CopyBBox { inputs 2 name CopyBBox1 xpos 556 ypos -92 } Output { name Output1 xpos 556 ypos -8 } end_group Keymix { inputs 3 channels rgb name Keymix20 xpos 3023 ypos 1399 } push $N922e2900 push $N92214680 push $N9201e2a0 push $N91b5f6a0 push $N91ba8de0 push $N91f510c0 push $N91deb530 push $N91e0ff00 push $N9202a7d0 push $N918d19a0 Switch { inputs 11 which {{parent.slices}} name Switch3 xpos 2018 ypos 2366 } set N92405250 [stack 0] Shuffle { in forward blue black alpha black name Shuffle1 xpos 2116 ypos 2425 } set N9240bf40 [stack 0] Expression { expr0 (r+1)/2 expr1 (g+1)/2 name Expression1 xpos 2116 ypos 2476 } push $N9240bf40 push $N92405250 Switch { inputs 3 which {{parent.output}} name Switch1 xpos 2018 ypos 2501 } push $N918d19a0 Dot { name Dot22 xpos 898 ypos 2459 } Copy { inputs 2 from0 -rgba.alpha to0 -rgba.alpha channels rgb name Copy1 xpos 2018 ypos 2544 } Output { name Output1 xpos 2018 ypos 2644 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_VectorTracker.gizmo ================================================ Group { name VectorTracker help "A tracker that uses vector information rather than image data to generate tracking points." inputs 2 addUserKnob {20 VectorTracker} addUserKnob {3 count l INVISIBLE +INVISIBLE} addUserKnob {22 trackbackward l t "Track backwards range" T "current = nuke.frame()\nstart = int(nuke.root()\['first_frame'].value())\n\nretu = nuke.getFramesAndViews('track backward', str(current) + '-' + str(start))\n\nif retu is not None:\n try:\n Frange = \[int(i) for i in retu\[0].split('-')]\n\n J_VTT_Track(Frange\[0], Frange\[1])\n except ValueError:\n nuke.critical('Invalid frame range')" +STARTLINE} addUserKnob {22 trackbackwardone l "◄ ▎" t "Track backwards one frame" -STARTLINE T "currentFrame = nuke.frame()\n\nJ_VTT_Track(currentFrame, currentFrame - 1, False)"} addUserKnob {22 trackforwardone l ▎► t "Track forwards one frame" -STARTLINE T "currentFrame = nuke.frame()\n\nJ_VTT_Track(currentFrame, currentFrame +1, False)"} addUserKnob {22 trackforward l t "Track forwards range" -STARTLINE T "current = nuke.frame()\nend = int(nuke.root()\['last_frame'].value())\n\nretu = nuke.getFramesAndViews('track forward', str(current) + '-' + str(end))\n\nif retu is not None:\n try:\n Frange = \[int(i) for i in retu\[0].split('-')]\n\n J_VTT_Track(Frange\[0], Frange\[1])\n except ValueError:\n nuke.critical('Invalid frame range')"} addUserKnob {26 spacer l "" -STARTLINE T " "} addUserKnob {22 export l "export trackers" t "Export trackers to a Nuke Tracker node" -STARTLINE T J_VTT_Export()} addUserKnob {22 about l ? -STARTLINE T "nuke.message('VectorTracker v1.0 by Jorrit Schulte\\n\\nwww.JorritSchulte.com')"} addUserKnob {26 trackdivider l @Tracker} addUserKnob {22 add l "add tracker" t "Add tracker to interface" -STARTLINE T J_VTT_AddTracker()} addUserKnob {22 removeall l "remove all trackers" t "Remove all trackers from interface and reset tracker counter" -STARTLINE T "if nuke.ask('Are you sure you want to remove all trackers?'):\n node = nuke.thisNode()\n\n tk = \[i for i in node.allKnobs() if 'tracker' in i.name()]\n\n for knob in tk:\n node.removeKnob(knob)\n\n node\['count'].setValue(0)"} addUserKnob {22 enableall l "enable all" t "Enable all trackers for tracking" -STARTLINE T "node = nuke.thisNode()\n\ntk = \[i for i in node.allKnobs() if 'enable_' in i.name()]\n\nfor knob in tk:\n knob.setValue(True)"} addUserKnob {22 disableall l "disable all" t "Disable all trackers for tracking" -STARTLINE T "node = nuke.thisNode()\n\ntk = \[i for i in node.allKnobs() if 'enable_' in i.name()]\n\nfor knob in tk:\n knob.setValue(False)"} addUserKnob {26 blank l "" +STARTLINE T " "} } Input { inputs 0 name Image xpos -40 ypos -10 } Output { name Output1 xpos -40 ypos 16 } Input { inputs 0 name Vectors xpos 70 ypos -10 number 1 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Vectors_Direction.gizmo ================================================ Group { name Vectors_Direction help "Edit the direction of motion vectors" selected true addUserKnob {20 User} addUserKnob {41 in l Vector_Layer t "Pick the layer containing your motion vectors." T UV_Channel.in} addUserKnob {26 ""} addUserKnob {6 shuffleXY l swapXY t "enable if it seems like X and Y vectors are in the wrong channel.\nRed should contain X\nGreen should contain Y" +STARTLINE} addUserKnob {6 mirrorX t "negates X values" +STARTLINE} addUserKnob {6 mirrorY t "Negates Y values" -STARTLINE} addUserKnob {26 ""} addUserKnob {7 rotation t "Rotates the vectors direction" R 0 360} addUserKnob {26 ""} addUserKnob {26 copyright l "" t www.erwanleroy.com +STARTLINE T "v1.0 - Part of VectorTools by Erwan Leroy - 2016"} } Input { inputs 0 name Input1 xpos -303 ypos 91 } set N58fb7c00 [stack 0] Shuffle { name UV_Channel xpos -163 ypos 91 } Shuffle { red green green red name Shuffle1 xpos -163 ypos 128 disable {{1-parent.shuffleXY}} } Multiply { channels {rgba.red -rgba.green -rgba.blue none} value -1 name neg_red1 xpos -163 ypos 165 disable {{1-parent.mirrorX}} } Multiply { channels {-rgba.red rgba.green -rgba.blue none} value -1 name neg_green1 xpos -163 ypos 191 disable {{1-parent.mirrorY}} } Expression { temp_name0 angleRad temp_expr0 radians(parent.rotation) expr0 "r * cos(angleRad) - g * sin(angleRad)" expr1 "r * sin(angleRad) + g * cos(angleRad)" name Direction xpos -163 ypos 228 } push $N58fb7c00 ShuffleCopy { inputs 2 in2 none red red green green alpha black out {{{parent.UV_Channel.in}}} name ShuffleCopy1 xpos -303 ypos 228 } Output { name Output1 xpos -303 ypos 299 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Vectors_to_Degrees.gizmo ================================================ Group { name Vectors_to_Degrees help "Convert the vector's directions to a value in Degrees." selected true addUserKnob {20 User} addUserKnob {41 in l Vector_Layer t "Pick the layer containing your motion vectors." T UV_Channel.in} addUserKnob {26 ""} addUserKnob {6 flip_angle t "Flips the directions of the rotations" +STARTLINE} addUserKnob {7 rotate R 0 360} addUserKnob {26 ""} addUserKnob {6 anisotropic t "The default anisotropic shader in Maya requires a value of 180 degrees in order to rotate the anisotropy by 90 degrees. Checking this box will multiply the values by 2." +STARTLINE} addUserKnob {6 normalize_range t "Display the values in a range of 0-1 instead of 0-360" -STARTLINE} normalize_range true addUserKnob {26 ""} addUserKnob {26 copyright l "" t www.erwanleroy.com +STARTLINE T "v1.0 - Part of VectorTools by Erwan Leroy - 2016"} } Input { inputs 0 name Input1 xpos -303 ypos 91 } set N37ffcc00 [stack 0] Shuffle { name UV_Channel xpos -113 ypos 91 } Expression { channel0 rgb expr0 degrees(atan(r,g))+180 name Vector_to_Degrees xpos -113 ypos 145 } Expression { channel0 rgb expr0 360-r name Counter_clockwise xpos -113 ypos 187 disable {{1-parent.flip_angle}} } Add { value {{parent.rotate}} name Rotate xpos -113 ypos 224 } Multiply { value 2 name Multiply1 xpos -113 ypos 262 disable {{1-parent.anisotropic}} } Expression { channel0 rgb expr0 r%360 name Range360 xpos -113 ypos 317 } Expression { channel0 rgb expr0 r/360 name Range_0_1 xpos -113 ypos 365 disable {{1-parent.normalize_range}} } push $N37ffcc00 ShuffleCopy { inputs 2 in2 none red red green green blue blue alpha black out {{{parent.UV_Channel.in}}} name ShuffleCopy1 selected true xpos -303 ypos 365 } Output { name Output1 xpos -303 ypos 440 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_VoronoiGradient.gizmo ================================================ Group { name VoronoiGradient knobChanged "\n\nimport random\nfrom math import sqrt\n\n################\n##Script Start##\n################ \n \nn = nuke.thisNode() #the node\nk = nuke.thisKnob() #the knob\nkn = k.name() #the knob name\n\n#print (\"Knob name: \"+kn)\n\nif kn == \"type\":\n if n\['type'].getValue() == 0: #generate\n n\['sample_radius'].setVisible(False)\n n\['generate_format'].setVisible(True)\n n\['threshold'].setVisible(False)\n if n\['method'].getValue() == 1: #NNI\n n\['speedup'].setVisible(True)\n else:\n n\['speedup'].setVisible(False)\n elif n\['type'].getValue() == 1: #sample\n n\['generate_format'].setVisible(False)\n n\['sample_radius'].setVisible(True)\n n\['threshold'].setVisible(False)\n if n\['method'].getValue() == 1: #NNI\n n\['speedup'].setVisible(True)\n else:\n n\['speedup'].setVisible(False)\n else: #fill\n n\['generate_format'].setVisible(False)\n n\['sample_radius'].setVisible(False)\n n\['threshold'].setVisible(True)\n n\['speedup'].setVisible(True)\n \nif kn == \"method\":\n if n\['method'].getValue() == 0: #voronoi\n if n\['type'].getValue() == 2: #fill\n n\['speedup'].setVisible(True)\n else:\n n\['speedup'].setVisible(False)\n n\['aa'].setVisible(True)\n n\['smoothness'].setVisible(False)\n else: #NNI\n n\['aa'].setVisible(False)\n n\['speedup'].setVisible(True)\n n\['smoothness'].setVisible(True)\n\n#############\n##Add Point##\n#############\n\nif kn == \"add_point\":\n count = 0\n found = False\n i = 1\n\n #Find the earliest available knob\n while found == False:\n try:\n n\[\"pos_\"+str(i)]\n except NameError:\n found = True\n count = i\n else:\n i += 1\n\n divider = nuke.Text_Knob('divider_'+str(count), ' ')\n position = nuke.XY_Knob('pos_'+str(count), 'Position '+str(count))\n remove = nuke.PyScript_Knob('remove_'+str(count), 'Remove this Point', '')\n color = nuke.AColor_Knob('color_'+str(count), 'Color '+str(count))\n\n remove.setFlag(0x00002000) #no new line\n\n n.addKnob(divider)\n n.addKnob(position)\n n.addKnob(remove)\n n.addKnob(color)\n \n #Set a random color at point creation\n randomColor = \[random.uniform(0,1), random.uniform(0,1), random.uniform(0,1), 0]\n color.setValue(randomColor)\n \n################\n##Remove Point##\n################\n\nif kn\[0:7] == \"remove_\":\n id = str(kn\[7:])\n n.removeKnob(knobs\['divider_'+id])\n n.removeKnob(knobs\['pos_'+id])\n n.removeKnob(knobs\['remove_'+id])\n n.removeKnob(knobs\['color_'+id])\n \n####################\n##Update Pointlist##\n####################\n\nknobs = n.knobs() #knoblist\n\nif kn\[0:7] == \"remove_\" or kn == \"add_point\":\n points_orig = \[]\n #iterate through all knobs. If a position knob is found, append to pointlist\n for knob in knobs:\n if knob\[0:4] == \"pos_\":\n id = int(knob\[4:])\n points_orig.append(id)\n \n points_orig.sort()\n \n n\['count'].setValue(''+str(len(points_orig))+'')\n points = ','.join(str(i) for i in points_orig)\n n\['points'].setValue(points)\n" tile_color 0xffb300ff label "\[llength \[split \[value this.points] ,]] Points" selected true addUserKnob {20 User} addUserKnob {26 title l "" +STARTLINE T "Voronoi Gradient v2.7"} addUserKnob {26 description l "" +STARTLINE T "by Nikolai Wüstemann"} addUserKnob {26 spacer_00 l "" +STARTLINE T " "} addUserKnob {26 divider_general l "General"} addUserKnob {4 type l Type t "Generate: using select point colors\nSample: using select input colors\nFill: using all input colors" M {Generate Sample Fill}} addUserKnob {17 generate_format l Format} generate_format "1920 1080 0 0 1920 1080 1 HD_1080" addUserKnob {3 sample_radius l "Sample Radius" t "When Type is set to \"Sample\".\nBlurs the input image by this amount and samples the pixel at given position." +HIDDEN} sample_radius 3 addUserKnob {7 threshold l "Alpha Threshold" t "Alpha needs to be bigger than this to be considered a feature point" +HIDDEN} threshold 0.05 addUserKnob {14 overscan l Overscan t "This will extrapolate the gradient beyond the image bounds" R 0 100} addUserKnob {26 spacer_01 l "" +STARTLINE T " "} addUserKnob {26 divider_method l "Method"} addUserKnob {4 method l Output t "Voronoi Diagram: \nEvery pixel becomes the color of the feature point that is the closest\n\nNNI: \nSmooth and natural color interpolation between feature points" M {"Voronoi Diagram" "Natural Neighbor Interpolation" "" ""}} method "Natural Neighbor Interpolation" addUserKnob {7 smoothness l Smoothness t "0 = Voronoi Diagram\n1 = Perfect NNI\n>1 = Oversmoothing"} smoothness 1 addUserKnob {7 aa l Anti-Aliasing t "Anti-Aliasing Levels. The image ist scaled up by this amount, the calculation is done, and the image is scaled down to original size again." +HIDDEN R 1 4} aa 2 addUserKnob {7 speedup l "Speed Optimization" t "Reduces the image scale by the selected amount and scales up afterwards. For smooth gradients this is a great optimization that comes at hardly no cost." R 1 10} speedup 5 addUserKnob {41 colorspace l Colorspace t "Linear: Mathematical way\nsRGB: More natural falloff\nL*a*b*: Less grey areas\nHSV: Interpolate over spectrum" T Colorspace_Forth.colorspace_out} addUserKnob {26 spacer_02 l "" +STARTLINE T " "} addUserKnob {26 divider_points l "Points"} addUserKnob {22 add_point l "Add Point" +STARTLINE} addUserKnob {26 count l " Count:" -STARTLINE T 4} addUserKnob {1 points l INVISIBLE +INVISIBLE} points 1,2,3,4 addUserKnob {26 divider_1 l " "} addUserKnob {12 pos_1 l "Position 1"} pos_1 {1256 472} addUserKnob {22 remove_1 l "Remove this Point" -STARTLINE} addUserKnob {19 color_1 l "Color 1"} color_1 {1 0 0 0} addUserKnob {6 color_1_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 divider_2 l " "} addUserKnob {12 pos_2 l "Position 2"} pos_2 {492 836} addUserKnob {22 remove_2 l "Remove this Point" -STARTLINE} addUserKnob {19 color_2 l "Color 2"} color_2 {0 1 0 0} addUserKnob {6 color_2_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 divider_3 l " "} addUserKnob {12 pos_3 l "Position 3"} pos_3 {580 272} addUserKnob {22 remove_3 l "Remove this Point" -STARTLINE} addUserKnob {19 color_3 l "Color 3"} color_3 {0 0 1 0} addUserKnob {6 color_3_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 divider_4 l " "} addUserKnob {12 pos_4 l "Position 4"} pos_4 {1504 876} addUserKnob {22 remove_4 l "Remove this Point" -STARTLINE} addUserKnob {19 color_4 l "Color 4"} color_4 {1 1 0 0} addUserKnob {6 color_4_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff8e00ff label NNI note_font_size 42 xpos -2 ypos 998 bdwidth 161 bdheight 168 } Input { inputs 0 name Input1 xpos 25 ypos -488 } AdjBBox { numpixels {{overscan(0)} {overscan(1)}} name AdjBBox xpos 25 ypos -393 } set Cf546860 [stack 0] Dot { name Dot4 xpos 59 ypos -322 } set Nc445da0 [stack 0] Dot { name Dot8 xpos 345 ypos -322 } Dot { name Dot31 xpos 345 ypos 584 } set Nc3a5700 [stack 0] Dot { name Dot12 xpos 345 ypos 1654 } push $Nc445da0 Reformat { type scale scale {{1/speedup}} pbb true name Reformat_Downscale xpos 150 ypos -243 } set Cb6c53f0 [stack 0] Reformat { type scale scale 0.5 pbb true name Reformat_FillModeSpeedboost xpos 150 ypos -182 } Dot { name Dot18 label Fill note_font_color 0xff xpos 184 ypos -94 } push $Nc445da0 Blur { size {{"\[value this.parent.sample_radius]-1"}} name Blur_SampleRadius xpos 25 ypos -247 } Dot { name Dot2 label Sample xpos 59 ypos -100 } Constant { inputs 0 channels rgb format {{{this.parent.generate_format}}} name Constant_Base xpos -111 ypos -492 } clone $Cf546860 { xpos -111 ypos -393 selected false } Dot { name Dot19 label Generate xpos -77 ypos -99 } Switch { inputs 3 which {{type}} name Switch_Mode label "\[value this.parent.type]" xpos 25 ypos -22 } set Cb6bbff0 [stack 0] Reformat { type scale scale {{aa}} pbb true name Reformat_AAUpscale xpos 25 ypos 44 disable {{method==0?0:1}} } set Nb58c620 [stack 0] Dot { name Dot30 xpos 163 ypos 106 } set Nefa7dd0 [stack 0] Expression { expr3 a<0.9999?1:0 name Expression_MakeBinary1 xpos 78 ypos 157 } Dot { name Dot29 xpos 112 ypos 445 } push $Nefa7dd0 Expression { temp_name0 threshold temp_expr0 "\[value this.parent.threshold]" expr0 a\{\n Image src;\n Image points;\n Image dst;\n\n param:\n float smoothness;\n\n void process(int2 pos)\{\n int x,y,dx,dy;\n float4 rgba = 0;\n float dist = 99999;\n if(src(pos.x, pos.y, 3) == 0)\{\n for(int i = src.bounds.x1; i < src.bounds.x2; i+=1)\{\n for(int j = src.bounds.y1; j < src.bounds.y2; j+=1)\{\n if(points(i,j,3) != 0)\{\n if(distance(pos, float2(i,j)) <= dist)\{\n dist = distance(pos, float2(i,j));\n rgba.x = src(i,j,0);\n rgba.y = src(i,j,1);\n rgba.z = src(i,j,2);\n rgba.w = dist*smoothness;\n \}\n \}\n \}\n \}\n \}\n else\{\n rgba = src(pos.x, pos.y);\n \}\n dst() = rgba;\n \}\n\};" rebuild "" NNIKernel_smoothness {{smoothness}} rebuild_finalise "" name BlinkScript_Filler xpos 186 ypos 303 disable {{"type == 2 ? 0 : 1"}} } set Nf34bf90 [stack 0] ShuffleCopy { inputs 2 alpha alpha2 black alpha out2 mask name ShuffleCopy_SetMask xpos 186 ypos 442 } Dot { name Dot20 label Fill note_font_color 0xff xpos 220 ypos 645 } Crop { inputs 0 box {0 0 2 {"\[llength \[split \[value this.parent.points] ,]]"}} reformat true crop false name Crop_Points xpos -394 ypos -86 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set Na63fed0 [stack 0] Expression { expr0 0 expr1 0 expr2 0 expr3 x==0?0:1 name Expression_MaskRightColumn xpos -248 ypos -2 } Dot { name Dot27 xpos -214 ypos 101 } push $Na63fed0 Expression { expr0 "\[\nset points \[split \[value this.parent.points] ,]\nset string \"\"\nset y 0\nforeach pos \$points \{\n append string \"y==\" \$y \"?\" \[value this.parent.pos_\$pos.x] \":\"\n incr y\n\}\nappend string \"0\"\nreturn \$string\n]" expr1 "\[\nset points \[split \[value this.parent.points] ,]\nset string \"\"\nset y 0\nforeach pos \$points \{\n append string \"y==\" \$y \"?\" \[value this.parent.pos_\$pos.y] \":\"\n incr y\n\}\nappend string \"0\"\nreturn \$string\n]" expr2 0 name Expression_SetPositions xpos -394 ypos -4 } Expression { inputs 1+1 expr0 "\[\nset points \[split \[value this.parent.points] ,]\nset string \"\"\nset y 0\nforeach col \$points \{\n append string \"y==\" \$y \"?\" \[value this.parent.color_\$col.r] \":\"\n incr y\n\}\nappend string \"0\"\nreturn \$string\n]" expr1 "\[\nset points \[split \[value this.parent.points] ,]\nset string \"\"\nset y 0\nforeach col \$points \{\n append string \"y==\" \$y \"?\" \[value this.parent.color_\$col.g] \":\"\n incr y\n\}\nappend string \"0\"\nreturn \$string\n]" expr2 "\[\nset points \[split \[value this.parent.points] ,]\nset string \"\"\nset y 0\nforeach col \$points \{\n append string \"y==\" \$y \"?\" \[value this.parent.color_\$col.b] \":\"\n incr y\n\}\nappend string \"0\"\nreturn \$string\n]" name Expression_SetColors xpos -394 ypos 98 } PostageStamp { name PostageStamp_SamplePoints xpos -394 ypos 204 postage_stamp true } Dot { name Dot9 xpos -224 ypos 231 } push $Nb58c620 Dot { name Dot7 xpos -80 ypos 134 } BlinkScript { inputs 2 ProgramGroup 1 KernelDescription "1 \"VoronoiKernel\" iterate pixelWise d1e0d556f3d1495cfe74544b59bfecc564c77ac6819187c975df8c8c3cc4cc5a 3 \"src\" Read Random \"points\" Read Random \"dst\" Write Point 3 \"smoothness\" Float 1 AAAAAA== \"sample\" Bool 1 AA== \"scale\" Float 1 AAAAAA==" kernelSource "float distance(int2 q, float2 p)\{\n return sqrt(pow(q.x - p.x, 2) + pow(q.y - p.y, 2));\n\}\n\nkernel VoronoiKernel : public ImageComputationKernel\{\n Image src;\n Image points;\n Image dst;\n\t\n param:\n float smoothness;\n bool sample;\n float scale;\n\n void process(int2 pos)\{\n int shortest = 0;\n float dist_temp = 99999;\n float2 pnt;\n float4 color = 0;\n int x, y;\n\t\t\n for (int p = points.bounds.y1; p < points.bounds.y2; p+=1)\{\n pnt.x = points(0, p, 0)*scale;\n pnt.y = points(0, p, 1)*scale;\n if(distance(pos, pnt)\{\n Image src;\n Image mask;\n Image dst;\n\n void process(int2 pos)\{\n int x,y,dx,dy;\n float4 rgba = 0;\n int c = 0;\n bool found = true;\n float dist;\n if(mask(pos.x, pos.y, 3) > 0.9999)\{\n for(int i = src.bounds.x1; i < src.bounds.x2; i+=1)\{\n for(int j = src.bounds.y1; j < src.bounds.y2; j+=1)\{\n if(distance(pos, float2(i,j)) <= src(i, j, 3))\{\n rgba += src(i, j);\n c += 1;\n \}\n \}\n \}\n dst() = rgba/c;\n \}\n else\{\n dst() = src(pos.x, pos.y);\n \}\n \}\n\};" rebuild "" rebuild_finalise "" name BlinkScript_NaturalNeighborInterpolation xpos 38 ypos 1074 disable {{method!=1?1:0}} addUserKnob {20 about l About} addUserKnob {26 description l Description T "Natural Neighbor Interpolation\n\nThe algorithm scales quadratically with image scale, \nso we try to keep the input as small as possible and scale up the result instead.\n\nThe node is disabled, when the Voronoi Diagram is shown. \nThis prevents Nuke from executing the Natural Neighbor Interpolation \nalgorithm in the background and crashing.\n "} } PostageStamp { name PostageStamp_NNI xpos 38 ypos 1213 postage_stamp true } Colorspace { name Colorspace_Back xpos 38 ypos 1375 } set Nf52bd60 [stack 0] Reformat { type "to box" box_width {{this.parent.input.width}} box_height {{this.parent.input.height}} box_fixed true box_pixel_aspect {{this.parent.input.pixel_aspect}} resize distort filter notch pbb true name Reformat_OriginalSize xpos 115 ypos 1481 } set Cf5c5e70 [stack 0] set Nf5c5e70 [stack 0] Dot { name Dot28 xpos 220 ypos 1587 } Merge2 { inputs 2 name Merge_RestoreOriginal xpos 186 ypos 1651 } set Cb180650 [stack 0] Dot { name Dot6 label Fill note_font_color 0xff xpos 220 ypos 1725 } push $Nf5c5e70 Dot { name Dot14 xpos 72 ypos 1583 } Dot { name Dot10 label Sample xpos 72 ypos 1726 } push $Nf52bd60 Reformat { type "to box" box_width {{Constant_Base.width}} box_height {{Constant_Base.height}} box_fixed true scale {{speedup}} resize distort filter notch pbb true name Reformat_ConstantSize xpos -41 ypos 1481 } set Cf63e3a0 [stack 0] Dot { name Dot15 xpos -80 ypos 1595 } Dot { name Dot13 label Generate xpos -80 ypos 1730 } clone $Cb6bbff0 { inputs 3 xpos 38 ypos 1884 selected false } push $Nc3a5700 push $Nf34bf90 Dot { name Dot26 xpos 290 ypos 356 } Dot { name Dot11 xpos 704 ypos 356 } clone $Cf5c5e70 { xpos 670 ypos 522 selected false } clone $Cb180650 { inputs 2 xpos 670 ypos 581 selected false } Dot { name Dot21 label Fill note_font_color 0xff xpos 704 ypos 640 } push $Nf360f00 Dot { name Dot25 xpos 43 ypos 392 } Dot { name Dot24 xpos 429 ypos 392 } set Nf67b260 [stack 0] Dot { name Dot5 xpos 566 ypos 392 } clone $Cf5c5e70 { xpos 532 ypos 521 selected false } Dot { name Dot22 label Sample xpos 566 ypos 639 } push $Nf67b260 clone $Cf63e3a0 { xpos 395 ypos 519 selected false } Dot { name Dot23 label Generate xpos 429 ypos 645 } clone $Cb6bbff0 { inputs 3 xpos 532 ypos 755 selected false } Dot { name Dot16 xpos 566 ypos 1788 } Switch { inputs 2 which {{method}} name Switch_Method label "\[value this.parent.method]" xpos 38 ypos 2047 } Output { name Output1 xpos 38 ypos 2122 } StickyNote { inputs 0 name StickyNote4 label " Create an 2D array of colors and positions for all sample points \n This is stored as an image and fed to the core algorithms \n" xpos -824 ypos 103 } StickyNote { inputs 0 name StickyNote6 label " Stores the voronoi diagram and the distance to the next input point in each pixel. This will be used by the NNI \n" xpos -885 ypos -324 } StickyNote { inputs 0 name StickyNote12 label " Upscaling the interpolated result with the Notch filter \npreserves the smooth look and feel we want to achieve.\n" xpos -417 ypos 1475 } StickyNote { inputs 0 name StickyNote1 label "Generating the Natural Neighbor Interpolation, \n based on the Voronoi Diagram (rgb) and the Voronoi Distances (alpha) " xpos -473 ypos 1074 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_WaterLens.gizmo ================================================ Group { name WaterLens inputs 3 tile_color 0xffccff addUserKnob {20 tab_general l General} addUserKnob {12 center} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 1 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 1 addUserKnob {7 bend R -1 1} addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 0.2 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 2 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set N27c12c40 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $N27c12c40 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set N27c27b60 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set N27c2e6e0 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set N27c35120 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $N27c35120 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $N27c2e6e0 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set N27c729d0 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set N27c74e90 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $N27c74e90 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $N27c729d0 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set N278b2140 [stack 0] push $N278b2140 push $N27c27b60 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.2 0 -0.2} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_WaveletBlur.gizmo ================================================ Group { name WaveletBlur tile_color 0x1f00ffff selected true addUserKnob {20 User l General} addUserKnob {26 info_header l "" +STARTLINE T "Wavelet Blur \nby Mads Hagbarth Lund 2015 - www.hagbarth.net"} addUserKnob {41 useGPUIfAvailable l "Use GPU if available" T BlinkScript3.useGPUIfAvailable} addUserKnob {26 ""} addUserKnob {41 range l "Frequency Range" T Controller.range} addUserKnob {26 ""} addUserKnob {4 Algorithm M {"Edge Preserving" Gaussian}} addUserKnob {7 BlurSize l "Blur Size"} BlurSize 0.84 addUserKnob {7 EdgeThreshold l "Edge Threshold"} EdgeThreshold 0.08 } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xf3f3f3ff xpos 599 ypos 601 bdwidth 122 bdheight 147 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0xf3f3f3ff xpos 472 ypos 602 bdwidth 125 bdheight 388 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0xf3f3f3ff xpos 358 ypos 741 bdwidth 125 bdheight 388 } Input { inputs 0 name InputMask xpos 583 ypos 1317 number 1 } Input { inputs 0 name Input1 xpos 427 ypos 340 } Dot { name Dot3 xpos 461 ypos 438 } set N276573a0 [stack 0] Grade { gamma 5 black_clamp false name Grade7 xpos 427 ypos 517 } Dot { name Dot15 xpos 461 ypos 595 } set N2753f720 [stack 0] Dot { name Dot20 xpos 461 ypos 734 } set N27543a40 [stack 0] Dot { name Dot21 xpos 351 ypos 734 } push $N27543a40 Blur { size {{parent.Controller.range.A*100}} name Blur5 xpos 427 ypos 823 } set C2754c110 [stack 0] set N2754c110 [stack 0] Merge2 { inputs 2 operation minus name Merge9 xpos 317 ypos 829 } Dot { name Dot16 xpos 351 ypos 1125 } push $N2753f720 Dot { name Dot19 xpos 593 ypos 595 } set N23ab64e0 [stack 0] Dot { name Dot23 xpos 718 ypos 595 } Blur { size {{parent.BlurSize*50}} name Blur7 xpos 684 ypos 661 } Dot { name Dot27 xpos 718 ypos 743 } push $N23ab64e0 BlinkScript { recompileCount 3 ProgramGroup 1 KernelDescription "2 \"SaturationKernel\" iterate pixelWise 395e3a3b2514398fbe769be874921fe9db9395d0bc5cc92a7bd3c6ab150f5430 2 \"src\" Read Random \"dst\" Write Point 3 \"FilterSize\" Int 1 DwAAAA== \"PositionalSigma\" Float 1 AAAgQQ== \"ColorSigma\" Float 1 zczMPQ== 3 \"MSIZE\" 1 1 \"SIGMA\" 1 1 \"BSIGMA\" 1 1 1 \"coefficients\" Float 3 1 AAAAAAAAAAAAAAAAAAAAAA==" kernelSource "//Port of mrharicot's bilateral implamentation.\n\nkernel SaturationKernel : ImageComputationKernel\n\{\n Image src; // the input image\n Image dst; // the output image\n\n param:\n int MSIZE; // This parameter is made available to the user.\n float SIGMA;\n float BSIGMA;\n\n local:\n float3 coefficients; // This local variable is not exposed to the user.\n\n // In define(), parameters can be given labels and default values.\n void define() \{\n defineParam(MSIZE, \"FilterSize\", 15);\n defineParam(SIGMA, \"PositionalSigma\", 10.0f);\n defineParam(BSIGMA, \"ColorSigma\", 0.1f); \n \}\n\nfloat normpdf(float x, float sigma)\n\{\n return 0.39894f*exp(-0.5f*x*x/(sigma*sigma))/sigma;\n\}\n\nfloat normpdf3(float3 v, float sigma)\n\{\n return 0.39894f*exp(-0.5f*dot(v,v)/(sigma*sigma))/sigma;\n\}\n\n void process(int2 pos) \{\n float4 ss = src(pos.x,pos.y);\n float3 c = float3(ss.x,ss.y,ss.z);\n \n\n const int kSize = (MSIZE-1)/2;\n\n float kernelB\[100];\n float3 final_colour = float3(0.0);\n \n\n float Z = 0.0;\n for (int j = 0; j <= kSize; ++j)\n \{\n kernelB\[kSize+j] = kernelB\[kSize-j] = normpdf(float(j), SIGMA);\n \}\n \n \n float3 cc;\n float factor;\n float bZ = 1.0f/normpdf(0.0f, BSIGMA);\n for (int i=-kSize; i <= kSize; ++i)\n \{\n for (int j=-kSize; j <= kSize; ++j)\n \{\n ss = src(pos.x+i,pos.y+j);\n cc = float3(ss.x,ss.y,ss.z);\n factor = normpdf3(cc-c, BSIGMA)*bZ*kernelB\[kSize+j]*kernelB\[kSize+i];\n Z += factor;\n final_colour += factor*cc;\n\n \}\n \} \n final_colour = final_colour/Z;\n dst() = float4(final_colour.x,final_colour.y,final_colour.z, 1.0f);\n \}\n\};\n" rebuild "" SaturationKernel_FilterSize {{parent.BlurSize*50}} SaturationKernel_ColorSigma {{(parent.EdgeThreshold/2)+0.00000000001}} rebuild_finalise "" name BlinkScript3 selected true xpos 559 ypos 647 } Switch { inputs 2 which {{parent.Algorithm}} name Switch2 xpos 559 ypos 739 } clone $C2754c110 { xpos 559 ypos 823 selected false } Dot { name Dot24 xpos 593 ypos 909 } set N2706ae00 [stack 0] Dot { name Dot25 xpos 733 ypos 909 } push $N2706ae00 Blur { size {{(parent.Controller.range.B*100)-(parent.Controller.range.A*100)}} name Blur6 xpos 559 ypos 975 } set C27076150 [stack 0] Merge2 { inputs 2 operation minus name Merge14 xpos 699 ypos 981 } Dot { name Dot22 xpos 733 ypos 1053 } push $N2754c110 Dot { name Dot17 xpos 461 ypos 907 } clone $C27076150 { xpos 427 ypos 973 selected false } Merge2 { inputs 2 operation plus name Merge12 xpos 427 ypos 1049 } Merge2 { inputs 2 operation plus name Merge13 xpos 427 ypos 1121 } Grade { gamma {{1/parent.Grade7.gamma}} black_clamp false name Grade8 xpos 427 ypos 1193 } push $N276573a0 Dot { name Dot2 xpos 120 ypos 438 } Dot { name Dot1 xpos 120 ypos 1321 } Merge2 { inputs 2+1 operation copy name Merge1 xpos 427 ypos 1317 } Output { name Output1 xpos 427 ypos 1427 } Keyer { inputs 0 operation "luminance key" range {0.03182369132 0.8689237646 1 1} name Controller xpos 183 ypos 819 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_WhiteBalance.gizmo ================================================ Group { name WhiteBalance knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == 'reverse':\n if n.knob('reverse').value() == True:\n n.knob('reverseText').setValue('Reversed')\n else:\n n.knob('reverseText').setValue('')\n" tile_color 0x6493e9ff label "\[value reverseText]" note_font_color 0xffffffff selected true addUserKnob {20 WhiteBalance} addUserKnob {26 directions l Directions: T "Sample white area in image"} addUserKnob {41 channels T Grade8.channels} addUserKnob {41 whitepoint T Grade8.whitepoint} addUserKnob {6 reverse +STARTLINE} addUserKnob {1 reverseText l Reversed +INVISIBLE} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Grade8.maskChannelInput} addUserKnob {41 inject -STARTLINE T Grade8.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Grade8.invert_mask} addUserKnob {41 fringe -STARTLINE T Grade8.fringe} addUserKnob {41 unpremult l "(un)premult by" T Grade8.unpremult} addUserKnob {41 invert_unpremult l invert -STARTLINE T Grade8.invert_unpremult} addUserKnob {41 mix T Grade8.mix} } Input { inputs 0 name Inputmask xpos -205 ypos -441 number 1 } Input { inputs 0 name Input xpos -341 ypos -519 } Grade { inputs 1+1 whitepoint {1 1 1 0} white {{(whitepoint.r*0.2126)+(whitepoint.g*0.7152)+(whitepoint.b*0.0722)}} reverse {{parent.reverse}} black_clamp false invert_mask true name Grade8 label WB xpos -341 ypos -445 } Output { name Output1 xpos -341 ypos -366 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_WhiteSoftClip.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { name WhiteSoftClip tile_color 0xffffffff label "(Max: \[value maxValue])" note_font "Helvetica Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" note_font_color 0xff selected true addUserKnob {20 WhiteSoftClip} addUserKnob {7 maxValue l "Max Value" R 0 25} maxValue 16 addUserKnob {26 ""} addUserKnob {41 output2 l operation T BlacksMatch.output2} addUserKnob {41 soft l FallOff T BlacksMatch.soft} addUserKnob {41 aboveBase l "Color Mult" T BlacksMatch.aboveBase} addUserKnob {26 ""} addUserKnob {41 mode l "luminance math" T Saturation30.mode} addUserKnob {41 mixValue l "Restore Color" T Dissolve18.which} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask -STARTLINE T MergeMix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeMix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeMix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeMix.fringe} addUserKnob {41 mix T MergeMix.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description t "Soft clips white point so that it does not exceed the maximum value. \n\nAbility to control the soft falloff of whitepoint\n\nShift between preserving luminance and preserving hue\n\n" T WhiteSoftClip} addUserKnob {26 ver l Version: T v05} } Input { inputs 0 name Inputmask xpos -213 ypos 870 number 1 } Dot { name Dot57 xpos -179 ypos 983 } Input { inputs 0 name Input xpos -605 ypos -291 } Dot { name Dot7 note_font_size 41 xpos -571 ypos -172 } set Nc691f020 [stack 0] Dot { name Dot54 note_font_size 41 xpos -571 ypos -52 } set Nc6922e90 [stack 0] Dot { name Dot6 note_font_size 41 xpos -755 ypos -52 } Expression { expr0 r<0?r:0 expr1 g<0?g:0 expr2 b<0?b:0 expr3 min(r,g,b)<0?1:0 name Expression4 xpos -789 ypos 91 } Premult { name Premult1 xpos -789 ypos 115 } Dot { name Dot5 note_font_size 41 xpos -755 ypos 867 } push $Nc6922e90 Expression { expr0 r<0?0:r expr1 g<0?0:g expr2 b<0?0:b name Expression3 xpos -605 ypos 93 } Add { channels rgb value 0.0001 name Add1 xpos -605 ypos 117 } Dot { name Dot4 note_font_size 41 xpos -571 ypos 178 } set Nc683a0b0 [stack 0] Dot { name Dot52 note_font_size 41 xpos -149 ypos 178 } set Nc683df40 [stack 0] Dot { name Dot53 note_font_size 41 xpos 9 ypos 178 } push $Nc683df40 Saturation { saturation 0 mode Maximum name Saturation30 xpos -183 ypos 233 } set Nc6845ce0 [stack 0] Merge2 { inputs 2 operation divide output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge553 xpos -25 ypos 233 } push $Nc6845ce0 Expression { expr0 1/r expr1 1/g expr2 1/b name Expression8 xpos -183 ypos 360 } Group { name BlacksMatch2 knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"inputChange\":\n nsd = nuke.toNode(\"SwitchDefault\")\n n\[\"default_black\"].setEnabled(nsd\[\"which\"].getValue()==1)" tile_color 0xff label "Fall Off: \[value soft]\nColor Mult: \[value aboveBase]" note_font "Helvetica Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" xpos -183 ypos 424 addUserKnob {20 BlacksMatch} addUserKnob {6 default_black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {4 output1 l " output" M {Final "Preview Channel Key" "" "" "" "" "" "" ""}} addUserKnob {41 output2 l operation T Settings.operation} addUserKnob {41 unpremultiplication l "Unpremult before operation?" T Settings.unpremult} addUserKnob {26 ""} addUserKnob {18 default_black l "default black"} default_black {{1/maxValue}} addUserKnob {6 default_black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 default_black_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 default_black_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 default_black_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 default_black_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 default_black_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 default_black_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 default_black_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 default_black_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 default_black_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {41 soft l FallOff T Settings.soft} addUserKnob {41 aboveBase l "Black Color Mult" T Settings.aboveBase} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask -STARTLINE T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Plug an image /constant you wish to be your blackpoint into BlackColor input.\n\nControl the falloff of Toe of the blackpoint and\nchoose between a screen, plus, and hypot\noperation" T BlacksMatch} addUserKnob {1 ver l Version:} ver v08 addUserKnob {1 operation l INVISIBLE +INVISIBLE} operation "\[value output2])(\[value ver]" } StickyNote { inputs 0 name StickyNote2 tile_color 0xff label green note_font_size 41 note_font_color 0xffffffff xpos 177 ypos 466 } StickyNote { inputs 0 name StickyNote1 tile_color 0xff label red note_font_size 41 note_font_color 0xffffffff xpos 188 ypos 350 } StickyNote { inputs 0 name StickyNote3 tile_color 0xff label blue note_font_size 41 note_font_color 0xffffffff xpos 186 ypos 570 } StickyNote { inputs 0 name StickyNote4 tile_color 0xff label "min will be \nblack color" note_font_size 31 note_font_color 0xffffffff xpos 143 ypos 704 } Input { inputs 0 name Inputimg xpos 322 ypos -550 } Dot { name Dot17 xpos 356 ypos -418 } set Nc68896f0 [stack 0] AddChannels { channels rgba color 1 name AddChannels1 xpos 322 ypos -365 } Dot { name Dot5 note_font_size 41 xpos 356 ypos -288 } set Nc6894ab0 [stack 0] Grade { white 0 multiply 0 add {{parent.default_black} {parent.default_black} {parent.default_black} {parent.default_black}} black_clamp false name Grade1 label color xpos 905 ypos -295 } Input { inputs 0 name InputBlackColor xpos 1138 ypos -569 number 1 } Switch { inputs 2 which {{"!\[exists parent.input1]"}} name SwitchDefault xpos 1138 ypos -291 } Dot { name Dot26 label "Black Color" note_font_size 41 xpos 1172 ypos -212 } Dot { name Dot4 note_font_size 41 xpos 1172 ypos -124 } set Nc68b3c40 [stack 0] Multiply { channels rgb value {{parent.Settings.aboveBase}} name Multiply1 label "mult black color" xpos 1138 ypos -29 } Multiply { channels rgb value 4 name Multiply2 label "boosted for hypot" xpos 1138 ypos 46 disable {{"Settings.operation == 3 ? 0 : 1"}} } push $Nc6894ab0 Unpremult { name Unpremult1 xpos 322 ypos -17 disable {{!parent.Settings.unpremult i}} } Dot { name Dot18 xpos 356 ypos 145 } set Nc6946d00 [stack 0] MergeExpression { inputs 2 expr0 Br/Ar expr1 Bg/Ag expr2 Bb/Ab name MergeDivide xpos 1138 ypos 142 } Invert { channels rgb name Invert1 xpos 1138 ypos 209 } Gamma { channels rgb value {{((1/Settings.aboveBase)*Settings.soft)+(Settings.soft)}} name Gamma1 xpos 1138 ypos 264 } Dot { name Dot19 xpos 1172 ypos 364 } set Nc62ba4f0 [stack 0] Dot { name Dot20 xpos 1172 ypos 478 } set Nc68d24b0 [stack 0] Dot { name Dot21 xpos 1172 ypos 586 } set Nc68d6210 [stack 0] Dot { name Dot1 xpos 1172 ypos 1150 } Input { inputs 0 name Inputmask xpos 864 ypos 836 number 2 } Dot { name Dot29 xpos 898 ypos 1015 } push $Nc68b3c40 Dot { name Dot23 xpos 706 ypos -124 } Dot { name Dot6 note_font_size 41 xpos 706 ypos 293 } set Nc68e9be0 [stack 0] Dot { name Dot2 note_font_size 41 xpos 706 ypos 404 } set Nc68eda90 [stack 0] Dot { name Dot3 note_font_size 41 xpos 706 ypos 523 } set Nc68f1940 [stack 0] Dot { name Dot7 note_font_size 41 xpos 706 ypos 731 } push $Nc68d6210 push $Nc68f1940 push $Nc68d24b0 push $Nc68eda90 push $Nc62ba4f0 push $Nc68e9be0 push $Nc6946d00 Merge2 { inputs 2+1 operation {{parent.Settings.witch}} bbox B Achannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} output {rgba.red -rgba.green -rgba.blue -rgba.alpha} maskChannelMask rgba.red maskChannelInput -rgba.red name Merge3 label "\[value maskChannelMask]" xpos 322 ypos 357 } Merge2 { inputs 2+1 operation {{parent.Settings.witch x1 13}} bbox B Achannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} Bchannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} output {-rgba.red rgba.green -rgba.blue -rgba.alpha} maskChannelMask rgba.green maskChannelInput -rgba.red name Merge4 label "\[value maskChannelMask]" xpos 322 ypos 471 } Merge2 { inputs 2+1 operation {{parent.Settings.witch}} bbox B Achannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} Bchannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} output {-rgba.red -rgba.green rgba.blue -rgba.alpha} maskChannelMask rgba.blue maskChannelInput -rgba.red name Merge5 label "\[value maskChannelMask]" xpos 322 ypos 579 } Merge2 { inputs 2 operation max bbox B Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge1 xpos 322 ypos 728 } Premult { name Premult4 xpos 322 ypos 881 disable {{!parent.Settings.unpremult i}} } push $Nc68896f0 Dot { name Dot28 xpos -146 ypos -418 } Dot { name Dot30 xpos -146 ypos 1015 } Merge2 { inputs 2+1 operation copy bbox B Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} output {rgba.red rgba.green rgba.blue -rgba.alpha} name MergeKeymix label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 322 ypos 1012 } Switch { inputs 2 which {{output1 i x1067 0}} name Switch1 xpos 322 ypos 1147 } Output { name Output1 xpos 322 ypos 1395 } NoOp { inputs 0 name Settings note_font_size 51 xpos 43 ypos -286 addUserKnob {20 User} addUserKnob {4 operation M {plus screen hypot ""}} operation {{parent.parent.BlacksMatch.Settings.operation}} addUserKnob {7 witch} witch {{"Settings.operation == 0 ? 24 : Settings.operation == 1 ? 25 : 13"}} addUserKnob {7 soft} soft {{parent.parent.BlacksMatch.Settings.soft}} addUserKnob {7 aboveBase R 1 5} aboveBase {{parent.parent.BlacksMatch.Settings.aboveBase}} addUserKnob {6 unpremult l "Unpremult before operation?" +STARTLINE} } end_group Expression { expr0 1/r expr1 1/g expr2 1/b name Expression9 xpos -183 ypos 509 } Dot { name Dot50 note_font_size 41 xpos -149 ypos 576 } Merge2 { inputs 2 operation multiply output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge554 xpos -25 ypos 572 } Dot { name Dot55 note_font_size 41 xpos 9 ypos 669 } Dot { name Dot56 note_font_size 41 xpos -404 ypos 669 } set Nc62e4bc0 [stack 0] Dot { name Dot1 note_font_size 41 xpos -404 ypos 745 } push $Nc62e4bc0 push $Nc683a0b0 Expression { expr0 1/r expr1 1/g expr2 1/b name Expression10 xpos -605 ypos 353 } Group { name BlacksMatch knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"inputChange\":\n nsd = nuke.toNode(\"SwitchDefault\")\n n\[\"default_black\"].setEnabled(nsd\[\"which\"].getValue()==1)" tile_color 0xff label "Fall Off: \[value soft]\nColor Mult: \[value aboveBase]" note_font "Helvetica Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" xpos -605 ypos 427 addUserKnob {20 BlacksMatch} addUserKnob {6 default_black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {4 output1 l " output" M {Final "Preview Channel Key" "" "" "" "" "" "" ""}} addUserKnob {41 output2 l operation T Settings.operation} addUserKnob {41 unpremultiplication l "Unpremult before operation?" T Settings.unpremult} addUserKnob {26 ""} addUserKnob {18 default_black l "default black"} default_black {{1/maxValue}} addUserKnob {6 default_black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 default_black_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 default_black_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 default_black_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 default_black_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 default_black_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 default_black_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 default_black_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 default_black_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 default_black_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {41 soft l FallOff T Settings.soft} addUserKnob {41 aboveBase l "Black Color Mult" T Settings.aboveBase} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask -STARTLINE T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Plug an image /constant you wish to be your blackpoint into BlackColor input.\n\nControl the falloff of Toe of the blackpoint and\nchoose between a screen, plus, and hypot\noperation" T BlacksMatch} addUserKnob {1 ver l Version:} ver v08 addUserKnob {1 operation l INVISIBLE +INVISIBLE} operation "\[value output2])(\[value ver]" } StickyNote { inputs 0 name StickyNote2 tile_color 0xff label green note_font_size 41 note_font_color 0xffffffff xpos 177 ypos 466 } StickyNote { inputs 0 name StickyNote1 tile_color 0xff label red note_font_size 41 note_font_color 0xffffffff xpos 188 ypos 350 } StickyNote { inputs 0 name StickyNote3 tile_color 0xff label blue note_font_size 41 note_font_color 0xffffffff xpos 186 ypos 570 } StickyNote { inputs 0 name StickyNote4 tile_color 0xff label "min will be \nblack color" note_font_size 31 note_font_color 0xffffffff xpos 143 ypos 704 } Input { inputs 0 name Inputimg xpos 322 ypos -550 } Dot { name Dot17 xpos 356 ypos -418 } set Nc6a731e0 [stack 0] AddChannels { channels rgba color 1 name AddChannels1 xpos 322 ypos -365 } Dot { name Dot5 note_font_size 41 xpos 356 ypos -288 } set Nc6a7e5a0 [stack 0] Grade { white 0 multiply 0 add {{parent.default_black} {parent.default_black} {parent.default_black} {parent.default_black}} black_clamp false name Grade1 label color xpos 905 ypos -295 } Input { inputs 0 name InputBlackColor xpos 1138 ypos -569 number 1 } Switch { inputs 2 which {{"!\[exists parent.input1]"}} name SwitchDefault xpos 1138 ypos -291 } Dot { name Dot26 label "Black Color" note_font_size 41 xpos 1172 ypos -212 } Dot { name Dot4 note_font_size 41 xpos 1172 ypos -124 } set Nc69611b0 [stack 0] Multiply { channels rgb value {{parent.Settings.aboveBase}} name Multiply1 label "mult black color" xpos 1138 ypos -29 } Multiply { channels rgb value 4 name Multiply2 label "boosted for hypot" xpos 1138 ypos 46 disable {{"Settings.operation == 3 ? 0 : 1"}} } push $Nc6a7e5a0 Unpremult { name Unpremult1 xpos 322 ypos -17 disable {{!parent.Settings.unpremult i}} } Dot { name Dot18 xpos 356 ypos 145 } set Nc697fc30 [stack 0] MergeExpression { inputs 2 expr0 Br/Ar expr1 Bg/Ag expr2 Bb/Ab name MergeDivide xpos 1138 ypos 142 } Invert { channels rgb name Invert1 xpos 1138 ypos 209 } Gamma { channels rgb value {{((1/Settings.aboveBase)*Settings.soft)+(Settings.soft)}} name Gamma1 xpos 1138 ypos 264 } Dot { name Dot19 xpos 1172 ypos 364 } set Nc6aae990 [stack 0] Dot { name Dot20 xpos 1172 ypos 478 } set Nc6ab2830 [stack 0] Dot { name Dot21 xpos 1172 ypos 586 } set Nc6ab66e0 [stack 0] Dot { name Dot1 xpos 1172 ypos 1150 } Input { inputs 0 name Inputmask xpos 864 ypos 836 number 2 } Dot { name Dot29 xpos 898 ypos 1015 } push $Nc69611b0 Dot { name Dot23 xpos 706 ypos -124 } Dot { name Dot6 note_font_size 41 xpos 706 ypos 293 } set Nc6aca180 [stack 0] Dot { name Dot2 note_font_size 41 xpos 706 ypos 404 } set Nc6ace030 [stack 0] Dot { name Dot3 note_font_size 41 xpos 706 ypos 523 } set Nc6ad1ee0 [stack 0] Dot { name Dot7 note_font_size 41 xpos 706 ypos 731 } push $Nc6ab66e0 push $Nc6ad1ee0 push $Nc6ab2830 push $Nc6ace030 push $Nc6aae990 push $Nc6aca180 push $Nc697fc30 Merge2 { inputs 2+1 operation {{parent.Settings.witch}} bbox B Achannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} output {rgba.red -rgba.green -rgba.blue -rgba.alpha} maskChannelMask rgba.red maskChannelInput -rgba.red name Merge3 label "\[value maskChannelMask]" xpos 322 ypos 357 } Merge2 { inputs 2+1 operation {{parent.Settings.witch x1 13}} bbox B Achannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} Bchannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} output {-rgba.red rgba.green -rgba.blue -rgba.alpha} maskChannelMask rgba.green maskChannelInput -rgba.red name Merge4 label "\[value maskChannelMask]" xpos 322 ypos 471 } Merge2 { inputs 2+1 operation {{parent.Settings.witch}} bbox B Achannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} Bchannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} output {-rgba.red -rgba.green rgba.blue -rgba.alpha} maskChannelMask rgba.blue maskChannelInput -rgba.red name Merge5 label "\[value maskChannelMask]" xpos 322 ypos 579 } Merge2 { inputs 2 operation max bbox B Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge1 xpos 322 ypos 728 } Premult { name Premult4 xpos 322 ypos 881 disable {{!parent.Settings.unpremult i}} } push $Nc6a731e0 Dot { name Dot28 xpos -146 ypos -418 } Dot { name Dot30 xpos -146 ypos 1015 } Merge2 { inputs 2+1 operation copy bbox B Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} output {rgba.red rgba.green rgba.blue -rgba.alpha} name MergeKeymix label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 322 ypos 1012 } Switch { inputs 2 which {{output1 i x1067 0}} name Switch1 xpos 322 ypos 1147 } Output { name Output1 xpos 322 ypos 1395 } NoOp { inputs 0 name Settings note_font_size 51 xpos 43 ypos -286 addUserKnob {20 User} addUserKnob {4 operation M {plus screen hypot ""}} addUserKnob {7 witch} witch {{"Settings.operation == 0 ? 24 : Settings.operation == 1 ? 25 : 13"}} addUserKnob {7 soft} soft 0.4 addUserKnob {7 aboveBase R 1 5} aboveBase 2 addUserKnob {6 unpremult l "Unpremult before operation?" +STARTLINE} } end_group Expression { expr0 1/r expr1 1/g expr2 1/b name Expression11 xpos -605 ypos 507 } Dissolve { inputs 2 channels rgb which 0.5 name Dissolve18 label "\[value which]" xpos -605 ypos 662 } Switch { inputs 2 which {{parent.Dissolve18.which}} name Switch2 label "\[value which]" xpos -605 ypos 738 } Add { channels rgb value -0.0001 name Add2 xpos -605 ypos 808 } Merge2 { inputs 2 operation plus output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge1 xpos -605 ypos 864 } push $Nc691f020 Dot { name Dot58 note_font_size 41 xpos -922 ypos -172 } Dot { name Dot60 note_font_size 41 xpos -922 ypos 983 } set Nc69d7ae0 [stack 0] Merge2 { inputs 2+1 operation copy Achannels none Bchannels none output none also_merge rgb name MergeMix xpos -605 ypos 976 } push $Nc69d7ae0 Dot { name Dot3 note_font_size 41 xpos -922 ypos 1030 } Switch { inputs 2 which {{"parent.MergeMix.mix == 0 ? 0 : 1"}} name Switch1 label "\[value which]" xpos -605 ypos 1023 } Output { name Output1 xpos -605 ypos 1316 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_X_Aton_Volumetrics.gizmo ================================================ Group { name NST_X_Aton_Volumetrics knobChanged "n = nuke.thisNode()\nif n\[\"use_3d\"].value()==1:\n n\[\"center\"].setEnabled(False)\nelse:\n n\[\"center\"].setEnabled(True)\nn\[\"iterations\"].setValue(int(n\[\"iterations\"].value()))\nif n\[\"mode\"].value()==\"Diffuse\":\n n\[\"diffuse\"].setEnabled(True)\nelse:\n n\[\"diffuse\"].setEnabled(False)\nn\[\"diffuse\"].setValue(max(n\[\"diffuse\"].value(),0))\nn\[\"iterations\"].setValue(max(n\[\"iterations\"].value(),1))" tile_color 0xcc804eff note_font_color 0xffffffff selected true addUserKnob {20 X_Aton} addUserKnob {41 "Local GPU: " T BlinkScript1.gpuName} addUserKnob {41 "Use GPU if Available" T BlinkScript1.useGPUIfAvailable} addUserKnob {26 ""} addUserKnob {12 center t "The point from which rays will be emitted."} center {960 540} addUserKnob {6 use_3d l "use 3d input" t "Use a 3D light and a 3D camera to calculate the center of the light. When enabled the center parameter will be disabled. Make sure both inputs (Light and Camera) are connected in order for this to work properly." -STARTLINE} addUserKnob {7 length t "This controls zoom of the final iteration. A value of 0 won't have any effect. A value of -1 will converge all rays in the centre point. All positive values will create rays projected outwards." R 0 10} length 2 addUserKnob {26 ""} addUserKnob {4 mode t "- Regular, old school God Ray algorithm. All samples get added together. Fast and simple.\n- Brighter, samples only contribute to the ray if they are brighter than the ray at that step. This creates unshadowed rays.\n- Darker, samples only contribute to the ray if they are darker than the say at that step. This generate only shadow rays.\n- Diffused, different model of ray generation where rays can defocus as they travel further. This is more expensive but often generates more natural results." M {Regular Darkest Brightest Diffuse ""}} addUserKnob {7 decay t "The rate by which rays loose intensity and become darker. At 0 rays intensity will remain constant. Values between 1 and 2 generate realistic results. Denser atmospheres create shorter rays (more decay)." R 0 10} decay 1 addUserKnob {7 diffuse t "This parameter is only enabled when Diffuse is selected as the mode.
Controls the rate of dispersion of the ray of light. Higher values create softer results.
Keep in mind in the real world this value is dependent on the shape of the light source. Wide light sources (like a campfire) generate very diffused rays, whereas concentrated lights (like a cellphone light) cast very sharp light rays.
The speed of the algorithm is independent of the value of diffusion." +DISABLED R 0 100} diffuse 50 addUserKnob {26 ""} addUserKnob {18 multiply t "Makes everything brighter or darker in a linear fashion." R 0.2 4} multiply 1 addUserKnob {6 multiply_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 gamma t "This works slightly different than just a regular gamma. This is both a pre-process and a post-process.\n\nFirst, the image gets applied the inverse of the gamma. After the rays have been generated, the value of gamma gets applied again.\n\nWith a little bit of practise this allows you to drive the colours of the rays as they decay." R 0.2 4} gamma 1 addUserKnob {6 gamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {7 iterations t "The number of steps the light ray will take. The more iterations, the softer the ray will be. It is a good practice to raise this value to a high number (100-500) and gradually decreasing it until artifacts start to appear. Sometimes artifacts can be fixed in a more optimized way by keeping iterations low and enabling bilinear interpolation.
The more iterations, the slower the algorithm." R 1 100} iterations 20 addUserKnob {6 bilinear_interpolation l "bilinear interpolation" t "By default each ray will sample the nearest pixel from the image. This often causes grid artifacts. Enabling this filtering should fix most of these issues. If it's not enough, you may need to increase the number of iterations. This is usually only needed when using Diffuse rays, altough the option is also available for the rest of modes." +STARTLINE} addUserKnob {6 normalize l "normalize luma" t "Many settings can affect the final brightness of the rays: their length, their decay, the number of iterations,etc.\n\nThis tries to make the controls more intuitive by compensating those brightness changes. You can disable this to have a more direct control of the tool." -STARTLINE} normalize true addUserKnob {26 ""} addUserKnob {20 GPU_Settings l "GPU Settings"} addUserKnob {20 about l About} addUserKnob {26 about_1 l "" t "A bunny:\n(\\(\\ \n( - -)\n((') (')" +STARTLINE T "
\nXavier Martín © 2017"} addUserKnob {26 ""} addUserKnob {26 website l "" +STARTLINE T "www.xaviermartinvfx.com"} addUserKnob {26 space4_1 l "" +STARTLINE T
} addUserKnob {22 version l

version
T "nuke.message('X_Aton Gizmo v1.1
Xavier Martín © 2017')" +STARTLINE} addUserKnob {22 help_documentation l
?
-STARTLINE T "nuke.message('You can find more documentation
on Nukepedia or my website.')"} } Input { inputs 0 name Input xpos -740 ypos -558 } Dot { name Dot3 xpos -706 ypos -506 } set N9a5b94a0 [stack 0] Remove { operation keep channels rgba name Remove1 xpos -740 ypos -460 } Gamma { channels rgb value {{1/parent.gamma} {1/parent.gamma} {1/parent.gamma} 1} name Gamma1 xpos -740 ypos -410 } set N9a5bd330 [stack 0] Dot { name Dot2 xpos -706 ypos -356 } set N9a5c6de0 [stack 0] Dot { name Dot1 xpos -706 ypos -306 } set N9a5ca9d0 [stack 0] push $N9a5c6de0 Blur { channels rgba size {{diffuse*sqrt(length)}} name Blur5 xpos -240 ypos -313 } CopyBBox { inputs 2 name CopyBBox2 xpos -240 ypos -258 } Reformat { type scale scale 0.125 pbb true name Reformat1 xpos -240 ypos -210 } set N9a711630 [stack 0] push $N9a5ca9d0 push $N9a5c6de0 Blur { channels rgba size {{parent.Blur5.size/2}} name Blur4 xpos -340 ypos -310 } CopyBBox { inputs 2 name CopyBBox3 xpos -340 ypos -258 } Reformat { type scale scale 0.25 pbb true name Reformat5 xpos -340 ypos -210 } set N9a72e0a0 [stack 0] push $N9a5ca9d0 push $N9a5c6de0 Blur { channels rgba size {{parent.Blur4.size/2}} name Blur3 xpos -440 ypos -310 } CopyBBox { inputs 2 name CopyBBox4 xpos -440 ypos -258 } Reformat { type scale scale 0.5 pbb true name Reformat4 xpos -440 ypos -210 } set N9a74aaf0 [stack 0] push $N9a5ca9d0 push $N9a5c6de0 Blur { channels rgba size {{parent.Blur3.size/2}} name Blur2 xpos -540 ypos -310 } CopyBBox { inputs 2 name CopyBBox5 xpos -540 ypos -258 } Reformat { type scale scale 0.6 pbb true name Reformat3 xpos -540 ypos -210 } set N9a767570 [stack 0] push $N9a5ca9d0 push $N9a5c6de0 Blur { channels rgb size {{parent.Blur2.size/2}} name Blur1 xpos -640 ypos -310 } CopyBBox { inputs 2 name CopyBBox1 xpos -640 ypos -258 } Reformat { type scale scale 0.8 pbb true name Reformat2 xpos -640 ypos -210 } set N9a784d80 [stack 0] push $N9a5ca9d0 BlinkScript { inputs 6 ProgramGroup 1 KernelDescription "2 \"X_Aton\" iterate componentWise 5140e5ada3150b5b17997b391784be72a8515242eff97b63a728e1d29924494f 7 \"src\" Read Random \"blr1\" Read Random \"blr2\" Read Random \"blr3\" Read Random \"blr4\" Read Random \"blr5\" Read Random \"dst\" Write Point 5 \"size\" Float 1 AAAAAA== \"center\" Float 2 AAAAAAAAAAA= \"iterations\" Int 1 AAAAAA== \"decay\" Float 1 AAAAAA== \"normalize_output\" Int 1 AAAAAA== 5 \"size\" 1 1 \"center\" 2 1 \"iterations\" 1 1 \"decay\" 1 1 \"normalize_output\" 1 1 1 \"normal\" Float 1 1 AAAAAA==" kernelSource "kernel X_Aton : ImageComputationKernel\n\{\n Image src; // the input image\n Image blr1; // the input image\n Image blr2; // the input image\n Image blr3; // the input image\n Image blr4; // the input image\n Image blr5; // the input image\n\n Image dst; // the output image\n\n param:\n float size;\n float2 center;\n int iterations;\n float decay;\n int normalize_output;\n\n local:\n float normal = 0.0f;\n\n void init() \{\n if(normalize_output == 1) \{\n normal =0.0;\n for (int i = 0; i < iterations; i++) \{\n normal += (pow(1.0f-float(i)/iterations,decay));\n \}\n \}\n else \{\n normal = iterations;\n \}\n \}\n\n void process(int2 pos) \{\n float total = 0.0;\n float scale = 0.0;\n int posx = 0;\n int posy = 0;\n int2 currentpos = int2(pos.x-center.x,pos.y-center.y);\n \n float step = 0.0;\n for (int i = 0; i < iterations; i++) \{\n step = float(i)/iterations;\n scale = 1+size*step*step;\n posx = ((currentpos.x)/scale+center.x);\n posy = ((currentpos.y)/scale+center.y);\n if (step < 0.1)\n total += bilinear(src,posx,posy)*pow((1-step),decay);\n else if (step < 0.2)\n total += bilinear(blr1,posx*0.8,posy*0.8)*pow((1-step),decay);\n else if (step < 0.4)\n total += bilinear(blr2,posx*0.6,posy*0.6)*pow((1-step),decay);\n else if (step < 0.6)\n total += bilinear(blr3,posx*0.5,posy*0.5)*pow((1-step),decay);\n else if (step < 0.8)\n total += bilinear(blr4,posx*0.25,posy*0.25)*pow((1-step),decay);\n else\n total += bilinear(blr5,posx*0.125,posy*0.125)*pow((1-step),decay);\n \}\n dst() = total/normal;\n \}\n\};" useGPUIfAvailable {{parent.BlinkScript1.useGPUIfAvailable}} rebuild "" X_Aton_size {{parent.length}} X_Aton_center {{parent.use_3d==1?Reconcile3D1.output:parent.center} {parent.use_3d==1?Reconcile3D1.output:parent.center}} X_Aton_iterations {{parent.iterations}} X_Aton_decay {{parent.decay}} X_Aton_normalize_output {{parent.normalize}} rebuild_finalise "" name BlinkScript2 xpos -640 ypos -116 } push $N9a711630 push $N9a72e0a0 push $N9a74aaf0 push $N9a767570 push $N9a784d80 push $N9a5ca9d0 BlinkScript { inputs 6 ProgramGroup 1 KernelDescription "2 \"X_Aton\" iterate componentWise e94f08f291fbc4837d066b1a66504220d926ab715f7f89378491e8b275e0f94c 7 \"src\" Read Random \"blr1\" Read Random \"blr2\" Read Random \"blr3\" Read Random \"blr4\" Read Random \"blr5\" Read Random \"dst\" Write Point 5 \"size\" Float 1 AAAAAA== \"center\" Float 2 AAAAAAAAAAA= \"iterations\" Int 1 AAAAAA== \"decay\" Float 1 AAAAAA== \"normalize_output\" Int 1 AAAAAA== 5 \"size\" 1 1 \"center\" 2 1 \"iterations\" 1 1 \"decay\" 1 1 \"normalize_output\" 1 1 1 \"normal\" Float 1 1 AAAAAA==" kernelSource "kernel X_Aton : ImageComputationKernel\n\{\n Image src; // the input image\n Image blr1; // the input image\n Image blr2; // the input image\n Image blr3; // the input image\n Image blr4; // the input image\n Image blr5; // the input image\n\n Image dst; // the output image\n\n param:\n float size;\n float2 center;\n int iterations;\n float decay;\n int normalize_output;\n\n local:\n float normal = 0.0f;\n\n void init() \{\n if(normalize_output == 1) \{\n normal =0.0;\n for (int i = 0; i < iterations; i++) \{\n normal += (pow(1.0f-float(i)/iterations,decay));\n \}\n \}\n else \{\n normal = iterations;\n \}\n \}\n\n void process(int2 pos) \{\n float total = 0.0;\n float scale = 0.0;\n int posx = 0;\n int posy = 0;\n int2 currentpos = int2(pos.x-center.x,pos.y-center.y);\n \n float step = 0.0;\n for (int i = 0; i < iterations; i++) \{\n step = float(i)/iterations;\n scale = 1+size*step*step;\n posx = ((currentpos.x)/scale+center.x);\n posy = ((currentpos.y)/scale+center.y);\n if (step < 0.1)\n total += src(posx,posy)*pow((1-step),decay);\n else if (step < 0.2)\n total += blr1((posx*0.8),(posy*0.8))*pow((1-step),decay);\n else if (step < 0.4)\n total += blr2((posx*0.6),(posy*0.6))*pow((1-step),decay);\n else if (step < 0.6)\n total += blr3((posx*0.5),(posy*0.5))*pow((1-step),decay);\n else if (step < 0.8)\n total += blr4((posx*0.25),(posy*0.25))*pow((1-step),decay);\n else\n total += blr5((posx*0.125),(posy*0.125))*pow((1-step),decay);\n \}\n dst() = total/normal;\n \}\n\};" rebuild "" X_Aton_size {{length}} X_Aton_center {{parent.use_3d==1?Reconcile3D1.output:parent.center} {parent.use_3d==1?Reconcile3D1.output:parent.center}} X_Aton_iterations {{iterations}} X_Aton_decay {{decay}} X_Aton_normalize_output {{normalize}} rebuild_finalise "" name BlinkScript1 onCreate "n = nuke.thisNode()\nn\[\"X_Aton_center\"].setFlag(0x00008000)" selected true xpos -740 ypos -116 } Switch { inputs 2 which {{parent.bilinear_interpolation}} name Switch2 xpos -740 ypos -60 } push $N9a5bd330 Dot { name Dot6 xpos -806 ypos -406 } Dot { name Dot8 xpos -806 ypos -156 } set N9b07a8b0 [stack 0] Dot { name Dot7 xpos -906 ypos -156 } BlinkScript { ProgramGroup 1 KernelDescription "2 \"X_Aton\" iterate componentWise 487f2268501f808ca51782f791e12713f7866399dc695919d23851a93187e87b 2 \"src\" Read Random \"dst\" Write Point 6 \"size\" Float 1 AAAAAA== \"center\" Float 2 AAAAAAAAAAA= \"iterations\" Int 1 AAAAAA== \"decay\" Float 1 AAAAAA== \"normalize_output\" Int 1 AAAAAA== \"mode\" Int 1 AAAAAA== 6 \"size\" 1 1 \"center\" 2 1 \"iterations\" 1 1 \"decay\" 1 1 \"normalize_output\" 1 1 \"mode\" 1 1 1 \"normal\" Float 1 1 AAAAAA==" kernelSource "kernel X_Aton : ImageComputationKernel\n\{\n Image src; // the input image\n\n\n Image dst; // the output image\n\n param:\n float size;\n float2 center;\n int iterations;\n float decay;\n int normalize_output;\n int mode;\n local:\n float normal = 0.0f;\n\n void init() \{\n if(mode==0) \{\n if(normalize_output == 1) \{\n normal =0.0;\n for (int i = 0; i < iterations; i++) \{\n normal += (pow(1.0f-float(i)/iterations,decay));\n \}\n \}\n else \{\n normal = iterations;\n \}\n \}\n \}\n\n void process(int2 pos) \{\n float total = 0.0f;\n float scale = 0.0f;\n float posx = 0.0f;\n float posy = 0.0f;\n float2 currentpos = float2(pos.x-center.x,pos.y-center.y);\n\n if(mode==0)\{\n for (int i = 0; i < iterations; i++) \{\n scale = 1+size*i*i/iterations/iterations;\n posx = ((currentpos.x)/scale+center.x);\n posy = ((currentpos.y)/scale+center.y);\n total += bilinear(src,posx,posy)*pow((1-float(i)/iterations),decay);\n \}\n dst() = total/normal;\n \}\n else if(mode==1)\{\n float sample;\n float norm = 1.0;\n total += src(pos.x,pos.y);\n for (int i = 1; i < iterations; i++) \{\n scale = 1+size*i*i/iterations/iterations;\n posx = ((currentpos.x)/scale+center.x);\n posy = ((currentpos.y)/scale+center.y);\n sample = bilinear(src,posx,posy);\n if(sampletotal/norm) \{\n total += sample*pow((1-float(i)/iterations),decay);\n \}\n else\n total += (total/norm)*pow((1-float(i)/iterations),decay);\n norm += 1.0*pow((1-float(i)/iterations),decay);\n \}\n if(normalize_output==0)\n dst() = total/iterations;\n else\n dst() = total/norm;\n \}\n \}\n\};\n" useGPUIfAvailable {{parent.BlinkScript1.useGPUIfAvailable}} rebuild "" X_Aton_size {{length}} X_Aton_center {{parent.use_3d==1?Reconcile3D1.output:parent.center} {parent.use_3d==1?Reconcile3D1.output:parent.center}} X_Aton_iterations {{iterations}} X_Aton_decay {{decay}} X_Aton_normalize_output {{normalize}} X_Aton_mode {{(parent.mode!=3)?parent.mode:parent.mode*(parent.diffuse!=0)}} rebuild_finalise "" name BlinkScript4 xpos -940 ypos -116 } push $N9b07a8b0 BlinkScript { ProgramGroup 1 KernelDescription "2 \"X_Aton\" iterate componentWise 8ab15b8bdd9694a8f64ba7270da748947d286719d2fadccab9e45b58ec1aa1dd 2 \"src\" Read Random \"dst\" Write Point 6 \"size\" Float 1 AAAAAA== \"center\" Float 2 AAAAAAAAAAA= \"iterations\" Int 1 AAAAAA== \"decay\" Float 1 AAAAAA== \"normalize_output\" Int 1 AAAAAA== \"mode\" Int 1 AAAAAA== 6 \"size\" 1 1 \"center\" 2 1 \"iterations\" 1 1 \"decay\" 1 1 \"normalize_output\" 1 1 \"mode\" 1 1 1 \"normal\" Float 1 1 AAAAAA==" kernelSource "kernel X_Aton : ImageComputationKernel\n\{\n Image src; // the input image\n\n\n Image dst; // the output image\n\n param:\n float size;\n float2 center;\n int iterations;\n float decay;\n int normalize_output;\n int mode;\n local:\n float normal = 0.0f;\n\n void init() \{\n if(mode==0) \{\n if(normalize_output == 1) \{\n normal =0.0;\n for (int i = 0; i < iterations; i++) \{\n normal += (pow(1.0f-float(i)/iterations,decay));\n \}\n \}\n else \{\n normal = iterations;\n \}\n \}\n \}\n\n void process(int2 pos) \{\n float total = 0.0;\n float scale = 0.0;\n int posx = 0;\n int posy = 0;\n int2 currentpos = int2(pos.x-center.x,pos.y-center.y);\n\n if(mode==0)\{\n for (int i = 0; i < iterations; i++) \{\n scale = 1+size*i*i/iterations/iterations;\n posx = ((currentpos.x)/scale+center.x);\n posy = ((currentpos.y)/scale+center.y);\n total += src(posx,posy)*pow((1-float(i)/iterations),decay);\n \}\n dst() = total/normal;\n \}\n else if(mode==1)\{\n float sample;\n float norm = 1.0;\n total += src(pos.x,pos.y);\n for (int i = 1; i < iterations; i++) \{\n scale = 1+size*i*i/iterations/iterations;\n posx = ((currentpos.x)/scale+center.x);\n posy = ((currentpos.y)/scale+center.y);\n sample = src(posx,posy);\n if(sampletotal/norm) \{\n total += sample*pow((1-float(i)/iterations),decay);\n \}\n else\n total += (total/norm)*pow((1-float(i)/iterations),decay);\n norm += pow((1.0f-float(i)/iterations),decay);\n \}\n if(normalize_output==0)\n dst() = total/iterations;\n else\n dst() = total/norm;\n \}\n \}\n\};\n" useGPUIfAvailable {{parent.BlinkScript1.useGPUIfAvailable}} rebuild "" X_Aton_size {{length}} X_Aton_center {{parent.use_3d==1?Reconcile3D1.output:parent.center} {parent.use_3d==1?Reconcile3D1.output:parent.center}} X_Aton_iterations {{iterations}} X_Aton_decay {{decay}} X_Aton_normalize_output {{normalize}} X_Aton_mode {{(parent.mode!=3)?parent.mode:parent.mode*(parent.diffuse!=0)}} rebuild_finalise "" name BlinkScript3 xpos -840 ypos -116 } Switch { inputs 2 which {{parent.bilinear_interpolation}} name Switch3 xpos -840 ypos -60 } Switch { inputs 2 which {{(mode==3)*(diffuse!=0)}} name Switch1 xpos -740 ypos -10 } Grade { multiply {{1/parent.multiply} {1/parent.multiply} {1/parent.multiply} 1} gamma {{1/parent.gamma} {1/parent.gamma} {1/parent.gamma} 1} reverse true name Grade1 xpos -740 ypos 40 } push $N9a5b94a0 Dot { name Dot5 xpos -1006 ypos -506 } Dot { name Dot4 xpos -1006 ypos 94 } Merge2 { inputs 2 operation copy name Merge1 xpos -740 ypos 88 } Output { name Output1 xpos -740 ypos 140 } Input { inputs 0 name InputLight xpos -540 ypos -560 number 1 } Input { inputs 0 name InputCamera xpos -440 ypos -560 number 2 } Dot { name Dot11 xpos -406 ypos -456 } push $N9a5b94a0 Dot { name Dot9 xpos -606 ypos -506 } Dot { name Dot10 xpos -606 ypos -456 } Reconcile3D { inputs 3 calc_output true name Reconcile3D1 xpos -540 ypos -466 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_X_Denoise.gizmo ================================================ Group { name X_Denoise help "Clean digital noise on video" knobChanged "import math\nn = nuke.thisNode()\nk = nuke.thisKnob()\ni = n\['iterations'].value()\nm = n\['x2'].value()\n\n\nif k.name() == \"iterations\":\n n\['active_frames'].setValue(1+math.ceil(i)*2*(1+m))\nelif k.name() == \"x2\":\n n\['active_frames'].setValue(1+math.ceil(i)*2*(1+m))\nif n\['fix_artifacts'].value() == 0:\n n\['motion_threshold'].setEnabled(False)\n n\['smooth_threshold'].setEnabled(False)\n n\['preview_mask'].setEnabled(False)\n n\['median'].setEnabled(False)\nelse:\n n\['motion_threshold'].setEnabled(True)\n n\['smooth_threshold'].setEnabled(True)\n n\['preview_mask'].setEnabled(True)\n n\['median'].setEnabled(True)\n\nif n\['static'].value() == 1:\n n\['vectorDetail'].setEnabled(False)\n n\['smoothness'].setEnabled(False)\n n\['flickerCompensation'].setEnabled(False)\nelse:\n n\['vectorDetail'].setEnabled(True)\n n\['smoothness'].setEnabled(True)\n n\['flickerCompensation'].setEnabled(True)" tile_color 0xcc804eff note_font_color 0xffffffff selected true addUserKnob {20 NoiseReduction l "Noise Reduction"} addUserKnob {41 useGPUIfAvailable l "Use GPU if available" T VectorGenerator2.useGPUIfAvailable} addUserKnob {26 ""} addUserKnob {7 luminance l "fix luminance" t "The brightness of the pixels will remain untouched at 0 and will be changed at 1. Values over 1 do not have any effect."} luminance 1 addUserKnob {7 chrominance l "fix chrominance" t "The color of the pixels will remain untouched at 0 and will be changed at 1. Values over 1 do not have any effect."} chrominance 1 addUserKnob {26 ""} addUserKnob {7 iterations t "\nThe more iterations, the more noise will be reduced. Increasing too much the iterations will slow down the render and could cause artifacts or blur in some areas.\n\nEach iteration loads the previous and next frames to use them in the calculation. The further a frame is from the current frame, the less effect it will have on the calculation.\n\nUsing intigers instead of decimals will lead to a much efficient process and therefore faster render times.\n\nYou can use the x2 multiplier at the right of this slider to drastically increase the number of frames that will be used in the calculation.\n\nCheck the Active Frames to see how many frames are being processed with the noise reduction algorithm.\n" R 1 5} iterations 2 addUserKnob {6 x2 t "\nBy default, each iteration will look to the previous and next frame. If the x2 multiplier is activated, each iteration will add the 2 previous frames and the 2 next frames, increasing the quality of the calculation at the cost of really slow renders.\n\nFurther frames have less consitency, so they will have less effect to the final output.\n" -STARTLINE} addUserKnob {3 active_frames l " " t "\nThis shows how many frames are being used in the calculation. \n\nBy default, each iteration will load the next two closest frames to the current frame. The further a loaded frame is from the current frame, the less effect it will have on the calculation. \n\nThe amount of iterations is doubled if the x2 multiplier is checked. Keep in mind that each new frame added to the calculation will increase the render time.\n\nTherefore, the total amount of frames that are being used is calculated with this formula:\n\n1 + 2 * iterations * multiplier\n\n" +DISABLED} active_frames 5 addUserKnob {26 active_frames_text l "" t "\nThis shows how many frames are being used in the calculation. \n\nBy default, each iteration will load the next two closest frames to the current frame. The further a loaded frame is from the current frame, the less effect it will have on the calculation. \n\nThe amount of iterations is doubled if the x2 multiplier is checked. Keep in mind that each new frame added to the calculation will increase the render time. \n\nTherefore, the total amount of frames that are being used is calculated with this formula: \n\n1 + 2 * iterations * multiplier \n" -STARTLINE T "active frames"} addUserKnob {26 active_frames_python l INVISIBLE t "w = nuke.toNode(\"X_Denoise\")\nw\['active_frames'].setEnabled(False)\n\ndef activeFrames():\n import math\n n = nuke.thisNode()\n k = nuke.thisKnob()\n i = n\['iterations'].value()\n m = n\['x2'].value()\n\n \n if k.name() == \"iterations\":\n n\['active_frames'].setValue(1+math.ceil(i)*2*(1+m))\n elif k.name() == \"x2\":\n n\['active_frames'].setValue(1+math.ceil(i)*2*(1+m))\nnuke.addKnobChanged(activeFrames, nodeClass=\"Group\")\n\nif n\['fix_artifacts'].value() == 1:\n n\['motion_threshold'].setEnabled(False)\n n\['smooth_threshold'].setEnabled(False)\n n\['preview_mask'].setEnabled(False)\n n\['median'].setEnabled(False)\nelse:\n n\['motion_threshold'].setEnabled(True)\n n\['smooth_threshold'].setEnabled(True)\n n\['preview_mask'].setEnabled(True)\n n\['median'].setEnabled(True)\n\nif n\['static'].value() == 1:\n n\['vectorDetail'].setEnabled(False)\n n\['smoothness'].setEnabled(False)\n n\['flickerCompensation'].setEnabled(False)\nelse:\n n\['vectorDetail'].setEnabled(True)\n n\['smoothness'].setEnabled(True)\n n\['flickerCompensation'].setEnabled(True)" -STARTLINE +INVISIBLE} addUserKnob {26 ""} addUserKnob {41 filter t "Impulse is the fastes but will create really poor results.\nCubic will work fine in most cases, but it will smooth the detail.\nLanczos will sharpen the image a little bit to contrarrest the softness of the image. It will also keep borders intact.\nSinc4 will drastically sharpen the image, and could cause the noise to reappear." T IDistort16.filter} addUserKnob {4 node_output l " output" t "Choose if you want to output the Result image without the noise or to visualize the Noise separately.\n\nYou can also output the Mask where artifacts are ocurring (but first you need to select the fix artifacts checkbox in the Qaulity tab." -STARTLINE M {Result Noise Mask}} addUserKnob {20 Quality} addUserKnob {6 fix_artifacts l "fix artifacts" t "\nThe noise reduction algorithm fails when an object is moving too fast. That will cause artifacts to appear.\n\nIf the Fix Artifacts checkbox is activated, a procedural mask will be created around moving abjects. The objects inside the mask will not be affected.\n\nYou can see how the mask looks like with the preview checkbox. Use the motion threshold and the smooth sliders to adjust the mask.\n\nBy default, a median filter is applied to the moving objects instead of the noise reduction algorithm, but you can disable that option.\n\nRemember that you can select the Mask as the Output of this node. You can use this mask to apply the Nuke Denoise to the fast moving areas and X_Distort to the rest of the image for a professional accurate noise reduction.\n" +STARTLINE} addUserKnob {7 motion_threshold l "motion threshold" t "This determines the maximum velocity which a pixel can have in order to be used in the noise reduction process. The higher the value, the less object will be excluded from the algorithm.\n\nUse the preview checkbox in order to see the mask." +DISABLED R 0 10} motion_threshold 2.9 addUserKnob {7 smooth_threshold l smooth t "This blurs the mask that determines which objects are used in the noise reduction algorithm.\n\nUse the preview checkbox in order to see the mask." +DISABLED R 0 20} smooth_threshold 10 addUserKnob {6 preview_mask l preview t "Use the preview checkbox in order to see the mask that determines which objects are used in the algorithm.\n\nWhite areas will be excluded from the effect, and black areas will be denoised." +DISABLED +STARTLINE} addUserKnob {6 median t "Use this so apply a subtle median filter to those areas that move too fast for the algorithm. This will also apply some chromatic noise reduction." -STARTLINE +DISABLED} median true addUserKnob {26 ""} addUserKnob {41 vectorDetail l "Vector Detail" +INVISIBLE T VectorGenerator2.vectorDetail} addUserKnob {41 smoothness l Smoothness +INVISIBLE T VectorGenerator2.smoothness} addUserKnob {41 flickerCompensation l "Flicker Compensation" T VectorGenerator2.flickerCompensation} addUserKnob {6 static l "static shot" t "Check this if the image is static and no object is moving at all. This will drastically increase the speed but any moving objects will be blurred out." -STARTLINE} addUserKnob {20 Tolerances n 2} addUserKnob {41 weightRed l "Weight Red" T VectorGenerator2.weightRed} addUserKnob {41 weightGreen l "Weight Green" T VectorGenerator2.weightGreen} addUserKnob {41 weightBlue l "Weight Blue" T VectorGenerator2.weightBlue} addUserKnob {20 "" n -1} addUserKnob {20 about l About} addUserKnob {26 about_1 l "" t "A bunny:\n(\\(\\ \n( - -)\n((') (')" +STARTLINE T "
\nXavier Martín © 2015"} addUserKnob {26 ""} addUserKnob {26 website l "" +STARTLINE T "www.xaviermartinvfx.com"} addUserKnob {26 space4_1 l "" +STARTLINE T
} addUserKnob {22 version l
version
T "nuke.message('X_Denoise Gizmo v1.0
Xavier Martín © 2015')" +STARTLINE} addUserKnob {22 help_documentation l
?
-STARTLINE T "nuke.message('You can find more documentation
on Nukepedia or my website.')"} } Input { inputs 0 name Source xpos -451 ypos 109 } set N9b31c740 [stack 0] Dot { name Dot53 xpos -673 ypos 112 } Dot { name Dot2 xpos -673 ypos 1214 } set N9b1ab830 [stack 0] Dot { name Dot54 xpos -673 ypos 1314 } set N9b1af1a0 [stack 0] Dot { name Dot55 xpos -775 ypos 1314 } set N9b1bb410 [stack 0] Dot { name Dot7 xpos -828 ypos 1314 } set N9b1a5e70 [stack 0] Dot { name Dot8 xpos -828 ypos 1587 } push $N9b31c740 Dot { name Dot16 xpos -417 ypos 133 } set N9b1c2070 [stack 0] VectorGenerator { vectorDetailLocal 1 smoothnessLocal 0.05 Advanced 1 Tolerances 1 name VectorGenerator2 xpos -265 ypos 124 cached true } set N9b329590 [stack 0] Dot { name Dot3 xpos -949 ypos 133 } Dot { name Dot4 xpos -949 ypos 779 } set N9a697120 [stack 0] push $N9a697120 Merge2 { inputs 2 operation average Achannels forward Bchannels backward output forward name Merge2 xpos -983 ypos 774 } Shuffle { in forward blue black alpha black name Shuffle1 xpos -983 ypos 810 } push 0 Merge2 { inputs 2 metainput A name Merge5 xpos -983 ypos 834 } Matrix { channels {rgba.red rgba.green -rgba.blue none} matrix { {-1 -1 -1} {-1 8 -1} {-1 -1 -1} } name Matrix1 xpos -983 ypos 857 } Expression { channel0 alpha expr0 (abs(r)+abs(g))*.5 channel1 none channel2 none channel3 none name Expression1 xpos -983 ypos 893 } Blur { channels alpha size 2 name Blur3 xpos -983 ypos 917 } FrameBlend { channels alpha numframes 3 startframe {{frame-(1+x2)}} endframe {{frame+(1+x2)}} userange true name FrameBlend1 xpos -983 ypos 953 } FrameBlend { channels alpha numframes 3 startframe {{frame-(1+x2)}} endframe {{frame+(1+x2)}} userange true name FrameBlend2 xpos -983 ypos 989 disable {{"iterations < 2"}} } FrameBlend { channels alpha numframes 3 startframe {{frame-(1+x2)}} endframe {{frame+(1+x2)}} userange true name FrameBlend3 xpos -983 ypos 1025 disable {{"iterations < 3"}} } FrameBlend { channels alpha numframes 3 startframe {{frame-(1+x2)}} endframe {{frame+(1+x2)}} userange true name FrameBlend4 xpos -983 ypos 1061 disable {{"iterations < 4"}} } FrameBlend { channels alpha numframes 3 startframe {{frame-(1+x2)}} endframe {{frame+(1+x2)}} userange true name FrameBlend5 xpos -983 ypos 1097 disable {{"iterations < 5"}} } Grade { channels alpha add {{-(motion_threshold**2)}} name Grade1 xpos -983 ypos 1133 } Blur { channels alpha size {{abs(smooth_threshold)+.5}} name Blur2 xpos -983 ypos 1169 } set N9b46ae90 [stack 0] Clamp { channels alpha name Clamp2 xpos -983 ypos 1364 } Shuffle { red alpha green alpha blue alpha name Shuffle2 xpos -983 ypos 1400 } set N9b53fac0 [stack 0] Dot { name Dot6 xpos -949 ypos 1516 } Dot { name Dot5 xpos -559 ypos 1516 } push $N9b46ae90 push $N9b1ab830 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos -983 ypos 1205 } Median { size 1 ignore_top_line false name Median1 xpos -983 ypos 1241 disable {{1-median}} } Premult { name Premult1 xpos -983 ypos 1265 } push $N9b1c2070 Expression { channel0 motion expr0 0 channel1 none channel2 none channel3 none name Expression2 xpos -451 ypos 160 } push $N9b329590 Switch { inputs 2 which {{static}} name Switch7 xpos -265 ypos 160 } Blur { channels motion size {{1+parent.VectorGenerator2.smoothness*5}} filter triangle name Blur1 xpos -265 ypos 184 } Dot { name Dot12 xpos -231 ypos 262 } set N9b4950a0 [stack 0] Dot { name Dot18 xpos -231 ypos 336 } set N9b498c70 [stack 0] Dot { name Dot20 xpos -231 ypos 474 } set N9b49c880 [stack 0] Dot { name Dot21 xpos -231 ypos 548 } set N9b4a0490 [stack 0] Dot { name Dot22 xpos -231 ypos 608 } Dot { name Dot19 xpos -231 ypos 686 } set N9b4a7cb0 [stack 0] Dot { name Dot28 xpos -231 ypos 760 } set N9b566d40 [stack 0] Dot { name Dot29 xpos -231 ypos 820 } Dot { name Dot35 xpos -231 ypos 898 } set N9b56eaf0 [stack 0] Dot { name Dot36 xpos -231 ypos 972 } set N9b5729c0 [stack 0] Dot { name Dot37 xpos -231 ypos 1110 } set N9b576890 [stack 0] Dot { name Dot43 xpos -231 ypos 1184 } set N9b57a760 [stack 0] push $N9b576890 TimeOffset { time_offset -1 time "" name TimeOffset39 xpos 182 ypos 1107 } push $N9b5729c0 push $N9b56eaf0 TimeOffset { time_offset -1 time "" name TimeOffset33 xpos 182 ypos 895 } push $N9b566d40 push $N9b4a7cb0 TimeOffset { time_offset -1 time "" name TimeOffset27 xpos 182 ypos 683 } push $N9b4a0490 push $N9b49c880 TimeOffset { time_offset -1 time "" name TimeOffset21 xpos 182 ypos 471 } push $N9b498c70 push $N9b4950a0 TimeOffset { time_offset 1 time "" name TimeOffset18 xpos -25 ypos 259 } push $N9b1c2070 Dot { name Dot11 xpos -417 ypos 205 } set N9b5a2ca0 [stack 0] Dot { name Dot15 xpos -95 ypos 205 } set N9b4aa8b0 [stack 0] TimeOffset { time_offset 2 time "" name TimeOffset17 xpos -129 ypos 223 } Copy { inputs 2 from0 backward.u to0 forward.u from1 backward.v to1 forward.v name Copy17 xpos -129 ypos 249 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort17 xpos -129 ypos 297 } Copy { inputs 2 from0 backward.u to0 forward.u from1 backward.v to1 forward.v name Copy18 xpos -129 ypos 321 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort18 xpos -129 ypos 369 } push $N9b4950a0 push $N9b5a2ca0 TimeOffset { time_offset -1 time "" name TimeOffset15 xpos -341 ypos 223 } Copy { inputs 2 from0 forward.u to0 forward.u from1 forward.v to1 forward.v name Copy15 xpos -341 ypos 247 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort15 xpos -341 ypos 295 } set N9b5d6e50 [stack 0] push 0 push $N9b498c70 push $N9b4950a0 TimeOffset { time_offset -1 time "" name TimeOffset19 xpos 182 ypos 259 } push $N9b4aa8b0 Dot { name Dot17 xpos 106 ypos 205 } TimeOffset { time_offset -2 time "" name TimeOffset20 xpos 72 ypos 223 } Copy { inputs 2 from0 forward.u to0 forward.u from1 forward.v to1 forward.v name Copy19 xpos 72 ypos 247 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort19 xpos 72 ypos 295 } Copy { inputs 2 from0 forward.u to0 forward.u from1 forward.v to1 forward.v name Copy20 xpos 72 ypos 321 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort20 xpos 72 ypos 369 } push $N9b4950a0 push $N9b5a2ca0 TimeOffset { time_offset 1 time "" name TimeOffset16 xpos -451 ypos 223 } Copy { inputs 2 from0 backward.u to0 forward.u from1 backward.v to1 forward.v name Copy16 xpos -451 ypos 247 } IDistort { channels rgb uv forward filter Lanczos4 name IDistort16 xpos -451 ypos 295 } set N9b735d90 [stack 0] Merge2 { inputs 4+1 operation average name Merge14 xpos -341 ypos 369 } push $N9b5d6e50 push $N9b735d90 Merge2 { inputs 2 operation average name Merge13 xpos -451 ypos 369 } Switch { inputs 2 which {{parent.x2}} name Switch1 xpos -451 ypos 393 } set N9b75a2d0 [stack 0] Dot { name Dot23 xpos -417 ypos 417 } set N9b760d70 [stack 0] Dot { name Dot24 xpos -95 ypos 417 } set N9b764ca0 [stack 0] Dot { name Dot25 xpos 106 ypos 417 } TimeOffset { time_offset -2 time "" name TimeOffset22 xpos 72 ypos 435 } Copy { inputs 2 from0 forward.u to0 forward.u from1 forward.v to1 forward.v name Copy21 xpos 72 ypos 459 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort21 xpos 72 ypos 507 } Copy { inputs 2 from0 forward.u to0 forward.u from1 forward.v to1 forward.v name Copy22 xpos 72 ypos 533 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort22 xpos 72 ypos 581 } push $N9b4a0490 push $N9b49c880 TimeOffset { time_offset 1 time "" name TimeOffset23 xpos -25 ypos 471 } push $N9b764ca0 TimeOffset { time_offset 2 time "" name TimeOffset24 xpos -129 ypos 435 } Copy { inputs 2 from0 backward.u to0 forward.u from1 backward.v to1 forward.v name Copy23 xpos -129 ypos 461 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort23 xpos -129 ypos 509 } Copy { inputs 2 from0 backward.u to0 forward.u from1 backward.v to1 forward.v name Copy24 xpos -129 ypos 533 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort24 xpos -129 ypos 581 } push $N9b49c880 push $N9b760d70 TimeOffset { time_offset -1 time "" name TimeOffset25 xpos -341 ypos 435 } Copy { inputs 2 from0 forward.u to0 forward.u from1 forward.v to1 forward.v name Copy25 xpos -341 ypos 459 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort25 xpos -341 ypos 507 } set N9b78c4c0 [stack 0] push 0 push $N9b760d70 Dot { name Dot26 xpos -520 ypos 417 } Dot { name Dot27 xpos -520 ypos 584 } set N9b79a1c0 [stack 0] push $N9b49c880 push $N9b760d70 TimeOffset { time_offset 1 time "" name TimeOffset26 xpos -451 ypos 435 } Copy { inputs 2 from0 backward.u to0 forward.u from1 backward.v to1 forward.v name Copy26 xpos -451 ypos 459 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort26 xpos -451 ypos 507 } set N9b4ef880 [stack 0] Merge2 { inputs 5+1 operation average name Merge15 xpos -341 ypos 581 } push $N9b79a1c0 push 0 push $N9b78c4c0 push $N9b4ef880 Merge2 { inputs 3+1 operation average name Merge16 xpos -451 ypos 581 } Switch { inputs 2 which {{parent.Switch1.which}} name Switch2 xpos -451 ypos 605 } set N9b7b1250 [stack 0] Dot { name Dot30 xpos -417 ypos 629 } set N9b7b7a60 [stack 0] Dot { name Dot31 xpos -95 ypos 629 } set N9b7bb9a0 [stack 0] Dot { name Dot32 xpos 106 ypos 629 } TimeOffset { time_offset -2 time "" name TimeOffset28 xpos 72 ypos 647 } Copy { inputs 2 from0 forward.u to0 forward.u from1 forward.v to1 forward.v name Copy27 xpos 72 ypos 671 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort27 xpos 72 ypos 719 } Copy { inputs 2 from0 forward.u to0 forward.u from1 forward.v to1 forward.v name Copy28 xpos 72 ypos 745 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort28 xpos 72 ypos 793 } push $N9b566d40 push $N9b4a7cb0 TimeOffset { time_offset 1 time "" name TimeOffset29 xpos -25 ypos 683 } push $N9b7bb9a0 TimeOffset { time_offset 2 time "" name TimeOffset30 xpos -129 ypos 647 } Copy { inputs 2 from0 backward.u to0 forward.u from1 backward.v to1 forward.v name Copy29 xpos -129 ypos 673 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort29 xpos -129 ypos 721 } Copy { inputs 2 from0 backward.u to0 forward.u from1 backward.v to1 forward.v name Copy30 xpos -129 ypos 745 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort30 xpos -129 ypos 793 } push $N9b4a7cb0 push $N9b7b7a60 TimeOffset { time_offset -1 time "" name TimeOffset31 xpos -341 ypos 647 } Copy { inputs 2 from0 forward.u to0 forward.u from1 forward.v to1 forward.v name Copy31 xpos -341 ypos 671 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort31 xpos -341 ypos 719 } set N9b64a9c0 [stack 0] push 0 push $N9b7b7a60 Dot { name Dot33 xpos -520 ypos 629 } Dot { name Dot34 xpos -520 ypos 796 } set N9d141e00 [stack 0] push $N9b4a7cb0 push $N9b7b7a60 TimeOffset { time_offset 1 time "" name TimeOffset32 xpos -451 ypos 647 } Copy { inputs 2 from0 backward.u to0 forward.u from1 backward.v to1 forward.v name Copy32 xpos -451 ypos 671 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort32 xpos -451 ypos 719 } set N9d158e90 [stack 0] Merge2 { inputs 5+1 operation average name Merge17 xpos -341 ypos 793 } push $N9d141e00 push 0 push $N9b64a9c0 push $N9d158e90 Merge2 { inputs 3+1 operation average name Merge18 xpos -451 ypos 793 } Switch { inputs 2 which {{parent.Switch1.which}} name Switch3 xpos -451 ypos 817 } set N9d010430 [stack 0] Dot { name Dot38 xpos -417 ypos 841 } set N9d016f10 [stack 0] Dot { name Dot39 xpos -95 ypos 841 } set N9d01ae50 [stack 0] Dot { name Dot40 xpos 106 ypos 841 } TimeOffset { time_offset -2 time "" name TimeOffset34 xpos 72 ypos 859 } Copy { inputs 2 from0 forward.u to0 forward.u from1 forward.v to1 forward.v name Copy33 xpos 72 ypos 883 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort33 xpos 72 ypos 931 } Copy { inputs 2 from0 forward.u to0 forward.u from1 forward.v to1 forward.v name Copy34 xpos 72 ypos 957 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort34 xpos 72 ypos 1005 } push $N9b5729c0 push $N9b56eaf0 TimeOffset { time_offset 1 time "" name TimeOffset35 xpos -25 ypos 895 } push $N9d01ae50 TimeOffset { time_offset 2 time "" name TimeOffset36 xpos -129 ypos 859 } Copy { inputs 2 from0 backward.u to0 forward.u from1 backward.v to1 forward.v name Copy35 xpos -129 ypos 885 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort35 xpos -129 ypos 933 } Copy { inputs 2 from0 backward.u to0 forward.u from1 backward.v to1 forward.v name Copy36 xpos -129 ypos 957 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort36 xpos -129 ypos 1005 } push $N9b56eaf0 push $N9d016f10 TimeOffset { time_offset -1 time "" name TimeOffset37 xpos -341 ypos 859 } Copy { inputs 2 from0 forward.u to0 forward.u from1 forward.v to1 forward.v name Copy37 xpos -341 ypos 883 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort37 xpos -341 ypos 931 } set N9d0a2b50 [stack 0] push 0 push $N9d016f10 Dot { name Dot41 xpos -520 ypos 841 } Dot { name Dot42 xpos -520 ypos 1008 } set N9d0b08b0 [stack 0] push $N9b56eaf0 push $N9d016f10 TimeOffset { time_offset 1 time "" name TimeOffset38 xpos -451 ypos 859 } Copy { inputs 2 from0 backward.u to0 forward.u from1 backward.v to1 forward.v name Copy38 xpos -451 ypos 883 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort38 xpos -451 ypos 931 } set N995862f0 [stack 0] Merge2 { inputs 5+1 operation average name Merge19 xpos -341 ypos 1005 } push $N9d0b08b0 push 0 push $N9d0a2b50 push $N995862f0 Merge2 { inputs 3+1 operation average name Merge20 xpos -451 ypos 1005 } Switch { inputs 2 which {{parent.Switch1.which}} name Switch4 xpos -451 ypos 1029 } set N9d0c2bf0 [stack 0] Dot { name Dot44 xpos -417 ypos 1053 } set N9d0c96e0 [stack 0] Dot { name Dot45 xpos -95 ypos 1053 } set N9d0cd620 [stack 0] Dot { name Dot46 xpos 106 ypos 1053 } TimeOffset { time_offset -2 time "" name TimeOffset40 xpos 72 ypos 1071 } Copy { inputs 2 from0 forward.u to0 forward.u from1 forward.v to1 forward.v name Copy39 xpos 72 ypos 1095 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort39 xpos 72 ypos 1143 } Copy { inputs 2 from0 forward.u to0 forward.u from1 forward.v to1 forward.v name Copy40 xpos 72 ypos 1169 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort40 xpos 72 ypos 1217 } push $N9b57a760 push $N9b576890 TimeOffset { time_offset 1 time "" name TimeOffset41 xpos -25 ypos 1107 } push $N9d0cd620 TimeOffset { time_offset 2 time "" name TimeOffset42 xpos -129 ypos 1071 } Copy { inputs 2 from0 backward.u to0 forward.u from1 backward.v to1 forward.v name Copy41 xpos -129 ypos 1097 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort41 xpos -129 ypos 1145 } Copy { inputs 2 from0 backward.u to0 forward.u from1 backward.v to1 forward.v name Copy42 xpos -129 ypos 1169 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort42 xpos -129 ypos 1217 } push $N9b576890 push $N9d0c96e0 TimeOffset { time_offset -1 time "" name TimeOffset43 xpos -341 ypos 1071 } Copy { inputs 2 from0 forward.u to0 forward.u from1 forward.v to1 forward.v name Copy43 xpos -341 ypos 1095 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort43 xpos -341 ypos 1143 } set N9d2592a0 [stack 0] push 0 push $N9d0c96e0 Dot { name Dot47 xpos -520 ypos 1053 } Dot { name Dot48 xpos -520 ypos 1220 } set N9d267000 [stack 0] push $N9b576890 push $N9d0c96e0 TimeOffset { time_offset 1 time "" name TimeOffset44 xpos -451 ypos 1071 } Copy { inputs 2 from0 backward.u to0 forward.u from1 backward.v to1 forward.v name Copy44 xpos -451 ypos 1095 } IDistort { channels rgb uv forward filter {{IDistort16.filter}} name IDistort44 xpos -451 ypos 1143 } set N9d27d2f0 [stack 0] Merge2 { inputs 5+1 operation average name Merge21 xpos -341 ypos 1217 } push $N9d267000 push 0 push $N9d2592a0 push $N9d27d2f0 Merge2 { inputs 3+1 operation average name Merge22 xpos -451 ypos 1217 } Switch { inputs 2 which {{parent.Switch1.which}} name Switch6 xpos -451 ypos 1241 } push $N9d0c2bf0 Dot { name Dot49 xpos -578 ypos 1032 } push $N9d010430 Dot { name Dot50 xpos -578 ypos 820 } push 0 push $N9b7b1250 Dot { name Dot51 xpos -578 ypos 608 } push $N9b75a2d0 Dot { name Dot52 xpos -578 ypos 396 } Dissolve { inputs 5+1 channels rgb which {{parent.iterations-1}} name Dissolve1 xpos -612 ypos 1241 } Merge2 { inputs 2 output rgb name Merge1 xpos -612 ypos 1265 disable {{1-fix_artifacts}} } push 0 Merge2 { inputs 2 bbox A metainput A Achannels rgb Bchannels rgb output rgb name Merge3 xpos -612 ypos 1289 } Clamp { channels rgb name Clamp1 xpos -612 ypos 1313 } Dot { name Dot56 xpos -578 ypos 1337 } set N9d186c80 [stack 0] Expression { channel0 rgb expr0 r+g+b channel1 none channel2 none channel3 none enable_mix_luminance false name Expression4 xpos -612 ypos 1355 } push $N9b1af1a0 Expression { channel0 rgb expr0 r+g+b channel1 none channel2 none channel3 none enable_mix_luminance false name Expression5 xpos -707 ypos 1332 } Dot { name Dot1 xpos -673 ypos 1382 } Dissolve { inputs 2 channels rgb which {{luminance}} name Dissolve2 xpos -612 ypos 1379 } Dot { name Dot59 xpos -578 ypos 1497 } push $N9b53fac0 push $N9d186c80 Dot { name Dot57 xpos -474 ypos 1337 } Expression { temp_name0 L temp_expr0 r+g+b expr0 "L == 0 ? 0.5 : r/L" expr1 "L == 0 ? 0.5 : g/L" expr2 "L == 0 ? 0.5 : b/L" channel3 none enable_mix_luminance false name Expression8 xpos -508 ypos 1355 } Blur { inputs 1+1 size 12 mix 0.5 name Blur4 xpos -508 ypos 1394 disable {{(1-fix_artifacts*median)}} } push $N9b1bb410 Expression { temp_name0 L temp_expr0 r+g+b expr0 "L == 0 ? 0.5 : r/L" expr1 "L == 0 ? 0.5 : g/L" expr2 "L == 0 ? 0.5 : b/L" channel3 none enable_mix_luminance false name Expression6 xpos -809 ypos 1332 } Dot { name Dot58 xpos -775 ypos 1473 } Dissolve { inputs 2 channels rgb which {{chrominance}} name Dissolve3 xpos -508 ypos 1470 } Merge2 { inputs 2 operation multiply Achannels rgb Bchannels rgb output rgb name Merge23 xpos -508 ypos 1494 } Dot { name Dot60 xpos -474 ypos 1542 } set N9d31fed0 [stack 0] push $N9b1a5e70 Dot { name Dot61 xpos -885 ypos 1314 } Merge2 { inputs 2 operation minus Achannels rgb Bchannels rgb output rgb name Merge24 xpos -919 ypos 1539 } Dot { name Dot62 xpos -885 ypos 1563 } push $N9d31fed0 Switch { inputs 3 which {{(node_output)*(1-preview_mask)+preview_mask*2}} name Switch5 xpos -508 ypos 1560 } Merge2 { inputs 2 operation copy Achannels rgb Bchannels rgb output rgb name Merge4 xpos -508 ypos 1584 disable {{"1-(disable == 2)"}} } Output { name Output1 xpos -508 ypos 1608 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_X_Distort.gizmo ================================================ Group { name X_Distort help "Create distortion with great control and flexibility." knobChanged "n = nuke.thisNode()\nif n.input(2):\n n\[\"mask\"].setEnabled(True)\nelse:\n n\[\"mask\"].setEnabled(False)\n \n \nif n\[\"distort_from\"].value() == \"Noise\":\n n\[\"noise_size\"].setVisible(True)\n n\[\"noise_z\"].setVisible(True)\nelse:\n n\[\"noise_size\"].setVisible(False)\n n\[\"noise_z\"].setVisible(False)\n\nif n\[\"enable_chroma\"].value() == 1:\n n\[\"aberration\"].setVisible(True)\n n\[\"blur_aberration\"].setVisible(True)\nelse:\n n\[\"aberration\"].setVisible(False)\n n\[\"blur_aberration\"].setVisible(False)\n \nn\[\"mix\"].setValue(min(max(0,n\[\"mix\"].value()),1))\nn\[\"blur_map\"].setValue(max(0,n\[\"blur_map\"].value()))\nn\[\"max_blur\"].setValue(max(0,n\[\"max_blur\"].value()))\n" tile_color 0xa57aaaff note_font_color 0xffffffff selected true addUserKnob {20 X_Distort} addUserKnob {6 aberration_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} aberration_panelDropped true addUserKnob {41 "Local GPU: " T BlinkScript.gpuName} addUserKnob {41 "Use GPU if Available" T BlinkScript.useGPUIfAvailable} addUserKnob {26 ""} addUserKnob {7 distort t "The amount of displacement going to be applied." R -100 100} distort -22.5 addUserKnob {7 blur t "The amount of smoothing going to be applied." R -100 100} blur 11 addUserKnob {3 max_blur l max t "Limit the vector blur to this number of samples.\nVector Blur can be expensive, this limits the time it takes to render, but sometimes artifacts can appear.\n\nSetting this parameter to 0 will disable the limit." -STARTLINE} max_blur 50 addUserKnob {7 direction t "The direction of the generated vector map:\n\n At 0: Pixels will be attracted to the brighter areas.\n At 0.5: Pixels will be attracted to the darker areas.\n At 0.25 or .75: Pixels will spin around the bright ans dark areas.\n\nThis pattern repeats, so a value of 1 will produce the same result as a value of 0 and a value of 0.5 will produce the same result as a value of 1.5."} direction 0.5 addUserKnob {4 filter t "impulse very fast but can sometimes show pixelation or moire patterns.\nbilinear slower but smoothes out most artifacts or unwanted patterns." M {impulse bilinear}} filter bilinear addUserKnob {26 ""} addUserKnob {4 distort_from l "distortion from" t "Choose where do you want to create the distortion map from:\n\n· Auto will look at the inputs of the node and decid which one to use.\n· Source will distort the image using the information on the original image.\n· Dist Map will distort the image using the information on the secondary input of this node.\n· Noise will generate an animated fractal that will be used to create the distortion map." M {Auto Source Map Noise "" ""}} distort_from Noise addUserKnob {6 use_all_channels l "use all channels" t "By default the distortion map will be generated from the average of the rgb channel. If this setting is enabled the channels will be paired up.\nThe red from the source will be distorted with the red from the map, the green with the green and so on. This allows you to have different distortion maps per each channel." -STARTLINE} addUserKnob {7 noise_size l size t "The relative frequency of the turbulence pattern. Big values will generate low frequency distortion." R 1 1000} noise_size 100 addUserKnob {7 noise_z l z t "Use this to animate the noise pattern.\nFor instance you could try with the expression \"frame/100\".\n\nRight click --> Add expression" -STARTLINE} noise_z 4.815162342 addUserKnob {7 blur_map l "blur map" t "Filter the map to make it smoother and get rid of the high frequency distortions. Increase this value to make a smoother distortion." R 0 100} blur_map 50 addUserKnob {6 fast_blur_map l fast t "Uses a multipass blur that, altough not as accurate as a bruteforce blur, gets rid of the artifacts at a reduced cost. It is recommended to keep this on." -STARTLINE} fast_blur_map true addUserKnob {26 ""} addUserKnob {6 enable_chroma l "chromatic aberration" t "Enable per-channel control on the distortion." +STARTLINE} addUserKnob {19 aberration l distort t "This is a multiplier on the distortion for every channel. Use this to simulate light frequencies being separated." +HIDDEN R -2 2} aberration {1.2 1 0.8 1} addUserKnob {6 aberration_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 aberration_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {19 blur_aberration l blur t "This is a multiplier on the blur for every channel. Use this to simulate light frequencies being separated." +HIDDEN} blur_aberration {1 1 1 1} addUserKnob {6 blur_aberration_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 blur_aberration_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {4 output_form l output t "Choose what type of data you would like to output.\n\nResult will output the distorted and filtered input.\nSTMap will output a UV map to be used in conjunction with the STMap node.\nIDistort will output a displacement map to be used in conjunction with the IDistort node." M {Result STMap IDistort ""}} addUserKnob {41 mask l " mask" t "This will mask the distortion map before the effect. Use this to limit the influence of the distortion to certain areas." -STARTLINE T Mask.maskChannelMask} addUserKnob {6 invert_mask l invert t "invert the effect of the mask" -STARTLINE} addUserKnob {41 fringe t "Limits the effect on the edges of the mask." -STARTLINE T Mask.fringe} addUserKnob {7 mix t "Blend between the original source and the applied effect."} mix 1 addUserKnob {20 Settings l "GPU Settings"} addUserKnob {20 about l About} addUserKnob {26 about_1 l "" t "A bunny:\n(\\(\\ \n( - -)\n((') (')" +STARTLINE T "
\nXavier Martín © 2017"} addUserKnob {26 ""} addUserKnob {26 website l "" +STARTLINE T "www.xaviermartinvfx.com"} addUserKnob {26 space4_1 l "" +STARTLINE T
} addUserKnob {22 version l
version
T "nuke.message('X_Distort Gizmo v4.1
Xavier Martín © 2017')" +STARTLINE} addUserKnob {22 help_documentation l
?
-STARTLINE T "nuke.message('You can find more documentation
on Nukepedia or my website.')"} } Input { inputs 0 name InputSrc xpos -140 ypos -460 } Dot { name Dot3 xpos -106 ypos -406 } set N9d407b20 [stack 0] Dot { name Dot2 xpos 94 ypos -406 } set N9d40ba30 [stack 0] Dot { name Dot1 xpos 94 ypos -356 } set N9d40f900 [stack 0] Noise { cliptype bbox replace true size {{parent.noise_size}} zoffset {{parent.noise_z}} gamma 1 center {1024 778} name Noise1 xpos 60 ypos -310 } Input { inputs 0 name InputDist_Map xpos 260 ypos -460 number 1 } AdjBBox { numpixels 1 name AdjBBox2 xpos 260 ypos -408 disable {{"!\[exists parent.input1]"}} } set N9d433870 [stack 0] push $N9d40f900 push $N9d433870 push $N9d40ba30 Switch { inputs 2 which {{"\[exists parent.input1]"}} name Auto xpos 160 ypos -360 } Switch { inputs 4 which {{distort_from}} name Switch1 xpos 260 ypos -310 } Remove { operation keep channels rgba name Remove1 xpos 260 ypos -258 } Saturation { saturation 0 mode Average name Saturation1 xpos 260 ypos -210 disable {{use_all_channels}} } Remove { operation keep channels {rgba.red -rgba.green -rgba.blue -rgba.alpha} name Remove2 xpos 260 ypos -160 disable {{use_all_channels}} } set N9d452fd0 [stack 0] Dot { name Dot6 xpos 194 ypos -156 } Dot { name Dot7 xpos 194 ypos 144 } Input { inputs 0 name Inputmask xpos 460 ypos -10 number 2 } Dot { name Dot9 xpos 494 ypos 94 } push $N9d452fd0 Blur { size {{blur_map}} quality {{parent.fast_blur_map?15:blur_map+1}} crop false name Blur1 xpos 260 ypos -116 disable {{size<1}} } Blur { size {{blur_map/15}} crop false name Blur2 xpos 260 ypos -66 disable {{(size<1)+(1-parent.fast_blur_map)}} } Blur { size {{blur_map/225}} crop false name Blur3 xpos 260 ypos -16 disable {{(size<1)+(1-parent.fast_blur_map)}} } Shuffle { green red blue red alpha red name Shuffle1 xpos 260 ypos 40 disable {{use_all_channels}} } Multiply { inputs 1+1 value 0 invert_mask {{1-parent.invert_mask}} name Mask xpos 260 ypos 84 disable {{parent.inputs!=3}} } CopyBBox { inputs 2 name CopyBBox1 xpos 260 ypos 140 } Dot { name Dot8 xpos 294 ypos 194 } set N9d4aa3b0 [stack 0] BlinkScript { ProgramGroup 1 KernelDescription "2 \"X_Distort\" iterate pixelWise c808228749d48a9f044958c8efc9a2b21aa668de9616076bf59cb1bcfcd28dcc 2 \"map\" Read Ranged2D \"dst\" Write Point 4 \"distortion\" Float 4 AAAAAAAAAAAAAAAAAAAAAA== \"direction\" Float 1 AAAAAA== \"stmap\" Int 1 AAAAAA== \"format\" Int 2 AAAAAAAAAAA= 4 \"distortion\" 4 1 \"direction\" 1 1 \"stmap\" 1 1 \"format\" 2 1 4 \"maprangeMin\" Int 2 1 AAAAAAAAAAA= \"maprangeMax\" Int 2 1 AAAAAAAAAAA= \"mapconstEdgeColor\" Float 4 1 AAAAAAAAAAAAAAAAAAAAAA== \"rotate\" Float 2 1 AAAAAAAAAAA=" kernelSource "kernel X_Distort : ImageComputationKernel\n\{\n Image map; // the distortion map image\n Image dst; // the output image\n\n param:\n float4 distortion;\n float direction;\n int stmap;\n int2 format;\n\n local:\n float2 rotate;\n\n void init() \{\n // Initialise trigonometric functions.\n rotate = float2(sin(direction*6.28318f),\n cos(direction*6.28318f));\n map.setRange(-1,-1,1,1);\n \}\n\n void process(int2 pos) \{\n\n // Sample gradient\n float2 distort;\n distort = float2(map(1,0,0)-map(-1,0,0),\n map(0,1,0)-map(0,-1,0));\n\n // Rotate vector\n distort = float2(distort.x*rotate.y+distort.y*rotate.x,\n -distort.x*rotate.x+distort.y*rotate.y);\n distort *= distortion.x;\n\n if(stmap==1)\n distort = (distort+float2(pos.x,pos.y))/float2(format.x,format.y);\n\n dst() = float4(distort.x,distort.y,0,0);\n \}\n\};\n" useGPUIfAvailable {{parent.BlinkScript.useGPUIfAvailable}} rebuild "" X_Distort_distortion {{parent.distort*(blur_map+1)*((aberration-1)*enable_chroma+1)*2} {parent.distort*(blur_map+1)*((aberration-1)*enable_chroma+1)*2} {parent.distort*(blur_map+1)*((aberration-1)*enable_chroma+1)*2} {parent.distort*(blur_map+1)*((aberration-1)*enable_chroma+1)*2}} X_Distort_direction {{parent.direction+.5}} X_Distort_stmap {{2-output_form}} X_Distort_format {{width} {height}} rebuild_finalise "" name BlinkScript1 xpos 260 ypos 234 } Dot { name Dot11 xpos 294 ypos 344 } push $N9d4aa3b0 push $N9d407b20 AdjBBox { numpixels 1 name AdjBBox1 xpos -140 ypos -360 disable {{"!\[exists parent.input0]"}} } Dot { name Dot10 xpos -106 ypos 144 } BlinkScript { inputs 2 ProgramGroup 1 KernelDescription "1 \"X_Distort\" iterate componentWise b9627c0324b2a89d1b941c7c64b5afb3310f15cfcf6b1f077dd0574498415168 3 \"src\" Read Random \"map\" Read Ranged2D \"dst\" Write Point 5 \"distortion\" Float 4 AAAAAAAAAAAAAAAAAAAAAA== \"vector_blur\" Float 4 AAAAAAAAAAAAAAAAAAAAAA== \"direction\" Float 1 AAAAAA== \"filter\" Int 1 AAAAAA== \"max_steps\" Int 1 AAAAAA==" kernelSource "kernel X_Distort : ImageComputationKernel\n\{\n Image src; // the input image\n Image map; // the distortion map image\n Image dst; // the output image\n\n param:\n float4 distortion;\n float4 vector_blur;\n float direction;\n int filter;\n int max_steps;\n\n local:\n float2 rotate;\n\n void init() \{\n // Initialise trigonometric functions.\n rotate = float2(sin(direction*6.28318f),\n cos(direction*6.28318f));\n map.setRange(-1,-1,1,1);\n \}\n\n void process(int3 pos) \{\n\n // Sample gradient\n float2 distort;\n distort = float2(map(1,0)-map(-1,0),\n map(0,1)-map(0,-1));\n\n // Rotate vector\n distort = float2(distort.x*rotate.y+distort.y*rotate.x,\n -distort.x*rotate.x+distort.y*rotate.y);\n\n // Sample source (no blur)\n if(fabs(vector_blur\[pos.z])<0.01)\{\n distort *= distortion\[pos.z];\n distort += float2(pos.x,pos.y);\n if(filter==0)\n dst() = src(int(distort.x),int(distort.y));\n else\n dst() = bilinear(src,distort.x,distort.y);\n \}\n\n else \{\n\n // If vector blur is enabled\n // Create vector blur final coordiantes\n float2 blur = distort;\n blur *= distortion\[pos.z]+vector_blur\[pos.z];\n blur += float2(pos.x,pos.y);\n distort *= distortion\[pos.z];\n distort += float2(pos.x,pos.y);\n\n // Calculate length of the blur\n int distance;\n distance = ceil(length(distort-blur));\n if(max_steps>0)\n distance = min(distance,max_steps);\n\n\n // Accumulate pixels through blur\n if(filter==0)\{\n float sum = src(int(distort.x),int(distort.y));\n float step = 0.0f;\n float2 dist_blur;\n for(int i = 0; i < distance; i++)\{\n step = float(i)/(distance);\n dist_blur = distort*step+blur*(1.0-step);\n sum += src(int(dist_blur.x),int(dist_blur.y));\n \}\n dst() = sum/(distance+1);\n \}\n\n else \{\n float sum = bilinear(src,distort.x,distort.y);\n float step = 0.0f;\n float2 dist_blur;\n for(int i = 0; i < distance; i++)\{\n step = float(i)/(distance);\n dist_blur = distort*step+blur*(1.0-step);\n sum += bilinear(src,dist_blur.x,dist_blur.y);\n \}\n dst() = sum/(distance+1);\n \}\n \}\n \}\n\};\n" rebuild "" X_Distort_distortion {{parent.distort*(blur_map+1)*((aberration-1)*enable_chroma+1)*2} {parent.distort*(blur_map+1)*((aberration-1)*enable_chroma+1)*2} {parent.distort*(blur_map+1)*((aberration-1)*enable_chroma+1)*2} {parent.distort*(blur_map+1)*((aberration-1)*enable_chroma+1)*2}} X_Distort_vector_blur {{parent.blur*(blur_map+1)*((blur_aberration-1)*enable_chroma+1)*2} {parent.blur*(blur_map+1)*((blur_aberration-1)*enable_chroma+1)*2} {parent.blur*(blur_map+1)*((blur_aberration-1)*enable_chroma+1)*2} {parent.blur*(blur_map+1)*((blur_aberration-1)*enable_chroma+1)*2}} X_Distort_direction {{parent.direction+.5}} X_Distort_filter {{filter}} X_Distort_max_steps {{max_blur}} rebuild_finalise "" name BlinkScript selected true xpos -140 ypos 184 } push $N9d407b20 Dot { name Dot5 xpos -206 ypos -406 } Dot { name Dot4 xpos -206 ypos 294 } Dissolve { inputs 2 channels rgba which {{parent.mix}} name Dissolve1 xpos -140 ypos 290 } Switch { inputs 2 which {{output_form}} name Switch3 xpos -140 ypos 340 } Output { name Output1 xpos -140 ypos 440 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_X_Sharpen.gizmo ================================================ Group { name X_Sharpen help "An accelerated weighted sharpen filter. This does a similar operation to nuke's sharpen solving three of its issues: negative values, dark edges and hue inversions." knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"radius\":\n k.setValue(max(k.value(),0))\n \nif k.name() == \"quality\":\n k.setValue(max(k.value(),1))\n \nif k.name() == \"bias\":\n k.setValue(max(k.value(),0))\n \nif k.name() == \"sharpen\":\n k.setValue(max(k.value(),0))" tile_color 0xcc804eff addUserKnob {20 Sharpen} addUserKnob {41 "Local GPU: " T BlinkScript1.gpuName} addUserKnob {41 "Use GPU if Available" T BlinkScript1.useGPUIfAvailable} addUserKnob {26 ""} addUserKnob {41 channels t "Channels to apply the smoothing to." T Merge1.Achannels} addUserKnob {7 sharpen t "Increase the local contrast of your image.\nA value of 0 will leave the image untouched.\nHigher values will result in crispier images." R 0 4} sharpen 1 addUserKnob {7 radius t "Radius to apply the sharpening to." R 0 100} radius 15 addUserKnob {7 bias t "In order to sharpen the image, a blurred copy of the image needs to be created.\n\nControlling the bias of the blur will avoid created banding or negative loves around edges.\n\nHigher values will apply the sharpen only to similar pixels, avoiding cross-object contamination and unwanted artefacts.\n\nA value of 0 is equivalent to Nuke's sharpen." R 0 100} bias 40 addUserKnob {3 quality l " quality " t "The maximum number of samples to use for the smoothing. When using very large radius the filter can become very slow. Limiting the number of samples will hugely increase performance at the cost of smoothing out some fine details." -STARTLINE} quality 15 addUserKnob {41 unpremult T Unpremult1.alpha} addUserKnob {6 luma_only l "luma only" t "If checked, only the luminance of the rgb will be sharpened, keeping the same hue and saturation as the input." +STARTLINE} luma_only true addUserKnob {20 about l About} addUserKnob {26 about_1 l "" t "A bunny:\n(\\(\\ \n( - -)\n((') (')" +STARTLINE T "
\nXavier Martín © 2017"} addUserKnob {26 ""} addUserKnob {26 website l "" +STARTLINE T "www.xaviermartinvfx.com"} addUserKnob {26 space4_1 l "" +STARTLINE T
} addUserKnob {22 version l
version
T "nuke.message('X_Soften Gizmo v1.0
Xavier Martín © 2017')" +STARTLINE} addUserKnob {22 help_documentation l
?
-STARTLINE T "nuke.message('You can find more documentation
on Nukepedia or my website.')"} } Input { inputs 0 name Source xpos 2960 ypos -660 } Unpremult { channels all alpha -rgba.alpha name Unpremult1 xpos 2960 ypos -616 } Dot { name Dot8 xpos 2994 ypos -556 } set N8979500 [stack 0] push $N8979500 Remove { name Remove1 xpos 3060 ypos -566 } Merge2 { inputs 2 operation copy Achannels rgb name Merge1 xpos 3060 ypos -510 } Dot { name Dot3 xpos 3094 ypos -456 } set N2fe7dc00 [stack 0] Dot { name Dot2 xpos 3094 ypos -156 } push $N2fe7dc00 Dot { name Dot4 xpos 3194 ypos -456 } Saturation { saturation 0 mode Average name Saturation1 xpos 3160 ypos -410 disable {{1-parent.luma_only}} } set Na1860e00 [stack 0] Dot { name Dot6 xpos 3394 ypos -406 } Dot { name Dot7 xpos 3394 ypos -206 } push $Na1860e00 Dot { name Dot1 xpos 3194 ypos -356 } set Na1861880 [stack 0] Blur { channels rgba size {{parent.radius/parent.quality}} filter box crop false name Blur1 xpos 3260 ypos -310 disable {{parent.radius/parent.quality<=1}} } push $Na1861880 BlinkScript { inputs 2 ProgramGroup 1 KernelDescription "1 \"FastWeightedBlur\" iterate componentWise 7db38cadf585143162376d5e48625a8d4ef028893bbb529123eef77a2122fd98 3 \"src\" Read Point \"downres\" Read Ranged2D \"dst\" Write Point 4 \"Radius\" Float 1 AAAAAA== \"bias\" Float 1 AAAAAA== \"Quality\" Int 1 AAAAAA== \"luma\" Int 1 AAAAAA==" kernelSource "kernel FastWeightedBlur : public ImageComputationKernel\n\{\n Image src;\n Image downres;\n Image dst;\n\n param:\n float Radius;\n float bias;\n int Quality;\n int luma;\n\n void init() \{\n downres.setRange(-Radius*Quality,-Radius*Quality,Radius*Quality,Radius*Quality);\n \}\n\n void process(int c) \{\n int channel = 0;\n if(luma==0)\n channel = c;\n if(c==channel) \{\n float sum = 0.0f;\n float sumWeight = 0.0f;\n float source = src();\n float weight = 0.0f;\n float sample = 0.0f;\n for(int j = -Quality; j <= Quality; j++) \{\n for(int i = -Quality; i <= Quality; i++) \{\n sample = downres(int(Radius*i),int(Radius*j));\n weight = 1.0/(pow(bias*(sample-source),2)+1);\n sum += sample*weight;\n sumWeight += weight;\n \}\n \}\n dst() = sum/sumWeight;\n \}\n \}\n\};" rebuild "" FastWeightedBlur_Radius {{max(parent.radius/parent.quality,1)}} FastWeightedBlur_bias {{parent.bias}} FastWeightedBlur_Quality {{min(parent.quality,radius)}} FastWeightedBlur_luma {{parent.luma_only}} rebuild_finalise "" name BlinkScript1 xpos 3160 ypos -266 } MergeExpression { inputs 2 expr0 Br==0?0:((Ar/Br)**sharpen)*Br expr1 Bg==0?0:((Ag/Bg)**sharpen)*Bg expr2 Bb==0?0:((Ab/Bb)**sharpen)*Bb expr3 Ba==0?0:((Aa/Ba)**sharpen)*Ba name MergeExpression2 xpos 3160 ypos -210 addUserKnob {20 User} addUserKnob {7 sharpen} sharpen {{parent.sharpen+1}} } MergeExpression { inputs 2 temp_name0 Al temp_expr0 (Ar+Ag+Ab)/3 expr0 Al==0?0:Ar*Br/Al expr1 Al==0?0:Ag*Br/Al expr2 Al==0?0:Ab*Br/Al expr3 Aa name MergeExpression1 xpos 3160 ypos -160 disable {{1-parent.luma_only}} } push $N8979500 Dot { name Dot5 xpos 2994 ypos -104 } Merge2 { inputs 2 operation copy Bchannels {{{parent.Merge1.Achannels}}} output {{{parent.Merge1.Achannels}}} name Merge2 xpos 3160 ypos -108 } Premult { channels all alpha {{{parent.Unpremult1.alpha}}} invert {{parent.Unpremult1.invert}} name Premult1 xpos 3160 ypos -66 } Output { name Output1 xpos 3160 ypos -8 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_X_Soften.gizmo ================================================ Group { name X_Soften help "An accelerated weighted blur filter. This does a similar operation to the bilinear filter with a very reduced computational cost." knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"radius\":\n k.setValue(max(k.value(),0))\n \nif k.name() == \"quality\":\n k.setValue(max(k.value(),1))\n \nif k.name() == \"bias\":\n k.setValue(max(k.value(),0))" tile_color 0xcc804eff addUserKnob {20 Soften} addUserKnob {41 "Local GPU: " T BlinkScript1.gpuName} addUserKnob {41 "Use GPU if Available" T BlinkScript1.useGPUIfAvailable} addUserKnob {26 ""} addUserKnob {41 channels t "Channels to apply the smoothing to." T Merge1.Achannels} addUserKnob {7 radius t "Radius to apply the smoothing to." R 0 100} radius 15 addUserKnob {7 bias t "This allows you to bias the blur in order to preserve edges.\n\nHigher values will preserve finer details. Lower values will smooth out more features.\n\nA value of 0 is equivalent to Nuke's box blur." R 0 100} bias 40 addUserKnob {3 quality l " quality " t "The maximum number of samples to use for the smoothing. When using very large radius the filter can become very slow. Limiting the number of samples will hugely increase performance at the cost of smoothing out some fine details." -STARTLINE} quality 15 addUserKnob {41 unpremult T Unpremult1.alpha} addUserKnob {6 luma_only l "luma only" t "If checked, only the luminance of the rgb will be smoothed, keeping the same hue and saturation as the input." +STARTLINE} luma_only true addUserKnob {20 about l About} addUserKnob {26 about_1 l "" t "A bunny:\n(\\(\\ \n( - -)\n((') (')" +STARTLINE T "
\nXavier Martín © 2017"} addUserKnob {26 ""} addUserKnob {26 website l "" +STARTLINE T "www.xaviermartinvfx.com"} addUserKnob {26 space4_1 l "" +STARTLINE T
} addUserKnob {22 version l
version
T "nuke.message('X_Soften Gizmo v1.0
Xavier Martín © 2017')" +STARTLINE} addUserKnob {22 help_documentation l
?
-STARTLINE T "nuke.message('You can find more documentation
on Nukepedia or my website.')"} } Input { inputs 0 name Source xpos 2960 ypos -610 } Unpremult { channels all alpha -rgba.alpha name Unpremult1 xpos 2960 ypos -566 } set Nb4cad180 [stack 0] push $Nb4cad180 Remove { name Remove1 xpos 3060 ypos -566 } Merge2 { inputs 2 operation copy Achannels rgb name Merge1 xpos 3060 ypos -510 } Dot { name Dot3 xpos 3094 ypos -456 } set Nb4cac700 [stack 0] Dot { name Dot2 xpos 3094 ypos -206 } push $Nb4cac700 Dot { name Dot4 xpos 3194 ypos -456 } Saturation { saturation 0 mode Average name Saturation1 xpos 3160 ypos -410 disable {{1-parent.luma_only}} } Dot { name Dot1 xpos 3194 ypos -356 } set Nb4cad880 [stack 0] Blur { channels rgba size {{parent.radius/parent.quality}} filter box crop false name Blur1 xpos 3260 ypos -310 disable {{parent.radius/parent.quality<=1}} } push $Nb4cad880 BlinkScript { inputs 2 ProgramGroup 1 KernelDescription "1 \"FastWeightedBlur\" iterate componentWise 7db38cadf585143162376d5e48625a8d4ef028893bbb529123eef77a2122fd98 3 \"src\" Read Point \"downres\" Read Ranged2D \"dst\" Write Point 4 \"Radius\" Float 1 AAAAAA== \"bias\" Float 1 AAAAAA== \"Quality\" Int 1 AAAAAA== \"luma\" Int 1 AAAAAA==" kernelSource "kernel FastWeightedBlur : public ImageComputationKernel\n\{\n Image src;\n Image downres;\n Image dst;\n\n param:\n float Radius;\n float bias;\n int Quality;\n int luma;\n\n void init() \{\n downres.setRange(-Radius*Quality,-Radius*Quality,Radius*Quality,Radius*Quality);\n \}\n\n void process(int c) \{\n int channel = 0;\n if(luma==0)\n channel = c;\n if(c==channel) \{\n float sum = 0.0f;\n float sumWeight = 0.0f;\n float source = src();\n float weight = 0.0f;\n float sample = 0.0f;\n for(int j = -Quality; j <= Quality; j++) \{\n for(int i = -Quality; i <= Quality; i++) \{\n sample = downres(int(Radius*i),int(Radius*j));\n weight = 1.0/(pow(bias*(sample-source),2)+1);\n sum += sample*weight;\n sumWeight += weight;\n \}\n \}\n dst() = sum/sumWeight;\n \}\n \}\n\};" rebuild "" FastWeightedBlur_Radius {{max(parent.radius/parent.quality,1)}} FastWeightedBlur_bias {{parent.bias}} FastWeightedBlur_Quality {{min(parent.quality,radius)}} FastWeightedBlur_luma {{parent.luma_only}} rebuild_finalise "" name BlinkScript1 xpos 3160 ypos -266 } MergeExpression { inputs 2 temp_name0 Al temp_expr0 (Ar+Ag+Ab)/3 expr0 Al==0?0:Ar*Br/Al expr1 Al==0?0:Ag*Br/Al expr2 Al==0?0:Ab*Br/Al expr3 Aa name MergeExpression1 selected true xpos 3160 ypos -210 disable {{1-parent.luma_only}} } push $Nb4cad180 Dot { name Dot5 xpos 2994 ypos -156 } Merge2 { inputs 2 operation copy Bchannels {{{parent.Merge1.Achannels}}} output {{{parent.Merge1.Achannels}}} name Merge2 xpos 3160 ypos -160 } Premult { channels all alpha {{{parent.Unpremult1.alpha}}} invert {{parent.Unpremult1.invert}} name Premult1 xpos 3160 ypos -116 } Output { name Output1 xpos 3160 ypos -60 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_X_Tesla.gizmo ================================================ Group { name X_Tesla help "With this gizmo you can create lightning and electricity effects" tile_color 0x1a3d99ff gl_color 0xbed7ffff note_font_color 0xffffffff selected true addUserKnob {20 Base} addUserKnob {12 point1} point1 {578 1162} addUserKnob {12 point2 t "Sets the final point of the lightning, where the bolt dies."} point2 {1428 496} addUserKnob {3 arcs l bolts t "A general multiplier that duplicates the entire structure multiple times, using the same settings for all the lightning bolts."} arcs 1 addUserKnob {26 ""} addUserKnob {7 amplitude t "The bigger the amplitude, the less straight and more wiggly the lightning will be." R 0 500} amplitude 250 addUserKnob {7 soft_start l "soft start" t "Sets the initial amplitude. Values over 0 will assure that the lightning starts in the point1. Bigger values make a smoother transition."} soft_start 0.255 addUserKnob {7 soft_end l "soft end" t "Sets the final amplitude. A value over 0 will assure that the lightning dies at point2. Bigger values make a smoother transition."} soft_end 0.04 addUserKnob {26 ""} addUserKnob {7 frequency t "How often the lightning changes direction. Higher values will do smaller shapes."} frequency 0.4 addUserKnob {3 complexity t "How many octaves are used in the fractal noise. Higher values will produce a more detailed lightning, but it is slower. Usually there's no difference over 8 octaves."} complexity 6 addUserKnob {7 secondary_amplitude l "secondary amp" t "Each octave has its amplitude scaled by this much. A value of .5 means that each iteration will have half of the influence of the previous octave." R 0 2} secondary_amplitude 0.4 addUserKnob {7 secondary_frequency l "secondary freq" t "Each octave has its frequency scaled by this much. A value of 2 means that each iteration will add detail twice as small."} secondary_frequency 0.42 addUserKnob {26 ""} addUserKnob {7 size l width t "The width of the entire lightning. Higher values will create thicker bolts. The units are pixels, so a width of 10 means that the maximum width that the lightning will have is 10." R 0 100} size 10 addUserKnob {7 end_size l "end width" t "The factor at which the width is scaled at the end of the lightning. A value of 1 means that the with is constant, and a value of 0 means that the lightning will get thinner the closer it gets to the second point."} addUserKnob {20 Branches} addUserKnob {3 branches t "The number of secondary branches born from each main bolt"} branches 5 addUserKnob {7 random_spacing l "random spacing" t "When set to 0, secondary branches will be born from equidistant points along the main bolt. A more random spacing will make the branches less evenly distributed."} random_spacing 0.2 addUserKnob {26 ""} addUserKnob {7 direction t "The tendency of the secondary branches to point in the same direction as the main bolt."} direction 0.2 addUserKnob {7 random_direction l randomize t "A random value for the direction. It will make the secondary branches point in different directions."} random_direction 0.5 addUserKnob {26 ""} addUserKnob {7 length t "The length of the secondary branches, relative to the length of the main bolt." R 0 2} length 0.935 addUserKnob {7 random_length l randomize t "Makes the secondary branches have different sizes between each other."} random_length 0.5 addUserKnob {26 ""} addUserKnob {7 branch_amplitude l amplitude t "How turbulent will the secondary branches be, relative to the main bolt."} branch_amplitude 2 addUserKnob {7 random_amplitude l randomize t "Makes the secondary branches have different amplitudes between each other."} random_amplitude 0.5 addUserKnob {26 ""} addUserKnob {7 branch_size l width t "The width of the stroke, relative to the main bolt." R 0 2} branch_size 1 addUserKnob {7 branch_end_size l "end size" t "The width at the end of the branches"} branch_end_size 0.1 addUserKnob {7 random_branch_size l randomize t "Different branches will have slightly different width values."} random_branch_size 0.2 addUserKnob {20 Animation} addUserKnob {7 speed t "The rate of change of the lightning shape. The bigger the value, the faster it will move."} speed 10 addUserKnob {7 flow t "The shape of the lightning can flow from the start to the end of the bolt, givig the feeling that the energy is moving forwards"} flow 30 addUserKnob {26 ""} addUserKnob {7 retract t "Use this to animate the lightning growing or shrinking."} addUserKnob {26 ""} addUserKnob {3 seed} seed 42 addUserKnob {22 make_random_seed l "Random Seed" -STARTLINE T "import random\n\nnuke.thisNode()\['seed'].setValue( random.randint(1,999) )"} addUserKnob {20 Render} addUserKnob {68 mode M {"Stroke Only (faster)" "Medium Quality (slow)" "Best Quality (very slow)" "" "" ""}} mode "Best Quality (very slow)" addUserKnob {18 primary_color l primary} primary_color {1 0.875814 0.732576} addUserKnob {6 primary_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 primary_color_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 secondary_color l secondary} secondary_color {0.372524 0.663819 1} addUserKnob {6 secondary_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 secondary_color_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {7 saturation R 0 2} saturation 0.8 addUserKnob {7 global_intensity l intensity R 0 10} global_intensity 1 addUserKnob {26 ""} addUserKnob {7 chromatic_aberration l aberration R 0 10} chromatic_aberration 2 addUserKnob {7 sharpening R 0 10} sharpening 2 addUserKnob {26 ""} addUserKnob {26 Glow_Text l Glow} addUserKnob {7 glow l radius R 0 1000} glow 300 addUserKnob {7 intensity} intensity 0.3 addUserKnob {6 soft_highlights l "soft highlights" -STARTLINE} soft_highlights true addUserKnob {7 gamma R 0 3} gamma 1.5 addUserKnob {7 noise R 0 10} addUserKnob {20 about l About} addUserKnob {26 about_1 l "" t "A bunny:\n(\\(\\ \n( - -)\n((') (')" +STARTLINE T "
\nXavier Martín © 2016"} addUserKnob {26 ""} addUserKnob {26 website l "" +STARTLINE T "www.xaviermartinvfx.com"} addUserKnob {26 space4_1 l "" +STARTLINE T
} addUserKnob {22 version l "
version
" T "nuke.message('X_Tesla Gizmo v2.0
Xavier Martín © 2016')\nnuke.message('
To my grandad, wherever you are, know we love you.
')" +STARTLINE} addUserKnob {22 help_1 l "
? " -STARTLINE T "nuke.message('You can find more documentation
on Nukepedia or my website.')"} } Crop { inputs 0 box {0 0 {parent.Crop1.box.r} 1} reformat true intersect true crop false name Crop3 xpos -251 ypos -190 } set Ne968f1f0 [stack 0] Noise { output {-rgba.red rgba.green -rgba.blue none} size {{100/frequency} 1} zoffset {{speed*frame/100+(frame-int(frame))*11107.7}} octaves {{complexity}} lacunarity {{1/secondary_frequency}} gain {{secondary_amplitude}} gamma 1 translate {{frame*flow} {-seed*717}} scale {1 1} xrotate 0 yrotate 0 name Noise2 xpos -129 ypos -190 } Multiply { value 2 name Multiply4 xpos -129 ypos -164 } Add { value -1 name Add2 xpos -129 ypos -126 } Reformat { type scale scale {1 {max(amplitude,size+amplitude/2)}} filter Impulse name Reformat4 xpos -129 ypos -88 } Dot { name Dot1 xpos -95 ypos 85 } push $Ne968f1f0 Expression { channel0 none expr0 "y} addUserKnob {26 title_in l INPUT} addUserKnob {6 depth_invert l "depth (1/z)" +STARTLINE} depth_invert true addUserKnob {26 title_out l OUTPUT} addUserKnob {4 nor_space l "normal space" M {world camera}} nor_space camera addUserKnob {26 spacer_1 l "" +STARTLINE T
} addUserKnob {20 CamTabBegin l "" +STARTLINE n -2} addUserKnob {20 tab_cam_setup l "Camera Setup"} addUserKnob {22 set_link l "link to selected camera" t "All the process calculated in camera space. So when doing any convertion, it required the camera data. Unless input data 'space' is camera.\n\nhow to use :\nSelect the camera, which can be link to any axis nodes. This tool will get the focal, haperture, filmback window and world matrix from selected camera." T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\n\nmainKnobs = \['cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll','world_matrix']\ndefaultKnobs = \{\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll',\n\t\t\t'world matrix' : 'world_matrix'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tfor knob in mainKnobs :\n\t\t\t\tthisGRP\[knob].clearAnimated()\n\t\t\t\t\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.focal'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.haperture'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.win_translate'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.win_scale'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.winroll'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tfor knob in mainKnobs :\n\t\t\t\t\tthisGRP\[knob].clearAnimated()\n\t\t\t\t\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']))\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']))\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']))\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']))\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window roll']))\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll','world_matrix']\n\nfor knob in thisGRP.knobs() :\n if mainKnobs.count(knob) != 0 :\n thisGRP\[knob].clearAnimated()"} addUserKnob {22 bake_link l "bake expression link" t "Baked out the existing expression link back to this node itself. After that, camera node is not required for this node anymore. Baked value is base on the frame range in project setting of the nuke script.\n\n* Nuke 11.2 has issue with expression link on this node. It will crash your nuke in some cases, but it will be fine when re-open the nuke script. Because of this issue, recommand to bake the value." T "thisGRP = nuke.thisGroup()\n\nframeST = nuke.root().firstFrame()\nframeED = nuke.root().lastFrame()\n\nallknobs = \['cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll','world_matrix']\nalldata = \{\}\n\nchknobs = 0\nfor knob in allknobs :\n\tif thisGRP\[knob].hasExpression() :\n\t\tchknobs = 1\n\nif chknobs :\n\tfor knob in allknobs :\n\t\tfor t in range( frameST, frameED+1, 1 ) :\n\t\t\ttry :\n\t\t\t\talldata\[knob].append( thisGRP\[knob].getValueAt(t) )\n\t\t\texcept :\n\t\t\t\talldata\[knob] = \[ thisGRP\[knob].getValueAt(t) ]\n\n\tfor knob in allknobs :\n\t\tthisGRP\[knob].clearAnimated()\n\t\tthisGRP\[knob].setAnimated()\n\n\tfor knob in allknobs :\n\t\tfor t in range( frameST, frameED+1, 1 ) :\n\t\t\tif type( alldata\[knob]\[t-frameST] ) is float :\n\t\t\t\tthisGRP\[knob].setValueAt( alldata\[knob]\[t-frameST] , t )\n\t\t\tif type( alldata\[knob]\[t-frameST] ) is list :\n\t\t\t\tfor i in range( len( alldata\[knob]\[t-frameST] ) ) :\n\t\t\t\t\tthisGRP\[knob].setValueAt( alldata\[knob]\[t-frameST]\[i] , t , i )\nelse :\n\tnuke.message('no expression link found.')" +STARTLINE} addUserKnob {22 copy_data l "copy from selected camera" t "Select the camera, then this will process 'link to selected camera' and 'bake expression link' in once.\n\n* Nuke 11.2 has issue with expression link on this node. It will crash your nuke in some cases, but it will be fine when re-open the nuke script. Because of this issue, recommand to bake the value." -STARTLINE T "thisGRP = nuke.thisGroup()\nthisGRP\['set_link'].execute()\nthisGRP\['bake_link'].execute()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 cam_focal l "focal length" R 5 100} cam_focal 50 addUserKnob {7 cam_haperture l "horiz aperture" R 0.1 50} cam_haperture 24.576 addUserKnob {30 cam_win_translate l "window translate"} addUserKnob {30 cam_win_scale l "window scale"} cam_win_scale {1 1} addUserKnob {7 cam_winroll l "window roll" R -45 45} addUserKnob {41 world_matrix l "world matrix" T cam_data.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 CamTabEnd l "" +STARTLINE n -3} addUserKnob {26 spacer_2 l "" +STARTLINE T
} addUserKnob {7 depth_threshold l "depth threshold" t "depththreshold to adjust the edge defination."} depth_threshold 0.1 addUserKnob {20 tab_misc l Misc} addUserKnob {2 font} font "C:/Program Files/Nuke12.0v3/plugins/fonts/UtopiaBold.pfa" addUserKnob {6 disable_error l "disable onscreen message" +STARTLINE} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.4} addUserKnob {26 l_DATE l "Date Modified" T 2020-01-21} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.4
- a package convert 3D tech passes
  included
  * P2Z ( Position To Depth )
  * P2N ( Position To Normal )
  * Z2P ( Depth To Position )
  * Z2N ( Depth To Normal )
  * ConvertPNZ ( self convertion )
- fixed camera window transformation issue

1.2
- changed camera input to expression link
- fix alpha check
- added support camera window roll

1.0
- Convert Position data to Normal\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x38408cff label blinkscript note_font_size 42 xpos 334 ypos 96 bdwidth 224 bdheight 134 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x388e8e00 label bin note_font_size 42 xpos -146 ypos -417 bdwidth 272 bdheight 503 } NoOp { inputs 0 name global xpos -107 ypos -293 addUserKnob {20 User} addUserKnob {12 res} res {{"\[exists parent.input0] ? parent.input0.width : width"} {"\[exists parent.input0] ? parent.input0.height : height"}} addUserKnob {7 pxa} pxa {{"\[exists parent.input0] ? parent.input0.pixel_aspect : pixel_aspect"}} addUserKnob {7 hratio} hratio {{"parent.cam_haperture / parent.cam_focal"}} addUserKnob {2 font} font "C:/Program Files/Nuke12.0v3/plugins/fonts/UtopiaBold.pfa" } Axis { inputs 0 display off selectable false rotate {0 0 {parent.cam_winroll}} name fb_data xpos -94 ypos -198 } Camera { inputs 0 display off selectable false useMatrix true name cam_data xpos 13 ypos -195 } Reformat { inputs 0 type "to box" box_width {{global.res.x}} box_height {{global.res.y}} box_fixed true box_pixel_aspect {{global.pxa}} name Reformat1 xpos 748 ypos 388 } Text { message "missing depth input" font "\[value parent.font]" size {{global.res.x/15}} xjustify center yjustify center Transform 1 box {0 0 {global.res.x} {global.res.y}} center {640 360} name Text1 xpos 748 ypos 470 disable {{parent.disable_error}} } Reformat { type "to box" box_width {{global.res.x}} box_height {{global.res.y}} box_fixed true box_pixel_aspect {{global.pxa}} black_outside true name Reformat2 xpos 748 ypos 552 } Dot { name Dot5 xpos 782 ypos 634 } Input { inputs 0 name depth xpos 404 ypos -533 } Expression { temp_name0 detectA temp_expr0 "red == 0 && green == 0 && blue == 0 ? 0 : 1" expr3 detectA name Expression3 label "non-filtered alpha" xpos 404 ypos -426 } Dot { name Dot2 xpos 438 ypos -343 } set Ncb34bc00 [stack 0] Expression { expr0 1/red expr1 0 expr2 0 name Expression6 label "depth invert" xpos 524 ypos -296 } push $Ncb34bc00 Switch { inputs 2 which {{depth_invert}} name Switch1 xpos 404 ypos -234 } Expression { temp_name0 posX temp_expr0 "( x/global.res.x - 0.5) * ( global.hratio * red )" temp_name1 posY temp_expr1 "( y/global.res.y - 0.5) * ( global.hratio * global.res.y/global.res.x * red )" temp_name2 posZ temp_expr2 -red expr0 posX expr1 posY expr2 posZ name Expression7 label "depth to position (cam)" xpos 404 ypos -139 } Premult { name Premult1 label "premult non-filtered alpha" xpos 404 ypos -45 } BlinkScript { recompileCount 376 KernelDescription "2 \"PosToNor\" iterate pixelWise 02cf16da23aea1612dfbcc053c87db54f6b4c4e44f3ad9894ac3d7a7730044cc 2 \"ppass\" Read Random \"dst\" Write Point 1 \"deep threshold\" Float 1 zczMPQ== 1 \"dThreshold\" 1 1 0" EncodedSource "1 2924 5yXW0xYFMJslpopUtj52AV/Io3x/f6K86Tht0ug2nRn+Pl5BtcKt7yOZtlJAGYcZhwFjuDgpOVcH+JYiF2EFRVtpxuWSctkcGm9s+mt73vdnVTG5DErmZb7UaE51wML710Mnz4xW/dHYU98yrOnkQjhpiGWpnJfaZRsYb9zg4THW+7vImS4rn1HMaDx+e7MguZZU8VlNDr0yt3+oqK5JqPha++yGjxd6U2y6Mcfa4QbIm2NAmKIzdkyYct+2X7Obj1XdMIpRBBYpl1JtTEM22BpY9I2hxiJln4Ut3IPhp9F96phL2JQIveQ7xR9u1BJiYTw/su++BoJZ1MbcIUAiYitUZSRS8yctZ0E+e5wGmJn8TXlNaLCx/L4RRE35TUY39uz3NaDzUdi4mnKNKMQcPTLVbJbm+Qxpe71YCRZRnrMlbtuhCI5/wZXmQCGGDF06bzY0clTgJdUxKLkqgCCIkkU5N3RRekb+Hit95FprW/toVKlxS6kxQgFwywG2fRflbudUOP1Oi6ZGl1KYu0ymY1i2Va+z8sWvl1K3Df6PDYPGGTto+QeRYjRWJ6M8yuYQXjW84drm00CMTPsD4o6nEN703fvBCK4oMA1uB+B+f1Ks/yex6rqL8W0RdNPgzCCOOw1NTWp1DG0/grDqBsRUyESUq58oZ7pNZkB94dkFqH3DdQTCK+QVjkiQpnht5xRazBjPsJuE3HJWGjcDjbxdqmT8Q2FQ3hrEz5iD2PeM5P2CQHEHPP9/BDujHY9fRay5iodG5asnPYBTnsoHGW06e8aKgkyLrg8wXC6BDVIYFgwNxzIX0KCcXlycqtGleq3cC2HahCVNQH52ugdy15yi0GzFaOjF3k1orC2x1VnKZQvoImV5yWUPwU+k9DPLSnCd3VL5LioZrLP54n0kJBKpwEiJNvnIM7rjaz1S7SbwmRfoQEVy01/06ppj2YT9+G3KQVEDwD7thlAE/w7/K/OdJ72Xr75gqUU1heOD5Ze8ZWZcKfCibiCLjcb7vUef2AQTe0MWElmo61jeK30rWvJLWuVFyFFcYXvU36xXlq28SnTMMO94aU+3cfcxDzlIMF2wfyYXNOOCe7gv/ed22EtJQU/O4qrXWIQbBP/sc3IZ4PUSnE4CgVSpNL1K8NZwlXGEjlE40BOHiFsXotpJNvKvxgQIEFStsptpdfVCFqNQ8N3A+s8y/QUrXJ8nQsiNykHmuRWa0hcNihaOTpIGuVk7eDECVy/ebkNv11ImrGAkndoV67OjZy+FUTBaO1rD1uTtZeCIdycfnoCFIJejQOtzoSNYjJOkVJ4T0luOO8yKCqkgAHtthZE3h+WObi2wcRzDAk7y62rJDA2DzC+VM6EoBf31gMxRrZ71tHgMY+zUgWdBPLTqTKBtPcxsHaUVvEnpBmaUHhm9mwlwMa4yOO3pJf1ZYsrL0Gx1jMDPZVzZOM/1KyVWNaWEGy+baCvGjt/xteo/VgGPre38KEL7Mxtrc7mehF2T8Fh5shHdU7NmxRyfQHjZfugwqY3U4HqVi/T5DftVK9aaMm2w+RC7j4LbFg971DTXzA2rQDNa5pOMqbwBRTRQSGCdH0dfNFaWOug/ez+dRkMgWMY4CVv4qtxrWtk1G+WlNV806YKLlVrsWkaqgV70IL0sX8Yg03roBQHv2ulCVMBLpoTeAzn1nWZq7Bc2OA4Bm8YJz/pqxBF76HbVRtYTsBC9RR11HtoJ05OPWt3TtkZ3dvZf3vRsBkSvZ2pRdoUoQXXl8sPzzJmoNXbXsRfymhkbQeH1g15zcuXX+0ieT+0zCd9PvFIRM1inf/DbfVFU3XQhbxVLT6Ivbs7JCGlT5IKe8p9Wz19NJqkbkQdGe3+ewHdZ4SZBjfAeaOWCn3hVWLqMtnI8WtiKfX23SqoscOa+S+kwE52r4A2PHLg/dAKN778y2ifcEsubR9RodouzJyMuDP9Vt6m3NOIYOg9YlmwH7WdyqU+r6kEitQjLiehTmIqejUlmEfGCHD2P6Bimnp+hxxRR1MFupXMQwLMjw3aWwsht64QCRtNw0mHv64lxEwaK6fDzYNlRFHF/agvo39NT/ISzm377qXzLBIBc89kQsUDdOA7Hms8mE4hqEGEtkaCQNas/5a3jsPyM5r1u3Basix0O3dHAY4x6uq6ticdXw+ybCh2KD5W2MlZXJHavrsmtI1RUXQxWRq1Xj+7JTjAovglRyryaJ9RIiBC0gZO8/eInoSawWPZGnaOg1Qa94F2nORWmuGddIaAbwK9nMGEq119T2L0tqoXHq/wA088HnCNM2cHRKe4oNfBmvq8qgvcdqfxvz3T6W0rzFD2YQJ4VDlypuR+ninR7oT37Mj2wuhngjev30qi26zYgIhqtjEc7+ZYEzsHm0K5u1K8s1F+w7OH4h5ywzMMjpgXaPWCsWwPdWqnDYr318BbhgQiJwbQWiMQJHPKUoxWNfgiqoPTUExavRPn+vuSrKkbg7IbPsNMA3DfzT4ptkrFEDSJuz2lJuw9kNRA8e8WmjLippFRvNjh+ggM0BikNn2zHNqWVhmMDIr1IZBXFTPwvyi4/vG+CHJ24t2F26eKeaGikb4LC++D/EKrWqCnb2RVS5A1yz/yZuUXzTT/G6H81FSHDMcVy9ZP22KkaBf67gGUFFJCLeZJ3hyUaxG4kLhPquUY1KgdQlZtLKEWqJW622yQNsBKk/BtHTosNWLoGjYA3Jd95s1uH8miJHc2pOF9AQxAlq2RPL4X9uPJrAFxU87T0uEWDU+itkMG0fOdtTGU7AlgMTzhzusfiydkPIP5+uOgs9G4aIF6x/2RgkR0IpXqO4jIpCATskx4kQEd5XM6ArganbSlwVXKQnqNMvhiFJod+1IZIbW15OdjYrgUaSbvKWUNcBp7raPmbkueWUgjcABDCwLzCd0d9MIH6oaIVi53xXG8jFFg4mspWFlIqOi6pGr1Ekto36WtLVc52SOsdGXb1bseOqDKelEK5fglFs2FPmLhmhHGDZHP8LT2Tou56Ek6HsAmvC4BGqKIYgieohD2HIGkCpEj/Sp9YK8CGgBkhzkV5e8jmD3a+0DPfA0UBmP0mRoc7zuS+KtsQ4osgPEFvxRTW3wcK03vMQl3iXGyD6iui3WDZPHYCEjI6L8SKY7L/NY2orchDm8Hyu+MHbv+4II9kigJarcc+2AbxFsaGKWLt8QFBqvnPI13NMBFB4d7CqF9YgrLeSO/L4sj1MWOwhxvmb+Iq8UHdsnpDSNWcyg5X+4rVtu/BUSoAoM5HHxJ4ewGIVc/C/Jsv7R1k9TWjXIov0+zAqi3+6uihDI1oFIG0fGL/7lALT7uVMgIwzt+ndikUI3tK8yjrBAzJAMv+7t0sSpl7rAsDqILPn5cfHvL2ApAOwjrN7pKlDsx142JiqBE7wwL1GNQotS7I0mjUt6U8hYom+K22Z1XihxVBCpA4bOURZAVeWlQ/1z73gmWAUk+yUGNHBfCZvWMwDFw8GInlKFlJ4mIRx/J36zEyqEAlkLhThIf9d9LZApuMyORCOq8K9sbncWAgmDWKCqR3V+yfabtMuqbvJ9TG1vPd21InUUXcQ7VIlpzOZN9AHF/ELh7daih3ovpILkCA7cdycyxQjADMYzeN2IOG1UICBb4UpPG7ZbBhjAiKQ0YRaUZ4oL1aFJxHa1pfVRZ/38WwX5WjYBSBEQJtidVXWnXjXJM5ZsWI29h7nktgCySwCaDfqpHh3Bbum73TPcvHF9ukFMUTdI3WaYlP+Twzvvgrc8d20sa9ZnB5W8vCnbPV2YbLNcjHsjqHHGpiXKInPSZhiQi2l2UWklmK5cKAhMVL6aHrvbpm2hSEUkQSShYRGi1ZtA2RodPRsGbQxPBoY6dz5WCLFKBhl0WTsbRG6K1jXggvWGgGmCdz" rebuild "" "PosToNor_deep threshold" {{parent.depth_threshold}} protectKernelWhenPublishing true rebuild_finalise "" name BS_PosToNor xpos 404 ypos 170 } Expression { expr0 "isnan(r) || isinf(r) ? 0 : r" expr1 "isnan(g) || isinf(g) ? 0 : g" expr2 "isnan(b) || isinf(b) ? 0 : b" name Expression2 label "remove nan&inf" xpos 404 ypos 289 } ColorMatrix { matrix { {{fb_data.world_matrix.0} {fb_data.world_matrix.1} {fb_data.world_matrix.2}} {{fb_data.world_matrix.4} {fb_data.world_matrix.5} {fb_data.world_matrix.6}} {{fb_data.world_matrix.8} {fb_data.world_matrix.9} {fb_data.world_matrix.10}} } invert true name ColorMatrix4 label "apply camera window" xpos 404 ypos 407 } Dot { name Dot4 xpos 438 ypos 501 } set Ncb37fc00 [stack 0] Dot { name Dot1 xpos 569 ypos 589 } push $Ncb37fc00 ColorMatrix { matrix { {{parent.world_matrix.0} {parent.world_matrix.1} {parent.world_matrix.2}} {{parent.world_matrix.4} {parent.world_matrix.5} {parent.world_matrix.6}} {{parent.world_matrix.8} {parent.world_matrix.9} {parent.world_matrix.10}} } name ColorMatrix3 label "normal (world)" xpos 404 ypos 575 } Switch { inputs 2 which {{parent.nor_space}} name Switch2 xpos 404 ypos 669 } Switch { inputs 2 which {{"!\[exists parent.input0]"}} name Switch3 xpos 404 ypos 871 } Output { name Output1 xpos 404 ypos 1050 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_Z2P.gizmo ================================================ Group { name Z2P onCreate "\nthisGRP = nuke.thisGroup()\nif not thisGRP\['disable_error'].getValue() :\n import os\n import re\n\n fontpath = re.split( '/|\"\"' , nuke.EXE_PATH )\n fontpath.pop()\n fontpath += \['plugins','fonts']\n \n if os.path.isfile( '/'.join( fontpath + \['UtopiaBold.pfa'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['UtopiaBold.pfa'] ) )\n elif os.path.isfile( '/'.join( fontpath + \['CourierBold.pfa'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['CourierBold.pfa'] ) )\n elif os.path.isfile( '/'.join( fontpath + \['Courier10PitchBold.pfb'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['Courier10PitchBold.pfb'] ) )\n else :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['BitstreamCharterBold.pfb'] ) )\n" tile_color 0x7f0072ff label "output : position(\[value pos_space])" addUserKnob {20 general l General} addUserKnob {26 title_in l INPUT} addUserKnob {6 depth_invert l "depth (1/z)" +STARTLINE} depth_invert true addUserKnob {26 title_out l OUTPUT} addUserKnob {4 pos_space l "position space" M {world camera}} addUserKnob {26 spacer l "" +STARTLINE T
} addUserKnob {20 CamTabBegin l "" +STARTLINE n -2} addUserKnob {20 tab_cam_setup l "Camera Setup"} addUserKnob {22 set_link l "link to selected camera" t "All the process calculated in camera space. So when doing any convertion, it required the camera data. Unless input data 'space' is camera.\n\nhow to use :\nSelect the camera, which can be link to any axis nodes. This tool will get the focal, haperture, filmback window and world matrix from selected camera." T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\n\nmainKnobs = \['cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll','world_matrix']\ndefaultKnobs = \{\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll',\n\t\t\t'world matrix' : 'world_matrix'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tfor knob in mainKnobs :\n\t\t\t\tthisGRP\[knob].clearAnimated()\n\t\t\t\t\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.focal'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.haperture'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.win_translate'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.win_scale'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.winroll'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tfor knob in mainKnobs :\n\t\t\t\t\tthisGRP\[knob].clearAnimated()\n\t\t\t\t\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']))\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']))\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']))\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']))\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window roll']))\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll','world_matrix']\n\nfor knob in thisGRP.knobs() :\n if mainKnobs.count(knob) != 0 :\n thisGRP\[knob].clearAnimated()"} addUserKnob {22 bake_link l "bake expression link" t "Baked out the existing expression link back to this node itself. After that, camera node is not required for this node anymore. Baked value is base on the frame range in project setting of the nuke script.\n\n* Nuke 11.2 has issue with expression link on this node. It will crash your nuke in some cases, but it will be fine when re-open the nuke script. Because of this issue, recommand to bake the value." T "thisGRP = nuke.thisGroup()\n\nframeST = nuke.root().firstFrame()\nframeED = nuke.root().lastFrame()\n\nallknobs = \['cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll','world_matrix']\nalldata = \{\}\n\nchknobs = 0\nfor knob in allknobs :\n\tif thisGRP\[knob].hasExpression() :\n\t\tchknobs = 1\n\nif chknobs :\n\tfor knob in allknobs :\n\t\tfor t in range( frameST, frameED+1, 1 ) :\n\t\t\ttry :\n\t\t\t\talldata\[knob].append( thisGRP\[knob].getValueAt(t) )\n\t\t\texcept :\n\t\t\t\talldata\[knob] = \[ thisGRP\[knob].getValueAt(t) ]\n\n\tfor knob in allknobs :\n\t\tthisGRP\[knob].clearAnimated()\n\t\tthisGRP\[knob].setAnimated()\n\n\tfor knob in allknobs :\n\t\tfor t in range( frameST, frameED+1, 1 ) :\n\t\t\tif type( alldata\[knob]\[t-frameST] ) is float :\n\t\t\t\tthisGRP\[knob].setValueAt( alldata\[knob]\[t-frameST] , t )\n\t\t\tif type( alldata\[knob]\[t-frameST] ) is list :\n\t\t\t\tfor i in range( len( alldata\[knob]\[t-frameST] ) ) :\n\t\t\t\t\tthisGRP\[knob].setValueAt( alldata\[knob]\[t-frameST]\[i] , t , i )\nelse :\n\tnuke.message('no expression link found.')" +STARTLINE} addUserKnob {22 copy_data l "copy from selected camera" t "Select the camera, then this will process 'link to selected camera' and 'bake expression link' in once.\n\n* Nuke 11.2 has issue with expression link on this node. It will crash your nuke in some cases, but it will be fine when re-open the nuke script. Because of this issue, recommand to bake the value." -STARTLINE T "thisGRP = nuke.thisGroup()\nthisGRP\['set_link'].execute()\nthisGRP\['bake_link'].execute()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 cam_focal l "focal length" R 5 100} cam_focal 50 addUserKnob {7 cam_haperture l "horiz aperture" R 0.1 50} cam_haperture 24.576 addUserKnob {30 cam_win_translate l "window translate"} addUserKnob {30 cam_win_scale l "window scale"} cam_win_scale {1 1} addUserKnob {7 cam_winroll l "window roll" R -45 45} addUserKnob {41 world_matrix l "world matrix" T cam_data.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 CamTabEnd l "" +STARTLINE n -3} addUserKnob {20 tab_misc l Misc} addUserKnob {2 font} font "C:/Program Files/Nuke12.0v3/plugins/fonts/UtopiaBold.pfa" addUserKnob {6 disable_error l "disable onscreen message" +STARTLINE} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.4} addUserKnob {26 l_DATE l "Date Modified" T 2020-01-21} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.4
- a package convert 3D tech passes
  included
  * P2Z ( Position To Depth )
  * P2N ( Position To Normal )
  * Z2P ( Depth To Position )
  * Z2N ( Depth To Normal )
  * ConvertPNZ ( self convertion )
- fixed camera window transformation issue

1.2
- changed camera input to expression link
- fix alpha check
- added support camera window roll

1.0
- Convert Position data to Normal\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x388e8e00 label bin note_font_size 42 xpos -146 ypos -417 bdwidth 272 bdheight 503 } Reformat { inputs 0 type "to box" box_width {{global.res.x}} box_height {{global.res.y}} box_fixed true box_pixel_aspect {{global.pxa}} name Reformat1 xpos 755 ypos 283 } Text { message "missing depth pass" font "\[value parent.font]" size {{global.res.x/15}} xjustify center yjustify center Transform 1 box {0 0 {global.res.x} {global.res.y}} center {640 360} name Text1 xpos 755 ypos 365 disable {{parent.disable_error}} } Reformat { type "to box" box_width {{global.res.x}} box_height {{global.res.y}} box_fixed true box_pixel_aspect {{global.pxa}} black_outside true name Reformat2 xpos 755 ypos 447 } Dot { name Dot5 xpos 789 ypos 529 } Input { inputs 0 name depth xpos 404 ypos -533 } Expression { temp_name0 detectA temp_expr0 "red == 0 && green == 0 && blue == 0 ? 0 : 1" expr3 detectA name Expression3 label "non-filtered alpha" xpos 404 ypos -425 } Dot { name Dot2 xpos 438 ypos -343 } set Ncb3cfc00 [stack 0] Expression { expr0 1/red expr1 0 expr2 0 name Expression6 label "depth invert" xpos 525 ypos -297 } push $Ncb3cfc00 Switch { inputs 2 which {{depth_invert}} name Switch1 xpos 404 ypos -236 } Expression { temp_name0 posX temp_expr0 "( x/global.res.x - 0.5) * ( global.hratio * red )" temp_name1 posY temp_expr1 "( y/global.res.y - 0.5) * ( global.hratio * global.res.y/global.res.x * red )" temp_name2 posZ temp_expr2 -red expr0 posX expr1 posY expr2 posZ name Expression7 label "depth to position" xpos 404 ypos -130 } Expression { temp_name0 shiftX temp_expr0 "global.hratio * abs( blue ) * parent.cam_win_translate.u / 2" temp_name1 shiftY temp_expr1 "global.hratio * abs( blue ) * parent.cam_win_translate.v / 2" expr0 "( red * inverseMatrix.invMatrix.0 + green * inverseMatrix.invMatrix.1 ) * parent.cam_win_scale.u + shiftX" expr1 "( red * inverseMatrix.invMatrix.3 + green * inverseMatrix.invMatrix.4 ) * parent.cam_win_scale.v + shiftY" name Expression5 label "apply camera window" selected true xpos 404 ypos -36 } Dot { name Dot1 xpos 438 ypos 135 } set Ncb3ce800 [stack 0] Expression { expr2 -blue name Expression4 label "depth in blue" xpos 561 ypos 260 } push $Ncb3ce800 ColorMatrix { matrix { {{parent.world_matrix.0} {parent.world_matrix.1} {parent.world_matrix.2}} {{parent.world_matrix.4} {parent.world_matrix.5} {parent.world_matrix.6}} {{parent.world_matrix.8} {parent.world_matrix.9} {parent.world_matrix.10}} } name ColorMatrix1 label "rotate world" xpos 404 ypos 209 } Add { channels rgb value {{parent.world_matrix.3} {parent.world_matrix.7} {parent.world_matrix.11} 0} name Add1 label "translate world" xpos 404 ypos 291 } Switch { inputs 2 which {{parent.pos_space}} name Switch2 xpos 404 ypos 373 } Expression { expr0 "isnan(red) || isinf(red) ? 0 : red" expr1 "isnan(green) || isinf(green) ? 0 : green" expr2 "isnan(blue) || isinf(blue) ? 0 : blue" name Expression2 label "remove nan&inf" xpos 404 ypos 455 } Expression { expr0 "red * alpha" expr1 "green * alpha" expr2 "blue * alpha" expr3 0 name Expression1 label "premult non-filter alpha" xpos 404 ypos 537 } Switch { inputs 2 which {{"!\[exists parent.input0]"}} name Switch3 xpos 404 ypos 619 } Output { name Output1 xpos 404 ypos 746 } Group { inputs 0 name inverseMatrix tile_color 0x337f4cff xpos -104 ypos -79 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path fb_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2011-11-28} addUserKnob {26 l_CHANGELOG l Changelog T "v1.0\n- reveal the calculate output of \n inverse matrix which is c44matrix\n and colormatrix doesn't show\n "} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group Camera { inputs 0 display off selectable false useMatrix true name cam_data xpos 14 ypos -195 } Axis { inputs 0 display off selectable false rotate {0 0 {parent.cam_winroll}} name fb_data xpos -95 ypos -193 } NoOp { inputs 0 name global xpos -105 ypos -294 addUserKnob {20 User} addUserKnob {12 res} res {{"\[exists parent.input0] ? parent.input0.width : width"} {"\[exists parent.input0] ? parent.input0.height : height"}} addUserKnob {7 pxa} pxa {{"\[exists parent.input0] ? parent.input0.pixel_aspect : pixel_aspect"}} addUserKnob {7 hratio} hratio {{"parent.cam_haperture / parent.cam_focal"}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_ZeroAxis.gizmo ================================================ Group { name ZeroAxis help "Inverts an input Axis at a specified frame" tile_color 0x9c0000ff addUserKnob {20 ZeroAxis l "Zero Axis"} addUserKnob {3 ref_frame l "Reference Frame" t "Select a new reference frame, and the curves will be zero'd out at that frame."} ref_frame 25 addUserKnob {26 "" +STARTLINE} addUserKnob {41 world_matrix l "" -STARTLINE T Out_Axis.world_matrix} addUserKnob {26 divider_copyright l "" +STARTLINE} addUserKnob {26 copyright l "" +STARTLINE T "v1.1 - Mathieu Goulet-Aubin & Erwan Leroy - Github"} } Input { inputs 0 name Inputaxis xpos 806 ypos 434 } set Nafa3300 [stack 0] Axis2 { useMatrix true matrix { {{Mid_Axis.matrix(parent.ref_frame)/Mid_Axis.matrix.15(parent.ref_frame)} {Mid_Axis.matrix(parent.ref_frame)/Mid_Axis.matrix.15(parent.ref_frame)} {Mid_Axis.matrix(parent.ref_frame)/Mid_Axis.matrix.15(parent.ref_frame)} {Mid_Axis.matrix(parent.ref_frame)/Mid_Axis.matrix.15(parent.ref_frame)}} {{Mid_Axis.matrix(parent.ref_frame)/Mid_Axis.matrix.15(parent.ref_frame)} {Mid_Axis.matrix(parent.ref_frame)/Mid_Axis.matrix.15(parent.ref_frame)} {Mid_Axis.matrix(parent.ref_frame)/Mid_Axis.matrix.15(parent.ref_frame)} {Mid_Axis.matrix(parent.ref_frame)/Mid_Axis.matrix.15(parent.ref_frame)}} {{Mid_Axis.matrix(parent.ref_frame)/Mid_Axis.matrix.15(parent.ref_frame)} {Mid_Axis.matrix(parent.ref_frame)/Mid_Axis.matrix.15(parent.ref_frame)} {Mid_Axis.matrix(parent.ref_frame)/Mid_Axis.matrix.15(parent.ref_frame)} {Mid_Axis.matrix(parent.ref_frame)/Mid_Axis.matrix.15(parent.ref_frame)}} {{Mid_Axis.matrix(parent.ref_frame)/Mid_Axis.matrix.15(parent.ref_frame)} {Mid_Axis.matrix(parent.ref_frame)/Mid_Axis.matrix.15(parent.ref_frame)} {Mid_Axis.matrix(parent.ref_frame)/Mid_Axis.matrix.15(parent.ref_frame)} 1} } name Out_Axis selected true xpos 816 ypos 664 } Output { name Output1 xpos 806 ypos 780 } push $Nafa3300 Axis2 { name In_Axis xpos 697 ypos 495 } Axis2 { inputs 0 useMatrix true matrix { {{In_Axis.world_matrix.5*In_Axis.world_matrix.10*In_Axis.world_matrix.15+In_Axis.world_matrix.6*In_Axis.world_matrix.11*In_Axis.world_matrix.13+In_Axis.world_matrix.7*In_Axis.world_matrix.9*In_Axis.world_matrix.14-In_Axis.world_matrix.5*In_Axis.world_matrix.11*In_Axis.world_matrix.14-In_Axis.world_matrix.6*In_Axis.world_matrix.9*In_Axis.world_matrix.15-In_Axis.world_matrix.7*In_Axis.world_matrix.10*In_Axis.world_matrix.13} {In_Axis.world_matrix.1*In_Axis.world_matrix.11*In_Axis.world_matrix.14+In_Axis.world_matrix.2*In_Axis.world_matrix.9*In_Axis.world_matrix.15+In_Axis.world_matrix.3*In_Axis.world_matrix.10*In_Axis.world_matrix.13-In_Axis.world_matrix.1*In_Axis.world_matrix.10*In_Axis.world_matrix.15-In_Axis.world_matrix.2*In_Axis.world_matrix.11*In_Axis.world_matrix.13-In_Axis.world_matrix.3*In_Axis.world_matrix.9*In_Axis.world_matrix.14} {In_Axis.world_matrix.1*In_Axis.world_matrix.6*In_Axis.world_matrix.15+In_Axis.world_matrix.2*In_Axis.world_matrix.7*In_Axis.world_matrix.13+In_Axis.world_matrix.3*In_Axis.world_matrix.5*In_Axis.world_matrix.14-In_Axis.world_matrix.1*In_Axis.world_matrix.7*In_Axis.world_matrix.14-In_Axis.world_matrix.2*In_Axis.world_matrix.5*In_Axis.world_matrix.15-In_Axis.world_matrix.3*In_Axis.world_matrix.6*In_Axis.world_matrix.13} {In_Axis.world_matrix.1*In_Axis.world_matrix.7*In_Axis.world_matrix.10+In_Axis.world_matrix.2*In_Axis.world_matrix.5*In_Axis.world_matrix.11+In_Axis.world_matrix.3*In_Axis.world_matrix.6*In_Axis.world_matrix.9-In_Axis.world_matrix.1*In_Axis.world_matrix.6*In_Axis.world_matrix.11-In_Axis.world_matrix.2*In_Axis.world_matrix.7*In_Axis.world_matrix.9-In_Axis.world_matrix.3*In_Axis.world_matrix.5*In_Axis.world_matrix.10}} {{In_Axis.world_matrix.4*In_Axis.world_matrix.11*In_Axis.world_matrix.14+In_Axis.world_matrix.6*In_Axis.world_matrix.8*In_Axis.world_matrix.15+In_Axis.world_matrix.7*In_Axis.world_matrix.10*In_Axis.world_matrix.12-In_Axis.world_matrix.4*In_Axis.world_matrix.10*In_Axis.world_matrix.15-In_Axis.world_matrix.6*In_Axis.world_matrix.11*In_Axis.world_matrix.12-In_Axis.world_matrix.7*In_Axis.world_matrix.8*In_Axis.world_matrix.14} {In_Axis.world_matrix.0*In_Axis.world_matrix.10*In_Axis.world_matrix.15+In_Axis.world_matrix.2*In_Axis.world_matrix.11*In_Axis.world_matrix.12+In_Axis.world_matrix.3*In_Axis.world_matrix.8*In_Axis.world_matrix.14-In_Axis.world_matrix.0*In_Axis.world_matrix.11*In_Axis.world_matrix.14-In_Axis.world_matrix.2*In_Axis.world_matrix.8*In_Axis.world_matrix.15-In_Axis.world_matrix.3*In_Axis.world_matrix.10*In_Axis.world_matrix.12} {In_Axis.world_matrix.0*In_Axis.world_matrix.7*In_Axis.world_matrix.14+In_Axis.world_matrix.2*In_Axis.world_matrix.4*In_Axis.world_matrix.15+In_Axis.world_matrix.3*In_Axis.world_matrix.6*In_Axis.world_matrix.12-In_Axis.world_matrix.0*In_Axis.world_matrix.6*In_Axis.world_matrix.15-In_Axis.world_matrix.2*In_Axis.world_matrix.7*In_Axis.world_matrix.12-In_Axis.world_matrix.3*In_Axis.world_matrix.4*In_Axis.world_matrix.14} {In_Axis.world_matrix.0*In_Axis.world_matrix.6*In_Axis.world_matrix.11+In_Axis.world_matrix.2*In_Axis.world_matrix.7*In_Axis.world_matrix.8+In_Axis.world_matrix.3*In_Axis.world_matrix.4*In_Axis.world_matrix.10-In_Axis.world_matrix.0*In_Axis.world_matrix.7*In_Axis.world_matrix.10-In_Axis.world_matrix.2*In_Axis.world_matrix.4*In_Axis.world_matrix.11-In_Axis.world_matrix.3*In_Axis.world_matrix.6*In_Axis.world_matrix.8}} {{In_Axis.world_matrix.4*In_Axis.world_matrix.9*In_Axis.world_matrix.15+In_Axis.world_matrix.5*In_Axis.world_matrix.11*In_Axis.world_matrix.12+In_Axis.world_matrix.7*In_Axis.world_matrix.8*In_Axis.world_matrix.13-In_Axis.world_matrix.4*In_Axis.world_matrix.11*In_Axis.world_matrix.13-In_Axis.world_matrix.5*In_Axis.world_matrix.8*In_Axis.world_matrix.15-In_Axis.world_matrix.7*In_Axis.world_matrix.9*In_Axis.world_matrix.12} {In_Axis.world_matrix.0*In_Axis.world_matrix.11*In_Axis.world_matrix.13+In_Axis.world_matrix.1*In_Axis.world_matrix.8*In_Axis.world_matrix.15+In_Axis.world_matrix.3*In_Axis.world_matrix.9*In_Axis.world_matrix.12-In_Axis.world_matrix.0*In_Axis.world_matrix.9*In_Axis.world_matrix.15-In_Axis.world_matrix.1*In_Axis.world_matrix.11*In_Axis.world_matrix.12-In_Axis.world_matrix.3*In_Axis.world_matrix.8*In_Axis.world_matrix.13} {In_Axis.world_matrix.0*In_Axis.world_matrix.5*In_Axis.world_matrix.15+In_Axis.world_matrix.1*In_Axis.world_matrix.7*In_Axis.world_matrix.12+In_Axis.world_matrix.3*In_Axis.world_matrix.4*In_Axis.world_matrix.13-In_Axis.world_matrix.0*In_Axis.world_matrix.7*In_Axis.world_matrix.13-In_Axis.world_matrix.1*In_Axis.world_matrix.4*In_Axis.world_matrix.15-In_Axis.world_matrix.3*In_Axis.world_matrix.5*In_Axis.world_matrix.12} {In_Axis.world_matrix.0*In_Axis.world_matrix.7*In_Axis.world_matrix.9+In_Axis.world_matrix.1*In_Axis.world_matrix.4*In_Axis.world_matrix.11+In_Axis.world_matrix.3*In_Axis.world_matrix.5*In_Axis.world_matrix.8-In_Axis.world_matrix.0*In_Axis.world_matrix.5*In_Axis.world_matrix.11-In_Axis.world_matrix.1*In_Axis.world_matrix.7*In_Axis.world_matrix.8-In_Axis.world_matrix.3*In_Axis.world_matrix.4*In_Axis.world_matrix.9}} {{In_Axis.world_matrix.4*In_Axis.world_matrix.10*In_Axis.world_matrix.13+In_Axis.world_matrix.5*In_Axis.world_matrix.8*In_Axis.world_matrix.14+In_Axis.world_matrix.6*In_Axis.world_matrix.9*In_Axis.world_matrix.12-In_Axis.world_matrix.4*In_Axis.world_matrix.9*In_Axis.world_matrix.14-In_Axis.world_matrix.5*In_Axis.world_matrix.10*In_Axis.world_matrix.12-In_Axis.world_matrix.6*In_Axis.world_matrix.8*In_Axis.world_matrix.13} {In_Axis.world_matrix.0*In_Axis.world_matrix.9*In_Axis.world_matrix.14+In_Axis.world_matrix.1*In_Axis.world_matrix.10*In_Axis.world_matrix.12+In_Axis.world_matrix.2*In_Axis.world_matrix.8*In_Axis.world_matrix.13-In_Axis.world_matrix.0*In_Axis.world_matrix.10*In_Axis.world_matrix.13-In_Axis.world_matrix.1*In_Axis.world_matrix.8*In_Axis.world_matrix.14-In_Axis.world_matrix.2*In_Axis.world_matrix.9*In_Axis.world_matrix.12} {In_Axis.world_matrix.0*In_Axis.world_matrix.6*In_Axis.world_matrix.13+In_Axis.world_matrix.1*In_Axis.world_matrix.4*In_Axis.world_matrix.14+In_Axis.world_matrix.2*In_Axis.world_matrix.5*In_Axis.world_matrix.12-In_Axis.world_matrix.0*In_Axis.world_matrix.5*In_Axis.world_matrix.14-In_Axis.world_matrix.1*In_Axis.world_matrix.6*In_Axis.world_matrix.12-In_Axis.world_matrix.2*In_Axis.world_matrix.4*In_Axis.world_matrix.13} {In_Axis.world_matrix.0*In_Axis.world_matrix.5*In_Axis.world_matrix.10+In_Axis.world_matrix.1*In_Axis.world_matrix.6*In_Axis.world_matrix.8+In_Axis.world_matrix.2*In_Axis.world_matrix.4*In_Axis.world_matrix.9-In_Axis.world_matrix.0*In_Axis.world_matrix.6*In_Axis.world_matrix.9-In_Axis.world_matrix.1*In_Axis.world_matrix.4*In_Axis.world_matrix.10-In_Axis.world_matrix.2*In_Axis.world_matrix.5*In_Axis.world_matrix.8}} } name Mid_Axis xpos 694 ypos 628 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_aPCard.gizmo ================================================ add_layer {P P.red P.green P.blue P.alpha} Group { name aPCard knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nkn = k.name()\nif kn in \[\"in_vectors\",\"inputChange\"]:\n kv = n\[\"in_vectors\"].value()\n for i in nuke.allNodes(\"Input\"):\n if i\[\"label\"].value() == \"dyn\":\n inp = i\n options = \{\"position\":\"pos\",\"depth\":\"depth\",\"deep\":\"deep\",\"geometry\":\"geo\"\}\n inp\[\"name\"].setValue(\"Input\"+options\[kv])\n if kv in \[\"position\",\"geometry\"]:\n n\[\"p_channels\"].setValue(\"P\")\n else:\n n\[\"p_channels\"].setValue(\"depth\")\n if kv==\"deep\":\n nuke.toNode(\"ShuffleP\").setInput(0,nuke.toNode(\"DeepToImage\"))\n nuke.toNode(\"DeepToImage\").setInput(0,nuke.toNode(\"DotDeep\"))\n #nuke.toNode(\"DotDeep\").setInput(0,nuke.toNode(\"DotInput\"))\n elif kv==\"geometry\":\n nuke.toNode(\"ShuffleP\").setInput(0,nuke.toNode(\"SRGeo\"))\n nuke.toNode(\"ApplyMat\").setInput(0,nuke.toNode(\"DotInput\"))\n else:\n nuke.toNode(\"ShuffleP\").setInput(0,nuke.toNode(\"DotInput\"))\n n\[\"invert_depth\"].setVisible(kv==\"depth\")\nelif kn == \"pick\":\n c = nuke.toNode(\"Card3D\")\n c.knob(\"translate\").setValue(n\[\"pick\"].value())\nelif kn == \"proj_mode\":\n kv = k.getValue()\n for i in \[\"ref_frame\",\"ref_to_current\"]:\n n\[i].setVisible(kv != 0)\nelif kn == \"preview_mode\":\n kv = k.getValue()\n for i in \[\"grid_resolution\",\"grid_size\"]:\n n\[i].setVisible(kv != 0)\nelif kn == \"face_cam\":\n kv = k.getValue()\n for i in \[\"face_frame\",\"face_to_current\"]:\n n\[i].setVisible(kv != 0)\nelif kn ==\"deep_holdout\":\n kv = k.value()\n if kv:\n print (\"deep holdout...\")\nelif kn == \"out_mode\":\n kv = k.getValue()\n if kv in \[1,2]:\n nuke.toNode(\"MergeImg\")\[\"operation\"].setValue(\"plus\" if kv==2 else \"over\")\n #Switch output\n opt = nuke.toNode(\"Output1\")\n if kv == 3:\n opt.setInput(0,nuke.toNode(\"DotDeepOut\"))\n elif kv == 4:\n opt.setInput(0,nuke.toNode(\"DotGeoOut\"))\n else:\n opt.setInput(0,nuke.toNode(\"DotImgOut\"))\n\n# Global checks here\nif kn not in \[\"xpos\",\"ypos\",\"selected\"]:\n if n.input(4):\n nuke.toNode(\"DotDeep\").setInput(0,nuke.toNode(\"DotInput\"))\n #Expose deep options\n deep_opt = True if (n\[\"in_vectors\"].value() == \"deep\" or n.input(4)) else False\n nuke.toNode(\"DotDeep\").setInput(0,nuke.toNode(\"DotInput\"))\n dh = n\[\"deep_holdout\"]\n dh.setEnabled(deep_opt)\n for i in \[\"deep_thickness\",\"deep_opacity\"]:\n n\[i].setVisible(deep_opt and dh.value())" addUserKnob {20 aPCard} addUserKnob {4 in_vectors l input M {position depth deep geometry "" ""}} addUserKnob {41 p_channels l channels -STARTLINE T ShuffleP.in} addUserKnob {6 unpremult_p l unpremult -STARTLINE} addUserKnob {6 invert_depth l "invert depth" +HIDDEN +STARTLINE} addUserKnob {26 ""} addUserKnob {20 position_group l Position n 1} addUserKnob {41 pick T PickVector.pick} addUserKnob {26 ctrl_alt_tip l " (ctrl+alt+click)" -STARTLINE T ""} addUserKnob {4 proj_mode l mode t "place = place the input image on a card at the picked position\nproject = project the imput image on the selected frame, onto a card at the picked position" M {place project}} proj_mode project addUserKnob {3 ref_frame l "" -STARTLINE} ref_frame 1001 addUserKnob {22 ref_to_current l "set to current" -STARTLINE T "nuke.thisNode()\[\"ref_frame\"].setValue(nuke.frame())"} addUserKnob {14 card_size l size R 0 100} card_size 1 addUserKnob {4 preview_mode l preview M {off "grid + img" "grid only" "" ""}} preview_mode "grid + img" addUserKnob {3 grid_resolution l subdiv -STARTLINE} grid_resolution 10 addUserKnob {7 grid_size l size -STARTLINE R 0 2} grid_size 5 addUserKnob {41 pivot +INVISIBLE T Card3D1.pivot} addUserKnob {41 translate_world l translate T AxisTweakPre.translate} addUserKnob {4 face_cam l "face camera" M {none "on frame" always ""}} addUserKnob {3 face_frame l "" -STARTLINE +HIDDEN} face_frame 1005 addUserKnob {22 face_to_current l "set to current" -STARTLINE +HIDDEN T "nuke.thisNode()\[\"ref_frame\"].setValue(nuke.frame())"} addUserKnob {7 depth_add l "depth add" R -100 100} addUserKnob {7 depth_mult l "depth mult" R 0 10} depth_mult 1 addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 TweakGroup l Tweak n 1} TweakGroup 0 addUserKnob {41 translate T AxisTweak.translate} addUserKnob {41 rotate T AxisTweak.rotate} addUserKnob {41 skew T AxisTweak.skew} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 OutputGroup l Output n 1} addUserKnob {4 out_mode l output M {"Image on black" "Image over bg" "Image plus bg" Deep Card}} out_mode "Image over bg" addUserKnob {6 deep_holdout l "deep holdout" -STARTLINE +DISABLED} addUserKnob {7 deep_thickness l thickness +HIDDEN R 0 100} deep_thickness 5 addUserKnob {7 deep_opacity l opacity +HIDDEN} deep_opacity 0.9999 addUserKnob {41 motionblur T Card3D1.motionblur} addUserKnob {41 shutter T Card3D1.shutter} addUserKnob {41 shutteroffset l "shutter offset" T Card3D1.shutteroffset} addUserKnob {41 shuttercustomoffset l "" -STARTLINE T Card3D1.shuttercustomoffset} addUserKnob {20 endGroup_3 l endGroup n -1} addUserKnob {26 ""} addUserKnob {26 version_author l "" t "aPCard BETA v0.1\n2018-2019" +STARTLINE T "
aPCard BETA v0.1 - adrianpueyo.com, 2018-2019
"} } Axis2 { inputs 0 name AxisTweakPre xpos 1099 ypos 501 } set N3434f600 [stack 0] Axis2 { useMatrix true matrix { {{parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix}} {{parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix}} {{parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix}} {{parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix}} } name AxisInputCalc xpos 1209 ypos 501 } NoOp { inputs 0 name cam_axis_vectors xpos 1199 ypos 615 addUserKnob {20 User} addUserKnob {13 cam_axis_vector} cam_axis_vector {{"AxisCamBoss.world_matrix.3 - AxisInputCalc.world_matrix.3"} {"AxisCamBoss.world_matrix.7 - AxisInputCalc.world_matrix.7"} {"AxisCamBoss.world_matrix.11 - AxisInputCalc.world_matrix.11"}} addUserKnob {7 cam_axis_dist R 0 1000} cam_axis_dist {{"sqrt(pow2(cam_axis_vector.x) + pow2(cam_axis_vector.y) + pow2(cam_axis_vector.z))"}} addUserKnob {13 cam_axis_normalized} cam_axis_normalized {{cam_axis_vector/cam_axis_dist} {cam_axis_vector/cam_axis_dist} {cam_axis_vector/cam_axis_dist}} addUserKnob {13 result_depth_vector} result_depth_vector {{"cam_axis_normalized * parent.depth_add + cam_axis_vector * (parent.depth_mult - 1)"} {"cam_axis_normalized * parent.depth_add + cam_axis_vector * (parent.depth_mult - 1)"} {"cam_axis_normalized * parent.depth_add + cam_axis_vector * (parent.depth_mult - 1)"}} } Axis2 { inputs 0 name AxisBoss xpos 1324 ypos 462 } Input { inputs 0 name Inputpos label dyn xpos -146 ypos -281 number 1 } Dot { name DotInput label " Main" note_font "Bitstream Vera Sans Bold" note_font_size 41 xpos -112 ypos -67 } set N34387fa0 [stack 0] Dot { name DotDeep label "\nDeep?" note_font "Bitstream Vera Sans Bold" note_font_size 41 xpos -112 ypos 309 } Input { inputs 0 name Inputdeep_holdout xpos -256 ypos 1861 number 4 } Switch { inputs 2 which 1 name SwitchDHSource xpos -146 ypos 1861 disable {{"\[exists parent.input4]"}} } set N33de49a0 [stack 0] Dot { name Dot20 note_font_size 41 xpos -112 ypos 1911 } Input { inputs 0 name Inputcam xpos 1845 ypos 82 number 2 } Dot { name Dot17 note_font_size 41 xpos 1879 ypos 186 } set N34091c40 [stack 0] Dot { name Dot14 note_font_size 41 xpos 1879 ypos 310 } set N2aed3110 [stack 0] Dot { name Dot28 xpos 1879 ypos 621 } set N131564e0 [stack 0] Dot { name Dot10 note_font_size 41 xpos 1879 ypos 1168 } Dot { name Dot11 note_font_size 41 xpos 1157 ypos 1168 } set N13cf36c0 [stack 0] Dot { name Dot15 note_font_size 41 xpos 1157 ypos 1247 } set N342e7a70 [stack 0] Dot { name Dot16 note_font_size 41 xpos 1157 ypos 1317 } set N34361ec0 [stack 0] Dot { name Dot2 note_font_size 41 xpos 1157 ypos 1366 } push $N34361ec0 push $N342e7a70 FrameHold { firstFrame {{parent.ref_frame}} name FrameHoldProj xpos 964 ypos 1237 } Input { inputs 0 name Inputimg xpos 900 ypos 741 } Shuffle { name Shuffle2 label "\[value in]" xpos 900 ypos 789 } Dot { name Dot13 note_font_size 41 xpos 934 ypos 868 } set N2aecc000 [stack 0] Dot { name Dot18 note_font_size 41 xpos 824 ypos 868 } set N342c8330 [stack 0] Project3D2 { inputs 2 name Project3D1 xpos 790 ypos 1243 } push $N131564e0 Axis2 { name AxisCamBoss xpos 1463 ypos 597 } Dot { name Dot8 xpos 1487 ypos 824 } push $N3434f600 Axis2 { useMatrix true matrix { {1 0 0 {-parent.cam_axis_vectors.result_depth_vector.x}} {0 1 0 {-parent.cam_axis_vectors.result_depth_vector.y}} {0 0 1 {-parent.cam_axis_vectors.result_depth_vector.z}} {0 0 0 1} } name AxisDepth xpos 1099 ypos 595 } Axis2 { useMatrix true matrix { {{parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix}} {{parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix}} {{parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix}} {{parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix} {parent.AxisBoss.world_matrix}} } name AxisInput xpos 1099 ypos 724 } set N3407b520 [stack 0] Axis2 { inputs 2 name Axis7 label "lookat absolute" xpos 1334 ypos 800 } set N343067d0 [stack 0] Dot { name Dot9 xpos 1358 ypos 966 } push $N343067d0 push $N3407b520 Axis2 { useMatrix true matrix { {{AxisBoss.world_matrix.0(parent.ref_frame)} {AxisBoss.world_matrix.4(parent.ref_frame)} {AxisBoss.world_matrix.8(parent.ref_frame)} 0} {{AxisBoss.world_matrix.1(parent.ref_frame)} {AxisBoss.world_matrix.5(parent.ref_frame)} {AxisBoss.world_matrix.9(parent.ref_frame)} 0} {{AxisBoss.world_matrix.2(parent.ref_frame)} {AxisBoss.world_matrix.6(parent.ref_frame)} {AxisBoss.world_matrix.10(parent.ref_frame)} 0} {0 0 0 1} } name AxisRotTransposed1 label "at ref frame" xpos 1191 ypos 808 } Axis2 { inputs 2 useMatrix true matrix { {{parent.Axis7.world_matrix(parent.ref_frame)} {parent.Axis7.world_matrix(parent.ref_frame)} {parent.Axis7.world_matrix(parent.ref_frame)} 0} {{parent.Axis7.world_matrix(parent.ref_frame)} {parent.Axis7.world_matrix(parent.ref_frame)} {parent.Axis7.world_matrix(parent.ref_frame)} 0} {{parent.Axis7.world_matrix(parent.ref_frame)} {parent.Axis7.world_matrix(parent.ref_frame)} {parent.Axis7.world_matrix(parent.ref_frame)} 0} {0 0 0 1} } look_strength 0 name Axis10 label "lookat rotations\nlook input but strength set to 0 to force recalculate..." xpos 1191 ypos 892 } push $N3407b520 Switch { inputs 3 which {{parent.face_cam}} name SwitchFaceCam xpos 1089 ypos 962 } Axis2 { look_strength 0 name AxisTweak label Post xpos 1099 ypos 1042 } set N344266b0 [stack 0] push $N342c8330 Dot { name Dot1 note_font_size 41 xpos 702 ypos 868 } Card2 { control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card1 xpos 668 ypos 1100 } TransformGeo { inputs 2 scaling {{parent.card_size} {parent.card_size} 1} name TransformGeo2 xpos 668 ypos 1165 } Dot { name Dot6 note_font_size 41 xpos 702 ypos 1208 } set N34408aa0 [stack 0] ApplyMaterial { inputs 2 name ApplyMaterial1 xpos 668 ypos 1243 } set N127fe430 [stack 0] Input { inputs 0 name Inputbg xpos -634 ypos 182 number 3 } Constant { inputs 0 channels rgb format "256 256 0 0 256 256 1 square_256" name Black xpos -497 ypos -97 postage_stamp false } Reformat { type "to box" box_width {{NoOpSize.width}} box_height {{NoOpSize.height}} box_fixed true name ReformatToVec xpos -497 ypos -71 } Switch { inputs 2 which 1 name Switchbg xpos -497 ypos 182 disable {{"!\[exists parent.input3] "}} } set N2e4fd440 [stack 0] Remove { name RemoveAll2 xpos 558 ypos 1307 } ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type distance name ScanlineRender2 xpos 668 ypos 1313 } MotionBlur3D { inputs 2 Z depth.Z shutter {{parent.Card3D1.shutter}} shutteroffset {{parent.Card3D1.shutteroffset}} shuttercustomoffset {{parent.Card3D1.shuttercustomoffset}} name MotionBlur3D1 xpos 668 ypos 1362 } VectorBlur { channels rgba uv motion scale {{parent.Card3D1.motionblur>0}} name VectorBlur1 xpos 668 ypos 1388 } Dot { name Dot22 note_font_size 41 xpos 702 ypos 1449 } push $N344266b0 push $N13cf36c0 push $N2aecc000 Card3D { inputs 3 translate {0 0 0} scaling {{parent.card_size} {parent.card_size} 1} shutteroffset centred name Card3D1 xpos 900 ypos 1164 } Switch { inputs 2 which {{parent.proj_mode}} name SwitchProject xpos 900 ypos 1445 } Dot { name Dot19 note_font_size 41 xpos 934 ypos 1789 } set N3449df60 [stack 0] DeepFromImage { premult true name DeepFromImage1 xpos 189 ypos 1785 } DeepExpression { temp_name0 ddt temp_expr0 "\[value parent.deep_thickness]" temp_name1 ddo temp_expr1 "\[value parent.deep_opacity]" chans1 deep rgba.alpha rgba.alpha*ddo deep.front deep.front-ddt/2 deep.back deep.back+ddt/2 name DeepExpSoften xpos 189 ypos 1811 } set N3441e1a0 [stack 0] Dot { name Dot21 note_font_size 41 xpos 84 ypos 1815 } DeepMerge { inputs 2 operation holdout name DeepMerge1 xpos 50 ypos 1907 disable {{"!(parent.deep_holdout && (\[exists parent.input4] || \[exists DotDeep.input0]))"}} } Dot { name DotDeepOut label DeepOut note_font_size 41 xpos 84 ypos 2147 } push $N2aed3110 Dot { name Dot3 label "\ncam" note_font "Bitstream Vera Sans Bold" note_font_size 12 xpos -1228 ypos 1319 hide_input true } push $N344266b0 Wireframe { inputs 0 operation "see through" line_width 2 name Wireframe2 xpos -1203 ypos 699 } Card2 { image_aspect false rows 2 columns 2 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name CardPreviewCtr xpos -1203 ypos 757 } Wireframe { inputs 0 operation "see through" line_width 0.3 line_color 0.5 name Wireframe1 xpos -1113 ypos 699 } Card2 { image_aspect false rows {{parent.grid_resolution}} columns {{parent.grid_resolution}} control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name CardPreview xpos -1113 ypos 756 } MergeGeo { inputs 2 name MergeGeo1 xpos -1113 ypos 794 } TransformGeo { inputs 2 scaling {{parent.card_size} {parent.card_size} 1} uniform_scale {{parent.grid_size}} name TransformGeo1 xpos -1113 ypos 1062 } push $N2e4fd440 Remove { name RemoveAll1 xpos -982 ypos 1309 } ScanlineRender { inputs 3 conservative_shader_sampling false antialiasing low motion_vectors_type distance name ScanlineRender1 xpos -1113 ypos 1315 } Dot { name Dot5 note_font_size 41 xpos -1079 ypos 2060 } push $N33de49a0 push $N3441e1a0 DeepHoldout2 { inputs 2 name DeepHoldout1 xpos 189 ypos 1861 } push $N3449df60 Switch { inputs 2 which {{"parent.deep_holdout && (\[exists parent.input4] || \[exists DotDeep.input0])"}} name SwitchDH xpos 900 ypos 1861 } Dot { name Dot7 note_font_size 41 xpos 934 ypos 2028 } push $N2e4fd440 Remove { name RemoveAll xpos -497 ypos 385 disable {{!(parent.out_mode!=1&&parent.out_mode!=2)}} } Merge2 { inputs 2 name MergeImg xpos -497 ypos 2024 disable {{parent.preview_mode==2}} } Merge2 { inputs 2 name MergeGrid label PREVIEW xpos -497 ypos 2050 disable {{parent.preview_mode==0}} } Dot { name DotImgOut label ImgOut note_font_size 41 xpos -463 ypos 2149 } Output { name Output1 xpos -497 ypos 2351 } push $N34091c40 FillMat { inputs 0 color 1 name FillMat1 xpos 1390 ypos 139 } push $N34387fa0 ApplyMaterial { inputs 2 name ApplyMat xpos 1280 ypos 139 } push $N2e4fd440 Remove { name RemoveAll3 xpos 1170 ypos 176 } ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type distance output_shader_vectors true P_channel P name SRGeo xpos 1280 ypos 182 } push $N2aed3110 push $N34387fa0 Shuffle { in P in2 rgba alpha alpha2 name ShuffleP label "\[value in]" xpos 941 ypos 242 } set N3463bed0 [stack 0] Shuffle { out depth name Shuffle1 label "\[value in]" xpos 1093 ypos 242 } Blur { channels rgba name Blur1 xpos 1093 ypos 280 } DepthToPosition { inputs 2 invert {{parent.in_vectors==1?parent.invert_depth:0}} name DepthToPosition1 xpos 1093 ypos 306 } Dot { name Dot4 note_font_size 41 xpos 1127 ypos 363 } push $N3463bed0 Switch { inputs 2 which 1 name SwitchDepth xpos 941 ypos 359 disable {{parent.in_vectors==0||parent.in_vectors==3}} } Unpremult { name Unpremult xpos 941 ypos 385 disable {{!parent.unpremult_p}} } NoOp { name PickVector knobChanged "n = nuke.thisNode()\nnuke.toNode(\"AxisBoss\")\[\"translate\"].setValue(n\[\"pick\"].value())" xpos 941 ypos 443 addUserKnob {20 PickVector} addUserKnob {18 pick} pick {0 0 0} addUserKnob {6 pick_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 pick_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 pick_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 pick_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } push $N127fe430 push $N34408aa0 Dot { name Dot12 note_font_size 41 xpos 419 ypos 1208 } Switch { inputs 2 which 1 name SwitchProjMode xpos 385 ypos 1243 disable {{!parent.proj_mode}} } Dot { name DotGeoOut label GeoOut note_font_size 41 xpos 419 ypos 2152 } push $N34387fa0 Switch { which 1 name SwitchInRes xpos -243 ypos -71 disable {{"parent.in_vectors != 3"}} } NoOp { name NoOpSize xpos -353 ypos -71 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_aPMatte_v2.gizmo ================================================ add_layer {P P.red P.green P.blue P.alpha} Group { name aPMatte help "aPMatte v2.0 by Adrian Pueyo\n\nCreates a matte of different shapes, based on a Position pass. Includes transformation and falloff controls, and the option to output or overlay a Position 4D noise.\n\nv2.0 has the code more optimized, new available shapes and modes, includes a 3D-space view of the matte and point cloud, and accepts an Axis or Camera input. Also, lets you preview the p-matte over an image input and merge the alpha with the incoming one.\n\nadrianpueyo.com, 2017-2019" onCreate "n = nuke.thisNode()\n\nfor k in \[\"radius\",\"card_scale\",\"noise_size\"]:\n n\[k].setFlag(0x00000004)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nkn = k.name()\n\nif kn in \['xpos','ypos','selected']:\n pass\nelif kn == \"shape\":\n ramp_on = k.value() in \['linear ramp', 'radial ramp']\n n\['radius'].setVisible(not ramp_on)\n n.knobs()\[\"black\"].setVisible(ramp_on)\n n\[\"axis\"].setVisible(k.value()==\"plane\")\n n\[\"card_scale\"].setVisible(k.getValue() in \[3,5] and n\[\"preview_in_3d\"].value())\n picker = n.knobs()\[\"picker\"]\n if ramp_on:\n picker.setLabel(\"white\")\n elif k.value() == \"plane\":\n picker.setLabel(\"pivot\")\n else:\n picker.setLabel(\"center\")\n\n # Connect Scene\n sc = nuke.toNode(\"SceneGeo\")\n kv = k.getValue()\n if kv in \[0,1,2]:\n sc.setInput(1,nuke.toNode(\"DotSphereCube\"))\n elif kv in \[3,5]:\n sc.setInput(1,nuke.toNode(\"DotPlanes\"))\n else:\n sc.setInput(1,nuke.toNode(\"DotRadialRamp\"))\n\nelif kn == \"use_axis\":\n ianame = \"Inputaxis\"\n if k.value():\n a = nuke.toNode(\"AxisInput\")\n if not nuke.exists(ianame):\n ia = nuke.nodes.Input(name=ianame)\n ia.setXYpos(a.xpos()-10,a.ypos()-60)\n a.setInput(0,ia)\n else:\n if nuke.exists(ianame):\n n.setInput(3,None)\n ia = nuke.toNode(ianame)\n nuke.delete(ia)\n\nelif kn == \"preview_in_3d\":\n kv = k.value()\n n.knobs()\[\"point_detail\"].setVisible(kv)\n n.knobs()\[\"point_size\"].setVisible(kv)\n n\[\"card_scale\"].setVisible(n\[\"shape\"].getValue() in \[3,5] and k.value())\n nuke.toNode(\"RenderPC\").setInput(1,nuke.toNode(\"SceneGeo\") if kv else None)\nelif kn == \"noise\":\n noise_on = k.value() != 'off'\n for t in \['noise_rel','noise_persistance','noise_octaves','noise_lacunarity','noise_size','noise_offset','noise_add','noise_gain','noise_gamma','noise_mix']:\n n\[t].setVisible(noise_on)\np_input = n.input(1) is not None\nn\[\"img_in\"].setEnabled(not p_input)\nn\[\"img_txt\"].setEnabled(not p_input)\nn.knobs()\[\"p_in\"].setEnabled(p_input)\nn.knobs()\[\"p_txt\"].setEnabled(p_input)\n" tile_color 0x898989ff selected true addUserKnob {20 aPMatte} addUserKnob {26 position_from l "" +STARTLINE T " Position from:"} addUserKnob {26 img_txt l img T " "} addUserKnob {41 img_in l "" -STARTLINE T ShuffleInImg.in} addUserKnob {26 p_txt l "P (optional)" +DISABLED T " "} addUserKnob {41 p_in l "" -STARTLINE +DISABLED T ShuffleIn.in} addUserKnob {6 premultiplied +STARTLINE} premultiplied true addUserKnob {6 alpha_masking l "alpha masking" t "Multiply the output by the input's alpha." -STARTLINE} addUserKnob {26 text l "" +STARTLINE} addUserKnob {4 outChannels l output M {alpha rgba ""}} addUserKnob {6 mergeAlpha l "merge with input alpha" -STARTLINE} addUserKnob {41 Channeloperation l "" -STARTLINE T ChannelMerge1.operation} addUserKnob {6 preview l "preview over image" +STARTLINE} preview true addUserKnob {26 ""} addUserKnob {4 shape M {sphere "cusped box" "rounded box" "linear ramp" "radial ramp" plane}} addUserKnob {4 axis l "" -STARTLINE +HIDDEN M {X Y Z "" "" "" ""}} axis Y addUserKnob {6 mirrored -STARTLINE} addUserKnob {6 invert -STARTLINE} addUserKnob {41 picker l center T BlinkScriptPMatte.picker} addUserKnob {6 use_axis l "use axis" -STARTLINE} addUserKnob {7 radius R 0.1 1000} radius 5 addUserKnob {41 black t "Black point of your ramp." +HIDDEN T BlinkScriptPMatte.black_point} addUserKnob {26 ""} addUserKnob {6 preview_in_3d l "preview in 3d space" t "Recreates a 3D-space preview of the point cloud and the P-matte. After activating this, simply press the Tab key on the active viewer to change to 3D space." +STARTLINE} addUserKnob {41 point_detail l "point detail" +HIDDEN T PositionToPointsPC.detail} addUserKnob {41 point_size l "point size" +HIDDEN T PositionToPointsPC.pointSize} addUserKnob {7 card_scale l "card scale" +HIDDEN R 0 100} card_scale 100 addUserKnob {26 ""} addUserKnob {4 falloff t "Fallof type for the matte." M {linear smooth quadratic cubic "inv. cubic" "" ""}} addUserKnob {7 hardness} addUserKnob {7 mix} mix 1 addUserKnob {26 ""} addUserKnob {41 xform_order l "transform order" T Axis.xform_order} addUserKnob {41 rot_order l "rotation order" T Axis.rot_order} addUserKnob {41 translate T Axis.translate} addUserKnob {41 rotate T Axis.rotate} addUserKnob {41 scaling l scale T Axis.scaling} addUserKnob {41 uniform_scale l "uniform scale" T Axis.uniform_scale} addUserKnob {41 skew T Axis.skew} addUserKnob {41 pivot T Axis.pivot} addUserKnob {22 reset_transformations l " reset transformations " T "a = nuke.toNode(\"Axis\")\na.readKnobs(\"xform_order SRT rot_order ZXY translate \{0 0 0\} rotate \{0 0 0\} scaling \{1 1 1\} uniform_scale 1 skew \{0 0 0\} pivot \{0 0 0\} useMatrix false\")" +STARTLINE} addUserKnob {26 ""} addUserKnob {4 noise t "overlay: uses the noise in overlay blend mode over the resulting mask, to make it more organic and less obvious for grading.\nnoise only: ignore the mask, output a 4D noise." M {off overlay "noise only" ""}} addUserKnob {6 noise_rel l relative t "On: Pick world transformations and positioning of the shape.\nOff: Pick absolute world transformations.\n\nTip: Check when you want the mask to always be affected by the same noise, uncheck when you want to lock the noise to your scene." -STARTLINE +HIDDEN} noise_rel true addUserKnob {7 noise_size l size t "Size of the noise pattern." +HIDDEN R 0 100} noise_size 10 addUserKnob {7 noise_offset l offset t "Spatial offset of the noise pattern (use to find a sweet spot for your matte)." +HIDDEN R 0 100} addUserKnob {3 noise_octaves l octaves t "Number of noise iterations." +HIDDEN} noise_octaves 8 addUserKnob {7 noise_lacunarity l lacunarity t "Each octave gets downscaled by this value." +HIDDEN R 0 10} noise_lacunarity 1.8 addUserKnob {7 noise_persistance l persistance t "Each octave gets multiplied by this value." +HIDDEN} noise_persistance 0.5 addUserKnob {7 noise_add l add t "Add a value to the noise." +HIDDEN} noise_add 0.5 addUserKnob {7 noise_gain l gain t "Multiply the resulting noise by this value." +HIDDEN R 0 4} noise_gain 1 addUserKnob {7 noise_gamma l gamma t "Gamma the resulting value." +HIDDEN R 0 4} noise_gamma 0.3 addUserKnob {7 noise_mix l mix +HIDDEN} noise_mix 1 addUserKnob {26 version_author l " " t "aPMatte v2.0\n24 Sep 2019" T "aPMatte v2.0 - adrianpueyo.com, 2015-2019"} addUserKnob {6 BlinkScriptPMatte_black_point_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Axis2 { inputs 0 display off selectable false translate {{parent.BlinkScriptPMatte.aPMatteKernel_picked} {parent.BlinkScriptPMatte.aPMatteKernel_picked} {parent.BlinkScriptPMatte.aPMatteKernel_picked}} name AxisPicked xpos 211 ypos 364 } Axis2 { display off selectable false useMatrix true matrix { {{parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix}} {{parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix}} {{parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix}} {{parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix}} } name AxisInputCopy1 xpos 211 ypos 430 } Axis2 { name Axis xpos 211 ypos 496 } Dot { name Dot18 note_font_size 41 xpos 235 ypos 635 } set N66176940 [stack 0] Axis2 { display off selectable false uniform_scale {{sqrt(pow2(BlinkScriptPMatte.aPMatteKernel_picked.x-BlinkScriptPMatte.aPMatteKernel_pickedB.x)+pow2(BlinkScriptPMatte.aPMatteKernel_picked.y-BlinkScriptPMatte.aPMatteKernel_pickedB.y)+pow2(BlinkScriptPMatte.aPMatteKernel_picked.z-BlinkScriptPMatte.aPMatteKernel_pickedB.z))}} name Axis2 xpos 211 ypos 870 } Card2 { inputs 0 display wireframe selectable false render_mode off cast_shadow false receive_shadow false image_aspect false rows 1 columns 1 uniform_scale {{parent.card_scale}} control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card2 xpos 617 ypos 438 } Dot { name Dot29 note_font_size 41 xpos 651 ypos 484 } set N5e5e2610 [stack 0] Dot { name Dot30 note_font_size 41 xpos 651 ypos 537 } Sphere { inputs 0 display wireframe selectable false render_mode off cast_shadow false receive_shadow false rows 6 columns 6 name Sphere2 xpos 709 ypos 438 } Dot { name Dot31 note_font_size 41 xpos 743 ypos 563 } push $N5e5e2610 Cube { inputs 0 display wireframe selectable false render_mode off cast_shadow false receive_shadow false rows 1 columns 1 cube {-1 -1 -1 1 1 1} name Cube1 xpos 523 ypos 438 } set N5e5d4630 [stack 0] Dot { name Dot20 note_font_size 41 xpos 591 ypos 484 } push $N5e5d4630 Sphere { inputs 0 display wireframe selectable false render_mode off cast_shadow false receive_shadow false rows 6 columns 6 name Sphere1 xpos 433 ypos 438 } Dot { name Dot21 note_font_size 41 xpos 467 ypos 499 } Switch { inputs 6 which {{parent.shape}} name SwitchShapeGeo xpos 523 ypos 559 } Dot { name Dot25 note_font_size 41 xpos 557 ypos 756 } set N66583fc0 [stack 0] Dot { name Dot28 note_font_size 41 xpos 331 ypos 756 } TransformGeo { inputs 2 selectable false name TransformGeoRadius1 xpos 297 ypos 890 } Dot { name DotRadialRamp label "\[value name]" note_font_size 12 xpos 331 ypos 922 } push $N66176940 Dot { name Dot26 note_font_size 41 xpos 466 ypos 635 } set N6656da50 [stack 0] Axis2 { display off selectable false uniform_scale {{parent.BlinkScriptPMatte.aPMatteKernel_radius}} name Axis1 xpos 442 ypos 868 } push $N66583fc0 TransformGeo { inputs 2 selectable false name TransformGeoAxis1 xpos 523 ypos 888 } Dot { name DotSphereCube label "\[value name]" note_font_size 12 xpos 557 ypos 967 } Input { inputs 0 name Inputimg xpos -528 ypos 176 } Dot { name Dot1 note_font_size 41 xpos -494 ypos 257 } set N5e602650 [stack 0] Dot { name Dot5 note_font_size 41 xpos -350 ypos 257 } set N5e61e4c0 [stack 0] Dot { name Dot4 note_font_size 41 xpos -240 ypos 257 } set N5e6112f0 [stack 0] Dot { name Dot6 note_font_size 41 xpos -157 ypos 257 } set N5e5e1ee0 [stack 0] Input { inputs 0 name InputP xpos -73 ypos 178 number 1 } set N5e60caf0 [stack 0] Dot { name Dot7 note_font_size 41 xpos 100 ypos 182 } Switch { inputs 2 which {{"\[exists parent.input0]"}} name SwitchAlpha label "\[value which]" xpos 66 ypos 247 } Dot { name Dot8 xpos 100 ypos 356 } push $N5e5e1ee0 Shuffle { in P in2 rgba alpha alpha2 name ShuffleInImg xpos -191 ypos 296 } push $N5e60caf0 Shuffle { in2 rgba alpha alpha2 name ShuffleIn xpos -73 ypos 225 } Switch { inputs 2 which {{"!\[exists parent.input1]"}} name Switch1 label "\[value which]" xpos -73 ypos 290 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy2 xpos -73 ypos 346 disable {{!parent.alpha_masking}} } Unpremult { name UnpremultP xpos -73 ypos 384 disable {{!parent.premultiplied}} } Dot { name Dot15 note_font_size 41 xpos -39 ypos 440 } set N5e5ba2d0 [stack 0] Dot { name Dot16 note_font_size 41 xpos -132 ypos 440 } Blur { channels rgba name Blur1 xpos -166 ypos 827 } Input { inputs 0 name Inputmask xpos -679 ypos 579 number 2 } Dot { name Dot14 note_font_size 41 xpos -645 ypos 629 } set N5e59d2b0 [stack 0] push $N5e5ba2d0 BlinkScript { recompileCount 9 ProgramGroup 1 KernelDescription "2 \"aPMatteKernel\" iterate pixelWise a9e2f4ce494401f56bb6fe8816e2389016c58248ae203f67227e1334a7acbe47 2 \"p\" Read Point \"dst\" Write Point 21 \"picked\" Float 3 AAAAAAAAAAAAAAAAAAAAAA== \"pickedB\" Float 3 AAAAAAAAAAAAAAAAAAAAAA== \"m\" Float 16 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== \"radius\" Float 1 AAAAAA== \"shape\" Int 1 AAAAAA== \"invert_shape\" Int 1 AAAAAA== \"use_alpha\" Int 1 AAAAAA== \"mirrored\" Int 1 AAAAAA== \"falloff\" Int 1 AQAAAA== \"hardness\" Float 1 AAAAAA== \"use noise\" Int 1 AAAAAA== \"noise_relative\" Int 1 AAAAAA== \"noise octaves\" Int 1 CAAAAA== \"noise persistence\" Float 1 AAAAPw== \"lacunarity\" Float 1 AAAAQA== \"noise scale\" Float 1 CtcjPA== \"noise_offset\" Float 1 AAAAAA== \"noise_add\" Float 1 AAAAAA== \"noise_gain\" Float 1 AAAAAA== \"noise_gamma\" Float 1 AAAAAA== \"noise_mix\" Float 1 AAAAAA== 21 \"picked\" 3 1 \"pickedB\" 3 1 \"m\" 16 1 \"radius\" 1 1 \"shape\" 1 1 \"invert_shape\" 1 1 \"use_alpha\" 1 1 \"mirrored\" 1 1 \"falloff\" 1 1 \"hardness\" 1 1 \"use_noise\" 1 1 \"noise_relative\" 1 1 \"noise_octaves\" 1 1 \"noise_persistence\" 1 1 \"noise_lacunarity\" 1 1 \"noise_scale\" 1 1 \"noise_offset\" 1 1 \"noise_add\" 1 1 \"noise_gain\" 1 1 \"noise_gamma\" 1 1 \"noise_mix\" 1 1 0" kernelSource "// ----------------------------------------------------------------\n// aPMatte v1.0 by Adrian Pueyo\n//\n// Generate a matte of different shapes, based on a Position pass.\n// Includes options to transform the mask and change its falloff.\n// Also includes the option to output or overlay a P-based noise.\n//\n// adrianpueyo.com, 2017-2019\n// ----------------------------------------------------------------\n\n\n// Noise algorithm adapted by Adrian Pueyo from Noise4D function by Mads Hagbarth Lund\n// Noise4D function Ported by Mads Hagbarth Lund 2014\n// Based on https://github.com/Draradech/csworldgen/blob/master/simplexnoise.cpp\n\n/* Copyright (c) 2007-2012 Eliot Eshelman\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n *\n */\n\n\nint fastfloor( const float x ) \{ return x > 0 ? (int) x : (int) x - 1; \}\ninline float raw_noise_4d( const float x, const float y, const float z, const float w ) \n\{\nint simplex\[64]\[4] = \{\n \{0,1,2,3\},\{0,1,3,2\},\{0,0,0,0\},\{0,2,3,1\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{1,2,3,0\},\n \{0,2,1,3\},\{0,0,0,0\},\{0,3,1,2\},\{0,3,2,1\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{1,3,2,0\},\n \{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\n \{1,2,0,3\},\{0,0,0,0\},\{1,3,0,2\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{2,3,0,1\},\{2,3,1,0\},\n \{1,0,2,3\},\{1,0,3,2\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{2,0,3,1\},\{0,0,0,0\},\{2,1,3,0\},\n \{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\n \{2,0,1,3\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{3,0,1,2\},\{3,0,2,1\},\{0,0,0,0\},\{3,1,2,0\},\n \{2,1,0,3\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{3,1,0,2\},\{0,0,0,0\},\{3,2,0,1\},\{3,2,1,0\}\n\};\n int perm\[512] = \{\n 151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,\n 8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,\n 35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,\n 134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,\n 55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208, 89,\n 18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,\n 250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,\n 189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,\n 172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,\n 228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,\n 107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,\n 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180,\n\n 151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,\n 8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,\n 35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,\n 134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,\n 55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208, 89,\n 18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,\n 250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,\n 189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,\n 172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,\n 228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,\n 107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,\n 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180\n \};\n int grad4\[32]\[4]= \{\n \{0,1,1,1\}, \{0,1,1,-1\}, \{0,1,-1,1\}, \{0,1,-1,-1\},\n \{0,-1,1,1\}, \{0,-1,1,-1\}, \{0,-1,-1,1\}, \{0,-1,-1,-1\},\n \{1,0,1,1\}, \{1,0,1,-1\}, \{1,0,-1,1\}, \{1,0,-1,-1\},\n \{-1,0,1,1\}, \{-1,0,1,-1\}, \{-1,0,-1,1\}, \{-1,0,-1,-1\},\n \{1,1,0,1\}, \{1,1,0,-1\}, \{1,-1,0,1\}, \{1,-1,0,-1\},\n \{-1,1,0,1\}, \{-1,1,0,-1\}, \{-1,-1,0,1\}, \{-1,-1,0,-1\},\n \{1,1,1,0\}, \{1,1,-1,0\}, \{1,-1,1,0\}, \{1,-1,-1,0\},\n \{-1,1,1,0\}, \{-1,1,-1,0\}, \{-1,-1,1,0\}, \{-1,-1,-1,0\}\n \};\n float F4 = (sqrt(5.0f)-1.0)/4.0;\n float G4 = (5.0-sqrt(5.0f))/20.0;\n float n0, n1, n2, n3, n4;\n float s = (x + y + z + w) * F4;\n int i = fastfloor(x + s);\n int j = fastfloor(y + s);\n int k = fastfloor(z + s);\n int l = fastfloor(w + s);\n float t = (i + j + k + l) * G4;\n float X0 = i - t;\n float Y0 = j - t;\n float Z0 = k - t;\n float W0 = l - t;\n\n float x0 = x - X0;\n float y0 = y - Y0;\n float z0 = z - Z0;\n float w0 = w - W0;\n int c1 = (x0 > y0) ? 32 : 0;\n int c2 = (x0 > z0) ? 16 : 0;\n int c3 = (y0 > z0) ? 8 : 0;\n int c4 = (x0 > w0) ? 4 : 0;\n int c5 = (y0 > w0) ? 2 : 0;\n int c6 = (z0 > w0) ? 1 : 0;\n int c = c1 + c2 + c3 + c4 + c5 + c6;\n\n int i1, j1, k1, l1;\n int i2, j2, k2, l2;\n int i3, j3, k3, l3;\n i1 = simplex\[c]\[0]>=3 ? 1 : 0;\n j1 = simplex\[c]\[1]>=3 ? 1 : 0;\n k1 = simplex\[c]\[2]>=3 ? 1 : 0;\n l1 = simplex\[c]\[3]>=3 ? 1 : 0;\n i2 = simplex\[c]\[0]>=2 ? 1 : 0;\n j2 = simplex\[c]\[1]>=2 ? 1 : 0;\n k2 = simplex\[c]\[2]>=2 ? 1 : 0;\n l2 = simplex\[c]\[3]>=2 ? 1 : 0;\n i3 = simplex\[c]\[0]>=1 ? 1 : 0;\n j3 = simplex\[c]\[1]>=1 ? 1 : 0;\n k3 = simplex\[c]\[2]>=1 ? 1 : 0;\n l3 = simplex\[c]\[3]>=1 ? 1 : 0;\n float x1 = x0 - i1 + G4;\n float y1 = y0 - j1 + G4;\n float z1 = z0 - k1 + G4;\n float w1 = w0 - l1 + G4;\n float x2 = x0 - i2 + 2.0*G4;\n float y2 = y0 - j2 + 2.0*G4;\n float z2 = z0 - k2 + 2.0*G4;\n float w2 = w0 - l2 + 2.0*G4;\n float x3 = x0 - i3 + 3.0*G4;\n float y3 = y0 - j3 + 3.0*G4;\n float z3 = z0 - k3 + 3.0*G4;\n float w3 = w0 - l3 + 3.0*G4;\n float x4 = x0 - 1.0 + 4.0*G4;\n float y4 = y0 - 1.0 + 4.0*G4;\n float z4 = z0 - 1.0 + 4.0*G4;\n float w4 = w0 - 1.0 + 4.0*G4;\n int ii = i & 255;\n int jj = j & 255;\n int kk = k & 255;\n int ll = l & 255;\n int gi0 = perm\[ii+perm\[jj+perm\[kk+perm\[ll]]]] % 32;\n int gi1 = perm\[ii+i1+perm\[jj+j1+perm\[kk+k1+perm\[ll+l1]]]] % 32;\n int gi2 = perm\[ii+i2+perm\[jj+j2+perm\[kk+k2+perm\[ll+l2]]]] % 32;\n int gi3 = perm\[ii+i3+perm\[jj+j3+perm\[kk+k3+perm\[ll+l3]]]] % 32;\n int gi4 = perm\[ii+1+perm\[jj+1+perm\[kk+1+perm\[ll+1]]]] % 32;\n float t0 = 0.6 - x0*x0 - y0*y0 - z0*z0 - w0*w0;\n if(t0<0) n0 = 0.0;\n else \{\n t0 *= t0;\n n0 = t0 * t0 * dot(float4(grad4\[gi0]\[0],grad4\[gi0]\[2],grad4\[gi0]\[3],grad4\[gi0]\[3]), float4(x0, y0, z0, w0));\n \}\n float t1 = 0.6 - x1*x1 - y1*y1 - z1*z1 - w1*w1;\n if(t1<0) n1 = 0.0;\n else \{\n t1 *= t1;\n n1 = t1 * t1 * dot(float4(grad4\[gi1]\[0],grad4\[gi1]\[2],grad4\[gi1]\[3],grad4\[gi1]\[3]), float4(x1, y1, z1, w1));\n \}\n float t2 = 0.6 - x2*x2 - y2*y2 - z2*z2 - w2*w2;\n if(t2<0) n2 = 0.0;\n else \{\n t2 *= t2;\n n2 = t2 * t2 * dot(float4(grad4\[gi2]\[0],grad4\[gi2]\[2],grad4\[gi2]\[3],grad4\[gi2]\[3]), float4(x2, y2, z2, w2));\n \}\n float t3 = 0.6 - x3*x3 - y3*y3 - z3*z3 - w3*w3;\n if(t3<0) n3 = 0.0;\n else \{\n t3 *= t3;\n n3 = t3 * t3 * dot(float4(grad4\[gi3]\[0],grad4\[gi3]\[2],grad4\[gi3]\[3],grad4\[gi3]\[3]), float4(x3, y3, z3, w3));\n \}\n float t4 = 0.6 - x4*x4 - y4*y4 - z4*z4 - w4*w4;\n if(t4<0) n4 = 0.0;\n else \{\n t4 *= t4;\n n4 = t4 * t4 * dot(float4(grad4\[gi4]\[0],grad4\[gi4]\[2],grad4\[gi4]\[3],grad4\[gi4]\[3]), float4(x4, y4, z4, w4));\n \}\n return 27.0 * (n0 + n1 + n2 + n3 + n4);\n\}\ninline float octave_noise_4d( const float octaves, const float persistence, const float scale, const float x, const float y, const float z, const float w, const float lacunarity=2 ) \n\{\n float total = 0;\n float frequency = scale;\n float amplitude = 1;\n float maxAmplitude = 0;\n for( int i=0; i < octaves; i++ ) \{\n total += (float)raw_noise_4d( x * frequency, y * frequency, z * frequency, w * frequency ) * amplitude;\n\n frequency *= lacunarity;\n maxAmplitude += amplitude;\n amplitude *= persistence;\n \}\n return float(total / maxAmplitude);\n\}\n\nkernel aPMatteKernel : ImageComputationKernel\n\{\n Image p;\n Image dst;\n\n param:\n float3 picked; //Center, or white for ramps\n float3 pickedB; //Black for ramps\n float4x4 m; //Camera or axis matrix.\n float radius;\n int shape; //0=sphere,1=cusped box,2=rounded box,3=ramp, 4=rad.ramp\n int invert_shape;\n int use_alpha;\n int mirrored;\n int falloff; //0=linear,1=smooth,2=square,3=inv.square\n float hardness;\n\n // Noise parameters here\n int use_noise; //0=off,1=overlay,2=noise only\n int noise_relative;\n int noise_octaves;\n float noise_persistence;\n float noise_lacunarity;\n float noise_scale;\n float noise_offset;\n float noise_add;\n float noise_gain;\n float noise_gamma;\n float noise_mix;\n\n void define() \{\n defineParam(falloff, \"falloff\", 1);\n defineParam(use_noise, \"use noise\", 0);\n defineParam(noise_octaves, \"noise octaves\", 8);\n defineParam(noise_persistence, \"noise persistence\", 0.5f);\n defineParam(noise_lacunarity, \"lacunarity\", 2.0f);\n defineParam(noise_scale, \"noise scale\", 0.01f);\n \}\n\n inline float rad(float deg)\{ \n return deg*PI/180;\n \}\n\n inline float smoothstep(float edge0, float edge1, float x)\{\n x = clamp((x - edge0)/(edge1 - edge0), 0.0f, 1.0f);\n return x*x*x*(x*(x*6-15)+10);\n \}\n\n inline float cl(float val)\{\n return clamp(val,0.0f,1.0f); \n \}\n\n\n void process() \{\n //1. P WORLD\n // Center the coordinates\n float3 color = float3(p(0)-picked.x,p(1)-picked.y,p(2)-picked.z);\n int black = 0;\n\n // Matrix!\n float4x4 mi = m;\n mi = mi.invert();\n for(int c = 0; c=1? float(result>0) : result;\n \} else if(shape==2)\{//Rounded Box\n result = radius==0.0f? 0: smoothstep(0,1-hardness, cl(1-fabs(float(color.x)/radius)) ) * smoothstep(0,1-hardness, cl(1-fabs(float(color.y)/radius)) ) * smoothstep(0,1-hardness, cl(1-fabs(float(color.z)/radius)) );\n result = hardness>=1? float(result>0) : result;\n \} else if(shape==3)\{//Linear Ramp\n dist = sqrt(pow(color\[0],2) + pow(color\[1],2) + pow(color\[2],2));\n float distB = sqrt(pow(color\[0]-(pickedB.x-picked.x),2) + pow(color\[1]-(pickedB.y-picked.y),2) + pow(color\[2]-(pickedB.z-picked.z),2));\n float distWB = sqrt(pow(pickedB.x-picked.x,2) + pow(pickedB.y-picked.y,2) + pow(pickedB.z-picked.z,2));\n float angWB = acos( clamp((pow(dist,2)-pow(distB,2)+pow(distWB,2))/(2*dist*distWB),-1.0f,1.0f) );\n float cosAngWB = dist==0.0f? 0:cos(angWB);\n result = distWB==0? 0.0f: cl((dist * cosAngWB) / distWB );\n result = 1-result;\n \} else if(shape==4)\{//Radial Ramp\n dist = sqrt(pow(color\[0],2) + pow(color\[1],2) + pow(color\[2],2));\n float distB = sqrt(pow(color\[0]-(pickedB.x-picked.x),2) + pow(color\[1]-(pickedB.y-picked.y),2) + pow(color\[2]-(pickedB.z-picked.z),2));\n float distWB = sqrt(pow(pickedB.x-picked.x,2) + pow(pickedB.y-picked.y,2) + pow(pickedB.z-picked.z,2));\n result = distWB==0? 0.0f: cl((dist) / distWB );\n result = 1-result;\n \}\n result = mirrored ? result*(1-result)*4:result;\n result = invert_shape? 1-result:result;\n\n //3. FALLOFF\n if(falloff==0)\{//Linear\n result = hardness>=1? float(result>0) : cl(result/(1-hardness));\n \}else if(falloff==1)\{//Smooth\n result = hardness>=1? float(result>0) : smoothstep(0,1-hardness,result);\n \}else if(falloff==2)\{//Quadratic\n result = hardness>=1? float(result>0) : cl(pow(float(result/(1-hardness)),2));\n \}else if(falloff==3)\{//Cubic\n result = hardness>=1? float(result>0) : cl(pow(float(result/(1-hardness)),3));\n \}else if(falloff==4)\{//Inv. Cubic\n result = hardness>=1? float(result>0) : 1-cl(pow(float(cl(1-(result/(1-hardness)))),3));\n \}\n\n //4. GENERATE NOISE\n float noise;\n if(use_noise!=0)\{//Avoid calculations if possible\n if(noise_relative!=1)\{\n noise = (float)octave_noise_4d(float(noise_octaves),noise_persistence,noise_scale==0?10000.0f:1/noise_scale,p(0),p(1),p(2),noise_offset,noise_lacunarity);\n \}else\{\n noise = (float)octave_noise_4d(float(noise_octaves),noise_persistence,noise_scale==0?10000.0f:1/noise_scale,color\[0],color\[1],color\[2],noise_offset,noise_lacunarity);\n \}\n noise = cl(pow(max((noise+noise_add)*noise_gain,0.0f),noise_gamma==0?1:1/noise_gamma));\n \}\n\n\n //5. ALPHA MASK AND APPLY NOISE\n result = max(result,0.0f); //Clamp negative values\n if(use_noise==1)\{//Overlay\n result = result<0.5f? noise_mix*(2*noise*result)+(1-noise_mix)*result : noise_mix*(1-2*(1-result)*(1-noise))+(1-noise_mix)*result;\n \}else if(use_noise>=2)\{\n result = noise*noise_mix;\n \}\n\n if(use_alpha > 0) result=result*p(3);\n\n //6. WE'RE DONE\n dst() = result;\n \}\n\};" useGPUIfAvailable false rebuild "" aPMatteKernel_picked {{(parent.shape==3&&parent.mirrored)?picker-(black_point-picker):(parent.shape==5&&parent.mirrored)?picker-radius:picker} {(parent.shape==3&&parent.mirrored)?picker-(black_point-picker):(parent.shape==5&&parent.mirrored)?picker-radius:picker} {(parent.shape==3&&parent.mirrored)?picker-(black_point-picker):(parent.shape==5&&parent.mirrored)?picker-radius:picker}} aPMatteKernel_pickedB {{parent.shape==5?parent.axis==0?picker+radius+0.0001:picker:black_point} {parent.shape==5?parent.axis==1?picker+radius+0.0001:picker:black_point} {parent.shape==5?parent.axis==2?picker+radius+0.0001:picker+0.00001:black_point}} group_aPMatteKernel_m 1 aPMatteKernel_m { {{parent.AxisCopy.world_matrix} {parent.AxisCopy.world_matrix} {parent.AxisCopy.world_matrix} {parent.AxisCopy.world_matrix}} {{parent.AxisCopy.world_matrix} {parent.AxisCopy.world_matrix} {parent.AxisCopy.world_matrix} {parent.AxisCopy.world_matrix}} {{parent.AxisCopy.world_matrix} {parent.AxisCopy.world_matrix} {parent.AxisCopy.world_matrix} {parent.AxisCopy.world_matrix}} {{parent.AxisCopy.world_matrix} {parent.AxisCopy.world_matrix} {parent.AxisCopy.world_matrix} {parent.AxisCopy.world_matrix}} } aPMatteKernel_radius {{parent.radius}} aPMatteKernel_shape {{parent.shape==5?3:parent.shape}} aPMatteKernel_invert_shape {{parent.invert}} aPMatteKernel_use_alpha {{parent.alpha_masking}} aPMatteKernel_mirrored {{parent.mirrored}} aPMatteKernel_falloff {{parent.falloff}} aPMatteKernel_hardness {{parent.hardness}} "aPMatteKernel_use noise" {{parent.noise}} aPMatteKernel_noise_relative {{parent.noise_rel}} "aPMatteKernel_noise octaves" {{parent.noise_octaves}} "aPMatteKernel_noise persistence" {{parent.noise_persistance}} aPMatteKernel_lacunarity {{parent.noise_lacunarity}} "aPMatteKernel_noise scale" {{parent.noise_size}} aPMatteKernel_noise_offset {{parent.noise_offset}} aPMatteKernel_noise_add {{parent.noise_add}} aPMatteKernel_noise_gain {{parent.noise_gain}} aPMatteKernel_noise_gamma {{parent.noise_gamma}} aPMatteKernel_noise_mix {{parent.noise_mix}} rebuild_finalise "" name BlinkScriptPMatte xpos -73 ypos 489 addUserKnob {20 User} addUserKnob {18 picker} picker {0 0 0} addUserKnob {6 picker_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 picker_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 black_point l black} black_point {0 0 0} addUserKnob {6 black_point_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 black_point_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} } Multiply { channels rgba value {{parent.mix}} name Multiply1 label "\[value value]" selected true xpos -73 ypos 553 } Dot { name Dot13 note_font_size 41 xpos -39 ypos 629 } set N5e791bc0 [stack 0] push $N5e6112f0 Merge2 { inputs 2+1 Achannels {rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -274 ypos 625 } Dot { name Dot9 xpos -240 ypos 894 } set N5e7b7690 [stack 0] PositionToPoints2 { inputs 2 display textured selectable false render_mode off detail 1 name PositionToPointsPC xpos -166 ypos 890 disable {{!parent.preview_in_3d}} } Scene { inputs 2 name SceneGeo xpos -156 ypos 983 disable {{!parent.preview_in_3d}} } ScanlineRender { inputs 0 conservative_shader_sampling false motion_vectors_type distance name RenderPC xpos -166 ypos 1102 disable {{!parent.preview_in_3d}} } Dot { name Dot17 note_font_size 41 xpos -132 ypos 1172 } push $N5e7b7690 push $N5e59d2b0 Dot { name Dot12 note_font_size 41 xpos -645 ypos 800 } set N5e77c6e0 [stack 0] Dot { name Dot11 note_font_size 41 xpos -645 ypos 844 } push $N5e791bc0 Dot { name Dot3 note_font_size 41 xpos -39 ypos 700 } set N5e77fe00 [stack 0] push $N5e61e4c0 ChannelMerge { inputs 2 name ChannelMerge1 xpos -384 ypos 684 } push $N5e77fe00 Dot { name Dot2 note_font_size 41 xpos -39 ypos 768 } Switch { inputs 2 which {{parent.mergeAlpha}} name Switch2 label "\[value which]" xpos -384 ypos 758 } Shuffle { red alpha green alpha blue alpha name ShuffleToRGBA tile_color 0xffffffff xpos -384 ypos 796 } set N5e799880 [stack 0] Dot { name Dot10 note_font_size 41 xpos -350 ypos 844 } push $N5e77c6e0 push $N5e799880 push $N5e602650 Copy { inputs 2+1 from0 rgba.alpha to0 rgba.alpha name CopyA xpos -528 ypos 790 } Copy { inputs 2+1 channels rgb name CopyRGB xpos -528 ypos 828 disable {{parent.outChannels==0}} } Copy { inputs 2 channels rgb name CopyPreview xpos -528 ypos 878 disable {{!parent.preview}} } Dissolve { inputs 2 channels rgba name DissolvePC xpos -528 ypos 1168 disable {{!parent.preview_in_3d}} } Output { name Output xpos -528 ypos 1254 } push $N6656da50 Dot { name Dot27 note_font_size 41 xpos 691 ypos 635 } set N5e75ebd0 [stack 0] Dot { name Dot24 note_font_size 41 xpos 994 ypos 635 } Axis2 { display off selectable false translate {{-parent.BlinkScriptPMatte.aPMatteKernel_picked} {-parent.BlinkScriptPMatte.aPMatteKernel_picked} {-parent.BlinkScriptPMatte.aPMatteKernel_picked}} name AxisPickedReversed xpos 970 ypos 719 } Axis2 { display off selectable false translate {{parent.BlinkScriptPMatte.aPMatteKernel_pickedB} {parent.BlinkScriptPMatte.aPMatteKernel_pickedB} {parent.BlinkScriptPMatte.aPMatteKernel_pickedB}} name AxisPickedBlack1 xpos 970 ypos 785 } set N6983e1a0 [stack 0] push $N5e75ebd0 Axis2 { display off selectable false name AxisWhite xpos 667 ypos 795 } set N698951b0 [stack 0] Dot { name Dot34 note_font_size 41 xpos 691 ypos 914 } push $N66583fc0 Dot { name Dot23 note_font_size 41 xpos 783 ypos 756 } set N69a30e40 [stack 0] TransformGeo { inputs 3 selectable false name TransformGeoWhite xpos 749 ypos 910 } push $N698951b0 push $N6983e1a0 Dot { name Dot33 note_font_size 41 xpos 994 ypos 913 } push $N69a30e40 Dot { name Dot32 note_font_size 41 xpos 909 ypos 756 } TransformGeo { inputs 3 name TransformGeo1 xpos 875 ypos 909 } Dot { name Dot19 note_font_size 41 xpos 909 ypos 940 } MergeGeo { inputs 2 selectable false name MergeGeo2 xpos 749 ypos 936 } Dot { name DotPlanes label "\[value name]" note_font_size 12 xpos 783 ypos 1011 } Axis2 { inputs 0 display off selectable false useMatrix true matrix { {{parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix}} {{parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix}} {{parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix}} {{parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix} {parent.AxisInput.world_matrix}} } name AxisInputCopy2 xpos 102 ypos 428 } Axis2 { display off useMatrix true matrix { {{parent.Axis.matrix} {parent.Axis.matrix} {parent.Axis.matrix} {parent.Axis.matrix}} {{parent.Axis.matrix} {parent.Axis.matrix} {parent.Axis.matrix} {parent.Axis.matrix}} {{parent.Axis.matrix} {parent.Axis.matrix} {parent.Axis.matrix} {parent.Axis.matrix}} {{parent.Axis.matrix} {parent.Axis.matrix} {parent.Axis.matrix} {parent.Axis.matrix}} } name AxisCopy xpos 102 ypos 494 } Axis2 { inputs 0 display off selectable false name AxisInput xpos 333 ypos 432 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_aeRefracTHOR.gizmo ================================================ Group { name aeRefracTHOR tile_color 0xa0500ff note_font "Verdana Bold" selected true addUserKnob {20 aeRefracTHOR} addUserKnob {26 text_6_1 l "Refraction"} addUserKnob {7 frontbackmix l "frontBack mix" t "This will control how much geo from the back and from the front will affect to the refraction.\n\nIf set to 1 only refract the light from the back of the geo.\nIf set to 0.5 both back and front light will have an effect.\nIf set to 1 only refract the light from the back of the geo."} frontbackmix 0.5 addUserKnob {7 refraction l distortion t "Control the amount of refraction distortion, you can set negative values too.\n\nLarge distortions may require a larger image to avoid cropping." R 0 500} refraction 250 addUserKnob {7 edge l "soft edges" t "Round and soft the distortion in the edges, simulates rounder surfaces." R 0 10} edge 5 addUserKnob {26 ""} addUserKnob {7 renderquality l "rende rquality" t "Increse the render quality of the scanline render and ray render to avoid edges issues.\nHigher quality increases waiting times." R 1 3} renderquality 1 addUserKnob {3 shutterSamples l "shutter samples" t "Increase the shutter samples to get more quality motion blur."} shutterSamples 1 addUserKnob {26 text l "" -STARTLINE T " "} addUserKnob {6 rebuilt l "rebuilt normals" t "This option allows rebuilt the normals of the geo, sometimes the geometry normals don't work properly" -STARTLINE} addUserKnob {26 ""} addUserKnob {26 text_6_1_1_1 l "Reflection"} addUserKnob {6 tint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 color_rgb_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {4 method l "ref method" t "Ray Render creates a more realistic reflection but sometimes creates black areas without reflection, the distortion method does not create those areas" M {"ray render" distortion "" "" "" "" ""}} method distortion addUserKnob {7 reflection t "Control the amount of reflection of the input map.\nIf there is no input map, it reflects a false map from the input image."} reflection 0.5 addUserKnob {7 rotate l "rotate map" t "This control allows rotate the input map." R -180 180} addUserKnob {26 ""} addUserKnob {7 fresnel t "This control allows to determine the Fresnel effect threshold."} fresnel 0.25 addUserKnob {7 power l amount t "Control the strength of the fresnel effect"} power 0.25 addUserKnob {26 ""} addUserKnob {26 text_6_1_1_1_1 l "Absorption"} addUserKnob {7 thickness t "This control allows you to edit the tickness of the glass to simulate a more complex refraction."} thickness 0.25 addUserKnob {7 light l absorption t "This control allows you to simulate an internal light absortion of the geo."} light 0.25 addUserKnob {7 amount_tint l tint} amount_tint 0.5 addUserKnob {18 tint l color t "This control allows you to tint the glass."} tint {0.4 0.9 0.8} addUserKnob {6 tint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 text_6 l "" -STARTLINE T " "} addUserKnob {6 tintabsolute l "tint absolute" t "This option allows the refraction to be completely tinted, without respecting the original colours." -STARTLINE} addUserKnob {26 ""} addUserKnob {26 text_6_1_1 l "Aberration"} addUserKnob {7 ab l aberration t "This control allows you to add chroma aberration. this option is disable with value 0, you can increase the value all of you want." R 0 2} addUserKnob {7 smooth t "This option allows the chroma aberration to be smoothed out if there are not enough samples."} addUserKnob {3 samples t "Increase the amount of samples to get more quality."} samples 10 addUserKnob {26 ""} addUserKnob {30 translate t "This control allows you to create the chroma aberration in the deserve way."} addUserKnob {26 text_5 l "" -STARTLINE T " "} addUserKnob {6 invert_spectrum t "This control allows you to invert the chroma spectum." -STARTLINE} addUserKnob {7 scale t "This control allows you to create other chroma aberration effects." R 0.1 2} scale 1 addUserKnob {12 center t "This control allows you to center the transform before."} center {960 540} addUserKnob {22 autocenter l center t "This option allows you to auto center the transform." -STARTLINE T "n = nuke.thisNode()\ntry:\n ni = n.input(0)\n n\[\"center\"].setValue(\[ni.width()/2,ni.height()/2])\nexcept:\n pass"} addUserKnob {26 ""} addUserKnob {26 about_1 l "" +STARTLINE T "
aeRefracTHOR v1.0 - Aitor Echeveste © 2021
"} addUserKnob {20 About} addUserKnob {26 text_1 l "" +STARTLINE T " "} addUserKnob {26 text_2 l "" +STARTLINE T " "} addUserKnob {26 text_4 l "" +STARTLINE T "aeRefracTHOR v1.0\n"} addUserKnob {26 about_1_1 l "" +STARTLINE T "by Aitor Echeveste Izquierdo © 2021"} addUserKnob {26 text_1_1 l "" +STARTLINE T " "} addUserKnob {26 ""} addUserKnob {26 text_3 l "" +STARTLINE T " "} addUserKnob {26 website l "" +STARTLINE T "www.aitorecheveste.com"} } Transform { inputs 0 translate {{parent.translate} {parent.translate}} scale {{parent.scale}} center {{parent.center} {parent.center}} motionblur {{parent.smooth}} shutter {{1/parent.samples}} shutteroffset centred name Transform17 label control xpos -1520 ypos 762 hide_input true } ColorLookup { inputs 0 use_precomputed false lut {master {} red {curve C 0 s0 x0.3128865659 1 s-0 v0.7904256582 x0.7806204557 -0.0007482314769 s0 u1.743535638 v1.742119074 x0.9418143034 0.06970721483 s-0.05000000075 x1 0 s0} green {curve C x0.1143286526 0 s0.01999999955 v1.837088585 x0.530087471 1 s-0.05000000075 u1.36422956 v1.120811939 x0.9743717909 0 s-0 u2.045060158} blue {curve C x0.6321670413 0 s0 x0.8160832524 0.99800843 s0 x1 0 s0} alpha {}} name CLP label "Natural Spectrum" xpos -1522 ypos 644 hide_input true } Input { inputs 0 name cam xpos -492 ypos 27 number 2 } Dot { name Dot16 xpos -458 ypos 231 } set N15214310 [stack 0] Camera { projection_mode {{"\[expression \[value the_cam]projection_mode(\[value the_frame])]"}} focal {{"\[expression \[value the_cam]focal(\[value the_frame])]"}} haperture {{"\[expression \[value the_cam]haperture(\[value the_frame])]"}} vaperture {{"\[expression \[value the_cam]vaperture(\[value the_frame])]"}} near {{"\[expression \[value the_cam]near(\[value the_frame])]"}} far {10000} win_translate {{"\[expression \[value the_cam]win_translate.u(\[value the_frame])]"} {"\[expression \[value the_cam]win_translate.v(\[value the_frame])]"}} win_scale {{"\[expression \[value the_cam]win_scale.u(\[value the_frame])]"} {"\[expression \[value the_cam]win_scale.v(\[value the_frame])]"}} winroll {{"\[expression \[value the_cam]winroll(\[value the_frame])]"}} focal_point {{"\[expression \[value the_cam]focal_point(\[value the_frame])]"}} fstop {{"\[expression \[value the_cam]fstop(\[value the_frame])]"}} name DummyCam2 help "DummyCam by Adrian Pueyo\n\nCamera that apart from the matrices also grabs all the \"Projection\" values from the upstream camera that it's connected to. Turns into a default Camera if no Camera connected. Can also be used inside of groups and gizmos, as many levels deep as you want :D All using live and super fast TCL.\n\nUpdated v1.1: Now grabs the correct frame too (thanks Erwan Leroy for the idea).\n\nUpdated v1.3: Now accepts Nuke13's Camera3\n\nadrianpueyo.com, 2019-2021" onCreate "n = nuke.thisNode()\nfor k in \[\"projection_mode\",\"focal\",\"haperture\",\"vaperture\",\"near\",\"far\",\"win_translate\",\"win_scale\",\"winroll\",\"focal_point\",\"fstop\"]:\n n\[k].setFlag(0x0000000010000000)" label "By Adrian Pueyo" xpos -600 ypos 207 addUserKnob {20 DummyCam l Defaults} addUserKnob {43 the_cam +INVISIBLE} the_cam "\[\n#DummyCam v1.3 - Updated 5 May 2021.\nset starting_point \"this.input0\"\nset default \"this.d_\"\n\n# If cam has no inputs, return the default.\nif \{\[exists \$starting_point]\} \{\n set x \[node \$starting_point]\n\} \{ \n return \$default\n\}\n\nset finished 0\nwhile \{\$finished != 1\} \{\n\n # First look for a Cam or Input or topnode.\n while \{\[class \$x] != \"Camera3\" && \[class \$x] != \"Camera2\" && \[class \$x] != \"Camera\" && \[class \$x] != \"Input\" && \$x != \[topnode \$x]\} \{\n set x \[node \$x.input0]\n \}\n\n # Then, check if node is a cam (and return), and otherwise, if it's an input, see if the parent exists and move to it.\n if \{\[class \$x]==\"Camera3\"||\[class \$x]==\"Camera2\"||\[class \$x]==\"Camera\"\} \{\n set x \[append x \".\"]\n return \$x\n \} \{ \n if \{ \[class \$x]==\"Input\" \} \{ \n set inp \"\$x.parent.input\"\n set inputNum \[value \$x.number]\n set inp \[append inp \$inputNum]\n if \{ \[exists \$inp] \} \{\n set x \[node \$inp]\n \} \{ \n set finished 1\n \}\n \} \{ \n set finished 1\n \}\n \}\n\}\nreturn \$default\n]" addUserKnob {43 the_frame +INVISIBLE} the_frame "\[\nset the_camera \[string trimright \[value the_cam] .]\nif \{\[exists \$the_camera]\} \{\n return \[value \$the_camera.frame]\n\} \{ \n return \[frame]\n\}\n]" addUserKnob {4 d_projection_mode l projection M {perspective orthographic uv spherical ""}} addUserKnob {7 d_focal l "focal length" R 0 100} d_focal 50 addUserKnob {7 d_haperture l "horiz aperture" R 0 50} d_haperture 24.576 addUserKnob {7 d_vaperture l "vert aperture" R 0 50} d_vaperture 18.672 addUserKnob {7 d_near l near R 0 10} d_near 0.1 addUserKnob {7 d_far l far R 0 10000} d_far 10000 addUserKnob {30 d_win_translate l "window translate"} addUserKnob {30 d_win_scale l "window scale"} d_win_scale {1 1} addUserKnob {7 d_winroll l "window roll" R 0 45} addUserKnob {7 d_focal_point l "focal distance" R 0 10} d_focal_point 2 addUserKnob {7 d_fstop l fstop R 0 30} d_fstop 16 addUserKnob {26 version l " " t "Updated 5 May 2021" T "
DummyCam v1.3 - adrianpueyo.com, 2019-2021
"} } Axis2 { name Axis1 xpos -600 ypos 293 } Camera2 { inputs 0 translate {-0.01637784764 0.09661245346 0.9382824898} useMatrix true matrix { {{parent.DummyCam2.world_matrix} {parent.DummyCam2.world_matrix} {parent.DummyCam2.world_matrix} {parent.DummyCam2.world_matrix}} {{parent.DummyCam2.world_matrix} {parent.DummyCam2.world_matrix} {parent.DummyCam2.world_matrix} {parent.DummyCam2.world_matrix}} {{parent.DummyCam2.world_matrix} {parent.DummyCam2.world_matrix} {parent.DummyCam2.world_matrix} {parent.DummyCam2.world_matrix}} {{parent.DummyCam2.world_matrix} {parent.DummyCam2.world_matrix} {parent.DummyCam2.world_matrix} {parent.DummyCam2.world_matrix}} } focal {{parent.DummyCam2.focal}} haperture {{parent.DummyCam2.haperture}} vaperture {{parent.DummyCam2.vaperture}} near {{parent.DummyCam2.far}} far 0.1 win_translate {{parent.DummyCam2.win_translate} {parent.DummyCam2.win_translate}} win_scale {{parent.DummyCam2.win_scale} {parent.DummyCam2.win_scale}} winroll {{parent.DummyCam2.winroll}} focal_point {{parent.DummyCam2.focal_point}} fstop {{parent.DummyCam2.fstop}} name Camera12 xpos -1063 ypos 523 } BasicMaterial { inputs 0 specular 0 name BasicMaterial3 xpos -953 ypos 439 } Input { inputs 0 name geo xpos -818 ypos 27 number 1 } Dot { name Dot28 xpos -784 ypos 203 } set N12b6a990 [stack 0] Dot { name Dot14 xpos -784 ypos 466 } set N148777b0 [stack 0] ApplyMaterial { inputs 2 name ApplyMaterial2 xpos -953 ypos 463 } Normals { action build name Normals2 xpos -953 ypos 504 disable {{!rebuilt}} } Reformat { inputs 0 type scale scale {{renderquality<1?1:parent.renderquality}} name Reformat3 xpos -827 ypos 544 hide_input true } set N13a17100 [stack 0] add_layer {P P.red P.green P.blue P.alpha P.X P.Y P.Z} add_layer {N N.red N.green N.blue N.alpha N.X N.Y N.Z} ScanlineRender { inputs 3 antialiasing high zblend_mode smooth samples {{parent.shutterSamples}} shutteroffset centred motion_vectors_type distance output_shader_vectors true P_channel P N_channel N name ScanlineRender7 xpos -953 ypos 544 } Reformat { type scale scale {{renderquality<1?1:1/parent.renderquality}} name Reformat4 xpos -953 ypos 590 } set N113b94b0 [stack 0] Dot { name Dot15 xpos -1347 ypos 593 } Dot { name Dot6 xpos -1347 ypos 2332 } set N13dc4380 [stack 0] Dot { name Dot21 xpos -1347 ypos 2415 } push $N13dc4380 push $N15214310 Dot { name Dot17 xpos -458 ypos 547 } BasicMaterial { inputs 0 specular 0 name BasicMaterial4 xpos -623 ypos 439 } push $N148777b0 ApplyMaterial { inputs 2 name ApplyMaterial4 xpos -623 ypos 463 } Normals { action build name Normals3 xpos -623 ypos 502 disable {{!rebuilt}} } push $N13a17100 ScanlineRender { inputs 3 antialiasing high zblend_mode smooth samples {{parent.shutterSamples}} shutteroffset centred motion_vectors_type distance output_shader_vectors true P_channel P N_channel N name ScanlineRender8 xpos -623 ypos 544 } Reformat { type scale scale {{renderquality<1?1:1/parent.renderquality}} name Reformat5 xpos -623 ypos 568 } set N151fc8b0 [stack 0] Dot { name Dot7 xpos -198 ypos 571 } set N15217b40 [stack 0] Dot { name Dot36 xpos 277 ypos 571 } set N150b6130 [stack 0] Shuffle { in P out rgb name P xpos 243 ypos 642 } Grade { add {{parent.Axis1.world_matrix.3} {parent.Axis1.world_matrix.7} {parent.Axis1.world_matrix.11} {curve}} reverse true black_clamp false name Grade2 xpos 243 ypos 1156 } Dot { name Dot23 xpos 277 ypos 1218 } set N150f2290 [stack 0] Dot { name Dot25 xpos 277 ypos 1266 } set N15110780 [stack 0] push $N150f2290 push $N151fc8b0 Shuffle { in N out rgb name NF xpos -623 ypos 625 } Dot { name Dot18 xpos -589 ypos 770 } set N115b5e70 [stack 0] MergeExpression { inputs 2 temp_name0 cosA temp_expr0 (Ar*Br+Ag*Bg+Ab*Bb)/(sqrt(Ar*Ar+Ag*Ag+Ab*Ab)*sqrt(Br*Br+Bg*Bg+Bb*Bb)) channel0 rgba expr0 (1+cosA) name fresnel xpos -627 ypos 1215 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy11 xpos -627 ypos 1257 } set N125ce050 [stack 0] Grade { white {{fresnel==0?0:power}} gamma {{lerp(0.01,0.25,fresnel)}} black_clamp false name Grade6 xpos -627 ypos 1354 } Expression { expr0 isnan(r)?0:r expr1 isnan(g)?0:g expr2 isnan(b)?0:b expr3 isnan(a)?0:a name NanToBlack xpos -627 ypos 1378 } Premult { name Premult3 xpos -627 ypos 1402 } Dot { name Dot24 xpos -593 ypos 1916 } push $N15110780 Grade { channels all white {{lerp(0,0.4,reflection)}} name Grade1 xpos 239 ypos 1665 } Dot { name Dot26 xpos 273 ypos 1748 } push $N150b6130 Dot { name Dot37 xpos 1170 ypos 571 } Shuffle { in N name Shuffle1 xpos 1136 ypos 1281 } Expression { temp_name0 h temp_expr0 -0.001 expr0 r+h expr1 g+h expr2 b+h name Expression1 xpos 1136 ypos 1305 } Expression { temp_name0 f1 temp_expr0 atan2(b,r) temp_name1 f2 temp_expr1 asin(g) expr0 "b > 0 ? f1 : (2*pi) + f1" expr1 f2 expr2 0 name normal_to_radian1 xpos 1136 ypos 1329 } Expression { expr0 r/(2*pi) expr1 (g+(pi/2))/pi expr2 0 name radian_to_UV1 xpos 1136 ypos 1353 } Input { inputs 0 name map xpos 801 ypos 1125 number 3 } Input { inputs 0 name img xpos -1613 ypos 25 } Dot { name Dot34 xpos -1579 ypos 159 } set N13e5a020 [stack 0] Dot { name Dot35 xpos 938 ypos 159 } Blur { size 10 name Blur5 xpos 911 ypos 1176 } Reformat { format "2048 1024 0 0 2048 1024 1 2K_LatLong" scale {1 1} resize distort name Reformat6 xpos 911 ypos 1212 } Switch { inputs 2 which 1 name Switch4 xpos 801 ypos 1218 disable {{"!\[exists input3]"}} } set N15151ac0 [stack 0] Tile { columns 5 name Tile1 xpos 1353 ypos 1218 } Transform { translate {{"((normalize*(center.x*2)) - center.x) % (center.x*2)"} {curve}} scale {-3 1} center {{input.width/2} {input.height/2}} name Transform1 xpos 1353 ypos 1242 addUserKnob {20 User} addUserKnob {7 iRotation R -180 180} iRotation {{parent.rotate}} addUserKnob {7 normalize l Normalize} normalize {{"(iRotation +180)/360"}} addUserKnob {41 center_1 l center T Transform1.center} addUserKnob {41 translate_1 l translate T Transform1.translate} } Grade { white 3 name Grade4 xpos 1353 ypos 1266 } STMap { inputs 2 uv rgb name STMap1 xpos 1353 ypos 1347 } Dot { name Dot38 xpos 1387 ypos 1475 } push $N15214310 Dot { name Dot2 xpos 495 ypos 231 } Dot { name Dot33 xpos 495 ypos 1378 } push $N15151ac0 Sphere { rotate {0 {parent.rotate} 0} uniform_scale 10000 name Sphere2 xpos 801 ypos 1274 } Reflection { inputs 0 reflection_color {3 3 3} reflection_color_panelDropped true name Reflection1 xpos 606 ypos 1189 hide_input true } push $N12b6a990 Dot { name Dot1 xpos 742 ypos 203 } ApplyMaterial { inputs 2 name ApplyMaterial5 xpos 708 ypos 1189 } Normals { action build name Normals1 xpos 708 ypos 1229 disable {{!rebuilt}} } Scene { inputs 2 name Scene1 xpos 718 ypos 1253 } Reformat { inputs 0 type scale scale {{renderquality<1?1:parent.renderquality}} name Reformat1 xpos 811 ypos 1375 hide_input true } add_layer {reflecton reflecton.red reflecton.green reflecton.blue reflecton.alpha} RayRender { inputs 3 triangle_intersection_epsilon 1e-07 samples {{parent.renderquality}} shutteroffset centred output_shader_vectors true remove_from_beauty false AOV_Reflection reflecton name RayRender2 xpos 708 ypos 1375 } Reformat { type scale scale {{renderquality<1?1:1/parent.renderquality}} name Reformat2 xpos 708 ypos 1399 } Switch { inputs 2 which {{method}} name Switch3 xpos 708 ypos 1472 } Colorspace { colorspace_out HSV name Colorspace1 xpos 708 ypos 1565 } Constant { inputs 0 channels rgb color {{parent.tint} {parent.tint} {parent.tint} {parent.tint}} color_panelDropped true name Constant1 xpos 799 ypos 1542 postage_stamp false } Constant { inputs 0 channels rgb color 1 name Constant8 xpos 903 ypos 1579 postage_stamp false } Dissolve { inputs 2 which {{amount_tint}} name Dissolve1 xpos 799 ypos 1566 } Colorspace { colorspace_out HSV name Colorspace3 xpos 799 ypos 1602 } Copy { inputs 2 from0 rgba.blue to0 rgba.blue name Copy1 xpos 708 ypos 1596 } Colorspace { colorspace_in HSV name Colorspace2 xpos 708 ypos 1640 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy10 xpos 708 ypos 1739 } Premult { name Premult4 xpos 708 ypos 1775 } Dot { name Dot13 xpos 742 ypos 1880 } push $N113b94b0 Dot { name Dot10 xpos -843 ypos 593 } Dot { name Dot9 xpos -843 ypos 695 } Shuffle { in depth name DB xpos -333 ypos 692 } push $N15217b40 Shuffle { in depth name DF xpos -232 ypos 657 } Merge2 { inputs 2 operation from name Merge3 xpos -232 ypos 692 } Grade { gamma {{lerp(0.01,5,light)}} name Grade3 xpos -232 ypos 822 } Colorspace { colorspace_out HSV name Colorspace4 xpos -232 ypos 960 } Constant { inputs 0 channels rgb color {{parent.tint} {parent.tint} {parent.tint} {parent.tint}} color_panelDropped true name Constant2 xpos -122 ypos 937 postage_stamp false } Constant { inputs 0 channels rgb color 1 name Constant9 xpos -22 ypos 967 postage_stamp false } Dissolve { inputs 2 which {{amount_tint}} name Dissolve4 xpos -122 ypos 961 } Colorspace { colorspace_out HSV name Colorspace5 xpos -122 ypos 997 } Copy { inputs 2 from0 rgba.blue to0 rgba.blue name Copy2 xpos -232 ypos 991 } Colorspace { colorspace_in HSV name Colorspace6 xpos -232 ypos 1035 } Shuffle { alpha blue name DB1 xpos -232 ypos 1059 } Dot { name Dot29 xpos -198 ypos 1808 } set N14bc68e0 [stack 0] Dot { name Dot8 xpos -198 ypos 1844 } push $N14bc68e0 push $N125ce050 Dot { name Dot5 xpos -869 ypos 1266 } ColorCorrect { contrast 1.25 gamma 0.2 gain {{lerp(0,5,thickness)}} name ColorCorrect1 xpos -903 ypos 1558 } Shuffle { alpha red name thickness xpos -903 ypos 1582 } Invert { name Invert1 xpos -903 ypos 1606 } set N14c031c0 [stack 0] ColorCorrect { gamma 0.2 name ColorCorrect2 xpos -903 ypos 1642 } Colorspace { colorspace_out HSV name Colorspace7 xpos -903 ypos 1679 } push $N14c031c0 Constant { inputs 0 channels rgb color 1 name Constant4 xpos -679 ypos 1612 postage_stamp false } Constant { inputs 0 channels rgb color {{parent.tint} {parent.tint} {parent.tint} {parent.tint}} color_panelDropped true name Constant3 xpos -775 ypos 1546 postage_stamp false } Constant { inputs 0 channels rgb color 1 name Constant7 xpos -678 ypos 1576 postage_stamp false } Dissolve { inputs 2 which {{amount_tint}} name Dissolve3 xpos -775 ypos 1570 } Keymix { inputs 3 mix {{lerp(1,0,thickness)}} name Keymix1 xpos -775 ypos 1606 } Colorspace { colorspace_out HSV name Colorspace8 xpos -775 ypos 1709 } Copy { inputs 2 from0 rgba.blue to0 rgba.blue name Copy5 xpos -903 ypos 1703 } Colorspace { colorspace_in HSV name Colorspace9 xpos -903 ypos 1739 } Clamp { name Clamp1 xpos -903 ypos 1763 } push $N113b94b0 Dot { name Dot3 xpos -919 ypos 638 } set N14cc6c40 [stack 0] Dot { name Dot4 xpos -1021 ypos 638 } Clamp { name Clamp2 xpos -1055 ypos 702 } set N14cd0d30 [stack 0] Erode { channels alpha size 10 name ErodeIn xpos -1055 ypos 762 } push $N14cd0d30 Erode { channels alpha size -10 name ErodeOut xpos -1165 ypos 702 } Merge2 { inputs 2 operation stencil name Merge2 xpos -1165 ypos 768 } Blur { channels alpha size 10 name Blur2 xpos -1165 ypos 814 } push $N115b5e70 Multiply { channels rgb value {{min(1,1+parent.frontbackmix)}} name Multiply1 xpos -824 ypos 767 } push $N14cc6c40 Shuffle { in N out rgb name NB xpos -953 ypos 693 } Multiply { channels rgb value {{min(1,1-parent.frontbackmix)}} name Multiply3 xpos -953 ypos 717 } Merge2 { inputs 2 operation plus Achannels rgb name Merge6 xpos -953 ypos 767 } Blur { inputs 1+1 channels rgb size {{parent.edge}} name Blur1 xpos -953 ypos 820 } Dot { name Dot19 xpos -919 ypos 1374 } push $N13e5a020 Dot { name Dot22 xpos -1579 ypos 408 } set N14d68500 [stack 0] Dot { name Dot32 xpos -1751 ypos 408 } Dot { name Dot30 xpos -1751 ypos 1187 } push $N14d68500 Remove { channels alpha name Remove1 xpos -1613 ypos 537 } NoTimeBlur { rounding none name NoTB xpos -1613 ypos 573 } add_layer {apChromaWeight apChromaWeight.red apChromaWeight.green apChromaWeight.blue apChromaWeight.alpha} AddChannels { channels apChromaWeight color 1 name AddChannels1 xpos -1613 ypos 597 } Multiply { value {{!parent.invert_spectrum?CLP.lut.red(TB.frf):CLP.lut.red(1-TB.frf)} {!parent.invert_spectrum?CLP.lut.green(TB.frf):CLP.lut.green(1-TB.frf)} {!parent.invert_spectrum?CLP.lut.blue(TB.frf):CLP.lut.blue(1-TB.frf)} {!parent.invert_spectrum?CLP.lut.red(TB.frf):CLP.lut.red(1-TB.frf)}} name Multiply2 xpos -1613 ypos 643 addUserKnob {20 User} addUserKnob {19 fullcolor} fullcolor {{!parent.invert_spectrum?CLP.lut.red(TB.frf):CLP.lut.red(1-TB.frf)} {!parent.invert_spectrum?CLP.lut.green(TB.frf):CLP.lut.green(1-TB.frf)} {!parent.invert_spectrum?CLP.lut.blue(TB.frf):CLP.lut.blue(1-TB.frf)} {!parent.invert_spectrum?CLP.lut.red(TB.frf):CLP.lut.red(1-TB.frf)}} addUserKnob {6 fullcolor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 fullcolor_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 fullcolor_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 fullcolor_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 fullcolor_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 fullcolor_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 fullcolor_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 fullcolor_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } Dot { name Dot20 note_font_size 41 xpos -1579 ypos 696 } set N14d93bf0 [stack 0] Dot { name Dot11 note_font_size 41 xpos -1671 ypos 696 } Dot { name Dot27 note_font_size 41 xpos -1671 ypos 927 } push $N14d93bf0 Remove { channels apChromaWeight name Remove3 xpos -1613 ypos 733 } Transform { translate {{parent.Transform17.translate*((TB.frf-0.5)*parent.ab)} {parent.Transform17.translate*((TB.frf-0.5)*parent.ab)}} rotate {{parent.Transform17.rotate*((TB.frf-0.5)*parent.ab)}} scale {{"parent.Transform17.scale*((TB.frf-0.5)*parent.ab) + 1 - ((TB.frf-0.5)*parent.ab) "} {"parent.Transform17.scale*((TB.frf-0.5)*parent.ab) + 1 - ((TB.frf-0.5)*parent.ab) "}} center {600 600} black_outside false motionblur {{parent.smooth}} shutter {{1/parent.samples}} shutteroffset centred name TransformI xpos -1613 ypos 769 } Blur { channels rgba name Blur3 xpos -1613 ypos 797 addUserKnob {20 User} addUserKnob {26 info l "" +STARTLINE T "needed to break concatenation and make sure mblur works with the stmaps"} } Copy { inputs 2 channels apChromaWeight name Copy4 xpos -1613 ypos 911 } TimeBlur { divisions {{parent.samples}} shutter 1 shutteroffset start shuttercustomoffset 0 name TB xpos -1613 ypos 993 addUserKnob {20 User} addUserKnob {7 frf} frf {{(frame%1)*(parent.samples+1)/parent.samples}} } set N152ab280 [stack 0] push $N152ab280 Shuffle { in apChromaWeight name Shuffle2 label "\[value in]" xpos -1512 ypos 987 } Dot { name Dot31 xpos -1478 ypos 1035 } Merge2 { inputs 2 operation divide bbox A metainput A rangeinput A name Merge5 xpos -1613 ypos 1032 } Switch { inputs 2 which {{ab==0?1:0}} name Switch2 xpos -1613 ypos 1184 } add_layer {REFRACTION REFRACTION.red REFRACTION.green REFRACTION.blue REFRACTION.alpha} ShuffleCopy { inputs 2 red red green green blue blue out REFRACTION name ShuffleCopy4 xpos -1613 ypos 1371 } IDistort { channels rgb uv REFRACTION uv_scale {{parent.refraction}} name IDistort10 xpos -1613 ypos 1395 } Merge2 { inputs 2 operation multiply mix 0.97 name Merge1 label thickness xpos -1613 ypos 1763 disable {{thickness==0?1:0}} } Blur { inputs 1+1 size {{lerp(0,25,light)}} name Blur4 xpos -1613 ypos 1799 } Merge2 { inputs 2 operation screen Achannels rgb name Merge4 label absortion xpos -1613 ypos 1835 disable {{light==0?1:0}} } Merge2 { inputs 2 Achannels rgb name Merge11 label reflection xpos -1613 ypos 1871 disable {{reflection==0?1:0 x1 1}} } Merge2 { inputs 2 operation plus Achannels rgb name Merge10 label fresnel xpos -1613 ypos 1907 disable {{fresnel==0?1:0 x1 1}} } Dot { name Dot12 xpos -1579 ypos 2091 } set N15356dc0 [stack 0] Colorspace { colorspace_out HSV name Colorspace10 xpos -1739 ypos 2088 } Constant { inputs 0 channels rgb color {{parent.tint} {parent.tint} {parent.tint} {parent.tint}} color_panelDropped true name Constant5 xpos -1849 ypos 2067 postage_stamp false } Constant { inputs 0 channels rgb color 1 name Constant6 xpos -1938 ypos 2097 postage_stamp false } Dissolve { inputs 2 which {{amount_tint}} name Dissolve2 xpos -1849 ypos 2091 } Colorspace { colorspace_out HSV name Colorspace11 xpos -1849 ypos 2127 } Copy { inputs 2 from0 rgba.blue to0 rgba.blue name Copy6 xpos -1739 ypos 2121 } Colorspace { colorspace_in HSV name Colorspace12 xpos -1739 ypos 2165 } push $N15356dc0 Switch { inputs 2 which {{tintabsolute}} name Switch1 xpos -1613 ypos 2165 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy3 xpos -1613 ypos 2323 } Premult { name Premult1 xpos -1613 ypos 2359 } CopyBBox { inputs 2 name CopyBBox1 xpos -1613 ypos 2412 } Output { name Output1 xpos -1613 ypos 2710 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_aeRelight2D.gizmo ================================================ Group { name aeRelight2D onCreate "n = nuke.thisNode()\nw = n.format().width()/2\nh = n.format().height()/2\ncenter = \[w,h]\n\nif n.knob('create').value()==False:\n n.knob('light').setValue(center)\n n.knob('create').setValue(1)" tile_color 0xa0500ff label "\[value Operations.menu2]" note_font "Verdana Bold" addUserKnob {20 aeRelight2D} addUserKnob {41 channels T Grade2.channels} addUserKnob {4 outputView l "Output View" M {"Final Output" "Light Only" Preview "" ""}} addUserKnob {26 ""} addUserKnob {26 text_6_1_1 l "Light"} addUserKnob {12 light l position t "Position of the light."} light {1712 1101} addUserKnob {7 lightsize l height t "Height of the light, you can illuminate the side of the image with values near to 0."} lightsize 0.1 addUserKnob {7 intensity t "The power of the light."} intensity 0.1 addUserKnob {7 falloff l soft t "Choose the falloff of the light."} falloff 0.5 addUserKnob {18 color l tint} color {1 1 1} addUserKnob {6 color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 color_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 color_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 color_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 color_rgb_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {26 text_6_1_2 l "Rotate"} addUserKnob {7 yoffset l horizontal t "Rotate the normals." R -90 90} addUserKnob {7 xzrot l vertical t "Rotate the normals." R -90 90} addUserKnob {26 _1_1 l "" +STARTLINE T " "} addUserKnob {26 text_6_1 l "Emboss"} addUserKnob {7 emboss l amount t "Control the emboss of the image, choose negative or positive values depends on the directionality of the light from your plate." R -5 5} emboss 5 addUserKnob {7 smooth t "Smooth the bump of the image." R 0 100} smooth 10 addUserKnob {7 blur t "Blurring the final result." R 0 100} blur 10 addUserKnob {26 _1_3 l "" +STARTLINE T " "} addUserKnob {26 ""} addUserKnob {26 _1 l "" +STARTLINE T " "} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T Merge1.maskChannelInput} addUserKnob {41 inject -STARTLINE T Merge1.inject} addUserKnob {41 invert_mask_1 l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge1.fringe} addUserKnob {7 mix} mix 1 addUserKnob {26 _1_2 l "" +STARTLINE T " "} addUserKnob {6 create +INVISIBLE +STARTLINE} addUserKnob {26 ""} addUserKnob {26 about_1 l "" +STARTLINE T "
aeRelight2D v1.5 - Aitor Echeveste © 2021
"} addUserKnob {20 About} addUserKnob {26 text_1 l "" +STARTLINE T " "} addUserKnob {26 text_2 l "" +STARTLINE T " "} addUserKnob {26 text_4 l "" +STARTLINE T "aeRelight2D v1.5\n"} addUserKnob {26 about_1_1 l "" +STARTLINE T "by Aitor Echeveste © 2021"} addUserKnob {26 text_1_1 l "" +STARTLINE T " "} addUserKnob {26 ""} addUserKnob {26 text_3 l "" +STARTLINE T " "} addUserKnob {26 website l "" +STARTLINE T "www.aitorecheveste.com"} } Axis2 { inputs 0 rot_order YXZ rotate {{parent.xzrot} {-degrees(parent.Plane.picked.g)} {parent.xzrot}} name Axis2 label V xpos 773 ypos -13 } Axis2 { inputs 0 rot_order YXZ rotate {0 {-parent.Axis2.rotate.y} 0} name Axis5 label V xpos 773 ypos 86 } Axis2 { inputs 0 rot_order YXZ rotate {0 {-parent.yoffset} 0} name Axis10 label H xpos 772 ypos -92 } Specular { inputs 0 white {{lerp(0.5,0.01,falloff)}} min_shininess 2 max_shininess 5 name Specular2 xpos 767 ypos 199 } Diffuse { white 0 name Diffuse1 xpos 767 ypos 223 } Camera2 { inputs 0 translate {{Operations.lpos*2/Operations.iformat} {Operations.lpos*2/Operations.iformat} {lerp(-0.99,0.5,lightsize)}} name Camera1 xpos 1041 ypos 202 } Light2 { inputs 0 light_type directional color {1 1 1} color_panelDropped true intensity {{lerp(0,50,parent.intensity)}} cone_angle 56 cone_penumbra_angle 60 depthmap_slope_bias 0.01 name Light2 xpos 969 ypos 136 } Input { inputs 0 name img xpos 429 ypos -500 addUserKnob {20 User} } set N4c49ab00 [stack 0] Saturation { saturation 0 name Saturation1 xpos 877 ypos -500 disable {{"!\[exists parent.input]"}} } Multiply { value {{-emboss}} name Multiply3 xpos 877 ypos -476 } NoOp { name Operations xpos 877 ypos -435 addUserKnob {20 User} addUserKnob {4 menu2 M {" " "(Light Only)" (Preview) (Emboss) "" ""}} menu2 {{parent.outputView}} addUserKnob {12 iformat} iformat {{input.width} {input.height}} addUserKnob {12 light2 l light} light2 {{parent.light} {parent.light}} addUserKnob {12 lpos} lpos {{light2-(iformat/2)} {light2-(iformat/2)}} } Dot { name Dot1 note_font_size 41 xpos 911 ypos -404 } set N4c498800 [stack 0] Dot { name Dot3 note_font_size 41 xpos 1016 ypos -404 } Matrix { matrix { {1 2 1} {0 0 0} {-1 -2 -1} } name Matrix2 xpos 982 ypos -275 } Blur { channels rgba size {{parent.smooth}} name Blur1 label "\[value size]" xpos 982 ypos -239 } push $N4c498800 Dot { name Dot2 note_font_size 41 xpos 817 ypos -404 } Matrix { matrix { {-1 0 1} {-2 0 2} {-1 0 1} } name Matrix1 xpos 783 ypos -325 } Blur { channels rgba size {{parent.smooth}} name Blur4 label "\[value size]" xpos 783 ypos -289 } push $N4c498800 Copy { inputs 2 from0 rgba.red to0 rgba.red name Copy1 xpos 877 ypos -289 disable {{"!\[exists parent.input]"}} } Copy { inputs 2 from0 rgba.green to0 rgba.green name Copy2 xpos 877 ypos -239 disable {{"!\[exists parent.input]" x163 1}} } Expression { temp_name0 magnitude temp_expr0 1-sqrt(r*r+g*g) expr2 magnitude name Expression2 xpos 877 ypos -195 } NoOp { name Plane xpos 877 ypos -171 addUserKnob {20 User} addUserKnob {18 pick l "User Picked Plane" R -1 1} pick {1 1 1} addUserKnob {6 pick_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 pick_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 pick_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 pick_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 calc l "Internal Conversions"} addUserKnob {18 picked} picked {0 {"(atan2(pick.r, pick.b))"} 0} addUserKnob {6 picked_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 picked_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 picked_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 picked_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { matrix { {{parent.Axis10.world_matrix.0} {parent.Axis10.world_matrix.1} {parent.Axis10.world_matrix.2}} {{parent.Axis10.world_matrix.4} {parent.Axis10.world_matrix.5} {parent.Axis10.world_matrix.6}} {{parent.Axis10.world_matrix.8} {parent.Axis10.world_matrix.9} {parent.Axis10.world_matrix.10}} } name ColorMatrix2 xpos 877 ypos -72 } ColorMatrix { matrix { {{parent.Axis2.world_matrix.0} {parent.Axis2.world_matrix.1} {parent.Axis2.world_matrix.2}} {{parent.Axis2.world_matrix.4} {parent.Axis2.world_matrix.5} {parent.Axis2.world_matrix.6}} {{parent.Axis2.world_matrix.8} {parent.Axis2.world_matrix.9} {parent.Axis2.world_matrix.10}} } name ColorMatrix3 xpos 877 ypos 7 disable {{parent.xzrot==0 x65 1}} } ColorMatrix { matrix { {{parent.Axis5.world_matrix.0} {parent.Axis5.world_matrix.1} {parent.Axis5.world_matrix.2}} {{parent.Axis5.world_matrix.4} {parent.Axis5.world_matrix.5} {parent.Axis5.world_matrix.6}} {{parent.Axis5.world_matrix.8} {parent.Axis5.world_matrix.9} {parent.Axis5.world_matrix.10}} } name ColorMatrix5 xpos 877 ypos 105 disable {{parent.xzrot==0 x65 1}} } ReLight { inputs 4 normal rgb name ReLight1 xpos 877 ypos 223 } Shuffle { in rgb in2 alpha red alpha green alpha blue alpha name Shuffle4 xpos 877 ypos 301 } Blur { channels rgba size {{blur}} name Blur2 label "\[value size]" xpos 877 ypos 325 } Multiply { value {{parent.mix}} name Multiply1 xpos 877 ypos 361 } Dot { name Dot8 xpos 911 ypos 447 } Dot { name Dot6 xpos 751 ypos 447 } set N318b6400 [stack 0] push $N4c49ab00 Dot { name Dot4 xpos 463 ypos 352 } set N318b5d00 [stack 0] Dot { name Dot5 xpos 564 ypos 352 } Grade { inputs 1+1 channels all multiply {3 1 1 1} multiply_panelDropped true name Grade1 xpos 530 ypos 444 } Input { inputs 0 name mask xpos 842 ypos 602 number 1 } push $N318b6400 Merge2 { inputs 2 operation mask also_merge all maskChannelInput -rgba.alpha name Merge1 xpos 717 ypos 596 disable {{"!\[exists parent.input1]" x65 1}} } Dot { name Dot7 xpos 751 ypos 686 } set Na4158800 [stack 0] Grade { channels rgba multiply {{parent.color+1} {parent.color+1} {parent.color+1} 1} name Grade2 xpos 717 ypos 796 } set Ca4158100 [stack 0] push $Na4158800 push $N318b5d00 clone $Ca4158100 { inputs 1+1 xpos 429 ypos 683 selected false } Dot { name Dot13 xpos 463 ypos 823 } Switch { inputs 3 which {{outputView}} name Switch1 xpos 717 ypos 820 } Output { name Output1 xpos 717 ypos 844 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_aeShadows.gizmo ================================================ Group { name aeShadows tile_color 0x262626ff label "\[value operationKnob]" note_font "Verdana Bold" selected true addUserKnob {20 aeShadows} addUserKnob {6 shadow_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {6 color_rgb_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {41 operationKnob l operation t "Add shadows\nRemove shadows" T control.operationKnob} addUserKnob {26 _1 l " " -STARTLINE T " "} addUserKnob {41 preview t "You can preview the shadow/light plate you need to create to achive a good result." -STARTLINE T control.preview} addUserKnob {26 ""} addUserKnob {41 rangeKnob l range t "Control the white point of the keyer.\nfor shadows you will need low values and for lights higher." T control.rangeKnob} addUserKnob {41 thresholdKnob l threshold t "Control the amount of erode will help to avoid imperfections." T control.thresholdKnob} addUserKnob {26 ""} addUserKnob {41 detailKnob l detail t "Size of the median, high values could be very heavy to process." T control.detailKnob} addUserKnob {41 postBlurKnob l "post blur" t "Add post blur could help to make the patch soften." T control.postBlurKnob} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelMask l "" -STARTLINE T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {26 ""} addUserKnob {26 about_1 l "" +STARTLINE T "
aeShadows v1.0 - Aitor Echeveste © 2024
"} addUserKnob {20 about l About} addUserKnob {26 text_1 l "" +STARTLINE T " "} addUserKnob {26 text_2 l "" +STARTLINE T " "} addUserKnob {26 text_4 l "" +STARTLINE T "aeShadows v1.0\n"} addUserKnob {26 about_1_1 l "" +STARTLINE T "by Aitor Echeveste © 2024"} addUserKnob {26 text_1_1 l "" +STARTLINE T " "} addUserKnob {26 ""} addUserKnob {26 text_3 l "" +STARTLINE T " "} addUserKnob {26 website l "" +STARTLINE T "www.aitorecheveste.com"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x8e8e8eff gl_color 0xccccccff label "\n copy/paste outside this backdrop - aeShadows" note_font_size 100 xpos 748 ypos 13 bdwidth 2926 bdheight 3881 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x757575ff label color note_font_size 42 xpos 1557 ypos 510 bdwidth 458 bdheight 1289 z_order 1 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x757575ff label detail note_font_size 42 xpos 2071 ypos 507 bdwidth 1189 bdheight 1775 z_order 1 } Input { inputs 0 name Img xpos 3078 ypos -805 } Dot { name Dot180 label img note_font_size 50 xpos 3112 ypos 291 } AddChannels { channels rgba name AddChannels1 xpos 3078 ypos 429 } Dot { name Dot133 xpos 3112 ypos 609 } set Nc4785e00 [stack 0] Dot { name Dot134 xpos 3516 ypos 608 } Dot { name Dot140 xpos 3516 ypos 2544 } set Nc470e400 [stack 0] Dot { name Dot141 xpos 3516 ypos 2798 } set Nc46fca00 [stack 0] Dot { name Dot135 xpos 3516 ypos 2911 } set Nc46ef800 [stack 0] Dot { name Dot147 xpos 3516 ypos 3395 } set Nc46cec00 [stack 0] Dot { name Dot136 xpos 3516 ypos 3587 } set Nc4651c00 [stack 0] Dot { name Dot137 xpos 3516 ypos 3615 } set Nc44bfc00 [stack 0] Dot { name Dot138 xpos 3516 ypos 3639 } push $Nc44bfc00 push $Nc4651c00 push $Nc4785e00 Dot { name Dot143 xpos 2562 ypos 609 } set Nc431a600 [stack 0] Dot { name Dot144 xpos 2131 ypos 609 } set Nc4066800 [stack 0] Dot { name Dot145 xpos 1836 ypos 609 } set Nc405e600 [stack 0] Dot { name Dot146 xpos 1666 ypos 609 } Keyer { operation "luminance key" range {{control.rangeKnob} 1 1 1} name Keyer34 xpos 1632 ypos 725 } Clamp { name Clamp12 xpos 1632 ypos 757 } Expression { temp_name0 rgb_an temp_expr0 "r !=0 || g!=0 || b!=0?1:0" temp_name1 rgba_an temp_expr1 "r!=0 || g!=0 || b!=0 || a!=0?1:0" temp_name2 alpha_an temp_expr2 a!=0?1:0 expr3 alpha_an name BinaryAlpha xpos 1632 ypos 789 } FilterErode { size 5 name FilterErode63 xpos 1632 ypos 837 } FilterErode { size -5 name FilterErode64 xpos 1632 ypos 869 } set Nc2660200 [stack 0] push $Nc2660200 FilterErode { size {{control.thresholdKnob*5}} name FilterErode1 xpos 1731 ypos 869 } Invert { channels rgba name Invert17 xpos 1731 ypos 952 } Switch { inputs 2 which {{!control.operationKnob}} name Switch4 xpos 1632 ypos 952 } FilterErode { size {{-control.thresholdKnob*5}} name FilterErode65 xpos 1632 ypos 1059 } set Nc24d2200 [stack 0] Roto { inputs 0 output alpha cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier1 512 bezier {{cc {f 8192} {px x42e60000 {x418cffad x41a51255} {x4519f000 x44720000} {xc18cffac xc1a51256} {x41d90f5a xbef1990d} {x45137000 x44620000} {xc1d90f5a x3ef19884} {x415cd887 xc1e55715} {x450b9000 x44730000} {xc15cd893 x41e55712} {xc177199b xc1eb918c} {x450cf000 x448c0000} {x41771993 x41eb918e} {xc1a4feaa xc2024250} {x4514f000 x449d4000} {x41a4feaa x42024250} {xbfb2deea xc1251c95} {x4518d000 x44b18000} {x3fb2def1 x41251c95} {x403e586a xc11fadc5} {x45169000 x44b54000} {xc03e5876 x411fadc4} {x413a1b81 xc27210ca} {x45133000 x44d74000} {xc13a1b8b x427210ca} {xc2a3d05a xc29a97ae} {x450d5000 x450ac000} {x42a3d058 x429a97b0} {xc26722de x4026a824} {x4538f000 x450f4000} {x426722de xc026a7f8} {xc0a9ed39 x4038e158} {x45479000 x45082000} {x40a9ed3a xc038e156} {x3e508a5e x40c15555} {x45489000 x4506c000} {xbe508a20 xc0c15555} {x4130ec6b x422c28fa} {x4546d000 x44e3c000} {xc130ec64 xc22c28fb} {x41d94dd4 x419b3793} {x45407000 x44ce4000} {xc1d94dd3 xc19b3795} {x41a9c7ec xc16b14d8} {x45371000 x44cd4000} {xc1a9c7ed x416b14d5} {xc05f345e xc1cc9ab7} {x4536b000 x44dbc000} {x405f3468 x41cc9ab7} {xc031dd64 xc12c2082} {x4539b000 x44f3c000} {x4031dd53 x412c2083} {x412c7844 xc02c7847} {x453a9000 x44f9c000} {xc12c7844 x402c7840} {x41c706fb xc11339d0} {x452c3000 x44fa8000} {xc1c706fd x411339c5} {x41337258 xc1390deb} {x45285000 x4503a000} {xc1337257 x41390dec} {x41532cbe x4113d282} {x45243000 x45058000} {xc1532cbc xc113d285} {xbf1a04af x41bbb5f1} {x45221000 x44fe8000} {x3f1a04eb xc1bbb5f1} {xbfee8303 x422f2865} {x4524f000 x44d08000} {x3fee833a xc22f2865} {x3f4d9b78 x41c49c5c} {x45239000 x44b80000} {xbf4d9b39 xc1c49c5c} {xc004ab8d x412c78a4} {x45245000 x44aa4000} {x4004ab94 xc12c78a4} {xbeddad4b x412f7eac} {x45257000 x44a48000} {x3eddad84 xc12f7eac} {x413a3d4d x41a5365f} {x4524b000 x44974000} {xc13a3d4a xc1a53661} {x419197da x41ccd89b} {x451db000 x44890000} {xc19197d8 xc1ccd89d}}} idem} {tx x42e60000 x45274c92 x44ccd925} {a osw x41200000 osf 0 str 1 spx x44800000 spy x44428000 sb 1 ltn x42e60000 ltm x42e60000 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {1024 778} colorOverlay {0 0 0 0} lifetime_type "all frames" lifetime_start 115 lifetime_end 115 motionblur_shutter_offset_type centred source_black_outside true name Roto2 xpos 2165 ypos 453 } Constant { inputs 0 channels rgb color {0.03644358367 0.03223683313 0.04865816236 0} name Constant1 xpos 2059 ypos 359 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 2059 ypos 466 } Premult { name Premult1 xpos 2059 ypos 498 } push $Nc405e600 Merge2 { inputs 2 bbox B name Merge5 xpos 1802 ypos 690 } Inpaint2 { inputs 2 fillRegion "Matte Alpha" smoothness 20 center {960 540} name Inpaint14 xpos 1802 ypos 1063 } Dot { name Dot2 xpos 1836 ypos 1506 } set Nd7024800 [stack 0] Dot { name Dot1 xpos 1836 ypos 3515 } Input { inputs 0 name mask xpos 2865 ypos 3317 number 2 } Dot { name Dot7 xpos 2899 ypos 3395 } push $Nc46ef800 Dot { name Dot3 xpos 3248 ypos 2912 } set Nc2192c00 [stack 0] Dot { name Dot4 xpos 3248 ypos 2958 } set Nc2130c00 [stack 0] Dot { name Dot5 xpos 3248 ypos 3009 } set Nc2129e00 [stack 0] Dot { name Dot8 xpos 3358 ypos 3010 } push $Nc2129e00 push $Nc2130c00 Input { inputs 0 name matte xpos 1109 ypos -845 number 1 } Dot { name Dot179 label matte note_font_size 50 xpos 1143 ypos 299 } Dot { name Dot139 xpos 1143 ypos 1138 } set Nd7048e00 [stack 0] Dot { name Dot142 xpos 1143 ypos 2912 } push $Nc24d2200 Invert { channels alpha name Invert19 xpos 1632 ypos 2487 } FilterErode { size 4 filter gaussian name FilterErode66 xpos 1632 ypos 2519 } FilterErode { size 8 filter gaussian name FilterErode67 xpos 1632 ypos 2551 } FilterErode { size 16 filter gaussian name FilterErode68 xpos 1632 ypos 2583 } FilterErode { size 32 filter gaussian name FilterErode69 xpos 1632 ypos 2615 } Blur { channels alpha size 20 name Blur65 xpos 1632 ypos 2647 } Dot { name Dot148 xpos 1666 ypos 2799 } push $Nc46fca00 push $Nc470e400 Dot { name Dot149 xpos 3254 ypos 2545 } set Nd7042c00 [stack 0] Dot { name Dot150 xpos 3254 ypos 2586 } push $Nd7024800 Blur { channels rgb size 150 name Blur66 xpos 1920 ypos 1503 } Expression { expr3 1 name Expression7 xpos 1920 ypos 1527 } Dot { name Dot165 xpos 1954 ypos 1691 } push $Nd7048e00 push $Nc2660200 Dot { name Dot170 xpos 1352 ypos 876 } Merge2 { inputs 2 operation multiply bbox B also_merge all name Merge55 xpos 1318 ypos 1135 } Group { name EdgeFromAlpha7 note_font Verdana xpos 1318 ypos 1209 mapsize {0.15 0.15} addUserKnob {20 "" l Settings} addUserKnob {41 from0 l "control channel" T Copy2.from0} addUserKnob {41 output T ChannelMerge4.output} addUserKnob {41 blackpoint T Grade1.blackpoint} addUserKnob {41 whitepoint T Grade1.whitepoint} addUserKnob {26 "" l "edge size"} addUserKnob {41 size l inside T ErodeInside.size} addUserKnob {14 ErodeOutside_size l outside R 0 100} addUserKnob {26 "" l "edge blur"} addUserKnob {41 size_3 l inside T BlurInside.size} addUserKnob {41 size_1 l outside T BlurOutside.size} } Input { inputs 0 name Input1 xpos -448 ypos 2 } AddChannels { channels {rgba.red -rgba.green -rgba.blue rgba.alpha} name AddChannels1 xpos -448 ypos 30 } set Nd7067400 [stack 0] push $Nd7067400 Copy { inputs 2 from0 rgba.alpha to0 rgba.red name Copy2 xpos -193 ypos 30 } Clamp { channels {rgba.red -rgba.green -rgba.blue none} name Clamp1 xpos -193 ypos 94 } Grade { channels {rgba.red -rgba.green -rgba.blue none} black_clamp false name Grade1 xpos -193 ypos 146 } set Nd7069e00 [stack 0] Erode { channels {none none none rgba.red} size 50 name ErodeInside xpos -126 ypos 198 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size 50 name BlurInside xpos -126 ypos 250 } push $Nd7069e00 Erode { channels {none none none rgba.red} size {{-parent.ErodeOutside_size.w} {-parent.ErodeOutside_size.h}} name ErodeOutside xpos -264 ypos 199 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size 50 name BlurOutside xpos -264 ypos 251 } ChannelMerge { inputs 2 A rgba.red operation stencil B rgba.red name ChannelMerge4 xpos -191 ypos 308 } set Nd7070c00 [stack 0] Dot { name Dot1 xpos -52 ypos 324 } Dot { name Dot2 xpos -52 ypos 465 } push $Nd7067400 Dot { name Dot3 xpos -414 ypos 416 } push $Nd7070c00 Copy { inputs 2 from0 rgba.red to0 rgba.red name Copy1 xpos -191 ypos 407 } Switch { inputs 2 which {{"parent.output == 1" i}} name Switch1 xpos -191 ypos 463 } Output { name Output1 xpos -191 ypos 526 } end_group set Nd7066e00 [stack 0] push $Nc4066800 ColorCorrect { saturation 0.25 name ColorCorrect10 xpos 2097 ypos 732 } Dot { name Dot171 xpos 2131 ypos 961 } set Nd707b800 [stack 0] Dot { name Dot172 xpos 2266 ypos 961 } Median { size {{control.detailKnob>0?int(control.detailKnob/2):0}} ignore_top_line false name Median15 xpos 2232 ypos 1080 } Dot { name Dot173 xpos 2266 ypos 1219 } push $Nd707b800 Median { size {{control.detailKnob>0?int(control.detailKnob):0}} ignore_top_line false name Median12 xpos 2097 ypos 1078 } Keymix { inputs 3 bbox B name Keymix15 xpos 2097 ypos 1212 } Dot { name Dot174 xpos 2131 ypos 1556 } set Nd707d400 [stack 0] Merge2 { inputs 2 name Merge54 xpos 2097 ypos 1688 } Dot { name Dot175 xpos 2131 ypos 2164 } push $Nd7066e00 Dot { name Dot176 xpos 1352 ypos 1912 } push $Nc431a600 EdgeDetectWrapper { threshold 0.6 name EdgeDetect1 xpos 2528 ypos 1116 } Expression { temp_name0 rgb_an temp_expr0 "r !=0 || g!=0 || b!=0?1:0" temp_name1 rgba_an temp_expr1 "r!=0 || g!=0 || b!=0 || a!=0?1:0" temp_name2 alpha_an temp_expr2 a!=0?1:0 expr3 alpha_an name BinaryAlpha13 xpos 2528 ypos 1148 } FilterErode { size -5 name FilterErode61 xpos 2528 ypos 1172 } FilterErode { size 5 name FilterErode62 xpos 2528 ypos 1204 } Blur { channels alpha size 10 name Blur67 xpos 2528 ypos 1236 } Merge2 { inputs 2 operation multiply also_merge all name Merge59 xpos 2528 ypos 1909 } push $Nc4785e00 ColorCorrect { saturation 0.25 name ColorCorrect11 xpos 3078 ypos 725 } push $Nd707d400 Merge2 { inputs 2 operation divide also_merge all name Merge56 xpos 3078 ypos 1553 } Blur { inputs 1+1 channels rgb size 5 name Blur68 xpos 3078 ypos 1909 } Merge2 { inputs 2 operation multiply name Merge57 xpos 3078 ypos 2161 } Dot { name Dot177 xpos 3111 ypos 2468 } set Nc72d1200 [stack 0] Dot { name Dot178 xpos 3010 ypos 2468 } Merge2 { inputs 2 operation max mix 0.95 name Merge58 xpos 2976 ypos 2583 } push $Nd7042c00 push $Nc72d1200 Merge2 { inputs 2 operation min mix 0.95 name Merge66 xpos 3078 ypos 2542 } Switch { inputs 2 which {{control.operationKnob}} name Switch1 xpos 3078 ypos 2632 } Keymix { inputs 3 name Keymix11 xpos 3078 ypos 2792 } push $Nc2192c00 Keymix { inputs 3 bbox B name Keymix12 xpos 3078 ypos 2905 } Merge2 { inputs 2 operation from name Merge1 xpos 3078 ypos 2955 } Blur { channels rgba size 1.5 name Blur1 xpos 3078 ypos 2979 } Merge2 { inputs 2 operation plus name Merge2 xpos 3078 ypos 3006 } Dot { name Dot6 xpos 3112 ypos 3060 } set N3082c400 [stack 0] Merge2 { inputs 2 operation from name Merge4 xpos 3324 ypos 3057 } push $N3082c400 push $Nc2129e00 Merge2 { inputs 2 operation from name Merge3 xpos 3214 ypos 3057 } Switch { inputs 2 which {{control.operationKnob}} name Switch3 xpos 3214 ypos 3103 } Expression { expr3 clamp(r+g+b) name Expression1 xpos 3214 ypos 3127 } Grade { channels alpha blackpoint 0.05 white_clamp true name Grade1 xpos 3214 ypos 3151 } Expression { temp_name0 rgb_an temp_expr0 "r !=0 || g!=0 || b!=0?1:0" temp_name1 rgba_an temp_expr1 "r!=0 || g!=0 || b!=0 || a!=0?1:0" temp_name2 alpha_an temp_expr2 a!=0?1:0 expr3 alpha_an name BinaryAlpha12 xpos 3214 ypos 3183 } Blur { size 25 name Blur2 xpos 3214 ypos 3207 } push $N3082c400 Blur { inputs 1+1 channels rgba size {{parent.control.postBlurKnob}} name Blur69 label "\npost blur" xpos 3078 ypos 3202 } push $Nc46cec00 Merge2 { inputs 2+1 operation copy also_merge all name MergeKeymix label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 3078 ypos 3392 } Switch { inputs 2 which {{control.preview}} name Switch2 xpos 3078 ypos 3512 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy7 xpos 3078 ypos 3581 } CopyBBox { inputs 2 name CopyBBox1 xpos 3078 ypos 3613 } CopyMetaData { inputs 2 name CopyMetaData1 xpos 3078 ypos 3637 } Output { name Output1 xpos 3078 ypos 4272 } MergeExpression { inputs 0 temp_name0 add temp_expr0 b-a temp_name1 remove name MergeExpression1 xpos 3560 ypos 3053 } push $Nd7048e00 NoOp { name control label "\n\n\n\nknob control\n\n\n" note_font "Verdana Bold" note_font_size 35 selected true xpos 937 ypos 1024 addUserKnob {20 User} addUserKnob {4 operationKnob l operation M {add remove "" "" "" "" "" "" "" ""}} addUserKnob {26 _1 l " " -STARTLINE T " "} addUserKnob {6 preview -STARTLINE} addUserKnob {26 ""} addUserKnob {7 rangeKnob l range R 0 0.5} rangeKnob 0.25 addUserKnob {7 thresholdKnob l threshold R 0 10} thresholdKnob 5 addUserKnob {26 ""} addUserKnob {7 detailKnob l detail R 0 10} detailKnob 5 addUserKnob {7 postBlurKnob l "post blur" R 0 5} postBlurKnob 2.5 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_apChroma.gizmo ================================================ Group { name apChroma help "Advanced chromatic drift gizmo, that works through a sub-frame blend of different values on an STMap and Transform, while creating a color spectrum.\n\napChroma v1.1\nadrianpueyo.com" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nkn = k.name()\nif kn == \"monochrome\":\n k.setValue(min(1,max(0,k.value())))\nelif kn == \"output_dist_matte\":\n n.knob(\"output_matte_channel\").setEnabled(k.value())" tile_color 0x736efdff selected true addUserKnob {20 apChroma} addUserKnob {26 text l " Transform"} addUserKnob {41 translate T Transform17.translate} addUserKnob {41 rotate T Transform17.rotate} addUserKnob {41 scale T Transform17.scale} addUserKnob {41 center T Transform17.center} addUserKnob {22 center_on_input l "center on input" -STARTLINE T "n = nuke.thisNode()\ntry:\n ni = n.input(0)\n n\[\"center\"].setValue(\[ni.width()/2,ni.height()/2])\nexcept:\n pass"} addUserKnob {7 smooth l "smooth" t "Helps keep a lower sample number for large distortions by adding motion blur. The higher this value, the higher the motion blur quality.\n\nFor typical aberrations this won't be needed, so better avoid smoothing when possible by keeping it 0, as it is super heavy to compute!"} addUserKnob {41 invert_matrix l invert T Transform17.invert_matrix} addUserKnob {6 black_outside l "black outside" t "When disabled, the edges of your image will be extended in the aberration instead of seeing black entering through the first frequencies." -STARTLINE} addUserKnob {22 create_uv_map l " Create UV Map " T "n = nuke.thisNode()\nn.end()\nns = nuke.selectedNodes()\n\[i.setSelected(False) for i in ns]\ntry:\n uv = nuke.nodes.NST_UV_Map()\n isExpression = False\nexcept:\n uv = nuke.nodes.Expression()\n isExpression = True\nuv.setXYpos(n.xpos()+140, n.ypos()-100)\nuv.setSelected(True)\nif isExpression:\n uv\[\"expr0\"].setValue(\"(x+0.5)/width\")\n uv\[\"expr1\"].setValue(\"(y+0.5)/height\")\nn.setInput(1,uv)\nd = nuke.createNode(\"Dot\")\nd.hideControlPanel()\nd.setYpos(int(n.ypos()+n.screenHeight()/2 - d.screenHeight()/2))\nuv.setSelected(False)\nd.setSelected(False)\n\[i.setSelected(True) for i in ns]" +STARTLINE} addUserKnob {26 breathe l "" +STARTLINE T " "} addUserKnob {26 text_1 l " Settings"} addUserKnob {3 samples} samples 10 addUserKnob {7 ab l aberration t "This drives the amount of color aberration.\n0 = No aberration at all, works as regular STMap.\n1 = Amount of aberration equal to the values of the input UV Map." R 0 2} ab 1 addUserKnob {7 compensate t "Inverse the values of the distortion map so that the overall effect stays at the same position." R -1 1} compensate 1 addUserKnob {7 monochrome t "With the same amount of \"color leak\", this desaturates the spectrum in that leak.\nAt value 1, the effect is similar to a directional blur."} addUserKnob {14 overscan R 0 100} addUserKnob {6 invert_spectrum l "invert spectrum" +STARTLINE} addUserKnob {6 calculate_multi_alpha l "calculate per-channel alpha" t "Also generates a channel layer called apChroma wich includes the transformed alphas for each of the rgba channels. This is necessary if you want to merge the result of this node onto a background. You'll need apChromaMerge or a similar gizmo in order to perform the special merge." -STARTLINE} calculate_multi_alpha true addUserKnob {6 process_alpha l "process single alpha from" t "If activated, the multi-channel alpha will get combined into a regular alpha that you can use for normal operations after this node." +STARTLINE} process_alpha true addUserKnob {41 mode l "" -STARTLINE T Saturation1.mode} addUserKnob {6 output_dist_matte l "output distortion matte" t "Useful if you want to add a grading or iBlur afterwards, driven by the amount of chromatic aberration." +STARTLINE} addUserKnob {41 output_matte_channel l "" -STARTLINE T CopyAlpha.to0} addUserKnob {26 breathe3 l "" +STARTLINE T " "} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l "mask " T MergeRGB.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeRGB.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeRGB.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeRGB.fringe} addUserKnob {41 mix T MergeRGB.mix} addUserKnob {26 version_author l "" t "apChroma v1.1\n2016-2019" +STARTLINE T "
apChroma v1.1 - adrianpueyo.com, 2016-2019
"} addUserKnob {20 Spectrum} addUserKnob {41 lut l "" +STARTLINE T CLP.lut} addUserKnob {22 lutPrepare l INVISIBLE +INVISIBLE T "n = nuke.thisNode()\ntry:\n n.knob(\"lut\").delCurve(\"master\")\n n.knob(\"lut\").delCurve(\"alpha\")\nexcept:\n pass" +STARTLINE} addUserKnob {52 lutPrepareGo T "nuke.thisNode()\[\"lutPrepare\"].execute()" +STARTLINE} } ColorLookup { inputs 0 use_precomputed false lut {red {curve C 0 s0 x0.3128865659 1 s-0 v0.7904256582 x0.7806204557 -0.0007482314769 s0 u1.743535638 v1.742119074 x0.9418143034 0.06970721483 s-0.05000000075 x1 0 s0} green {curve C x0.1143286526 0 s0.01999999955 v1.837088585 x0.530087471 1 s-0.05000000075 u1.36422956 v1.120811939 x0.9743717909 0 s-0 u2.045060158} blue {curve C x0.6321670413 0 s0 x0.8160832524 0.99800843 s0 x1 0 s0}} name CLP label "Natural Spectrum" xpos 137 ypos -191 } ColorLookup { inputs 0 channels rgb lut {master {} red {"CLP.lut.red * (1-parent.monochrome) + parent.monochrome" C 0 1} green {"CLP.lut.green * (1-parent.monochrome) + parent.monochrome" C 0 1} blue {"CLP.lut.blue * (1-parent.monochrome) + parent.monochrome" C 0 1} alpha {"CLP.lut.alpha * (1-parent.monochrome) + parent.monochrome" C 0 1}} name CL label monochrome xpos 27 ypos -149 } Merge2 { inputs 0 operation copy Achannels {{{parent.MergeCopyChroma.Achannels}}} Bchannels none output {{{parent.MergeCopyChroma.Achannels}}} name MergeChosen xpos -209 ypos -368 hide_input true } Input { inputs 0 name Inputmask label "\[value number]" xpos -498 ypos 483 number 2 } Dot { name Dot25 note_font_size 41 xpos -464 ypos 651 } set Nd69fcd80 [stack 0] Dot { name Dot21 xpos -464 ypos 689 } set Nd69fd230 [stack 0] Dot { name Dot24 note_font_size 41 xpos -464 ypos 799 } Input { inputs 0 name Inputimg xpos -388 ypos -554 } NoTimeBlur { rounding none name NoTB xpos -388 ypos -528 } AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox xpos -388 ypos -502 } set N157998b0 [stack 0] Dot { name Dot1 xpos -47 ypos -498 } set N2789dd90 [stack 0] Expression { expr0 (x+0.5)/width expr1 (y+0.5)/height expr2 0 name ExpressionUVDefault xpos 118 ypos -502 } Input { inputs 0 name Inputuv xpos 279 ypos -558 number 1 } Switch { inputs 2 which 1 name SwitchUV xpos 279 ypos -502 disable {{"\[exists parent.input1]"}} } NoTimeBlur { rounding none name NoTB1 xpos 279 ypos -476 } Dot { name Dot3 note_font_size 41 xpos 313 ypos -275 } set Nef3c8fa0 [stack 0] Dot { name Dot11 note_font_size 41 xpos 447 ypos -275 } Remove { name Remove1 xpos 413 ypos -257 } Expression { expr0 (x+0.5)/width expr1 (y+0.5)/height expr2 0 expr3 0 name ExpressionUV xpos 413 ypos -219 } Dot { name Dot13 note_font_size 41 xpos 447 ypos -183 } set N1c3c5170 [stack 0] Dot { name Dot15 note_font_size 41 xpos 690 ypos -183 } set Nc66aed0 [stack 0] Multiply { channels {rgba.red rgba.green -rgba.blue none} value {{1-parent.ab} {1-parent.ab} 1 1} name Multiply6 xpos 656 ypos -97 } Dot { name Dot16 xpos 690 ypos -38 } push $Nef3c8fa0 Dot { name Dot27 note_font_size 41 xpos 214 ypos -275 } Dot { name Dot5 note_font_size 41 xpos 214 ypos -233 } push $Nef3c8fa0 Merge2 { inputs 2 operation copy name Merge3 xpos 279 ypos -237 } Dot { name Dot8 note_font_size 41 xpos 313 ypos -164 } set N2d176a60 [stack 0] Dot { name Dot14 note_font_size 41 xpos 600 ypos -164 } Multiply { channels {rgba.red rgba.green -rgba.blue none} value {{parent.ab} {parent.ab} 0 0} name Multiply5 xpos 566 ypos -98 } Merge2 { inputs 2 operation plus bbox B output rgb name Merge4 xpos 566 ypos -42 } Transform { center {1024 576} motionblur {{parent.smooth}} shutter {{1/parent.samples}} shutteroffset centred name Transform17 label control xpos 566 } set Nc67a5a0 [stack 0] push $Nc66aed0 Dot { name Dot18 note_font_size 41 xpos 831 ypos -183 } CopyBBox { inputs 2 name CopyBBox1 xpos 797 ypos 6 } Dot { name Dot19 xpos 831 ypos 77 } push $Nc67a5a0 Merge2 { inputs 2 operation difference bbox B name Merge5 xpos 566 ypos 73 } Expression { expr3 sqrt(pow2(r)+pow2(g)) name ExpressionDiff xpos 566 ypos 117 } Dot { name Dot9 xpos 600 ypos 440 } set Nc608e20 [stack 0] push $Nc608e20 push $N2789dd90 Dot { name Dot2 note_font_size 41 xpos -47 ypos -453 } set Nc6022a0 [stack 0] Dot { name Dot17 note_font_size 41 xpos 31 ypos -453 } Dot { name Dot26 note_font_size 41 xpos 31 ypos -364 } push $Nc6022a0 add_layer {apChroma apChroma.red apChroma.green apChroma.blue apChroma.alpha} Shuffle { alpha white black alpha white alpha red2 alpha out2 {apChroma.red apChroma.green apChroma.blue -apChroma.alpha} name ShuffleAlpha1 xpos -81 ypos -418 } Merge2 { inputs 2 operation copy Achannels {{{parent.MergeCopyChroma.Achannels}}} Bchannels none name MergeGetChroma xpos -81 ypos -368 disable {{"\[\nif \{ \[lsearch -exact \[channels \[input this 1]] \[lindex \[channels MergeChosen] 0]] >= 0\} \{\n return 0\n\} else \{\n return 1\n\}\n]"}} } Remove { channels apChroma name Remove_apChroma xpos -81 ypos -278 disable {{parent.calculate_multi_alpha}} } add_layer {apChromaWeight apChromaWeight.red apChromaWeight.green apChromaWeight.blue apChromaWeight.alpha} AddChannels { channels apChromaWeight color 1 name AddChannels1 xpos -81 ypos -240 } Multiply { value {{!parent.invert_spectrum?CL.lut.red(TB.frf):CL.lut.red(1-TB.frf)} {!parent.invert_spectrum?CL.lut.green(TB.frf):CL.lut.green(1-TB.frf)} {!parent.invert_spectrum?CL.lut.blue(TB.frf):CL.lut.blue(1-TB.frf)} {!parent.invert_spectrum?CL.lut.red(TB.frf):CL.lut.red(1-TB.frf)}} name Multiply1 xpos -81 ypos -189 addUserKnob {20 User} addUserKnob {19 fullcolor} fullcolor {{!parent.invert_spectrum?CLP.lut.red(TB.frf):CLP.lut.red(1-TB.frf)} {!parent.invert_spectrum?CLP.lut.green(TB.frf):CLP.lut.green(1-TB.frf)} {!parent.invert_spectrum?CLP.lut.blue(TB.frf):CLP.lut.blue(1-TB.frf)} {!parent.invert_spectrum?CLP.lut.red(TB.frf):CLP.lut.red(1-TB.frf)}} addUserKnob {6 fullcolor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Dot { name Dot6 note_font_size 41 xpos -47 ypos -141 } set N278a1c10 [stack 0] Dot { name Dot7 note_font_size 41 xpos -139 ypos -141 } Dot { name Dot10 note_font_size 41 xpos -139 ypos 90 } push $N2d176a60 Multiply { channels {rgba.red rgba.green -rgba.blue none} value {{"(TB.frf-.5)*parent.ab + 0.5*(1-parent.compensate)"} {"(TB.frf-.5)*parent.ab + 0.5*(1-parent.compensate)"} 0 0} name Multiply3 xpos 279 ypos -146 } Dot { name Dot12 note_font_size 41 xpos 313 ypos -108 } push $N1c3c5170 Multiply { channels {rgba.red rgba.green -rgba.blue none} value {{"(1- ((TB.frf-.5)*parent.ab + 0.5*(1-parent.compensate)) )" i} {"(1- ((TB.frf-.5)*parent.ab + 0.5*(1-parent.compensate)) )" i} 1 1} name Multiply4 xpos 413 ypos -145 } Merge2 { inputs 2 operation plus Achannels {rgba.red rgba.green -rgba.blue -rgba.alpha} Bchannels {rgba.red rgba.green -rgba.blue -rgba.alpha} output {rgba.red rgba.green -rgba.blue -rgba.alpha} name Merge1 xpos 413 ypos -112 } Dot { name Dot4 xpos 447 ypos 43 } push $N278a1c10 Remove { channels apChromaWeight name Remove3 xpos -81 ypos -104 } Transform { translate {{"parent.Transform17.translate*((TB.frf-0.5)*parent.ab+ 0.5*(1-parent.compensate))"} {"parent.Transform17.translate*((TB.frf-0.5)*parent.ab+ 0.5*(1-parent.compensate))"}} rotate {{"parent.Transform17.rotate*((TB.frf-0.5)*parent.ab+ 0.5*(1-parent.compensate))"}} scale {{"parent.Transform17.scale*((TB.frf-0.5)*parent.ab+ 0.5*(1-parent.compensate)) + 1 - ((TB.frf-0.5)*parent.ab+ 0.5*(1-parent.compensate)) "} {"parent.Transform17.scale*((TB.frf-0.5)*parent.ab+ 0.5*(1-parent.compensate)) + 1 - ((TB.frf-0.5)*parent.ab+ 0.5*(1-parent.compensate)) "}} center {{parent.Transform17.center} {parent.Transform17.center}} invert_matrix {{parent.Transform17.invert_matrix}} black_outside {{parent.black_outside}} motionblur {{parent.smooth}} shutter {{1/parent.samples}} name TransformI xpos -81 ypos -66 } Blur { channels rgba name Blur1 xpos -81 ypos -40 disable true addUserKnob {20 User} addUserKnob {26 info l "" +STARTLINE T "needed to break concatenation and make sure mblur works with the stmaps"} } STMap { inputs 2 uv rgb blur_scale 0 name STMap1 xpos -81 ypos 33 disable {{"!\[exists parent.input1]"}} } Copy { inputs 2 channels apChromaWeight name Copy2 xpos -81 ypos 74 } TimeBlur { divisions {{parent.samples}} shutter 1 shutteroffset start shuttercustomoffset 0 name TB xpos -81 ypos 124 addUserKnob {20 User} addUserKnob {7 frf} frf {{(frame%1)*(parent.samples+1)/parent.samples}} } set N469fb90 [stack 0] push $N469fb90 Shuffle { in apChromaWeight name Shuffle2 label "\[value in]" xpos 89 ypos 118 } set Nc1012d0 [stack 0] Merge2 { inputs 2 operation divide bbox A metainput A rangeinput A Achannels apChroma output apChroma name Merge6 xpos 89 ypos 261 } push $N469fb90 push $Nc1012d0 Merge2 { inputs 2 operation divide bbox A metainput A rangeinput A name Merge2 xpos -81 ypos 196 } Copy { inputs 2 channels apChroma name Copy3 xpos -81 ypos 255 } Dot { name Dot29 note_font_size 41 xpos -47 ypos 323 } set N2cc299e0 [stack 0] Shuffle { in apChroma name Shuffle1 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat → \[value out2]] \}]" xpos 43 ypos 313 } Saturation { saturation 0 name Saturation1 xpos 43 ypos 359 } push $N2cc299e0 Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy5 xpos -81 ypos 353 } Copy { inputs 2 from0 rgba.alpha to0 apChroma.alpha from1 -rgba.alpha to1 -rgba.alpha bbox B name Copy1 xpos -81 ypos 424 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name CopyAlpha1 xpos -81 ypos 493 disable {{!parent.output_dist_matte}} } Dot { name Dot22 note_font_size 41 xpos -47 ypos 651 } set Nf4c48100 [stack 0] Dot { name Dot20 xpos -47 ypos 689 } set N2cc908e0 [stack 0] Dot { name Dot28 note_font_size 41 xpos -47 ypos 742 } set N2cc95a80 [stack 0] Dot { name Dot23 note_font_size 41 xpos -47 ypos 799 } push $N2cc95a80 push $Nd69fd230 push $N2cc908e0 push $Nd69fcd80 push $Nf4c48100 push $N157998b0 Dot { name Dot30 note_font_size 41 xpos -354 ypos 428 } set Nf0d9f20 [stack 0] AddChannels { channels rgba name AddChannels2 xpos -279 ypos 424 } push $Nf0d9f20 Copy { inputs 2 from0 rgba.alpha to0 apChroma.red from1 rgba.alpha to1 apChroma.green from2 rgba.alpha to2 apChroma.blue from3 rgba.alpha to3 apChroma.alpha name Copy6 xpos -388 ypos 467 disable {{"!\[exists input2]"}} } Merge2 { inputs 2+1 operation copy Achannels rgb Bchannels rgb output rgb also_merge apChroma name MergeRGB xpos -388 ypos 647 } Copy { inputs 2+1 channels apChroma maskChannelMask {{{parent.MergeRGB.maskChannelMask}}} maskChannelInput {{{parent.MergeRGB.maskChannelInput}}} inject {{parent.MergeRGB.inject}} invert_mask {{parent.MergeRGB.invert_mask}} fringe {{parent.MergeRGB.fringe}} mix {{parent.MergeRGB.mix}} name Copy_apChroma xpos -388 ypos 673 disable {{!parent.calculate_multi_alpha}} } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy4 xpos -388 ypos 732 disable {{!parent.process_alpha}} } Copy { inputs 2+1 from0 rgba.alpha to0 rgba.alpha name CopyAlpha xpos -388 ypos 789 disable {{!parent.output_dist_matte}} } Output { name Output xpos -388 ypos 910 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_apChromaBlurNew.gizmo ================================================ add_layer {apChroma apChroma.red apChroma.green apChroma.blue apChroma.alpha} Group { name apChromaBlur help "apChromaBlur v0.2\nadrianpueyo.com, 2019" tile_color 0x736efdff selected true addUserKnob {20 apChromaBlur} addUserKnob {41 channels T MergeRGBA.also_merge} addUserKnob {26 ""} addUserKnob {4 blur_mode l mode M {blur defocus ""}} addUserKnob {18 size} size {0 0 0} addUserKnob {6 size_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 aspect} aspect 1 addUserKnob {6 aspect_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 bloom} bloom 1 addUserKnob {6 bloom_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 mix_1 l mix} mix_1 1 addUserKnob {6 mix_1_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {41 chroma l "multi-alpha" T MergeCopyChroma.output} addUserKnob {6 process_multi_alpha l "process multi-alpha" +STARTLINE} process_multi_alpha true addUserKnob {26 ""} addUserKnob {41 maskChannelMask l "mask " -STARTLINE T MergeRGBA.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeRGBA.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeRGBA.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeRGBA.fringe} addUserKnob {41 mix T MergeRGBA.mix} addUserKnob {26 version_author l "" t "apChromaBlur v0.2\n2019" +STARTLINE T "
apChromaBlur v0.2 - adrianpueyo.com, 2019
"} } Merge2 { inputs 0 operation copy Achannels {{{parent.MergeCopyChroma.output}}} Bchannels none output {{{parent.MergeCopyChroma.output}}} name MergeChosen xpos 824 ypos 296 hide_input true } Input { inputs 0 name Inputmask xpos 190 ypos 914 number 1 } set Nee2b8fc0 [stack 0] Dot { name Dot3 note_font_size 41 xpos 224 ypos 956 } Input { inputs 0 name Inputimg xpos 319 ypos 196 } Dot { name Dot6 note_font_size 41 xpos 353 ypos 246 } set Nebabdf10 [stack 0] Dot { name Dot10 note_font_size 41 xpos 564 ypos 246 } set Nee2f0b50 [stack 0] Dot { name Dot4 note_font_size 41 xpos 665 ypos 246 } set Nee2e8410 [stack 0] Dot { name Dot2 note_font_size 41 xpos 665 ypos 306 } push $Nee2e8410 Dot { name Dot5 note_font_size 41 xpos 737 ypos 246 } Shuffle { red alpha green alpha blue alpha name Shuffle1 label "\[value in]" xpos 703 ypos 264 } Merge2 { inputs 2 operation copy Achannels {{{parent.MergeCopyChroma.output}}} Bchannels none name MergeGetChroma xpos 703 ypos 302 disable {{"\[\nif \{ \[lsearch -exact \[channels \[input this 1]] \[lindex \[channels MergeChosen] 0]] >= 0\} \{\n return 0\n\} else \{\n return 1\n\}\n]"}} } Dot { name Dot1 note_font_size 41 xpos 737 ypos 348 } set Ncf9c1c10 [stack 0] Dot { name Dot7 note_font_size 41 xpos 737 ypos 441 } push $Nee2f0b50 Gamma { value {{1/parent.bloom} {1/parent.bloom} {1/parent.bloom} {1/parent.bloom}} name Gamma1 xpos 530 ypos 393 } Merge2 { inputs 2 operation copy Bchannels none output {{{parent.MergeCopyChroma.output}}} name MergeCopyChromaFull1 xpos 530 ypos 431 disable {{!parent.process_multi_alpha}} } Dot { name Dot9 note_font_size 41 xpos 564 ypos 496 } set Nd3018370 [stack 0] Dot { name Dot11 note_font_size 41 xpos 652 ypos 496 } set Ne424f1a0 [stack 0] Dot { name Dot12 note_font_size 41 xpos 737 ypos 496 } Multiply { value {0 0 1 1} name MultiplyKeepR2 label "\[value value]" xpos 703 ypos 533 } Blur { size {{parent.size.2*parent.aspect.2} {parent.size.2}} mix {{parent.mix_1.b}} name Blur3 xpos 703 ypos 583 disable {{parent.blur_mode==1}} } Defocus { defocus {{parent.size.2}} ratio {{parent.aspect.2}} mix {{parent.mix_1.b}} name Defocus3 xpos 703 ypos 621 disable {{parent.blur_mode==0}} } Dot { name Dot16 note_font_size 41 xpos 737 ypos 714 } push $Ne424f1a0 Multiply { value {0 1 0 1} name MultiplyKeepG2 label "\[value value]" xpos 618 ypos 533 } Blur { size {{parent.size.1*parent.aspect.1} {parent.size.1}} mix {{parent.mix_1.g}} name Blur2 xpos 618 ypos 583 disable {{parent.blur_mode==1}} } Defocus { defocus {{parent.size.1}} ratio {{parent.aspect.1}} mix {{parent.mix_1.g}} name Defocus2 xpos 618 ypos 621 disable {{parent.blur_mode==0}} } Dot { name Dot15 note_font_size 41 xpos 652 ypos 688 } push $Nd3018370 Multiply { value {1 0 0 1} name MultiplyKeepB2 label "\[value value]" xpos 530 ypos 533 } Blur { size {{parent.size.0*parent.aspect.0} {parent.size.0}} mix {{parent.mix_1.r}} name Blur1 xpos 530 ypos 583 disable {{parent.blur_mode==1}} } Defocus { defocus {{parent.size.0}} ratio {{parent.aspect.0}} mix {{parent.mix_1.r}} name Defocus1 xpos 530 ypos 621 disable {{parent.blur_mode==0}} } Merge2 { inputs 2 operation plus also_merge all name Merge1 xpos 530 ypos 684 } Merge2 { inputs 2 operation plus also_merge all name Merge2 xpos 530 ypos 710 } Dot { name Dot14 note_font_size 41 xpos 564 ypos 758 } set Nd31e4790 [stack 0] Dot { name Dot17 note_font_size 41 xpos 641 ypos 758 } Dot { name Dot18 note_font_size 41 xpos 641 ypos 956 } push $Nee2b8fc0 push $Ncf9c1c10 push $Nebabdf10 Merge2 { inputs 2 operation copy Bchannels none output {{{parent.MergeCopyChroma.output}}} name MergeCopyChromaFull xpos 319 ypos 338 disable {{!parent.process_multi_alpha}} } Dot { name Dot13 note_font_size 41 xpos 353 ypos 852 } set Nd318e600 [stack 0] Shuffle { name ShuffleNothing xpos 418 ypos 848 } push $Nd31e4790 Gamma { value {{parent.bloom} {parent.bloom} {parent.bloom} {parent.bloom}} name Gamma2 xpos 530 ypos 804 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name CopyA xpos 530 ypos 842 } Dot { name Dot8 note_font_size 41 xpos 564 ypos 918 } push $Nd318e600 Merge2 { inputs 2+1 operation copy Achannels none Bchannels none output none also_merge rgba name MergeRGBA xpos 319 ypos 908 } Merge2 { inputs 2+1 operation copy Achannels {{{output}}} Bchannels none output apChroma maskChannelMask {{{parent.MergeRGBA.maskChannelMask}}} inject {{parent.MergeRGBA.inject}} invert_mask {{parent.MergeRGBA.invert_mask}} fringe {{parent.MergeRGBA.fringe}} mix {{parent.MergeRGBA.mix}} name MergeCopyChroma xpos 319 ypos 946 disable {{!parent.process_multi_alpha}} } Output { name Output1 xpos 319 ypos 1017 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_apChromaMergeNew.gizmo ================================================ add_layer {apChroma apChroma.red apChroma.green apChroma.blue apChroma.alpha} Group { inputs 2 name apChromaMerge tile_color 0x736efdff selected true addUserKnob {20 apChromaMerge} addUserKnob {41 operation T MergeR.operation} addUserKnob {41 sRGB l "Video colorspace" -STARTLINE T MergeR.sRGB} addUserKnob {41 screen_alpha l "alpha masking" -STARTLINE T MergeR.screen_alpha} addUserKnob {41 bbox l "set bbox to " T MergeR.bbox} addUserKnob {41 metainput l "metadata from" -STARTLINE T MergeR.metainput} addUserKnob {41 rangeinput l "range from" -STARTLINE T MergeR.rangeinput} addUserKnob {26 ""} addUserKnob {41 Achannels l "A channels" T MergeChroma.Achannels} addUserKnob {41 Bchannels l "B channels" T MergeChroma.Bchannels} addUserKnob {41 output T MergeChroma.output} addUserKnob {41 also_merge l "also merge" T MergeChroma.also_merge} addUserKnob {6 mergeAll l "Merge all channels the same as MergeAll node" +STARTLINE} addUserKnob {26 ""} addUserKnob {41 chroma l "multi-alpha" T MergeCopyChroma.output} addUserKnob {6 keep_multi_alpha l "keep multi-alpha" t "Keep the multi-alpha channels, so that you can do more chroma operations downstream." +STARTLINE} addUserKnob {6 process_alpha l "process single alpha from" t "If activated, the multi-channel alpha will get combined into a regular alpha that you can use for normal operations after this node." -STARTLINE} process_alpha true addUserKnob {41 mode l "" -STARTLINE T Saturation0.mode} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l "mask " -STARTLINE T MergeChroma.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeChroma.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeChroma.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeChroma.fringe} addUserKnob {41 mix T MergeChroma.mix} addUserKnob {26 version_author l "" t "apChromaMerge v0.3\n2019" +STARTLINE T "
apChromaMerge v0.3 - adrianpueyo.com, 2019
"} } Merge2 { inputs 0 operation copy Achannels {{{parent.MergeCopyChroma.output}}} Bchannels none output {{{parent.MergeCopyChroma.output}}} name MergeChosen xpos -96 ypos -96 hide_input true } Input { inputs 0 name Inputmask xpos 1293 ypos 604 number 2 } set N80e58740 [stack 0] Input { inputs 0 name InputB xpos 1158 ypos -338 } set Nc5153c90 [stack 0] Input { inputs 0 name InputA xpos -401 ypos -302 number 1 } Group { inputs 2 name InjectAllChannels tile_color 0x9e3c63ff xpos -401 ypos -206 disable {{!parent.mergeAll}} } Input { inputs 0 name InputA xpos 378 ypos 241 number 1 } Multiply { value 0 name Multiply1 label "\[value value]" xpos 378 ypos 330 } Input { inputs 0 name InputB xpos 520 ypos 241 } Merge2 { inputs 2 operation plus also_merge all name Merge1 xpos 520 ypos 342 } Output { name Output1 xpos 520 ypos 400 } end_group Dot { name Dot18 note_font_size 41 xpos -367 ypos -143 } set N6fb4e7e0 [stack 0] Dot { name Dot6 note_font_size 41 xpos 70 ypos -143 } set N39b58f60 [stack 0] Dot { name Dot5 note_font_size 41 xpos 148 ypos -143 } Dot { name Dot8 note_font_size 41 xpos 148 ypos -61 } push $N39b58f60 Shuffle { red alpha green alpha blue alpha name ShuffleA label alpha xpos 36 ypos -113 } Merge2 { inputs 2 operation copy Achannels {{{parent.MergeCopyChroma.output}}} Bchannels none name MergeGetChroma2 xpos 36 ypos -65 disable {{"\[\nif \{ \[lsearch -exact \[channels \[input this 1]] \[lindex \[channels MergeChosen] 0]] >= 0\} \{\n return 0\n\} else \{\n return 1\n\}\n]"}} } Dot { name Dot2 note_font_size 41 xpos 70 ypos 7 } set N12376bc0 [stack 0] push $N6fb4e7e0 Dot { name Dot12 note_font_size 41 xpos -367 ypos -42 } set N10ad2290 [stack 0] Dot { name Dot1 note_font_size 41 xpos -290 ypos -42 } set N9776eaa0 [stack 0] Dot { name Dot9 note_font_size 41 xpos -202 ypos -42 } set N4424890 [stack 0] Dot { name Dot7 note_font_size 41 xpos -117 ypos -42 } Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy1 xpos -151 ypos -3 } Multiply { value {1 0 0 1} name MultiplyKeepR2 label "\[value value]" xpos -151 ypos 35 } Dot { name Dot16 note_font_size 41 xpos -117 ypos 155 } push $Nc5153c90 Dot { name Dot32 note_font_size 41 xpos 1192 ypos -149 } set N8e311d10 [stack 0] Dot { name Dot19 note_font_size 41 xpos 945 ypos -149 } set Naf759af0 [stack 0] Dot { name Dot20 note_font_size 41 xpos 274 ypos -149 } set N8f6efd30 [stack 0] Dot { name Dot21 note_font_size 41 xpos 196 ypos -149 } Dot { name Dot22 note_font_size 41 xpos 196 ypos -60 } push $N8f6efd30 Shuffle { red alpha green alpha blue alpha name ShuffleA1 label alpha xpos 240 ypos -119 } Merge2 { inputs 2 operation copy Achannels {{{parent.MergeCopyChroma.output}}} Bchannels none name MergeGetChroma1 xpos 240 ypos -64 disable {{"\[\nif \{ \[lsearch -exact \[channels \[input this 1]] \[lindex \[channels MergeChosen] 0]] >= 0\} \{\n return 0\n\} else \{\n return 1\n\}\n]"}} } Dot { name Dot23 note_font_size 41 xpos 274 ypos 1 } set N34914360 [stack 0] push $Naf759af0 Dot { name Dot26 note_font_size 41 xpos 945 ypos -48 } set Na2af72e0 [stack 0] Dot { name Dot27 note_font_size 41 xpos 591 ypos -48 } set N1ffc4140 [stack 0] Dot { name Dot28 note_font_size 41 xpos 503 ypos -48 } set N810d1a80 [stack 0] Dot { name Dot29 note_font_size 41 xpos 418 ypos -48 } Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy6 xpos 384 ypos -9 } Multiply { value {1 0 0 1} name MultiplyKeepR1 label "\[value value]" xpos 384 ypos 63 } Merge2 { inputs 2 Achannels {rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue rgba.alpha} output {rgba.red -rgba.green -rgba.blue rgba.alpha} also_merge all name MergeR xpos 384 ypos 145 } Dot { name Dot31 xpos 418 ypos 512 } set N1c247ed0 [stack 0] push $N12376bc0 push $N4424890 Copy { inputs 2 from0 rgba.green to0 rgba.alpha name Copy2 xpos -236 ypos -3 } Multiply { value {0 1 0 1} name MultiplyKeepG2 label "\[value value]" xpos -236 ypos 35 } Dot { name Dot15 note_font_size 41 xpos -202 ypos 189 } push $N34914360 push $N810d1a80 Copy { inputs 2 from0 rgba.green to0 rgba.alpha name Copy5 xpos 469 ypos -9 } Multiply { value {0 1 0 1} name MultiplyKeepG1 label "\[value value]" xpos 469 ypos 63 } Merge2 { inputs 2 operation {{MergeR.operation}} sRGB {{MergeR.sRGB}} screen_alpha {{MergeR.screen_alpha}} bbox {{MergeR.bbox}} metainput {{MergeR.metainput}} rangeinput {{MergeR.rangeinput}} Achannels {-rgba.red rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red rgba.green -rgba.blue rgba.alpha} output {-rgba.red rgba.green -rgba.blue rgba.alpha} also_merge all maskChannelMask none inject {{MergeR.inject}} invert_mask {{MergeR.invert_mask}} fringe {{MergeR.fringe}} mix {{MergeR.mix}} name MergeG xpos 469 ypos 179 } Dot { name Dot30 xpos 503 ypos 474 } set N21bf9a0 [stack 0] push $N12376bc0 push $N9776eaa0 Copy { inputs 2 from0 rgba.blue to0 rgba.alpha name Copy3 xpos -324 ypos -3 } Multiply { value {0 0 1 1} name MultiplyKeepB2 label "\[value value]" xpos -324 ypos 35 } Dot { name Dot14 note_font_size 41 xpos -290 ypos 237 } push $N34914360 push $N1ffc4140 Copy { inputs 2 from0 rgba.blue to0 rgba.alpha name Copy4 xpos 557 ypos -9 } Multiply { value {0 0 1 1} name MultiplyKeepB1 label "\[value value]" xpos 557 ypos 63 } Merge2 { inputs 2 operation {{MergeR.operation}} sRGB {{MergeR.sRGB}} screen_alpha {{MergeR.screen_alpha}} bbox {{MergeR.bbox}} metainput {{MergeR.metainput}} rangeinput {{MergeR.rangeinput}} Achannels {-rgba.red -rgba.green rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green rgba.blue rgba.alpha} output {-rgba.red -rgba.green rgba.blue rgba.alpha} also_merge all maskChannelMask none inject {{MergeR.inject}} invert_mask {{MergeR.invert_mask}} fringe {{MergeR.fringe}} mix {{MergeR.mix}} name MergeB xpos 557 ypos 227 } Dot { name Dot17 note_font_size 41 xpos 591 ypos 436 } set N914b9350 [stack 0] push $N10ad2290 Dot { name Dot13 note_font_size 41 xpos -367 ypos 281 } push $Na2af72e0 Merge2 { inputs 2 operation {{MergeR.operation}} sRGB {{MergeR.sRGB}} screen_alpha {{MergeR.screen_alpha}} bbox {{MergeR.bbox}} metainput {{MergeR.metainput}} rangeinput {{MergeR.rangeinput}} Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} also_merge all maskChannelMask none inject {{MergeR.inject}} invert_mask {{MergeR.invert_mask}} fringe {{MergeR.fringe}} mix {{MergeR.mix}} name MergeA xpos 911 ypos 271 } Multiply { value {0 0 0 1} name MultiplyKeepA label "\[value value]" xpos 911 ypos 309 } Dot { name Dot33 note_font_size 41 xpos 945 ypos 381 } set Na783d360 [stack 0] Dot { name Dot34 note_font_size 41 xpos 816 ypos 381 } Copy { inputs 2 from0 rgba.alpha to0 rgba.blue name Copy10 xpos 782 ypos 426 } Copy { inputs 2 from0 rgba.alpha to0 rgba.green name Copy11 xpos 782 ypos 464 } Copy { inputs 2 from0 rgba.alpha to0 rgba.red name Copy12 xpos 782 ypos 502 } Dot { name Dot36 xpos 816 ypos 657 } set N8f734ee0 [stack 0] Saturation { channels rgba saturation 0 name Saturation0 xpos 782 ypos 709 } push $N80e58740 push $N8f734ee0 push $N80e58740 push $Na783d360 Dot { name Dot3 note_font_size 41 xpos 1021 ypos 381 } Dot { name Dot4 note_font_size 41 xpos 1021 ypos 544 } push $N1c247ed0 push $N21bf9a0 push $N914b9350 push $Na783d360 Merge2 { inputs 2 operation plus bbox A metainput A rangeinput A also_merge all name Merge1 xpos 911 ypos 432 } Merge2 { inputs 2 operation plus bbox A metainput A rangeinput A also_merge all name Merge2 xpos 911 ypos 470 } Merge2 { inputs 2 operation plus bbox A metainput A rangeinput A also_merge all name Merge3 xpos 911 ypos 508 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name CopyA xpos 911 ypos 534 } Dot { name Dot37 xpos 945 ypos 608 } push $N34914360 push $N8e311d10 Merge2 { inputs 2 operation copy Bchannels none output {{{parent.MergeCopyChroma.output}}} name MergeGetChroma3 xpos 1158 ypos -9 } Merge2 { inputs 2+1 operation copy bbox {{MergeR.bbox}} metainput {{MergeR.metainput}} rangeinput {{MergeR.rangeinput}} name MergeChroma xpos 1158 ypos 604 } Merge2 { inputs 2+1 operation copy Bchannels none output apChroma inject {{parent.MergeChroma.inject}} invert_mask {{parent.MergeChroma.invert_mask}} fringe {{parent.MergeChroma.fringe}} mix {{parent.MergeChroma.mix}} name MergeCopyChroma xpos 1158 ypos 647 } Copy { inputs 2+1 from0 rgba.red to0 rgba.alpha maskChannelMask {{{parent.MergeChroma.maskChannelMask}}} maskChannelInput {{{parent.MergeChroma.maskChannelInput}}} inject {{parent.MergeChroma.inject}} invert_mask {{parent.MergeChroma.invert_mask}} fringe {{parent.MergeChroma.fringe}} mix {{parent.MergeChroma.mix}} name CopySingleAlpha xpos 1158 ypos 703 disable {{!parent.process_alpha}} } Remove { channels {{{parent.MergeCopyChroma.output}}} name RemoveChroma xpos 1158 ypos 741 disable {{parent.keep_multi_alpha}} } Output { name Output1 xpos 1158 ypos 789 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_apChromaPremult.gizmo ================================================ add_layer {apChroma apChroma.red apChroma.green apChroma.blue apChroma.alpha} Group { name apChromaPremult help "apChromaPremult v0.1\nadrianpueyo.com, 2019" knobChanged "n=nuke.thisNode()\nk=nuke.thisKnob()\nkn=k.name()\n\nif kn == \"scale_x\" and n\[\"scale_linked\"].value():\n n\[\"scale_y\"].setValue(k.value())\nelif kn == \"scale_y\" and n\[\"scale_linked\"].value():\n n\[\"scale_x\"].setValue(k.value())\nelif kn == \"scale_linked\" and k.value():\n n\[\"scale_y\"].setValue(n\[\"scale_x\"].value())\n " tile_color 0x736efdff addUserKnob {20 apChromaPremult} addUserKnob {41 channels l multiply T MergeRGBA.also_merge} addUserKnob {41 chroma l "by multi-alpha" T MergeCopyChroma.output} addUserKnob {26 version_author l "" t "apChromaPremult v0.1\n2019" +STARTLINE T "
apChromaPremult v0.1 - adrianpueyo.com, 2019
"} } Input { inputs 0 name Input xpos 319 ypos 326 } Dot { name Dot6 note_font_size 41 xpos 353 ypos 376 } set N3cb1ec50 [stack 0] Dot { name Dot14 note_font_size 41 xpos 573 ypos 376 } set N61f40c80 [stack 0] Dot { name Dot4 note_font_size 41 xpos 943 ypos 376 } set N11fab120 [stack 0] Dot { name Dot2 note_font_size 41 xpos 943 ypos 436 } push $N11fab120 Dot { name Dot5 note_font_size 41 xpos 1015 ypos 376 } Shuffle { red alpha green alpha blue alpha name Shuffle1 label "\[value in]" xpos 981 ypos 394 } Merge2 { inputs 2 operation copy Achannels {{{parent.MergeCopyChroma.output}}} Bchannels none name MergeGetChroma xpos 981 ypos 432 disable {{"\[\nif \{ \[lsearch -exact \[channels \[input this 1]] \[lindex \[channels MergeChosen] 0]] >= 0\} \{\n return 0\n\} else \{\n return 1\n\}\n]"}} } Dot { name Dot10 note_font_size 41 xpos 1015 ypos 599 } set N4c49fb00 [stack 0] Dot { name Dot9 note_font_size 41 xpos 1015 ypos 892 } push $N4c49fb00 push $N61f40c80 Dot { name Dot27 note_font_size 41 xpos 573 ypos 498 } set N4ca9fa40 [stack 0] Dot { name Dot11 note_font_size 41 xpos 677 ypos 498 } set N6828d220 [stack 0] Dot { name Dot12 note_font_size 41 xpos 782 ypos 498 } set N4171d460 [stack 0] Dot { name Dot15 note_font_size 41 xpos 884 ypos 498 } Multiply { value {0 0 0 1} name MultiplyKeepA label "\[value value]" xpos 850 ypos 539 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy4 xpos 850 ypos 589 } Premult { channels all name Premult4 xpos 850 ypos 627 } Dot { name Dot18 note_font_size 41 xpos 884 ypos 754 } push $N4c49fb00 push $N4171d460 Multiply { value {0 0 1 0} name MultiplyKeepB label "\[value value]" xpos 748 ypos 539 } Copy { inputs 2 from0 rgba.blue to0 rgba.alpha name Copy3 xpos 748 ypos 589 } Premult { channels all name Premult3 xpos 748 ypos 627 } Dot { name Dot7 note_font_size 41 xpos 782 ypos 728 } push $N4c49fb00 push $N6828d220 Multiply { value {0 1 0 0} name MultiplyKeepG label "\[value value]" xpos 643 ypos 539 } Copy { inputs 2 from0 rgba.green to0 rgba.alpha name Copy2 xpos 643 ypos 589 } Premult { channels all name Premult2 xpos 643 ypos 627 } Dot { name Dot17 note_font_size 41 xpos 677 ypos 702 } push $N4c49fb00 push $N4ca9fa40 Multiply { value {1 0 0 0} name MultiplyKeepR label "\[value value]" xpos 539 ypos 538 } Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy1 xpos 539 ypos 588 } Premult { channels all name Premult1 xpos 539 ypos 626 } Merge2 { inputs 2 operation plus also_merge all name Merge1 xpos 539 ypos 698 } Merge2 { inputs 2 operation plus also_merge all name Merge2 xpos 539 ypos 724 } Merge2 { inputs 2 operation plus also_merge all name Merge3 xpos 539 ypos 750 } Dot { name Dot8 note_font_size 41 xpos 573 ypos 854 } push $N3cb1ec50 Merge2 { inputs 2 operation copy Achannels none Bchannels none output none also_merge rgba name MergeRGBA selected true xpos 319 ypos 844 } Merge2 { inputs 2 operation copy Bchannels none output apChroma maskChannelMask {{{parent.MergeRGBA.maskChannelMask}}} inject {{parent.MergeRGBA.inject}} invert_mask {{parent.MergeRGBA.invert_mask}} fringe {{parent.MergeRGBA.fringe}} mix {{parent.MergeRGBA.mix}} name MergeCopyChroma xpos 319 ypos 882 } Output { name Output1 xpos 319 ypos 952 } Merge2 { inputs 0 operation copy Achannels {{{parent.MergeCopyChroma.output}}} Bchannels none output {{{parent.MergeCopyChroma.output}}} name MergeChosen xpos 1100 ypos 424 hide_input true } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_apChromaTransformNew.gizmo ================================================ add_layer {apChroma apChroma.red apChroma.green apChroma.blue apChroma.alpha} Group { name apChromaTransform help "apChromaBlur v0.1\nadrianpueyo.com, 2019" knobChanged "n=nuke.thisNode()\nk=nuke.thisKnob()\nkn=k.name()\n\nif kn == \"scale_x\" and n\[\"scale_linked\"].value():\n n\[\"scale_y\"].setValue(k.value())\nelif kn == \"scale_y\" and n\[\"scale_linked\"].value():\n n\[\"scale_x\"].setValue(k.value())\nelif kn == \"scale_linked\" and k.value():\n n\[\"scale_y\"].setValue(n\[\"scale_x\"].value())\n " tile_color 0x736efdff selected true addUserKnob {20 apChromaTransform} addUserKnob {41 channels T MergeRGBA.also_merge} addUserKnob {26 "" +STARTLINE} addUserKnob {19 translate_x l "translate x" R -100 100} translate_x 0 addUserKnob {19 translate_y l "translate y" R -100 100} translate_y 0 addUserKnob {19 rotate R -180 180} rotate 0 addUserKnob {19 scale_x l "scale x" R 0 4} scale_x 1 addUserKnob {19 scale_y l "scale y" R 0 4} scale_y 1 addUserKnob {6 scale_linked l linked +STARTLINE} scale_linked true addUserKnob {19 skewX l "skew X" R -1 1} skewX 0 addUserKnob {19 skewY l "skew Y" R -1 1} skewY 0 addUserKnob {19 chroma_mix l mix} chroma_mix 1 addUserKnob {41 skew_order l "skew order" T TransformR.skew_order} addUserKnob {41 center T TransformR.center} addUserKnob {41 invert_matrix l invert T TransformR.invert_matrix} addUserKnob {26 ""} addUserKnob {41 chroma l "multi-alpha" T MergeCopyChroma.output} addUserKnob {6 process_multi_alpha l "process multi-alpha" +STARTLINE} process_multi_alpha true addUserKnob {26 ""} addUserKnob {41 filter T TransformR.filter} addUserKnob {41 clamp -STARTLINE T TransformR.clamp} addUserKnob {41 black_outside l "black outside" -STARTLINE T TransformR.black_outside} addUserKnob {41 motionblur T TransformR.motionblur} addUserKnob {41 shutter T TransformR.shutter} addUserKnob {41 shutteroffset l "shutter offset" T TransformR.shutteroffset} addUserKnob {41 shuttercustomoffset l "" -STARTLINE T TransformR.shuttercustomoffset} addUserKnob {41 maskChannelMask l "mask " T MergeRGBA.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeRGBA.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeRGBA.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeRGBA.fringe} addUserKnob {41 mix T MergeRGBA.mix} addUserKnob {26 version_author l "" t "apChromaTransform v0.1\n2019" +STARTLINE T "
apChromaTransform v0.1 - adrianpueyo.com, 2019
"} } Input { inputs 0 name Inputmask xpos 190 ypos 809 number 1 } set N4e27e610 [stack 0] Dot { name Dot3 note_font_size 41 xpos 224 ypos 853 } Input { inputs 0 name Inputimg xpos 319 ypos 249 } Dot { name Dot6 note_font_size 41 xpos 353 ypos 299 } set N7c366390 [stack 0] Dot { name Dot10 note_font_size 41 xpos 463 ypos 299 } Dot { name Dot14 note_font_size 41 xpos 573 ypos 299 } set N8cfb7bd0 [stack 0] Dot { name Dot4 note_font_size 41 xpos 683 ypos 299 } set N72e18190 [stack 0] Dot { name Dot2 note_font_size 41 xpos 683 ypos 359 } push $N72e18190 Dot { name Dot5 note_font_size 41 xpos 755 ypos 299 } Shuffle { red alpha green alpha blue alpha name Shuffle1 label "\[value in]" xpos 721 ypos 317 } Merge2 { inputs 2 operation copy Achannels {{{parent.MergeCopyChroma.output}}} Bchannels none name MergeGetChroma xpos 721 ypos 355 disable {{"\[\nif \{ \[lsearch -exact \[channels \[input this 1]] \[lindex \[channels MergeChosen] 0]] >= 0\} \{\n return 0\n\} else \{\n return 1\n\}\n]"}} } Dot { name Dot1 note_font_size 41 xpos 755 ypos 401 } set N7721fd10 [stack 0] Dot { name Dot16 note_font_size 41 xpos 755 ypos 436 } push $N8cfb7bd0 Merge2 { inputs 2 operation copy Bchannels none output {{{parent.MergeCopyChroma.output}}} name MergeCopyChromaFull1 xpos 539 ypos 426 disable {{!parent.process_multi_alpha}} } Dot { name Dot27 note_font_size 41 xpos 573 ypos 498 } set N86a36f50 [stack 0] Dot { name Dot11 note_font_size 41 xpos 677 ypos 498 } set N479b7910 [stack 0] Dot { name Dot12 note_font_size 41 xpos 782 ypos 498 } set N53968e70 [stack 0] Dot { name Dot15 note_font_size 41 xpos 884 ypos 498 } Multiply { value {0 0 0 1} name MultiplyKeepA label "\[value value]" xpos 850 ypos 539 } Transform { translate {{parent.translate_x.a} {parent.translate_y.a}} rotate {{parent.rotate.a}} scale {{parent.scale_x.a} {parent.scale_y.a}} skewX {{parent.skewX.a}} skewY {{parent.skewY.a}} skew_order {{parent.TransformR.skew_order}} center {{parent.TransformR.center} {parent.TransformR.center}} invert_matrix {{parent.TransformR.invert_matrix}} filter {{parent.TransformR.filter}} clamp {{parent.TransformR.clamp}} black_outside {{parent.TransformR.black_outside}} motionblur {{parent.TransformR.motionblur}} shutter {{parent.TransformR.shutter}} shutteroffset {{parent.TransformR.shutteroffset}} shuttercustomoffset {{parent.TransformR.shuttercustomoffset}} name TransformA xpos 850 ypos 631 } Dot { name Dot18 note_font_size 41 xpos 884 ypos 749 } push $N53968e70 Multiply { value {0 0 1 0} name MultiplyKeepB label "\[value value]" xpos 748 ypos 539 } Transform { translate {{parent.translate_x.b} {parent.translate_y.b}} rotate {{parent.rotate.b}} scale {{parent.scale_x.b} {parent.scale_y.b}} skewX {{parent.skewX.b}} skewY {{parent.skewY.b}} skew_order {{parent.TransformR.skew_order}} center {{parent.TransformR.center} {parent.TransformR.center}} invert_matrix {{parent.TransformR.invert_matrix}} filter {{parent.TransformR.filter}} clamp {{parent.TransformR.clamp}} black_outside {{parent.TransformR.black_outside}} motionblur {{parent.TransformR.motionblur}} shutter {{parent.TransformR.shutter}} shutteroffset {{parent.TransformR.shutteroffset}} shuttercustomoffset {{parent.TransformR.shuttercustomoffset}} name TransformB xpos 748 ypos 631 } Dot { name Dot7 note_font_size 41 xpos 782 ypos 723 } push $N479b7910 Multiply { value {0 1 0 0} name MultiplyKeepG label "\[value value]" xpos 643 ypos 539 } Transform { translate {{parent.translate_x.g} {parent.translate_y.g}} rotate {{parent.rotate.g}} scale {{parent.scale_x.g} {parent.scale_y.g}} skewX {{parent.skewX.g}} skewY {{parent.skewY.g}} skew_order {{parent.TransformR.skew_order}} center {{parent.TransformR.center} {parent.TransformR.center}} invert_matrix {{parent.TransformR.invert_matrix}} filter {{parent.TransformR.filter}} clamp {{parent.TransformR.clamp}} black_outside {{parent.TransformR.black_outside}} motionblur {{parent.TransformR.motionblur}} shutter {{parent.TransformR.shutter}} shutteroffset {{parent.TransformR.shutteroffset}} shuttercustomoffset {{parent.TransformR.shuttercustomoffset}} name TransformG xpos 643 ypos 631 } Dot { name Dot17 note_font_size 41 xpos 677 ypos 697 } push $N86a36f50 Multiply { value {1 0 0 0} name MultiplyKeepR label "\[value value]" xpos 539 ypos 538 } Transform { translate {{parent.translate_x.r} {parent.translate_y.r}} rotate {{parent.rotate.r}} scale {{parent.scale_x.r} {parent.scale_y.r}} skewX {{parent.skewX.r}} skewY {{parent.skewY.r}} center {1024 576} shutteroffset centred name TransformR xpos 539 ypos 631 } Merge2 { inputs 2 operation plus also_merge all name Merge1 xpos 539 ypos 693 } Merge2 { inputs 2 operation plus also_merge all name Merge2 xpos 539 ypos 719 } Merge2 { inputs 2 operation plus also_merge all name Merge3 xpos 539 ypos 745 } Dot { name Dot8 note_font_size 41 xpos 573 ypos 813 } set N7a967a30 [stack 0] Dot { name Dot9 note_font_size 41 xpos 573 ypos 853 } push $N4e27e610 push $N7a967a30 push $N7721fd10 push $N7c366390 Merge2 { inputs 2 operation copy Bchannels none output {{{parent.MergeCopyChroma.output}}} name MergeCopyChromaFull xpos 319 ypos 391 disable {{!parent.process_multi_alpha}} } Merge2 { inputs 2+1 operation copy Achannels none Bchannels none output none also_merge rgba name MergeRGBA xpos 319 ypos 803 } Merge2 { inputs 2+1 operation copy Achannels {{{output}}} Bchannels none output apChroma maskChannelMask {{{parent.MergeRGBA.maskChannelMask}}} inject {{parent.MergeRGBA.inject}} invert_mask {{parent.MergeRGBA.invert_mask}} fringe {{parent.MergeRGBA.fringe}} mix {{parent.MergeRGBA.mix}} name MergeCopyChroma xpos 319 ypos 843 disable {{!parent.process_multi_alpha}} } Output { name Output1 xpos 319 ypos 911 } Merge2 { inputs 0 operation copy Achannels {{{parent.MergeCopyChroma.output}}} Bchannels none output {{{parent.MergeCopyChroma.output}}} name MergeChosen xpos 840 ypos 347 hide_input true } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_apChromaUnpremult.gizmo ================================================ add_layer {apChroma apChroma.red apChroma.green apChroma.blue apChroma.alpha} Group { name apChromaUnpremult help "apChromaUnpremult v0.1\nadrianpueyo.com, 2019" knobChanged "n=nuke.thisNode()\nk=nuke.thisKnob()\nkn=k.name()\n\nif kn == \"scale_x\" and n\[\"scale_linked\"].value():\n n\[\"scale_y\"].setValue(k.value())\nelif kn == \"scale_y\" and n\[\"scale_linked\"].value():\n n\[\"scale_x\"].setValue(k.value())\nelif kn == \"scale_linked\" and k.value():\n n\[\"scale_y\"].setValue(n\[\"scale_x\"].value())\n " tile_color 0x736efdff addUserKnob {20 apChromaUnpremult} addUserKnob {41 channels l divide T MergeRGBA.also_merge} addUserKnob {41 chroma l "by multi-alpha" T MergeCopyChroma.output} addUserKnob {26 version_author l "" t "apChromaUnpremult v0.1\n2019" +STARTLINE T "
apChromaUnpremult v0.1 - adrianpueyo.com, 2019
"} } Merge2 { inputs 0 operation copy Achannels {{{parent.MergeCopyChroma.output}}} Bchannels none output {{{parent.MergeCopyChroma.output}}} name MergeChosen xpos 1100 ypos 404 hide_input true } Input { inputs 0 name Input xpos 319 ypos 306 } Dot { name Dot6 note_font_size 41 xpos 353 ypos 356 } set N41e26ae0 [stack 0] Dot { name Dot14 note_font_size 41 xpos 573 ypos 356 } set N39527690 [stack 0] Dot { name Dot4 note_font_size 41 xpos 943 ypos 356 } set N4b39dcc0 [stack 0] Dot { name Dot2 note_font_size 41 xpos 943 ypos 416 } push $N4b39dcc0 Dot { name Dot5 note_font_size 41 xpos 1015 ypos 356 } Shuffle { red alpha green alpha blue alpha name Shuffle1 label "\[value in]" xpos 981 ypos 374 } Merge2 { inputs 2 operation copy Achannels {{{parent.MergeCopyChroma.output}}} Bchannels none name MergeGetChroma xpos 981 ypos 412 disable {{"\[\nif \{ \[lsearch -exact \[channels \[input this 1]] \[lindex \[channels MergeChosen] 0]] >= 0\} \{\n return 0\n\} else \{\n return 1\n\}\n]"}} } Dot { name Dot10 note_font_size 41 xpos 1015 ypos 599 } set N950ce3e0 [stack 0] Dot { name Dot9 note_font_size 41 xpos 1015 ypos 892 } push $N950ce3e0 push $N39527690 Dot { name Dot27 note_font_size 41 xpos 573 ypos 498 } set Na64f7670 [stack 0] Dot { name Dot11 note_font_size 41 xpos 677 ypos 498 } set Na64fc180 [stack 0] Dot { name Dot12 note_font_size 41 xpos 782 ypos 498 } set N90ed73a0 [stack 0] Dot { name Dot15 note_font_size 41 xpos 884 ypos 498 } Multiply { value {0 0 0 1} name MultiplyKeepA label "\[value value]" xpos 850 ypos 539 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy4 xpos 850 ypos 589 } Unpremult { channels all name Unpremult4 xpos 850 ypos 626 } Dot { name Dot18 note_font_size 41 xpos 884 ypos 738 } push $N950ce3e0 push $N90ed73a0 Multiply { value {0 0 1 0} name MultiplyKeepB label "\[value value]" xpos 748 ypos 539 } Copy { inputs 2 from0 rgba.blue to0 rgba.alpha name Copy3 xpos 748 ypos 589 } Unpremult { channels all name Unpremult3 xpos 748 ypos 627 } Dot { name Dot7 note_font_size 41 xpos 782 ypos 712 } push $N950ce3e0 push $Na64fc180 Multiply { value {0 1 0 0} name MultiplyKeepG label "\[value value]" xpos 643 ypos 539 } Copy { inputs 2 from0 rgba.green to0 rgba.alpha name Copy2 xpos 643 ypos 589 } Unpremult { channels all name Unpremult2 xpos 643 ypos 627 } Dot { name Dot17 note_font_size 41 xpos 677 ypos 686 } push $N950ce3e0 push $Na64f7670 Multiply { value {1 0 0 0} name MultiplyKeepR label "\[value value]" xpos 539 ypos 538 } Copy { inputs 2 from0 rgba.red to0 rgba.alpha name Copy1 xpos 539 ypos 588 } Unpremult { channels all name Unpremult1 xpos 539 ypos 626 } Merge2 { inputs 2 operation plus also_merge all name Merge1 xpos 539 ypos 682 } Merge2 { inputs 2 operation plus also_merge all name Merge2 xpos 539 ypos 708 } Merge2 { inputs 2 operation plus also_merge all name Merge3 xpos 539 ypos 734 } Dot { name Dot8 note_font_size 41 xpos 573 ypos 854 } push $N41e26ae0 Merge2 { inputs 2 operation copy Achannels none Bchannels none output none also_merge rgba name MergeRGBA xpos 319 ypos 844 } Merge2 { inputs 2 operation copy Bchannels none output apChroma maskChannelMask {{{parent.MergeRGBA.maskChannelMask}}} inject {{parent.MergeRGBA.inject}} invert_mask {{parent.MergeRGBA.invert_mask}} fringe {{parent.MergeRGBA.fringe}} mix {{parent.MergeRGBA.mix}} name MergeCopyChroma xpos 319 ypos 882 } Output { name Output1 xpos 319 ypos 950 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_apDespill.gizmo ================================================ Group { name apDespill help "apDespill v2.0 by Adrian Pueyo\n\nGizmo to despill an image, with options to despill any hue (and not only the primaries), select different algorithms for de/respilling, and protect tones from the despill.\n\nIf you just want a basic despill, its default values should already be enough and the tool will avoid any extra calculations.\n\nv2 includes a new \"absolute\" mode which lets you basically perform a key, or do a \"despill to color\" operation. Also, the despill color, respill color and limit can now be plugged as image inputs if you wish, letting you perform a fully image-based despill or key, sort of iKeylight. Additionally, it allows you to perform the despill under a colorspace sandwich, for the artists who prefer to loop through different colorspaces in order to find one that works. Thanks to Tony Lyons the best feedback!\n\nadrianpueyo.com, 2014-2021" onCreate "n = nuke.thisNode()\nn\['tolerance'].setRange(0,2)\nn\['prot1_tolerance'].setFlag(0x00000004)\nn\['prot1_effect'].setFlag(0x00000004)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nkn = k.name()\nif kn == \"color\":\n kv = k.getValue()\n custom_weight_labels = \[\"green - blue\", \"red - blue\", \"red - green\", \" \"]\n n\[\"custom_weight\"].setLabel(custom_weight_labels\[int(kv)])\n n\[\"pick\"].setVisible(k.getValue() == 3)\nelif kn == \"mode\":\n n\[\"custom_weight\"].setVisible(n\[\"mode\"].getValue()==3)\nelif kn in \[\"out\",\"output_alpha\"]:\n n\[\"respill_math\"].setEnabled(n\[\"out\"].getValue()==0 or n\[\"output_alpha\"].getValue()==1)\n n\[\"respill_color\"].setEnabled(n\[\"out\"].getValue()==0)\n n\[\"inverted_spill_matte\"].setEnabled(n\[\"output_alpha\"].value())\nelif kn == \"prot1_activate\":\n protA = n\[\"prot1_activate\"].value()\n n\[\"prot1_preview\"].setEnabled(protA)\n for i in \[\"prot1\", \"prot1_tolerance\", \"prot1_falloff\",\"prot1_effect\"]:\n n\[i].setVisible(protA)\nelif kn == \"inputChange\":\n n.knobs()\[\"limit_channel\"].setVisible(n.input(3) is not None)\n n.knobs()\[\"invert_limit_channel\"].setVisible(n.input(3) is not None)\n color_enabled = nuke.toNode(\"apDespillKernel\")\[\"apDespillKernel_use_color_input\"].getValue()==0\n n\[\"color\"].setEnabled(color_enabled)\n n.knobs()\[\"pick\"].setEnabled(color_enabled)\n n\[\"info_using_input_color\"].setVisible(not color_enabled)\nelif kn == \"colorspace_shift\":\n kv = k.value()\n for i in \[\"colorspace_out\", \"illuminant_out\", \"primary_out\"]:\n n.knobs()\[i].setEnabled(kv)\n for i in \[\"colorspace_in\", \"illuminant_in\", \"primary_in\"]:\n n.knobs()\[i].setEnabled(kv and n\[\"input_colorspace\"].value())\n n\[\"input_colorspace\"].setEnabled(kv)\nelif kn == \"input_colorspace\":\n kv = k.value()\n for i in \[\"colorspace_in\", \"illuminant_in\", \"primary_in\"]:\n n.knobs()\[i].setVisible(kv)\n n.knobs()\[i].setEnabled(kv)\nelif kn == \"imagebased\":\n kv = k.value()\n input_names = \[\"color\",\"limit\",\"respill\"]\n if kv:\n for i_name in input_names:\n i_fullname = \"Input\"+i_name\n if not nuke.exists(i_fullname):\n i_node = nuke.nodes.Input()\n i_node\[\"name\"].setValue(i_fullname)\n else:\n i_node = nuke.toNode(i_fullname)\n dot = nuke.toNode(\"Dot\"+i_name)\n i_node.setXYpos(dot.xpos(),dot.ypos()-40)\n dot.setInput(0,i_node)\n else:\n # If something connected, do nothing\n if not any(\[n.input(i) for i in \[2,3,4]]):\n for i_name in input_names:\n if nuke.exists(\"Input\"+i_name):\n nuke.delete(nuke.toNode(\"Input\"+i_name))\n else:\n k.setValue(True)" tile_color 0x8b8b8bff selected true addUserKnob {20 apDespill} addUserKnob {6 pick_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 imagebased l image-based t "Show or hide image-based inputs.\n\nThis doesn't change anything internally except hiding inputs, just to avoid intimidating arrows on the node graph.\n\nNote: While any image-based input is connected, this won't let you hide them." +STARTLINE} addUserKnob {6 absolute_mode l "absolute mode" t "Absolute mode performs a keying algorithm instead of a regular despill, so that you can do a \"spill to colour\" or even use this node as an image-based Keylight." -STARTLINE} addUserKnob {26 ""} addUserKnob {4 color t "Select a primary as a starting point, or custom to show RGB controls to select any color.\n\nNote: If an image is plugged on the color input, this will get overwritten by the input." M {red green blue custom "" "" ""}} color custom addUserKnob {26 info_using_input_color l " " -STARTLINE +HIDDEN T " (Using color from input)"} addUserKnob {18 pick t "Pick the color you'd like to use for the despill. \n\nPlease use ctrl/cmd+alt+click for picking.\n\nNOTE: If a despill color image input is plugged, this value will be ignored."} pick {0 1 0} addUserKnob {6 pick_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 pick_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 dfg_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {4 out l output t "Quick switch to output the despilled image or the substracted one." M {despill spill}} addUserKnob {6 output_alpha l "output spill matte in alpha" t "Output the spill luminance in the alpha channel." +STARTLINE} output_alpha true addUserKnob {6 inverted_spill_matte l inverted t "Invert the output spill matte (in the alpha channel), especially useful when the despill is set to Absolute mode, in which case this will output a keying-like alpha." -STARTLINE} inverted_spill_matte true addUserKnob {4 mode l "despill math" t "average = avg of other two channels\nmaximum = max of other two channels\nminimum = min of other two channels\ncustom = select custom weights" M {average maximum minimum custom ""}} addUserKnob {7 custom_weight l " " t "-1 = only capped by the first channel\n0 = capped by avg of both\n1 = only capped by the second channel" -STARTLINE +HIDDEN R -1 1} addUserKnob {26 ""} addUserKnob {6 colorspace_shift l "alt colorspace" t "This allows for the popular artistic approach to refining the despill where you browse through colorspace conversions (mainly white point and primaries) and choose one that matches your desired despill bias.\n\nTip: Double click on a dropdown and use the Page Up and Page Down keys on your keyboard to browse quickly through the items.\n\nNote: There's no need at all for the values of these dropdowns to match your working colorspace, so you can leave it as-is or tweak it if you prefer, regardless of the colorspace you're comping at (e.g. ACEScg). It is literally an artistic conversion prior to the despill algorithm that then gets reverted." +STARTLINE} colorspace_shift true addUserKnob {6 input_colorspace l "input colorspace" t "Also tweak the input colorspace for the back and forth colorspace conversion. This is generally not needed however, as this colorspace conversion is generally only used for artistic purposes." -STARTLINE} addUserKnob {6 log_space l log t "Perform Lin2Log -> Despill -> Log2Lin." -STARTLINE} addUserKnob {41 colorspace_in l "in colorspace" +DISABLED +HIDDEN T Colorspace1.colorspace_in} addUserKnob {41 illuminant_in l "" -STARTLINE +DISABLED +HIDDEN T Colorspace1.illuminant_in} addUserKnob {41 primary_in l "" -STARTLINE +DISABLED +HIDDEN T Colorspace1.primary_in} addUserKnob {41 colorspace_out l "despill space" T Colorspace1.colorspace_out} addUserKnob {41 illuminant_out l "" -STARTLINE T Colorspace1.illuminant_out} addUserKnob {41 primary_out l "" -STARTLINE T Colorspace1.primary_out} addUserKnob {26 ""} addUserKnob {7 hue_offset l "hue offset" t "Rotate the despill vectors to despill an arbitrary tone other than the primaries or the picked color.\nNote: A rotation of +-120 degrees is the same as selecting a different color channel." R -30 30} addUserKnob {7 tolerance l limit t "Use this to multiply the hue tolerance (the limiter value). You can move it all the way down to 0 to completely remove a hue from your image.\n\nNOTE: If an image is plugged into the limit input, this will act as a multiplier." R 0 2} tolerance 1 addUserKnob {41 limit_channel l "limit channel" +HIDDEN T CopyLimit.from0} addUserKnob {6 invert_limit_channel l invert t "The recommended workflow for the image-based limit is keeping this invert turned on, so that the higher the value of the limit channel, the lower the limit gets." -STARTLINE +HIDDEN} invert_limit_channel true addUserKnob {6 prot1_activate l "protect tones" t "Enable controls to select tones to protect from despilling." +STARTLINE} addUserKnob {6 prot1_preview l preview t "Output the protected tones." -STARTLINE +DISABLED} addUserKnob {18 prot1 l protect t "Pick the central hue to protect.\n(ctrl/cmd+alt+click)" +HIDDEN} prot1 {0 0 0} addUserKnob {6 prot1_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 prot1_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 prot1_tolerance l tolerance t "Amount of hues to include in the selection." +HIDDEN} prot1_tolerance 0.2 addUserKnob {7 prot1_falloff l falloff t "Falloff for the hue selection. A higher falloff will make hues apart from the picked one lose weight more quickly." +HIDDEN R 0 4} prot1_falloff 2 addUserKnob {7 prot1_effect l effect t "Multiplier for the hue protection, and for the spill limit value." +HIDDEN R 0 10} prot1_effect 1 addUserKnob {26 respill_divider l "" +STARTLINE} addUserKnob {4 respill_math l "spill math" t "Settings for the math for desaturating the the spill before adding it back." M {"Rec 709" "Ccir 601" "Rec 2020" Average Maximum "" "" "" "" ""}} addUserKnob {18 respill_color l "respill color" t "RGB multiplier for the desaturated spill when adding it back.\n\nIf used on non-degrained plates (which should be avoided anyway), any value other than 1 here will most likely produce grain artifacts.\n\nNOTE: If a respill image input is plugged, this value will act as a multiplier." R 0 4} respill_color 1 addUserKnob {6 respill_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 respill_color_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask T Merge.maskChannelMask} addUserKnob {41 inject -STARTLINE T Merge.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge.fringe} addUserKnob {41 mix T Merge.mix} addUserKnob {26 version_author l "" t "apDespill v2.0\n13 April, 2021" +STARTLINE T "
apDespill v2.0 - adrianpueyo.com, 2014-2021
"} } Input { inputs 0 name Inputmask xpos 273 ypos -250 number 1 } Dot { name Dot1 note_font_size 41 xpos 307 ypos -147 } set Nc6c65d00 [stack 0] Dot { name Dot5 note_font_size 41 xpos 307 ypos -117 } Input { inputs 0 name Inputimage xpos 449 ypos -949 } set Nc6c64f00 [stack 0] Dot { name Dot2 note_font_size 41 xpos 788 ypos -877 } Dot { name Dot6 xpos 788 ypos -814 } set Nc6c64100 [stack 0] Expression { temp_name0 minval temp_expr0 min(r,g,b) temp_name1 lift temp_expr1 minval<0 expr0 lift?r+abs(minval):r expr1 lift?g+abs(minval):g expr2 lift?b+abs(minval):b expr3 lift?abs(minval):0 name Expression1 xpos 617 ypos -778 } set Nc6c5b900 [stack 0] Dot { name Dot7 selected true xpos 651 ypos -256 } Dot { inputs 0 name Dotrespill label Dotrespill note_font "Verdana Bold" xpos 1190 ypos -525 } AddChannels { channels rgba format_size true name AddRGBA_spill xpos 1156 ypos -442 } Dot { inputs 0 name Dotcolor label Dotcolor note_font "Verdana Bold" xpos 1080 ypos -593 } AddChannels { channels rgba format_size true name AddRGBA_color xpos 1046 ypos -499 } Dot { inputs 0 name Dotlimit label Dotlimit note_font "Verdana Bold" xpos 936 ypos -732 } Shuffle { red black green black blue black alpha black name Shuffle_limit label "\[value in]" xpos 902 ypos -670 } push $Nc6c5b900 push $Nc6c64100 Shuffle2 { inputs 2 fromInput1 {{1} B A} fromInput2 {{0} B A} in2 rgba mappings "4 rgba.red 0 0 rgba.red 0 0 rgba.green 0 1 rgba.green 0 1 rgba.blue 0 2 rgba.blue 0 2 rgba.alpha 1 3 rgba.alpha 0 3" name Shuffle1 label "\[value in1]" xpos 754 ypos -774 } Shuffle { alpha black name Shuffle xpos 754 ypos -694 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name CopyLimit xpos 754 ypos -670 } Invert { channels alpha name InvertLimit xpos 754 ypos -611 disable {{!invert_limit_channel}} } Colorspace { name Colorspace1 label "\[value colorspace_in] >> \[value colorspace_out]" xpos 754 ypos -557 disable {{!parent.colorspace_shift}} } Log2Lin { operation lin2log name Log2Lin1 xpos 754 ypos -508 disable {{!log_space}} } BlinkScript { inputs 3 recompileCount 94 ProgramGroup 1 KernelDescription "2 \"apDespillKernel\" iterate pixelWise 857ee5211c9dc340b8743026c9778403c1424a4ec1afa5c7990e55b71f93720c 4 \"src\" Read Point \"color_src\" Read Point \"spill_src\" Read Point \"dst\" Write Point 21 \"limit\" Float 1 AACAPw== \"shift\" Float 1 AAAAAA== \"weights\" Float 1 AAAAAA== \"outmode\" Int 1 AAAAAA== \"output_alpha\" Int 1 AAAAAA== \"output_alpha_inverted\" Int 1 AAAAAA== \"clr\" Int 1 AAAAAA== \"mode\" Int 1 AAAAAA== \"respill_math\" Int 1 AAAAAA== \"respill_color\" Float 4 AAAAAAAAAAAAAAAAAAAAAA== \"prot1_on\" Int 1 AAAAAA== \"prot1_preview\" Int 1 AAAAAA== \"prot1\" Float 3 AAAAAAAAAAAAAAAAAAAAAA== \"prot1_tolerance\" Float 1 AAAAAA== \"prot1_mult\" Float 1 AAAAAA== \"prot1_falloff\" Float 1 AAAAAA== \"pickSpill\" Float 3 AAAAAAAAAAAAAAAAAAAAAA== \"despill_method\" Int 1 AAAAAA== \"use_color_input\" Int 1 AAAAAA== \"use_spill_input\" Int 1 AAAAAA== \"use_limit_input\" Int 1 AAAAAA== 21 \"limit\" 1 1 \"shift\" 1 1 \"weights\" 1 1 \"outmode\" 1 1 \"output_alpha\" 1 1 \"output_alpha_inverted\" 1 1 \"clr\" 1 1 \"mode\" 1 1 \"respill_math\" 1 1 \"respill_color\" 4 1 \"prot1_on\" 1 1 \"prot1_preview\" 1 1 \"prot1\" 3 1 \"prot1_tolerance\" 1 1 \"prot1_mult\" 1 1 \"prot1_falloff\" 1 1 \"pickSpill\" 3 1 \"despill_method\" 1 1 \"use_color_input\" 1 1 \"use_spill_input\" 1 1 \"use_limit_input\" 1 1 7 \"_usePicked\" Int 1 1 AAAAAA== \"_clr\" Int 1 1 AAAAAA== \"_ret\" Int 1 1 AAAAAA== \"_hueShift\" Float 1 1 AAAAAA== \"_autoShift\" Float 1 1 AAAAAA== \"despillColor\" Float 3 1 AAAAAAAAAAAAAAAAAAAAAA== \"vNorm\" Float 3 1 AAAAAAAAAAAAAAAAAAAAAA==" kernelSource "//---------------------------------------------------------\n// apDespillKernel - apDespill v1.0 by Adrian Pueyo\n//\n// Despill an image, with options to despill any hue (and\n// not only the primaries), select different algorithms for\n// des/respilling, and protect tones from the despill.\n//\n// v2.0: Ability to plug image inputs for the controls,\n// and to perform a full key and respill.\n//\n// adrianpueyo.com, 2014-2017\n// ---------------------------------------------------------\n\ninline float y_convert_ccir601(const float4 in)\{\n return in.x * 0.299f + in.y * 0.587f + in.z * 0.114f;\n\}\n\ninline float y_convert_rec709(const float4 in)\{\n return in.x * 0.2125f + in.y * 0.7154f + in.z * 0.0721f;\n\}\n\ninline float y_convert_rec2020(const float4 in)\{\n return in.x * 0.2627f + in.y * 0.678f + in.z * 0.0593f;\n\}\n\ninline float4 hueRotate(const float4 in, const float H)\{\n if(H==0.0f)\{\n return in;\n \}else\{\n float cosH = cos(H*PI/180);\n float sinH = sin(H*PI/180);\n float3 ret;\n ret.x = (in.x+in.y+in.z)*(1-cosH)/3 + in.x*cosH + (-in.y/sqrt(3.0f)+in.z/sqrt(3.0f))*sinH;\n ret.y = (in.x+in.y+in.z)*(1-cosH)/3 + in.y*cosH + (in.x/sqrt(3.0f)-in.z/sqrt(3.0f))*sinH;\n ret.z = (in.x+in.y+in.z)*(1-cosH)/3 + in.z*cosH + (-in.x/sqrt(3.0f)+in.y/sqrt(3.0f))*sinH;\n return float4(ret.x,ret.y,ret.z,in\[3]);\n \}\n\}\n\nfloat3 vecToPlane(float3 v1, float3 v2 = float3(1.0f,1.0f,1.0f))\{\n float3 v1onv2;\n v1onv2 = v2 * float((float(dot(v2,v1))/float(dot(v2,v2)))); //Projection of vector on another (plane's normal)\n return v1-v1onv2; //Projection of vector on plane\n\}\n\ninline float3 myCross(float3 a, float3 b)\{\n return float3(float(a.y*b.z-a.z*b.y),float(a.z*b.x-a.x*b.z),float(a.x*b.y-a.y*b.x));\n\}\n\ninline float colorAngle(const float3 v1, const float3 v2)\{\n const float3 vN=float3(1.0f,1.0f,1.0f);\n float ang = acos(float(dot(v1,v2))/float(sqrt(dot(v1,v1)*dot(v2,v2))));\n float3 crs = myCross(v1,v2);\n if (dot(vN, crs) > 0) \{\n ang = -ang;\n \}\n return ang;\n\}\n\n//Main function to calculate the despill for a float4 colour. If prot1_preview is True, returns the prot1 result instead.\ninline float4 apDespillMain(float4 src_color, float hueShift, int clr, int mode, float limit, float weights, int prot1_preview, int prot1_on, float3 prot1, float prot1_tolerance, float prot1_mult, float prot1_falloff)\{\n //1. HueRotate IN\n float4 despilled = hueRotate(src_color, hueShift);\n\n //2. Calculate the limit\n float resultLimit = 0.0f;\n int2 others;\n if(clr==0)\{//If red (and if _usePicked, also set red)\n others = int2(1,2);\n \}else if(clr==1)\{\n others=int2(0,2);\n \}else if(clr==2)\{\n others=int2(0,1);\n \}\n\n if(mode==0)\{//average\n resultLimit = (despilled\[others\[0]]+despilled\[others\[1]])/2;\n \}else if(mode==1)\{//max\n resultLimit = max(despilled\[others\[0]],despilled\[others\[1]]);\n \}else if(mode==2)\{//min\n resultLimit = min(despilled\[others\[0]],despilled\[others\[1]]);\n \}else\{//custom\n resultLimit = despilled\[others\[0]]*weights+despilled\[others\[1]]*(1-weights);\n \}\n\n //3. Protect tones\n float prot1_result;\n if(prot1_on==1&&(prot1\[0]!=prot1\[1]||prot1\[0]!=prot1\[2]||prot1\[1]!=prot1\[2]))\{\n float cos_prot1_angle;\n cos_prot1_angle = (src_color\[0]*prot1\[0]+src_color\[1]*prot1\[1]+src_color\[2]*prot1\[2]) / (sqrt(prot1\[0]*prot1\[0]+prot1\[1]*prot1\[1]+prot1\[2]*prot1\[2]) * sqrt(src_color\[0]*src_color\[0]+src_color\[1]*src_color\[1]+src_color\[2]*src_color\[2]));\n prot1_result = pow(clamp(cos_prot1_angle,0.0f,1.0f),1/pow(prot1_tolerance,prot1_falloff));\n resultLimit = resultLimit*(1+prot1_result*prot1_mult);\n \}\n\n //4. Calculate the despill and HueRotate OUT\n for (int component = 0; component < 3; component++)\{\n despilled\[component] = component==clr?min(despilled\[component],resultLimit*limit):despilled\[component];\n \}\n despilled = hueRotate(despilled,-hueShift);\n despilled\[3] = prot1_result;\n return despilled;\n\}\n\ninline float getLuma(float4 src_color, int luma_math)\{\n float luma;\n if(luma_math==0)\{\n luma = y_convert_rec709(src_color);\n \}else if(luma_math==1)\{\n luma = y_convert_ccir601(src_color);\n \}else if(luma_math==2)\{\n luma = y_convert_rec2020(src_color); \n \}else if(luma_math==3)\{\n luma = (src_color\[0]+src_color\[1]+src_color\[2])/3;\n \}else\{\n luma = max(max(src_color\[0],src_color\[1]),src_color\[2]);\n \}\n return luma;\n\}\n\nkernel apDespillKernel : ImageComputationKernel\n\{\n Image src;\n Image color_src;\n Image spill_src; //Acts as a multiplier for the respill color\n Image dst;\n\n param:\n float limit;\n float shift;\n float weights;\n int outmode;//0=despill,1=spill\n int output_alpha;\n int output_alpha_inverted;\n int clr; //0=red,1=green,2=blue\n int mode; //0=average,1=maximum,2=minimum,3=custom\n int respill_math; //0=Rec709,1=Ccir601,2=Avg,3=Max\n float4 respill_color;\n int prot1_on;\n int prot1_preview;\n float3 prot1;\n float prot1_tolerance;\n float prot1_mult;\n float prot1_falloff;\n float3 pickSpill;\n int despill_method; //0=despill,1=key/\"absolute\"\n\n int use_color_input;\n int use_spill_input;\n int use_limit_input; //Should be shuffled in the src's alpha\n\n local:\n int _usePicked;\n int _clr;\n int _ret;\n float _hueShift;\n float _autoShift;\n float3 despillColor;\n float3 vNorm;\n\n void define() \{\n defineParam(limit, \"limit\", 1.0f);\n defineParam(shift, \"shift\", 0.0f);\n \}\n\n void init() \{\n //1. Calculate which color to affect\n _ret = 0;\n if(use_color_input==1)\{\n _clr = 0;\n _usePicked = 1;\n \}else if(clr!=3)\{//red green or blue\n _usePicked = 0;\n _clr = clr;\n \}else if(pickSpill.x==pickSpill.y && pickSpill.x==pickSpill.z)\{\n _ret = 1;//if \"custom\" selected but has a gray value, avoid any calculations\n \}else\{\n _usePicked = 1;\n _clr = 0;\n \}\n vNorm = float3(1.0f,1.0f,1.0f);\n if(use_color_input==0)\{\n //2. Calculate the necessary hue shift\n _autoShift = 0.0f;\n if(_usePicked==1)\{\n _autoShift = colorAngle(vecToPlane(pickSpill,vNorm),vecToPlane(float3(1.0f,0.0f,0.0f),vNorm));\n _autoShift = _autoShift*180/PI;//to deg\n \}\n _hueShift = shift-_autoShift;\n \}\n \}\n\n void process()\{\n if(_ret == 1)\{ dst()=src(); return; \} //Avoid any calculations if no despill selected\n\n //0. If color from input, calculate the necessary hue shift\n float hueShift = 0.0f, autoShift = 0.0f;\n float3 despillColor;\n if(use_color_input==1)\{\n despillColor = float3(color_src(0),color_src(1),color_src(2));\n autoShift = colorAngle(vecToPlane(despillColor,vNorm),vecToPlane(float3(1.0f,0.0f,0.0f),vNorm));\n autoShift = autoShift*180/PI;//to deg\n hueShift = shift-autoShift;\n \}else\{\n if(_usePicked == 1)\{\n despillColor = pickSpill;\n \}else\{\n despillColor = float3(_clr==0?1.0f:0.0f,_clr==1?1.0f:0.0f,_clr==2?1.0f:0.0f);\n \}\n \n hueShift = _hueShift;\n \}\n\n float limit_result = use_limit_input==1?limit*src(3):limit;\n\n //1. Despill the source image\n float4 despilled = apDespillMain(src(), hueShift, _clr, mode, limit_result, weights, prot1_preview, prot1_on, prot1, prot1_tolerance, prot1_mult, prot1_falloff);\n if(prot1_preview==1 && prot1_on==1)\{\n dst() = src()*clamp(despilled\[3]*prot1_mult,0.0f,1.0f);\n return;\n \}\n float4 spill = src()-despilled;\n float spill_luma = getLuma(spill, respill_math);\n\n //2. Process the key if key method selected\n float4 result;\n float4 despilled_full, spill_full; //Will account for the key if method selected is key\n float spill_luma_full;\n if(despill_method==0)\{\n //Despill Method = Despill\n despilled_full = despilled;\n spill_full = spill;\n spill_luma_full = spill_luma;\n \}else\{\n //Despill Method = Key\n float4 despillColor4 = float4(despillColor.x,despillColor.y,despillColor.z,1.0f); //For simplicity\n\n //2.1. Despill the picked despill colour itself, for normalizing the spill\n float4 pickSpill_despilled = apDespillMain(despillColor4, hueShift, _clr, mode, limit_result, weights, prot1_preview, prot1_on, prot1, prot1_tolerance, prot1_mult, prot1_falloff);\n float4 pickSpill_spill = despillColor4-pickSpill_despilled;\n float pickSpill_spill_luma = getLuma(pickSpill_spill, respill_math);\n\n spill_luma_full = pickSpill_spill_luma == 0? 0:spill_luma/pickSpill_spill_luma;\n spill_full = despillColor4*spill_luma_full;\n despilled_full = src()-spill_full;\n \}\n\n\n float4 respill_color_result = use_spill_input==1?spill_src()*respill_color:respill_color;\n //3. Output\n if(outmode==0)\{ //Despill\n result = despilled_full+spill_luma_full*respill_color_result;\n \}else\{ //Spill\n result = spill_full;\n \}\n\n if(output_alpha==0)\{\n result\[3]=src(3);\n \}else\{\n if(output_alpha_inverted == 0)\{\n result\[3]=spill_luma_full;\n \}else\{\n result\[3]=1-spill_luma_full;\n \}\n \}\n\n dst() = result;\n\n \}\n\};" useGPUIfAvailable false vectorize false rebuild "" apDespillKernel_limit {{parent.tolerance}} apDespillKernel_shift {{parent.hue_offset}} apDespillKernel_weights {{(parent.custom_weight+1)/2}} apDespillKernel_outmode {{parent.out}} apDespillKernel_output_alpha {{parent.output_alpha}} apDespillKernel_output_alpha_inverted {{parent.inverted_spill_matte}} apDespillKernel_clr {{parent.color}} apDespillKernel_mode {{parent.mode}} apDespillKernel_respill_math {{parent.respill_math}} apDespillKernel_respill_color {{parent.respill_color.r} {parent.respill_color.g} {parent.respill_color.b} 1} apDespillKernel_prot1_on {{parent.prot1_activate}} apDespillKernel_prot1_preview {{parent.prot1_preview}} apDespillKernel_prot1 {{parent.prot1} {parent.prot1} {parent.prot1}} apDespillKernel_prot1_tolerance {{parent.prot1_tolerance}} apDespillKernel_prot1_mult {{parent.prot1_effect}} apDespillKernel_prot1_falloff {{parent.prot1_falloff}} apDespillKernel_pickSpill {{parent.pick} {parent.pick} {parent.pick}} apDespillKernel_despill_method {{parent.absolute_mode}} apDespillKernel_use_color_input {{"\[\nif \{ \[lsearch -exact \[channels \[input this 1].input] rgba.red] >= 0\} \{\n return 1\n\} else \{\n return 0\n\}\n]"}} apDespillKernel_use_spill_input {{"\[\nif \{ \[lsearch -exact \[channels \[input this 2].input] rgba.red] >= 0\} \{\n return 1\n\} else \{\n return 0\n\}\n]"}} apDespillKernel_use_limit_input {{"\[exists parent.input3]"}} rebuild_finalise "" name apDespillKernel xpos 754 ypos -448 } Log2Lin { name Log2Lin2 xpos 754 ypos -378 disable {{!log_space}} } Colorspace { channels {{{parent.Colorspace5.channels}}} colorspace_in {{parent.Colorspace1.colorspace_out}} illuminant_in {{parent.Colorspace1.illuminant_out}} primary_in {{parent.Colorspace1.primary_out}} colorspace_out {{parent.Colorspace1.colorspace_in}} illuminant_out {{parent.Colorspace1.illuminant_in}} primary_out {{parent.Colorspace1.primary_in}} name Colorspace2 label "\[value colorspace_in] >> \[value colorspace_out]" xpos 754 ypos -354 disable {{!parent.colorspace_shift}} } MergeExpression { inputs 2 expr0 Br-Aa expr1 Bg-Aa expr2 Bb-Aa name MergeExpression1 selected true xpos 754 ypos -238 } Dot { name Dot3 note_font_size 41 xpos 788 ypos -147 } set Nc6bf3200 [stack 0] Dot { name Dot4 note_font_size 41 xpos 788 ypos -117 } push $Nc6c65d00 push $Nc6bf3200 push $Nc6c64f00 Merge2 { inputs 2+1 operation copy bbox B Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge xpos 449 ypos -150 } Copy { inputs 2+1 from0 rgba.alpha to0 rgba.alpha bbox B maskChannelMask {{{parent.Merge.maskChannelMask}}} maskChannelInput {{{parent.Merge.maskChannelInput}}} inject {{parent.Merge.inject}} invert_mask {{parent.Merge.invert_mask}} fringe {{parent.Merge.fringe}} name CopyAlpha xpos 449 ypos -126 disable {{!parent.output_alpha}} } Output { name Output xpos 449 ypos -46 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_apDirLight.gizmo ================================================ Group { name apDirLight help "Simulate a simple directional/infinite light through a normal pass, by picking a normal color and then tweaking the radius, falloff and hardness of the light.\n\napDirLight v0.2 by Adrian Pueyo\nadrianpueyo.com, 2016" knobChanged "\nif int(nuke.thisNode()\['theOutput'].getValue())==1:\n nuke.thisNode()\['color'].setEnabled(True)\n nuke.thisNode()\['intensity'].setEnabled(True)\nelse:\n nuke.thisNode()\['color'].setEnabled(False)\n nuke.thisNode()\['intensity'].setEnabled(False)\n" selected true addUserKnob {20 apDirLight} addUserKnob {41 in l "input normals" T ShuffleNormals.in} addUserKnob {6 pick_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {41 pick T CalcLight.pick} addUserKnob {7 radius t "Radius of the DirLight around the picked color." R 0 2} radius 0.5 addUserKnob {7 falloff t "Inverse gamma of the DirLight." R 0 5} falloff 1 addUserKnob {7 hardness t "Brings black point and white point closer together, to create a hard center."} addUserKnob {4 theOutput l output t "Output the light in the alpha channel or in the rgb by choosing its color/gain." M {alpha rgb}} addUserKnob {18 color t "Set a rgb color to the DirLight." +DISABLED} color 1 addUserKnob {6 color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 intensity t "Multiplier for the color." +DISABLED R 0 3} intensity 1 addUserKnob {26 copyright l "" +STARTLINE T "\napDirLight v0.2 - adrianpueyo.com, 2016."} } Input { inputs 0 name Inputmask xpos -164 ypos 44 number 1 } Input { inputs 0 name InputN xpos -54 ypos -131 } Shuffle { in rgb name ShuffleNormals xpos -54 ypos -107 } Expression { temp_name0 cosA temp_expr0 (r*pick.r+g*pick.g+b*pick.b)/(sqrt(r*r+g*g+b*b)*sqrt(pick.r*pick.r+pick.g*pick.g+pick.b*pick.b)) expr3 1-pow(clamp(cosA),1/pow(radius,5)) name CalcLight xpos -54 ypos -83 addUserKnob {20 Picker} addUserKnob {18 pick} pick {1 1 1} addUserKnob {6 pick_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } Gamma { channels alpha value {{parent.falloff}} name Gamma xpos -54 ypos -59 } Grade { channels alpha blackpoint {{parent.hardness>1?0.5:parent.hardness<0?0:parent.hardness/2}} whitepoint {{parent.hardness>1?0.5:parent.hardness<0?1:1-parent.hardness/2}} name GradeHardness xpos -54 ypos -27 } Invert { channels alpha name Invert xpos -54 ypos 5 } ChannelMerge { inputs 2 operation multiply name ChannelMergeMask xpos -54 ypos 35 disable {{"!\[exists parent.input1]"}} } set N193debd0 [stack 0] Shuffle { red alpha green alpha blue alpha alpha black name ShuffleRGB xpos 43 ypos 44 } Grade { white {{parent.color} {parent.color} {parent.color} {parent.color}} multiply {{parent.intensity}} name GradeRGB xpos 43 ypos 77 } push $N193debd0 Switch { inputs 2 which {{parent.theOutput}} name SwitchRGB xpos -54 ypos 77 } Output { name Output xpos -54 ypos 101 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_apEdgeCrush.gizmo ================================================ Group { name apEdgeCrush help "apEdgeCrush by Adrian Pueyo" knobChanged "n=nuke.thisNode()\nk=nuke.thisKnob()\nkn = k.name()\nif kn == \"use_input_channels\":\n n.knobs()\[\"pattern_channel\"].setEnabled(not bool(k.getValue()))\nelif kn == \"inputChange\":\n n.knobs()\[\"use_input_channels\"].setEnabled(n.input(1) is not None)\n n.knobs()\[\"pattern_channel\"].setEnabled(\n n.input(1) is not None\n and not bool(n\[\"use_input_channels\"].getValue())\n )\n" tile_color 0x848484ff selected true addUserKnob {20 apEdgeCrush} addUserKnob {26 "" l "Local GPU:" T ""} addUserKnob {41 gpuName l "" -STARTLINE T apEdgeCrushKernel1.gpuName} addUserKnob {41 useGPUIfAvailable l "Use GPU if available" T apEdgeCrushKernel1.useGPUIfAvailable} addUserKnob {41 vectorize l "Vectorize on CPU" -STARTLINE T apEdgeCrushKernel1.vectorize} addUserKnob {26 space_1 l "" +STARTLINE T " "} addUserKnob {26 text l "Edge Crush"} addUserKnob {14 amount R 0 100} amount 30 addUserKnob {4 direction t "
  • forward: image is displaced horizontally and vertically using the pattern as a mask.\nbackward: same happens but using an inverse direction on the vectors.\nboth: the process happens twice. First forward and then backward." M {forward backward both "" "" "" "" "" ""}} direction both addUserKnob {6 reverse_order l "reverse order" t "Enable to distort vertically and then horizontally. Nice to use for aesthetic reasons (to see which result you prefer)." -STARTLINE} addUserKnob {7 grow_bbox l "grow bbox" t "Increase this to manually compensate for bits that fall outside the edges." R 0 200} addUserKnob {6 limit_overscan l "limit overscan" t "Enable to clip the bounding box from growing into the overscan more than a certain amount of pixels." +STARTLINE} limit_overscan true addUserKnob {7 overscan_limit l "" t "If limit overscan is enabled, this is the max. amount of pixels that that the bounding box can grow into the overscan before getting clipped." -STARTLINE R 0 200} overscan_limit 100 addUserKnob {26 text_2 l " " T " "} addUserKnob {26 text_1 l Pattern} addUserKnob {41 pattern_channel l channel +DISABLED T CopyMatte.from0} addUserKnob {6 use_input_channels l "use input channels" t "Use each channel as a distortion pattern to the corresponding image channel, instead of using only the alpha." -STARTLINE +DISABLED} addUserKnob {41 blur T Blur1.size} addUserKnob {41 preview_pattern l preview T preview_noise} addUserKnob {26 space_2 l "" +STARTLINE T " "} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelMask l "" -STARTLINE T Merge1.maskChannelMask} addUserKnob {41 inject -STARTLINE T Merge1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge1.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge1.fringe} addUserKnob {41 mix T Merge1.mix} addUserKnob {26 version_author l " " T "
    apEdgeCrush v0.5 - adrianpueyo.com, 2017-2023
    "} addUserKnob {20 Noise} addUserKnob {26 noise_info l " " T "(Use this tab if you don't input a pattern)\n "} addUserKnob {6 preview_noise l preview +STARTLINE} addUserKnob {41 type T Noise1.type} addUserKnob {41 size l x/ysize T Noise1.size} addUserKnob {41 zoffset l z T Noise1.zoffset} addUserKnob {41 octaves T Noise1.octaves} addUserKnob {41 nyquist l "clip at Nyquist limit" -STARTLINE T Noise1.nyquist} addUserKnob {41 lacunarity T Noise1.lacunarity} addUserKnob {41 gain T Noise1.gain} addUserKnob {41 gamma T Noise1.gamma} addUserKnob {26 space l "" +STARTLINE T " "} addUserKnob {26 noise_transform_txt l Transform} addUserKnob {41 translate T Noise1.translate} addUserKnob {41 rotate T Noise1.rotate} addUserKnob {41 scale T Noise1.scale} } Input { inputs 0 name Inputimg xpos -432 ypos -378 } set N109f20b0 [stack 0] push $N109f20b0 Merge2 { inputs 2 operation copy name Merge2 label "Copy ch to rgba" xpos -314 ypos -382 } AdjBBox { numpixels {{abs(parent.amount)+2} {abs(parent.amount)+2}} name AdjBBox1 xpos -314 ypos -350 } AdjBBox { numpixels {{parent.grow_bbox}} name AdjBBox2 xpos -314 ypos -326 } set N1aa1e7b0 [stack 0] Noise { cliptype bbox replace true size 30 center {960 540} name Noise1 xpos -235 ypos -278 } push $N1aa1e7b0 Input { inputs 0 name Inputpattern xpos -79 ypos -392 number 1 } set Ncf71f7b0 [stack 0] push $Ncf71f7b0 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha channels rgba bbox B name CopyMatte xpos -79 ypos -368 disable {{!parent.use_input_channels}} } CopyBBox { inputs 2 name CopyBBox1 xpos -79 ypos -326 } Shuffle { red alpha green alpha blue alpha name ShuffleAlphaOnly xpos -79 ypos -302 disable {{parent.use_input_channels}} } Switch { inputs 2 which {{"!\[exists parent.input1]"}} name SwitchPattern xpos -79 ypos -278 } Blur { channels rgba name Blur1 xpos -79 ypos -254 disable {{size==0}} } set N108d21d0 [stack 0] Dot { name Dot1 note_font_size 41 xpos -45 ypos 33 } Input { inputs 0 name Inputmask xpos -542 ypos -26 number 2 } push $N108d21d0 Grade { channels rgba white 2 add -0.5 black_clamp false name Grade3 xpos -165 ypos -198 } Multiply { channels rgba value -1 name MultiplyInvert xpos -165 ypos -174 disable {{parent.amount.w>=0}} } Clamp { channels rgba minimum -1 name Clamp3 xpos -165 ypos -150 } set N1080aee0 [stack 0] push $N1080aee0 push $N1080aee0 push $N1080aee0 push $N1aa1e7b0 BlinkScript { inputs 2 recompileCount 66 ProgramGroup 1 KernelDescription "2 \"apEdgeCrushKernel\" iterate pixelWise 859a1c49670895fa1438357276cb89b54996b1574609837fb9d90ccdf486a446 3 \"src\" Read Ranged1D \"mask\" Read Point \"dst\" Write Point 3 \"amount\" Float 1 AAAAAA== \"axis\" Int 1 AAAAAA== \"inverse\" Int 1 AAAAAA== 3 \"amount\" 1 1 \"axis\" 1 1 \"inverse\" 1 1 3 \"srcrangedAxisMask\" Int 1 1 AAAAAA== \"srcrangeMin\" Int 1 1 AAAAAA== \"srcrangeMax\" Int 1 1 AAAAAA==" kernelSource "#define lerp(p1, p2, f) ((p1)*(f) + (p2)*(1.0f-(f)))\n\n\nkernel apEdgeCrushKernel : ImageComputationKernel\n{\n Image src;\n Image mask;\n Image dst;\n\n param:\n float amount;\n int axis;\n int inverse;\n\n void init() {\n src.setRange(-int(ceil(amount)), int(ceil(amount)));\n src.setAxis(axis?eY:eX);\n }\n void process() {\n float4 pixelPos = mask() * amount;\n pixelPos = inverse?-pixelPos:pixelPos;\n float4 result;\n for(int i=0;i<4;i++){\n result[i] = lerp(src(-int(floor(pixelPos[i])),i),src(-int(ceil(pixelPos[i])),i),pixelPos[i]<0.0f?fabs(fmod(pixelPos[i], 1.0f)):1.0f-fmod(pixelPos[i], 1.0f));\n }\n dst() = result;\n }\n};\n" rebuild "" apEdgeCrushKernel_amount {{apEdgeCrushKernel_axis?abs(parent.amount.h):abs(parent.amount.w)}} apEdgeCrushKernel_axis {{parent.reverse_order}} rebuild_finalise "" name apEdgeCrushKernel1 xpos -314 ypos -154 disable {{"(parent.amount.w==0 && parent.amount.h==0) || parent.direction==1"}} } BlinkScript { inputs 2 recompileCount 66 ProgramGroup 1 KernelDescription "2 \"apEdgeCrushKernel\" iterate pixelWise 859a1c49670895fa1438357276cb89b54996b1574609837fb9d90ccdf486a446 3 \"src\" Read Ranged1D \"mask\" Read Point \"dst\" Write Point 3 \"amount\" Float 1 AAAAAA== \"axis\" Int 1 AAAAAA== \"inverse\" Int 1 AAAAAA== 3 \"amount\" 1 1 \"axis\" 1 1 \"inverse\" 1 1 3 \"srcrangedAxisMask\" Int 1 1 AAAAAA== \"srcrangeMin\" Int 1 1 AAAAAA== \"srcrangeMax\" Int 1 1 AAAAAA==" kernelSource "#define lerp(p1, p2, f) ((p1)*(f) + (p2)*(1.0f-(f)))\n\n\nkernel apEdgeCrushKernel : ImageComputationKernel\n{\n Image src;\n Image mask;\n Image dst;\n\n param:\n float amount;\n int axis;\n int inverse;\n\n void init() {\n src.setRange(-int(ceil(amount)), int(ceil(amount)));\n src.setAxis(axis?eY:eX);\n }\n void process() {\n float4 pixelPos = mask() * amount;\n pixelPos = inverse?-pixelPos:pixelPos;\n float4 result;\n for(int i=0;i<4;i++){\n result[i] = lerp(src(-int(floor(pixelPos[i])),i),src(-int(ceil(pixelPos[i])),i),pixelPos[i]<0.0f?fabs(fmod(pixelPos[i], 1.0f)):1.0f-fmod(pixelPos[i], 1.0f));\n }\n dst() = result;\n }\n};\n" useGPUIfAvailable {{parent.apEdgeCrushKernel1.useGPUIfAvailable}} vectorize {{parent.apEdgeCrushKernel1.vectorize}} rebuild "" apEdgeCrushKernel_amount {{apEdgeCrushKernel_axis?abs(parent.amount.h):abs(parent.amount.w)}} apEdgeCrushKernel_axis {{!parent.reverse_order}} rebuild_finalise "" name apEdgeCrushKernel2 xpos -314 ypos -122 disable {{"(parent.amount.w==0 && parent.amount.h==0) || parent.direction==1"}} } BlinkScript { inputs 2 recompileCount 66 ProgramGroup 1 KernelDescription "2 \"apEdgeCrushKernel\" iterate pixelWise 859a1c49670895fa1438357276cb89b54996b1574609837fb9d90ccdf486a446 3 \"src\" Read Ranged1D \"mask\" Read Point \"dst\" Write Point 3 \"amount\" Float 1 AAAAAA== \"axis\" Int 1 AAAAAA== \"inverse\" Int 1 AAAAAA== 3 \"amount\" 1 1 \"axis\" 1 1 \"inverse\" 1 1 3 \"srcrangedAxisMask\" Int 1 1 AAAAAA== \"srcrangeMin\" Int 1 1 AAAAAA== \"srcrangeMax\" Int 1 1 AAAAAA==" kernelSource "#define lerp(p1, p2, f) ((p1)*(f) + (p2)*(1.0f-(f)))\n\n\nkernel apEdgeCrushKernel : ImageComputationKernel\n{\n Image src;\n Image mask;\n Image dst;\n\n param:\n float amount;\n int axis;\n int inverse;\n\n void init() {\n src.setRange(-int(ceil(amount)), int(ceil(amount)));\n src.setAxis(axis?eY:eX);\n }\n void process() {\n float4 pixelPos = mask() * amount;\n pixelPos = inverse?-pixelPos:pixelPos;\n float4 result;\n for(int i=0;i<4;i++){\n result[i] = lerp(src(-int(floor(pixelPos[i])),i),src(-int(ceil(pixelPos[i])),i),pixelPos[i]<0.0f?fabs(fmod(pixelPos[i], 1.0f)):1.0f-fmod(pixelPos[i], 1.0f));\n }\n dst() = result;\n }\n};\n" useGPUIfAvailable {{parent.apEdgeCrushKernel1.useGPUIfAvailable}} vectorize {{parent.apEdgeCrushKernel1.vectorize}} rebuild "" apEdgeCrushKernel_amount {{apEdgeCrushKernel_axis?abs(parent.amount.h):abs(parent.amount.w)}} apEdgeCrushKernel_axis {{parent.reverse_order}} apEdgeCrushKernel_inverse 1 rebuild_finalise "" name apEdgeCrushKernel3 xpos -314 ypos -90 disable {{"(parent.amount.w==0 && parent.amount.h==0) || parent.direction==0"}} } BlinkScript { inputs 2 recompileCount 66 ProgramGroup 1 KernelDescription "2 \"apEdgeCrushKernel\" iterate pixelWise 859a1c49670895fa1438357276cb89b54996b1574609837fb9d90ccdf486a446 3 \"src\" Read Ranged1D \"mask\" Read Point \"dst\" Write Point 3 \"amount\" Float 1 AAAAAA== \"axis\" Int 1 AAAAAA== \"inverse\" Int 1 AAAAAA== 3 \"amount\" 1 1 \"axis\" 1 1 \"inverse\" 1 1 3 \"srcrangedAxisMask\" Int 1 1 AAAAAA== \"srcrangeMin\" Int 1 1 AAAAAA== \"srcrangeMax\" Int 1 1 AAAAAA==" kernelSource "#define lerp(p1, p2, f) ((p1)*(f) + (p2)*(1.0f-(f)))\n\n\nkernel apEdgeCrushKernel : ImageComputationKernel\n{\n Image src;\n Image mask;\n Image dst;\n\n param:\n float amount;\n int axis;\n int inverse;\n\n void init() {\n src.setRange(-int(ceil(amount)), int(ceil(amount)));\n src.setAxis(axis?eY:eX);\n }\n void process() {\n float4 pixelPos = mask() * amount;\n pixelPos = inverse?-pixelPos:pixelPos;\n float4 result;\n for(int i=0;i<4;i++){\n result[i] = lerp(src(-int(floor(pixelPos[i])),i),src(-int(ceil(pixelPos[i])),i),pixelPos[i]<0.0f?fabs(fmod(pixelPos[i], 1.0f)):1.0f-fmod(pixelPos[i], 1.0f));\n }\n dst() = result;\n }\n};\n" useGPUIfAvailable {{parent.apEdgeCrushKernel1.useGPUIfAvailable}} vectorize {{parent.apEdgeCrushKernel1.vectorize}} rebuild "" apEdgeCrushKernel_amount {{apEdgeCrushKernel_axis?abs(parent.amount.h):abs(parent.amount.w)}} apEdgeCrushKernel_axis {{!parent.reverse_order}} apEdgeCrushKernel_inverse 1 rebuild_finalise "" name apEdgeCrushKernel4 xpos -314 ypos -58 disable {{"(parent.amount.w==0 && parent.amount.h==0) || parent.direction==0"}} } Crop { box {{-parent.overscan_limit} {-parent.overscan_limit} {input.width+parent.overscan_limit} {input.height+parent.overscan_limit}} intersect true crop false name CropOverscan xpos -314 ypos -26 disable {{!parent.limit_overscan}} } push $N109f20b0 Merge2 { inputs 2+1 operation copy Bchannels {{{parent.Merge2.Achannels}}} output {{{parent.Merge2.Achannels}}} name Merge1 label "Copy rgba to ch" xpos -432 ypos -30 } Switch { inputs 2 which {{parent.preview_noise}} name SwitchPreviewNoise xpos -432 ypos 30 } Output { name Output1 xpos -432 ypos 75 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_apEdgePush.gizmo ================================================ Group { name apEdgePush help "Distort the edges of your image outwards through its alpha, useful to hide edges with background influence showing up.\n\napEdgePush v1.2 by Adrian Pueyo.\nadrianpueyo.com, 2016" tile_color 0x8a8a8aff addUserKnob {20 apEdgePush} addUserKnob {41 channels T IDistort.channels} addUserKnob {4 theOutput l output t "By setting this output to distortion matte setup you'll have visual control of the following knobs. Then switch back to result and refine the \nvalues." M {result "distortion matte setup" ""}} addUserKnob {6 crop_to_format l "crop to format" -STARTLINE} crop_to_format true addUserKnob {6 premultiplied l "(un)premult rgb" t "Unpremult rgb before applying the distortion and premultiply it back after." -STARTLINE} addUserKnob {7 value t "Strength of the distortion." R 0 100} value 1 addUserKnob {14 soft t "Pre-blur of the distortion matte." R 0 100} soft 2 addUserKnob {7 falloff t "Falloff of the distortion/gamma of the distortion map."} falloff 0.2 addUserKnob {14 maxIndent l "max indent" t "Maximum distance in pixels from the edge where this tool can apply distortion (use this to limit the inside distortion when using high values)." R 0 100} maxIndent 10 addUserKnob {26 ""} addUserKnob {41 matte t "Channel from the matte input to use as a distortion matte. If nothing is pluged, alpha from the img layer is used." T Copy2.from0} addUserKnob {6 invert_matte l invert -STARTLINE} addUserKnob {41 maskChannel l mask T Keymix1.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix1.invertMask} addUserKnob {7 mix} mix 1 addUserKnob {26 version_author l "" t "apEdgePush v1.2\n2016" +STARTLINE T "
    apEdgePush v1.2 - adrianpueyo.com, 2014-2016
    "} } Input { inputs 0 name Inputimg xpos 131 ypos 237 } Shuffle { name Shuffle xpos 131 ypos 261 } set N32bf9c60 [stack 0] Dot { name Dot27 xpos 165 ypos 929 } set N33804b10 [stack 0] Dot { name Dot1 xpos 165 ypos 1085 } set N338070b0 [stack 0] Dot { name Dot13 xpos 165 ypos 1117 } set N33809650 [stack 0] Dot { name Dot14 xpos 165 ypos 1145 } push $N33809650 Input { inputs 0 name Inputmask xpos 822 ypos 1054 number 2 } Invert { name Invert5 xpos 822 ypos 1078 } push $N338070b0 Input { inputs 0 name Inputmatte xpos 351 ypos 192 number 1 } Expression { expr3 1 name Expression1 xpos 351 ypos 216 disable {{"\[exists parent.input1]"}} } push $N32bf9c60 Remove { operation keep channels alpha name Remove2 xpos 241 ypos 257 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy2 xpos 351 ypos 257 disable {{"!\[exists parent.input1]"}} } Invert { channels alpha name InvertAlpha xpos 351 ypos 289 disable {{!parent.invert_matte}} } Dot { name Dot12 xpos 385 ypos 348 } set N3382d110 [stack 0] Dot { name Dot25 xpos 385 ypos 595 } set N3382f6b0 [stack 0] Dot { name Dot26 xpos 385 ypos 874 } set N33831c50 [stack 0] FilterErode { size {{parent.maxIndent} {parent.maxIndent}} filter gaussian name FilterErodeMaxI label MaxIndent xpos 455 ypos 862 } push $N3382f6b0 push $N3382d110 Dot { name Dot11 xpos 648 ypos 348 } set N338394d0 [stack 0] Matrix { channels alpha matrix { {0.33 0 -0.33} {1 0 -1} {0.33 0 -0.33} } name hGrad xpos 614 ypos 398 } push $N338394d0 Dot { name Dot3 xpos 756 ypos 348 } Matrix { channels alpha matrix { {-0.33 -1 -0.33} {0 0 0} {0.33 1 0.33} } name vGrad xpos 722 ypos 398 } Dot { name Dot8 xpos 756 ypos 470 } MergeExpression { inputs 2 expr0 Aa expr1 Ba expr2 0 name MergeExpressionHV xpos 614 ypos 467 } Merge2 { inputs 2 operation stencil name Merge1 selected true xpos 614 ypos 592 } Blur { channels rgba size {{parent.soft} {parent.soft}} name BlurAlpha xpos 614 ypos 627 } Dot { name Dot28 xpos 648 ypos 663 } set N3385c4a0 [stack 0] Dot { name Dot10 xpos 742 ypos 663 } Expression { expr0 -min(r,0) expr1 -min(g,0) name NegativeValues xpos 708 ypos 693 } Invert { channels rgb name Invert1 xpos 708 ypos 717 } Gamma { channels rgb value {{parent.Gamma2.value}} name Gamma1 xpos 708 ypos 741 } Invert { channels rgb name Invert4 xpos 708 ypos 765 } Dot { name Dot9 xpos 742 ypos 826 } push $N3385c4a0 Expression { expr0 max(r,0) expr1 max(g,0) name PositiveValues xpos 614 ypos 693 } Invert { channels rgb name Invert2 xpos 614 ypos 717 } Gamma { channels rgb value {{parent.falloff}} name Gamma2 xpos 614 ypos 741 } Invert { channels rgb name Invert3 xpos 614 ypos 765 } MergeExpression { inputs 2 expr0 Br-Ar expr1 Bg-Ag expr2 0 name MergeExpression7 xpos 614 ypos 823 } Multiply { channels {rgba.red rgba.green -rgba.blue none} value {{parent.value}} name MultiplyValue xpos 614 ypos 847 } Merge2 { inputs 2 operation stencil name Merge5 xpos 614 ypos 871 } set N33899c80 [stack 0] Expression { expr0 max(abs(r),abs(g)) expr1 0 expr2 0 expr3 0 name ExpressionPrvw xpos 739 ypos 871 } push $N33831c50 Dot { name Dot29 xpos 385 ypos 898 } Merge2 { inputs 2 operation plus mix 0.5 name MergePrvw xpos 739 ypos 895 } Dot { name Dot2 xpos 773 ypos 1057 } push $N33899c80 push $N33804b10 add_layer {ap_edgepush ap_edgepush.u ap_edgepush.v} ShuffleCopy { inputs 2 in2 none red red green green blue black alpha black out ap_edgepush name ShuffleCopy1 xpos 614 ypos 926 } Unpremult { name Unpremult3 xpos 614 ypos 950 disable {{parent.premultiplied==0}} } IDistort { channels rgba uv ap_edgepush uv_scale -1 name IDistort xpos 614 ypos 974 } Premult { name Premult4 xpos 614 ypos 998 disable {{parent.premultiplied==0}} } Remove { channels ap_edgepush name Remove1 xpos 614 ypos 1022 } Switch { inputs 2 which {{parent.theOutput}} name SwitchPreview xpos 614 ypos 1054 } Keymix { inputs 3 name Keymix1 xpos 614 ypos 1078 disable {{"!\[exists parent.input2]"}} } Dissolve { inputs 2 which {{1-parent.mix}} name Dissolve1 xpos 614 ypos 1110 disable {{parent.mix==1}} } CopyBBox { inputs 2 name CopyBBox1 xpos 614 ypos 1142 disable {{!parent.crop_to_format}} } Output { name Output1 xpos 614 ypos 1166 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_apFresnel.gizmo ================================================ add_layer {N N.red N.green N.blue N.alpha} add_layer {P P.red P.green P.blue P.alpha} Group { name apFresnel addUserKnob {20 apFresnel} addUserKnob {41 outMode l output T ShuffleCopy1.out} addUserKnob {6 invert -STARTLINE} addUserKnob {26 ""} addUserKnob {41 in_n l normals T Shuffle1.in} addUserKnob {41 in_p l position T Shuffle2.in} addUserKnob {26 ""} addUserKnob {41 gamma T Gamma1.value} addUserKnob {26 version_author l "" t "apFresnel v0.1\n2019" +STARTLINE T "
    apFresnel v0.1 - adrianpueyo.com, 2019
    "}} Input { inputs 0 name Inputcam xpos -412 ypos 74 number 1 } Axis2 { name Axis1 xpos -402 ypos 100 } Input { inputs 0 name Inputimg xpos 0 } set Nfb6ec3f0 [stack 0] Shuffle { in P name Shuffle2 label p xpos -230 ypos 110 } Grade { add {{parent.Axis1.world_matrix.3} {parent.Axis1.world_matrix.7} {parent.Axis1.world_matrix.11} {curve}} reverse true black_clamp false name Grade1 xpos -230 ypos 148 } push $Nfb6ec3f0 Shuffle { in {N.red N.green N.blue N.alpha} name Shuffle1 label n xpos -106 ypos 122 } MergeExpression { inputs 2 temp_name0 cosA temp_expr0 (Ar*Br+Ag*Bg+Ab*Bb)/(sqrt(Ar*Ar+Ag*Ag+Ab*Ab)*sqrt(Br*Br+Bg*Bg+Bb*Bb)) channel0 rgba expr0 (1+cosA) name MergeExpression1 xpos -135 ypos 214 } Gamma { channels rgba name Gamma1 xpos -135 ypos 240 } Expression { expr0 isnan(r)?0:r expr1 isnan(g)?0:g expr2 isnan(b)?0:b expr3 isnan(a)?0:a name NanToBlack xpos -135 ypos 266 } Invert { channels rgba name Invert1 xpos -135 ypos 292 disable {{!parent.invert}} } Dot { name Dot1 xpos -101 ypos 347 } push $Nfb6ec3f0 ShuffleCopy { inputs 2 red red green red blue red alpha red name ShuffleCopy1 xpos 0 ypos 343 } Output { name Output1 xpos 0 ypos 416 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_apLoop.gizmo ================================================ set cut_paste_input [stack 0] push $cut_paste_input Group { name apLoop help "apLoop BETA v0.1 by Adrian Pueyo\n\nQuick tool to simulate a loop effect while affecting the gain, blur and transformations on each \"iteration\".\n\nFeel free to play with it and see its applications. Some of them: create an exponential (or normal) glow in seconds, an expo blur, a grid or mosaic (adding this gizmo twice), godrays, directional blurs, etc.\n\nadrianpueyo.com, 2017" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nt = n\[\"times\"]\nif k == t and t.value()<0:\n dr.setValue(0)" autolabel "nuke.thisNode().name()+\" (x\"+str(int(nuke.thisNode()\[\"times\"].getValue()))+\")\"" tile_color 0x4d585eff gl_color 0xff selected true addUserKnob {20 apLoop} addUserKnob {26 looper l Looper} addUserKnob {41 channels T Merge.also_merge} addUserKnob {3 times} times 1 addUserKnob {6 include_original l "include original" -STARTLINE} include_original true addUserKnob {6 normalize -STARTLINE} normalize true addUserKnob {26 ""} addUserKnob {26 gaind l Gain T ""} addUserKnob {41 g_start l start T cnt.g_start} addUserKnob {41 g_end l end T cnt.g_end} addUserKnob {41 g_each l each T cnt.g_each} addUserKnob {26 ""} addUserKnob {20 endGroup n -1} addUserKnob {26 blur_1 l Blur T ""} addUserKnob {41 b_start l start T cnt.b_start} addUserKnob {41 b_end l end T cnt.b_end} addUserKnob {41 b_each l each T cnt.b_each} addUserKnob {41 b_pow l power T cnt.b_pow} addUserKnob {41 filter T Blur.filter} addUserKnob {41 quality l "" -STARTLINE T Blur.quality} addUserKnob {41 crop l "crop to format" -STARTLINE T Blur.crop} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l "mask " T Merge.maskChannelMask} addUserKnob {41 inject -STARTLINE T Merge.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge.fringe} addUserKnob {41 mix T Merge.mix} addUserKnob {26 version_author l "" t "apLoop BETA v0.1\n" +STARTLINE T "
    apLoop BETA v0.1 - adrianpueyo.com, 2017
    "} addUserKnob {20 transformA l "Transform A"} addUserKnob {41 translate T TransformRef.translate} addUserKnob {41 rotate T TransformRef.rotate} addUserKnob {41 scale T TransformRef.scale} addUserKnob {41 skewX l "skew X" T TransformRef.skewX} addUserKnob {41 skewY l "skew Y" T TransformRef.skewY} addUserKnob {41 skew_order_1 l "skew order" T TransformB.skew_order} addUserKnob {41 center T TransformRef.center} addUserKnob {22 center_on_bbox l "center on bbox" -STARTLINE T "try:\n n = nuke.thisNode().input(0)\n nuke.toNode(\"TransformRef\")\[\"center\"].setValue(n.bbox().x()+n.bbox().w()/2,0)\n nuke.toNode(\"TransformRef\")\[\"center\"].setValue(n.bbox().y()+n.bbox().h()/2,1)\nexcept:\n pass"} addUserKnob {22 center_on_frame l "center on frame" -STARTLINE T "nuke.toNode(\"TransformRef\")\[\"center\"].setValue(nuke.thisNode().width()/2,0)\nnuke.toNode(\"TransformRef\")\[\"center\"].setValue(nuke.thisNode().height()/2,1)"} addUserKnob {41 invert_matrix l invert T TransformRef.invert_matrix} addUserKnob {41 filter_1 l filter T TransformB.filter} addUserKnob {41 clamp -STARTLINE T TransformB.clamp} addUserKnob {41 black_outside l "black outside" -STARTLINE T TransformB.black_outside} addUserKnob {41 motionblur T TransformB.motionblur} addUserKnob {41 shutter T TransformB.shutter} addUserKnob {41 shutteroffset l "shutter offset" T TransformB.shutteroffset} addUserKnob {41 shuttercustomoffset l "" -STARTLINE T TransformB.shuttercustomoffset} addUserKnob {20 transformB l "Transform B"} addUserKnob {41 translate_1 l translate T TransformRefAfter.translate} addUserKnob {41 rotate_1 l rotate T TransformRefAfter.rotate} addUserKnob {41 scale_1 l scale T TransformRefAfter.scale} addUserKnob {41 skewX_1 l "skew X" T TransformRefAfter.skewX} addUserKnob {41 skewY_1 l "skew Y" T TransformRefAfter.skewY} addUserKnob {41 skew_order l "skew order" T TransformRefAfter.skew_order} addUserKnob {41 center_1 l center T TransformRefAfter.center} addUserKnob {22 copyCenterFromA l "copy from transform A" -STARTLINE T "nuke.toNode(\"TransformRefAfter\")\[\"center\"].setValue(nuke.toNode(\"TransformRef\")\[\"center\"].getValue())"} addUserKnob {41 invert_matrix_1 l invert T TransformRefAfter.invert_matrix} addUserKnob {41 filter_2 l filter T TransformAfter.filter} addUserKnob {41 clamp_1 l clamp -STARTLINE T TransformAfter.clamp} addUserKnob {41 black_outside_1 l "black outside" -STARTLINE T TransformAfter.black_outside} addUserKnob {41 motionblur_1 l motionblur T TransformAfter.motionblur} addUserKnob {41 shutter_1 l shutter T TransformAfter.shutter} addUserKnob {41 shutteroffset_1 l "shutter offset" T TransformAfter.shutteroffset} addUserKnob {41 shuttercustomoffset_1 l "" -STARTLINE T TransformAfter.shuttercustomoffset} } Transform { inputs 0 name TransformRefAfter xpos 510 ypos -501 disable true } Transform { inputs 0 name TransformRef xpos 510 ypos -526 disable true } Input { inputs 0 name Inputmask xpos 106 ypos -328 number 1 } Input { inputs 0 name Inputimg xpos 249 ypos -552 } set N9c73820 [stack 0] NoTimeBlur { rounding floor name NoTB xpos 405 ypos -552 } Transform { translate {{TB.divisions*TransformRef.translate*TB.fr x1048 85} {TB.divisions*TransformRef.translate*TB.fr x1048 -150}} rotate {{TB.divisions*TransformRef.rotate*TB.fr x1048 0}} scale {{pow(TransformRef.scale,TB.ci) x1048 0}} skewX {{TB.divisions*TransformRef.skewX*TB.fr x1048 0}} skewY {{TB.divisions*TransformRef.skewY*TB.fr x1048 0}} center {{parent.TransformRef.center x1048 1064} {parent.TransformRef.center x1048 1064}} invert_matrix {{parent.TransformRef.invert_matrix}} name TransformB xpos 405 ypos -526 } Transform { translate {{TB.divisions*TransformRefAfter.translate*TB.fr x1048 85} {TB.divisions*TransformRefAfter.translate*TB.fr x1048 -150}} rotate {{TB.divisions*TransformRefAfter.rotate*TB.fr x1048 0}} scale {{pow(TransformRefAfter.scale,TB.ci) x1048 0}} skewX {{TB.divisions*TransformRefAfter.skewX*TB.fr x1048 0}} skewY {{TB.divisions*TransformRefAfter.skewY*TB.fr x1048 0}} center {{parent.TransformRefAfter.center x1048 0} {parent.TransformRefAfter.center x1048 0}} invert_matrix {{parent.TransformRefAfter.invert_matrix}} name TransformAfter xpos 405 ypos -500 } Multiply { value {{(cnt.g_end*TB.ffr+cnt.g_start*(1-TB.ffr))*pow(cnt.g_each,TB.ci)} {(cnt.g_end*TB.ffr+cnt.g_start*(1-TB.ffr))*pow(cnt.g_each,TB.ci)} {(cnt.g_end*TB.ffr+cnt.g_start*(1-TB.ffr))*pow(cnt.g_each,TB.ci)} {(cnt.g_end*TB.ffr+cnt.g_start*(1-TB.ffr))*pow(cnt.g_each,TB.ci)}} name Multiply note_font "Bitstream Vera Sans" xpos 405 ypos -474 } Blur { size {{"TB.ci==0?(cnt.b_end*TB.ffr+cnt.b_start*(1-TB.ffr)):(cnt.b_end*TB.ffr+cnt.b_start*(1-TB.ffr)) + cnt.b_each * pow(cnt.b_pow,TB.ci-1)"}} name Blur xpos 405 ypos -436 } Multiply { value 0 name MultiplyOut xpos 405 ypos -398 disable {{parent.include_original||TB.fr!=0}} } TimeBlur { divisions {{parent.times i}} shutter 1 shutteroffset start shuttercustomoffset 0 name TB xpos 405 ypos -360 addUserKnob {20 User} addUserKnob {7 fr} fr {{frame%1 i}} addUserKnob {7 ffr} ffr {{frame%1==0?(frame%1):(frame%1)/(1-1/divisions)}} addUserKnob {7 ci t "current iteration"} ci {{fr*divisions i}} } Multiply { value {{parent.TB.divisions}} name MultiplyBack xpos 405 ypos -334 disable {{!parent.normalize}} } push $N9c73820 Merge2 { inputs 2+1 operation copy Achannels none Bchannels {{{Achannels}}} output {{{Achannels}}} also_merge all name Merge xpos 249 ypos -334 } Output { name Output1 xpos 249 ypos -296 } NoOp { inputs 0 name cnt xpos 510 ypos -468 hide_input true addUserKnob {20 Controller} addUserKnob {19 g_start R 0 4} g_start 1 addUserKnob {6 g_start_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 g_start_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {19 g_end R 0 4} g_end 1 addUserKnob {6 g_end_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 g_end_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {19 g_each R 0 4} g_each 1 addUserKnob {6 g_each_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 g_each_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {14 b_start R 0 100} addUserKnob {14 b_end R 0 100} addUserKnob {14 b_each R 0 100} addUserKnob {7 b_pow R 0 4} b_pow 1 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_apViewerBlocker.gizmo ================================================ NoOp { name ViewerBlocker help "Prevent changing unintentionally one or more viewer inputs when you only want to see through them. Useful when you keep certain viewer numbers assigned to specific parts of the script (e.g. 3 to the scan and 4 to the output).\n\nViewerBlocker v0.1 by Adrian Pueyo\nadrianpueyo.com, 2016" knobChanged "if \"block\" in nuke.thisKnob().name() or nuke.thisKnob().name() == \"viewer\":\n node_list = dict()\n for i in range(1,10):\n k = nuke.thisNode().knob(\"block\" + str(i))\n if k.getValue() != \"\":\n node_list\[i] = k.getValue()\n vwr = nuke.toNode(nuke.thisNode().knob(\"viewer\").getValue())\n functionToSet = \"if nuke.thisKnob().name() in \['inputChange','input_number']:\\n try:\\n pass\\n\"\n for i in node_list:\n functionToSet += ' nuke.thisNode().setInput(%s,nuke.toNode(\"%s\"))\\n'%(str(i-1),node_list\[i])\n functionToSet += \" except:\\n pass\"\n\n if vwr:\n vwr.knob(\"knobChanged\").setValue(functionToSet)" autolabel "#\"%s\\n(%s)\"%(nuke.thisNode().name(),nuke.thisNode().knob(\"viewer\").evaluate())\nnuke.thisNode().name()+(\"\\n(%s)\"%nuke.thisNode().knob(\"viewer\").evaluate()*int(nuke.thisNode().knob(\"viewer\").evaluate()!=\"\"))" hide_input true addUserKnob {20 ViewerBlocker} addUserKnob {1 viewer t "Write the name of the viewer where you want to block some inputs (usually Viewer1), or select it and click on the next button."} addUserKnob {22 setSelected l "Set to selected" t "Set the viewer to the one selected." -STARTLINE T "sn = nuke.selectedNode()\nif sn.Class() == \"Viewer\":\n nuke.thisNode().knob(\"viewer\").setValue(sn.name())\nelse:\n nuke.message(\"Please select a viewer node.\")"} addUserKnob {22 clearViewer l Unblock t "Unblock the viewer and leave the field blank." -STARTLINE T "vn = nuke.thisNode().knob(\"viewer\").evaluate()\nif nuke.toNode(vn):\n nuke.toNode(vn).knob(\"knobChanged\").setValue(\"\")\nelse:\n nuke.message(\"Looks like %s doesn't exist!\\n (emptying the field anyway...)\" % vn)\nnuke.thisNode().knob(\"viewer\").setValue(\"\")"} addUserKnob {26 ""} addUserKnob {1 block1 l 1 t "Name of the node to block to the viewer's input 1.\nLeave empty to keep it unblocked."} addUserKnob {22 get1 l "Set to current" t "Block the viewer's input 1 to its current input." -STARTLINE T "indx = 1\ntry:\n vwr = nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate())\n selInput = vwr.input(int(indx-1)).name()\n nuke.thisNode().knob(\"block%s\"%(str(indx))).setValue(selInput)\nexcept:\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()):\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()).input(indx-1):\n nuke.message(\"Connection error. Please check %s's input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Connection error. Please check %s has something piped in input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Error: Please check the viewer %s exists.\"%nuke.thisNode().knob(\"viewer\").evaluate())"} addUserKnob {22 clear1 l Clear -STARTLINE T "indx = 1\nnuke.thisNode().knob(\"block%s\"%(str(indx))).setValue('')"} addUserKnob {1 block2 l 2 t "Name of the node to block to the viewer's input 2.\nLeave empty to keep it unblocked."} addUserKnob {22 get2 l "Set to current" t "Block the viewer's input 2 to its current input." -STARTLINE T "indx = 2\ntry:\n vwr = nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate())\n selInput = vwr.input(int(indx-1)).name()\n nuke.thisNode().knob(\"block%s\"%(str(indx))).setValue(selInput)\nexcept:\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()):\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()).input(indx-1):\n nuke.message(\"Connection error. Please check %s's input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Connection error. Please check %s has something piped in input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Error: Please check the viewer %s exists.\"%nuke.thisNode().knob(\"viewer\").evaluate())"} addUserKnob {22 clear2 l Clear -STARTLINE T "indx = 2\nnuke.thisNode().knob(\"block%s\"%(str(indx))).setValue('')"} addUserKnob {1 block3 l 3 t "Name of the node to block to the viewer's input 3.\nLeave empty to keep it unblocked."} addUserKnob {22 get3 l "Set to current" t "Block the viewer's input 3 to its current input." -STARTLINE T "indx = 3\ntry:\n vwr = nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate())\n selInput = vwr.input(int(indx-1)).name()\n nuke.thisNode().knob(\"block%s\"%(str(indx))).setValue(selInput)\nexcept:\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()):\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()).input(indx-1):\n nuke.message(\"Connection error. Please check %s's input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Connection error. Please check %s has something piped in input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Error: Please check the viewer %s exists.\"%nuke.thisNode().knob(\"viewer\").evaluate())"} addUserKnob {22 clear3 l Clear -STARTLINE T "indx = 3\nnuke.thisNode().knob(\"block%s\"%(str(indx))).setValue('')"} addUserKnob {1 block4 l 4 t "Name of the node to block to the viewer's input 4.\nLeave empty to keep it unblocked."} addUserKnob {22 get4 l "Set to current" t "Block the viewer's input 4 to its current input." -STARTLINE T "indx = 4\ntry:\n vwr = nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate())\n selInput = vwr.input(int(indx-1)).name()\n nuke.thisNode().knob(\"block%s\"%(str(indx))).setValue(selInput)\nexcept:\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()):\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()).input(indx-1):\n nuke.message(\"Connection error. Please check %s's input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Connection error. Please check %s has something piped in input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Error: Please check the viewer %s exists.\"%nuke.thisNode().knob(\"viewer\").evaluate())"} addUserKnob {22 clear4 l Clear -STARTLINE T "indx = 4\nnuke.thisNode().knob(\"block%s\"%(str(indx))).setValue('')"} addUserKnob {1 block5 l 5 t "Name of the node to block to the viewer's input 5.\nLeave empty to keep it unblocked."} addUserKnob {22 get5 l "Set to current" t "Block the viewer's input 5 to its current input." -STARTLINE T "indx = 5\ntry:\n vwr = nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate())\n selInput = vwr.input(int(indx-1)).name()\n nuke.thisNode().knob(\"block%s\"%(str(indx))).setValue(selInput)\nexcept:\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()):\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()).input(indx-1):\n nuke.message(\"Connection error. Please check %s's input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Connection error. Please check %s has something piped in input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Error: Please check the viewer %s exists.\"%nuke.thisNode().knob(\"viewer\").evaluate())"} addUserKnob {22 clear5 l Clear -STARTLINE T "indx = 5\nnuke.thisNode().knob(\"block%s\"%(str(indx))).setValue('')"} addUserKnob {1 block6 l 6 t "Name of the node to block to the viewer's input 6.\nLeave empty to keep it unblocked."} addUserKnob {22 get6 l "Set to current" t "Block the viewer's input 6 to its current input." -STARTLINE T "indx = 6\ntry:\n vwr = nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate())\n selInput = vwr.input(int(indx-1)).name()\n nuke.thisNode().knob(\"block%s\"%(str(indx))).setValue(selInput)\nexcept:\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()):\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()).input(indx-1):\n nuke.message(\"Connection error. Please check %s's input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Connection error. Please check %s has something piped in input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Error: Please check the viewer %s exists.\"%nuke.thisNode().knob(\"viewer\").evaluate())"} addUserKnob {22 clear6 l Clear -STARTLINE T "indx = 6\nnuke.thisNode().knob(\"block%s\"%(str(indx))).setValue('')"} addUserKnob {1 block7 l 7 t "Name of the node to block to the viewer's input 7.\nLeave empty to keep it unblocked."} addUserKnob {22 get7 l "Set to current" t "Block the viewer's input 7 to its current input." -STARTLINE T "indx = 7\ntry:\n vwr = nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate())\n selInput = vwr.input(int(indx-1)).name()\n nuke.thisNode().knob(\"block%s\"%(str(indx))).setValue(selInput)\nexcept:\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()):\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()).input(indx-1):\n nuke.message(\"Connection error. Please check %s's input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Connection error. Please check %s has something piped in input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Error: Please check the viewer %s exists.\"%nuke.thisNode().knob(\"viewer\").evaluate())"} addUserKnob {22 clear7 l Clear -STARTLINE T "indx = 7\nnuke.thisNode().knob(\"block%s\"%(str(indx))).setValue('')"} addUserKnob {1 block8 l 8 t "Name of the node to block to the viewer's input 8.\nLeave empty to keep it unblocked."} addUserKnob {22 get8 l "Set to current" t "Block the viewer's input 8 to its current input." -STARTLINE T "indx = 8\ntry:\n vwr = nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate())\n selInput = vwr.input(int(indx-1)).name()\n nuke.thisNode().knob(\"block%s\"%(str(indx))).setValue(selInput)\nexcept:\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()):\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()).input(indx-1):\n nuke.message(\"Connection error. Please check %s's input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Connection error. Please check %s has something piped in input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Error: Please check the viewer %s exists.\"%nuke.thisNode().knob(\"viewer\").evaluate())"} addUserKnob {22 clear8 l Clear -STARTLINE T "indx = 8\nnuke.thisNode().knob(\"block%s\"%(str(indx))).setValue('')"} addUserKnob {1 block9 l 9 t "Name of the node to block to the viewer's input 9.\nLeave empty to keep it unblocked."} addUserKnob {22 get9 l "Set to current" t "Block the viewer's input 9 to its current input." -STARTLINE T "indx = 9\ntry:\n vwr = nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate())\n selInput = vwr.input(int(indx-1)).name()\n nuke.thisNode().knob(\"block%s\"%(str(indx))).setValue(selInput)\nexcept:\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()):\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()).input(indx-1):\n nuke.message(\"Connection error. Please check %s's input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Connection error. Please check %s has something piped in input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Error: Please check the viewer %s exists.\"%nuke.thisNode().knob(\"viewer\").evaluate())"} addUserKnob {22 clear9 l Clear -STARTLINE T "indx = 9\nnuke.thisNode().knob(\"block%s\"%(str(indx))).setValue('')"} addUserKnob {1 block0 l 0 t "Name of the node to block to the viewer's input 0.\nLeave empty to keep it unblocked."} addUserKnob {22 get0 l "Set to current" t "Block the viewer's input 0 to its current input." -STARTLINE T "indx = 0\ntry:\n vwr = nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate())\n selInput = vwr.input(int(9)).name()\n nuke.thisNode().knob(\"block%s\"%(str(0))).setValue(selInput)\nexcept:\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()):\n if nuke.toNode(nuke.thisNode().knob(\"viewer\").evaluate()).input(9):\n nuke.message(\"Connection error. Please check %s's input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Connection error. Please check %s has something piped in input %s\"%(nuke.thisNode().knob(\"viewer\").evaluate(),str(indx)))\n else:\n nuke.message(\"Error: Please check the viewer %s exists.\"%nuke.thisNode().knob(\"viewer\").evaluate())"} addUserKnob {22 clear0 l Clear -STARTLINE T "indx = 0\nnuke.thisNode().knob(\"block%s\"%(str(indx))).setValue('')"} addUserKnob {26 copyright_kind_of l "" +STARTLINE T " ViewerBlocker by Adrian Pueyo"} } ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_apVignette.gizmo ================================================ Group { name apVignette help "apVignette v0.4 - apEssentials by Adrian Pueyo\n\nSimple and lightweight vignetting gizmo.\n\nadrianpueyo.com, 2014-2018" tile_color 0x8c8c8cff selected true addUserKnob {20 apeVignette} addUserKnob {7 aspect t "Aspect ratio multiplier for the vignetting." R 0 4} aspect 1 addUserKnob {6 img_format l "image format" t "...otherwise spherical.\nThis also gets affected by the aspect multiplier." -STARTLINE} addUserKnob {7 size t "Shutter size multiplier relative to the plate width." R 0 3} size 1.4 addUserKnob {7 falloff t "Gamma of the effect's alpha." R 0 4} falloff 2 addUserKnob {26 ""} addUserKnob {7 amount t "Multiplier for the effect's alpha." R 0 2} amount 1 addUserKnob {41 color t "Multiplier for the image, through the resulting alpha." T Multiply1.value} addUserKnob {6 apply_to_white l "Apply to White Constant (rgb)" +STARTLINE} addUserKnob {6 output_alpha l "output matte in alpha" +STARTLINE} addUserKnob {26 version_author l "" t "apeVignette v0.5\n2014-2018" +STARTLINE T "
    apeVignette v0.5 - adrianpueyo.com, 2014-2018
    "} addUserKnob {20 transform} addUserKnob {41 type T Reformat1.type} addUserKnob {41 format l "output format" T Reformat1.format} addUserKnob {26 "" +STARTLINE} addUserKnob {41 translate T Transform1.translate} addUserKnob {41 rotate T Transform1.rotate} addUserKnob {41 scale T Transform1.scale} addUserKnob {41 skewX l "skew X" T Transform1.skewX} addUserKnob {41 skewY l "skew Y" T Transform1.skewY} addUserKnob {41 center T Transform1.center} } Input { inputs 0 name Input xpos 110 ypos -194 } Dot { name Dot1 note_font_size 41 xpos 144 ypos -132 } set N1ad284d0 [stack 0] Radial { output alpha cliptype none replace true invert true area {{"width/2 * (1 - parent.size)"} {height/2-(parent.img_format?height:width)/(2*parent.aspect)*parent.size} {"width/2 * (1 + parent.size)"} {height/2+(parent.img_format?height:width)/(2*parent.aspect)*parent.size}} name Radial1 xpos 254 ypos -142 } Transform { center {1078 901} black_outside false shutteroffset centred name Transform1 xpos 254 ypos -78 } Gamma { channels alpha value {{1/parent.falloff}} name Gamma1 xpos 254 ypos 46 } Multiply { channels alpha value {{parent.amount}} name Multiply2 xpos 254 ypos 84 } set N18b62620 [stack 0] push $N18b62620 push $N1ad284d0 Reformat { black_outside true name Reformat1 xpos 110 ypos -80 } AddChannels { channels rgba name AddChannels1 xpos 110 ypos -38 disable {{!parent.apply_to_white}} } Grade { multiply 0 add 1 black_clamp false name Grade1 xpos 110 ypos 2 disable {{!parent.apply_to_white}} } Multiply { inputs 1+1 channels rgb value 0 name Multiply1 xpos 110 ypos 90 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha bbox B name CopyA xpos 110 ypos 112 disable {{!parent.output_alpha}} } Output { name Output1 xpos 110 ypos 186 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_apeGlow.gizmo ================================================ Group { name apGlow help "apeGlow v1.0 - apEssentials by Adrian Pueyo\n\nExponential glow with advanced controls, using the traditional multi-blur approach.\n\nWith the \"area\" input (optional) you can set only a part of the image to emit glow.\nNaN's will be turned black, on rgba only.\n\nadrianpueyo.com, 2015-2019." onCreate "n = nuke.thisNode()\nfor i in \['intensity','response','max_size','src_black','src_white','response']:\n n\[i].setFlag(0x00000004)\nn\['max_size'].setRange(0,10000)\nn\['overscan'].setRange(0,1000)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() in \[\"crop\",\"enableOverscan\"]:\n kcv = n\[\"crop\"].value()\n kov = n\[\"enableOverscan\"].value()\n n\[\"enableOverscan\"].setEnabled(not kcv)\n n\['overscan'].setEnabled(not kcv and kov)\nelif k.name() == \"s\":\n s = int(k.value())\n if s<1:\n k.setValue(1)\n else:\n nd = nuke.toNode(\"DP\")\n nm = nuke.toNode(\"MergeBlurs\")\n b0 = nuke.toNode(\"Blur0\")\n b0x = b0.xpos()\n b0y = b0.ypos()\n b0n = b0.name()\n for i in range(1,nm.inputs()):\n nm.setInput(i,None)\n \[nuke.delete(i) for i in nuke.allNodes() if i.xpos()>nd.xpos()]\n for i in range(1,s):\n # Blur\n b = nuke.nodes.Blur()\n b.setXYpos(b0x+i*100,b0y)\n b.setInput(0,nd)\n b\[\"channels\"].setValue(\"all\")\n for bk in \[\"filter\",\"quality\"]:\n b\[bk].setExpression(b0n+\".\"+bk)\n b\[\"crop\"].setValue(0)\n b\[\"size\"].setValue(\[0,0])\n b\[\"size\"].setExpression(\"DP.j((1/parent.s)*%s)/ parent.f\"%(i+1))\n # Multiply\n m = nuke.nodes.Multiply()\n m.setXYpos(b0x+i*100,b0y+38)\n m.setInput(0,b)\n m\[\"channels\"].setValue(\"all\")\n m\[\"value\"].setValue(\[0,0,0,0])\n m\[\"value\"].setExpression( \"parent.p*%s+%s\"%((i+1)/(s),1-(i+1)/(s)))\n # Merge\n nm.setInput(i if i<2 else i+1, m)" tile_color 0xe88543ff selected true addUserKnob {20 apeGlow} addUserKnob {41 channels T KeepWhat.channels} addUserKnob {7 intensity t "Intensity multiplier for the resulting glow." R 0 10} intensity 1 addUserKnob {18 p l persistance t "Color gain of the largest step. Affects the other steps progressively, with the least effect on the smallest one.\n\nUse as an inverse falloff or as a progressive color tint." R 0 10} p 1 addUserKnob {6 p_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 tint t "Overall color multiplier for the intensity."} tint 1 addUserKnob {6 tint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 effect_only l "effect only" +STARTLINE} effect_only true addUserKnob {26 ""} addUserKnob {7 src_black l "src black" t "Black point of the source image's luminance.\nClip the effect below this luminance value." R 0 4} addUserKnob {7 src_white l "src white" t "White point of the source image's luminance." R 0 4} src_white 1 addUserKnob {41 white_clamp l clamp -STARTLINE T Grade1.white_clamp} addUserKnob {7 response t "Gamma on the source image's luminance, to change the response curve falloff." R 0 4} response 1 addUserKnob {26 ""} addUserKnob {14 max_size l "max size" t "Maximum pixel size of the exponential glow." R 0 10000} max_size 2000 addUserKnob {14 f l "size falloff" t "Falloff adjustment on the exponential distribution of the blur sizes.\n\nReduce this to have the glow more diffuse (starting with larger blurs).\nIncrease to have the glow tighter and more defined (start with smaller blurs)." R 0 10} f 1 addUserKnob {3 s l steps t "Number of blur iterations to combine together."} s 10 addUserKnob {41 filter T Blur0.filter} addUserKnob {41 quality l "" -STARTLINE T Blur0.quality} addUserKnob {6 crop l "crop to format" -STARTLINE} addUserKnob {14 overscan R 0 1000} overscan 100 addUserKnob {6 enableOverscan l enable -STARTLINE} enableOverscan true addUserKnob {26 ""} addUserKnob {41 maskChannelArea l area -STARTLINE T ExpressionArea.maskChannelMask} addUserKnob {41 inject_area l inject -STARTLINE T ExpressionArea.inject} addUserKnob {41 invert_area l invert -STARTLINE T ExpressionArea.invert_mask} addUserKnob {41 fringe_area l fringe -STARTLINE T ExpressionArea.fringe} addUserKnob {41 maskChannelMask l mask T Merge.maskChannelMask} addUserKnob {41 inject -STARTLINE T Merge.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge.fringe} addUserKnob {41 mix T Merge.mix} addUserKnob {26 version_author l "" t "apeGlow v1.0\n2019" +STARTLINE T "
    apeGlow v1.0 - adrianpueyo.com, 2015-2019
    "} } Input { inputs 0 name Inputmask xpos -883 ypos 975 number 2 } Input { inputs 0 name Inputarea xpos -638 ypos 383 number 1 } Input { inputs 0 name Inputimg xpos -773 ypos 220 } Dot { name Dot6 xpos -739 ypos 308 } set N64670800 [stack 0] Dot { name Dot8 xpos -494 ypos 308 } set N64670100 [stack 0] Remove { name RemoveAll xpos -528 ypos 345 } Expression { inputs 1+1 channel0 rgba expr0 1 name ExpressionArea xpos -528 ypos 383 disable {{"!\[exists parent.input1]"}} } Shuffle { red white green white blue white alpha white name ShuffleWhite xpos -528 ypos 409 disable {{"\[exists parent.input1]"}} } push $N64670100 Dot { name Dot7 xpos -384 ypos 308 } Remove { operation keep channels rgba name KeepWhat xpos -418 ypos 377 } add_layer {apGlowArea apGlowArea.red} Copy { inputs 2 from0 rgba.alpha to0 apGlowArea.red name Copy1 xpos -418 ypos 403 disable {{"!\[exists parent.input1]"}} } Premult { channels all alpha apGlowArea.red name Premult1 xpos -418 ypos 441 disable {{"!\[exists parent.input1]"}} } Remove { channels apGlowArea name RemoveArea xpos -418 ypos 479 disable {{"!\[exists parent.input1]"}} } Dot { name Dot5 xpos -384 ypos 538 } set Ndeeec100 [stack 0] Dot { name Dot1 xpos -494 ypos 538 } Saturation { channels all saturation 0 name Saturation1 xpos -528 ypos 556 } set Ndeec3200 [stack 0] Grade { channels all blackpoint {{parent.src_black}} whitepoint {{parent.src_white}} gamma {{parent.response}} name Grade1 xpos -528 ypos 594 } push $Ndeeec100 push $Ndeec3200 Merge2 { inputs 2 operation divide also_merge all name Merge4 xpos -418 ypos 562 } Merge2 { inputs 2 operation multiply also_merge all name Merge3 xpos -418 ypos 600 } Dot { name DP xpos -384 ypos 671 addUserKnob {20 User} addUserKnob {14 j R 0 100} j {{"pow(2, t*(log(parent.max_size*parent.f)/log(2)) )"} {"pow(2, t*(log(parent.max_size*parent.f)/log(2)) )"}} } set Ndeeb2400 [stack 0] Blur { size {{"DP.j((1/parent.s)*10)/ parent.f"} {"DP.j((1/parent.s)*10)/ parent.f"}} filter {{Blur0.filter}} quality {{Blur0.quality}} crop false name Blur9 xpos 482 ypos 729 } Multiply { value {{parent.p*1.0+0.0} {parent.p*1.0+0.0} {parent.p*1.0+0.0} {parent.p*1.0+0.0}} name Multiply9 xpos 482 ypos 767 } push $Ndeeb2400 Blur { size {{"DP.j((1/parent.s)*9)/ parent.f"} {"DP.j((1/parent.s)*9)/ parent.f"}} filter {{Blur0.filter}} quality {{Blur0.quality}} crop false name Blur8 xpos 382 ypos 729 } Multiply { value {{parent.p*0.9+0.1} {parent.p*0.9+0.1} {parent.p*0.9+0.1} {parent.p*0.9+0.1}} name Multiply8 xpos 382 ypos 767 } push $Ndeeb2400 Blur { size {{"DP.j((1/parent.s)*8)/ parent.f"} {"DP.j((1/parent.s)*8)/ parent.f"}} filter {{Blur0.filter}} quality {{Blur0.quality}} crop false name Blur7 xpos 282 ypos 729 } Multiply { value {{parent.p*0.8+0.2} {parent.p*0.8+0.2} {parent.p*0.8+0.2} {parent.p*0.8+0.2}} name Multiply7 xpos 282 ypos 767 } push $Ndeeb2400 Blur { size {{"DP.j((1/parent.s)*7)/ parent.f"} {"DP.j((1/parent.s)*7)/ parent.f"}} filter {{Blur0.filter}} quality {{Blur0.quality}} crop false name Blur6 xpos 182 ypos 729 } Multiply { value {{parent.p*0.7+0.3} {parent.p*0.7+0.3} {parent.p*0.7+0.3} {parent.p*0.7+0.3}} name Multiply6 xpos 182 ypos 767 } push $Ndeeb2400 Blur { size {{"DP.j((1/parent.s)*6)/ parent.f"} {"DP.j((1/parent.s)*6)/ parent.f"}} filter {{Blur0.filter}} quality {{Blur0.quality}} crop false name Blur5 xpos 82 ypos 729 } Multiply { value {{parent.p*0.6+0.4} {parent.p*0.6+0.4} {parent.p*0.6+0.4} {parent.p*0.6+0.4}} name Multiply5 xpos 82 ypos 767 } push $Ndeeb2400 Blur { size {{"DP.j((1/parent.s)*5)/ parent.f"} {"DP.j((1/parent.s)*5)/ parent.f"}} filter {{Blur0.filter}} quality {{Blur0.quality}} crop false name Blur4 xpos -18 ypos 729 } Multiply { value {{parent.p*0.5+0.5} {parent.p*0.5+0.5} {parent.p*0.5+0.5} {parent.p*0.5+0.5}} name Multiply4 xpos -18 ypos 767 } push $Ndeeb2400 Blur { size {{"DP.j((1/parent.s)*4)/ parent.f"} {"DP.j((1/parent.s)*4)/ parent.f"}} filter {{Blur0.filter}} quality {{Blur0.quality}} crop false name Blur3 xpos -118 ypos 729 } Multiply { value {{parent.p*0.4+0.6} {parent.p*0.4+0.6} {parent.p*0.4+0.6} {parent.p*0.4+0.6}} name Multiply3 xpos -118 ypos 767 } push $Ndeeb2400 Blur { size {{"DP.j((1/parent.s)*3)/ parent.f"} {"DP.j((1/parent.s)*3)/ parent.f"}} filter {{Blur0.filter}} quality {{Blur0.quality}} crop false name Blur2 xpos -218 ypos 729 } Multiply { value {{parent.p*0.3+0.7} {parent.p*0.3+0.7} {parent.p*0.3+0.7} {parent.p*0.3+0.7}} name Multiply2 xpos -218 ypos 767 } push 0 push $Ndeeb2400 Blur { size {{"DP.j((1/parent.s)*2)/ parent.f"} {"DP.j((1/parent.s)*2)/ parent.f"}} filter {{Blur0.filter}} quality {{Blur0.quality}} crop false name Blur1 xpos -318 ypos 729 } Multiply { value {{parent.p*0.2+0.8} {parent.p*0.2+0.8} {parent.p*0.2+0.8} {parent.p*0.2+0.8}} name Multiply1 xpos -318 ypos 767 } push $Ndeeb2400 Blur { size {{"DP.j(1/parent.s + 0) / parent.f"} {"DP.j(1/parent.s + 0) / parent.f"}} crop false name Blur0 xpos -418 ypos 729 } Multiply { value {{"parent.p * 1/parent.s + (1-1/parent.s)"}} name Multiply0 xpos -418 ypos 767 } Merge2 { inputs 10+1 operation plus name MergeBlurs xpos -418 ypos 864 } Multiply { value {{parent.intensity*parent.tint/parent.s} {parent.intensity*parent.tint/parent.s} {parent.intensity*parent.tint/parent.s} {parent.intensity*parent.tint/parent.s}} name MultiplyR xpos -418 ypos 890 } Expression { expr0 isnan(r)?0:r expr1 isnan(g)?0:g expr2 isnan(b)?0:b expr3 isnan(a)?0:a name NanToBlack xpos -418 ypos 928 } push $N64670800 Dot { name Dot4 xpos -739 ypos 769 } set Ndefeeb00 [stack 0] Dot { name Dot2 xpos -629 ypos 769 } Shuffle { red black green black blue black name Shuffle xpos -663 ypos 847 disable {{!parent.effect_only}} } Remove { operation keep channels rgb name Remove1 xpos -663 ypos 873 disable {{!parent.effect_only}} } Merge2 { inputs 2 operation plus output {rgba.red rgba.green rgba.blue -rgba.alpha} also_merge all name Merge1 xpos -663 ypos 928 } Dot { name Dot3 xpos -629 ypos 978 } push $Ndefeeb00 Merge2 { inputs 2+1 operation copy output {rgba.red rgba.green rgba.blue -rgba.alpha} also_merge all name Merge xpos -773 ypos 974 } Crop { box {{parent.crop?0:-parent.overscan} {parent.crop?0:-parent.overscan} {parent.crop?width:width+parent.overscan.w} {parent.crop?height:height+parent.overscan.h}} intersect true name CropOverscan selected true xpos -773 ypos 1000 disable {{"!parent.enableOverscan && !parent.crop"}} addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Output { name Output xpos -773 ypos 1026 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_apeScreenClean.gizmo ================================================ Group { name apeScreenClean help "apeScreenClean v0.5 - apEssentials by Adrian Pueyo\n\nClean up an irregular green or blue screen using your plate and a clean plate.\n\napeScreenClean is my own flavor of clean screen tool (ScreenCorrect, PxF_ScreenClean, ...) offering extended functionality.\n\napeScreenClean v0.5 by Adrian Pueyo\nwww.adrianpueyo.com, 2015-2019" knobChanged "k = nuke.thisKnob()\nif k.name() in \[\"use_screen_color\",\"screen_color\"]:\n n = nuke.thisNode()\n kv = n\[\"use_screen_color\"].value()\n n\['screen_replace'].setEnabled(not kv)\n if kv:\n n\['screen_replace'].setValue(n\['screen_color'].getValue())" tile_color 0x8c8c8cff addUserKnob {20 apeScreenClean} addUserKnob {18 screen_color l "screen color" t "Pick the main color of your screen."} screen_color {0 0 0} addUserKnob {18 screen_replace l "screen replace" t "Select a color to replace your screen with. By default is ganged to the screen color." +DISABLED} screen_replace {0 0 0} addUserKnob {6 use_screen_color l "use screen color" t "Gang screen color / screen replace color." +STARTLINE} use_screen_color true addUserKnob {6 output_alpha l "output alpha" t "Output the alpha of the screenclean. If disabled outputs original alpha." -STARTLINE} output_alpha true addUserKnob {26 ""} addUserKnob {7 blackpoint t "Black point of the replacement matte." R -0.2 0.2} addUserKnob {7 gamma t "Gamma of the replacement matte (to fill darks)."} gamma 0.5 addUserKnob {26 ""} addUserKnob {41 maskChannel l "mask channel" T KeymixCleanScreen.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T KeymixCleanScreen.invertMask} addUserKnob {7 mix} mix 1 addUserKnob {26 version_author l "" t "apeScreenClean v0.5\n2015-2019" +STARTLINE T "
    apeScreenClean v0.5 - adrianpueyo.com, 2015-2019
    "} } Input { inputs 0 name Inputmask xpos 346 ypos 154 number 2 } Input { inputs 0 name plate xpos 456 ypos 29 } set N9684bfd0 [stack 0] push $N9684bfd0 OFXuk.co.thefoundry.keylight.keylight_v201 { show "Intermediate Result" unPreMultiply false screenColour {{parent.screen_color x10 0.1965884119} {parent.screen_color x10 0.5346660018} {parent.screen_color x10 0.1694011688}} screenGain 1 screenBalance 0.5 alphaBias {0.5 0.5 0.5} despillBias {0.5 0.5 0.5} gangBiases true preBlur 0 "Screen Matte" 0 screenClipMin 0 screenClipMax 1 screenClipRollback 0 screenGrowShrink 0 screenSoftness 0 screenDespotBlack 0 screenDespotWhite 0 screenReplaceMethod "Soft Colour" screenReplaceColour {0.5 0.5 0.5} Tuning 0 midPoint 0.5 lowGain 1 midGain 1 highGain 1 "Inside Mask" 0 sourceAlphaHandling Ignore insideReplaceMethod "Soft Colour" insideReplaceColour {0.5 0.5 0.5} Crops 0 SourceXMethod Colour SourceYMethod Colour SourceEdgeColour 0 SourceCropL 0 SourceCropR 1 SourceCropB 0 SourceCropT 1 balanceSet false insideComponent None outsideComponent None cacheBreaker true name KeyP xpos 236 ypos 29 } Invert { channels alpha name InvertP xpos 236 ypos 53 } Input { inputs 0 name cleanplate xpos 346 ypos -8 number 1 } set Nc5a7b0d0 [stack 0] OFXuk.co.thefoundry.keylight.keylight_v201 { show "Intermediate Result" unPreMultiply false screenColour {{parent.screen_color x10 0.1965884119} {parent.screen_color x10 0.5346660018} {parent.screen_color x10 0.1694011688}} screenGain 1 screenBalance 0.5 alphaBias {0.5 0.5 0.5} despillBias {0.5 0.5 0.5} gangBiases true preBlur 0 "Screen Matte" 0 screenClipMin 0 screenClipMax 1 screenClipRollback 0 screenGrowShrink 0 screenSoftness 0 screenDespotBlack 0 screenDespotWhite 0 screenReplaceMethod "Soft Colour" screenReplaceColour {0.5 0.5 0.5} Tuning 0 midPoint 0.5 lowGain 1 midGain 1 highGain 1 "Inside Mask" 0 sourceAlphaHandling Ignore insideReplaceMethod "Soft Colour" insideReplaceColour {0.5 0.5 0.5} Crops 0 SourceXMethod Colour SourceYMethod Colour SourceEdgeColour 0 SourceCropL 0 SourceCropR 1 SourceCropB 0 SourceCropT 1 balanceSet false insideComponent None outsideComponent None cacheBreaker true name KeyCP xpos 126 ypos -8 } Invert { channels alpha name InvertCP xpos 126 ypos 16 } ChannelMerge { inputs 2 operation divide name NormalizeScreen xpos 126 ypos 48 } Grade { channels alpha blackpoint {{parent.blackpoint}} gamma {{parent.gamma}} name GradeAlpha xpos 126 ypos 90 } set N84241d30 [stack 0] Dot { name Dot1 xpos 160 ypos 125 } push $N84241d30 push $Nc5a7b0d0 Grade { channels rgba white 0 add {{parent.screen_replace} {parent.screen_replace} {parent.screen_replace} {parent.screen_replace}} name GradeScreenColor xpos 346 ypos 16 } push $Nc5a7b0d0 Merge2 { inputs 2 operation from name MergeSC xpos 346 ypos 40 } Merge2 { inputs 2 operation mask name Merge1 xpos 346 ypos 94 } push $N9684bfd0 Merge2 { inputs 2 operation from output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge3 xpos 456 ypos 94 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 456 ypos 118 disable {{!parent.output_alpha}} } Keymix { inputs 3 channels {{{parent.DirBlur.channels}}} mix {{parent.mix}} name KeymixCleanScreen xpos 456 ypos 150 disable {{"!\[exists parent.input2]"}} } Output { name Output1 xpos 456 ypos 182 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_apeScreenGrow.gizmo ================================================ Group { name apeScreenGrow help "apeScreenGrow v0.4 - apEssentials by Adrian Pueyo\n\nErode the color of a screen to fill the insides of your subject, useful to generate cleanplates in a more controlled way than the IBKColour node. \n\napeScreenGrow is my own flavor of color extend nodes (EdgeExtend, ColorEdge, PxF_Filler, DilateRGB), taking what I like the most, taking out what I never use and adding some extra functionality to make it as straight-forward as possible.\n\nMatte input expects a hard alpha matte of the part you want to cover up.\n\napeScreenGrow v0.4 by Adrian Pueyo.\nadrianpueyo.com, 2015-2018." knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"steps\":\n s = int(n\[\"steps\"].value())\n nd = nuke.toNode(\"DP\")\n ndX = nd.xpos()\n ndY = nd.ypos()\n s_prev = len(nuke.allNodes(\"Unpremult\"))\n \[nuke.delete(i) for i in nuke.allNodes() if i.xpos()>ndX]\n # Merge\n nm = nuke.nodes.Merge2()\n nm.setXYpos(ndX+40,ndY+340)\n nm\[\"operation\"].setValue(\"over\")\n nuke.toNode(\"TOut\").setInput(0,nm)\n for i in range(s):\n # Blur\n nb = nuke.nodes.Blur()\n nb.setXYpos(ndX+40+i*100,ndY+80)\n nb.setInput(0,nd)\n nb\[\"channels\"].setValue(\"all\")\n nb\[\"filter\"].setValue(\"gaussian\")\n nb\[\"size\"].setValue(\[0,0])\n nb\[\"size\"].setExpression(\"DP.f(%s)\"%(i+1))\n # Unpremult\n nu = nuke.nodes.Unpremult()\n nu.setXYpos(ndX+40+i*100,ndY+120)\n nu.setInput(0,nb)\n nu\[\"channels\"].setValue(\"rgba\")\n nu\[\"alpha\"].setValue(\"mask.a\")\n # FilterErode\n nf = nuke.nodes.FilterErode()\n nf.setXYpos(ndX+40+i*100,ndY+160)\n nf.setInput(0,nu)\n nf\[\"channels\"].setValue(\"alpha\")\n nf\[\"filter\"].setValue(\"quadratic\")\n nf\[\"size\"].setValue(\[0,0])\n nf\[\"size\"].setExpression(\"DP.f(%s)/2\"%(i+1))\n # Premult\n np = nuke.nodes.Premult()\n np.setXYpos(ndX+40+i*100,ndY+200)\n np.setInput(0,nf)\n # BlurInside\n nbi = nuke.nodes.Blur()\n nbi.setXYpos(ndX+40+i*100,ndY+240)\n nbi.setInput(0,np)\n nbi\[\"channels\"].setValue(\"all\")\n nbi\[\"filter\"].setValue(\"quadratic\")\n nbi\[\"size\"].setValue(\[0,0])\n nbi\[\"size\"].setExpression(\"DP.f(%s)*parent.blur_inside/parent.size\"%(i+1))\n nm.setInput(s-i-1 if (s-i)<3 else s-i, nbi)\n " tile_color 0x8c8c8cff addUserKnob {20 apeScreenGrow} addUserKnob {41 erode l "matte erode" t "Global erode on the matte before applying the edge grow effect." T Dilate1.size} addUserKnob {14 size l "screen grow" t "Maximum pixel size of the screen grow effect." R 0 100} size 20 addUserKnob {3 steps t "Number of blur iterations."} steps 5 addUserKnob {26 ""} addUserKnob {7 rotate t "Apply a rotation to the effect (e.g. when having diagonal lines on a greenscreen)." R -180 180} addUserKnob {7 power t "Distribution of the blur size of the iterations. A higher power will concentrate more of them towards the edges, where the quality is more important." R 0 3} power 2 addUserKnob {14 blur_inside l "blur inside" t "Incremental blur on the steps, so that the ones that collide get blended together." R 0 100} addUserKnob {41 bg_color l "bg color" t "Background color to fill the inside." T Add1.value} addUserKnob {26 ""} addUserKnob {41 matte_channel l matte t "Matte channel to be used as the alpha for the effect. Works best with hard mattes." T Copy1.from0} addUserKnob {41 invert -STARTLINE T InvertPre1.disable} addUserKnob {26 version_author l "" t "apeScreenGrow v0.4\n2015-2018" +STARTLINE T "
    apeScreenGrow v0.4 - adrianpueyo.com, 2015-2018
    "} } Input { inputs 0 name Inputmatte xpos 362 ypos -44 number 1 } Shuffle { name ShuffleAssert xpos 362 ypos -20 } Grade { channels alpha blackpoint 0.001 whitepoint 0.001 white 10000000 white_clamp true name Grade1 xpos 362 ypos 4 } Dilate { name Dilate1 xpos 362 ypos 36 } Input { inputs 0 name Inputimg xpos 211 ypos -17 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 211 ypos 36 } Invert { channels alpha name InvertPre1 xpos 211 ypos 110 } Premult { name Premult1 xpos 211 ypos 151 } set Ne49a2fb0 [stack 0] Dot { name Dot1 xpos 527 ypos 154 } Transform { rotate {{parent.rotate}} center {960 540} name TIn xpos 493 ypos 172 } Shuffle { red alpha out mask name Shuffle1 xpos 493 ypos 199 } Dot { name DP xpos 527 ypos 252 addUserKnob {20 User} addUserKnob {14 f R 0 100} f {{pow((t/parent.steps),parent.power)*parent.size} {pow((t/parent.steps),parent.power)*parent.size}} } set Ne4e13de0 [stack 0] Blur { size {{DP.f(1)} {DP.f(1)}} name Blur1 xpos 567 ypos 332 } Unpremult { channels rgba alpha mask.a name Unpremult1 xpos 567 ypos 372 } FilterErode { channels alpha size {{DP.f(1)/2} {DP.f(1)/2}} filter quadratic name FilterErode1 xpos 567 ypos 412 } Premult { name Premult2 xpos 567 ypos 452 } Blur { size {{DP.f(1)*parent.blur_inside/parent.size} {DP.f(1)*parent.blur_inside/parent.size}} filter quadratic name Blur2 xpos 567 ypos 492 } push $Ne4e13de0 Blur { size {{DP.f(2)} {DP.f(2)}} name Blur3 xpos 667 ypos 332 } Unpremult { channels rgba alpha mask.a name Unpremult2 xpos 667 ypos 372 } FilterErode { channels alpha size {{DP.f(2)/2} {DP.f(2)/2}} filter quadratic name FilterErode2 selected true xpos 667 ypos 412 } Premult { name Premult3 xpos 667 ypos 452 } Blur { size {{DP.f(2)*parent.blur_inside/parent.size} {DP.f(2)*parent.blur_inside/parent.size}} filter quadratic name Blur4 xpos 667 ypos 492 } push $Ne4e13de0 Blur { size {{DP.f(3)} {DP.f(3)}} name Blur5 xpos 767 ypos 332 } Unpremult { channels rgba alpha mask.a name Unpremult3 xpos 767 ypos 372 } FilterErode { channels alpha size {{DP.f(3)/2} {DP.f(3)/2}} filter quadratic name FilterErode3 xpos 767 ypos 412 } Premult { name Premult4 xpos 767 ypos 452 } Blur { size {{DP.f(3)*parent.blur_inside/parent.size} {DP.f(3)*parent.blur_inside/parent.size}} filter quadratic name Blur6 xpos 767 ypos 492 } push 0 push $Ne4e13de0 Blur { size {{DP.f(4)} {DP.f(4)}} name Blur7 xpos 867 ypos 332 } Unpremult { channels rgba alpha mask.a name Unpremult4 xpos 867 ypos 372 } FilterErode { channels alpha size {{DP.f(4)/2} {DP.f(4)/2}} filter quadratic name FilterErode4 xpos 867 ypos 412 } Premult { name Premult5 xpos 867 ypos 452 } Blur { size {{DP.f(4)*parent.blur_inside/parent.size} {DP.f(4)*parent.blur_inside/parent.size}} filter quadratic name Blur8 xpos 867 ypos 492 } push $Ne4e13de0 Blur { size {{DP.f(5)} {DP.f(5)}} name Blur9 xpos 967 ypos 332 } Unpremult { channels rgba alpha mask.a name Unpremult5 xpos 967 ypos 372 } FilterErode { channels alpha size {{DP.f(5)/2} {DP.f(5)/2}} filter quadratic name FilterErode5 xpos 967 ypos 412 } Premult { name Premult6 xpos 967 ypos 452 } Blur { size {{DP.f(5)*parent.blur_inside/parent.size} {DP.f(5)*parent.blur_inside/parent.size}} filter quadratic name Blur10 xpos 967 ypos 492 } Merge2 { inputs 5+1 name Merge1 xpos 567 ypos 592 } Transform { rotate {{-parent.rotate}} center {960 540} name TOut xpos 321 ypos 671 } push $Ne49a2fb0 Merge2 { inputs 2 operation under bbox B name MG xpos 211 ypos 671 } set Ne48ae1d0 [stack 0] Shuffle { red black green black blue black alpha black name Shuffle2 xpos 41 ypos 671 } Add { channels rgba name Add1 xpos 41 ypos 722 } push $Ne48ae1d0 Merge2 { inputs 2 operation under name MG1 xpos 211 ypos 722 } Output { name Output1 xpos 211 ypos 834 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_bm_CameraShake.gizmo ================================================ Group { name bm_CameraShake help "Gives more control than Nuke's built-in CameraShake gizmo.\n\nCamera float, shake & sub-frame jitter settings are defined independently, then all 3 curves are added together into a final, new expression so your output curve has plenty of detail (especially in the motion blur) & only filters your image once." tile_color 0x222222ff note_font Verdana selected true mapsize {0.15 0.15} addUserKnob {20 Options} addUserKnob {26 ""} addUserKnob {6 switchCheckerboard l Test t "Replaces input image with checkerboard so you can see your camera shake uncontaminated." +STARTLINE} addUserKnob {4 noiseType l " Noise Type " t "Choose between 3 different noise functions to generate different types of camera shake." -STARTLINE M {fBm Turbulence Noise "" "" "" "" ""}} addUserKnob {26 ""} addUserKnob {7 refFrame l "Reference Frame" t "Setting a reference frame is handy for scaling a curve's frequency around a specific point in time.\n\nNote: must be set prior to tweaking any parameters, as changing reference frame will offset your curve." R 1000 1100} refFrame 1001 addUserKnob {22 setRef l "Set to current Frame" t "Set the Reference Frame to the current frame in the Viewer." T nuke.thisNode().knob('refFrame').setValue(nuke.frame()) +STARTLINE} addUserKnob {22 global_random_seed l "Global Random Seed" t "Randomize all seed values (Jitter, Shake and Float)." -STARTLINE T "n = nuke.thisNode()\nfor knob_name in ('jitterSeedRandomBtn', 'shakeSeedRandomBtn', 'floatSeedRandomBtn'):\n k = n.knob(knob_name)\n if k:\n k.execute()"} addUserKnob {26 ""} addUserKnob {7 globalAmt l "Global Amount" t "Control the overall amount of camera shake in one go." R 0 5} globalAmt 1 addUserKnob {26 ""} addUserKnob {20 fineControl l " C O N T R O L S" n 1} addUserKnob {26 spacer01 l "" +STARTLINE T " "} addUserKnob {6 toggleJitter l Jitter t "Turn Camera Shake Jitter on/off." +STARTLINE} toggleJitter true addUserKnob {7 jitterAmt l " " t "Adjust the contribution of the Jitter animation curve into the overall camera shake." -STARTLINE R 0 5} jitterAmt 1 addUserKnob {6 toggleShake l Shake t "Turn Camera Shake Shake on/off." +STARTLINE} toggleShake true addUserKnob {7 shakeAmt l "" t "Adjust the contribution of the Shake animation curve into the overall camera shake." -STARTLINE R 0 5} shakeAmt 1 addUserKnob {6 toggleFloat l Float t "Turn Camera Shake Float on/off." +STARTLINE} toggleFloat true addUserKnob {7 floatAmt l " " t "Adjust the contribution of the Float animation curve into the overall camera shake." -STARTLINE R 0 5} floatAmt 1 addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {20 weightGroup l " E D G E C O M P E N S A T I O N // G L O B A L T R A N S F O R M" n 1} weightGroup 0 addUserKnob {26 unnames l "" +STARTLINE T " "} addUserKnob {4 edgePulldown l "Edge Type" t "For larger camera shakes, you will see edge encroachment issues.\n\nSpread will \"pixel smear\" the outer-most pixels to the edge of your format.\n\nMirror will flip/flop the input image around it's edges for more detail." M {None Spread Mirror "" "" ""}} addUserKnob {26 ""} addUserKnob {41 type l "Tile Region" T MirrorBorder.type} addUserKnob {41 size l "Tile Amount (px)" T MirrorBorder.size} addUserKnob {26 chokeEdgesText l "Choke Edges"} addUserKnob {41 leftChoke l "Left Choke" T MirrorBorder.leftChoke} addUserKnob {41 rightChoke l "Right Choke" T MirrorBorder.rightChoke} addUserKnob {41 topChoke l "Top Choke" T MirrorBorder.topChoke} addUserKnob {41 bottomChoke l "Bottom Choke" T MirrorBorder.bottomChoke} addUserKnob {26 edgeSpacer l " "} addUserKnob {12 edgeTranslate l Translate t "Manually translate the image."} addUserKnob {7 edgeRotate l Rotate t "Manually rotate the image." R 0 360} addUserKnob {14 edgeScale l Scale t "Manually scale the image to prevent edge encroachment." R 0 100} edgeScale 1 addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {26 ""} addUserKnob {20 moblurGroup l " M O T I O N B L U R" n 1} moblurGroup 0 addUserKnob {26 spacer_02 l "" +STARTLINE T " "} addUserKnob {6 toggleMoblur l "Motion Blur" t "Turn motion blur on/off." +STARTLINE} toggleMoblur true addUserKnob {6 show_render_samples l "Show Render Samples" t "When enabled, the viewer uses Render Samples even when not rendering." -STARTLINE} addUserKnob {26 spacer_03 l "" +STARTLINE T " "} addUserKnob {41 filter T jitterCTRL_fBm.filter} addUserKnob {26 spacer_misc l "" +STARTLINE T " "} addUserKnob {3 which_samples +INVISIBLE} which_samples {{"toggleMoblur==0?0:(show_render_samples?RenderSamples:(\[python \{nuke.executing()\}]?RenderSamples:GUISamples))"}} addUserKnob {3 GUISamples l "GUI Samples" t "How many motion blur samples to display in the GUI. (keep this low for Nuke Script interactivity.)"} GUISamples 1 addUserKnob {3 RenderSamples l " Render Samples" t "How many motion blur samples to use in the render. (the higher the number, the better your result!)" -STARTLINE} RenderSamples 16 addUserKnob {26 spacer_misc2 l "" +STARTLINE T " "} addUserKnob {41 shutter T jitterCTRL_fBm.shutter} addUserKnob {41 shutteroffset l "shutter offset" T jitterCTRL_fBm.shutteroffset} addUserKnob {41 shuttercustomoffset l "" -STARTLINE T jitterCTRL_fBm.shuttercustomoffset} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {26 overallOutput l "" -STARTLINE T "Load these values into the curve editor to view the overall animation curve.\n"} addUserKnob {12 outputOverallValue l " " t "The final animation curve of your camera shake."} outputOverallValue {{(toggleJitter==1?jitterCTRL_fBm.translate.x:0)+(toggleShake==1?shakeCTRL_fBm.translate.x:0)+(toggleFloat==1?floatCTRL_fBm.translate.x:0)} {(toggleJitter==1?jitterCTRL_fBm.translate.y:0)+(toggleShake==1?shakeCTRL_fBm.translate.y:0)+(toggleFloat==1?floatCTRL_fBm.translate.y:0)}} addUserKnob {26 ""} addUserKnob {26 info_1 l "" +STARTLINE T "bm_CameraShake v4.0 created by Ben McEwan.
    \nThanks to Miles Lauridsen & Lukas Fabian for their contributions.
    \nLast updated: 29th November, 2020.
    "} addUserKnob {20 jitterTab l Jitter} addUserKnob {26 ""} addUserKnob {14 jitterTranslate l Translate R 0 100} jitterTranslate {4 3} addUserKnob {7 jitterRotate l Rotate R 0 3} addUserKnob {26 ""} addUserKnob {3 jitterOctaves l Octaves} jitterOctaves 3 addUserKnob {7 jitterSpeed l Frequency R 0 5} jitterSpeed 3 addUserKnob {3 jitterSeed l Seed} jitterSeed 71526 addUserKnob {22 jitterSeedRandomBtn l " Random Seed " -STARTLINE T "import random\nnuke.thisNode().knob('jitterSeed').setValue(random.randint(1,99999))"} addUserKnob {26 ""} addUserKnob {26 drg l "" +STARTLINE T "Load these values into the curve editor to view the jitter animation curve.\n"} addUserKnob {12 outputJitterValue l " "} outputJitterValue {{(jitterCTRL_fBm.translate.x)} {(jitterCTRL_fBm.translate.y)}} addUserKnob {26 ""} addUserKnob {20 shakeTab l Shake} addUserKnob {26 ""} addUserKnob {14 shakeTranslate l Translate R 0 100} shakeTranslate {10 7} addUserKnob {7 shakeRotate l Rotate R 0 3} shakeRotate 0.2 addUserKnob {26 ""} addUserKnob {3 shakeOctaves l Octaves} shakeOctaves 2 addUserKnob {7 shakeSpeed l Frequency R 0 5} shakeSpeed 1.5 addUserKnob {3 shakeSeed l Seed} shakeSeed 16572 addUserKnob {22 shakeSeedRandomBtn l " Random Seed " -STARTLINE T "import random\nnuke.thisNode().knob('shakeSeed').setValue(random.randint(1,99999))"} addUserKnob {26 ""} addUserKnob {26 ehhkmlkjhg l "" +STARTLINE T "Load these values into the curve editor to view the shake animation curve.\n"} addUserKnob {12 outputShakeValue l " "} outputShakeValue {{(shakeCTRL_fBm.translate.x)} {(shakeCTRL_fBm.translate.y)}} addUserKnob {26 ""} addUserKnob {20 floatTab l Float} addUserKnob {26 ""} addUserKnob {14 floatTranslate l Translate R 0 100} floatTranslate {40 32} addUserKnob {7 floatRotate l Rotate R 0 3} floatRotate 7 addUserKnob {26 ""} addUserKnob {3 floatOctaves l Octaves} floatOctaves 1 addUserKnob {7 floatSpeed l Frequency R 0 5} floatSpeed 0.06 addUserKnob {3 floatSeed l Seed} floatSeed 72424 addUserKnob {22 floatSeedRandomBtn l " Random Seed " -STARTLINE T "import random\nnuke.thisNode().knob('floatSeed').setValue(random.randint(1,99999))"} addUserKnob {26 ""} addUserKnob {26 wd l "" +STARTLINE T "Load these values into the curve editor to view the float animation curve.\n"} addUserKnob {12 outputFloatValue l " "} outputFloatValue {{(floatCTRL_fBm.translate.x)} {(floatCTRL_fBm.translate.y)}} addUserKnob {26 ""} } CheckerBoard2 { inputs 0 linecolor 0 linewidth 60 name CheckerBoard1 xpos -144 ypos -391 } Reformat { type "to box" box_width {{Input.width}} box_height {{Input.height}} box_fixed true black_outside true name Reformat1 xpos -144 ypos -319 } Dot { name Dot2 xpos -110 ypos -273 } Input { inputs 0 name Input xpos 17 ypos -374 } Switch { inputs 2 which {{switchCheckerboard i}} name Switch1 xpos 17 ypos -277 } Dot { name Dot3 note_font_size 41 xpos 51 ypos -219 } set N6a0db700 [stack 0] Dot { name Dot11 label " " note_font "Arial Black" note_font_size 16 xpos 298 ypos -219 } Dot { name Dot12 label " " note_font "Arial Black" note_font_size 16 xpos 298 ypos 365 } push $N6a0db700 Dot { name Dot4 note_font_size 41 xpos 51 ypos -154 } set N6ada6d00 [stack 0] Group { name MirrorBorder onCreate "n = nuke.thisNode()\nsize = n.knob(\"size\")\n\nsize.setRange(0, 500)" tile_color 0xa57aaaff note_font "Bitstream Vera Sans Bold" note_font_color 0xffffffff xpos -93 ypos -91 addUserKnob {20 MirrorBorder} addUserKnob {4 type l "Tile Region" M {"to Format" "to input BBox" "" ""}} addUserKnob {14 size l "Tile Amount" R 0 500} size 100 addUserKnob {26 chokeEdgesText l "Choke Edges"} addUserKnob {7 leftChoke l "Left Choke" R -100 100} addUserKnob {7 rightChoke l "Right Choke" R -100 100} addUserKnob {7 topChoke l "Top Choke" R -100 100} addUserKnob {7 bottomChoke l "Bottom Choke" R -100 100} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelMask l "" -STARTLINE T Multiply1.maskChannelMask} addUserKnob {41 inject -STARTLINE T Multiply1.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Multiply1.invert_mask} addUserKnob {41 fringe -STARTLINE T Multiply1.fringe} addUserKnob {7 mix} mix 1 addUserKnob {20 Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Name: T MirrorBorder} addUserKnob {26 ver l Version: T v03} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x3f414400 label "width mirror" note_font_size 60 note_font_color 0xffffffff xpos 704 ypos -277 bdwidth 265 bdheight 260 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x43504700 label "height mirror" note_font_size 60 note_font_color 0xffffffff xpos 1072 ypos -271 bdwidth 259 bdheight 267 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x5f6870ff label Corners note_font_size 60 note_font_color 0xffffffff xpos 1416 ypos -270 bdwidth 545 bdheight 264 } Input { inputs 0 name Input xpos 2050 ypos -606 } Dot { name Dot1 note_font_size 41 xpos 2084 ypos -546 } set N593fd900 [stack 0] Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"overscanType\":\n if n.knob(\"overscanType\").getValue() == 1:\n n.knob(\"overscanPercent\").setVisible(True)\n n.knob(\"overscan\").setVisible(False)\n else:\n n.knob(\"overscanPercent\").setVisible(False)\n n.knob(\"overscan\").setVisible(True)" tile_color 0xa57aaaff note_font "Verdana Bold" note_font_color 0xffffffff xpos 1907 ypos -549 addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} addUserKnob {14 overscan l Overscan R 0 400} addUserKnob {14 overscanPercent l "Overscan Percent" +HIDDEN R 1 4} overscanPercent 1 addUserKnob {20 inputBbox l "BBox Data" n 1} addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set N2aa26300 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set N6a0c4500 [stack 0] push $N2aa26300 Crop { box {{curve} {curve} {input.width} {input.height}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N6adfc000 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set N6adfc500 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{input.bbox.r/2} {input.bbox.t/2}} shutteroffset centred name Transform1 xpos 120 ypos 555 } push $N6adfc500 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $N6a0c4500 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $N6adfc000 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N28986a00 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $N28986a00 NoOp { name OutputBBox1 xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group NoOp { name Settings xpos 1907 ypos -493 addUserKnob {20 User} addUserKnob {15 mirrorRegion l "Mirror Region"} mirrorRegion {{"(type == 0 ? parent.BBoxToFormat.inputFormat : parent.BBoxToFormat.inputBBox) + int(parent.leftChoke)"} {"(type == 0 ? parent.BBoxToFormat.inputFormat : parent.BBoxToFormat.inputBBox) + int(parent.bottomChoke)"} {"(type == 0 ? parent.BBoxToFormat.inputFormat : parent.BBoxToFormat.inputBBox) - int(parent.rightChoke)"} {"(type == 0 ? parent.BBoxToFormat.inputFormat : parent.BBoxToFormat.inputBBox) - int(parent.topChoke)"}} } Input { inputs 0 name Inputmask xpos 1818 ypos 134 number 1 } Dot { name Dot26 note_font_size 41 xpos 1852 ypos 236 } set N6ae10000 [stack 0] Invert { name Invert1 xpos 1818 ypos 275 } push $N6ae10000 push $N593fd900 Dot { name Dot4 xpos 2084 ypos -344 } set N6ae10a00 [stack 0] Dot { name Dot8 xpos 1491 ypos -344 } set N6ae10f00 [stack 0] Dot { name Dot9 xpos 1491 ypos -170 } set N6ae11400 [stack 0] Dot { name Dot11 xpos 1607 ypos -170 } set N6ae11900 [stack 0] Dot { name Dot13 xpos 1735 ypos -170 } set N6ae11e00 [stack 0] Dot { name Dot14 xpos 1876 ypos -170 } Crop { box {{parent.Settings.mirrorRegion.r-parent.size.w} {parent.Settings.mirrorRegion.y} {parent.Settings.mirrorRegion.r} {parent.Settings.mirrorRegion.y+parent.size.h}} name Crop_BR xpos 1842 ypos -124 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_1 l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_2 l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Transform { scale -1 center {{parent.Settings.mirrorRegion.r} {parent.Settings.mirrorRegion.y}} name Transform_BR label BottomRight xpos 1842 ypos -71 } push $N6ae11e00 Crop { box {{parent.Settings.mirrorRegion.x} {parent.Settings.mirrorRegion.y} {parent.Settings.mirrorRegion.x+parent.size.w} {parent.Settings.mirrorRegion.y+parent.size.h}} name Crop_BL xpos 1701 ypos -125 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Transform { scale -1 center {{parent.Settings.mirrorRegion.x} {parent.Settings.mirrorRegion.y}} name Transform_BL label "Bottom Left" xpos 1701 ypos -70 } push $N6ae11900 Crop { box {{parent.Settings.mirrorRegion.r-parent.size.w} {parent.Settings.mirrorRegion.t-parent.size.h} {parent.Settings.mirrorRegion.r} {parent.Settings.mirrorRegion.t}} name Crop_TR xpos 1573 ypos -122 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Transform { scale -1 center {{parent.Settings.mirrorRegion.r} {parent.Settings.mirrorRegion.t}} name Transform_TR label "Top Right" xpos 1573 ypos -70 } push $N6ae11400 Crop { box {{parent.Settings.mirrorRegion.x} {parent.Settings.mirrorRegion.t-parent.size.h} {parent.Settings.mirrorRegion.x+parent.size.w} {parent.Settings.mirrorRegion.t}} name Crop_TL xpos 1457 ypos -124 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Transform { scale -1 center {{parent.Settings.mirrorRegion.x} {parent.Settings.mirrorRegion.t}} name Transform_TL label "Top Left" xpos 1457 ypos -72 } push $N6ae10f00 Dot { name Dot7 xpos 1146 ypos -344 } set N6ae25400 [stack 0] Dot { name Dot5 xpos 1146 ypos -171 } set N6ae25900 [stack 0] Dot { name Dot6 xpos 1245 ypos -171 } Crop { box {{parent.Settings.mirrorRegion.x} {parent.Settings.mirrorRegion.t-parent.size.h} {parent.Settings.mirrorRegion.r} {parent.Settings.mirrorRegion.t}} name Crop_T xpos 1211 ypos -124 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Transform { scale {1 -1} center {0 {parent.Settings.mirrorRegion.t}} name Transform_T label Top xpos 1211 ypos -73 } push $N6ae25900 Crop { box {{parent.Settings.mirrorRegion.x} {parent.Settings.mirrorRegion.y} {parent.Settings.mirrorRegion.r} {parent.Settings.mirrorRegion.y+parent.size.h}} name Crop_B xpos 1112 ypos -126 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Transform { scale {1 -1} center {0 {parent.Settings.mirrorRegion.y}} name Transform_B label Bottom xpos 1112 ypos -71 } push 0 push $N6ae25400 Dot { name Dot2 xpos 883 ypos -344 } set N6ae27700 [stack 0] Dot { name Dot3 xpos 883 ypos -177 } set N6ae3c000 [stack 0] Crop { box {{parent.Settings.mirrorRegion.r-parent.size.w} {parent.Settings.mirrorRegion.y} {parent.Settings.mirrorRegion.r} {parent.Settings.mirrorRegion.t}} name Crop_R xpos 849 ypos -128 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Transform { scale {-1 1} center {{parent.Settings.mirrorRegion.r} 0} filter impulse name Transform_R label Right xpos 849 ypos -84 } push $N6ae3c000 Dot { name Dot10 xpos 778 ypos -177 } Crop { box {{parent.Settings.mirrorRegion.x} {parent.Settings.mirrorRegion.y} {parent.Settings.mirrorRegion.x+parent.size.w} {parent.Settings.mirrorRegion.t}} name Crop_L xpos 744 ypos -126 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Transform { scale {-1 1} center {{parent.Settings.mirrorRegion.x} 0} filter impulse name Transform_L label Left xpos 744 ypos -82 } Merge2 { inputs 8+1 operation disjoint-over also_merge all name Merge5 xpos 1346 ypos 122 } Dot { name Dot15 note_font_size 41 xpos 1380 ypos 236 } set N6ae3e300 [stack 0] Merge2 { inputs 2 operation mask bbox intersection name MergeIntersection1 xpos 1701 ypos 233 disable {{"!\[exists parent.input1]"}} } push $N6ae3e300 Dot { name Dot17 note_font_size 41 xpos 1380 ypos 359 } CopyBBox { inputs 2 name CopyBBox1 xpos 1701 ypos 356 disable {{"!\[exists parent.input1]"}} } Multiply { inputs 1+1 value 0 name Multiply1 label "\[value value]" xpos 1818 ypos 347 disable {{"!\[exists parent.input1]"}} } push $N6ae10a00 Crop { box {{parent.Settings.mirrorRegion} {parent.Settings.mirrorRegion} {parent.Settings.mirrorRegion} {parent.Settings.mirrorRegion}} name Crop1 xpos 2050 ypos -200 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Merge2 { inputs 2 operation disjoint-over also_merge all maskChannelMask {{{exists parent.input[value input1.number] == 0 ? 0 : 5}}} name Merge3 xpos 2050 ypos 356 } Dot { name Dot20 label A note_font_size 41 xpos 2084 ypos 469 } push $N6ae27700 Dot { name Dot12 note_font_size 41 xpos 600 ypos -344 } Dot { name Dot18 label B note_font_size 41 xpos 600 ypos 471 } Dot { name Dot23 note_font_size 41 xpos 600 ypos 558 } Dot { name Dot16 note_font_size 41 xpos 1940 ypos 558 } set N6ae52300 [stack 0] Merge2 { inputs 2 operation copy Achannels none Bchannels none output none also_merge all mix {{parent.mix}} name MergeKeymix xpos 2050 ypos 551 } push $N6ae52300 Dot { name Dot19 note_font_size 41 xpos 1940 ypos 640 } Switch { inputs 2 which {{"parent.mix > 0 ? 1 : 0"}} name Switch1 xpos 2050 ypos 637 } Output { name Output1 xpos 2050 ypos 841 } end_group push $N6ada6d00 Switch { inputs 2 which {{edgePulldown==2?1:0}} name Switch2 xpos 17 ypos -91 } Dot { name Dot1 label " " note_font "Arial Black" note_font_size 16 xpos 51 ypos 50 } set N6ae53700 [stack 0] Transform { translate {{noise((base-base(refFrame))*(jitterSpeed/bfreq)+base(refFrame),2.5,3.5)*jitterTranslate.w*globalAmt*jitterAmt} {noise(2.5,(base2-base2(refFrame))*(jitterSpeed/bfreq)+base2(refFrame),3.5)*jitterTranslate.h*globalAmt*jitterAmt}} rotate {{noise((base-base(refFrame))*(jitterSpeed/bfreq)+base(refFrame),jitterOctaves,.5)*jitterRotate*globalAmt*jitterAmt}} scale {1 1} center {{toggleJitter==1?((noise(noise((base-base(refFrame))*(jitterSpeed/bfreq)+base(refFrame),2.5,3.5))*input.width)+input.width/2):(input.width/2)*globalAmt*jitterAmt} {toggleJitter==1?((noise(noise((base2-base2(refFrame))*(jitterSpeed/bfreq)+base2(refFrame),2.5,3.5))*input.height)+input.height/2):(input.height/2)*globalAmt*jitterAmt}} filter {{jitterCTRL_fBm.filter}} clamp {{jitterCTRL_fBm.clamp}} black_outside {{jitterCTRL_fBm.black_outside}} motionblur {{jitterCTRL_fBm.motionblur}} shutter {{jitterCTRL_fBm.shutter}} shutteroffset {{jitterCTRL_fBm.shutteroffset}} shuttercustomoffset {{jitterCTRL_fBm.shuttercustomoffset}} name jitterCTRL_noise xpos 169 ypos 108 disable {{!toggleJitter}} addUserKnob {20 User} addUserKnob {7 base} base {{parent.jitterCTRL_fBm.base}} addUserKnob {7 base2} base2 {{parent.jitterCTRL_fBm.base2}} addUserKnob {7 bfreq l "base frequancy"} bfreq {{parent.jitterCTRL_fBm.bfreq}} } Transform { translate {{noise((base-base(refFrame))*(shakeSpeed/bfreq)+base(refFrame),2.5,3.5)*jitterTranslate.w*globalAmt*jitterAmt} {noise(2.5,(base2-base2(refFrame))*(shakeSpeed/bfreq)+base2(refFrame),3.5)*jitterTranslate.h*globalAmt*jitterAmt}} rotate {{noise(((frame-refFrame)*shakeSpeed)+shakeSeed+refFrame,shakeOctaves,.5)*shakeRotate*globalAmt*shakeAmt}} scale {1 1} center {{toggleShake==1?((noise(noise((base-base(refFrame))*(shakeSpeed/bfreq)+base(refFrame),2.5,3.5))*input.width)+input.width/2):(input.width/2)*globalAmt*shakeAmt} {toggleShake==1?((noise(noise((base-base(refFrame))*(shakeSpeed/bfreq)+base(refFrame),2.5,3.5))*input.height)+input.height/2):(input.height/2)*globalAmt*shakeAmt}} filter {{jitterCTRL_fBm.filter}} clamp {{jitterCTRL_fBm.clamp}} black_outside {{jitterCTRL_fBm.black_outside}} motionblur {{jitterCTRL_fBm.motionblur}} shutter {{jitterCTRL_fBm.shutter}} shutteroffset {{jitterCTRL_fBm.shutteroffset}} shuttercustomoffset {{jitterCTRL_fBm.shuttercustomoffset}} name shakeCTRL_noise xpos 169 ypos 134 disable {{!toggleShake}} addUserKnob {20 User} addUserKnob {7 base} base {{parent.shakeCTRL_fBm.base}} addUserKnob {7 base2} base2 {{parent.shakeCTRL_fBm.base2}} addUserKnob {7 bfreq l "base frequency"} bfreq {{parent.shakeCTRL_fBm.bfreq}} } Transform { translate {{noise((base-base(refFrame))*(floatSpeed/bfreq)+base(refFrame),2.5,3.5)*jitterTranslate.w*globalAmt*jitterAmt} {noise(2.5,(base2-base2(refFrame))*(floatSpeed/bfreq)+base2(refFrame),3.5)*jitterTranslate.h*globalAmt*jitterAmt}} rotate {{noise((base-base(refFrame))*(floatSpeed/bfreq)+base(refFrame),floatOctaves,.5)*floatRotate*globalAmt*floatAmt}} scale {1 1} center {{toggleFloat==1?((noise(noise((base-base(refFrame))*(floatSpeed/bfreq)+base(refFrame),2.5,3.5))*input.width)+input.width/2):(input.width/2)*globalAmt*floatAmt} {toggleFloat==1?((noise(noise((base-base(refFrame))*(floatSpeed/bfreq)+base(refFrame),2.5,3.5))*input.height)+input.height/2):(input.height/2)*globalAmt*floatAmt}} filter {{jitterCTRL_fBm.filter}} clamp {{jitterCTRL_fBm.clamp}} black_outside {{jitterCTRL_fBm.black_outside}} motionblur {{jitterCTRL_fBm.motionblur}} shutter {{jitterCTRL_fBm.shutter}} shutteroffset {{jitterCTRL_fBm.shutteroffset}} shuttercustomoffset {{jitterCTRL_fBm.shuttercustomoffset}} name floatCTRL_noise xpos 169 ypos 158 disable {{!toggleFloat}} addUserKnob {20 User} addUserKnob {7 base} base {{parent.floatCTRL_fBm.base}} addUserKnob {7 base2} base2 {{parent.floatCTRL_fBm.base2}} addUserKnob {7 bfreq l "base frequency"} bfreq {{parent.floatCTRL_fBm.bfreq}} } Transform { translate {{edgeTranslate.x} {edgeTranslate.y}} rotate {{edgeRotate}} scale {{edgeScale} {edgeScale}} center {{"width/2 - translate"} {"height/2 - translate"}} filter {{jitterCTRL_fBm.filter}} black_outside {{edgePulldown==0?1:0}} motionblur {{which_samples}} shutter {{jitterCTRL_fBm.shutter}} shutteroffset {{jitterCTRL_fBm.shutteroffset}} shuttercustomoffset {{jitterCTRL_fBm.shuttercustomoffset}} name edgeScale3 xpos 169 ypos 200 } push $N6ae53700 Transform { translate {{turbulence((base-base(refFrame))*(jitterSpeed/bfreq)+base(refFrame),2.5,3.5,jitterOctaves,2,.5)*jitterTranslate.w*globalAmt*jitterAmt} {turbulence((base2-base2(refFrame))*(jitterSpeed/bfreq)+base2(refFrame),10.5,11.5,jitterOctaves,2,.5)*jitterTranslate.h*globalAmt*jitterAmt}} rotate {{turbulence((base-base(refFrame))*(jitterSpeed/bfreq)+base(refFrame),20.5,21.5,jitterOctaves,2,.5)*jitterRotate*globalAmt*jitterAmt}} scale {1 1} center {{toggleJitter==1?((turbulence((base-base(refFrame))*(jitterSpeed/bfreq)+base(refFrame),2.5,3.5,jitterOctaves,2,.5)*input.width)+input.width/2):(input.width/2)*globalAmt*jitterAmt} {toggleJitter==1?((turbulence((base2-base2(refFrame))*(jitterSpeed/bfreq)+base2(refFrame),10.5,11.5,jitterOctaves,2,.5)*input.height)+input.height/2):(input.height/2)*globalAmt*jitterAmt}} filter {{jitterCTRL_fBm.filter x1 0}} clamp {{jitterCTRL_fBm.clamp}} black_outside {{jitterCTRL_fBm.black_outside}} motionblur {{jitterCTRL_fBm.motionblur}} shutter {{jitterCTRL_fBm.shutter}} shutteroffset {{jitterCTRL_fBm.shutteroffset}} shuttercustomoffset {{jitterCTRL_fBm.shuttercustomoffset}} name jitterCTRL_turbulence xpos 17 ypos 109 disable {{!toggleJitter}} addUserKnob {20 User} addUserKnob {7 base} base {{parent.jitterCTRL_fBm.base}} addUserKnob {7 base2} base2 {{parent.jitterCTRL_fBm.base2}} addUserKnob {7 bfreq l "base frequency"} bfreq {{parent.jitterCTRL_fBm.bfreq}} } Transform { translate {{turbulence((base-base(refFrame))*(shakeSpeed/bfreq)+base(refFrame),2.5,3.5,shakeOctaves,2,.5)*shakeTranslate.w*globalAmt*shakeAmt} {turbulence((base2-base2(refFrame))*(shakeSpeed/bfreq)+base2(refFrame),10.5,11.5,shakeOctaves,2,.5)*shakeTranslate.h*globalAmt*shakeAmt}} rotate {{turbulence((base-base(refFrame))*(shakeSpeed/bfreq)+base(refFrame),20.5,21.5,shakeOctaves,2,.5)*shakeRotate*globalAmt*shakeAmt x7 70}} scale {1 1} center {{toggleShake==1?((turbulence((base-base(refFrame))*(shakeSpeed/bfreq)+base(refFrame),2.5,3.5,shakeOctaves,2,.5)*input.width)+input.width/2):(input.width/2)*globalAmt*shakeAmt} {toggleShake==1?((turbulence((base2-base2(refFrame))*(shakeSpeed/bfreq)+base2(refFrame),10.5,11.5,shakeOctaves,2,.5)*input.height)+input.height/2):(input.height/2)*globalAmt*shakeAmt}} filter {{jitterCTRL_fBm.filter x14 2}} clamp {{jitterCTRL_fBm.clamp}} black_outside {{jitterCTRL_fBm.black_outside}} motionblur {{jitterCTRL_fBm.motionblur}} shutter {{jitterCTRL_turbulence.shutter}} shutteroffset {{jitterCTRL_fBm.shutteroffset}} shuttercustomoffset {{jitterCTRL_turbulence.shuttercustomoffset}} name shakeCTRL_turbulence xpos 17 ypos 135 disable {{!toggleShake}} addUserKnob {20 User} addUserKnob {7 base} base {{parent.shakeCTRL_fBm.base}} addUserKnob {7 base2} base2 {{parent.shakeCTRL_fBm.base2}} addUserKnob {7 bfreq l "base frequency"} bfreq {{parent.shakeCTRL_fBm.bfreq}} } Transform { translate {{turbulence((base-base(refFrame))*(floatSpeed/bfreq)+base(refFrame),2.5,3.5,floatOctaves,2,.5)*floatTranslate.w*globalAmt*floatAmt} {turbulence((base2-base2(refFrame))*(floatSpeed/bfreq)+base2(refFrame),10.5,11.5,floatOctaves,2,.5)*floatTranslate.h*globalAmt*floatAmt}} rotate {{turbulence((base-base(refFrame))*(floatSpeed/bfreq)+base(refFrame),20.5,21.5,floatOctaves,2,.5)*floatRotate*globalAmt*floatAmt}} scale {1 1} center {{toggleFloat==1?((turbulence((base-base(refFrame))*(floatSpeed/bfreq)+base(refFrame),2.5,3.5,floatOctaves,2,.5)*input.width)+input.width/2):(input.width/2)*globalAmt*floatAmt} {toggleFloat==1?((turbulence((base2-base2(refFrame))*(floatSpeed/bfreq)+base2(refFrame),10.5,11.5,floatOctaves,2,.5)*input.height)+input.height/2):(input.height/2)*globalAmt*floatAmt}} filter {{jitterCTRL_fBm.filter x14 2}} clamp {{jitterCTRL_fBm.clamp}} black_outside {{jitterCTRL_fBm.black_outside}} motionblur {{jitterCTRL_fBm.motionblur}} shutter {{jitterCTRL_fBm.shutter}} shutteroffset {{jitterCTRL_fBm.shutteroffset}} shuttercustomoffset {{jitterCTRL_fBm.shuttercustomoffset}} name floatCTRL_turbulence xpos 17 ypos 159 disable {{!toggleFloat}} addUserKnob {20 User} addUserKnob {7 base} base {{parent.floatCTRL_fBm.base}} addUserKnob {7 base2} base2 {{parent.floatCTRL_fBm.base2}} addUserKnob {7 bfreq l "base frequency"} bfreq {{parent.floatCTRL_fBm.bfreq}} } Transform { translate {{edgeTranslate.x} {edgeTranslate.y}} rotate {{edgeRotate}} scale {{edgeScale} {edgeScale}} center {{"width/2 - translate"} {"height/2 - translate"}} filter {{jitterCTRL_fBm.filter}} black_outside {{edgePulldown==0?1:0}} motionblur {{which_samples}} shutter {{jitterCTRL_fBm.shutter}} shutteroffset {{jitterCTRL_fBm.shutteroffset}} shuttercustomoffset {{jitterCTRL_fBm.shuttercustomoffset}} name edgeScale2 xpos 17 ypos 204 } push $N6ae53700 Transform { translate {{fBm((base-base(refFrame))*(jitterSpeed/bfreq)+base(refFrame),2.5,3.5,jitterOctaves,2,.5)*jitterTranslate.w*globalAmt*jitterAmt} {fBm((base2-base2(refFrame))*(jitterSpeed/bfreq)+base2(refFrame),10.5,11.5,jitterOctaves,2,.5)*jitterTranslate.h*globalAmt*jitterAmt}} rotate {{fBm((base-base(refFrame))*(jitterSpeed/bfreq)+base(refFrame),20.5,21.5,jitterOctaves,2,.5)*jitterRotate*globalAmt*jitterAmt}} scale {1 1} center {{toggleJitter==1?((fBm((base-base(refFrame))*(jitterSpeed/bfreq)+base(refFrame),2.5,3.5,jitterOctaves,2,.5)*input.width)+input.width/2):(input.width/2)*globalAmt*jitterAmt} {toggleJitter==1?((fBm((base2-base2(refFrame))*(jitterSpeed/bfreq)+base2(refFrame),10.5,11.5,jitterOctaves,2,.5)*input.height)+input.height/2):(input.height/2)*globalAmt*jitterAmt}} black_outside {{edgePulldown==0?1:0}} motionblur {{which_samples}} shutteroffset centred name jitterCTRL_fBm xpos -128 ypos 103 disable {{!toggleJitter}} addUserKnob {20 User} addUserKnob {7 base} base {{frame*bfreq+jitterSeed}} addUserKnob {7 base2} base2 {{frame*bfreq+jitterSeed+100}} addUserKnob {7 bfreq l "base frequency"} bfreq 3 } Transform { translate {{fBm((base-base(refFrame))*(shakeSpeed/bfreq)+base(refFrame),2.5,3.5,shakeOctaves,2,.5)*shakeTranslate.w*globalAmt*shakeAmt} {fBm((base2-base2(refFrame))*(shakeSpeed/bfreq)+base2(refFrame),10.5,11.5,shakeOctaves,2,.5)*shakeTranslate.h*globalAmt*shakeAmt}} rotate {{fBm((base-base(refFrame))*(shakeSpeed/bfreq)+base(refFrame),20.5,21.5,shakeOctaves,2,.5)*shakeRotate*globalAmt*shakeAmt x7 70}} scale {1 1} center {{toggleShake==1?((fBm((base-base(refFrame))*(shakeSpeed/bfreq)+base(refFrame),2.5,3.5,shakeOctaves,2,.5)*input.width)+input.width/2):(input.width/2)*globalAmt*shakeAmt} {toggleShake==1?((fBm((base2-base2(refFrame))*(shakeSpeed/bfreq)+base2(refFrame),10.5,11.5,shakeOctaves,2,.5)*input.height)+input.height/2):(input.height/2)*globalAmt*shakeAmt}} filter {{jitterCTRL_fBm.filter x14 2}} clamp {{jitterCTRL_fBm.clamp}} black_outside {{jitterCTRL_fBm.black_outside}} motionblur {{jitterCTRL_fBm.motionblur}} shutter {{jitterCTRL_fBm.shutter}} shutteroffset {{jitterCTRL_fBm.shutteroffset}} shuttercustomoffset {{jitterCTRL_fBm.shuttercustomoffset}} name shakeCTRL_fBm xpos -128 ypos 127 disable {{!toggleShake}} addUserKnob {20 User} addUserKnob {7 base} base {{frame*bfreq+shakeSeed}} addUserKnob {7 base2} base2 {{frame*bfreq+shakeSeed+100}} addUserKnob {7 bfreq l "base frequancy"} bfreq 1.5 } Transform { translate {{fBm((base-base(refFrame))*(floatSpeed/bfreq)+base(refFrame),2.5,3.5,floatOctaves,2,.5)*floatTranslate.w*globalAmt*floatAmt} {fBm((base2-base2(refFrame))*(floatSpeed/bfreq)+base2(refFrame),10.5,11.5,floatOctaves,2,.5)*floatTranslate.h*globalAmt*floatAmt}} rotate {{fBm((base-base(refFrame))*(floatSpeed/bfreq)+base(refFrame),20.5,21.5,floatOctaves,2,.5)*floatRotate*globalAmt*floatAmt}} scale {1 1} center {{toggleFloat==1?((fBm((base-base(refFrame))*(floatSpeed/bfreq)+base(refFrame),2.5,3.5,floatOctaves,2,.5)*input.width)+input.width/2):(input.width/2)*globalAmt*floatAmt} {toggleFloat==1?((fBm((base2-base2(refFrame))*(floatSpeed/bfreq)+base2(refFrame),10.5,11.5,floatOctaves,2,.5)*input.height)+input.height/2):(input.height/2)*globalAmt*floatAmt}} filter {{jitterCTRL_fBm.filter x14 2}} clamp {{jitterCTRL_fBm.clamp}} black_outside {{jitterCTRL_fBm.black_outside}} motionblur {{jitterCTRL_fBm.motionblur}} shutter {{jitterCTRL_fBm.shutter}} shutteroffset {{jitterCTRL_fBm.shutteroffset}} shuttercustomoffset {{jitterCTRL_fBm.shuttercustomoffset}} name floatCTRL_fBm xpos -128 ypos 151 disable {{!toggleFloat}} addUserKnob {20 User} addUserKnob {7 base} base {{frame*bfreq+floatSeed}} addUserKnob {7 base2} base2 {{frame*bfreq+floatSeed+100}} addUserKnob {7 bfreq l "base frequency"} bfreq 0.06 } Transform { translate {{edgeTranslate.x} {edgeTranslate.y}} rotate {{edgeRotate}} scale {{edgeScale} {edgeScale}} center {{"width/2 - translate"} {"height/2 - translate"}} filter {{jitterCTRL_fBm.filter}} black_outside {{edgePulldown==0?1:0}} motionblur {{which_samples}} shutter {{jitterCTRL_fBm.shutter}} shutteroffset {{jitterCTRL_fBm.shutteroffset}} shuttercustomoffset {{jitterCTRL_fBm.shuttercustomoffset}} name edgeScale1 xpos -128 ypos 206 } Switch { inputs 3 which {{noiseType i}} name Switch4 xpos 17 ypos 242 } CopyBBox { inputs 2 name CopyBBox1 xpos 17 ypos 362 } Output { name Output1 xpos 17 ypos 460 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_bm_CurveRemapper.gizmo ================================================ Group { inputs 0 name bm_CurveRemapper help "A simple, albeit handy tool to remap animation curves from arbitrary values to something more sensible & controllable. Made to help tackle the random output from the curve tool." knobChanged "n = nuke.thisNode()\nif n\['curve_input'].isAnimated() == True:\n n\['curve_minimum'].setEnabled(True)\n n\['curve_maximum'].setEnabled(True)\n n\['new_minimum'].setEnabled(True)\n n\['new_maximum'].setEnabled(True)\n n\['helpText_02'].setEnabled(True)\n n\['curve_output'].setEnabled(True)\nelse:\n n\['curve_minimum'].setEnabled(False)\n n\['curve_maximum'].setEnabled(False)\n n\['new_minimum'].setEnabled(False)\n n\['new_maximum'].setEnabled(False)\n n\['helpText_02'].setEnabled(False)\n n\['curve_output'].setEnabled(False)\n" tile_color 0x232323ff selected true addUserKnob {20 userTab l Options} addUserKnob {26 ""} addUserKnob {26 helpText_01 l "" +STARTLINE T "I N P U T A N I M A T I O N C U R V E H E R E :\n"} addUserKnob {7 curve_input l "Animation Curve" t "Paste animation, or expression-link another knob here to start..."} addUserKnob {22 autoMinMax l "Find Minimum and Maximum Curve Values" t "This button will bake the input animation / expression, and find the min & max values of the curve. These values will be auto-set in the appropriate knobs below." T "#Bake expression link.\nname = nuke.thisNode().name()+\".curve_input\"\nnuke.animation(name, \"generate\", (nuke.knob('first_frame'), nuke.knob('last_frame'), \".01\", \"y\", name))\n\n#Adds python into expression knob, which evalutes and finds the answer\nnuke.thisNode().knob('curve_minimum').setExpression(\"\[python min((key.y for key in nuke.thisNode().knob('curve_input').animation(0).keys()))]\")\nnuke.thisNode().knob('curve_maximum').setExpression(\"\[python max((key.y for key in nuke.thisNode().knob('curve_input').animation(0).keys()))]\")\n\n#Remove the expression\nnuke.thisNode().knob('curve_minimum').clearAnimated()\nnuke.thisNode().knob('curve_maximum').clearAnimated()" +STARTLINE} addUserKnob {26 ""} addUserKnob {7 curve_minimum l "Curve Minimum" t "Minimum value of the input curve.\n(use the button above to auto-set this value)" +DISABLED} addUserKnob {7 curve_maximum l "Curve Maximum" t "Maximum value of the input curve.\n(use the button above to auto-set this value)" +DISABLED} curve_maximum 1 addUserKnob {7 new_minimum l "New Minimum" t "Set the new minimum value of the curve." +DISABLED} addUserKnob {7 new_maximum l "New Maximum" t "Set the new maxmum value of the curve." +DISABLED} new_maximum 1 addUserKnob {26 ""} addUserKnob {26 helpText_02 l "" +STARTLINE +DISABLED T "O U T P U T R E M A P P E D C U R V E F R O M H E R E :\n"} addUserKnob {7 curve_output l Output t "Your remapped animation curve!" +DISABLED} curve_output {{lerp(curve_minimum,new_minimum,curve_maximum,new_maximum,curve_input)}} addUserKnob {26 ""} addUserKnob {26 version_info l "" +STARTLINE T "bm_CurveRemapper v2.0 created by Ben McEwan.
    Last updated: 28th August, 2020.
    \n"} } Output { inputs 0 name Output1 selected true xpos -651 ypos -209 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_bm_MatteCheck.gizmo ================================================ Group { name bm_MatteCheck help "A simple tool designed to check the accuracy of mattes. Choose between overlaying a red color, viewing the matte against a grey background, or viewing the matte against a checkerboard." knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() in ('Type', 'showPanel'):\n Type = n\['Type'].value()\n if Type == 'Colour Overlay':\n\n n\['overlayColour'].setVisible(True)\n n\['overlayMix'].setVisible(True)\n n\['greyAmt'].setVisible(False)\n n\['chkSize'].setVisible(False)\n n\['chkContrast'].setVisible(False)\n\n elif Type == 'Grey Background':\n\n n\['overlayColour'].setVisible(False)\n n\['overlayMix'].setVisible(False)\n n\['greyAmt'].setVisible(True)\n n\['chkSize'].setVisible(False)\n n\['chkContrast'].setVisible(False)\n\n elif Type == 'Checkerboard':\n\n n\['overlayColour'].setVisible(False)\n n\['overlayMix'].setVisible(False)\n n\['greyAmt'].setVisible(False)\n n\['chkSize'].setVisible(True)\n n\['chkContrast'].setVisible(True)" tile_color 0x232323ff note_font Verdana selected true mapsize {0.15 0.15} addUserKnob {20 Options} addUserKnob {26 ""} addUserKnob {4 Type t "Choose between a colour overlay, or placing your matte over a grey background." M {"Colour Overlay" "Grey Background" Checkerboard "" "" "" "" "" "" "" "" ""}} addUserKnob {26 ""} addUserKnob {18 overlayColour l "Overlay Colour"} overlayColour {1 0 0} addUserKnob {6 overlayColour_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 overlayMix l "Overlay Mix"} overlayMix 0.5 addUserKnob {7 chkSize l Size +HIDDEN R 0 64} chkSize 17 addUserKnob {7 chkContrast l Contrast +HIDDEN} chkContrast 0.27 addUserKnob {18 greyAmt l "Grey Value" t "Brightness of the grey backdrop." +HIDDEN} greyAmt 0.18 addUserKnob {6 color_rgb_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {20 infoTab l Info} addUserKnob {26 ""} addUserKnob {26 versionInfo l "" +STARTLINE T "\nCreated by Ben McEwan\nwww.benmcewan.com\n\nVersion 1.1\nLast Updated: January 23rd, 2018\n"} addUserKnob {26 ""} } Input { inputs 0 name matte xpos -97 ypos -413 number 1 } AddChannels { channels rgba name AddChannels1 selected true xpos -97 ypos -374 } Dot { name Dot4 xpos -63 ypos -320 } set N89ea730 [stack 0] Dot { name Dot6 label " " note_font "Arial Black" note_font_size 16 xpos -63 ypos -152 } push $N89ea730 Invert { channels alpha name Invert1 xpos 76 ypos -329 } set N88b0400 [stack 0] Dot { name Dot5 xpos 313 ypos -320 } CheckerBoard2 { inputs 0 format {{{input.format}}} boxsize {{chkSize}} color0 {0.1000000015 0.1000000015 0.1000000015 1} color2 {0.1000000015 0.1000000015 0.1000000015 1} linecolor 0 centerlinewidth 0 name CheckerBoard1 xpos 373 ypos -483 } ColorCorrect { contrast {{chkContrast}} name ColorCorrect1 xpos 373 ypos -389 } Input { inputs 0 name plate xpos -94 ypos -495 } set N8a71d40 [stack 0] Dot { name Dot2 xpos 110 ypos -492 } set N8a73f40 [stack 0] Dot { name Dot7 note_font_size 41 xpos 203 ypos -492 } set N9dbc2f0 [stack 0] Dot { name Dot3 xpos 313 ypos -492 } Keymix { inputs 3 name Keymix3 xpos 279 ypos -395 } push $N88b0400 push $N9dbc2f0 Remove { operation keep channels rgb name Remove1 xpos 169 ypos -455 } Grade { multiply 0 add {{parent.greyAmt} {parent.greyAmt} {parent.greyAmt} 0} name Grade1 xpos 169 ypos -431 } push $N8a73f40 Keymix { inputs 3 name Keymix2 xpos 76 ypos -387 } push $N89ea730 Constant { inputs 0 color {{overlayColour.r} {overlayColour.g} {overlayColour.b} {curve}} name Constant1 xpos -345 ypos -349 } push $N8a71d40 Dot { name Dot1 xpos -172 ypos -492 } Keymix { inputs 3 mix {{overlayMix}} name Keymix1 xpos -206 ypos -329 } Switch { inputs 3 which {{Type x1 1}} name typeSwitch1 xpos -206 ypos -231 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos -206 ypos -161 } Output { name Output1 xpos -206 ypos -80 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_bm_NoiseGen.gizmo ================================================ Group { name bm_NoiseGen inputs 0 help "Generates a noise curve." tile_color 0x222222ff addUserKnob {20 optionsTab l Options} addUserKnob {26 ""} addUserKnob {4 pChoice l "Noise Type" M {Random Noise Sine Triangle Square Sawtooth Bounce Blip "" "" ""}} addUserKnob {26 ""} addUserKnob {7 noiseMin l Minimum R -10 0} addUserKnob {7 noiseMax l Maximum R 0 10} noiseMax 1 addUserKnob {7 noiseFrequency l Frequency} noiseFrequency 10 addUserKnob {7 noiseOffset l "Time Offset" R -10 10} addUserKnob {3 noiseSeed l Seed} noiseSeed 12345 addUserKnob {22 randomizeSeedBtn l " Randomize Seed " -STARTLINE T "import random\nnuke.thisNode().knob('noiseSeed').setValue(random.randint(1,99999))"} addUserKnob {26 ""} addUserKnob {7 noiseOutput l Output R -10 10} noiseOutput {{"pChoice==0?random((frame+noiseSeed+noiseOffset)/noiseFrequency) * (noiseMax-noiseMin) + noiseMin:\npChoice==1?(noise((frame+noiseSeed+noiseOffset)/noiseFrequency)+1)/2 * (noiseMax-noiseMin) + noiseMin:\npChoice==2?(sin(2*pi*(frame+noiseSeed+noiseOffset)/noiseFrequency)+1)/2 * (noiseMax-noiseMin) + noiseMin:\npChoice==3?(asin(sin(2*pi*(frame+noiseSeed+noiseOffset)/noiseFrequency))/pi+0.5) * (noiseMax-noiseMin) + noiseMin:\npChoice==4?int(sin(2*pi*(frame+noiseSeed+noiseOffset)/noiseFrequency)+1) * (noiseMax-noiseMin) + noiseMin:\npChoice==5?((frame+noiseSeed+noiseOffset) % noiseFrequency)/noiseFrequency * (noiseMax-noiseMin) + noiseMin:\npChoice==6?abs(sin(pi*(frame+noiseSeed + noiseOffset)/noiseFrequency))* (noiseMax-noiseMin) + noiseMin:\npChoice==7?((frame+noiseSeed+(noiseOffset+noiseFrequency)) % (noiseFrequency+(noiseFrequency/5))/(noiseFrequency)) *(noiseFrequency/(noiseFrequency/5)) - (noiseFrequency/(noiseFrequency/5)) >= 0 ? noiseMax : noiseMin:\n0"}} addUserKnob {26 ""} addUserKnob {20 info l Info} addUserKnob {26 ""} addUserKnob {26 versionText l "" +STARTLINE T "\nCreated by Ben McEwan\nwww.benmcewan.com\n\nVersion 2.0\nLast Updated: January 23rd, 2018\n"} addUserKnob {26 ""} } Output { inputs 0 name Output1 xpos 3 ypos 300 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_bm_OpticalGlow.gizmo ================================================ Group { name bm_OpticalGlow help "bm_OpticalGlow uses common algorithms to produce an optically-correct exponential glow.\n\nCompletely rebuilt from v3.1 to be light-weight and easier to use." tile_color 0x222222ff selected true addUserKnob {20 Options} addUserKnob {4 algorithm_choice l "Glow Math" t "Glow is built with a sequence of exponentially-increasing sub-frame values on a Blur node, which are then combined with a TimeBlur to produce the end result." M {Inverse-Square Fibonacci Double Distributed "" "" "" "" "" "" ""}} addUserKnob {26 spacer2 l "" -STARTLINE T " "} addUserKnob {6 effect_only l "effect only" t "Display the glow only." -STARTLINE} addUserKnob {3 glow_divisions l Divisions t "How many glow layers to add up. A higher number will result in a smoother glow, but a slower processing time."} glow_divisions 10 addUserKnob {26 spacer1 l "" -STARTLINE T " "} addUserKnob {6 use_threshold l "use luminance threshold" t "Enable the luminance threshold option, which allows you to isolate and only glow the highlights." -STARTLINE} addUserKnob {26 ""} addUserKnob {20 threshold l "Luminance Threshold Selector" n 1} threshold 0 addUserKnob {6 view_luminance l "view luminance threshold" t "Internally shuffles the alpha to RGB for easy viewing." +STARTLINE} addUserKnob {41 range l "" t "Use this to isolate the highlights in your image." +STARTLINE T Keyer1.range} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {7 glow_size l size t "Radius of the blur." R 0 300} glow_size 200 addUserKnob {7 glow_intensity l intensity t "A multiplier to control the brightness of your blur." R 0 5} glow_intensity 1 addUserKnob {19 glow_gamma l gamma t "Increase gamma to pump up the midtones.\n\nChanging the gamma will change the \"glow math\" algorithm, resulting in a less photorealistic glow. You probably only want to use this subtly in foggy, night-time shots." R 0 2} glow_gamma 1 addUserKnob {6 glow_gamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 aspect t "Change the aspect ratio of your glow.\n• Higher value = horizontal stretch\n• Lower value = vertical stretch" R 0.5 2} aspect 1 addUserKnob {26 ""} addUserKnob {6 crop_bbox l "crop bbox to format" t "If the glow gets too big, your bbox might become crazy. Enabling this option will ensure your bbox is cropped to your format + any overscan you set." +STARTLINE} addUserKnob {7 overscan t "If you use the \"crop bbox to format\" option, and then add lens distortion to the end of your comp, the glow won't reach the edge of your format.\n\nUse this value to increase the bbox size, as necessary." R 0 250} overscan 100 addUserKnob {26 spacer l "" +STARTLINE T " "} addUserKnob {7 mix} mix 1 addUserKnob {26 ""} addUserKnob {26 info l "" +STARTLINE T "bm_OpticalGlow v4.3 created by Ben McEwan.
    \nLast updated: 25th February, 2025."} } Input { inputs 0 name Input xpos -260 ypos -217 } NoTimeBlur { name NoTimeBlur1 xpos -260 ypos -191 } Dot { name Dot2 label " " note_font "Arial Black" note_font_size 16 xpos -226 ypos -115 } set N143d9d30 [stack 0] Keyer { operation "luminance key" name Keyer1 xpos -170 ypos -50 } set N15ec4da0 [stack 0] push $N15ec4da0 Copy { inputs 2 from0 rgba.alpha to0 rgba.red from1 rgba.alpha to1 rgba.green from2 rgba.alpha to2 rgba.blue name Copy1 xpos -170 ypos -14 } Dot { name Dot6 label " " note_font "Arial Black" note_font_size 16 xpos -136 ypos 365 } Input { inputs 0 name mask xpos 535 ypos -218 number 2 } NoTimeBlur { name NoTimeBlur3 xpos 535 ypos -192 } Expression { expr3 a name Expression1 xpos 535 ypos -166 } Dot { name Dot1 label " " note_font "Arial Black" note_font_size 16 xpos 569 ypos 339 } push $N15ec4da0 Input { inputs 0 name area xpos 27 ypos -218 number 1 } NoTimeBlur { name NoTimeBlur2 xpos 27 ypos -192 } Expression { expr3 a name Expression2 xpos 27 ypos -166 } push $N143d9d30 Merge2 { inputs 2 operation mask bbox A name Merge3 xpos 27 ypos -118 disable {{"!\[exists parent.input1]"}} } Merge2 { inputs 2 operation mask bbox B name Merge5 xpos 27 ypos -44 disable {{!use_threshold}} } Dot { name Dot11 label " " note_font "Arial Black" note_font_size 16 xpos 61 ypos 47 } set N15f14370 [stack 0] Dot { name Dot10 label " " note_font "Arial Black" note_font_size 16 xpos 177 ypos 47 } set N15eb2c30 [stack 0] Dot { name Dot9 label " " note_font "Arial Black" note_font_size 16 xpos 283 ypos 47 } set N15f47310 [stack 0] Dot { name Dot8 label " " note_font "Arial Black" note_font_size 16 xpos 399 ypos 47 } Blur { channels rgba size {{aspect>1?curve(((frame-1)%(1-1+1))+1)*glow_size/25*aspect:curve(((frame-1)%(1-1+1))+1)*glow_size/25 x1 2.5 x1.100000024 7.5 15 x1.299999952 35 x1.399999976 70 150 350 750 x1.799999952 1250 x1.899999976 1500 2000} {aspect<1?curve(((frame-1)%(1-1+1))+1)*glow_size/25/aspect:curve(((frame-1)%(1-1+1))+1)*glow_size/25 x1 2.5 x1.100000024 7.5 15 x1.299999952 35 x1.399999976 70 150 350 750 x1.799999952 1250 x1.899999976 1500 2000}} crop false name glow_distributed xpos 365 ypos 95 } push $N15f47310 Blur { channels rgba size {{aspect>1?curve(((frame-1)%(1-1+1))+1)*glow_size/25*aspect:curve(((frame-1)%(1-1+1))+1)*glow_size/25 x1 2 x1.100000024 4 8 x1.299999952 16 x1.399999976 32 64 128 256 x1.799999952 512 x1.899999976 1024 2048} {aspect<1?curve(((frame-1)%(1-1+1))+1)*glow_size/25/aspect:curve(((frame-1)%(1-1+1))+1)*glow_size/25 x1 2 x1.100000024 4 8 x1.299999952 16 x1.399999976 32 64 128 256 x1.799999952 512 x1.899999976 1024 2048}} crop false name glow_double xpos 249 ypos 95 } push $N15eb2c30 Blur { channels rgba size {{aspect>1?curve(((frame-1)%(1-1+1))+1)*glow_size/25*aspect:curve(((frame-1)%(1-1+1))+1)*glow_size/25 x1 3 x1.100000024 5 8 x1.299999952 13 x1.399999976 21 34 55 89 x1.799999952 144 x1.899999976 233 377} {aspect<1?curve(((frame-1)%(1-1+1))+1)*glow_size/25/aspect:curve(((frame-1)%(1-1+1))+1)*glow_size/25 x1 3 x1.100000024 5 8 x1.299999952 13 x1.399999976 21 34 55 89 x1.799999952 144 x1.899999976 233 377}} crop false name glow_fibonacci xpos 143 ypos 95 } push $N15f14370 Blur { channels rgba size {{aspect>1?curve(((frame-1)%(1-1+1))+1)*glow_size/25*aspect:curve(((frame-1)%(1-1+1))+1)*glow_size/25 x1 1 x1.100000024 4 9 x1.299999952 16 x1.399999976 25 36 49 64 x1.799999952 81 x1.899999976 100 121} {aspect<1?curve(((frame-1)%(1-1+1))+1)*glow_size/25/aspect:curve(((frame-1)%(1-1+1))+1)*glow_size/25 x1 1 x1.100000024 4 9 x1.299999952 16 x1.399999976 25 36 49 64 x1.799999952 81 x1.899999976 100 121}} crop false name glow_inverseSquare xpos 27 ypos 93 } Switch { inputs 4 which {{algorithm_choice}} name Switch2 xpos 189 ypos 152 } TimeBlur { divisions {{glow_divisions}} shutteroffset start shuttercustomoffset 0.5 name TimeBlur1 xpos 27 ypos 202 } Multiply { value {{glow_intensity**2/2}} name Multiply2 xpos 27 ypos 240 } Gamma { value {{glow_gamma}} name Gamma1 xpos 27 ypos 276 } Merge2 { inputs 2 operation mask bbox B name Merge4 xpos 27 ypos 336 disable {{"!\[exists parent.input2]"}} } set N15ead1f0 [stack 0] Dot { name Dot5 label " " note_font "Arial Black" note_font_size 16 xpos 61 ypos 405 } push $N15ead1f0 push $N143d9d30 Merge2 { inputs 2 operation plus Achannels rgb name Merge1 xpos -260 ypos 336 } Switch { inputs 3 which {{"view_luminance == 1?2:effect_only"}} name Switch1 xpos -260 ypos 402 } Crop { box {{-overscan} {-overscan} {Input.width+overscan} {Input.height+overscan}} name Crop1 xpos -260 ypos 469 disable {{!crop_bbox}} } push $N143d9d30 Dot { name Dot4 label " " note_font "Arial Black" note_font_size 16 xpos -361 ypos -115 } Shuffle2 { fromInput1 {{0} B} fromInput2 {{0} B} mappings "4 black -1 -1 rgba.red 0 0 black -1 -1 rgba.green 0 1 black -1 -1 rgba.blue 0 2 black -1 -1 rgba.alpha 0 3" name Shuffle1 label "\[value in1]" selected true xpos -395 ypos 429 disable {{!effect_only}} } Dot { name Dot3 label " " note_font "Arial Black" note_font_size 16 xpos -361 ypos 511 } Dissolve { inputs 2 which {{parent.mix}} name Dissolve2 xpos -260 ypos 502 } Output { name Output1 xpos -260 ypos 567 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_bm_OpticalLightwrap.gizmo ================================================ Group { name bm_OpticalLightwrap help "bm_OpticalLightwrap uses common algorithms to produce an optically-correct exponential-glow-based lightwrap.\n\nCompletely rebuilt from v3.1 to be light-weight and easier to use." tile_color 0x222222ff selected true addUserKnob {20 Options} addUserKnob {4 algorithm_choice l "Glow Math" t "Glow is built with a sequence of exponentially-increasing sub-frame values on a Blur node, which are then combined with a TimeBlur to produce the end result." M {Inverse-Square Fibonacci Double Distributed "" "" "" "" "" "" ""}} addUserKnob {26 spacer2 l "" -STARTLINE T " "} addUserKnob {6 effect_only l "effect only" t "Display the glow only." -STARTLINE} effect_only false addUserKnob {3 glow_divisions l Divisions t "How many glow layers to add up. A higher number will result in a smoother glow, but a slower processing time."} glow_divisions 10 addUserKnob {26 spacer1 l "" -STARTLINE T " "} addUserKnob {6 use_threshold l "use luminance threshold" t "Enable the luminance threshold option, which allows you to isolate and only glow the highlights." -STARTLINE} use_threshold true addUserKnob {26 ""} addUserKnob {20 threshold l "Luminance Threshold Selector" n 1} threshold 0 addUserKnob {6 view_luminance l "view luminance threshold" t "Internally shuffles the alpha to RGB for easy viewing." +STARTLINE} addUserKnob {41 range l "" t "Use this to isolate the highlights in your image." +STARTLINE T Keyer1.range} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {14 preblur_BG l "pre-blur BG" t "Blur the background before the lightwrap bets generated. This can help remove any high-contrast, detailed edges ghosting through." R 0 100} preblur_BG 20 addUserKnob {26 ""} addUserKnob {7 glow_size l size t "Radius of the blur." R 0 300} glow_size 200 addUserKnob {7 glow_intensity l intensity t "A multiplier to control the brightness of your blur." R 0 5} glow_intensity 1 addUserKnob {19 glow_gamma l gamma t "Increase gamma to pump up the midtones.\n\nChanging the gamma will change the \"glow math\" algorithm, resulting in a less photorealistic glow. You probably only want to use this subtly in foggy, night-time shots." R 0 2} glow_gamma 1 addUserKnob {6 glow_gamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 aspect t "Change the aspect ratio of your glow.\n• Higher value = horizontal stretch\n• Lower value = vertical stretch" R 0.5 2} aspect 1 addUserKnob {26 ""} addUserKnob {7 mix} mix 1 addUserKnob {26 ""} addUserKnob {26 info l "" +STARTLINE T "bm_OpticalLightwrap v4.2 created by Ben McEwan.
    \nLast updated: 25th February, 2025."} } Input { inputs 0 name fg xpos 585 ypos -246 } NoTimeBlur { name NoTimeBlur3 xpos 585 ypos -220 } Expression { expr3 a name Expression3 xpos 585 ypos -178 } Dot { name Dot12 label " " note_font "Arial Black" note_font_size 16 xpos 619 ypos -17 } set N1689c880 [stack 0] Dot { name Dot13 label " " note_font "Arial Black" note_font_size 16 xpos 619 ypos 316 } set N168a1a00 [stack 0] Dot { name Dot14 label " " note_font "Arial Black" note_font_size 16 xpos 619 ypos 522 } set N168a69e0 [stack 0] Dot { name Dot15 label " " note_font "Arial Black" note_font_size 16 xpos 619 ypos 598 } set N168aba40 [stack 0] Input { inputs 0 name bg xpos -259 ypos -252 number 1 } NoTimeBlur { name NoTimeBlur1 xpos -259 ypos -226 } Blur { channels rgba size {{preblur_BG} {preblur_BG}} name Blur1 xpos -259 ypos -167 } Dot { name Dot2 label " " note_font "Arial Black" note_font_size 16 xpos -226 ypos -115 } set N168cb3f0 [stack 0] Keyer { operation "luminance key" range {0.5 1 1 1} name Keyer1 xpos -260 ypos -50 } set N168d0520 [stack 0] push $N168d0520 Copy { inputs 2 from0 rgba.alpha to0 rgba.red from1 rgba.alpha to1 rgba.green from2 rgba.alpha to2 rgba.blue name Copy1 xpos -260 ypos -14 } Dot { name Dot6 label " " note_font "Arial Black" note_font_size 16 xpos -226 ypos 418 } Input { inputs 0 name mask xpos 796 ypos -246 number 3 } NoTimeBlur { name NoTimeBlur4 xpos 796 ypos -220 } Expression { expr3 a name Expression1 xpos 796 ypos -182 } Dot { name Dot1 label " " note_font "Arial Black" note_font_size 16 xpos 830 ypos 351 } push $N168a1a00 push $N1689c880 push $N168d0520 Input { inputs 0 name area xpos 27 ypos -252 number 2 } NoTimeBlur { name NoTimeBlur2 xpos 27 ypos -226 } Expression { expr3 a name Expression2 xpos 27 ypos -194 } push $N168cb3f0 Merge2 { inputs 2 operation mask bbox A name Merge3 xpos 27 ypos -118 disable {{"!\[exists parent.input2]"}} } Merge2 { inputs 2 operation mask bbox B name Merge5 xpos 27 ypos -44 disable {{!use_threshold}} } Merge2 { inputs 2 operation stencil bbox B name Merge8 xpos 27 ypos -20 } Dot { name Dot11 label " " note_font "Arial Black" note_font_size 16 xpos 61 ypos 60 } set N16958e80 [stack 0] Dot { name Dot10 label " " note_font "Arial Black" note_font_size 16 xpos 177 ypos 60 } set N1695def0 [stack 0] Dot { name Dot9 label " " note_font "Arial Black" note_font_size 16 xpos 283 ypos 60 } set N16962e60 [stack 0] Dot { name Dot8 label " " note_font "Arial Black" note_font_size 16 xpos 399 ypos 60 } Blur { channels rgba size {{aspect>1?curve(((frame-1)%(1-1+1))+1)*glow_size/25*aspect:curve(((frame-1)%(1-1+1))+1)*glow_size/25 x1 2.5 x1.100000024 7.5 15 x1.299999952 35 x1.399999976 70 150 350 750 x1.799999952 1250 x1.899999976 1500 2000} {aspect<1?curve(((frame-1)%(1-1+1))+1)*glow_size/25/aspect:curve(((frame-1)%(1-1+1))+1)*glow_size/25 x1 2.5 x1.100000024 7.5 15 x1.299999952 35 x1.399999976 70 150 350 750 x1.799999952 1250 x1.899999976 1500 2000}} crop false name glow_distributed xpos 365 ypos 108 } push $N16962e60 Blur { channels rgba size {{aspect>1?curve(((frame-1)%(1-1+1))+1)*glow_size/25*aspect:curve(((frame-1)%(1-1+1))+1)*glow_size/25 i x1 2 x1.100000024 4 8 x1.299999952 16 x1.399999976 32 64 128 256 x1.799999952 512 x1.899999976 1024 2048} {aspect<1?curve(((frame-1)%(1-1+1))+1)*glow_size/25/aspect:curve(((frame-1)%(1-1+1))+1)*glow_size/25 i x1 2 x1.100000024 4 8 x1.299999952 16 x1.399999976 32 64 128 256 x1.799999952 512 x1.899999976 1024 2048}} crop false name glow_double xpos 249 ypos 108 } push $N1695def0 Blur { channels rgba size {{aspect>1?curve(((frame-1)%(1-1+1))+1)*glow_size/25*aspect:curve(((frame-1)%(1-1+1))+1)*glow_size/25 i x1 3 x1.100000024 5 8 x1.299999952 13 x1.399999976 21 34 55 89 x1.799999952 144 x1.899999976 233 377} {aspect<1?curve(((frame-1)%(1-1+1))+1)*glow_size/25/aspect:curve(((frame-1)%(1-1+1))+1)*glow_size/25 i x1 3 x1.100000024 5 8 x1.299999952 13 x1.399999976 21 34 55 89 x1.799999952 144 x1.899999976 233 377}} crop false name glow_fibonacci xpos 143 ypos 108 } push $N16958e80 Blur { channels rgba size {{aspect>1?curve(((frame-1)%(1-1+1))+1)*glow_size/25*aspect:curve(((frame-1)%(1-1+1))+1)*glow_size/25 i x1 1 x1.100000024 4 9 x1.299999952 16 x1.399999976 25 36 49 64 x1.799999952 81 x1.899999976 100 121} {aspect<1?curve(((frame-1)%(1-1+1))+1)*glow_size/25/aspect:curve(((frame-1)%(1-1+1))+1)*glow_size/25 i x1 1 x1.100000024 4 9 x1.299999952 16 x1.399999976 25 36 49 64 x1.799999952 81 x1.899999976 100 121}} crop false name glow_inverseSquare xpos 27 ypos 106 } Switch { inputs 4 which {{algorithm_choice}} name Switch2 xpos 27 ypos 166 } TimeBlur { divisions {{glow_divisions}} shutteroffset start shuttercustomoffset 0.5 name TimeBlur1 xpos 27 ypos 202 } Multiply { value {{glow_intensity**2/2}} name Multiply2 xpos 27 ypos 240 } Gamma { value {{glow_gamma}} name Gamma1 xpos 27 ypos 276 } Merge2 { inputs 2 operation mask bbox A name Merge7 xpos 27 ypos 313 } Merge2 { inputs 2 operation mask bbox B name Merge4 xpos 27 ypos 348 disable {{"!\[exists parent.input3]"}} } Dot { name Dot5 label " " note_font "Arial Black" note_font_size 16 xpos 61 ypos 405 } set N169f5ae0 [stack 0] push $N169f5ae0 push $N168a69e0 Merge2 { inputs 2 operation plus Achannels rgb name Merge1 xpos 266 ypos 519 } Switch { inputs 3 which {{"view_luminance == 1?2:effect_only"}} name Switch1 xpos -260 ypos 519 } CopyBBox { inputs 2 name CopyBBox1 xpos -260 ypos 595 } push $N168aba40 Shuffle2 { fromInput1 {{0} B} fromInput2 {{0} B} mappings "4 black -1 -1 rgba.red 0 0 black -1 -1 rgba.green 0 1 black -1 -1 rgba.blue 0 2 black -1 -1 rgba.alpha 0 3" name Shuffle1 label "\[value in1]" selected true xpos 585 ypos 635 disable {{!effect_only}} } Dissolve { inputs 2 which {{parent.mix}} name Dissolve2 xpos -260 ypos 635 } Output { name Output1 xpos -260 ypos 684 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_deHaze.gizmo ================================================ Group { name deHaze tile_color 0x55ffbfff selected true addUserKnob {20 Controls} addUserKnob {7 dehaze t "Sets the overall intensity of the dehaze operation."} dehaze 1 addUserKnob {7 topGamma l "highlight protection" t "This helps to prevent funky effects in the brightest of areas (e.g. the sky)." R 1 10} topGamma 3 addUserKnob {7 offsetHaze l offset t "Lets you set the point where the dehaze starts.\nNeeds highlight protection greater than 1 to work." R -1 1} addUserKnob {26 sep00_1 l " "} addUserKnob {26 sep00 l "colour correct" T ""} addUserKnob {18 gainHaze l gain t "Adjusts the gain of dehazed areas to tackle colour shifts."} gainHaze {1 1 1} addUserKnob {6 gainHaze_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 gammaHaze l gamma t "Adjusts the gamma of dehazed areas to tackle colour shifts."} gammaHaze {1 1 1} addUserKnob {7 satHaze l saturation t "Adjusts the saturation of dehazed areas to tackle colour shifts."} satHaze 1 addUserKnob {26 sep02_1 l " "} addUserKnob {6 shuffleMap l "shuffle haze to alpha" t "Shuffles the result of the affected hazy areas into the alpha channel.\nNote: this is not the haze map that is generated to affect the haze in the image." +STARTLINE} addUserKnob {20 finetune l "fine tune"} addUserKnob {6 prevBil l "preview haze matte" t "Lets you preview you the generated haze map. This is helpful to properly set it up for your shot, to fix holes and take care of edges." +STARTLINE} addUserKnob {41 useGPUIfAvailable l "Use GPU if available" -STARTLINE T C_Bilateral1.useGPUIfAvailable} addUserKnob {26 sep02 l " " T ""} addUserKnob {7 erodeMap l erode t "Erodes darkened areas from your haze map. If you experience holes (e.g. in the sky), try to increase the value." R 0 30} erodeMap 10 addUserKnob {26 sep03 l " " T ""} addUserKnob {3 sizeBil l "bilateral size" t "Sets the general size of the bilateral operation."} sizeBil 20 addUserKnob {41 positionalSigma l "bilaterial positional Σ" T C_Bilateral1.positionalSigma} addUserKnob {41 colourSigma l "bilateral colour Σ" T C_Bilateral1.colourSigma} addUserKnob {26 credit t "lp_deHaze v1.0\n(c)2020 lucas pfaff\nbased on a tutorial by Mads Hagbarth Damsbo: https://vimeo.com/377653826" +INVISIBLE T "lp_deHaze v1.0\n(c)2020 lucas pfaff\nbased on a tutorial by Mads Hagbarth Damsbo: https://vimeo.com/377653826"} } Input { inputs 0 name img xpos 829 ypos 99 } Dot { name Dot3 xpos 863 ypos 215 } set N6c6de000 [stack 0] Dot { name Dot1 xpos 863 ypos 572 } set N6c84bc00 [stack 0] push 0 push $N6c6de000 Dot { name Dot2 xpos 398 ypos 215 } Grade { white {{dehaze}} black_clamp false name Grade4 label intensity xpos 364 ypos 275 } Invert { channels rgb name Invert1 xpos 364 ypos 360 } Saturation { saturation 0 mode Maximum name Saturation1 xpos 364 ypos 384 } FilterErode { channels rgb size {{erodeMap*-1}} name FilterErode1 xpos 364 ypos 474 } FilterErode { channels rgb size {{FilterErode1.size*-1}} filter {{FilterErode1.filter x26 1}} name FilterErode2 xpos 364 ypos 498 } C_Bilateral2_1 { inputs 2+1 size {{sizeBil}} positionalSigma 40 colourSigma 0.1 name C_Bilateral1 xpos 364 ypos 565 } Dot { name Dot5 xpos 398 ypos 657 } set N6c875800 [stack 0] Dot { name Dot4 xpos 276 ypos 657 } Grade { add 1 white_clamp true name Grade1 label "\[value channels]" xpos 242 ypos 711 } Dot { name Dot6 xpos 276 ypos 786 } push $N6c875800 Merge2 { inputs 2 operation divide name Merge2 xpos 364 ypos 783 } Dot { name Dot16 xpos 398 ypos 845 } set N6c895c00 [stack 0] Dot { name Dot9 xpos 198 ypos 845 } Keyer { operation "luminance key" range {1 1.06 2 2} name Keyer3 xpos 164 ypos 982 } Dot { name Dot7 xpos 198 ypos 1096 } push $N6c895c00 Grade { add {{offsetHaze}} black_clamp false name Grade8 label "\[value channels]" xpos 364 ypos 898 } Dot { name Dot10 xpos 398 ypos 971 } set N6c894400 [stack 0] Dot { name Dot11 xpos 529 ypos 971 } Grade { gamma {{topGamma}} black_clamp false name Grade5 label "\[value channels]" xpos 495 ypos 1025 } Dot { name Dot12 xpos 529 ypos 1096 } push $N6c894400 Merge2 { inputs 2+1 operation copy name Merge3 xpos 364 ypos 1093 } Grade { add {{parent.Grade8.add*-1}} black_clamp false name Grade9 label "\[value channels]" xpos 364 ypos 1184 } Dot { name Dot13 xpos 398 ypos 1418 } push $N6c84bc00 Dot { name Dot18 xpos 863 ypos 1276 } set Nd6af1000 [stack 0] Grade { add -1 black_clamp false name Grade2 label "\[value channels]" xpos 829 ypos 1352 } Merge2 { inputs 2 operation multiply output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge1 xpos 829 ypos 1415 } Grade { add 1 black_clamp false name Grade3 label "\[value channels]" xpos 829 ypos 1470 } set N6c8f1c00 [stack 0] push $Nd6af1000 Dot { name Dot19 xpos 1087 ypos 1276 } Merge2 { inputs 2 operation difference name Merge4 xpos 1053 ypos 1474 } Keyer { operation "luminance key" name Keyer1 xpos 1053 ypos 1546 } Dot { name Dot17 xpos 1087 ypos 1661 } set Nd6af1400 [stack 0] Dot { name Dot8 xpos 1087 ypos 1824 } push $N6c875800 Dot { name Dot15 xpos 667 ypos 657 } Dot { name Dot14 xpos 667 ypos 1755 } push $Nd6af1400 push $N6c8f1c00 ColorCorrect { inputs 1+1 saturation {{satHaze}} gamma {{gammaHaze} {gammaHaze} {gammaHaze} {gammaHaze}} gain {{gainHaze} {gainHaze} {gainHaze} {gainHaze}} name ColorCorrect1 xpos 829 ypos 1658 } Switch { inputs 2 which {{prevBil}} name Switch1 xpos 829 ypos 1752 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 selected true xpos 829 ypos 1817 } Output { name Output1 xpos 829 ypos 1960 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_fxT_ChromaticAberration.gizmo ================================================ Group { name fxT_ChromaticAberration help "Chromatic Aberration tool with a bunch of options for matching the plate's aberration.\nHappy channel-shifting!\n\nDeveloped by - Tor Andreassen - fxtor.net" tile_color 0xf9ff00ff note_font Verdana selected true addUserKnob {20 fxT_chromaticAberrationTAB l fxT_chromaticAberration} addUserKnob {41 channels T Merge4.also_merge} addUserKnob {26 text_1 l " " T " "} addUserKnob {4 mode l "aberration mode" t "Choose the chromatic aberration method.\nScale with Transforms or with Godrays.\n\nGodrays will give you a smearing effect between the channels, which can look more realistic." M {"godrays scale" "transforms scale" "" ""}} addUserKnob {26 ""} addUserKnob {7 redScale l "Red scale" t "Red channel scale size" R -0.5 1.5} redScale 1.06 addUserKnob {7 greenScale l "Green scale" t "Green channel scale size" R -0.5 1.5} greenScale 1 addUserKnob {7 blueScale l "Blue scale" t "Blue channel scale size" R -0.5 1.5} blueScale 0.955 addUserKnob {26 ""} addUserKnob {14 redChBlur l "Red Cannel Blur" t "Red channel blur size" R 0 100} addUserKnob {14 greenChBlur l "Green Cannel Blur" t "Green channel blur size" R 0 100} addUserKnob {14 blueChBlur l "Blue Channel Blur" t "Blue channel blur size" R 0 100} addUserKnob {26 ""} addUserKnob {20 extraOffsetControlsGROUP l "EXTRA GLOBAL OFFSET CONTROLS" n 1} extraOffsetControlsGROUP 0 addUserKnob {6 activateEGOC l "activate extra global controls" t "Enable to activate the extra global offset controls.\n\nThis will give you more offset controls, but can cause some unwanted filtering.\n\nIf you want to use these controls, but it's causing too much filtering, try to restore some details with the 'restore luminance' checkbox.\n\nThese controls are intended for special cases to make it esier to match the plate's aberration. Pick your battles; more contol can cause some extra filtering." +STARTLINE} addUserKnob {7 offsetRotation l Rotation t "Rotation offset control.\n\nThis is useful for shifting the direction of the offset." R -10 10} addUserKnob {7 offsetX l X-axis t "X-axis offset control" R -20 20} addUserKnob {7 offsetY l Y-axis t "Y-axis offset control" R -20 20} addUserKnob {7 offsetTop l Top t "Offset control for the top of the frame.\n\nThis will offset the channels more on the top of the frame than the bottom." R -0.05 0.05} addUserKnob {7 offsetBottom l Bottom t "Offset control for the bottom of the frame\n\nThis will offset the channels more on the bottom of the frame than the top" R -0.05 0.05} addUserKnob {26 ""} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 centerMaskGROUP l "CENTER MASK CONTROLS" n 1} centerMaskGROUP 0 addUserKnob {6 centerMask l "use center mask" t "Enable to remove aberration in the center of the frame.\n\nThis \"mimics\" the real world lense where less aberration is applied to the center of the frame.\n\nYou can addjust the opacity, softness and size of the 'centerMask' with the sliders below.\nFor convience, turn on the 'displayMask' while addjusting the size." +STARTLINE} centerMask true addUserKnob {6 displayMask l "display mask" t "Enable to display the affect-area of the center mask" +STARTLINE} addUserKnob {4 switchMaskColor l "| display color" t "Choose what color to display when 'displayMask' in enabled" -STARTLINE M {red green blue "" "" "" "" "" "" "" "" ""}} switchMaskColor blue addUserKnob {14 displayMaskScale l scale t "Addjust the scale of the centerMask. This lets you decide how much of the image is affected by the centerMask" R 0 100} displayMaskScale {0.5 1} addUserKnob {16 centerMaskOpacity l opacity t "Addjust the center mask opacity.\n\nThis allows for controlling the opacity of the aberration showing in the center of the frame when the 'centerMask' box is enabled"} centerMaskOpacity 1 addUserKnob {41 centerMaskFalloff l falloff T maskFalloff.centerMaskFalloff} addUserKnob {26 ""} addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {41 center T centerPoint.center} addUserKnob {22 unlockReset l reset/lock t "By default the centerpoint is locked to the center of the input format.\n\nClick this button to unlock the values. This will also set the centerpoint to the center of the input format." -STARTLINE T "def resetLock():\n me = nuke.thisNode()\n lockValue = me\['center'].enabled()\n x = 'width()/2'\n y = 'height()/2'\n x2 = nuke.thisNode().width()/2\n y2 = nuke.thisNode().height()/2\n\n \n\n if lockValue == True:\n me\['center'].setEnabled(not lockValue)\n me\['center'].clearAnimated()\n me\['center'].setExpression(x,0)\n me\['center'].setExpression(y,1)\n elif lockValue == False:\n me\['center'].clearAnimated()\n me\['center'].setValue(\[x2,y2])\n me\['center'].setEnabled(not lockValue)\n\nresetLock()"} addUserKnob {26 ""} addUserKnob {6 restoreLuminance l "restore luminance |" t "Restore the original luminace.\n\nThis can help bring back sharpness if the channel offset operations has caused too much filtering." +STARTLINE} addUserKnob {7 luminancePercent l amount t "Blend between comp luminance and input luminance to decide how much of the original luminance you want to restore.\n\n0 = comp luma (no restoration)\n1 = input luma (full restoration)\n\nThis only takes effect if the checkbox is checked." -STARTLINE} luminancePercent 1 addUserKnob {6 Rbypass l "  Redbypass" t "Enable to bypass alteration to the red channel" +STARTLINE} addUserKnob {6 Gbypass l "  Greenbypass" t "Enable to bypass alteration to the green channel" -STARTLINE} addUserKnob {6 Bbypass l "  Bluebypass" t "Enable to bypass alteration to the blue channel" -STARTLINE} addUserKnob {26 ""} addUserKnob {26 apChromaAlpha l apChroma T " "} addUserKnob {6 calculate_multi_alpha l "calculate per-channel alpha" t "Also generates a channel layer called apChroma wich includes the transformed alphas for each of the rgba channels. This is necessary if you want to merge the result of this node onto a background. You'll need apChromaMerge or a similar gizmo in order to perform the special merge." -STARTLINE} calculate_multi_alpha true addUserKnob {6 process_alpha l "process single alpha from" t "If activated, the multi-channel alpha will get combined into a regular alpha that you can use for normal operations after this node." +STARTLINE} process_alpha true addUserKnob {41 mode_1 l "" -STARTLINE T Saturation1.mode} addUserKnob {6 preserveBBox +STARTLINE} addUserKnob {41 numpixels l " add px" -STARTLINE T AdjBBox1.numpixels} addUserKnob {26 ""} addUserKnob {26 "" l mask T ""} addUserKnob {41 maskChannelMask l "" -STARTLINE T Merge11.maskChannelMask} addUserKnob {41 inject -STARTLINE T Merge11.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge11.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge11.fringe} addUserKnob {41 mix T Merge11.mix} addUserKnob {26 text l " " T " "} addUserKnob {26 copyright l "" +STARTLINE T "// fxT_chromaticAberration v3.1 © Tor Andreassen"} } BackdropNode { inputs 0 name backdrop02 tile_color 0x3f4e69ff gl_color 0x5f7a8701 label "RGB channel seperation" note_font "Arial Black" note_font_size 20 note_font_color 0xffffffff xpos -838 ypos -1176 bookmark false bdwidth 2869 bdheight 107 } BackdropNode { inputs 0 name backdrop03 tile_color 0x3f4e69ff gl_color 0x5f7a8701 label "RGB channel offsets" note_font "Arial Black" note_font_size 20 note_font_color 0xffffffff xpos -839 ypos -1037 bookmark false bdwidth 2869 bdheight 406 } BackdropNode { inputs 0 name backdrop04 tile_color 0x3f4e69ff gl_color 0x5f7a8701 label "induvidual channel blur" note_font "Arial Black" note_font_size 20 note_font_color 0xffffffff xpos -840 ypos -595 bookmark false bdwidth 2873 bdheight 127 } BackdropNode { inputs 0 name backdrop05 tile_color 0x3a3a3aff gl_color 0x44444401 label "mask input" note_font "Arial Black" note_font_size 20 note_font_color 0xffffffff xpos 2090 ypos -1556 bookmark false bdwidth 662 bdheight 3664 } BackdropNode { inputs 0 name backdrop08 tile_color 0x3f4e69ff gl_color 0x44444401 label "mix between added chromatic aberration and original input" note_font "Arial Black" note_font_size 20 note_font_color 0xffffffff xpos -843 ypos 701 bookmark false bdwidth 2879 bdheight 130 } BackdropNode { inputs 0 name backdrop1 tile_color 0x3f4e69ff gl_color 0x5f7a8701 label "center mask (less aberration in the center of the image)" note_font "Arial Black" note_font_size 20 note_font_color 0xffffffff xpos -838 ypos -271 bookmark false bdwidth 2872 bdheight 490 } BackdropNode { inputs 0 name backdrop2 tile_color 0x3f4e69ff gl_color 0x5f7a8701 label "build RGB" note_font "Arial Black" note_font_size 20 note_font_color 0xffffffff xpos -842 ypos 280 bookmark false bdwidth 2877 bdheight 151 } BackdropNode { inputs 0 name backdrop3 tile_color 0x3f4e69ff gl_color 0x44444401 label "display CenterMask" note_font "Arial Black" note_font_size 20 note_font_color 0xffffffff xpos -848 ypos 1518 bookmark false bdwidth 2881 bdheight 431 } BackdropNode { inputs 0 name backdrop4 tile_color 0x3f4e69ff gl_color 0x44444401 label "restore luminence" note_font "Arial Black" note_font_size 20 note_font_color 0xffffffff xpos -844 ypos 873 bookmark false bdwidth 2884 bdheight 447 } BackdropNode { inputs 0 name backdrop5 tile_color 0x3f4e69ff gl_color 0x44444401 label "keep input bbox" note_font "Arial Black" note_font_size 20 note_font_color 0xffffffff xpos -848 ypos 2144 bookmark false bdwidth 2883 bdheight 111 } BackdropNode { inputs 0 name backdrop6 tile_color 0x3f4e69ff gl_color 0x44444401 label "keep input alpha channel" note_font "Arial Black" note_font_size 20 note_font_color 0xffffffff xpos -852 ypos 458 bookmark false bdwidth 2878 bdheight 202 } BackdropNode { inputs 0 name backdrop7 tile_color 0x3f4e69ff gl_color 0x5f7a8701 label "bypass channels" note_font "Arial Black" note_font_size 20 note_font_color 0xffffffff xpos -840 ypos -430 bookmark false bdwidth 2873 bdheight 122 } BackdropNode { inputs 0 name backdrop8 tile_color 0x3f4e69ff gl_color 0x44444401 label mask note_font "Arial Black" note_font_size 20 note_font_color 0xffffffff xpos -854 ypos 1995 bookmark false bdwidth 2881 bdheight 132 } NoOp { inputs 0 name values xpos 432 ypos -720 hide_input true addUserKnob {20 values} addUserKnob {16 base} base 0.1 addUserKnob {16 red} red {{-1*blue}} addUserKnob {16 green} green {{base}} addUserKnob {16 blue} blue {{base+(green*2)}} } StickyNote { inputs 0 name StickyNote2 tile_color 0x545454ff gl_color 0x545454ff label "checking if the mask input has an existing alpha channel.\nif alpha channel exists, mask will use the input alpha,\nif no alpha exists, a solid alpha will be used (same as not masking)" xpos 2402 ypos -1220 } Input { inputs 0 name mask label "\[value number]" xpos 2578 ypos -1410 number 1 } Dot { name Dot24 xpos 2603 ypos -1346 } set N648119f0 [stack 0] NoOp { name autoAlphaCheck2 xpos 2456 ypos -1340 addUserKnob {20 autoAlphaCheck} addUserKnob {6 a +STARTLINE} a {{"clamp(\[lsearch \[channels this] rgba.alpha]+1, 0, 1)\n"}} } StickyNote { inputs 0 name StickyNote3 tile_color 0x545454ff gl_color 0x545454ff label "info: \n\nThe nodes activated by default (only scale) controls the channelOffset.\nThis is the basic setup, the other transforms stacked under the scale-nodes are by default disabled to avoid filtering issus when extra offset controls is not needed.\n\nIf the 'activate global controls' checkbox is activated, all the transforms will be active.\nThis will give you access to all the extra offset controls, but can also cause some extra unwanted filtering. \n\nIf filtering becomes an issue, but you still want to use the extra controls, try using the restore luminance option to restore detail.\n\nPick you battle: more contol == some loss in detail" xpos -825 ypos -974 } StickyNote { inputs 0 name StickyNote1 tile_color 0x545454ff gl_color 0x545454ff label "info: \n\ncopy node is there to recreate the input alpha.\nif an alpha does not extist, a solid alpha will be copied in.\nthis is to not get errors when using the node on inputs with no alpha channel.\n\nTo restore the original blank alpha channel,\nthe remove node grabs the input alpha value and removes\nor keeps the alpha channel based on if an input alpha exists" xpos 1184 ypos 498 } Input { inputs 0 name rgba label "\[value number]" xpos 778 ypos -1500 } set N64b61ac0 [stack 0] Dot { name Dot2 xpos -998 ypos -1499 } Dot { name Dot23 xpos -998 ypos -195 } set Nabdd0a80 [stack 0] Dot { name Dot13 xpos -998 ypos 60 } Dot { name Dot36 note_font_size 41 xpos -998 ypos 582 } Dot { name Dot21 xpos -998 ypos 758 } Dot { name Dot34 xpos -998 ypos 1099 } set Nb0e0110 [stack 0] Dot { name Dot7 xpos -998 ypos 1405 } Dot { name Dot22 xpos -998 ypos 1586 } set N1416d9e0 [stack 0] Dot { name Dot35 note_font_size 41 xpos -998 ypos 2058 } Dot { name Dot18 tile_color 0x272727ff xpos -998 ypos 2211 } AdjBBox { numpixels 0 name AdjBBox1 xpos 1477 ypos 2207 } push $Nabdd0a80 Remove { name Remove1 xpos -491 ypos -193 } Radial { area {0 0 {input.width()} {input.height()}} name Radial2 xpos -491 ypos -163 } Expression { expr0 r expr1 g expr2 b expr3 a YCbCr" xpos 1104 ypos 1098 } push $N23a7ece0 Dot { name Dot1 note_font_size 41 xpos -34 ypos 3 } set Nf8545180 [stack 0] push $N64b61ac0 Dot { name Dot25 xpos 806 ypos -1393 } set Nf8549fd0 [stack 0] add_layer {apChroma apChroma.red apChroma.green apChroma.blue apChroma.alpha} Shuffle2 { fromInput1 {{0} B} fromInput2 {{0} B} out2 apChroma mappings "8 rgba.red 0 0 rgba.red 0 0 rgba.green 0 1 rgba.green 0 1 rgba.blue 0 2 rgba.blue 0 2 rgba.alpha 0 3 rgba.alpha 0 3 rgba.alpha 0 3 apChroma.red 1 0 rgba.alpha 0 3 apChroma.green 1 1 rgba.alpha 0 3 apChroma.blue 1 2 rgba.alpha 0 3 apChroma.alpha 1 3" name Shuffle4 label "\[value in1] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat -> \[value out2]] \}]" note_font_size 22 note_font_color 0xffffffff xpos 772 ypos -1353 } Dot { name Dot5 xpos 806 ypos -1272 } set Nabf63b40 [stack 0] Dot { name Dot9 xpos 97 ypos -1272 } Shuffle { green red blue red name redShuffle tile_color 0xff0000ff xpos 72 ypos -1108 } set N64eaa360 [stack 0] Dot { name Dot27 xpos -92 ypos -1114 } Dot { name Dot28 xpos -92 ypos -356 } set Nabbd19a0 [stack 0] push $Nabf63b40 Dot { name Dot6 xpos 1668 ypos -1272 } set Nabcdd1a0 [stack 0] Shuffle { alpha white name Shuffle3 tile_color 0xffffffff label solidAlpha xpos 2457 ypos -1273 } push $N648119f0 Switch { inputs 2 which {{!parent.autoAlphaCheck2.a}} name Switch1 tile_color 0x666666ff label AutoMaskCheck xpos 2578 ypos -1273 } Dot { name Dot40 note_font_size 41 xpos 2612 ypos -169 } set Nabdae2a0 [stack 0] Dot { name Dot41 note_font_size 41 xpos 1785 ypos -169 } set Nabdb3360 [stack 0] Dot { name Dot42 note_font_size 41 xpos 880 ypos -169 } set Nabf26700 [stack 0] push $Nabbd19a0 push $N64eaa360 TransformMasked { scale {{parent.redScale}} center {{parent.centerPoint.center.x} {parent.centerPoint.center.y}} name redTransform1 tile_color 0xff0000ff label "scale\n\[value filter]" xpos -27 ypos -961 } TransformMasked { channels rgb skewX {{parent.offsetTop*(values.red)}} center {{parent.centerPoint.input.width()/2} 0} name redTransform23 tile_color 0xff0000ff label "top offset: skewX\n\[value filter]" xpos -27 ypos -886 disable {{!parent.activateEGOC}} } TransformMasked { channels rgb skewX {{parent.offsetBottom*(values.red)}} center {{parent.centerPoint.input.width()/2} {parent.centerPoint.input.height()}} name redTransform24 tile_color 0xff0000ff label "bottom offset: skewY\n\[value filter]" xpos -27 ypos -844 disable {{!parent.activateEGOC}} } TransformMasked { channels rgb rotate {{parent.offsetRotation*(values.red/10)}} center {{parent.centerPoint.center.x} {parent.centerPoint.center.y}} name redTransform25 tile_color 0xff0000ff label "rotate\n\[value filter]" xpos -27 ypos -802 disable {{!parent.activateEGOC}} } TransformMasked { channels rgb translate {{parent.offsetX*values.red} {parent.offsetY*values.red}} center {{parent.centerPoint.center.x} {parent.centerPoint.center.y}} name redTransform26 tile_color 0xff0000ff label "x,y\n\[value filter]" xpos -27 ypos -760 disable {{!parent.activateEGOC}} } push $N64eaa360 GodRays { scale {{parent.redScale}} center {{parent.centerPoint.center.x} {parent.centerPoint.center.y}} invert_mask true name GodRays1 tile_color 0xff0000ff label scale xpos 72 ypos -956 } TransformMasked { channels rgb skewX {{parent.offsetTop*(values.red)}} center {{parent.centerPoint.input.width()/2} 0} name redTransform13 tile_color 0xff0000ff label "top offset: skewX\n\[value filter]" xpos 72 ypos -888 disable {{!parent.activateEGOC}} } TransformMasked { channels rgb skewX {{parent.offsetBottom*(values.red)}} center {{parent.centerPoint.input.width()/2} {parent.centerPoint.input.height()}} name redTransform14 tile_color 0xff0000ff label "bottom offset: skewY\n\[value filter]" xpos 72 ypos -846 disable {{!parent.activateEGOC}} } TransformMasked { channels rgb rotate {{parent.offsetRotation*(values.red/10)}} center {{parent.centerPoint.center.x} {parent.centerPoint.center.y}} name redTransform15 tile_color 0xff0000ff label "rotate\n\[value filter]" xpos 72 ypos -804 disable {{!parent.activateEGOC}} } TransformMasked { channels rgb translate {{parent.offsetX*values.red} {parent.offsetY*values.red}} center {{parent.centerPoint.center.x} {parent.centerPoint.center.y}} name redTransform21 tile_color 0xff0000ff label "x,y\n\[value filter]" xpos 74 ypos -762 disable {{!parent.activateEGOC}} } Switch { inputs 2 which {{parent.mode}} name modeSwitch1 tile_color 0x666666ff xpos 74 ypos -680 } Blur { size {{parent.redChBlur}} name BlurRedCh tile_color 0xff0000ff xpos 74 ypos -513 } Switch { inputs 2 which {{parent.Rbypass}} name bypassRedSwitch tile_color 0x666666ff xpos 74 ypos -350 } push $Nabbd19a0 Merge2 { inputs 2+1 operation copy also_merge all maskChannelMask {{{parent.Merge11.maskChannelMask}}} inject {{parent.Merge11.inject}} invert_mask {{parent.Merge11.invert_mask}} fringe {{parent.Merge11.fringe}} mix {{parent.Merge11.mix}} name Merge14 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 74 ypos -173 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "from csnuke_tools.trixter.snippets import convertMergeToAll as convertMergeToAll;convertMergeToAll.convToAll()"} } Merge2 { inputs 2+1 operation copy also_merge all name Merge15 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 74 ypos 105 disable {{!parent.centerMask}} addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "from csnuke_tools.trixter.snippets import convertMergeToAll as convertMergeToAll;convertMergeToAll.convToAll()"} } Multiply { value {1 0 0 1} name Multiply3 label "\[value value]" xpos 74 ypos 374 } Dot { name Dot39 note_font_size 41 xpos 1461 ypos 390 } push $Nf8545180 Dot { name Dot3 note_font_size 41 xpos 593 ypos 3 } set N652c62f0 [stack 0] push $Nabf63b40 Shuffle { red green blue green name greenShuffle tile_color 0xff00ff xpos 781 ypos -1114 } set N64aeb5e0 [stack 0] Dot { name Dot31 xpos 601 ypos -1116 } Dot { name Dot29 xpos 604 ypos -364 } set Nabf8a260 [stack 0] push $Nabf26700 push $Nabf8a260 push $N64aeb5e0 TransformMasked { scale {{parent.greenScale}} center {{parent.centerPoint.center.x} {parent.centerPoint.center.y}} name greenTransform1 tile_color 0xff00ff label "scale\n\[value filter]" xpos 669 ypos -970 } TransformMasked { channels rgb skewX {{parent.offsetTop*(values.green)}} center {{parent.centerPoint.input.width()/2} 0} name redTransform3 tile_color 0xff00ff label "top offset: skewX\n\[value filter]" xpos 669 ypos -899 disable {{!parent.activateEGOC}} } TransformMasked { channels rgb skewX {{parent.offsetBottom*(values.green)}} center {{parent.centerPoint.input.width()/2} {parent.centerPoint.input.height()}} name redTransform4 tile_color 0xff00ff label "bottom offset: skewY\n\[value filter]" xpos 669 ypos -857 disable {{!parent.activateEGOC}} } TransformMasked { channels rgb rotate {{parent.offsetRotation*(values.green/10)}} center {{parent.centerPoint.center.x} {parent.centerPoint.center.y}} name greenTransform7 tile_color 0xff00ff label "rotate\n\[value filter]" xpos 669 ypos -815 disable {{!parent.activateEGOC}} } TransformMasked { channels rgb translate {{parent.offsetX*values.green} {parent.offsetY*values.green}} center {{parent.centerPoint.center.x} {parent.centerPoint.center.y}} name greenTransform8 tile_color 0xff00ff label "x, y\n\[value filter]" xpos 669 ypos -773 disable {{!parent.activateEGOC}} } push $N64aeb5e0 GodRays { scale {{parent.greenScale}} center {{parent.centerPoint.center.x} {parent.centerPoint.center.y}} invert_mask true name GodRays2 tile_color 0xff00ff label scale xpos 781 ypos -970 } TransformMasked { channels rgb skewX {{parent.offsetTop*(values.green)}} center {{parent.centerPoint.input.width()/2} 0} name redTransform10 tile_color 0xff00ff label "top offset: skewX\n\[value filter]" xpos 781 ypos -902 disable {{!parent.activateEGOC}} } TransformMasked { channels rgb skewX {{parent.offsetBottom*(values.green)}} center {{parent.centerPoint.input.width()/2} {parent.centerPoint.input.height()}} name redTransform16 tile_color 0xff00ff label "bottom offset: skewY\n\[value filter]" xpos 781 ypos -860 disable {{!parent.activateEGOC}} } TransformMasked { channels rgb rotate {{parent.offsetRotation*(values.green/10)}} center {{parent.centerPoint.center.x} {parent.centerPoint.center.y}} name greenTransform9 tile_color 0xff00ff label "rotate\n\[value filter]" xpos 781 ypos -818 disable {{!parent.activateEGOC}} } TransformMasked { channels rgb translate {{parent.offsetX*values.green} {parent.offsetY*values.green}} center {{parent.centerPoint.center.x} {parent.centerPoint.center.y}} name greenTransform10 tile_color 0xff00ff label "x, y\n\[value filter]" xpos 781 ypos -776 disable {{!parent.activateEGOC}} } Switch { inputs 2 which {{parent.mode}} name modeSwitch3 tile_color 0x666666ff xpos 782 ypos -686 } Blur { size {{parent.greenChBlur}} name BlurGeenCh tile_color 0xff00ff xpos 782 ypos -518 } Switch { inputs 2 which {{parent.Gbypass}} name bypassGreenSwitch tile_color 0x666666ff xpos 785 ypos -361 } push $Nabf8a260 Merge2 { inputs 2+1 operation copy also_merge all maskChannelMask {{{parent.Merge11.maskChannelMask}}} inject {{parent.Merge11.inject}} invert_mask {{parent.Merge11.invert_mask}} fringe {{parent.Merge11.fringe}} mix {{parent.Merge11.mix}} name Merge12 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 785 ypos -108 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "from csnuke_tools.trixter.snippets import convertMergeToAll as convertMergeToAll;convertMergeToAll.convToAll()"} } Merge2 { inputs 2+1 operation copy also_merge all name Merge13 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 785 ypos 122 disable {{!parent.centerMask}} addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "from csnuke_tools.trixter.snippets import convertMergeToAll as convertMergeToAll;convertMergeToAll.convToAll()"} } Multiply { value {0 1 0 1} name Multiply5 label "\[value value]" xpos 785 ypos 314 } push $N652c62f0 Dot { name Dot12 note_font_size 41 xpos 1469 ypos 3 } push $Nabcdd1a0 Shuffle { red blue green blue name blueShuffle tile_color 0xffff xpos 1640 ypos -1126 } set N57ef75b0 [stack 0] Dot { name Dot33 xpos 1467 ypos -1116 } Dot { name Dot32 xpos 1467 ypos -373 } set N7c842930 [stack 0] push $Nabdb3360 push $N7c842930 push $N57ef75b0 TransformMasked { scale {{parent.blueScale}} center {{parent.centerPoint.center.x} {parent.centerPoint.center.y}} name blueTransform1 tile_color 0xffff label "scale\n\[value filter]" xpos 1532 ypos -970 } TransformMasked { channels rgb skewX {{parent.offsetTop*(values.blue)}} center {{parent.centerPoint.input.width()/2} 0} name redTransform6 tile_color 0xffff label "top offset: skewX\n\[value filter]" xpos 1532 ypos -874 disable {{!parent.activateEGOC}} } TransformMasked { channels rgb skewX {{parent.offsetBottom*(values.blue)}} center {{parent.centerPoint.input.width()/2} {parent.centerPoint.input.height()}} name redTransform7 tile_color 0xffff label "bottom offset: skewY\n\[value filter]" xpos 1532 ypos -832 disable {{!parent.activateEGOC}} } TransformMasked { channels rgb rotate {{parent.offsetRotation*(values.blue/10)}} center {{parent.centerPoint.center.x} {parent.centerPoint.center.y}} name blueTransform7 tile_color 0xffff label "rotate\n\[value filter]" xpos 1532 ypos -790 disable {{!parent.activateEGOC}} } TransformMasked { channels rgb translate {{parent.offsetX*values.blue} {parent.offsetY*values.blue}} center {{parent.centerPoint.center.x} {parent.centerPoint.center.y}} name blueTransform8 tile_color 0xffff label "x,y\n\[value filter]" xpos 1532 ypos -748 disable {{!parent.activateEGOC}} } push $N57ef75b0 GodRays { scale {{parent.blueScale}} center {{parent.centerPoint.center.x} {parent.centerPoint.center.y}} invert_mask true name GodRays3 tile_color 0xffff label scale xpos 1640 ypos -970 } TransformMasked { channels rgb skewX {{parent.offsetTop*(values.blue)}} center {{parent.centerPoint.input.width()/2} 0} name redTransform8 tile_color 0xffff label "top offset: skewX\n\[value filter]" xpos 1640 ypos -876 disable {{!parent.activateEGOC}} } TransformMasked { channels rgb skewX {{parent.offsetBottom*(values.blue)}} center {{parent.centerPoint.input.width()/2} {parent.centerPoint.input.height()}} name redTransform9 tile_color 0xffff label "bottom offset: skewY\n\[value filter]" xpos 1640 ypos -834 disable {{!parent.activateEGOC}} } TransformMasked { channels rgb rotate {{parent.offsetRotation*(values.blue/10)}} center {{parent.centerPoint.center.x} {parent.centerPoint.center.y}} name blueTransform9 tile_color 0xffff label "rotate\n\[value filter]" xpos 1640 ypos -792 disable {{!parent.activateEGOC}} } TransformMasked { channels rgb translate {{parent.offsetX*values.blue} {parent.offsetY*values.blue}} center {{parent.centerPoint.center.x} {parent.centerPoint.center.y}} name blueTransform10 tile_color 0xffff label "x,y\n\[value filter]" xpos 1640 ypos -750 disable {{!parent.activateEGOC}} } Switch { inputs 2 which {{parent.mode}} name modeSwitch5 tile_color 0x666666ff xpos 1641 ypos -675 } Blur { size {{parent.blueChBlur}} name BlurBlueCh tile_color 0xffff xpos 1641 ypos -537 } Switch { inputs 2 which {{parent.Bbypass}} name bypassBlueSwitch tile_color 0x666666ff xpos 1641 ypos -367 } push $N7c842930 Merge2 { inputs 2+1 operation copy also_merge all name Merge11 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 1641 ypos -95 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "from csnuke_tools.trixter.snippets import convertMergeToAll as convertMergeToAll;convertMergeToAll.convToAll()"} } Merge2 { inputs 2+1 operation copy also_merge rgba name Merge4 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 1641 ypos 145 disable {{!parent.centerMask}} addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "from csnuke_tools.trixter.snippets import convertMergeToAll as convertMergeToAll;convertMergeToAll.convToAll()"} } Multiply { value {0 0 1 1} name Multiply6 label "\[value value]" xpos 1641 ypos 227 } Merge2 { inputs 2 operation plus also_merge all name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 1641 ypos 326 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "from csnuke_tools.trixter.snippets import convertMergeToAll as convertMergeToAll;convertMergeToAll.convToAll()"} } Merge2 { inputs 2 operation plus also_merge all name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 1641 ypos 386 addUserKnob {20 TRX} addUserKnob {22 swap l "swap to Merge All Node" -STARTLINE T "from csnuke_tools.trixter.snippets import convertMergeToAll as convertMergeToAll;convertMergeToAll.convToAll()"} } set N6d1ac9d0 [stack 0] Shuffle { in apChroma name Shuffle6 autolabel "nuke.thisNode()\['name'].value() + '\\n' + nuke.thisNode()\['in'].value() + (' -> ' + nuke.thisNode()\['out2'].value() if nuke.thisNode()\['out2'].value() != 'none' else '') + ('\\n' + nuke.thisNode()\['label'].value() if nuke.thisNode()\['label'].value() != '' else '')" note_font_size 22 note_font_color 0xffffffff xpos 2156 ypos 198 } Saturation { saturation 0 name Saturation1 xpos 2156 ypos 272 } Shuffle { green red blue red alpha red name Shuffle8 autolabel '' tile_color 0x93000000 note_font_size 22 note_font_color 0xffffffff xpos 2156 ypos 298 } push $N64b61ac0 AddChannels { channels rgba name AddChannels1 xpos 2144 ypos -1506 } Dot { name Dot11 xpos 2338 ypos -1502 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 2304 ypos 297 disable {{!parent.process_alpha}} } Dot { name Dot26 xpos 2338 ypos 362 } set Nc75990c0 [stack 0] Shuffle { alpha white name Shuffle5 tile_color 0xffffffff label solidAlpha xpos 2164 ypos 436 } push $Nc75990c0 Dot { name Dot8 xpos 2338 ypos 517 } Switch { inputs 2 which {{!autoAlphaCheck1.a}} name Switch3 tile_color 0x666666ff label AutoMaskCheck xpos 2164 ypos 519 } push $N6d1ac9d0 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy3 xpos 1641 ypos 519 } Remove { channels alpha name Remove2 xpos 1641 ypos 577 disable {{parent.autoAlphaCheck1.a}} } Remove { channels apChroma name Remove3 xpos 1641 ypos 763 disable {{parent.calculate_multi_alpha}} } Dot { name Dot30 xpos 1674 ypos 1057 } set Nc729daa0 [stack 0] Colorspace { colorspace_out YCbCr name Colorspace5 label "Lin --> YCbCr" xpos 1459 ypos 1047 } set Nc7193100 [stack 0] Dissolve { inputs 2 channels rgb which {{parent.luminancePercent}} name Dissolve2 xpos 1285 ypos 1100 } push $Nc7193100 Copy { inputs 2 from0 rgba.red to0 rgba.red name Copy11 xpos 1459 ypos 1096 } Colorspace { colorspace_in YCbCr name Colorspace6 label "YCbCr --> Lin" xpos 1459 ypos 1149 } push $Nc729daa0 Switch { inputs 2 which {{parent.restoreLuminance}} name restore_luminance tile_color 0x666666ff xpos 1640 ypos 1155 } Merge2 { inputs 2 name Merge2 xpos 1641 ypos 1898 disable {{!(parent.displayMask)}} } CopyBBox { inputs 2 name CopyBBox1 xpos 1641 ypos 2207 disable {{!parent.preserveBBox}} } Output { name Output1 xpos 1641 ypos 2547 } push $Nabdae2a0 Dot { name Dot43 note_font_size 41 xpos 2612 ypos 1567 } Dot { name Dot4 tile_color 0x272727ff label mask note_font "Arial Black" note_font_size 25 xpos 2612 ypos 2058 } push $Nf8549fd0 NoOp { name autoAlphaCheck1 xpos 894 ypos -1397 addUserKnob {20 autoAlphaCheck} addUserKnob {6 a +STARTLINE} a {{"clamp(\[lsearch \[channels this] rgba.alpha]+1, 0, 1)"}} } push $Nf8549fd0 NoOp { name centerPoint xpos 657 ypos -1397 addUserKnob {20 centerPoint} addUserKnob {12 center +DISABLED} center {{width()/2} {height()/2}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_h_gradienteditor.gizmo ================================================ Group { name GradientEditor tile_color 0x4b19ffff selected true addUserKnob {20 User l Gradient} addUserKnob {26 headline l "" +STARTLINE T "GradientEditorv0.9\n"} addUserKnob {26 headline2 l "" +STARTLINE T "by Mads Hagbarth Damsbo - 2016"} addUserKnob {26 devider_header l "INPUT MAPPING"} addUserKnob {4 Type M {Input Generator}} Type Generator addUserKnob {4 sample_type l Sample -STARTLINE M {Magnitude Maximum Average Red Green Blue Alpha "" "" ""}} sample_type Average addUserKnob {41 in l From -STARTLINE T Shuffle1.in} addUserKnob {6 Invert l Reverse -STARTLINE} addUserKnob {26 deviderMain l "GRADIENT"} addUserKnob {52 ui l "" +STARTLINE T ColorGradientUi.ColorWheelKnob_GRADIENT() +STARTLINE} addUserKnob {7 input_valueLow l Interval R -1 1} addUserKnob {4 lowCont l "" -STARTLINE M {Hold Loop Bounce}} lowCont Bounce addUserKnob {7 input_valueHigh l "" -STARTLINE R 0 2} input_valueHigh 1 addUserKnob {4 highCont l "" -STARTLINE M {Hold Loop Bounce ""}} highCont Bounce addUserKnob {4 Interpolation l INVISIBLE +INVISIBLE M {Constant Linead Smooth Catmull-Rom Cubic Horizontal ""}} Interpolation Smooth addUserKnob {6 PreserceLuma l "Preserve Luma" +STARTLINE} addUserKnob {26 devider_phasing l "PHASING"} addUserKnob {7 Phase R 0 10} addUserKnob {7 Frequency R 0 10} Frequency 1 addUserKnob {26 devider_Input l "PREMULT"} addUserKnob {41 colorspace_in l " colorspace " T Colorspace2.colorspace_in} addUserKnob {41 alpha l "Unpremult by" T Unpremult1.alpha} addUserKnob {6 Premult -STARTLINE} addUserKnob {20 responsecurve_tab l "Response Curve"} addUserKnob {26 CurveInfo l "" +STARTLINE T "Use the master curve to control the response curve"} addUserKnob {26 ""} addUserKnob {41 lut l "" +STARTLINE T ColorLookup2.lut} } Input { inputs 0 name Input1 xpos -3 ypos -76 } set N1c010300 [stack 0] Dot { name Dot1 xpos 351 ypos -73 } Dot { name Dot2 xpos 351 ypos 642 } push $N1c010300 Expression { expr0 x/width expr1 x/width expr2 x/width expr3 1 name Expression1 xpos 112 ypos -25 } push $N1c010300 Shuffle { name Shuffle1 xpos -3 ypos -43 } Unpremult { alpha -rgba.alpha name Unpremult1 xpos -3 ypos -19 } Switch { inputs 2 which {{parent.Type}} name Switch1 xpos -3 ypos 20 } set N1c02a840 [stack 0] Dot { name Dot3 xpos -225 ypos 88 } Colorspace { colorspace_out YCbCr name Colorspace1 xpos -467 ypos 135 } push $N1c02a840 Shuffle { red alpha green alpha blue alpha name Shuffle5 xpos 260 ypos 149 } push $N1c02a840 Shuffle { red blue green blue alpha blue name Shuffle4 xpos 174 ypos 150 } push $N1c02a840 Shuffle { red green blue green alpha green name Shuffle3 xpos 85 ypos 148 } push $N1c02a840 Shuffle { green red blue red alpha red name Shuffle2 xpos -3 ypos 148 } push $N1c02a840 Saturation { saturation 0 mode Average name Saturation2 xpos -113 ypos 145 } push $N1c02a840 Saturation { saturation 0 mode Maximum name Saturation1 xpos -232 ypos 147 } push $N1c02a840 Expression { temp_name3 VectorLength_3D temp_expr3 sqrt(Red*Red+Green*Green+Blue*Blue) expr0 VectorLength_3D expr1 VectorLength_3D expr2 VectorLength_3D name Vector_Length3D xpos -336 ypos 148 } Switch { inputs 7 which {{parent.sample_type}} name Switch3 selected true xpos -3 ypos 367 } Grade { blackpoint {{parent.input_valueLow}} whitepoint {{parent.input_valueHigh}} multiply {{parent.Frequency}} add {{parent.Phase}} black_clamp false name Grade1 xpos -3 ypos 391 } Invert { name Invert1 xpos -3 ypos 415 disable {{!parent.Invert}} } Expression { temp_name0 antR temp_expr0 (floor(r/2)-(floor((r+1)/2)-1)) temp_name1 antG temp_expr1 (floor(g/2)-(floor((g+1)/2)-1)) temp_name2 antB temp_expr2 (floor(b/2)-(floor((b+1)/2)-1)) expr0 r<=parent.input_valueLow?parent.lowCont==0?r:parent.lowCont==1?r-floor(r):((1-(r-floor(r)))*(1-antR))+(((r-floor(r)))*(antR)):parent.highCont==0?r:parent.highCont==1?r-floor(r):((1-(r-floor(r)))*(1-antR))+(((r-floor(r)))*(antR)) expr1 g<=parent.input_valueLow?parent.lowCont==0?g:parent.lowCont==1?g-floor(g):((1-(g-floor(g)))*(1-antG))+(((g-floor(g)))*(antG)):parent.highCont==0?g:parent.highCont==1?g-floor(g):((1-(g-floor(g)))*(1-antG))+(((g-floor(g)))*(antG)) expr2 b<=parent.input_valueLow?parent.lowCont==0?b:parent.lowCont==1?b-floor(b):((1-(b-floor(b)))*(1-antB))+(((b-floor(b)))*(antB)):parent.highCont==0?b:parent.highCont==1?b-floor(b):((1-(b-floor(b)))*(1-antB))+(((b-floor(b)))*(antB)) name Expression2 xpos -3 ypos 491 } ColorLookup { lut {master {curve 0 1} red {} green {} blue {} alpha {}} name ColorLookup2 xpos -3 ypos 562 } ColorLookup { lut {master {} red {curve 0 x0.1587301642 0.275288014 x0.1859410405 0.9960784314 x0.297052145 0.9960784314 x0.6575963497 0.58954757 L x1 0} green {curve 0 x0.1587301642 0.1388876173 x0.1859410405 0.2344090944 x0.297052145 0.7500419623 x0.6575963497 0.7201953155 L x1 0.2081483177} blue {curve 0 x0.1587301642 0.124711986 x0.1859410405 0 x0.297052145 0 x0.6575963497 0.7437857633 L x1 0.368627451} alpha {curve 1 x0.1587301642 1 x0.1859410405 1 x0.297052145 1 x0.6575963497 1 L x1 1}} name ColorLookup1 xpos -2 ypos 586 addUserKnob {20 User} addUserKnob {22 chek +STARTLINE} } Colorspace { colorspace_in sRGB name Colorspace2 xpos -2 ypos 669 } set N1c077f10 [stack 0] Colorspace { colorspace_out YCbCr name Colorspace8 xpos -334 ypos 669 } ShuffleCopy { inputs 2 red red name ShuffleCopy2 xpos -467 ypos 669 } Colorspace { colorspace_in YCbCr name Colorspace9 xpos -467 ypos 708 } push $N1c077f10 Switch { inputs 2 which {{parent.PreserceLuma}} name Switch2 xpos -2 ypos 708 } ShuffleCopy { inputs 2 name ShuffleCopy1 xpos -2 ypos 788 } Premult { name Premult1 xpos -2 ypos 812 disable {{!parent.Premult}} } Output { name Output1 xpos -2 ypos 866 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_h_silk.gizmo ================================================ Group { name Silk tile_color 0x70ffcdff addUserKnob {20 User} addUserKnob {26 Credits l "" +STARTLINE T "Silk for Nuke"} addUserKnob {26 devider_general l "General"} addUserKnob {4 Algorithm M {Gaussian Disk E-Box E-Triangle E-Quadratic E-Gaussian E-Dir "" "" "" "" ""}} addUserKnob {6 inverse l "Inverse E filters" -STARTLINE} addUserKnob {3 Streaks} Streaks 1 addUserKnob {7 Size} Size 0.35 addUserKnob {26 text_blank l "" +STARTLINE T " "} addUserKnob {41 size l Erode T Erode.size} addUserKnob {41 size_1 l Re-Erode T ReErode.size} addUserKnob {7 ReErodeSoften l "Erode Soften"} addUserKnob {26 devider_shading l "Shading"} addUserKnob {7 Offset R 0 2} Offset 1 addUserKnob {7 contrast l Contrast R 0 2} contrast 1 addUserKnob {26 text_blank2 l "" +STARTLINE T " "} addUserKnob {19 Gamma} Gamma {0.72705 0.651014 0.8 0.67} addUserKnob {6 Gamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} Gamma_panelDropped true addUserKnob {26 text_blank3 l "" +STARTLINE T " "} addUserKnob {7 Prim_HueRed l "Offset Red " R -1 1} Prim_HueRed 0.36 addUserKnob {7 Prim_HueGreen l "Offset Green " R -1 1} Prim_HueGreen 0.12 addUserKnob {7 Prim_HueBlue l "Offset Blue " R -1 1} Prim_HueBlue 0.56 addUserKnob {26 devider_sampler l "Multisample"} addUserKnob {6 multisample_enable l "Enable Multisample" +STARTLINE} addUserKnob {3 no_samples l Samples} no_samples 2 addUserKnob {7 sample_width l "Sample Width" -STARTLINE R 0 4} sample_width 1.5 } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x8e388e00 label Algorithms note_font_size 42 xpos -937 ypos -3 bdwidth 521 bdheight 244 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x8e388e00 label "NYI NORMALIZE" note_font_size 42 xpos -635 ypos 916 bdwidth 319 bdheight 181 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x71c67100 label "Razor Sharp!" note_font_size 42 xpos -641 ypos 1253 bdwidth 328 bdheight 235 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x7171c600 label "Multisample Hack" note_font_size 42 xpos -622 ypos 349 bdwidth 318 bdheight 191 } Input { inputs 0 name Input1 xpos -508 ypos -95 } Dot { name Dot39 xpos -474 ypos -31 } Dot { name Dot5 xpos -474 ypos 57 } set N23df10 [stack 0] Dot { name Dot9 xpos -584 ypos 57 } set N230b10 [stack 0] Dot { name Dot7 xpos -747 ypos 57 } set N2a3a10 [stack 0] Dot { name Dot6 xpos -895 ypos 57 } DirBlurWrapper { BlurCenter {{width/2} {height/2}} BlurLength {{parent.inverse?(parent.Size*100):-(parent.Size*100)}} BlurAngle 54 name G xpos -929 ypos 125 } Dot { name Dot8 xpos -895 ypos 196 } push $N2a3a10 FilterErode { channels rgb size {{parent.inverse?(parent.Size*100):-(parent.Size*100)}} filter {{max(0,min(3,parent.Algorithm-2))}} name CDEF xpos -781 ypos 124 } push $N230b10 Defocus { defocus {{parent.Size*100}} name B xpos -618 ypos 117 } push $N23df10 Blur { channels {rgba.red rgba.green rgba.blue none} size {{parent.Size*100}} quality 40 crop false name A xpos -508 ypos 122 } Switch { inputs 4 which {{parent.Algorithm<2?parent.Algorithm:parent.Algorithm>5?parent.Algorithm:2}} name Switch1 xpos -508 ypos 193 } Blur { size 5 quality 5 crop false name RefineEdges xpos -508 ypos 261 } NoTimeBlur { name NoTimeBlur xpos -508 ypos 428 } Transform { translate {{((frame*samplecount)-floor(frame*samplecount)-.5)*samplewidth} {((floor(frame*(samplecount+0))/(samplecount-1))-(floor((floor(frame*samplecount)/(samplecount)))+(floor(frame)/(samplecount-1)))-.5)*samplewidth x2 0}} center {512 512} filter Lanczos4 name SampleOffset xpos -508 ypos 452 disable {{1-parent.multisample_enable}} addUserKnob {20 User} addUserKnob {7 samplecount} samplecount {{parent.no_samples}} addUserKnob {7 samplewidth R 0 20} samplewidth {{parent.sample_width}} } Crop { box {0 0 {input.width} {input.height}} reformat true crop false name PreCrop xpos -508 ypos 476 } Erode { channels rgba size 0 quality 100 name Erode xpos -508 ypos 666 } FilterErode { channels rgb size 0 filter gaussian name ReErode xpos -507 ypos 695 } Blur { size {{parent.ReErodeSoften*10}} name Soften xpos -507 ypos 719 } Group { name SilkKernel xpos -507 ypos 858 addUserKnob {20 SilkKernel} addUserKnob {41 "Local GPU: " T BlinkScript2.gpuName} addUserKnob {41 "Use GPU if Available" T BlinkScript2.useGPUIfAvailable} addUserKnob {26 ""} addUserKnob {41 Streaks T BlinkScript2.SilkKernel_Streaks} addUserKnob {41 Size T BlinkScript2.SilkKernel_Size} addUserKnob {41 Offset T BlinkScript2.SilkKernel_Offset} } Input { inputs 0 name Input1 xpos -382 ypos 400 } BlinkScript { recompileCount 13 ProgramGroup 1 KernelDescription "2 \"SilkKernel\" iterate componentWise a8d20f769bc5f1146178c19e66f6939a5a62084403c064c3e35b7dd54065c60d 2 \"imageIn\" Read Ranged2D \"imageOut\" Write Point 3 \"Streaks\" Int 1 AwAAAA== \"Size\" Float 1 AABIQg== \"Offset\" Float 1 AACAPw== 3 \"radius\" 1 1 \"_size\" 1 1 \"_offset\" 1 1 3 \"imageInrangeMin\" Int 2 1 AAAAAAAAAAA= \"imageInrangeMax\" Int 2 1 AAAAAAAAAAA= \"_filterWidth\" Int 1 1 AAAAAA==" EncodedSource "1 1479 dhEQzoHxuPZMTdlATdMOWo2dFJcBVepmv6cp1NCeZWF+Mf5M0u80yBHudvlCkY6QzaXnS8kgn2bC+1HxdrsgE2MNp2hxP6weoR9eXGJSmA4Ipxy7tjAplgO7Ziww2ePVBhVJ/9TLn7XocM6jxn+51vwvMvkp6zv3UTIHvyPQ53zzTBNX4EREGYAg0juBopJLTxm6OuSSu1pt6d/0/w7Y6NDYJnRPkJYQtTB6BxUXBipyC1urZoNfDDexKBxWdHnNX/2C5LpHmyRHW7DBqih5puqF1v2wK3M7zUAwAefC1cQf4Y51jt00IyTpd+DJhQhgj7PTHcZHSmU0cHrgm2jr6NI8/1ZbiNQdUgGOCm6z2AVgzckBO5m5Bcwb4isjOMk6dCZyMuRo9eTFwWvALWAbQ1L5e/xxDN0C4v5WI8ctoIgtNUveQAzCut7+XqDXLTnEGKPSN0htmry8pIqitUe/1lLhoo2MlLZvQeAsxpcDvUPgMneye1DZ4d2/GITXV29yA6kdJxg2O1LgmF+H3viS7XC4O5S/HrQmfBK6nz1LREHb5mqmGhwzM9axnTE4Z2iHoP88JUTOZlnGoIQ/30kW3vSuH5wrbJk2NEB/Nf1HQUpXGg5VyLHLWRb1MBfW0M2OWnfRk9/yTVvj0PV+DkOAmiZ72NMiBFPbwnF+POtT9o+wZt7lQoKwUNu6qIeFokXHeuNfe/oELFWmakDd5Bz/q3cbfteJryiEqascGYVMVtygjYD/NAM5oXsJM3onEZxRLT6UbkFXfexwjYFRaMMQw4BRSq5LmO0qQYs4Xi/deSbRzv9zGzCq5d33nK7rLYEQO7ADUTyb4epF6p3M64Y1BT5w6Vhn9oAAeWoxMTefRFxPNXGYZ4vThzZV/dorJbQh2AbjltNp7qfZ2V/Q5MFdBgD9Zn4wc2sgdQ0qZJ4DsG4ctUId4rc+My+VKW789aYBzdaXVNNpblH2TRhKMNOYxkIFSItVOKLcGWrN//worJyIJu2NfuMV6qcpMPY95NlhXlTVbq8ySJ65gcJDhiHYeWsGRd3Cwon0fh58WKq9d0zUopU38enhOYuXtLMx8jc8qpf0UDw5J/yKUKll5MDvOvZh70T9YvZeU8snD8AinVu1yCd9uJaUq6gQ3pkWRZ9XC+1YN4yPo2/3Ppx/y9D76kNxajXfmkOqTflLjgmKDCw/dCvkDXutj7rrs03OffctiKCxEjFndQO4oSycDR2wCz22mfvHddBMiuLQln1M6SZihyR1otSvL8gekCk+sHyFbap7vj2gGxty86ZhGf1F7/9agdrNYWJfoakkYEnH0I3Q0mVIZ+ET9Ts5ojvLGhwtetcWG+ZE2CMt7aCAzQQw5lnX6BXbfHOjPxyesCHlsqnqsOb2N0C+4BG2K1bhLOJy2c050pPpuxJjj2Q3msDanYmb1qafvVo6oF/TsSGZMEVGsjFbFb3URPHQi4/I2igSsNx9qPv/yuUt+RhWgc106qzZXyT6jsAJK9lqdc2EHF1/dgVNa+KssoB2zqrKUkX5lwhS9fZFI4Fi0vgz7u+V0AxnpsySFUfpP7BKgmx+W0NgsTgSXiQQOA44ZPAGspc9MsLgLqn2CNHet1c7uX3MRjhHoPTdplgj133pZ6Qr5HaBSy3munkTSVKKuWbP8sznux1okaF8z82N+FSoVfPGaYU9HRR3caSoJxWxcNrlGUI1FZoCwrvCj2bVswHQrMtrYhEm6y5Xubhb10VzfpxegsYQus8YyoXhfgi3MIfjwBIULPQTThTIFz7QQ9E4GjPCguOPiiGVpwmwEmpFHl32nMZhX2Jpaei75SAPVFSAm+F0qpB7/YPsJ/QFqAfVLdR73/EGY3wRdp1IorOhFQBJvhX2mDPyVzXUSsLcjwRcCC56aOi3Cwvk53KsrAABdt0iF3K7JWnGQ2m7rl9FNJ/V7txafkY5xei1bXUSHEQ+53YKNGxk3j++e++HppcQ2tom" rebuild "" SilkKernel_Streaks {{Controller.Streaks}} SilkKernel_Size {{Controller.Size}} SilkKernel_Offset {{Controller.Offset}} protectKernelWhenPublishing true rebuild_finalise "" name BlinkScript2 xpos -382 ypos 440 } Output { name Output1 xpos -382 ypos 540 } end_group Dot { name Dot1 xpos -473 ypos 976 } set N117e4710 [stack 0] Dot { name Dot2 xpos -558 ypos 976 } Dot { name Dot3 xpos -558 ypos 1064 } push $N117e4710 Grade { gamma 1.2 black_clamp false name Extend xpos -507 ypos 1017 } Merge2 { inputs 2 operation divide mix 0 name Uniform xpos -507 ypos 1061 } Crop { box {0 0 {input.width} {input.height}} softness 13 reformat true crop false name PostCrop xpos -507 ypos 1151 } Group { name SilkShader xpos -507 ypos 1193 addUserKnob {20 SilkShader} addUserKnob {41 "Local GPU: " T BlinkScript2.gpuName} addUserKnob {41 "Use GPU if Available" T BlinkScript2.useGPUIfAvailable} addUserKnob {26 ""} addUserKnob {41 Contrast T BlinkScript2.SilkShader_Contrast} addUserKnob {41 Gamma T BlinkScript2.SilkShader_Gamma} addUserKnob {41 Shift T BlinkScript2.SilkShader_Shift} } Input { inputs 0 name Input1 xpos -492 ypos 684 } BlinkScript { recompileCount 36 ProgramGroup 1 KernelDescription "2 \"SilkShader\" iterate pixelWise 37886f6e25026b952dbda1c9c26e50da6f0ab7552ea7b4d1b217c2a63b64b133 2 \"src\" Read Point \"dst\" Write Point 3 \"Contrast\" Float 1 mpmZPw== \"Gamma\" Float 3 AACAPwAAgD8AAIA/AAAAAA== \"Shift\" Float 3 AACAPwAAgD8AAIA/AAAAAA== 3 \"Contrast\" 1 1 \"Gamma\" 3 1 \"Shift\" 3 1 1 \"coefficients\" Float 9 1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" EncodedSource "1 3160 TZDhpVd5F85rRWAmzITAwqEa5RZ2CRXoVOj6mUsUqT3rDy87bEL3L2PFs3rm70CUy00Iif746ThB7CDGBzw+tQIpRw3wVBPJYQF7XHfldrFKKui/k2QxXj50Id9tIz/dhfrhuOPVfac0vNJNpOVmsUnF4AJhfoiskoH0BM4tL1njAw0hCtt/v2CZ3i4PNRp39AzWNA3G573AVry4lYBdC7eI+CYUmrJJNAaNB2vgc4p7+Z5HwPvae3QrbCP4QIV3Bqid0WY4Bn/Rqw1q3nXs8j+7SlL1d7FmJ5NYH33yo36LmyYDS4f3xSNV5RsuYb6t/p5w/YCkPdJ5PGvwoRvky0p5U8vh37HKXYU+49TIx7jnCr9ulPLfu/Z5Dwofjs7qnJNfJqkirdEnq6lmHBBdWj9fd2oNz+QEAVsEOwbFDco8aeD2w0WCaLTn5zAl4i2J34WQPItKaMIIPyd58uAqAW9+l0hVr5UvWdoIfHNRCZI9vowECVjbBU8IY7eCH6XGT1trSTdsHOKwubZcfpZw9d93ZUM1f8xTm5am36UL9g++2VDgoXJaVSfYwq3fzFXf9ffVAuGWAykWsLKEynoth4z7otVCLA7Vtq0KWNX8DYZ76F/u7nRlG/MnYB0YHOXDfZoHrS5XkjuDBlL6aWj2WG0F84nwZgNwXU1ZTxmBsYvse4QIC5b57+evfVteh6AXoRLrRH1hC6SL37/0hVcibuRu4mB38DVXr99hP2m9P2VARP1KuldKUdkIVvbPI+9LhdF0FXYPb56UMfPKiWWbvz++DmSAH2a4soa/qKUEaU5wjCNsiyjfbGjlkJe1B/x1NO+NHz1bEtODcRrJPJmneCF3TfO3vj20tmV5a8B17yJU8LOxEoLC+TwU9D6IUeIYJl0ogW1+DGRe3q2udpa3dXhnz1diT97vFt2vb56mZ3RJTVLuptwTDah35p/C6R/COeVEP9Eq43WO6KZ7B75YSAEXODL8SczSYSP91NdBoiYONxx61wC5SjXzDbEF9Eb46aUzMtNkdI6RhrXxo1Vk6LgxYDlRwmdUyviSoEBGXe7GbjzncIwWVRJRqhrsddbPSbVf1QpeQ12/jbIZItdFHU3+AM5RxQ/ga64Osp0N9LQ9wuNG1np/A51V2YLKwHp4EubblGeyoaybsEl21fDkPMnOk0ESOGrMX+OTdD9d6DYhvrCCV2VNtO12Ln7JeMpsdN2bCeyAneSnVvMvUYya1mM3ElagghPCYtZ9nbH6uwepIaH7plpCRmk8AdJvdE120P2lqJ7CcTW+yUohvO3xk2TZNzCcc0qg6wXs8IqDTjqN89k+97ndYX6GgEnf31QpOrG6Lm6oEpE7NS/C3TSuciJtcpJHj8aYzVKbXYZDbmpIpHF0TAH0zCuIA5JtEIAOoh20jh0r08INYbJyaDbyWdM94Hn5UImk4jrZrvrN9Fvoc2kPSFjlzfaV+mcrrf+gaWkm+Oi0JtZQU+kY52ta2d3VHmNnOprcRNN7Z8MGvjieGh34O7WYknuvG4Ooe6nrfZyMi/lVHGx9zIYKm8qbq6ZClfBmafIyu4mQFOUxztnIusuq7loVkueC4ll46pHA7U44dlDQIxzcNte7yzSpZtlaEaTUWc4qYAp8scRsODV5H6TLcny9xURzVriW/c/a8odIPTEEY8Vy2cP4IjgaULDNBQT3lJLGFumOYmTSNVKXOzYkjqc0nflFWwNOtQtdLLcC1F32/49EakAPhHeZDDBB+t9EDTTtQ2q/Ee1oLShCidRpRU3JmqRwzEe402XSUdRGDaPaw8uBIx0OLqgcuxB+7Xoehay2AOpaUqIWYa5WYthSiksVU1GurAziXdKsIJklsQ5uHqIFIXmbMbOU5Mj3uaBMxAKjAknCMf8kW5MVOzpJR+w+S5xvLR94WiyaVG4I2ZUQsqwPJc9juWE3m3Rvc6d5Zzd4lBPk33XEPp1APnLuYnBhXlNPK1sat4BgQFlHLBLiDW3CQ61vJSPAfE5IA0IhEd53xuM+ek9tmQSS8kzFdfa7oCgqp4MP/BRddTMjDYdkOyCIOLrbxSEShrfHnrq7F0Iwbk+0+vLGwfly9KszQNAMLIVanoQlGswefmy9QT6We5xDa1YwkiJWVQYGdwjWajnuE4XH9W2KPOC+T4fJ52gD5ixg69IJHGEKnhkNUPgyssgixE/Vj+7IWLwIwf5hnd7qX6XmRkeVgE5/bZi34TbZE8RqgHhUo6ftWvoo991CFk1sTogY7G/bpZTvkQVoxUGUBDcWxjIf+avubQGc7pPzV8vnRwwLhrjiLmfYRHUnkuggXOw4HWBHI47XqqPX+mnE1t8U+5u25RHAjQ/bPlUn2DD2cQOydHUdO/kjO3sxzFr9LgBGSEZ/KQHMx1v7qupMNffiVbLx2Blpl9Qeyo74wsq6YHIMoOQKXTrqZIOd0r3dNCFNK4qJYUo98ZFUfNMrqHEScL4AqG7f/QxKw9twvOnNtFpHP7dAcly8SYdeni0cLFyRf7wpxs3mzQrmHDqOOey+VPZisJQfHSNsPIECq0mPtbMQNj1Hid8SkM6oGjLsdzoTPiNYaNvMg6J8lHqc7h+2jSxQ3IXbixNMO6lC+30t9t2+evPHAzIy/RJR/3qfwZk58jscxHDm7FdquW7vwlCYX6NenX2wZqAtHj/tqlxEUDgtEdogwz/XrsZ87L358hFhyfl7az1WMXfXc3mXEWqMkx4UsNQUqc87/9+DO56sJxgrPD+6vm8B2odKf1JHnOhkEPBWmmLqcpaXZ1438v3EEWYoQIHn0dhETcKnv/XUXWbxQwbLvB12cu6E1DzTcrR0eCml6p+B5tem/vk/jqybMbqHFq1Ty/n/+2/OZocKF3DT8JuyKKHZdqBmsL+oraxPP0q6j5/ITO4Sfc66UR3DpLGs5ZP2QoGwwC2Hea3uPqtqAgVQxaZi/o6+zniz8w8Zqcp6jmL2a9XfBmuYRiAFubAp4EZ/NmzM9WGIMK1TCoz5h/1uK3qWdCdUYKTPuMSyEU39J/NTwsXTN4WNXaBsf5whisgkPdNU64RxtDdx23nmhBRsRddeJjtRL8IETMXD2BRsWw0MQaqzzQ0KCMtJVPIMheLFaTgjP9nn4O3bgTfGAcXNEQNbSbLm4g1sj66tvPMTTMBNXvubPU51bUnML59nE66VvNvyB0rM2Im1Se/p2YRxIsO8DHUivQL1oCMddkk6WNBqCR6zY0ZbWMvucrmsm/9bAwTdsLmen0NcgkQfNFRf4I1kgEt+h6eV9etC3UIDeWhrjDVQfP51pq4QfzKpcLHWoLDLHen79MO6io611h0AOSr2BGvYkBVyBfnQNqo82UYx1mBvMnqHTCcL4YFFhiy39/97TcDFg5brHYxGQ/aC5SBhOP9oUQ2N8tIk1SZiknIhUHrUGd2pnPOzMfTYzmCz7nPXITZbwuYtDFLZbilV9lRr/iG25UjAz58Y5ACzqRrN7UMgSgfIKtvh1B08Ki7ZSuG2xpW0bQUtltzQgTmdLY8j9Wgl6niMbc8AtTqO4ES0yU1tzY4NHc/hiLJaZaW2mtJnk0d3J6e9UkmgJ5YZ/sUwf0hdli6e6hgpIflfEOHHPiMfuxkZBgTxueCX418Bs2DBDLjScxdDXvnshG2HYy08U+KIEtGz6ic9kET95/pxK3ExxhFdAFKiJ7WXbT6ejArLYthxndKTkC1A+A5fEvN7hYSKJkk0YBJCIcoxmw60VFogXAfYrjj7T6wjuwYH7l5WeTxBOnfdilnacGsP8PzlgnLrs12n+yiP0bQxeEpWzOjv0qoAY3dmh1FqRKWThl9owCVRCiJTnCQ7OYXCwtZKygMlWGztbk14dibmNdOvxeqmT7bK6MR+H81+azlI155CXGcewOA8bVU1b1SCQSdmcoGq6ew6jJy5rmnfvRzFVtJ8bVtbg/xE7mW4K6Z/5fVb6EPSgdQooThPLfjgKEGxFbhQZm0rPWkw6DppiLbTlIp13fiW/GenTpfdMvfuFV1ndLgL81aKViCcR8eLNwrKo/Qh7HUMfbFnYhOc4UVRZyFpqEQNVGVwQVF5OeJ2CRTBsnqHll6vCUZtvThtM1k6ldbsMoFaeZ2oOs14AfO5xtQFgNmcgDaXozv3ByzgvJeGzh20Za6Lurj7fc8NYzMPc1pDdqNtCD+fnzK/Qlt5MGyXRagcf37Hki8nKtc5T8W/qQ3bTlgVKa2kvdVK" rebuild "" SilkShader_Contrast {{parent.parent.Controller.Contrast}} SilkShader_Gamma {{parent.parent.Controller.Gamma} {parent.parent.Controller.Gamma} {parent.parent.Controller.Gamma}} SilkShader_Shift {{parent.parent.Controller.Shift} {parent.parent.Controller.Shift} {parent.parent.Controller.Shift}} protectKernelWhenPublishing true rebuild_finalise "" name BlinkScript2 xpos -492 ypos 724 } Output { name Output1 xpos -492 ypos 824 } end_group Clamp { maximum_enable false name Clamp xpos -507 ypos 1317 } Colorspace { colorspace_out Cineon name Colorspace18 xpos -507 ypos 1354 } Colorspace { colorspace_out YCbCr name Colorspace11 xpos -507 ypos 1378 } Sharpen { channels {rgba.red -rgba.green -rgba.blue none} amount 4 name Sharpen1 xpos -507 ypos 1408 } Colorspace { colorspace_in YCbCr name Colorspace12 xpos -507 ypos 1432 } Colorspace { colorspace_in Cineon name Colorspace19 xpos -507 ypos 1458 } Grade { white {{"(1-(sqrt(SampleOffset.translate.x*SampleOffset.translate.x+SampleOffset.translate.y*SampleOffset.translate.y) / sqrt(SampleOffset.samplewidth*SampleOffset.samplewidth+SampleOffset.samplewidth*SampleOffset.samplewidth)*2))*2"}} name SampleFocus xpos -507 ypos 1533 disable {{1-parent.multisample_enable}} } TimeBlur { divisions {{parent.SampleOffset.samplecount*5}} shutter 1 shutteroffset start shuttercustomoffset 0 name MultiSampler xpos -507 ypos 1557 disable {{1-parent.multisample_enable}} } Expression { temp_name0 Add temp_expr0 2.285 temp_name1 Offset temp_expr1 1 expr0 r/(r+Offset)*Add expr1 g/(g+Offset)*Add expr2 b/(b+Offset)*Add expr3 max(r/(r+Offset)*Add,g/(g+Offset)*Add,b/(b+Offset)*Add) name HighlightReduction xpos -507 ypos 1601 } Output { name Output1 xpos -507 ypos 1664 } StickyNote { inputs 0 name StickyNote1 label "This may cause artifacts!!!" xpos -417 ypos 1409 } NoOp { inputs 0 name Controller label "(don't ask!)" selected true xpos -772 ypos 852 addUserKnob {20 User} addUserKnob {7 Contrast} Contrast {{parent.contrast}} addUserKnob {18 Gamma} Gamma {{((parent.Gamma.r-((parent.Gamma.r+parent.Gamma.g+parent.Gamma.b)/3))*1)+(parent.Gamma.a)} {((parent.Gamma.g-((parent.Gamma.r+parent.Gamma.g+parent.Gamma.b)/3))*1)+(parent.Gamma.a)} {((parent.Gamma.b-((parent.Gamma.r+parent.Gamma.g+parent.Gamma.b)/3))*1)+(parent.Gamma.a)}} addUserKnob {6 Gamma_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 Shift} Shift {{parent.Prim_HueRed} {parent.Prim_HueGreen} {parent.Prim_HueBlue}} addUserKnob {6 Shift_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 Streaks} Streaks {{parent.Streaks}} addUserKnob {7 Size} Size {{parent.Algorithm<2?parent.A.size:parent.A.size/2}} addUserKnob {7 Offset} Offset {{parent.Offset>1?pow(parent.Offset,6):parent.Offset}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_h_stickit.gizmo ================================================ Group { name StickIt tile_color 0x2f66ff label "ref frame: \[value RefrenceFrameInput]" note_font Verdana selected true addUserKnob {20 Main l "Main - StickIt"} addUserKnob {26 Headline l "" +STARTLINE T ""} addUserKnob {26 range_devider l "INPUT"} addUserKnob {3 RefrenceFrameInput l "Reference Frame" t "This is the frame that you want to be the origin of your animation. That is, the frame where the input is exactly the same as the output. (This frame must be within the Range defined below!)"} RefrenceFrameInput 126 addUserKnob {22 RefFrameThis l "This Frame" -STARTLINE T "nuke.thisNode()\['RefrenceFrameInput'].setValue(nuke.frame())"} addUserKnob {3 InputFrom l "Range From" t "The first frame of the Analasis and Solve"} InputFrom 53 addUserKnob {3 InputTo l To t "The last frame of the Analasis and Solve" -STARTLINE} InputTo 150 addUserKnob {22 Button_SetToGlobal l "Set To Global" t "This will set the in and out points to the global comp range." -STARTLINE T "nuke.thisNode().knob(\"InputFrom\").setValue(float(nuke.knob(\"first_frame\")))\nnuke.thisNode().knob(\"InputTo\").setValue(float(nuke.knob(\"last_frame\")))"} addUserKnob {26 Devider_Options l "OPTIONS"} addUserKnob {4 Option_Output l Output M {"Source & Overlay" Source Overlay ST-Map}} addUserKnob {4 FilterMethod l "Filter Method" M {Impulse "Cubic " Keys Simon Rifman Mitchell Parzen Notch Lanczos4 Lanczos6 Sinc4}} FilterMethod "Cubic " addUserKnob {6 enableMotionBlur l "Enable Motion Blur" +STARTLINE} addUserKnob {26 DeviderView l "DISPLAY"} addUserKnob {41 previewFeatures l "Preview Features" T si_ct.previewFeatures} addUserKnob {41 displayTracks l "Show Features" T si_ct.displayTracks} addUserKnob {6 DisableWarp l "Disable Warp" +STARTLINE} DisableWarp true addUserKnob {26 devider_solve l "ANALYZE"} addUserKnob {22 RunAnalyse l Analyse T "nuke.toNode(\"si_ct\").knob(\"clearTrack\").execute()\n\nnuke.toNode(\"si_ct\").knob(\"trackFeatures\").execute()\n\n\n\n" +STARTLINE} addUserKnob {26 next l "" -STARTLINE T "-> "} addUserKnob {22 STiCKiT l Solve -STARTLINE T "import NST_stickit\nreload(NST_stickit)\nNST_stickit.StickIT()"} addUserKnob {26 ""} addUserKnob {41 clearTrack l "Clear Tracks" T si_ct.clearTrack} addUserKnob {20 Help n 1} Help 0 addUserKnob {26 Info l "" +STARTLINE T "STiCKiT v2.0\n\n1) Place the footage that you want to match the motion of into the \[Source] input \n\n2) Set the frame range you want to analyse. You can use the \[Set To Global] button to set the range to the active project range.\n\n3a) If you want to overlay another image ontop of the source, but that image into the \[Overlay] input, then set the \[Reference Frame] to the frame that you have made a patch for.\n\n3a.1) Hit Solve, and now the footage should match.\nand hit Analyse.\n \nIf you want to use the \"Keyframe Assist\" features, you don't need to use the solve button, as this only affects the build in warp"} addUserKnob {20 endGroup n -1} addUserKnob {20 TABAssist l "Keyframe Assist"} addUserKnob {26 devider_assist l "ASSIST"} addUserKnob {22 AssistTrackBack l <-- T "import NST_stickit\nreload(NST_stickit)\nNST_stickit.Initializer(2)" +STARTLINE} addUserKnob {22 AssistTrackAll l " \[All Frames] " -STARTLINE T "import NST_stickit\nreload(NST_stickit)\nNST_stickit.Initializer(0)"} addUserKnob {22 AssistTrackForward l --> -STARTLINE T "import NST_stickit\nreload(NST_stickit)\nNST_stickit.Initializer(1)"} addUserKnob {6 assistStep l " " +STARTLINE} addUserKnob {3 AssistStepSize l "Only assist" -STARTLINE} AssistStepSize 5 addUserKnob {26 assistCountText l "" -STARTLINE T frames} addUserKnob {26 devider_rotoassist l "ASSIST SETTINGS"} addUserKnob {4 AssistType l "Assist Method" M {"Local (Using Solve Method)" "Global \[Median]" "Global \[Average]"}} addUserKnob {6 assist_rototransform l "\[Roto] Apply to element transform" t "With the setting enabled, the animation will be applied to the transform handle, rather than each point in the roto element." +STARTLINE} assist_rototransform true addUserKnob {6 RespectKeyframes l "Respect Keyframes" t "Respect exsisting keyframes as \"guides\" for the assist animation." +STARTLINE} addUserKnob {6 appendAnimation l "Append Animation" t "Do you want to keep any exsisting animation?" +STARTLINE} addUserKnob {6 AssistOnlyIntervals l "Keyframe Only Intervals" +STARTLINE} addUserKnob {26 ""} addUserKnob {20 help_assist l Help n 1} help_assist 0 addUserKnob {26 assistInfo l "" +STARTLINE T "1) Select the node you want to assist in the dag\n2) Hit one of the controls below.\n(For Roto, Rotopaint and Splinewarp you must open \nand select the element(s) you want to assist.)\n"} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {20 Advanced} addUserKnob {26 Devider_Tracking l "TRACKING"} addUserKnob {4 SolveMethod l "Solve Method" M {Triangulation Nearest}} addUserKnob {41 numberFeatures l "Number of Features" T si_ct.numberFeatures} addUserKnob {41 featureThreshold l "Detection Threshold" T si_ct.featureThreshold} addUserKnob {41 minTrackLength l "Minimum Length" T si_ct.minTrackLength} addUserKnob {41 matchThreshold l "Track Threshold" T si_ct.matchThreshold} addUserKnob {41 smoothnessThreshold l "Track Smoothness" T si_ct.smoothnessThreshold} addUserKnob {41 consistencyThreshold l "Track Consistency" T si_ct.consistencyThreshold} addUserKnob {41 featureSeparation l "Feature Separation" T si_ct.featureSeparation} addUserKnob {26 devider_debug l "OTHER OPTIONS"} addUserKnob {6 displayMotion l "Output Motion Vectors" +STARTLINE} displayMotion true addUserKnob {6 displayDiffrence l "Output ST Map" +STARTLINE} displayDiffrence true addUserKnob {6 disableprecrop l "Disable PreCrop" +STARTLINE} disableprecrop true addUserKnob {26 info l "" +STARTLINE T "Use Diable PreCrop if your overlay footage is being cropped off. \nHowever enable it again if you want to copy / paste the node or \notherwise unplug the overlay input. Due to a bug in nuke all \nkeyframes will be removed if this is not turned on."} } Input { inputs 0 name InputOverlay tile_color 0xff xpos 776 ypos -15 number 1 } Crop { box {0 0 {InputSource.width} {InputSource.height}} reformat true crop false name si_prec tile_color 0xff xpos 776 ypos 20 disable {{parent.disableprecrop}} } AdjBBox { numpixels 250 name AdjBBox1 xpos 775 ypos 44 disable true } Dot { name Dot2 tile_color 0xff xpos 810 ypos 106 } set N725dde10 [stack 0] Dot { name Dot3 tile_color 0xff xpos 937 ypos 106 } add_layer {si_mo si_mo.red si_mo.green} Expression { channel0 {si_mo.red -si_mo.green} expr0 x channel1 {-si_mo.red si_mo.green} expr1 y expr2 0 name si_stgen tile_color 0xff xpos 903 ypos 137 } set N725e5570 [stack 0] Dot { name Dot4 tile_color 0xff xpos 937 ypos 498 } push $N725e5570 push $N725dde10 ShuffleCopy { inputs 2 in si_mo alpha alpha2 black red white green red2 red green2 green out2 motion name si_sh tile_color 0xff xpos 776 ypos 137 } SplineWarp3 { crop_to_format false boundary_bbox false colorOverlay {0 0 0 0} view {} curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097664} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Stroke1 262656 bezier {cc {f 8224} {p {0 0 1} {x438b1e98 x43a6af3c 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke2 262656 bezier {cc {f 8224} {p {0 0 1} {x438b1e98 x43a6af3c 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc309a46b 0 1 x40816ac8 1} {x42580000 xc30548c6 x409f8850 1 x409f8850 1} {x425c0000 xc2ff57cc x40c5fe60 1 x40c5fe60 1} {x42600000 xc2f1d1c0 x40e049d0 1 x40e049d0 1} {x42640000 xc2e34e92 x40e3c9c8 1 x40e3c9c8 1} {x42680000 xc2d55887 x40e07b00 1 x40e07b00 1} {x426c0000 xc2c73f32 x40e1dbe0 1 x40e1dbe0 1} {x42700000 xc2b91d0b x40e4fe48 1 x40e4fe48 1} {x42740000 xc2aa9f69 x40ecd6c8 1 x40ecd6c8 1} {x42780000 xc29b8232 x40ef0808 1 x40ef0808 1} {x427c0000 xc28cbe68 x40f95f24 1 x40f95f24 1} {x42800000 xc278ac9b x4103efd6 1 x4103efd6 1} {x42820000 xc25784e5 x40fac290 1 x40fac290 1} {x42840000 xc239fbf7 x40ebba4c 1 x40ebba4c 1} {x42860000 xc21c9652 x40ab6598 1 x40ab6598 1} {x42880000 xc20f2291 x40b208b6 1 x40b208b6 1} {x428a0000 xc1e02849 x4098cc92 1 x4098cc92 1} {x428c0000 xc1d1ded9 x40392434 1 x40392434 1} {x428e0000 xc1b1df3c x40869192 1 x40869192 1} {x42900000 xc18e9610 x4034be3c 1 x4034be3c 1} {x42920000 xc184afad x3f12e0e0 1 x3f12e0e0 1} {x42940000 xc1832800 x3e99c1b0 1 x3e99c1b0 1} {x42960000 xc17fc33f x3ed67680 1 x3ed67680 1} {x42980000 xc178e898 x3f2987e0 1 x3f2987e0 1} {x429a0000 xc16a9243 x3f0ecff8 1 x3f0ecff8 1} {x429c0000 xc1670e99 -} {x429e0000 xc167ada8 xbd0f3a00 1 xbd0f3a00 1} {x42a00000 xc1682d0d -} {x42a20000 xc1668782 x3e97c300 1 x3e97c300 1} {x42a40000 xc15eb0dd x3fbc1f78 1 x3fbc1f78 1} {x42a60000 xc12fa3a3 -} {x42a80000 xc13095e2 xbe35af40 1 xbe35af40 1} {x42aa0000 xc13f2b3e xbf7f97e0 1 xbf7f97e0 1} {x42ac0000 xc15088de xbfa64104 1 xbfa64104 1} {x42ae0000 xc168bb7f xbff9a5e8 1 xbff9a5e8 1} {x42b00000 xc187792c xc023ccee 1 xc023ccee 1} {x42b20000 xc19d50fb xc02efed4 1 xc02efed4 1} {x42b40000 xc1b338e1 xc02a765c 1 xc02a765c 1} {x42b60000 xc1c7ee92 xc02003fc 1 xc02003fc 1} {x42b80000 xc1db39e0 xc01d8190 1 xc01d8190 1} {x42ba0000 xc1ef4ef6 xc0227ff0 1 xc0227ff0 1} {x42bc0000 xc201ecee xc025bdb0 1 xc025bdb0 1} {x42be0000 xc20c5f31 xc02838f8 1 xc02838f8 1} {x42c00000 xc216f40d xc02e1820 1 xc02e1820 1} {x42c20000 xc2222235 -} {x42c40000 xc2221147 x3d4b2800 1 x3d4b2800 1} {x42c60000 xc220a4b7 x3ed81880 1 x3ed81880 1} {x42c80000 xc21eb0e5 x3f189640 1 x3f189640 1} {x42ca0000 xc21be005 x3f59cb20 1 x3f59cb20 1} {x42cc0000 xc217e28c x3fd264a0 1 x3fd264a0 1} {x42ce0000 xc20eb9bb x3fd36950 1 x3fd36950 1} {x42d00000 xc20aabf7 -} {x42d20000 xc20b6547 xbdf1ee00 1 xbdf1ee00 1} {x42d40000 xc20b9de5 xbdfe7f00 1 xbdfe7f00 1} {x42d60000 xc20c63c6 xbe85a680 1 xbe85a680 1} {x42d80000 xc20db47f xbe9f86c0 1 xbe9f86c0 1} {x42da0000 xc20ee1e1 xbe3d4e00 1 xbe3d4e00 1} {x42dc0000 xc20f2f1b -} {x42de0000 xc20edaae x3e074a80 1 x3e074a80 1} {x42e00000 xc20e2086 x3e8cee00 1 x3e8cee00 1} {x42e20000 xc20ca6f6 x3f0c5960 1 x3f0c5960 1} {x42e40000 xc209bdbb x3f44d720 1 x3f44d720 1} {x42e60000 xc206803d x3f6d3240 1 x3f6d3240 1} {x42e80000 xc2025429 x3f960768 1 x3f960768 1} {x42ea0000 xc1fa3f8d x3fc854a0 1 x3fc854a0 1} {x42ec0000 xc1eb9dbe x40066408 1 x40066408 1} {x42ee0000 xc1d8a68b x402bb5ec 1 x402bb5ec 1} {x42f00000 xc1c0b043 x404b38cc 1 x404b38cc 1} {x42f20000 xc1a5d858 x4065d654 1 x4065d654 1} {x42f40000 xc1873aae x407e9e7c 1 x407e9e7c 1} {x42f60000 xc14c6172 x4085a170 1 x4085a170 1} {x42f80000 xc108d3ec x40871c77 1 x40871c77 1} {x42fa0000 xc08a89f6 x4088d3ec 1 x4088d3ec 1} {x42fc0000 0 x408da649 1 x408da649 1} {x42fe0000 x4090c29c x40924a47 1 x40924a47 1} {x43000000 x41124a47 x4092bf3c 1 x4092bf3c 1} {x43010000 x415b208a x408d243b 1 x408d243b 1} {x43020000 x418fb741 x4087cbc6 1 x4087cbc6 1} {x43030000 x41b17628 x4081fb2a 1 x4081fb2a 1} {x43040000 x41d0b4d6 x406ab448 1 x406ab448 1} {x43050000 x41ec233a x4061b790 1 x4061b790 1} {x43060000 x4204915d x407f85f0 1 x407f85f0 1} {x43070000 x4216025b x404b5560 1 x404b5560 1} {x43080000 x421dfc09 x3fee4880 1 x3fee4880 1} {x43090000 x4224e6e3 x3fdf00c0 1 x3fdf00c0 1} {x430a0000 x422bec15 x3fdf2b80 1 x3fdf2b80 1} {x430b0000 x4232d99b x3fd9a880 1 x3fd9a880 1} {x430c0000 x4239869d x3fd219d0 1 x3fd219d0 1} {x430d0000 x423ffb38 x3fda4c00 1 x3fda4c00 1} {x430e0000 x42472b5d x3ffa31c0 1 x3ffa31c0 1} {x430f0000 x424f9e54 x400d4fd8 1 x400d4fd8 1} {x43100000 x4258d558 x40165ad8 1 x40165ad8 1} {x43110000 x426269af x401a1750 1 x401a1750 1} {x43120000 x426c1842 x4014f340 1 x4014f340 1} {x43130000 x42750817 x3ffaef40 1 x3ffaef40 1} {x43140000 x427bc736 x3f97bae0 1 x3f97bae0 1} {x43150000 x427e83c5 -} {x43160000 x427d41f5 xbef15c00 1 0 1}} {{x42540000 x447e1997 0 1 xc155e6a0 1} {x42580000 x447aa42d xc16c4240 1 xc16c4240 1} {x425c0000 x4476b785 xc1819af0 1 xc1819af0 1} {x42600000 x44728a7e xc184a8f0 1 xc184a8f0 1} {x42640000 x446e6cf6 xc1836dc0 1 xc1836dc0 1} {x42680000 x446a53a2 xc1854a90 1 xc1854a90 1} {x426c0000 x4466184d xc18bc880 1 xc18bc880 1} {x42700000 x4461971a xc198e240 1 xc198e240 1} {x42740000 x445c8a29 xc1a9db50 1 xc1a9db50 1} {x42780000 x4456f965 xc1bb0a50 1 xc1bb0a50 1} {x427c0000 x4450d984 xc1cc7d90 1 xc1cc7d90 1} {x42800000 x444a318c xc1d9e4d0 1 xc1d9e4d0 1} {x42820000 x44433b37 xc1ddc740 1 xc1ddc740 1} {x42840000 x443c5518 xc1de7670 1 xc1de7670 1} {x42860000 x443553d0 xc1d133f0 1 xc1d133f0 1} {x42880000 x442f41d9 xc1d28b10 1 xc1d28b10 1} {x428a0000 x44282b1f xc1cacbd0 1 xc1cacbd0 1} {x428c0000 x4422951c xc1afea20 1 xc1afea20 1} {x428e0000 x441d2c7d xc1b21e70 1 xc1b21e70 1} {x42900000 x44177335 xc1b8fa00 1 xc1b8fa00 1} {x42920000 x44119cdd xc1b97f20 1 xc1b97f20 1} {x42940000 x440bdb43 xc1b792d0 1 xc1b792d0 1} {x42960000 x440623b0 xc1b5eaa0 1 xc1b5eaa0 1} {x42980000 x44007c99 xc1afbab0 1 xc1afbab0 1} {x429a0000 x43f6500a xc1a70750 1 xc1a70750 1} {x429c0000 x43ec1848 xc1a42798 1 xc1a42798 1} {x429e0000 x43e1cb17 xc1a38608 1 xc1a38608 1} {x42a00000 x43d7a787 xc1a13ac8 1 xc1a13ac8 1} {x42a20000 x43cda3be xc1a10d90 1 xc1a10d90 1} {x42a40000 x43c385d5 xc19fdc20 1 xc19fdc20 1} {x42a60000 x43b9a83a xc19b1d40 1 xc19b1d40 1} {x42a80000 x43b0222d xc198a908 1 xc198a908 1} {x42aa0000 x43a69319 xc1998758 1 xc1998758 1} {x42ac0000 x439cf142 xc19ab888 1 xc19ab888 1} {x42ae0000 x43933c08 xc1980ae8 1 xc1980ae8 1} {x42b00000 x4389efe5 xc194d1d0 1 xc194d1d0 1} {x42b20000 x4380a1ce xc1948c64 1 xc1948c64 1} {x42b40000 x436ebcb1 xc194ffe4 1 xc194ffe4 1} {x42b60000 x435c03a3 xc1975d24 1 xc1975d24 1} {x42b80000 x4348e568 xc19620ac 1 xc19620ac 1} {x42ba0000 x43367b78 xc19069a4 1 xc19069a4 1} {x42bc0000 x4324caff xc188249c 1 xc188249c 1} {x42be0000 x43147251 xc1799d90 1 xc1799d90 1} {x42c00000 x4305974d xc1621d98 1 xc1621d98 1} {x42c20000 x42f05d3c xc14e29a4 1 xc14e29a4 1} {x42c40000 x42d7a431 xc147744c 1 xc147744c 1} {x42c60000 x42be8029 xc145db08 1 xc145db08 1} {x42c80000 x42a62d6f xc1426898 1 xc1426898 1} {x42ca0000 x428de603 xc1449b80 1 xc1449b80 1} {x42cc0000 x426a0d1e xc12bb762 1 xc12bb762 1} {x42ce0000 x4245f055 xc10d73e8 1 xc10d73e8 1} {x42d00000 x4223532a xc10daa75 1 xc10daa75 1} {x42d20000 x41fe3635 xc10be8c5 1 xc10be8c5 1} {x42d40000 x41babd8f xc0ffcad0 1 xc0ffcad0 1} {x42d60000 x417ca19a xc0e1a4e6 1 xc0e1a4e6 1} {x42d80000 x4113d638 xc0cb5cbe 1 xc0cb5cbe 1} {x42da0000 x40451370 xc0c3926b 1 xc0c3926b 1} {x42dc0000 xc03ef0cb xc0b22fde 1 xc0b22fde 1} {x42de0000 xc100eb02 xc08cef35 1 xc08cef35 1} {x42e00000 xc13cab68 xc0462646 1 xc0462646 1} {x42e20000 xc163fe25 xbffcde3c 1 xbffcde3c 1} {x42e40000 xc17be2f7 xbf6df468 1 xbf6df468 1} {x42e60000 xc180de59 -} {x42e80000 xc176a8e9 x3f86c1a8 1 x3f86c1a8 1} {x42ea0000 xc1600c48 x3f9b7c88 1 x3f9b7c88 1} {x42ec0000 xc14fc9c7 x3f8bae98 1 x3f8bae98 1} {x42ee0000 xc13d20a2 x3f8d1a98 1 x3f8d1a98 1} {x42f00000 xc12c8321 x3f895be0 1 x3f895be0 1} {x42f20000 xc11ac9aa x3f963c14 1 x3f963c14 1} {x42f40000 xc106f41c x3fac5a64 1 x3fac5a64 1} {x42f60000 xc0df6622 x3fd4899a 1 x3fd4899a 1} {x42f80000 xc0a3a36b x4008102c 1 x4008102c 1} {x42fa0000 xc02eabeb x4023a36b 1 x4023a36b 1} {x42fc0000 0 x4032fb4e 1 x4032fb4e 1} {x42fe0000 x40374ab1 x40330217 1 x40330217 1} {x43000000 x40b30217 x402f7006 1 x402f7006 1} {x43010000 x41058aaf x40385f0d 1 x40385f0d 1} {x43020000 x4135b092 x4046325c 1 x4046325c 1} {x43030000 x4168a3dd x40551c90 1 x40551c90 1} {x43040000 x41901f6d x40639352 1 x40639352 1} {x43050000 x41ad36c3 x407732a8 1 x407732a8 1} {x43060000 x41cdec17 x40a1c9e2 1 x40a1c9e2 1} {x43070000 x41fe1bb4 x40b5b5aa 1 x40b5b5aa 1} {x43080000 x42146376 x40a9fd2c 1 x40a9fd2c 1} {x43090000 x42298d25 x40a8f344 1 x40a8f344 1} {x430a0000 x423ea047 x40a84268 1 x40a84268 1} {x430b0000 x42539dbf x40a6fc64 1 x40a6fc64 1} {x430c0000 x42685f60 x40ac5abc 1 x40ac5abc 1} {x430d0000 x427eb46e x40b5ff20 1 x40b5ff20 1} {x430e0000 x428aef94 x40b80600 1 x40b80600 1} {x430f0000 x42965af7 x40b4c010 1 x40b4c010 1} {x43100000 x42a18796 x40b07d60 1 x40b07d60 1} {x43110000 x42ac6aa3 x40ab6bf0 1 x40ab6bf0 1} {x43120000 x42b6f514 x40a46ea8 1 x40a46ea8 1} {x43130000 x42c0f878 x40998698 1 x40998698 1} {x43140000 x42ca25e7 x40890890 1 x40890890 1} {x43150000 x42d2198a x40454150 1 x40454150 1} {x43160000 x42d679fc x3fdee970 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke3 262656 bezier {cc {f 8224} {p {0 0 1} {x43be07cf x43cd7a3e 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke4 262656 bezier {cc {f 8224} {p {0 0 1} {x43be07cf x43cd7a3e 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc374b9be 0 1 x40815af0 1} {x42580000 xc3705eda x409f5fa0 1 x409f5fa0 1} {x425c0000 xc36ac3c4 x40c5f310 1 x40c5f310 1} {x42600000 xc363ffa9 x40e06c80 1 x40e06c80 1} {x42640000 xc35cbcfc x40e3e990 1 x40e3e990 1} {x42680000 xc355c110 x40e09fa0 1 x40e09fa0 1} {x426c0000 xc34eb302 x40e20920 1 x40e20920 1} {x42700000 xc347a07e x40e52e30 1 x40e52e30 1} {x42740000 xc340601f x40eca0d0 1 x40eca0d0 1} {x42780000 xc338d671 x40eeaea0 1 x40eeaea0 1} {x427c0000 xc3317535 x40f92cf0 1 x40f92cf0 1} {x42800000 xc32943a2 x4103e810 1 x4103e810 1} {x42820000 xc320f833 x40fadfe0 1 x40fadfe0 1} {x42840000 xc31995a4 x40ec3340 1 x40ec3340 1} {x42860000 xc31234ff x40bf4f90 1 x40bf4f90 1} {x42880000 xc30da0ab x40c5c230 1 x40c5c230 1} {x428a0000 xc305d8dc x40a68360 1 x40a68360 1} {x428c0000 xc3033875 x40490f60 1 x40490f60 1} {x428e0000 xc2ff20c2 x40765f10 1 x40765f10 1} {x42900000 xc2f70af9 x40831b98 1 x40831b98 1} {x42920000 xc2eebd4f x403bf4b0 1 x403bf4b0 1} {x42940000 xc2eb4bae x3fdff5e0 1 x3fdff5e0 1} {x42960000 xc2e7bda0 x3ff513e0 1 x3ff513e0 1} {x42980000 xc2e3a30f x4009f800 1 x4009f800 1} {x429a0000 xc2df1e20 x40189610 1 x40189610 1} {x429c0000 xc2da19ae x400aac50 1 x400aac50 1} {x429e0000 xc2d6735b x3fe02380 1 x3fe02380 1} {x42a00000 xc2d31892 x4003a190 1 x4003a190 1} {x42a20000 xc2ce3942 x4015aed0 1 x4015aed0 1} {x42a40000 xc2c9bda5 x4029e4d0 1 x4029e4d0 1} {x42a60000 xc2c39af5 x402c5810 1 x402c5810 1} {x42a80000 xc2bef824 x401278b0 1 x401278b0 1} {x42aa0000 xc2ba736a x400afd00 1 x400afd00 1} {x42ac0000 xc2b64854 x3fcdbce0 1 x3fcdbce0 1} {x42ae0000 xc2b40583 x3f464dc0 1 x3f464dc0 1} {x42b00000 xc2b32f1d -} {x42b20000 xc2b3d964 xbed46580 1 xbed46580 1} {x42b40000 xc2b4d7e8 xbed8cc80 1 xbed8cc80 1} {x42b60000 xc2b58afd -} {x42b80000 xc2b57bb6 -} {x42ba0000 xc2b69aec xbf0e3780 1 xbf0e3780 1} {x42bc0000 xc2b7b494 xbef48580 1 xbef48580 1} {x42be0000 xc2b883f7 xbec89080 1 xbec89080 1} {x42c00000 xc2b945b5 xbef92a00 1 xbef92a00 1} {x42c20000 xc2ba764b -} {x42c40000 xc2b58aad x4028a730 1 x4028a730 1} {x42c60000 xc2afebd8 x4032cc30 1 x4032cc30 1} {x42c80000 xc2aa5dea x4039fee0 1 x4039fee0 1} {x42ca0000 xc2a44bea x403f3c10 1 x403f3c10 1} {x42cc0000 xc29e6a29 x404064a0 1 x404064a0 1} {x42ce0000 xc29845a0 x402f58a0 1 x402f58a0 1} {x42d00000 xc293749f x401ae2a0 1 x401ae2a0 1} {x42d20000 xc28e9776 x40150190 1 x40150190 1} {x42d40000 xc28a2486 x40010a00 1 x40010a00 1} {x42d60000 xc28686d6 x3fcc4fa0 1 x3fcc4fa0 1} {x42d80000 xc283c209 x3fc0a000 1 x3fc0a000 1} {x42da0000 xc28081d6 x3fd7ae90 1 x3fd7ae90 1} {x42dc0000 xc27a0929 x3fe7d830 1 x3fe7d830 1} {x42de0000 xc2728629 x3fe08130 1 x3fe08130 1} {x42e00000 xc26c0116 x3febce50 1 x3febce50 1} {x42e20000 xc263c944 x4005bb20 1 x4005bb20 1} {x42e40000 xc25b49b2 x400ffcf0 1 x400ffcf0 1} {x42e60000 xc251c9a6 x40209d10 1 x40209d10 1} {x42e80000 xc2473610 x40257ac8 1 x40257ac8 1} {x42ea0000 xc23d1a4d x4039e268 1 x4039e268 1} {x42ec0000 xc22ff9c3 x40673868 1 x40673868 1} {x42ee0000 xc2203340 x408cc980 1 x408cc980 1} {x42f00000 xc20cc763 x40a14d94 1 x40a14d94 1} {x42f20000 xc1efbfb6 x40b14df6 1 x40b14df6 1} {x42f40000 xc1c0e7cb x40bc60ac 1 x40bc60ac 1} {x42f60000 xc1918f60 x40bfc6bc 1 x40bfc6bc 1} {x42f80000 xc14208da x40c23c31 1 x40c23c31 1} {x42fa0000 xc0c1c51e x40c208da 1 x40c208da 1} {x42fc0000 0 x40c67dc6 1 x40c67dc6 1} {x42fe0000 x40cb366e x40ce7794 1 x40ce7794 1} {x43000000 x414e7794 x40cd9c2f 1 x40cd9c2f 1} {x43010000 x41999bb3 x40c34e3c 1 x40c34e3c 1} {x43020000 x41c8e2e8 x40b8558a 1 x40b8558a 1} {x43030000 x41f5c678 x40b0ebe4 1 x40b0ebe4 1} {x43040000 x4210ac6d x40a24fa4 1 x40a24fa4 1} {x43050000 x42237725 x408ac8c4 1 x408ac8c4 1} {x43060000 x42335e9e x4075e260 1 x4075e260 1} {x43070000 x42423371 x405c01d0 1 x405c01d0 1} {x43080000 x424eded8 x403e69a0 1 x403e69a0 1} {x43090000 x425a00a5 x402c8c68 1 x402c8c68 1} {x430a0000 x42647065 x401bf6e0 1 x401bf6e0 1} {x430b0000 x426d7f81 x40121640 1 x40121640 1} {x430c0000 x4276b32d x40103dd8 1 x40103dd8 1} {x430d0000 x427f873c x400649d8 1 x400649d8 1} {x430e0000 x4283be34 x400f6ee0 1 x400f6ee0 1} {x430f0000 x4288ba8c x40248dc0 1 x40248dc0 1} {x43100000 x428e0710 x402a8510 1 x402a8510 1} {x43110000 x429362dd x402f4430 1 x402f4430 1} {x43120000 x4298fb53 x402dfb00 1 x402dfb00 1} {x43130000 x429e428d x4012dc40 1 x4012dc40 1} {x43140000 x42a22917 x3fb5cfa0 1 x3fb5cfa0 1} {x43150000 x42a3f10a x3f0ce940 1 x3f0ce940 1} {x43160000 x42a45cbc x3d250e00 1 0 1}} {{x42540000 x448512da 0 1 xc155e800 1} {x42580000 x44835825 xc16c3f80 1 xc16c3f80 1} {x425c0000 x448161dc xc1819680 1 xc1819680 1} {x42600000 x447e96e2 xc184a6a0 1 xc184a6a0 1} {x42640000 x447a794e xc18368e0 1 xc18368e0 1} {x42680000 x44766054 xc1854150 1 xc1854150 1} {x426c0000 x44722539 xc18bc400 1 xc18bc400 1} {x42700000 x446da414 xc198dfc0 1 xc198dfc0 1} {x42740000 x4468973d xc1a9dbc0 1 xc1a9dbc0 1} {x42780000 x44630658 xc1bb0fa0 1 xc1bb0fa0 1} {x427c0000 x445ce643 xc1cc8620 1 xc1cc8620 1} {x42800000 x44563df6 xc1d9e800 1 xc1d9e800 1} {x42820000 x444f47c3 xc1d95500 1 xc1d95500 1} {x42840000 x4448a8a6 xc1d58500 1 xc1d58500 1} {x42860000 x4441ef73 xc1d2aea0 1 xc1d2aea0 1} {x42880000 x443b7dbc xc1d8a3f0 1 xc1d8a3f0 1} {x428a0000 x44346534 xc1ce7a60 1 xc1ce7a60 1} {x428c0000 x442e9616 xc1b08550 1 xc1b08550 1} {x428e0000 x44295cdf xc1ac47d0 1 xc1ac47d0 1} {x42900000 x4423d199 xc1b6f070 1 xc1b6f070 1} {x42920000 x441dedd8 xc1c2bce0 1 xc1c2bce0 1} {x42940000 x4417a5cb xc1c8ac60 1 xc1c8ac60 1} {x42960000 x44116312 xc1c6f2a0 1 xc1c6f2a0 1} {x42980000 x440b36a1 xc1b8a8e0 1 xc1b8a8e0 1} {x429a0000 x4405d884 xc1b171b0 1 xc1b171b0 1} {x429c0000 x44001f86 xc1b36e50 1 xc1b36e50 1} {x429e0000 x43f5433e xc1aeefa8 1 xc1aeefa8 1} {x42a00000 x43ea6117 xc1aed2f0 1 xc1aed2f0 1} {x42a20000 x43df68e0 xc1b042e8 1 xc1b042e8 1} {x42a40000 x43d458ba xc1b152f8 1 xc1b152f8 1} {x42a60000 x43c93e81 xc1b09cb8 1 xc1b09cb8 1} {x42a80000 x43be4523 xc1af9068 1 xc1af9068 1} {x42aa0000 x43b34c74 xc1af7a18 1 xc1af7a18 1} {x42ac0000 x43a855e0 xc1aba168 1 xc1aba168 1} {x42ae0000 x439dd847 xc1a6c250 1 xc1a6c250 1} {x42b00000 x43937d96 xc1a4eee8 1 xc1a4eee8 1} {x42b20000 x43893a6a xc1a56d50 1 xc1a56d50 1} {x42b40000 x437d9fd8 xc1a6fee8 1 xc1a6fee8 1} {x42b60000 x4368b51a xc1a8a488 1 xc1a8a488 1} {x42b80000 x435376b6 xc1a51e1c 1 xc1a51e1c 1} {x42ba0000 x433f6d93 xc19c95c0 1 xc19c95c0 1} {x42bc0000 x432c5146 xc193e794 1 xc193e794 1} {x42be0000 x431a73ae xc1891610 1 xc1891610 1} {x42c00000 x430a0bc2 xc17b7d6c 1 xc17b7d6c 1} {x42c20000 x42f60801 xc166b0a4 1 xc166b0a4 1} {x42c40000 x42da6b5b xc15a159c 1 xc15a159c 1} {x42c60000 x42bf829a xc1587150 1 xc1587150 1} {x42c80000 x42a44f07 xc15951e0 1 xc15951e0 1} {x42ca0000 x42892e22 xc15628c2 1 xc15628c2 1} {x42cc0000 x425d89ad xc150df04 1 xc150df04 1} {x42ce0000 x4229ecc2 xc14572fc 1 xc14572fc 1} {x42d00000 x41f5a05e xc1381c85 1 xc1381c85 1} {x42d20000 x419bbcff xc12b13f2 1 xc12b13f2 1} {x42d40000 x411518d9 xc117e545 1 xc117e545 1} {x42d60000 x3ef5ee64 xc101df43 1 xc101df43 1} {x42d80000 xc0dd4b59 xc0e471cf 1 xc0e471cf 1} {x42da0000 xc15cc25c xc0d01876 1 xc0d01876 1} {x42dc0000 xc19f5f11 xc0b73d90 1 xc0b73d90 1} {x42de0000 xc1c9fff6 xc08d8c42 1 xc08d8c42 1} {x42e00000 xc1e62532 xc02f0c28 1 xc02f0c28 1} {x42e20000 xc1f5c300 xbfa2d0d8 1 xbfa2d0d8 1} {x42e40000 xc1fa7f4d -} {x42e60000 xc1f7bae0 x3f6505a0 1 x3f6505a0 1} {x42e80000 xc1ec2ef3 x4000bf2c 1 x4000bf2c 1} {x42ea0000 xc1d78b15 x401eb204 1 x401eb204 1} {x42ec0000 xc1c48272 x4017af8c 1 x4017af8c 1} {x42ee0000 xc1b19f32 x40213cd4 1 x40213cd4 1} {x42f00000 xc19c333d x402416a0 1 x402416a0 1} {x42f20000 xc188998a x401e48f2 1 x401e48f2 1} {x42f40000 xc1694201 x402ed382 1 x402ed382 1} {x42f60000 xc139c953 x4043da50 1 x4043da50 1} {x42f80000 xc10754d9 x40636ec8 1 x40636ec8 1} {x42fa0000 xc09023de x408754d9 1 x408754d9 1} {x42fc0000 0 x40979b3e 1 x40979b3e 1} {x42fe0000 x409f129d x4099396f 1 x4099396f 1} {x43000000 x4119396f x409983f8 1 x409983f8 1} {x43010000 x41690d46 x40a2541b 1 x40a2541b 1} {x43020000 x419dc6c5 x40aa80a2 1 x40aa80a2 1} {x43030000 x41c9c6f4 x40b49f1e 1 x40b49f1e 1} {x43040000 x41f81654 x40bb2008 1 x40bb2008 1} {x43050000 x4213ab7c x40c2ae08 1 x40c2ae08 1} {x43060000 x422cb6ac x40d0fb6c 1 x40d0fb6c 1} {x43070000 x4247ea57 x40e16f94 1 x40e16f94 1} {x43080000 x42651291 x40ee84b4 1 x40ee84b4 1} {x43090000 x4281c5c2 x40f25c5c 1 x40f25c5c 1} {x430a0000 x4290d4d4 x40f000f0 1 x40f000f0 1} {x430b0000 x429fc5e0 x40edd3e8 1 x40edd3e8 1} {x430c0000 x42ae8f51 x40ef7150 1 x40ef7150 1} {x430d0000 x42bdb40a x40fe1810 1 x40fe1810 1} {x430e0000 x42ce5253 x41025a00 1 x41025a00 1} {x430f0000 x42de4a8a x40faf190 1 x40faf190 1} {x43100000 x42edb085 x40f599c0 1 x40f599c0 1} {x43110000 x42fcfdc2 x40f10b28 1 x40f10b28 1} {x43120000 x4305e8f5 x40e19840 1 x40e19840 1} {x43130000 x430c9865 x40d10b80 1 x40d10b80 1} {x43140000 x4312f9ad x40c74950 1 x40c74950 1} {x43150000 x43190cfa x40994bc0 1 x40994bc0 1} {x43160000 x431c8e69 x40373de0 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke5 262656 bezier {cc {f 8224} {p {0 0 1} {x43f15df4 x4404c189 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke6 262656 bezier {cc {f 8224} {p {0 0 1} {x43f15df4 x4404c189 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc396b691 0 1 x40817e10 1} {x42580000 xc39488a2 x409f7720 1 x409f7720 1} {x425c0000 xc391bad8 x40c62460 1 x40c62460 1} {x42600000 xc38e577f x40e0c3a0 1 x40e0c3a0 1} {x42640000 xc38ab4bb x40e44280 1 x40e44280 1} {x42680000 xc387356b x40e0fcc0 1 x40e0fcc0 1} {x426c0000 xc383acd5 x40e27000 1 x40e27000 1} {x42700000 xc38021eb x40e59770 1 x40e59770 1} {x42740000 xc3790033 x40f6b6e0 1 x40f6b6e0 1} {x42780000 xc370d868 x410172b0 1 x410172b0 1} {x427c0000 xc368d1dd x41059208 1 x41059208 1} {x42800000 xc3602627 x4109d488 1 x4109d488 1} {x42820000 xc357974c x41025b28 1 x41025b28 1} {x42840000 xc34fdac2 x40f47f70 1 x40f47f70 1} {x42860000 xc3484f55 x40c871d0 1 x40c871d0 1} {x42880000 xc34353a5 x40ca53c0 1 x40ca53c0 1} {x428a0000 xc33baa19 x40b61460 1 x40b61460 1} {x428c0000 xc337f25f x406e6d20 1 x406e6d20 1} {x428e0000 xc33436b0 x407b71a0 1 x407b71a0 1} {x42900000 xc33016d2 x4083e8e0 1 x4083e8e0 1} {x42920000 xc32bf822 x401eb8e0 1 x401eb8e0 1} {x42940000 xc32b210b x3f5b7f00 1 x3f5b7f00 1} {x42960000 xc32a4124 x3f853540 1 x3f853540 1} {x42980000 xc3290c36 x3fda47c0 1 x3fda47c0 1} {x429a0000 xc326d805 x40175460 1 x40175460 1} {x429c0000 xc3245193 x400e15a0 1 x400e15a0 1} {x429e0000 xc3226758 x3ff6eac0 1 x3ff6eac0 1} {x42a00000 xc32075e8 x40156020 1 x40156020 1} {x42a20000 xc31dbc57 x402e0440 1 x402e0440 1} {x42a40000 xc31b05c6 x402e7060 1 x402e7060 1} {x42a60000 xc31848d4 x403df800 1 x403df800 1} {x42a80000 xc3151606 x404c1780 1 x404c1780 1} {x42aa0000 xc311e818 x403c15a0 1 x403c15a0 1} {x42ac0000 xc30f3559 x4019ada0 1 x4019ada0 1} {x42ae0000 xc30d1aab x3fc0d240 1 x3fc0d240 1} {x42b00000 xc30c3210 x3f35e000 1 x3f35e000 1} {x42b20000 xc30baeeb x3e8e2c00 1 x3e8e2c00 1} {x42b40000 xc30b9739 x3e5f0a00 1 x3e5f0a00 1} {x42b60000 xc30b3f66 x3e936700 1 x3e936700 1} {x42b80000 xc30b03d2 x3ea08a00 1 x3ea08a00 1} {x42ba0000 xc30a9edc x3f05c500 1 x3f05c500 1} {x42bc0000 xc309f848 x3f1c4100 1 x3f1c4100 1} {x42be0000 xc309665a x3efee700 1 x3efee700 1} {x42c00000 xc308f961 x3f16bd80 1 x3f16bd80 1} {x42c20000 xc30838df x400158c0 1 x400158c0 1} {x42c40000 xc304ee9b x405a7500 1 x405a7500 1} {x42c60000 xc3016537 x4071c110 1 x4071c110 1} {x42c80000 xc2fac125 x40846cd0 1 x40846cd0 1} {x42ca0000 xc2f23cd4 x40831a10 1 x40831a10 1} {x42cc0000 xc2ea5de3 x407a8580 1 x407a8580 1} {x42ce0000 xc2e2947c x40788cd0 1 x40788cd0 1} {x42d00000 xc2dad516 x40674e70 1 x40674e70 1} {x42d20000 xc2d41f95 x405b5fd0 1 x405b5fd0 1} {x42d40000 xc2cd1f19 x404f9f00 1 x404f9f00 1} {x42d60000 xc2c725a5 x4045a2f0 1 x4045a2f0 1} {x42d80000 xc2c0c4ea x404c7a70 1 x404c7a70 1} {x42da0000 xc2ba5dfe x404b71e0 1 x404b71e0 1} {x42dc0000 xc2b40dcc x4058e590 1 x4058e590 1} {x42de0000 xc2accfa5 x4069d3f0 1 x4069d3f0 1} {x42e00000 xc2a5708d x406eca80 1 x406eca80 1} {x42e20000 xc29de2fd x407ba0f0 1 x407ba0f0 1} {x42e40000 xc295b67e x40826ff8 1 x40826ff8 1} {x42e60000 xc28d94fe x40817e48 1 x40817e48 1} {x42e80000 xc28586b5 x408791e8 1 x408791e8 1} {x42ea0000 xc2794582 x4097b3dc 1 x4097b3dc 1} {x42ec0000 xc2652073 x40ad0f8c 1 x40ad0f8c 1} {x42ee0000 xc24e019f x40bf93c4 1 x40bf93c4 1} {x42f00000 xc2353b82 x40d54af8 1 x40d54af8 1} {x42f20000 xc218aee1 x40e67562 1 x40e67562 1} {x42f40000 xc1f73c53 x40f35d14 1 x40f35d14 1} {x42f60000 xc1b7af38 x40f8cf65 1 x40f8cf65 1} {x42f80000 xc175a941 x40f724d5 1 x40f724d5 1} {x42fa0000 xc0f07336 x40f5a941 1 x40f5a941 1} {x42fc0000 0 x40f7841a 1 x40f7841a 1} {x42fe0000 x40fe94ff x40fe0ecd 1 x40fe0ecd 1} {x43000000 x417e0ecd x40f914c2 1 x40f914c2 1} {x43010000 x41bc2fa1 x40ed8413 1 x40ed8413 1} {x43020000 x41f5c970 x40e3d146 1 x40e3d146 1} {x43030000 x42170c22 x40daae80 1 x40daae80 1} {x43040000 x42319058 x40c74078 1 x40c74078 1} {x43050000 x4248dc40 x40ac7890 1 x40ac7890 1} {x43060000 x425cae7c x4097b738 1 x4097b738 1} {x43070000 x426eca0e x4088ebf4 1 x4088ebf4 1} {x43080000 x427ee979 x40777780 1 x40777780 1} {x43090000 x4286dc7f x40647b68 1 x40647b68 1} {x430a0000 x428dbc73 x4051e230 1 x4051e230 1} {x430b0000 x4293faa2 x40411c30 1 x40411c30 1} {x430c0000 x4299ce36 x40313b90 1 x40313b90 1} {x430d0000 x429f0e5b x402e6ed0 1 x402e6ed0 1} {x430e0000 x42a4b523 x403b2cf0 1 x403b2cf0 1} {x430f0000 x42aac12a x404ca5c0 1 x404ca5c0 1} {x43100000 x42b17f7f x4055d840 1 x4055d840 1} {x43110000 x42b81eae x40565410 1 x40565410 1} {x43120000 x42bee4c0 x405037e0 1 x405037e0 1} {x43130000 x42c5222c x403748b0 1 x403748b0 1} {x43140000 x42ca594b x40089ba0 1 x40089ba0 1} {x43150000 x42cdabe6 x3fa00060 1 x3fa00060 1} {x43160000 x42cf594e x3f220da0 1 0 1}} {{x42540000 x4485e562 0 1 xc155eb40 1} {x42580000 x44842aa3 xc16c4800 1 xc16c4800 1} {x425c0000 x44823442 xc18197a0 1 xc18197a0 1} {x42600000 x44801de6 xc184a6b0 1 xc184a6b0 1} {x42640000 x447c1e19 xc1836780 1 xc1836780 1} {x42680000 x44780554 xc1853ae0 1 xc1853ae0 1} {x426c0000 x4473ca6b xc18bc1c0 1 xc18bc1c0 1} {x42700000 x446f4938 xc198e090 1 xc198e090 1} {x42740000 x446a3c62 xc1aa59e0 1 xc1aa59e0 1} {x42780000 x4464a39a xc1bc0bb0 1 xc1bc0bb0 1} {x427c0000 x445e7ba7 xc1cb8060 1 xc1cb8060 1} {x42800000 x4457eb94 xc1d3b1b0 1 xc1d3b1b0 1} {x42820000 x4451408c xc1d1d360 1 xc1d1d360 1} {x42840000 x444ace5e xc1ce9340 1 xc1ce9340 1} {x42860000 x44445758 xc1d07bb0 1 xc1d07bb0 1} {x42880000 x443dc6a3 xc1d56f80 1 xc1d56f80 1} {x428a0000 x44370060 xc1cdf7e0 1 xc1cdf7e0 1} {x428c0000 x4430e725 xc1b64920 1 xc1b64920 1} {x428e0000 x442b9bce xc1ae8620 1 xc1ae8620 1} {x42900000 x4425fec3 xc1b8cec0 1 xc1b8cec0 1} {x42920000 x44200ee2 xc1c2f090 1 xc1c2f090 1} {x42940000 x4419cfba xc1c6e310 1 xc1c6e310 1} {x42960000 x4413a0b1 xc1c4b5a0 1 xc1c4b5a0 1} {x42980000 x440d8460 xc1b79610 1 xc1b79610 1} {x429a0000 x44082750 xc1aec580 1 xc1aec580 1} {x429c0000 x44029808 xc1b506e8 1 xc1b506e8 1} {x429e0000 x43f9adc3 xc1b213f0 1 xc1b213f0 1} {x42a00000 x43eeed92 xc1b02040 1 xc1b02040 1} {x42a20000 x43e3a9bb xc1b0d8b0 1 xc1b0d8b0 1} {x42a40000 x43d8d27c xc1af1038 1 xc1af1038 1} {x42a60000 x43cdc7b4 xc1b36700 1 xc1b36700 1} {x42a80000 x43c2659c xc1b47228 1 xc1b47228 1} {x42aa0000 x43b7396f xc1b2d7c0 1 xc1b2d7c0 1} {x42ac0000 x43ac0aa4 xc1af0d50 1 xc1af0d50 1} {x42ae0000 x43a157c5 xc1a9d700 1 xc1a9d700 1} {x42b00000 x4396cfc4 xc1aa1028 1 xc1aa1028 1} {x42b20000 x438c15c0 xc1aa5078 1 xc1aa5078 1} {x42b40000 x438185b5 xc1acde64 1 xc1acde64 1} {x42b60000 x436cf3e7 xc1adcc4c 1 xc1adcc4c 1} {x42b80000 x43579857 xc1aa9718 1 xc1aa9718 1} {x42ba0000 x43424e21 xc1a4abe4 1 xc1a4abe4 1} {x42bc0000 x432e6d5e xc199ae7c 1 xc199ae7c 1} {x42be0000 x431be282 xc1915564 1 xc1915564 1} {x42c00000 x430a1805 xc187f038 1 xc187f038 1} {x42c20000 x42f3cce8 xc1772bb8 1 xc1772bb8 1} {x42c40000 x42d6651c xc168aac4 1 xc168aac4 1} {x42c60000 x42b9a237 xc166e7dc 1 xc166e7dc 1} {x42c80000 x429cab25 xc16867a2 1 xc16867a2 1} {x42ca0000 x427f109d xc168ac5c 1 xc168ac5c 1} {x42cc0000 x4245001c xc16289fa 1 xc16289fa 1} {x42ce0000 x420dcba0 xc15944b4 1 xc15944b4 1} {x42d00000 x41b0bb84 xc14a8d0e 1 xc14a8d0e 1} {x42d20000 x41221463 xc135cfa5 1 xc135cfa5 1} {x42d40000 xbf228424 xc1240b32 1 xc1240b32 1} {x42d60000 xc1260200 xc111ac45 1 xc111ac45 1} {x42d80000 xc196c066 xc0fc302e 1 xc0fc302e 1} {x42da0000 xc1d11917 xc0e070c4 1 xc0e070c4 1} {x42dc0000 xc2037c64 xc0bdf47a 1 xc0bdf47a 1} {x42de0000 xc21809aa xc0886be8 1 xc0886be8 1} {x42e00000 xc225975e xc015fbb0 1 xc015fbb0 1} {x42e20000 xc22ac920 xbe1a7700 1 xbe1a7700 1} {x42e40000 xc22afc9d -} {x42e60000 xc226343a x3ff17d50 1 x3ff17d50 1} {x42e80000 xc21be4c8 x403d8e38 1 x403d8e38 1} {x42ea0000 xc20e8273 x4057e068 1 x4057e068 1} {x42ec0000 xc200e8bb x405f5380 1 x405f5380 1} {x42ee0000 xc1e53006 x40645bc8 1 x40645bc8 1} {x42f00000 xc1c8ba84 x405f2330 1 x405f2330 1} {x42f20000 xc1ad673a x40568434 1 x40568434 1} {x42f40000 xc1931977 x4060fa8a 1 x4060fa8a 1} {x42f60000 xc16a512f x4080b4ff 1 x4080b4ff 1} {x42f80000 xc1257def x4091319b 1 x4091319b 1} {x42fa0000 xc0b23f28 x40a57def 1 x40a57def 1} {x42fc0000 0 x40b8c838 1 x40b8c838 1} {x42fe0000 x40bf5147 x40baa21b 1 x40baa21b 1} {x43000000 x413aa21b x40b95146 1 x40b95146 1} {x43010000 x418c7cf5 x40c34237 1 x40c34237 1} {x43020000 x41bef229 x40d16cb0 1 x40d16cb0 1} {x43030000 x41f5334d x40dd58ae 1 x40dd58ae 1} {x43040000 x4216cf40 x40e386ba 1 x40e386ba 1} {x43050000 x42337b55 x40e8fc2c 1 x40e8fc2c 1} {x43060000 x42510e4b x40f30d00 1 x40f30d00 1} {x43070000 x42703e95 x4101d13e 1 x4101d13e 1} {x43080000 x4288fb75 x410afa76 1 x410afa76 1} {x43090000 x429adde8 x410dc328 1 x410dc328 1} {x430a0000 x42ac6c3f x4108fdd0 1 x4108fdd0 1} {x430b0000 x42bd1d5c x4104c20c 1 x4104c20c 1} {x430c0000 x42cd9cc2 x41075dcc 1 x41075dcc 1} {x430d0000 x42def4cf x410d7a8c 1 x410d7a8c 1} {x430e0000 x42f0fb65 x410d3ee4 1 x410d3ee4 1} {x430f0000 x43012244 x410b128c 1 x410b128c 1} {x43100000 x4309e004 x41088160 1 x41088160 1} {x43110000 x43123270 x41042408 1 x41042408 1} {x43120000 x431a6485 x40f943a0 1 x40f943a0 1} {x43130000 x4321c6aa x40e5d560 1 x40e5d560 1} {x43140000 x4328c1db x40d3a600 1 x40d3a600 1} {x43150000 x432f010a x40a128a0 1 x40a128a0 1} {x43160000 x4332d465 x404e1980 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke7 262656 bezier {cc {f 8224} {p {0 0 1} {x44539614 x43f43540 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke8 262656 bezier {cc {f 8224} {p {0 0 1} {x44539614 x43f43540 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3c7b631 0 1 x40cb6b00 1} {x42580000 xc3c46584 x40e5abc0 1 x40e5abc0 1} {x425c0000 xc3c088d3 x4105d660 1 x4105d660 1} {x42600000 xc3bc081e x411f1010 1 x411f1010 1} {x42640000 xc3b697d2 x412e8960 1 x412e8960 1} {x42680000 xc3b11f88 x412becf0 1 x412becf0 1} {x426c0000 xc3abd903 x41231050 1 x41231050 1} {x42700000 xc3a6ee83 x41256210 1 x41256210 1} {x42740000 xc3a182e2 x4126b5e0 1 x4126b5e0 1} {x42780000 xc39c8325 x411976a0 1 x411976a0 1} {x427c0000 xc397eb78 x411ec1d0 1 x411ec1d0 1} {x42800000 xc3929708 x4123d5c0 1 x4123d5c0 1} {x42820000 xc38dae1c x410f90b0 1 x410f90b0 1} {x42840000 xc3899dfd x40f7f200 1 x40f7f200 1} {x42860000 xc385ee8c x40f628c0 1 x40f628c0 1} {x42880000 xc381ecb7 x41024870 1 x41024870 1} {x428a0000 xc37b940a x40fbb070 1 x40fbb070 1} {x428c0000 xc3741e67 x40e5c9f0 1 x40e5c9f0 1} {x428e0000 xc36d376b x40e2a8c0 1 x40e2a8c0 1} {x42900000 xc365f3db x40f06ba0 1 x40f06ba0 1} {x42920000 xc35e30b1 x40e5f820 1 x40e5f820 1} {x42940000 xc3579459 x40c14fb0 1 x40c14fb0 1} {x42960000 xc3521bb6 x40a4c9d0 1 x40a4c9d0 1} {x42980000 xc34d47bc x409387f0 1 x409387f0 1} {x429a0000 xc348e337 x40853960 1 x40853960 1} {x429c0000 xc344f426 x4070d3c0 1 x4070d3c0 1} {x429e0000 xc3415c99 x406918a0 1 x406918a0 1} {x42a00000 xc33dab61 x407b5680 1 x407b5680 1} {x42a20000 xc33981e5 x40950300 1 x40950300 1} {x42a40000 xc3345b31 x40bf02d0 1 x40bf02d0 1} {x42a60000 xc32d91b8 x40b428f0 1 x40b428f0 1} {x42a80000 xc32918a2 x408fdb30 1 x408fdb30 1} {x42aa0000 xc3249405 x408e3cd0 1 x408e3cd0 1} {x42ac0000 xc32034d5 x407cb2e0 1 x407cb2e0 1} {x42ae0000 xc31cae6e x4041f720 1 x4041f720 1} {x42b00000 xc31a251c x400cab20 1 x400cab20 1} {x42b20000 xc3184915 x3fda8380 1 x3fda8380 1} {x42b40000 xc316bb0e x3fcdfc80 1 x3fcdfc80 1} {x42b60000 xc3151123 x3fdb58c0 1 x3fdb58c0 1} {x42b80000 xc3134dab x3fdb9300 1 x3fdb9300 1} {x42ba0000 xc311a2d7 x3fd46180 1 x3fd46180 1} {x42bc0000 xc30ffc25 x3fd80e00 1 x3fd80e00 1} {x42be0000 xc30e429f x3fd9a6c0 1 x3fd9a6c0 1} {x42c00000 xc30c958a x3fd5bd80 1 x3fd5bd80 1} {x42c20000 xc30aeba9 x40424800 1 x40424800 1} {x42c40000 xc306834a x4090ce30 1 x4090ce30 1} {x42c60000 xc301dec6 x4097b498 1 x4097b498 1} {x42c80000 xc2fa1001 x4099c3b0 1 x4099c3b0 1} {x42ca0000 xc2f08516 x4099e1f0 1 x4099e1f0 1} {x42cc0000 xc2e6d3c3 x409a9110 1 x409a9110 1} {x42ce0000 xc2dd32f4 x4093ff30 1 x4093ff30 1} {x42d00000 xc2d453dd x40886b70 1 x40886b70 1} {x42d20000 xc2cc2586 x40783070 1 x40783070 1} {x42d40000 xc2c4d0d6 x4068e940 1 x4068e940 1} {x42d60000 xc2bd96f2 x405d0cc0 1 x405d0cc0 1} {x42d80000 xc2b7000a x404e4f40 1 x404e4f40 1} {x42da0000 xc2b0b1fe x404c1630 1 x404c1630 1} {x42dc0000 xc2aa3ea7 x4055c920 1 x4055c920 1} {x42de0000 xc2a3556c x40627fb0 1 x40627fb0 1} {x42e00000 xc29c16ac x406ab680 1 x406ab680 1} {x42e20000 xc294aa04 x406ff2d0 1 x406ff2d0 1} {x42e40000 xc28d177f x4073f0f0 1 x4073f0f0 1} {x42e60000 xc2856af5 x407961e0 1 x407961e0 1} {x42e80000 xc27b02c2 x4083dfc4 1 x4083dfc4 1} {x42ea0000 xc269ddf9 x40901aa8 1 x40901aa8 1} {x42ec0000 xc256fc18 x40a324ac 1 x40a324ac 1} {x42ee0000 xc24114ce x40b4f004 1 x40b4f004 1} {x42f00000 xc229c017 x40c61004 1 x40c61004 1} {x42f20000 xc20f90cd x40d83f52 1 x40d83f52 1} {x42f40000 xc1e76085 x40e58ce0 1 x40e58ce0 1} {x42f60000 xc1ac5b2a x40e93a0c 1 x40e93a0c 1} {x42f80000 xc16586fe x40e5fbae 1 x40e5fbae 1} {x42fa0000 xc0e5754c x40e586fe 1 x40e586fe 1} {x42fc0000 0 x40e977af 1 x40e977af 1} {x42fe0000 x40ed7a12 x40ebfb18 1 x40ebfb18 1} {x43000000 x416bfb18 x40e7d4ad 1 x40e7d4ad 1} {x43010000 x41af48db x40dfc92a 1 x40dfc92a 1} {x43020000 x41e5e221 x40d4b506 1 x40d4b506 1} {x43030000 x420cd1af x40c7da16 1 x40c7da16 1} {x43040000 x4224e796 x40b73c24 1 x40b73c24 1} {x43050000 x423aa0b8 x40ab1874 1 x40ab1874 1} {x43060000 x424fadb3 x40a281cc 1 x40a281cc 1} {x43070000 x4263412b x4088a2f8 1 x4088a2f8 1} {x43080000 x4271d671 x405de278 1 x405de278 1} {x43090000 x427efd7a x40497f48 1 x40497f48 1} {x430a0000 x4285832d x403647f0 1 x403647f0 1} {x430b0000 x428ae33c x40244980 1 x40244980 1} {x430c0000 x428fc7c5 x40183890 1 x40183890 1} {x430d0000 x429466c5 x4011eb20 1 x4011eb20 1} {x430e0000 x4298e677 x4019ad40 1 x4019ad40 1} {x430f0000 x429e0199 x402a6ec0 1 x402a6ec0 1} {x43100000 x42a38d63 x403383e0 1 x403383e0 1} {x43110000 x42a939d7 x40331f50 1 x40331f50 1} {x43120000 x42aebf58 x402bc030 1 x402bc030 1} {x43130000 x42b3f5da x4014e1d0 1 x4014e1d0 1} {x43140000 x42b80d75 x3fc80c00 1 x3fc80c00 1} {x43150000 x42ba363a x3f0d5880 1 x3f0d5880 1} {x43160000 x42ba9475 -}} {{x42540000 x4487b6bf 0 1 xc15d9700 1} {x42580000 x4485ea13 xc177d400 1 xc177d400 1} {x425c0000 x4483d76f xc186d960 1 xc186d960 1} {x42600000 x4481b348 xc18807c0 1 xc18807c0 1} {x42640000 x447f2e62 xc18481b0 1 xc18481b0 1} {x42680000 x447b1e75 xc1874280 1 xc1874280 1} {x426c0000 x4476ba3a xc18a6270 1 xc18a6270 1} {x42700000 x4472784e xc18f3ef0 1 xc18f3ef0 1} {x42740000 x446dc64b xc1a2ced0 1 xc1a2ced0 1} {x42780000 x44684b61 xc1b3e900 1 xc1b3e900 1} {x427c0000 x446287bb xc1c272e0 1 xc1c272e0 1} {x42800000 x445c2433 xc1cb50c0 1 xc1cb50c0 1} {x42820000 x4455d2af xc1c97ef0 1 xc1c97ef0 1} {x42840000 x444f8c44 xc1c94090 1 xc1c94090 1} {x42860000 x44493ea6 xc1cf38e0 1 xc1cf38e0 1} {x42880000 x444298b6 xc1d121b0 1 xc1d121b0 1} {x428a0000 x443c2c8b xc1ce6300 1 xc1ce6300 1} {x428c0000 x4435b286 xc1d26310 1 xc1d26310 1} {x428e0000 x442f065a xc1d7c660 1 xc1d7c660 1} {x42900000 x44283620 xc1dedc10 1 xc1dedc10 1} {x42920000 x44211899 xc1dc42d0 1 xc1dc42d0 1} {x42940000 x441a71f3 xc1d0ca40 1 xc1d0ca40 1} {x42960000 x44140bf5 xc1c83c80 1 xc1c83c80 1} {x42980000 x440dee2b xc1bdb810 1 xc1bdb810 1} {x429a0000 x44083074 xc1b39c20 1 xc1b39c20 1} {x429c0000 x4402b469 xc1ad06a8 1 xc1ad06a8 1} {x429e0000 x43fac013 xc1a9d768 1 xc1a9d768 1} {x42a00000 x43f02de5 xc1a8dfc8 1 xc1a8dfc8 1} {x42a20000 x43e5a41a xc1aa6aa0 1 xc1aa6aa0 1} {x42a40000 x43dae091 xc1a9eb10 1 xc1a9eb10 1} {x42a60000 x43d066b8 xc1a4fa20 1 xc1a4fa20 1} {x42a80000 x43c6414d xc1a25520 1 xc1a25520 1} {x42aa0000 x43bc1c14 xc1a3ffb0 1 xc1a3ffb0 1} {x42ac0000 x43b1c157 xc1a56bd0 1 xc1a56bd0 1} {x42ae0000 x43a76e9a xc1a34588 1 xc1a34588 1} {x42b00000 x439d58a6 xc1a29260 1 xc1a29260 1} {x42b20000 x43931c4e xc1a4b158 1 xc1a4b158 1} {x42b40000 x4388c27b xc1a7236c 1 xc1a7236c 1} {x42b60000 x437c6fc1 xc1a9d85c 1 xc1a9d85c 1} {x42b80000 x43670edf xc1a80928 1 xc1a80928 1} {x42ba0000 x43526d77 xc1a1f9f4 1 xc1a1f9f4 1} {x42bc0000 x433e9062 xc199c8d4 1 xc199c8d4 1} {x42be0000 x432bfb42 xc18f34b8 1 xc18f34b8 1} {x42c00000 x431ac334 xc1843ccc 1 xc1843ccc 1} {x42c20000 x430aec0f xc17223f8 1 xc17223f8 1} {x42c40000 x42f8fd6a xc162dd94 1 xc162dd94 1} {x42c60000 x42dd20b9 xc15c2fd8 1 xc15c2fd8 1} {x42c80000 x42c1f174 xc15c1950 1 xc15c1950 1} {x42ca0000 x42a61a65 xc15c383c 1 xc15c383c 1} {x42cc0000 x428ae365 xc14477cc 1 xc14477cc 1} {x42ce0000 x4269f8e4 xc13274fc 1 xc13274fc 1} {x42d00000 x423c8c4c xc1365fec 1 xc1365fec 1} {x42d20000 x420ec8ee xc130052a 1 xc130052a 1} {x42d40000 x41c9136e xc1207c28 1 xc1207c28 1} {x42d60000 x417a2b67 xc10f23ea 1 xc10f23ea 1} {x42d80000 x40e7be0e xc101c82b 1 xc101c82b 1} {x42da0000 xbf164eeb xc0f05308 1 xc0f05308 1} {x42dc0000 xc0f8e803 xc0d3cda1 1 xc0d3cda1 1} {x42de0000 xc15d3290 xc0a3d47c 1 xc0a3d47c 1} {x42e00000 xc190243f xc05471c0 1 xc05471c0 1} {x42e20000 xc1a3b5b8 xbfed5480 1 xbfed5480 1} {x42e40000 xc1adcecf xbed86e40 1 xbed86e40 1} {x42e60000 xc1aeef62 -} {x42e80000 xc1a56623 x3fba7710 1 x3fba7710 1} {x42ea0000 xc197a080 x3fda18a8 1 x3fda18a8 1} {x42ec0000 xc18a230e x3fdf6c90 1 x3fdf6c90 1} {x42ee0000 xc17765dc x3ff1a25c 1 x3ff1a25c 1} {x42f00000 xc157dd85 x3fde74cc 1 x3fde74cc 1} {x42f20000 xc13fc8a9 x3fc66c84 1 x3fc66c84 1} {x42f40000 xc1264264 x3fd8603c 1 x3fd8603c 1} {x42f60000 xc109b09a x400518aa 1 x400518aa 1} {x42f80000 xc0c76c1e x4021093e 1 x4021093e 1} {x42fa0000 xc064afeb x40476c1e 1 x40476c1e 1} {x42fc0000 0 x406f2857 1 x406f2857 1} {x42fe0000 x4079a0c3 x4077e39b 1 x4077e39b 1} {x43000000 x40f7e39b x407870c4 1 x407870c4 1} {x43010000 x413aa093 x4085b642 1 x4085b642 1} {x43020000 x4180d408 x409391c9 1 x409391c9 1} {x43030000 x41a7192e x409ebed8 1 x409ebed8 1} {x43040000 x41d03374 x40a79eee 1 x40a79eee 1} {x43050000 x41fae8a5 x40bd6608 1 x40bd6608 1} {x43060000 x4217733c x40e6ee6e 1 x40e6ee6e 1} {x43070000 x42372fee x40e99cc4 1 x40e99cc4 1} {x43080000 x4251da6d x40d91af8 1 x40d91af8 1} {x43090000 x426d76ac x40db06d4 1 x40db06d4 1} {x430a0000 x42844e11 x40d3f6e8 1 x40d3f6e8 1} {x430b0000 x42913a33 x40cc3258 1 x40cc3258 1} {x430c0000 x429dd45c x40ce8090 1 x40ce8090 1} {x430d0000 x42ab0a45 x40d9e318 1 x40d9e318 1} {x430e0000 x42b910bf x40dcc9a0 1 x40dcc9a0 1} {x430f0000 x42c6a379 x40d7d418 1 x40d7d418 1} {x43100000 x42d40b42 x40d3f068 1 x40d3f068 1} {x43110000 x42e12186 x40cd4bd8 1 x40cd4bd8 1} {x43120000 x42edb4bd x40c19cf8 1 x40c19cf8 1} {x43130000 x42f95525 x40b07878 1 x40b07878 1} {x43140000 x4301e1e6 x409c7a18 1 x409c7a18 1} {x43150000 x43067234 x40612aa0 1 x40612aa0 1} {x43160000 x4308eb3b x3ff99aa0 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke9 262656 bezier {cc {f 8224} {p {0 0 1} {x44dd8a04 x4422249c 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke10 262656 bezier {cc {f 8224} {p {0 0 1} {x44dd8a04 x4422249c 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc316eed0 0 1 x407dfa00 1} {x42580000 xc312bdd1 x409465a0 1 x409465a0 1} {x425c0000 xc30da876 x40ac6fe0 1 x40ac6fe0 1} {x42600000 xc307f6d3 x40ba33c0 1 x40ba33c0 1} {x42640000 xc302053a x40d39dd0 1 x40d39dd0 1} {x42680000 xc2f579ec x40dd4c90 1 x40dd4c90 1} {x426c0000 xc2e860e2 x40b40c50 1 x40b40c50 1} {x42700000 xc2def862 x40b09098 1 x40b09098 1} {x42740000 xc2d24ecf x40be9ea0 1 x40be9ea0 1} {x42780000 xc2c7248e x40bac908 1 x40bac908 1} {x427c0000 xc2baf5ae x40c1d6a8 1 x40c1d6a8 1} {x42800000 xc2aee9b9 x40c2a330 1 x40c2a330 1} {x42820000 xc2a2a148 x40b0fc70 1 x40b0fc70 1} {x42840000 xc298ca2b x408d24a8 1 x408d24a8 1} {x42860000 xc290fcb3 x40828780 1 x40828780 1} {x42880000 xc288793b x40937d6c 1 x40937d6c 1} {x428a0000 xc27d1a0b x405c4ce0 1 x405c4ce0 1} {x428c0000 xc27568da x404876f0 1 x404876f0 1} {x428e0000 xc2640b2d x4093e200 1 x4093e200 1} {x42900000 xc250705a x409ea734 1 x409ea734 1} {x42920000 xc23c6160 x409c7edc 1 x409c7edc 1} {x42940000 xc22950a3 x40840d88 1 x40840d88 1} {x42960000 xc21b5dfe x4064c578 1 x4064c578 1} {x42980000 xc20cb7f4 x406dc8b0 1 x406dc8b0 1} {x429a0000 xc1fb49d0 x405a4b30 1 x405a4b30 1} {x429c0000 xc1e2dd1c x4005771c 1 x4005771c 1} {x429e0000 xc1d9ec09 x3f8e9e28 1 x3f8e9e28 1} {x42a00000 xc1d10957 x3f7eeb50 1 x3f7eeb50 1} {x42a20000 xc1c9fd54 x3f921518 1 x3f921518 1} {x42a40000 xc1bec6b4 x3fa7cbd8 1 x3fa7cbd8 1} {x42a60000 xc1b503d9 x3f68c6b0 1 x3f68c6b0 1} {x42a80000 xc1b03a49 x3f11b7a0 1 x3f11b7a0 1} {x42aa0000 xc1abe85f x3d063a00 1 x3d063a00 1} {x42ac0000 xc1abd200 -} {x42ae0000 xc1ae0b5e xbf558340 1 xbf558340 1} {x42b00000 xc1ba4b3c xbfc83c68 1 xbfc83c68 1} {x42b20000 xc1c712eb xbfdc97b8 1 xbfdc97b8 1} {x42b40000 xc1d5de33 xbfdce560 1 xbfdce560 1} {x42b60000 xc1e2af97 xbfd1afa0 1 xbfd1afa0 1} {x42b80000 xc1f01427 xbffd55c8 1 xbffd55c8 1} {x42ba0000 xc2012d28 xc00588ac 1 xc00588ac 1} {x42bc0000 xc208bb29 xbff57a10 1 xbff57a10 1} {x42be0000 xc21084c9 xc0062358 1 xc0062358 1} {x42c00000 xc2197f94 xc01ff138 1 xc01ff138 1} {x42c20000 xc22482f0 xbf394b40 1 xbf394b40 1} {x42c40000 xc22579ff xbe1d0c80 1 xbe1d0c80 1} {x42c60000 xc225bd09 -} {x42c80000 xc223d700 x3eb39540 1 x3eb39540 1} {x42ca0000 xc222eeb4 x3e4ce180 1 x3e4ce180 1} {x42cc0000 xc2223d3d -} {x42ce0000 xc2235171 xbe466500 1 xbe466500 1} {x42d00000 xc223ca07 xbeb4e100 1 xbeb4e100 1} {x42d20000 xc226e6e2 xbf2c78e0 1 xbf2c78e0 1} {x42d40000 xc2292dce xbedd3d80 1 xbedd3d80 1} {x42d60000 xc22a5bd8 xbe138400 1 xbe138400 1} {x42d80000 xc22a8d04 -} {x42da0000 xc228d349 x3ea02940 1 x3ea02940 1} {x42dc0000 xc2280c5f x3eea8a80 1 x3eea8a80 1} {x42de0000 xc225291f x3f3c5720 1 x3f3c5720 1} {x42e00000 xc22229a6 x3f77c6a0 1 x3f77c6a0 1} {x42e20000 xc21d6aea x3f9c80e0 1 x3f9c80e0 1} {x42e40000 xc2186198 x3fde7d80 1 x3fde7d80 1} {x42e60000 xc20f8312 x40058dc0 1 x40058dc0 1} {x42e80000 xc207afe0 x3ff6c5f0 1 x3ff6c5f0 1} {x42ea0000 xc20016b3 x400a072c 1 x400a072c 1} {x42ec0000 xc1ecddf5 x4021eb44 1 x4021eb44 1} {x42ee0000 xc1d7b295 x403cd4ac 1 x403cd4ac 1} {x42f00000 xc1bda8ca x40589004 1 x40589004 1} {x42f20000 xc1a18e94 x406aafd8 1 x406aafd8 1} {x42f40000 xc182fcd4 x407da6e8 1 x407da6e8 1} {x42f60000 xc14449b4 x40831bdc 1 x40831bdc 1} {x42f80000 xc102ddcc x40806a56 1 x40806a56 1} {x42fa0000 xc087bebb x4082ddcc 1 x4082ddcc 1} {x42fc0000 0 x408784fc 1 x408784fc 1} {x42fe0000 x40874b3c x4087e24a 1 x4087e24a 1} {x43000000 x4107e24a x407dbd84 1 x407dbd84 1} {x43010000 x41428460 x406a3f4e 1 x406a3f4e 1} {x43020000 x417d01f1 x40642d40 1 x40642d40 1} {x43030000 x419a4d80 x4048d6fa 1 x4048d6fa 1} {x43040000 x41b0b6b7 x4031677c 1 x4031677c 1} {x43050000 x41c6a75f x401c5ff8 1 x401c5ff8 1} {x43060000 x41d7ceb5 x400bc9f4 1 x400bc9f4 1} {x43070000 x41e999dc x3fea3930 1 x3fea3930 1} {x43080000 x41f515db x3fae72b8 1 x3fae72b8 1} {x43090000 x41ff6833 x3fb7bff8 1 x3fb7bff8 1} {x430a0000 x420606ed x3fbee908 1 x3fbee908 1} {x430b0000 x420ba2aa x3fadb180 1 x3fadb180 1} {x430c0000 x4210e205 x3f8af2b0 1 x3f8af2b0 1} {x430d0000 x421451d5 x3f8c4fc0 1 x3f8c4fc0 1} {x430e0000 x4219a701 x3fb9f790 1 x3fb9f790 1} {x430f0000 x421ff14e x3fba40a0 1 x3fba40a0 1} {x43100000 x42254b0b x3fb891e0 1 x3fb891e0 1} {x43110000 x422b7a6c x3fb7fb40 1 x3fb7fb40 1} {x43120000 x4230cabf x3fa9c5c0 1 x3fa9c5c0 1} {x43130000 x423616c8 x3fa22640 1 x3fa22640 1} {x43140000 x423aed23 x3f5ccd80 1 x3f5ccd80 1} {x43150000 x423cfd34 -} {x43160000 x423a30fa xbf864ae0 1 0 1}} {{x42540000 x4443f782 0 1 xc1134240 1} {x42580000 x4441ade6 xc110b080 1 xc110b080 1} {x425c0000 x443f71fe xc1120da0 1 xc1120da0 1} {x42600000 x443d1d79 xc12dd780 1 xc12dd780 1} {x42640000 x443a0342 xc1562020 1 xc1562020 1} {x42680000 x44366c78 xc16c33c0 1 xc16c33c0 1} {x426c0000 x4432a1a4 xc15374a0 1 xc15374a0 1} {x42700000 x442fd0d3 xc1426a80 1 xc1426a80 1} {x42740000 x442c8e50 xc1585480 1 xc1585480 1} {x42780000 x44290e2f xc1656aa0 1 xc1656aa0 1} {x427c0000 x442562fb xc17007c0 1 xc17007c0 1} {x42800000 x44218df1 xc179cf60 1 xc179cf60 1} {x42820000 x441d9480 xc17d8e00 1 xc17d8e00 1} {x42840000 x4419a181 xc17a2de0 1 xc17a2de0 1} {x42860000 x4415c311 xc173e900 1 xc173e900 1} {x42880000 x44120239 xc17257c0 1 xc17257c0 1} {x428a0000 x440e3053 xc15ea6c0 1 xc15ea6c0 1} {x428c0000 x440b0d03 xc16739a0 1 xc16739a0 1} {x428e0000 x4406f686 xc18530a0 1 xc18530a0 1} {x42900000 x4402b9f9 xc1884a70 1 xc1884a70 1} {x42920000 x43fce3be xc188dcf0 1 xc188dcf0 1} {x42940000 x43f45854 xc183a568 1 xc183a568 1} {x42960000 x43ec6f11 xc174ec80 1 xc174ec80 1} {x42980000 x43e5098c xc1682ad0 1 xc1682ad0 1} {x429a0000 x43ddec64 xc154f460 1 xc154f460 1} {x429c0000 x43d7ba46 xc14b46d0 1 xc14b46d0 1} {x429e0000 x43d137f7 xc14faf50 1 xc14faf50 1} {x42a00000 x43cabf51 xc1554490 1 xc1554490 1} {x42a20000 x43c3e3ae xc1684b20 1 xc1684b20 1} {x42a40000 x43bc3a9f xc1788770 1 xc1788770 1} {x42a60000 x43b45b37 xc17a34d0 1 xc17a34d0 1} {x42a80000 x43ac9752 xc178d8d0 1 xc178d8d0 1} {x42aa0000 x43a4cdaa xc1718260 1 xc1718260 1} {x42ac0000 x439d7f2c xc16c0ad0 1 xc16c0ad0 1} {x42ae0000 x43960cfd xc1688de0 1 xc1688de0 1} {x42b00000 x438ef64e xc15b6b40 1 xc15b6b40 1} {x42b20000 x43885649 xc1647170 1 xc1647170 1} {x42b40000 x4380af37 xc171d748 1 xc171d748 1} {x42b60000 x437271a9 xc1666bc8 1 xc1666bc8 1} {x42b80000 x436490f5 xc15df118 1 xc15df118 1} {x42ba0000 x4356b386 xc15d1038 1 xc15d1038 1} {x42bc0000 x4348eeee xc1551ac8 1 xc1551ac8 1} {x42be0000 x433c102d xc13d4cc0 1 xc13d4cc0 1} {x42c00000 x43314556 xc12aadc8 1 xc12aadc8 1} {x42c20000 x4326ba74 xc1181e70 1 xc1181e70 1} {x42c40000 x431e4188 xc106f798 1 xc106f798 1} {x42c60000 x4315db81 xc10d4158 1 xc10d4158 1} {x42c80000 x430c995d xc1104a18 1 xc1104a18 1} {x42ca0000 x4303d23e xc104b958 1 xc104b958 1} {x42cc0000 x42f80464 xc0f673b8 1 xc0f673b8 1} {x42ce0000 x42e8d605 xc0fe3ce8 1 xc0fe3ce8 1} {x42d00000 x42d83cc7 xc0e16d90 1 xc0e16d90 1} {x42d20000 x42cca853 xc0ba8fd8 1 xc0ba8fd8 1} {x42d40000 x42c0eacc xc0cf0d50 1 xc0cf0d50 1} {x42d60000 x42b2c6a9 xc0cfe1c8 1 xc0cfe1c8 1} {x42d80000 x42a6ee93 xc0cdddb8 1 xc0cdddb8 1} {x42da0000 x42990af2 xc0dbeae8 1 xc0dbeae8 1} {x42dc0000 x428b7136 xc0cfb75c 1 xc0cfb75c 1} {x42de0000 x427e280d xc0b83614 1 xc0b83614 1} {x42e00000 x4268d4e7 xc0a702b8 1 xc0a702b8 1} {x42e20000 x4254675f xc0989ff4 1 xc0989ff4 1} {x42e40000 x4242acea xc0979068 1 xc0979068 1} {x42e60000 x422e8345 xc08af52c 1 xc08af52c 1} {x42e80000 x421fef9f xc0644d38 1 xc0644d38 1} {x42ea0000 x4211f99e xc0523898 1 xc0523898 1} {x42ec0000 x4205a88c xc058f7c0 1 xc058f7c0 1} {x42ee0000 x41edb54c xc07ac560 1 xc07ac560 1} {x42f00000 x41cc9fc0 xc086d390 1 xc086d390 1} {x42f20000 x41aa4b84 xc0915d70 1 xc0915d70 1} {x42f40000 x4183f108 xc0937d19 1 xc0937d19 1} {x42f60000 x414119ef xc08e15aa 1 xc08e15aa 1} {x42f80000 x40f398cc xc0802aa8 1 xc0802aa8 1} {x42fa0000 x4081de8e xc07398cc 1 xc07398cc 1} {x42fc0000 0 xc084bd22 1 xc084bd22 1} {x42fe0000 xc0879bb5 xc0758489 1 xc0758489 1} {x43000000 xc0f58489 xc0536223 1 xc0536223 1} {x43010000 xc12d7eec xc05408cf 1 xc05408cf 1} {x43020000 xc164c6ac xc0574bb0 1 xc0574bb0 1} {x43030000 xc18c9262 xc039f160 1 xc039f160 1} {x43040000 xc1a0dfae xc025136c 1 xc025136c 1} {x43050000 xc1b5d73d xc00d268c 1 xc00d268c 1} {x43060000 xc1c42951 xc0187310 1 xc0187310 1} {x43070000 xc1dbf401 xc01c5b08 1 xc01c5b08 1} {x43080000 xc1eb4013 xbfc8ded0 1 xbfc8ded0 1} {x43090000 xc1f50fdb xbf87fa98 1 xbf87fa98 1} {x430a0000 xc1fc3f66 xbf905398 1 xbf905398 1} {x430b0000 xc2038d27 xbfb3b440 1 xbfb3b440 1} {x430c0000 xc2095af7 -} {x430d0000 xc208be43 -} {x430e0000 xc20be960 xbf198040 1 xbf198040 1} {x430f0000 xc20d8a45 xbef659c0 1 xbef659c0 1} {x43100000 xc20fc2c7 xbf629500 1 xbf629500 1} {x43110000 xc2149eed -} {x43120000 xc2135649 -} {x43130000 xc214ca9e xbede9d40 1 xbede9d40 1} {x43140000 xc216d0be xbf4590e0 1 xbf4590e0 1} {x43150000 xc21af725 xbffd5690 1 xbffd5690 1} {x43160000 xc226a627 xc059128c 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke11 262656 bezier {cc {f 8224} {p {0 0 1} {x44d1937d x442543b6 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke12 262656 bezier {cc {f 8224} {p {0 0 1} {x44d1937d x442543b6 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc33cebcd 0 1 x40db96d0 1} {x42580000 xc335c88f x40f609a0 1 x40f609a0 1} {x425c0000 xc32d8b33 x40e4ad00 1 x40e4ad00 1} {x42600000 xc3277dbf x40c39950 1 x40c39950 1} {x42640000 xc321519e x40d83070 1 x40d83070 1} {x42680000 xc319fab8 x40dec760 1 x40dec760 1} {x426c0000 xc3136528 x40cf3050 1 x40cf3050 1} {x42700000 xc30d07b3 x40caf640 1 x40caf640 1} {x42740000 xc306b5c4 x40be78f0 1 x40be78f0 1} {x42780000 xc3012024 x40c6dd40 1 x40c6dd40 1} {x427c0000 xc2f48fe0 x40ddd7e8 1 x40ddd7e8 1} {x42800000 xc2e6854b x40d21d28 1 x40d21d28 1} {x42820000 xc2da4c3b x40b02ae8 1 x40b02ae8 1} {x42840000 xc2d07fee x409b1348 1 x409b1348 1} {x42860000 xc2c6e9d2 x409b28d0 1 x409b28d0 1} {x42880000 xc2bd1ad4 x409d6290 1 x409d6290 1} {x428a0000 xc2b33d80 x4099e7a8 1 x4099e7a8 1} {x428c0000 xc2a9dddf x4097f570 1 x4097f570 1} {x428e0000 xc2a03ed2 x409dade8 1 x409dade8 1} {x42900000 xc2962822 x40a02b20 1 x40a02b20 1} {x42920000 xc28c396e x409b2980 1 x409b2980 1} {x42940000 xc282c2f2 x40929ac8 1 x40929ac8 1} {x42960000 xc273cc2a x408ce240 1 x408ce240 1} {x42980000 xc2624d54 x40815118 1 x40815118 1} {x429a0000 xc25377e4 x406a9738 1 x406a9738 1} {x429c0000 xc244fa6d x40202880 1 x40202880 1} {x429e0000 xc23f72d4 x3f9aec80 1 x3f9aec80 1} {x42a00000 xc23b4ba5 x3fa20ac0 1 x3fa20ac0 1} {x42a20000 xc2355228 x3fd2b070 1 x3fd2b070 1} {x42a40000 xc22e209e x3fd80440 1 x3fd80440 1} {x42a60000 xc227d1e4 x3fafbcc0 1 x3fafbcc0 1} {x42a80000 xc22324d2 x3f9ce090 1 x3f9ce090 1} {x42aa0000 xc21e03db x3f49a6a0 1 x3f49a6a0 1} {x42ac0000 xc21cd79d -} {x42ae0000 xc21df9e2 xbf46aa60 1 xbf46aa60 1} {x42b00000 xc2230cf0 xbfb4b060 1 xbfb4b060 1} {x42b20000 xc22944e8 xbfcdd4c0 1 xbfcdd4c0 1} {x42b40000 xc22fea3c xbfe7edf0 1 xbfe7edf0 1} {x42b60000 xc237c3c7 xbfee2090 1 xbfee2090 1} {x42b80000 xc23ecc45 xbfe2d320 1 xbfe2d320 1} {x42ba0000 xc245f0f9 xbfe9a840 1 xbfe9a840 1} {x42bc0000 xc24d66c9 xbff48040 1 xbff48040 1} {x42be0000 xc25538fd xc0027be0 1 xc0027be0 1} {x42c00000 xc25db645 xc00d5df0 1 xc00d5df0 1} {x42c20000 xc266e4bb -} {x42c40000 xc26594db x3eae08c0 1 x3eae08c0 1} {x42c60000 xc2642c98 x3efcd000 1 x3efcd000 1} {x42c80000 xc261a19b x3f112220 1 x3f112220 1} {x42ca0000 xc25fa387 x3f20ef40 1 x3f20ef40 1} {x42cc0000 xc25c9a21 x3f3a9580 1 x3f3a9580 1} {x42ce0000 xc259cedb x3f0ab5e0 1 x3f0ab5e0 1} {x42d00000 xc2584472 x3e8796c0 1 x3e8796c0 1} {x42d20000 xc257b080 -} {x42d40000 xc257ec73 -} {x42d60000 xc256bd09 -} {x42d80000 xc2581b69 -} {x42da0000 xc2571c73 x3ec80ec0 1 x3ec80ec0 1} {x42dc0000 xc254fb2e x3f5292e0 1 x3f5292e0 1} {x42de0000 xc25087dc x3faf9710 1 x3faf9710 1} {x42e00000 xc24a01bd x3fd9e5e0 1 x3fd9e5e0 1} {x42e20000 xc242e97e x400ccb78 1 x400ccb78 1} {x42e40000 xc238684e x401c0000 1 x401c0000 1} {x42e60000 xc22f697e x401d50c8 1 x401d50c8 1} {x42e80000 xc224be35 x402874f0 1 x402874f0 1} {x42ea0000 xc21a5ae0 x403b9498 1 x403b9498 1} {x42ec0000 xc20d4ba2 x405cf408 1 x405cf408 1} {x42ee0000 xc1fd78be x40721d44 1 x40721d44 1} {x42f00000 xc1de0ff3 x40847fb2 1 x40847fb2 1} {x42f20000 xc1bb38e5 x408b8b2c 1 x408b8b2c 1} {x42f40000 xc1984a5d x4092cbe2 1 x4092cbe2 1} {x42f60000 xc163a5e8 x4099b91b 1 x4099b91b 1} {x42f80000 xc116db9f x40974d14 1 x40974d14 1} {x42fa0000 xc098b1a8 x4096db9f 1 x4096db9f 1} {x42fc0000 0 x409e20c2 1 x409e20c2 1} {x42fe0000 x40a38fdd x409e4843 1 x409e4843 1} {x43000000 x411e4843 x40941d74 1 x40941d74 1} {x43010000 x4165e563 x408b9285 1 x408b9285 1} {x43020000 x4194ed64 x40847f0d 1 x40847f0d 1} {x43030000 x41b53238 x406f8060 1 x406f8060 1} {x43040000 x41d0cd7c x40575d78 1 x40575d78 1} {x43050000 x41eb0996 x404a9778 1 x404a9778 1} {x43060000 x4201b9ad x4025d818 1 x4025d818 1} {x43070000 x420a3fce x3ff4cfd0 1 x3ff4cfd0 1} {x43080000 x421106aa x3fcd6650 1 x3fcd6650 1} {x43090000 x42171633 x3fcac5a0 1 x3fcac5a0 1} {x430a0000 x421db304 x3fba3590 1 x3fba3590 1} {x430b0000 x4222b98c x3fb13ec0 1 x3fb13ec0 1} {x430c0000 x4228c6f0 x3fccb6a0 1 x3fccb6a0 1} {x430d0000 x422f84f6 x3fc38f70 1 x3fc38f70 1} {x430e0000 x4234ffe7 x3fd48e10 1 x3fd48e10 1} {x430f0000 x423ccdd7 x3ffff060 1 x3ffff060 1} {x43100000 x4244feed x40054188 1 x40054188 1} {x43110000 x424d7608 x40086c98 1 x40086c98 1} {x43120000 x42560c80 x400005c0 1 x400005c0 1} {x43130000 x425d76c0 x3fc64180 1 x3fc64180 1} {x43140000 x42627098 x3f658080 1 x3f658080 1} {x43150000 x4264a2c4 -} {x43160000 x4261b45b xbf8cb3b0 1 0 1}} {{x42540000 x4447edba 0 1 xc1170a70 1} {x42580000 x44459b39 xc10fcbe0 1 xc10fcbe0 1} {x425c0000 x44436f5b xc11289a0 1 xc11289a0 1} {x42600000 x444106ec xc13243c0 1 xc13243c0 1} {x42640000 x443ddd3d xc158cc40 1 xc158cc40 1} {x42680000 x443a408a xc16da5a0 1 xc16da5a0 1} {x426c0000 x44367010 xc15f78e0 1 xc15f78e0 1} {x42700000 x443344c3 xc14db0c0 1 xc14db0c0 1} {x42740000 x4430028a xc1584200 1 xc1584200 1} {x42780000 x442c82b3 xc16bb980 1 xc16bb980 1} {x427c0000 x4428a4be xc17cdc80 1 xc17cdc80 1} {x42800000 x44249bcf xc1801270 1 xc1801270 1} {x42820000 x4420a397 xc17d5020 1 xc17d5020 1} {x42840000 x441cb14e xc1800ed0 1 xc1800ed0 1} {x42860000 x4418a2aa xc17ed680 1 xc17ed680 1} {x42880000 x4414ba9a xc1771e80 1 xc1771e80 1} {x428a0000 x4410e9b6 xc1763800 1 xc1763800 1} {x428c0000 x440d08da xc18144b0 1 xc18144b0 1} {x428e0000 x4408d56b xc189a970 1 xc189a970 1} {x42900000 x44046e43 xc18b2d70 1 xc18b2d70 1} {x42920000 x44002294 xc1897090 1 xc1897090 1} {x42940000 x43f7ae74 xc18a62f0 1 xc18a62f0 1} {x42960000 x43eef8ca xc1893448 1 xc1893448 1} {x42980000 x43e687eb xc1799e50 1 xc1799e50 1} {x429a0000 x43df5ee5 xc164acf0 1 xc164acf0 1} {x429c0000 x43d83d1c xc15a13e0 1 xc15a13e0 1} {x429e0000 x43d1bda7 xc154e1e0 1 xc154e1e0 1} {x42a00000 x43caeefe xc16144b0 1 xc16144b0 1} {x42a20000 x43c3a95c xc16e1e00 1 xc16e1e00 1} {x42a40000 x43bc0d1e xc1764fc0 1 xc1764fc0 1} {x42a60000 x43b44460 xc1791ec0 1 xc1791ec0 1} {x42a80000 x43ac7b32 xc17a5590 1 xc17a5590 1} {x42aa0000 x43a49f07 xc1731430 1 xc1731430 1} {x42ac0000 x439d49ef xc165f2e0 1 xc165f2e0 1} {x42ae0000 x43963fd9 xc15f1f30 1 xc15f1f30 1} {x42b00000 x438f57fc xc1614080 1 xc1614080 1} {x42b20000 x43882bd1 xc164ee30 1 xc164ee30 1} {x42b40000 x43810919 xc165a3b8 1 xc165a3b8 1} {x42b60000 x4373a32b xc169fb70 1 xc169fb70 1} {x42b80000 x4364d2c4 xc16ca878 1 xc16ca878 1} {x42ba0000 x43560e1c xc166cfe8 1 xc166cfe8 1} {x42bc0000 x4347f8c7 xc1593ca8 1 xc1593ca8 1} {x42be0000 x433ae687 xc145db58 1 xc145db58 1} {x42c00000 x432f3d5c xc130bdc0 1 xc130bdc0 1} {x42c20000 x4324cecf xc11ccf40 1 xc11ccf40 1} {x42c40000 x431ba374 xc10ecf88 1 xc10ecf88 1} {x42c60000 x4312f4de xc10e7230 1 xc10e7230 1} {x42c80000 x4309d52e xc10cf0b8 1 xc10cf0b8 1} {x42ca0000 x430156c7 xc10940e8 1 xc10940e8 1} {x42cc0000 x42f15a22 xc1071ed0 1 xc1071ed0 1} {x42ce0000 x42e0e5da xc0fef650 1 xc0fef650 1} {x42d00000 x42d17b58 xc0eedab0 1 xc0eedab0 1} {x42d20000 x42c30a84 xc0dc32d0 1 xc0dc32d0 1} {x42d40000 x42b5f4fe xc0ccbb68 1 xc0ccbb68 1} {x42d60000 x42a97317 xc0b73c50 1 xc0b73c50 1} {x42d80000 x429f0d74 xc0b64d90 1 xc0b64d90 1} {x42da0000 x4292a965 xc0d01538 1 xc0d01538 1} {x42dc0000 x42850acd xc0d61a60 1 xc0d61a60 1} {x42de0000 x426fcc32 xc0c4a740 1 xc0c4a740 1} {x42e00000 x4258ebca xc0abfdec 1 xc0abfdec 1} {x42e20000 x4244ccb7 xc09b5d90 1 xc09b5d90 1} {x42e40000 x42321466 xc0915c68 1 xc0915c68 1} {x42e60000 x4220759d xc083f04c 1 xc083f04c 1} {x42e80000 x42111853 xc0624f60 1 xc0624f60 1} {x42ea0000 x42042bb1 xc05f7770 1 xc05f7770 1} {x42ec0000 x41ea52ca xc068804c 1 xc068804c 1} {x42ee0000 x41ce374f xc062e158 1 xc062e158 1} {x42f00000 x41b19a74 xc08129c0 1 xc08129c0 1} {x42f20000 x418da26f xc087ff0d 1 xc087ff0d 1} {x42f40000 x415b35db xc0733a04 1 xc0733a04 1} {x42f60000 x4121a7dc xc06bd90f 1 xc06bd90f 1} {x42f80000 x40ca92a7 xc067c37c 1 xc067c37c 1} {x42fa0000 x40371878 xc04a92a7 1 xc04a92a7 1} {x42fc0000 0 xc03bc74e 1 xc03bc74e 1} {x42fe0000 xc0407624 xc0329a0d 1 xc0329a0d 1} {x43000000 xc0b29a0d xc02fc3b8 1 xc02fc3b8 1} {x43010000 xc107ff65 xc03065d3 1 xc03065d3 1} {x43020000 xc1317ff0 xc013ff32 1 xc013ff32 1} {x43030000 xc151fefe xbfe230d0 1 xbfe230d0 1} {x43040000 xc16a0c24 xbfc82558 1 xbfc82558 1} {x43050000 xc182042a xbfa42020 1 xbfa42020 1} {x43060000 xc1898a16 xbf6a07c0 1 xbf6a07c0 1} {x43070000 xc190a4a6 xbf0ac580 1 xbf0ac580 1} {x43080000 xc192366e -} {x43090000 xc18fdd60 -} {x430a0000 xc1947629 xbefc9120 1 xbefc9120 1} {x430b0000 xc197c1e9 -} {x430c0000 xc196e5a5 x3dac6700 1 x3dac6700 1} {x430d0000 xc196691b -} {x430e0000 xc197a044 xbd308800 1 xbd308800 1} {x430f0000 xc197bdb0 xbd308800 1 xbd308800 1} {x43100000 xc199c91c -} {x43110000 xc19726a9 x3e9d0ec0 1 x3e9d0ec0 1} {x43120000 xc194e0a6 x3e66a7c0 1 x3e66a7c0 1} {x43130000 xc1938c0a -} {x43140000 xc1972b4d xbf377780 1 xbf377780 1} {x43150000 xc19f0382 xc001a53c 1 xc001a53c 1} {x43160000 xc1b7949c xc065fa9a 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke13 262656 bezier {cc {f 8224} {p {0 0 1} {x44dbd171 x44283365 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke14 262656 bezier {cc {f 8224} {p {0 0 1} {x44dbd171 x44283365 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc31627c4 0 1 x408079b0 1} {x42580000 xc311eaac x4095f5a0 1 x4095f5a0 1} {x425c0000 xc30cc86a x40ae04e0 1 x40ae04e0 1} {x42600000 xc3070a5e x40bb34d0 1 x40bb34d0 1} {x42640000 xc301151d x40d41380 1 x40d41380 1} {x42680000 xc2f3924c x40ddb8e8 1 x40ddb8e8 1} {x426c0000 xc2e6731d x40b436b0 1 x40b436b0 1} {x42700000 xc2dd0b76 x40b07fe8 1 x40b07fe8 1} {x42740000 xc2d06320 x40be9688 1 x40be9688 1} {x42780000 xc2c538a5 x40bad4e8 1 x40bad4e8 1} {x427c0000 xc2b90883 x40c1eb70 1 x40c1eb70 1} {x42800000 xc2acfb37 x40c28ae8 1 x40c28ae8 1} {x42820000 xc2a0b726 x40b0bfe8 1 x40b0bfe8 1} {x42840000 xc296e33a x408d0f98 1 x408d0f98 1} {x42860000 xc28f1533 x40826f98 1 x40826f98 1} {x42880000 xc2869547 x40933b5c 1 x40933b5c 1} {x428a0000 xc2795b8f x405b7310 1 x405b7310 1} {x428c0000 xc271bc2c x405556e0 1 x405556e0 1} {x428e0000 xc25eb0b3 x409cc658 1 x409cc658 1} {x42900000 xc24a8a96 x40a0a678 1 x40a0a678 1} {x42920000 xc2368715 x409c3aa4 1 x409c3aa4 1} {x42940000 xc2237bed x40849260 1 x40849260 1} {x42960000 xc215627d x405c56f0 1 x405c56f0 1} {x42980000 xc207f10f x40639600 1 x40639600 1} {x429a0000 xc1f1df7a x40562d94 1 x40562d94 1} {x429c0000 xc1da56b9 x400383cc 1 x400383cc 1} {x429e0000 xc1d0fe87 x3f901b70 1 x3f901b70 1} {x42a00000 xc1c8534b x3f834230 1 x3f834230 1} {x42a20000 xc1c09641 x3f99a828 1 x3f99a828 1} {x42a40000 xc1b51e46 x3fab4568 1 x3fab4568 1} {x42a60000 xc1ab2d94 x3f5fabd0 1 x3f5fabd0 1} {x42a80000 xc1a72389 x3e4e6a00 1 x3e4e6a00 1} {x42aa0000 xc1a699ed -} {x42ac0000 xc1a761f8 xbe960840 1 xbe960840 1} {x42ae0000 xc1b077fd xbfc222f8 1 xbfc222f8 1} {x42b00000 xc1bfa657 xc000d9f4 1 xc000d9f4 1} {x42b20000 xc1d0ae7a xc0034e04 1 xc0034e04 1} {x42b40000 xc1e079d8 xc00c0f64 1 xc00c0f64 1} {x42b60000 xc1f3b253 xc0100050 1 xc0100050 1} {x42b80000 xc2023cf6 xc00667b4 1 xc00667b4 1} {x42ba0000 xc20aa620 xc003d488 1 xc003d488 1} {x42bc0000 xc212b787 xc00da618 1 xc00da618 1} {x42be0000 xc21c5ae3 xc026c0a8 1 xc026c0a8 1} {x42c00000 xc2278f9c xc02dc7a0 1 xc02dc7a0 1} {x42c20000 xc23213d7 xbf3340c0 1 xbf3340c0 1} {x42c40000 xc23302d8 -} {x42c60000 xc2329388 x3df34800 1 x3df34800 1} {x42c80000 xc2320f90 x3e6b3280 1 x3e6b3280 1} {x42ca0000 xc230bd23 x3e676280 1 x3e676280 1} {x42cc0000 xc23040cb -} {x42ce0000 xc2307612 -} {x42d00000 xc22ff53f -} {x42d20000 xc2317438 -} {x42d40000 xc230f3e2 -} {x42d60000 xc2326717 -} {x42d80000 xc2301d6b x3ed76c80 1 x3ed76c80 1} {x42da0000 xc22f0965 x3eba59c0 1 x3eba59c0 1} {x42dc0000 xc22d3404 x3f154b20 1 x3f154b20 1} {x42de0000 xc22a5f0c x3f513ea0 1 x3f513ea0 1} {x42e00000 xc226aa0f x3f9e4c50 1 x3f9e4c50 1} {x42e20000 xc2207a47 x3fbc75d0 1 x3fbc75d0 1} {x42e40000 xc21ae2b2 x3fd27e70 1 x3fd27e70 1} {x42e60000 xc2135260 x40000c68 1 x40000c68 1} {x42e80000 xc20ae125 x3ffef340 1 x3ffef340 1} {x42ea0000 xc203632c x400a9ae0 1 x400a9ae0 1} {x42ec0000 xc1f31b92 x4027d670 1 x4027d670 1} {x42ee0000 xc1dcd0bc x404172f4 1 x404172f4 1} {x42f00000 xc1c2bed5 x405f2d9c 1 x405f2d9c 1} {x42f20000 xc1a50555 x406df2a0 1 x406df2a0 1} {x42f40000 xc187422d x407d6afe 1 x407d6afe 1} {x42f60000 xc14b552b x4083fa61 1 x4083fa61 1} {x42f80000 xc10a89f9 x4088d8b0 1 x4088d8b0 1} {x42fa0000 xc084f8f7 x408a89f9 1 x408a89f9 1} {x42fc0000 0 x4086dcae 1 x4086dcae 1} {x42fe0000 x4088c064 x408ad034 1 x408ad034 1} {x43000000 x410ad034 x4083bedf 1 x4083bedf 1} {x43010000 x41481f11 x406ee95c 1 x406ee95c 1} {x43020000 x41812271 x4067ef92 1 x4067ef92 1} {x43030000 x419e0b6d x404ba748 1 x404ba748 1} {x43040000 x41b40c43 x403a7c78 1 x403a7c78 1} {x43050000 x41ccaa8b x402e99e4 1 x402e99e4 1} {x43060000 x41dfb2bc x4013884c 1 x4013884c 1} {x43070000 x41f18c9e x3fc20488 1 x3fc20488 1} {x43080000 x41f7f34d x3f6b72e0 1 x3f6b72e0 1} {x43090000 x420021e6 x3fa9cd98 1 x3fa9cd98 1} {x430a0000 x42069680 x3fbb0f20 1 x3fbb0f20 1} {x430b0000 x420bd2d8 x3fa47fc0 1 x3fa47fc0 1} {x430c0000 x4210de7c x3f9590b0 1 x3f9590b0 1} {x430d0000 x42152be3 x3f9aa810 1 x3f9aa810 1} {x430e0000 x421a88fd x3fc29c30 1 x3fc29c30 1} {x430f0000 x422155a6 x3fcd87f0 1 x3fcd87f0 1} {x43100000 x4227617c x3fccf2a0 1 x3fccf2a0 1} {x43110000 x422e24d0 x3fcbc5d0 1 x3fcbc5d0 1} {x43120000 x42341dd9 x3fbc2490 1 x3fbc2490 1} {x43130000 x4239e719 x3fac7e30 1 x3fac7e30 1} {x43140000 x423ee5bc x3f5932e0 1 x3f5932e0 1} {x43150000 x4240b0b0 -} {x43160000 x423dc14b xbf8ce2f0 1 0 1}} {{x42540000 x4444e6dc 0 1 xc1133b00 1} {x42580000 x44429d59 xc110ac40 1 xc110ac40 1} {x425c0000 x4440617a xc1126280 1 xc1126280 1} {x42600000 x443e0a45 xc12e4a40 1 xc12e4a40 1} {x42640000 x443aef28 xc1566ea0 1 xc1566ea0 1} {x42680000 x443756d0 xc16ca000 1 xc16ca000 1} {x426c0000 x44338a28 xc153ab80 1 xc153ab80 1} {x42700000 x4430b974 xc1426600 1 xc1426600 1} {x42740000 x442d76f8 xc1585340 1 xc1585340 1} {x42780000 x4429f6da xc1656ba0 1 xc1656ba0 1} {x427c0000 x44264b9b xc1700b60 1 xc1700b60 1} {x42800000 x4422767f xc179c660 1 xc179c660 1} {x42820000 x441e7d68 xc17d7c20 1 xc17d7c20 1} {x42840000 x441a8a9e xc17a2820 1 xc17a2820 1} {x42860000 x4416ac27 xc173eca0 1 xc173eca0 1} {x42880000 x4412eb39 xc1724f80 1 xc1724f80 1} {x428a0000 x440f19ab xc15e8160 1 xc15e8160 1} {x428c0000 x440bf72e xc16a4320 1 xc16a4320 1} {x428e0000 x4407c792 xc1890c50 1 xc1890c50 1} {x42900000 x44036669 xc18aa228 1 xc18aa228 1} {x42920000 x43fe3adf xc18903a8 1 xc18903a8 1} {x42940000 x43f5ac5d xc183bc78 1 xc183bc78 1} {x42960000 x43edc350 xc17633f0 1 xc17633f0 1} {x42980000 x43e6491e xc169ac70 1 xc169ac70 1} {x429a0000 x43df2889 xc1571c20 1 xc1571c20 1} {x429c0000 x43d8d75c xc14cf9b0 1 xc14cf9b0 1} {x429e0000 x43d258ee xc14fbd30 1 xc14fbd30 1} {x42a00000 x43cbdb89 xc1558ee0 1 xc1558ee0 1} {x42a20000 x43c50000 xc1666fc0 1 xc1666fc0 1} {x42a40000 x43bd748d xc175d380 1 xc175d380 1} {x42a60000 x43b5a2c8 xc176d5f0 1 xc176d5f0 1} {x42a80000 x43ae072e xc172d740 1 xc172d740 1} {x42aa0000 x43a67554 xc16cc2f0 1 xc16cc2f0 1} {x42ac0000 x439f3aff xc16244c0 1 xc16244c0 1} {x42ae0000 x43985108 xc15d8840 1 xc15d8840 1} {x42b00000 x4391627b xc15a8870 1 xc15a8870 1} {x42b20000 x438aa881 xc15f6ec0 1 xc15f6ec0 1} {x42b40000 x43836b8f xc165c180 1 xc165c180 1} {x42b60000 x437898d2 xc164a6a0 1 xc164a6a0 1} {x42b80000 x436a424a xc1672af8 1 xc1672af8 1} {x42ba0000 x435bb373 xc16388c8 1 xc16388c8 1} {x42bc0000 x434dd131 xc156abc0 1 xc156abc0 1} {x42be0000 x4340ddfb xc140fd90 1 xc140fd90 1} {x42c00000 x4335b17f xc12e7e98 1 xc12e7e98 1} {x42c20000 x432b0e28 xc11b74f8 1 xc11b74f8 1} {x42c40000 x432242e0 xc10ce480 1 xc10ce480 1} {x42c60000 x43197198 xc10e4400 1 xc10e4400 1} {x42c80000 x43107a60 xc10c9620 1 xc10c9620 1} {x42ca0000 x4307ded4 xc1079f20 1 xc1079f20 1} {x42cc0000 x42ff0cf8 xc1030d58 1 xc1030d58 1} {x42ce0000 x42eefa52 xc1036cc4 1 xc1036cc4 1} {x42d00000 x42de31c7 xc0edf568 1 xc0edf568 1} {x42d20000 x42d13ba5 xc0d05ed0 1 xc0d05ed0 1} {x42d40000 x42c425ed xc0d13d00 1 xc0d13d00 1} {x42d60000 x42b71405 xc0d323d8 1 xc0d323d8 1} {x42d80000 x42a9c172 xc0d2eeb0 1 xc0d2eeb0 1} {x42da0000 x429cb62f xc0d9eed0 1 xc0d9eed0 1} {x42dc0000 x428e8398 xc0d84aa8 1 xc0d84aa8 1} {x42de0000 x4281acda xc0c4f128 1 xc0c4f128 1} {x42e00000 x426bcae6 xc0b006d0 1 xc0b006d0 1} {x42e20000 x42575800 xc09b3358 1 xc09b3358 1} {x42e40000 x4244fe10 xc0914c2c 1 xc0914c2c 1} {x42e60000 x423304f5 xc0845ff8 1 xc0845ff8 1} {x42e80000 x4223e612 xc0685d30 1 xc0685d30 1} {x42ea0000 x4215f94f xc06048c0 1 xc06048c0 1} {x42ec0000 x4207dcfa xc0677d38 1 xc0677d38 1} {x42ee0000 x41f21350 xc0749af4 1 xc0749af4 1} {x42f00000 x41d29337 xc087f97a 1 xc087f97a 1} {x42f20000 x41ae1693 xc095179e 1 xc095179e 1} {x42f40000 x41880768 xc08f7391 1 xc08f7391 1} {x42f60000 x414cb995 xc08a0f89 1 xc08a0f89 1} {x42f80000 x4105ff47 xc08c57ac 1 xc08c57ac 1} {x42fa0000 x4080c3d2 xc085ff47 1 xc085ff47 1} {x42fc0000 0 xc06e811d 1 xc06e811d 1} {x42fe0000 xc05b7a96 xc06f65a8 1 xc06f65a8 1} {x43000000 xc0ef65a8 xc06b3b91 1 xc06b3b91 1} {x43010000 xc12c7c6e xc05d891e 1 xc05d891e 1} {x43020000 xc1667763 xc0461714 1 xc0461714 1} {x43030000 xc187c3fc xc015d156 1 xc015d156 1} {x43040000 xc198b007 xc0221a0c 1 xc0221a0c 1} {x43050000 xc1b04a7f xc0239e64 1 xc0239e64 1} {x43060000 xc1c197a0 xc01f9d8c 1 xc01f9d8c 1} {x43070000 xc1d831e2 xbfc91560 1 xbfc91560 1} {x43080000 xc1dc6254 xbf5e9940 1 xbf5e9940 1} {x43090000 xc1e61b76 xbf87cca8 1 xbf87cca8 1} {x430a0000 xc1ed5be9 xbf93f278 1 xbf93f278 1} {x430b0000 xc1f899c5 xbf9f4cf8 1 xbf9f4cf8 1} {x430c0000 xc200a2c4 xbd4ff000 1 xbd4ff000 1} {x430d0000 xc200b418 xbd4ff000 1 xbd4ff000 1} {x430e0000 xc2036717 xbf0838a0 1 xbf0838a0 1} {x430f0000 xc204f5dd xbee59b40 1 xbee59b40 1} {x43100000 xc206fd84 xbf2f6b80 1 xbf2f6b80 1} {x43110000 xc20a7139 -} {x43120000 xc209e4e9 -} {x43130000 xc20b4b18 xbee76640 1 xbee76640 1} {x43140000 xc20d8282 xbf52bfa0 1 xbf52bfa0 1} {x43150000 xc211e115 xc005aeb8 1 xc005aeb8 1} {x43160000 xc21e3859 xc0655704 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke15 262656 bezier {cc {f 8224} {p {0 0 1} {x43db2581 x441a243a 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke16 262656 bezier {cc {f 8224} {p {0 0 1} {x43db2581 x441a243a 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc39622a3 0 1 x408158b0 1} {x42580000 xc393f556 x409f4860 1 x409f4860 1} {x425c0000 xc3912860 x40c5f500 1 x40c5f500 1} {x42600000 xc38dc5ae x40e096a0 1 x40e096a0 1} {x42640000 xc38a23ab x40e411e0 1 x40e411e0 1} {x42680000 xc386a51f x40e0cbe0 1 x40e0cbe0 1} {x426c0000 xc3831d4c x40e23d50 1 x40e23d50 1} {x42700000 xc37f2669 x40e56480 1 x40e56480 1} {x42740000 xc377e450 x40ec6910 1 x40ec6910 1} {x42780000 xc3705fd8 x40ee5010 1 x40ee5010 1} {x427c0000 xc368ff4f x41005560 1 x41005560 1} {x42800000 xc360552c x4104f0a0 1 x4104f0a0 1} {x42820000 xc358613b x40fb13b0 1 x40fb13b0 1} {x42840000 xc350a3f1 x40f48d00 1 x40f48d00 1} {x42860000 xc349186b x40c97b10 1 x40c97b10 1} {x42880000 xc3440c40 x40cb72e0 1 x40cb72e0 1} {x428a0000 xc33c613d x40b71b50 1 x40b71b50 1} {x428c0000 xc3389a8b x406e1560 1 x406e1560 1} {x428e0000 xc334f092 x407703c0 1 x407703c0 1} {x42900000 xc330e26d x408229c0 1 x408229c0 1} {x42920000 xc32ccdf6 x3ff95100 1 x3ff95100 1} {x42940000 xc32c27c0 x3f2b3f80 1 x3f2b3f80 1} {x42960000 xc32b7777 x3f5aa400 1 x3f5aa400 1} {x42980000 xc32a7278 x40129340 1 x40129340 1} {x429a0000 xc326e2dd x402a5ce0 1 x402a5ce0 1} {x429c0000 xc3251f91 x3fb53e00 1 x3fb53e00 1} {x429e0000 xc3240de5 x3fcb2a00 1 x3fcb2a00 1} {x42a00000 xc321f2e9 x401b7a60 1 x401b7a60 1} {x42a20000 xc31f3212 x403333c0 1 x403333c0 1} {x42a40000 xc31c594b x403b7f60 1 x403b7f60 1} {x42a60000 xc3195617 x4044ab00 1 x4044ab00 1} {x42a80000 xc31633f3 x404cfe20 1 x404cfe20 1} {x42aa0000 xc312ee26 x4036d920 1 x4036d920 1} {x42ac0000 xc3107d2a x3febe5c0 1 x3febe5c0 1} {x42ae0000 xc30f3e8f x3f687b80 1 x3f687b80 1} {x42b00000 xc30eac33 x3e532c00 1 x3e532c00 1} {x42b20000 xc30e9a9a -} {x42b40000 xc30ec4bc -} {x42b60000 xc30eb763 -} {x42b80000 xc30edab7 -} {x42ba0000 xc30ecc23 x3da79800 1 x3da79800 1} {x42bc0000 xc30eb0d1 x3e9c1800 1 x3e9c1800 1} {x42be0000 xc30e300b x3ec82c00 1 x3ec82c00 1} {x42c00000 xc30de8a5 x3eacfb00 1 x3eacfb00 1} {x42c20000 xc30d8310 x3f985f80 1 x3f985f80 1} {x42c40000 xc309b0ee x40668ce0 1 x40668ce0 1} {x42c60000 xc3064ea9 x4064d3c0 1 x4064d3c0 1} {x42c80000 xc3028a50 x407d21d0 1 x407d21d0 1} {x42ca0000 xc2fccb35 x4083d710 1 x4083d710 1} {x42cc0000 xc2f499be x407fd620 1 x407fd620 1} {x42ce0000 xc2eccdd3 x4072eb60 1 x4072eb60 1} {x42d00000 xc2e56b08 x406355c0 1 x406355c0 1} {x42d20000 xc2de9877 x405b2620 1 x405b2620 1} {x42d40000 xc2d7b8a6 x4051b790 1 x4051b790 1} {x42d60000 xc2d17cfe x404c5c60 1 x404c5c60 1} {x42d80000 xc2caf2e0 x404c4db0 1 x404c4db0 1} {x42da0000 xc2c4b823 x404b1440 1 x404b1440 1} {x42dc0000 xc2be419c x405b3100 1 x405b3100 1} {x42de0000 xc2b70513 x406e5e40 1 x406e5e40 1} {x42e00000 xc2af5bb8 x4079afd0 1 x4079afd0 1} {x42e20000 xc2a76a16 x40814a50 1 x40814a50 1} {x42e40000 xc29f326e x4085f0b8 1 x4085f0b8 1} {x42e60000 xc296abff x4089b160 1 x4089b160 1} {x42e80000 xc28dfc42 x4093c2a8 1 x4093c2a8 1} {x42ea0000 xc28433aa x40a2d0d4 1 x40a2d0d4 1} {x42ec0000 xc273444f x40b7e96c 1 x40b7e96c 1} {x42ee0000 xc25a6cf9 x40cce508 1 x40cce508 1} {x42f00000 xc2400b0d x40e06b28 1 x40e06b28 1} {x42f20000 xc222522f x40f3e758 1 x40f3e758 1} {x42f40000 xc2031137 x41007ae6 1 x41007ae6 1} {x42f60000 xc1c42978 x4101ef1b 1 x4101ef1b 1} {x42f80000 xc1843353 x4102b93f 1 x4102b93f 1} {x42fa0000 xc102e072 x41043353 1 x41043353 1} {x42fc0000 0 x4103d2c2 1 x4103d2c2 1} {x42fe0000 x4104c513 x41032f25 1 x41032f25 1} {x43000000 x41832f25 x410022e8 1 x410022e8 1} {x43010000 x41c28572 x40f7a05a 1 x40f7a05a 1} {x43020000 x41feff52 x40f0454c 1 x40f0454c 1} {x43030000 x421d540c x40e45780 1 x40e45780 1} {x43040000 x42389589 x40cb99bc 1 x40cb99bc 1} {x43050000 x42503a7b x40b430cc 1 x40b430cc 1} {x43060000 x4265a1bc x40a13e94 1 x40a13e94 1} {x43070000 x42788a20 x408fea78 1 x408fea78 1} {x43080000 x4284ce2d x40825030 1 x40825030 1} {x43090000 x428c8f16 x406d50b0 1 x406d50b0 1} {x430a0000 x4293a338 x405eeea0 1 x405eeea0 1} {x430b0000 x429a7e00 x404f3e10 1 x404f3e10 1} {x430c0000 x42a09719 x403d3510 1 x403d3510 1} {x430d0000 x42a65151 x40412b30 1 x40412b30 1} {x430e0000 x42aca9cc x404bbce0 1 x404bbce0 1} {x430f0000 x42b30d1f x4058c780 1 x4058c780 1} {x43100000 x42ba3644 x40660c00 1 x40660c00 1} {x43110000 x42c16ddf x405fbb50 1 x405fbb50 1} {x43120000 x42c831f9 x4056a550 1 x4056a550 1} {x43130000 x42ced834 x4043a900 1 x4043a900 1} {x43140000 x42d46c89 x40131de0 1 x40131de0 1} {x43150000 x42d80a12 x3fb00c40 1 x3fb00c40 1} {x43160000 x42d9eceb x3f3a1680 1 0 1}} {{x42540000 x44847c10 0 1 xc155ea20 1} {x42580000 x4482c158 xc16c3fc0 1 xc16c3fc0 1} {x425c0000 x4480cb11 xc18193c0 1 xc18193c0 1} {x42600000 x447d6974 xc184a500 1 xc184a500 1} {x42640000 x44794bd2 xc1836550 1 xc1836550 1} {x42680000 x4475331f xc18539e0 1 xc18539e0 1} {x426c0000 x4470f834 xc18bc090 1 xc18bc090 1} {x42700000 x446c7716 xc198de40 1 xc198de40 1} {x42740000 x44676a50 xc1a9dd40 1 xc1a9dd40 1} {x42780000 x4461d942 xc1bb1600 1 xc1bb1600 1} {x427c0000 x445bb8f0 xc1cb09f0 1 xc1cb09f0 1} {x42800000 x445528a3 xc1d3ca00 1 xc1d3ca00 1} {x42820000 x444e7c50 xc1d1e7a0 1 xc1d1e7a0 1} {x42840000 x44480a29 xc1ce91f0 1 xc1ce91f0 1} {x42860000 x44419331 xc1d0c0c0 1 xc1d0c0c0 1} {x42880000 x443afe1d xc1d5b1b0 1 xc1d5b1b0 1} {x428a0000 x44343816 xc1ce3260 1 xc1ce3260 1} {x428c0000 x442e1af7 xc1b6c890 1 xc1b6c890 1} {x428e0000 x4428cb8d xc1af02a0 1 xc1af02a0 1} {x42900000 x44232acd xc1b93eb0 1 xc1b93eb0 1} {x42920000 x441d37a2 xc1c2e100 1 xc1c2e100 1} {x42940000 x4416fcbd xc1c64770 1 xc1c64770 1} {x42960000 x4410d32b xc1c407e0 1 xc1c407e0 1} {x42980000 x440abc3f xc1b7f450 1 xc1b7f450 1} {x429a0000 x440553e6 xc1b1a7e0 1 xc1b1a7e0 1} {x429c0000 x43ff4382 xc1b5fbd0 1 xc1b5fbd0 1} {x429e0000 x43f3e852 xc1b27d10 1 xc1b27d10 1} {x42a00000 x43e8f3e0 xc1b1c850 1 xc1b1c850 1} {x42a20000 x43ddaf48 xc1b28330 1 xc1b28330 1} {x42a40000 x43d2a37a xc1b24bd8 1 xc1b24bd8 1} {x42a60000 x43c765cd xc1b4e030 1 xc1b4e030 1} {x42a80000 x43bc0774 xc1b50e70 1 xc1b50e70 1} {x42aa0000 x43b0c3ff xc1b154c0 1 xc1b154c0 1} {x42ac0000 x43a5dcdc xc1a9f778 1 xc1a9f778 1} {x42ae0000 x439b8510 xc1a4c838 1 xc1a4c838 1} {x42b00000 x439143d5 xc1a67490 1 xc1a67490 1} {x42b20000 x4386b67e xc1a731a0 1 xc1a731a0 1} {x42b40000 x4378bb42 xc1a854c8 1 xc1a854c8 1} {x42b60000 x436357ca xc1a86cd0 1 xc1a86cd0 1} {x42b80000 x434ea00e xc1a4f6fc 1 xc1a4f6fc 1} {x42ba0000 x433a1a0b xc19ec504 1 xc19ec504 1} {x42bc0000 x4326eecd xc1958b20 1 xc1958b20 1} {x42be0000 x4314b743 xc18c7dcc 1 xc18c7dcc 1} {x42c00000 x4303cf5a xc182cf10 1 xc182cf10 1} {x42c20000 x42e806fe xc172eb68 1 xc172eb68 1} {x42c40000 x42cae3da xc1653a08 1 xc1653a08 1} {x42c60000 x42aeb87c xc1605bac 1 xc1605bac 1} {x42c80000 x4292ccef xc162f628 1 xc162f628 1} {x42ca0000 x426bf5e4 xc167234a 1 xc167234a 1} {x42cc0000 x42320839 xc1649c90 1 xc1649c90 1} {x42ce0000 x41f34f38 xc157e4dd 1 xc157e4dd 1} {x42d00000 x418c2b95 xc143ffeb 1 xc143ffeb 1} {x42d20000 x40bd3d34 xc136250c 1 xc136250c 1} {x42d40000 xc0a7e5dd xc1261b16 1 xc1261b16 1} {x42d60000 xc16d9792 xc10eac9b 1 xc10eac9b 1} {x42d80000 xc1b8a612 xc0f8287a 1 xc0f8287a 1} {x42da0000 xc1f2e006 xc0da5f7c 1 xc0da5f7c 1} {x42dc0000 xc212eae8 xc0b5e610 1 xc0b5e610 1} {x42de0000 xc226e987 xc080fcc8 1 xc080fcc8 1} {x42e00000 xc2332a1a xc00b18e8 1 xc00b18e8 1} {x42e20000 xc2384ca4 -} {x42e40000 xc237678b x3f2bd2c0 1 x3f2bd2c0 1} {x42e60000 xc2316c28 x400c4e88 1 x400c4e88 1} {x42e80000 xc225ddba x4050e328 1 x4050e328 1} {x42ea0000 xc2174fc3 x4068f540 1 x4068f540 1} {x42ec0000 xc208bf12 x406a96f0 1 x406a96f0 1} {x42ee0000 xc1f3f9ca x40709bf8 1 x40709bf8 1} {x42f00000 xc1d55726 x406ce438 1 x406ce438 1} {x42f20000 xc1b8c0bc x40663064 1 x40663064 1} {x42f40000 xc19bcb0d x4072b2e4 1 x4072b2e4 1} {x42f60000 xc1782806 x408a5bcc 1 x408a5bcc 1} {x42f80000 xc12d3a4e x409a9d98 1 x409a9d98 1} {x42fa0000 xc0bb14dd x40ad3a4e 1 x40ad3a4e 1} {x42fc0000 0 x40c2dd3e 1 x40c2dd3e 1} {x42fe0000 x40caa59f x40c35fc6 1 x40c35fc6 1} {x43000000 x41435fc6 x40c07d0e 1 x40c07d0e 1} {x43010000 x4192e7ef x40cafdbc 1 x40cafdbc 1} {x43020000 x41c72ec1 x40da5e86 1 x40da5e86 1} {x43030000 x42000b99 x40e366a2 1 x40e366a2 1} {x43040000 x421c7109 x40e811ec 1 x40e811ec 1} {x43050000 x423a1014 x40ee4b0c 1 x40ee4b0c 1} {x43060000 x425803cc x40f79c2c 1 x40f79c2c 1} {x43070000 x4277f71f x41045808 1 x41045808 1} {x43080000 x428d17e8 x410c7d1e 1 x410c7d1e 1} {x43090000 x429f1ad7 x410dc8c0 1 x410dc8c0 1} {x430a0000 x42b08a18 x410a10bc 1 x410a10bc 1} {x430b0000 x42c19f06 x41063280 1 x41063280 1} {x430c0000 x42d216b8 x410846f4 1 x410846f4 1} {x430d0000 x42e3b0c3 x410dd1c4 1 x410dd1c4 1} {x430e0000 x42f58b29 x410cca3c 1 x410cca3c 1} {x430f0000 x430371a9 x410abf34 1 x410abf34 1} {x43100000 x430c1d7b x41083b50 1 x41083b50 1} {x43110000 x43147913 x41039630 1 x41039630 1} {x43120000 x431c9041 x40f6d910 1 x40f6d910 1} {x43130000 x4323e6a4 x40e57730 1 x40e57730 1} {x43140000 x432ae7b4 x40d50fa0 1 x40d50fa0 1} {x43150000 x4331379e x40a31d60 1 x40a31d60 1} {x43160000 x4335198a x40519b20 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke17 262656 bezier {cc {f 8224} {p {0 0 1} {x44dc19aa x4436d604 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke18 262656 bezier {cc {f 8224} {p {0 0 1} {x44dc19aa x4436d604 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc30f5199 0 1 x40801f88 1} {x42580000 xc30b175f x409596b0 1 x409596b0 1} {x425c0000 xc305f82e x40ada7e0 1 x40ada7e0 1} {x42600000 xc3003ce1 x40ba6b58 1 x40ba6b58 1} {x42640000 xc2f4a2f1 x40d3a5e8 1 x40d3a5e8 1} {x42680000 xc2e60505 x40de1f58 1 x40de1f58 1} {x426c0000 xc2d8df06 x40b3d128 1 x40b3d128 1} {x42700000 xc2cf8ae0 x40afde70 1 x40afde70 1} {x42740000 xc2c2e338 x40be9238 1 x40be9238 1} {x42780000 xc2b7b899 x40bacc98 1 x40bacc98 1} {x427c0000 xc2ab89a5 x40c1d8b0 1 x40c1d8b0 1} {x42800000 xc29f7d83 x40c263e0 1 x40c263e0 1} {x42820000 xc2933d29 x40b08bb8 1 x40b08bb8 1} {x42840000 xc2896c0c x405c0ba0 1 x405c0ba0 1} {x42860000 xc2857c6f x3fedc860 1 x3fedc860 1} {x42880000 xc281fdc9 x40174198 1 x40174198 1} {x428a0000 xc27810ab x40171278 1 x40171278 1} {x428c0000 xc2711943 x405129d8 1 x405129d8 1} {x428e0000 xc25deb70 x409da4a8 1 x409da4a8 1} {x42900000 xc249b019 x40a0d490 1 x40a0d490 1} {x42920000 xc235b64c x409c0e40 1 x409c0e40 1} {x42940000 xc222ac89 x4084366c 1 x4084366c 1} {x42960000 xc214a8b1 x405ad100 1 x405ad100 1} {x42980000 xc2075269 x40622394 1 x40622394 1} {x429a0000 xc1f0c87d x40564858 1 x40564858 1} {x429c0000 xc1d912bc x3fe45f78 1 x3fe45f78 1} {x429e0000 xc1d43c8e x3f558aa0 1 x3f558aa0 1} {x42a00000 xc1cbba12 x3f88aff0 1 x3f88aff0 1} {x42a20000 xc1c32690 x3fa76e38 1 x3fa76e38 1} {x42a40000 xc1b6cc4b x3fbf7788 1 x3fbf7788 1} {x42a60000 xc1ab379f x3f843100 1 x3f843100 1} {x42a80000 xc1a6462b x3efc2400 1 x3efc2400 1} {x42aa0000 xc1a3567f -} {x42ac0000 xc1a50d7f xbf24a000 1 xbf24a000 1} {x42ae0000 xc1af0565 xbfd6eab0 1 xbfd6eab0 1} {x42b00000 xc1bfead5 xc01c943c 1 xc01c943c 1} {x42b20000 xc1d62a74 xc02a3ea0 1 xc02a3ea0 1} {x42b40000 xc1ea7a7d xc02b0028 1 xc02b0028 1} {x42b60000 xc200753f xc02529ac 1 xc02529ac 1} {x42b80000 xc209e274 xc014ecd0 1 xc014ecd0 1} {x42ba0000 xc21312d9 xc012ca80 1 xc012ca80 1} {x42bc0000 xc21c3bc4 xc01b1b08 1 xc01b1b08 1} {x42be0000 xc226763a xc03ad5d8 1 xc03ad5d8 1} {x42c00000 xc233967f xc0412ce0 1 xc0412ce0 1} {x42c20000 xc23e9bd6 xbec8da80 1 xbec8da80 1} {x42c40000 xc23f21bd -} {x42c60000 xc23eab10 x3df1ed00 1 x3df1ed00 1} {x42c80000 xc23e2fd0 x3e838340 1 x3e838340 1} {x42ca0000 xc23c9d03 x3eb8e1c0 1 x3eb8e1c0 1} {x42cc0000 xc23b4c49 x3e4c4480 1 x3e4c4480 1} {x42ce0000 xc23b047a x3e407880 1 x3e407880 1} {x42d00000 xc239cb58 -} {x42d20000 xc23a512d -} {x42d40000 xc23a3cb2 -} {x42d60000 xc23ac348 -} {x42d80000 xc2391aa0 x3ef50340 1 x3ef50340 1} {x42da0000 xc236ef3b x3f10e8c0 1 x3f10e8c0 1} {x42dc0000 xc234935a x3f306560 1 x3f306560 1} {x42de0000 xc2316c10 x3f838810 1 x3f838810 1} {x42e00000 xc22c5ad9 x3fb24ea0 1 x3fb24ea0 1} {x42e20000 xc2264726 x3fb51530 1 x3fb51530 1} {x42e40000 xc2210986 x3fdc25d0 1 x3fdc25d0 1} {x42e60000 xc21884c9 x3ff4df00 1 x3ff4df00 1} {x42e80000 xc211bb96 x4006f168 1 x4006f168 1} {x42ea0000 xc207a69c x40210a08 1 x40210a08 1} {x42ec0000 xc1fb34aa x402fa3d8 1 x402fa3d8 1} {x42ee0000 xc1e36442 x403a8908 1 x403a8908 1} {x42f00000 xc1cc9268 x4057a134 1 x4057a134 1} {x42f20000 xc1ad7bf5 x407f68a0 1 x407f68a0 1} {x42f40000 xc18cb840 x4083cd81 1 x4083cd81 1} {x42f60000 xc1572a69 x4084d301 1 x4084d301 1} {x42f80000 xc1149d7f x4090c331 1 x4090c331 1} {x42fa0000 xc08cce70 x40949d7f 1 x40949d7f 1} {x42fc0000 0 x407d26d4 1 x407d26d4 1} {x42fe0000 x4060b0c7 x40734591 1 x40734591 1} {x43000000 x40f34591 x4079af22 1 x4079af22 1} {x43010000 x413503c3 x4065eb57 1 x4065eb57 1} {x43020000 x416c9874 x40652982 1 x40652982 1} {x43030000 x4193cc42 x40563404 1 x40563404 1} {x43040000 x41abd93b x404214fc 1 x404214fc 1} {x43050000 x41c45181 x40305230 1 x40305230 1} {x43060000 x41d7edc7 x40158cc4 1 x40158cc4 1} {x43070000 x41e9b4b2 x3fe38798 1 x3fe38798 1} {x43080000 x41f45eba x3fa9dfd0 1 x3fa9dfd0 1} {x43090000 x41fef0ac x3fbc5530 1 x3fbc5530 1} {x430a0000 x4205f4b0 x3fc51570 1 x3fc51570 1} {x430b0000 x420bc9ad x3fb9d0b0 1 x3fb9d0b0 1} {x430c0000 x421191bb x3fb54a20 1 x3fb54a20 1} {x430d0000 x42171e4f x3fb4dd60 1 x3fb4dd60 1} {x430e0000 x421cdf91 x3fcefc60 1 x3fcefc60 1} {x430f0000 x42240e15 x3fe414d0 1 x3fe414d0 1} {x43100000 x422b20de x3fe84610 1 x3fe84610 1} {x43110000 x42329276 x3fe72030 1 x3fe72030 1} {x43120000 x423992e1 x3fd85510 1 x3fd85510 1} {x43130000 x424017c7 x3fb63800 1 x3fb63800 1} {x43140000 x4244f661 x3f4a6320 1 x3f4a6320 1} {x43150000 x42466ae0 -} {x43160000 x42436fc1 xbf8f15d0 1 0 1}} {{x42540000 x444110e4 0 1 xc11334f0 1} {x42580000 x443ec781 xc110a060 1 xc110a060 1} {x425c0000 x443c8be1 xc1124720 1 xc1124720 1} {x42600000 x443a3548 xc12de020 1 xc12de020 1} {x42640000 x44371ce0 xc1564280 1 xc1564280 1} {x42680000 x44338334 xc16d08a0 1 xc16d08a0 1} {x426c0000 x442fb49b xc1539e20 1 xc1539e20 1} {x42700000 x442ce643 xc1421b40 1 xc1421b40 1} {x42740000 x4429a3c1 xc1585620 1 xc1585620 1} {x42780000 x44262392 xc1656c40 1 xc1656c40 1} {x427c0000 x4422785f xc17007c0 1 xc17007c0 1} {x42800000 x441ea354 xc179bac0 1 xc179bac0 1} {x42820000 x441aaa89 xc17d6cc0 1 xc17d6cc0 1} {x42840000 x4416b7ee xc1634380 1 xc1634380 1} {x42860000 x4413906d xc145cb00 1 xc145cb00 1} {x42880000 x44108996 xc14775c0 1 xc14775c0 1} {x428a0000 x440d54bf xc149a200 1 xc149a200 1} {x428c0000 x440a3c86 xc16925a0 1 xc16925a0 1} {x428e0000 x44060b92 xc1894950 1 xc1894950 1} {x42900000 x4401a7f1 xc18ad658 1 xc18ad658 1} {x42920000 x43fabc59 xc1892a28 1 xc1892a28 1} {x42940000 x43f22a9d xc183d430 1 xc183d430 1} {x42960000 x43ea41d3 xc1764650 1 xc1764650 1} {x42980000 x43e2c638 xc169fe60 1 xc169fe60 1} {x429a0000 x43dba1ed xc157f700 1 xc157f700 1} {x429c0000 x43d546c8 xc14c4220 1 xc14c4220 1} {x429e0000 x43ceddcb xc14e6710 1 xc14e6710 1} {x42a00000 x43c86057 xc1558d30 1 xc1558d30 1} {x42a20000 x43c184f8 xc1677550 1 xc1677550 1} {x42a40000 x43b9e902 xc176c5b0 1 xc176c5b0 1} {x42a60000 x43b2189d xc177af50 1 xc177af50 1} {x42a80000 x43aa6e0d xc1754cd0 1 xc1754cd0 1} {x42aa0000 x43a2c3d0 xc16d79e0 1 xc16d79e0 1} {x42ac0000 x439b966f xc15d7b60 1 xc15d7b60 1} {x42ae0000 x4394ec1a xc155e070 1 xc155e070 1} {x42b00000 x438e3868 xc154bc60 1 xc154bc60 1} {x42b20000 x4387a054 xc1586990 1 xc1586990 1} {x42b40000 x4380b1cf xc15dec58 1 xc15dec58 1} {x42b60000 x4373831d xc1621520 1 xc1621520 1} {x42b80000 x436520fa xc165eb50 1 xc165eb50 1} {x42ba0000 x4356c5b3 xc1605df8 1 xc1605df8 1} {x42bc0000 x4349153b xc1528a90 1 xc1528a90 1} {x42be0000 x433c7461 xc13f88b8 1 xc13f88b8 1} {x42c00000 x43312424 xc12db070 1 xc12db070 1} {x42c20000 x4326be53 xc119cfc0 1 xc119cfc0 1} {x42c40000 x431dea2c xc10bc368 1 xc10bc368 1} {x42c60000 x431545e6 xc10a4ef8 1 xc10a4ef8 1} {x42c80000 x430ca04d xc1095960 1 xc1095960 1} {x42ca0000 x43041aba xc1061650 1 xc1061650 1} {x42cc0000 x42f7bb06 xc1012154 1 xc1012154 1} {x42ce0000 x42e7ed1f xc0f88478 1 xc0f88478 1} {x42d00000 x42d8aa77 xc0e7bf20 1 xc0e7bf20 1} {x42d20000 x42caf53b xc0d3c6a8 1 xc0d3c6a8 1} {x42d40000 x42be31a2 xc0c5df18 1 xc0c5df18 1} {x42d60000 x42b23958 xc0c20c88 1 xc0c20c88 1} {x42d80000 x42a5f011 xc0c9b268 1 xc0c9b268 1} {x42da0000 x4299030b xc0d57888 1 xc0d57888 1} {x42dc0000 x428b4100 xc0d76308 1 xc0d76308 1} {x42de0000 x427c2d54 xc0c664f0 1 xc0c664f0 1} {x42e00000 x4264e8c4 xc0a90944 1 xc0a90944 1} {x42e20000 x4251eb03 xc097fcb4 1 xc097fcb4 1} {x42e40000 x423ee997 xc08f4d6c 1 xc08f4d6c 1} {x42e60000 x422e17a8 xc0734620 1 xc0734620 1} {x42e80000 x422080d3 xc0596758 1 xc0596758 1} {x42ea0000 x4212eabd xc0614a58 1 xc0614a58 1} {x42ec0000 x42045788 xc0700530 1 xc0700530 1} {x42ee0000 x41e9d42e xc0736b10 1 xc0736b10 1} {x42f00000 x41cbd44c xc080aef2 1 xc080aef2 1} {x42f20000 x41a97cb5 xc08bc6c0 1 xc08bc6c0 1} {x42f40000 x4185f0ec xc08c453a 1 xc08c453a 1} {x42f60000 x4146b430 xc08a2886 1 xc08a2886 1} {x42f80000 x4101b952 xc087bde6 1 xc087bde6 1} {x42fa0000 x407bd928 xc081b952 1 xc081b952 1} {x42fc0000 0 xc05cb0aa 1 xc05cb0aa 1} {x42fe0000 xc03d882d xc05482d0 1 xc05482d0 1} {x43000000 xc0d482d0 xc05e6e12 1 xc05e6e12 1} {x43010000 xc11e9914 xc04b1b92 1 xc04b1b92 1} {x43020000 xc14fcf31 xc036fb24 1 xc036fb24 1} {x43030000 xc17a16a6 xc01d0f1a 1 xc01d0f1a 1} {x43040000 xc18f2b5f xc01b39a0 1 xc01b39a0 1} {x43050000 xc1a3d9bb xc0166660 1 xc0166660 1} {x43060000 xc1b4c4f7 xc017f1b4 1 xc017f1b4 1} {x43070000 xc1c9d628 xbff54c30 1 xbff54c30 1} {x43080000 xc1d36e7d xbf9d8c48 1 xbf9d8c48 1} {x43090000 xc1dd87b1 xbf904e70 1 xbf904e70 1} {x430a0000 xc1e5784b xbf983f20 1 xbf983f20 1} {x430b0000 xc1f08f95 xbfafb5a0 1 xbfafb5a0 1} {x430c0000 xc1fb6eff xbf64ade0 1 xbf64ade0 1} {x430d0000 xc1feda73 xbf1699f0 1 xbf1699f0 1} {x430e0000 xc2026c4f xbf29bf70 1 xbf29bf70 1} {x430f0000 xc204bb35 xbf2925a0 1 xbf2925a0 1} {x43100000 xc207b57c xbf3dce40 1 xbf3dce40 1} {x43110000 xc20aa9a7 xbf02bae0 1 xbf02bae0 1} {x43120000 xc20bcb53 xbebfd500 1 xbebfd500 1} {x43130000 xc20da8fb xbf1e1a60 1 xbf1e1a60 1} {x43140000 xc210bc26 xbf847690 1 xbf847690 1} {x43150000 xc215f064 xc0119cd8 1 xc0119cd8 1} {x43160000 xc222efc1 xc06f224c 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke19 262656 bezier {cc {f 8224} {p {0 0 1} {x438eadb2 x4394cf7d 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke20 262656 bezier {cc {f 8224} {p {0 0 1} {x438eadb2 x4394cf7d 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc30fb4fb 0 1 x40817050 1} {x42580000 xc30b5918 x409f9480 1 x409f9480 1} {x425c0000 xc305bbb3 x40c60270 1 x40c60270 1} {x42600000 xc2fdf1e2 x40e04158 1 x40e04158 1} {x42640000 xc2ef6f3b x40e3c238 1 x40e3c238 1} {x42680000 xc2e1799b x40e07220 1 x40e07220 1} {x426c0000 xc2d360f7 x40e1d090 1 x40e1d090 1} {x42700000 xc2c53f89 x40e4f238 1 x40e4f238 1} {x42740000 xc2b6c2b0 x40ecda88 1 x40ecda88 1} {x42780000 xc2a7a438 x40ef1370 1 x40ef1370 1} {x427c0000 xc298e042 x40f96600 1 x40f96600 1} {x42800000 xc2887778 x4103ef70 1 x4103ef70 1} {x42820000 xc26fc8cc x40fac1a8 1 x40fac1a8 1} {x42840000 xc2523e86 x40ebc78c 1 x40ebc78c 1} {x42860000 xc234d6e9 x40b43b44 1 x40b43b44 1} {x42880000 xc2252fb5 x40bad6f4 1 x40bad6f4 1} {x428a0000 xc206212c x40a4da0c 1 x40a4da0c 1} {x428c0000 xc1f7f264 x4070c2ac 1 x4070c2ac 1} {x428e0000 xc1d011ad x40a5b0f8 1 x40a5b0f8 1} {x42900000 xc1a519e8 x40844fd2 1 x40844fd2 1} {x42920000 xc18de9c4 x3fdec030 1 x3fdec030 1} {x42940000 xc18941e2 x3ec5dee0 1 x3ec5dee0 1} {x42960000 xc187bacd x3ea249e0 1 x3ea249e0 1} {x42980000 xc1842f93 x3f3b7000 1 x3f3b7000 1} {x429a0000 xc178079a x3f32a2e0 1 x3f32a2e0 1} {x429c0000 xc1720aca -} {x429e0000 xc1739679 -} {x42a00000 xc1735289 x3d4bd000 1 x3d4bd000 1} {x42a20000 xc1714e8d x3eba4de0 1 x3eba4de0 1} {x42a40000 xc167adab x3fc837f8 1 x3fc837f8 1} {x42a60000 xc13f408f x3d93de00 1 x3d93de00 1} {x42a80000 xc13eddfb -} {x42aa0000 xc1476fa5 xbf5f50b0 1 xbf5f50b0 1} {x42ac0000 xc15ac811 xbfb1028c 1 xbfb1028c 1} {x42ae0000 xc173b048 xbff9e034 1 xbff9e034 1} {x42b00000 xc18ca00f xc0237404 1 xc0237404 1} {x42b20000 xc1a2b525 xc02d1118 1 xc02d1118 1} {x42b40000 xc1b7e455 xc027af2c 1 xc027af2c 1} {x42b60000 xc1cca0f0 xc0201d44 1 xc0201d44 1} {x42b80000 xc1dfeba6 xc01c03ac 1 xc01c03ac 1} {x42ba0000 xc1f3a1db xc022a870 1 xc022a870 1} {x42bc0000 xc2044ae1 xc026ac44 1 xc026ac44 1} {x42be0000 xc20ea676 xc0290558 1 xc0290558 1} {x42c00000 xc2196b8c xc02deb00 1 xc02deb00 1} {x42c20000 xc22463d6 xbca1b800 1 xbca1b800 1} {x42c40000 xc2246a93 -} {x42c60000 xc22335b7 x3edf8e40 1 x3edf8e40 1} {x42c80000 xc220ec5a x3f3360c0 1 x3f3360c0 1} {x42ca0000 xc21d9ab1 x3f6c26e0 1 x3f6c26e0 1} {x42cc0000 xc2198b23 x3fd2f9f0 1 x3fd2f9f0 1} {x42ce0000 xc2106b12 x3fd62470 1 x3fd62470 1} {x42d00000 xc20c28dc x3e702a00 1 x3e702a00 1} {x42d20000 xc20bd8ce -} {x42d40000 xc20bf2dd xbd8ed700 1 xbd8ed700 1} {x42d60000 xc20c67a5 xbe4b7400 1 xbe4b7400 1} {x42d80000 xc20d89c5 xbe83f000 1 xbe83f000 1} {x42da0000 xc20e7765 xbe27f980 1 xbe27f980 1} {x42dc0000 xc20ed9b8 -} {x42de0000 xc20e83ea x3e2b5900 1 x3e2b5900 1} {x42e00000 xc20d8306 x3ea63700 1 x3ea63700 1} {x42e20000 xc20beb0e x3f0d1b40 1 x3f0d1b40 1} {x42e40000 xc2091a2c x3f4a3c60 1 x3f4a3c60 1} {x42e60000 xc205992b x3f7595a0 1 x3f7595a0 1} {x42e80000 xc2016d7f x3f953eb8 1 x3f953eb8 1} {x42ea0000 xc1f88a7f x3fc5bd30 1 x3fc5bd30 1} {x42ec0000 xc1ea2358 x40021638 1 x40021638 1} {x42ee0000 xc1d804f1 x402ac504 1 x402ac504 1} {x42f00000 xc1bf7217 x404e9078 1 x404e9078 1} {x42f20000 xc1a460d3 x40663da0 1 x40663da0 1} {x42f40000 xc185e2af x407d1068 1 x407d1068 1} {x42f60000 xc14a3972 x4084f830 1 x4084f830 1} {x42f80000 xc106cd2e x408637c0 1 x408637c0 1} {x42fa0000 xc0880364 x4086cd2e 1 x4086cd2e 1} {x42fc0000 0 x408c0500 1 x408c0500 1} {x42fe0000 x4090069c x40915f9e 1 x40915f9e 1} {x43000000 x41115f9e x4091bd19 1 x4091bd19 1} {x43010000 x4159c067 x408c5d38 1 x408c5d38 1} {x43020000 x418ede6b x40864783 1 x40864783 1} {x43030000 x41b003f5 x40800cfa 1 x40800cfa 1} {x43040000 x41cee4e8 x40685640 1 x40685640 1} {x43050000 x41ea1985 x405fa1b0 1 x405fa1b0 1} {x43060000 x420366aa x40775564 1 x40775564 1} {x43070000 x4213f76f x404736b0 1 x404736b0 1} {x43080000 x421c4d80 x3feee040 1 x3feee040 1} {x43090000 x4222e573 x3fda3f00 1 x3fda3f00 1} {x430a0000 x4229f170 x3fde9820 1 x3fde9820 1} {x430b0000 x4230cef5 x3fd735c0 1 x3fd735c0 1} {x430c0000 x423764cc x3fcdd280 1 x3fcdd280 1} {x430d0000 x423dac1d x3fd13d10 1 x3fd13d10 1} {x430e0000 x4244789d x3ff05ef0 1 x3ff05ef0 1} {x430f0000 x424cb20c x4008a740 1 x4008a740 1} {x43100000 x42558d85 x401227f0 1 x401227f0 1} {x43110000 x425ef70a x4017a7d0 1 x4017a7d0 1} {x43120000 x4268827f x40125e30 1 x40125e30 1} {x43130000 x427142d0 x3ff6cdf0 1 x3ff6cdf0 1} {x43140000 x4277ef5e x3f9400c0 1 x3f9400c0 1} {x43150000 x427a82dc -} {x43160000 x4279138f xbf09bce0 1 0 1}} {{x42540000 x4480848c 0 1 xc155e620 1} {x42580000 x447d93ae xc16c4340 1 xc16c4340 1} {x425c0000 x4479a6fe xc1819c50 1 xc1819c50 1} {x42600000 x447579e9 xc184a9b0 1 xc184a9b0 1} {x42640000 x44715c63 xc1836f30 1 xc1836f30 1} {x42680000 x446d42f6 xc1854d10 1 xc1854d10 1} {x426c0000 x44690792 xc18bc9c0 1 xc18bc9c0 1} {x42700000 x4464865a xc198e300 1 xc198e300 1} {x42740000 x445f7962 xc1a9dbc0 1 xc1a9dbc0 1} {x42780000 x4459e89e xc1bb0a50 1 xc1bb0a50 1} {x427c0000 x4453c8bd xc1cc7cd0 1 xc1cc7cd0 1} {x42800000 x444d20d1 xc1d9e490 1 xc1d9e490 1} {x42820000 x44462a74 xc1ddc660 1 xc1ddc660 1} {x42840000 x443f446b xc1de7460 1 xc1de7460 1} {x42860000 x4438432e xc1d3ee90 1 xc1d3ee90 1} {x42880000 x44320582 xc1d54620 1 xc1d54620 1} {x428a0000 x442aeecc xc1cdffe0 1 xc1cdffe0 1} {x428c0000 x44252584 xc1b99040 1 xc1b99040 1} {x428e0000 x441f55c8 xc1beaa90 1 xc1beaa90 1} {x42900000 x44193adb xc1c41710 1 xc1c41710 1} {x42920000 x44131457 xc1be6840 1 xc1be6840 1} {x42940000 x440d5457 xc1b7d5e0 1 xc1b7d5e0 1} {x42960000 x440796f9 xc1b68290 1 xc1b68290 1} {x42980000 x4401ec2e xc1afdd90 1 xc1afdd90 1} {x429a0000 x43f93240 xc1a8ea70 1 xc1a8ea70 1} {x429c0000 x43eebb0e xc1a42ca0 1 xc1a42ca0 1} {x429e0000 x43e4acac xc1a0f620 1 xc1a0f620 1} {x42a00000 x43da9c4a xc1a180c8 1 xc1a180c8 1} {x42a20000 x43d07c93 xc1a158d8 1 xc1a158d8 1} {x42a40000 x43c6712f xc1983cf0 1 xc1983cf0 1} {x42a60000 x43bd74f5 xc19703c8 1 xc19703c8 1} {x42a80000 x43b390b6 xc1a3d370 1 xc1a3d370 1} {x42aa0000 x43a8fa87 xc1a18138 1 xc1a18138 1} {x42ac0000 x439f608f xc19adde0 1 xc19adde0 1} {x42ae0000 x43959ecb xc199cf40 1 xc199cf40 1} {x42b00000 x438c26a7 xc19739f0 1 xc19739f0 1} {x42b20000 x4382b78d xc196b5e8 1 xc196b5e8 1} {x42b40000 x43729fd4 xc1970c40 1 xc1970c40 1} {x42b60000 x435fac0a xc19838d8 1 xc19838d8 1} {x42b80000 x434c919e xc1966e4c 1 xc1966e4c 1} {x42ba0000 x433a1077 xc18fb2e4 1 xc18fb2e4 1} {x42bc0000 x4328a4e5 xc186a640 1 xc186a640 1} {x42be0000 x431866e7 xc1787968 1 xc1787968 1} {x42c00000 x430995b8 xc1639874 1 xc1639874 1} {x42c20000 x42f7e7b1 xc14e9c08 1 xc14e9c08 1} {x42c40000 x42df846e xc141ed74 1 xc141ed74 1} {x42c60000 x42c76c54 xc14108f0 1 xc14108f0 1} {x42c80000 x42af4232 xc142e4d0 1 xc142e4d0 1} {x42ca0000 x4296b320 xc1413e10 1 xc1413e10 1} {x42cc0000 x427de55c xc122c3da 1 xc122c3da 1} {x42ce0000 x425c0453 xc10f455e 1 xc10f455e 1} {x42d00000 x423642ad xc11f2510 1 xc11f2510 1} {x42d20000 x420c71cb xc11c1210 1 xc11c1210 1} {x42d40000 x41d0734a xc1085dc8 1 xc1085dc8 1} {x42d60000 x419085ce xc0ec9331 1 xc0ec9331 1} {x42d80000 x41345363 xc0d04f09 1 xc0d04f09 1} {x42da0000 x40a17926 xc0c17571 1 xc0c17571 1} {x42dc0000 xbf5220e5 xc0b1a962 1 xc0b1a962 1} {x42de0000 xc0c1d99d xc091326a 1 xc091326a 1} {x42e00000 xc11e5478 xc04d72df 1 xc04d72df 1} {x42e20000 xc147a63e xc0006fa8 1 xc0006fa8 1} {x42e40000 xc15e8c4c xbf83c258 1 xbf83c258 1} {x42e60000 xc16896d4 -} {x42e80000 xc160740a x3f5d21d8 1 x3f5d21d8 1} {x42ea0000 xc14cf299 x3f9bc7d4 1 x3f9bc7d4 1} {x42ec0000 xc1398215 x3f9a4164 1 x3f9a4164 1} {x42ee0000 xc1266240 x3f8b8e28 1 x3f8b8e28 1} {x42f00000 xc1169e8b x3f6f5168 1 x3f6f5168 1} {x42f20000 xc1087813 x3f6dd08c 1 x3f6dd08c 1} {x42f40000 xc0f1c8f3 x3f8c7c3c 1 x3f8c7c3c 1} {x42f60000 xc0cab208 x3fb77f3a 1 x3fb77f3a 1} {x42f80000 xc0960956 x3fef8286 1 x3fef8286 1} {x42fa0000 xc025e18a x40160956 1 x40160956 1} {x42fc0000 0 x402de325 1 x402de325 1} {x42fe0000 x4035e4c0 x402e37eb 1 x402e37eb 1} {x43000000 x40ae37eb x4026508c 1 x4026508c 1} {x43010000 x4100a176 x40312303 1 x40312303 1} {x43020000 x412fad77 x4041de7c 1 x4041de7c 1} {x43030000 x416190b4 x404e9e06 1 x404e9e06 1} {x43040000 x418b7e3d x40599774 1 x40599774 1} {x43050000 x41a72e37 x40806f08 1 x40806f08 1} {x43060000 x41cbb5c1 x40b1b89a 1 x40b1b89a 1} {x43070000 x42000542 x40b658aa 1 x40b658aa 1} {x43080000 x4213710b x409d5194 1 x409d5194 1} {x43090000 x422759a7 x40a0caa4 1 x40a0caa4 1} {x430a0000 x423ba3b4 x40a01da0 1 x40a01da0 1} {x430b0000 x424f610f x409ee160 1 x409ee160 1} {x430c0000 x42635c0c x40a65a98 1 x40a65a98 1} {x430d0000 x4278f7b5 x40b3f188 1 x40b3f188 1} {x430e0000 x42882c37 x40bb340c 1 x40bb340c 1} {x430f0000 x4293e25c x40b72a80 1 x40b72a80 1} {x43100000 x429f1187 x40b13b00 1 x40b13b00 1} {x43110000 x42aa09bc x40ac6860 1 x40ac6860 1} {x43120000 x42b49e93 x40a54f48 1 x40a54f48 1} {x43130000 x42beb3a5 x4099ec88 1 x4099ec88 1} {x43140000 x42c7dc24 x408adfc8 1 x408adfc8 1} {x43150000 x42d00f9e x4048f1b0 1 x4048f1b0 1} {x43160000 x42d46b3f x3fd96ab0 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke21 262656 bezier {cc {f 8224} {p {0 0 1} {x44d50656 x443abdc3 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke22 262656 bezier {cc {f 8224} {p {0 0 1} {x44d50656 x443abdc3 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc332cfd8 0 1 x40868b60 1} {x42580000 xc32e616d x409c5160 1 x409c5160 1} {x425c0000 xc3290ac2 x40b46cc0 1 x40b46cc0 1} {x42600000 xc3231aa1 x40bfb610 1 x40bfb610 1} {x42640000 xc31d0f61 x40d62a60 1 x40d62a60 1} {x42680000 xc315b7fb x40df0290 1 x40df0290 1} {x426c0000 xc30f1f38 x40cf75a0 1 x40cf75a0 1} {x42700000 xc308c0a1 x40cb0f00 1 x40cb0f00 1} {x42740000 xc3026e48 x40be7eb8 1 x40be7eb8 1} {x42780000 xc2f9b16b x40c6d1a8 1 x40c6d1a8 1} {x427c0000 xc2ec025b x40ddc970 1 x40ddc970 1} {x42800000 xc2ddf83d x40d21560 1 x40d21560 1} {x42820000 xc2d1bfaf x40b02108 1 x40b02108 1} {x42840000 xc2c7f41c x409b0bd0 1 x409b0bd0 1} {x42860000 xc2be5e35 x40906800 1 x40906800 1} {x42880000 xc2b5e71c x409293a0 1 x409293a0 1} {x428a0000 xc2ac0bc1 x4099ce28 1 x4099ce28 1} {x428c0000 xc2a2ad57 x409856c8 1 x409856c8 1} {x428e0000 xc29900e8 x409e90a8 1 x409e90a8 1} {x42900000 xc28edb42 x40a0d4f8 1 x40a0d4f8 1} {x42920000 xc284e649 x409b9ee8 1 x409b9ee8 1} {x42940000 xc276ceca x4092d028 1 x4092d028 1} {x42960000 xc2651888 x408cd4a0 1 x408cd4a0 1} {x42980000 xc25399a2 x4081699c 1 x4081699c 1} {x429a0000 xc244be21 x4062a788 1 x4062a788 1} {x429c0000 xc23744b1 x4012ba00 1 x4012ba00 1} {x429e0000 xc23266e1 x3f92c190 1 x3f92c190 1} {x42a00000 xc22e1898 x3f9e25e0 1 x3f9e25e0 1} {x42a20000 xc2288483 x3fc01730 1 x3fc01730 1} {x42a40000 xc2221725 x3fc70190 1 x3fc70190 1} {x42a60000 xc21c146a x3f9aaed0 1 x3f9aaed0 1} {x42a80000 xc2186c38 x3f4bc100 1 x3f4bc100 1} {x42aa0000 xc215b662 -} {x42ac0000 xc2161666 xbe900600 1 xbe900600 1} {x42ae0000 xc219c612 xbf9ecb80 1 xbf9ecb80 1} {x42b00000 xc220031e xbfe954d0 1 xbfe954d0 1} {x42b20000 xc2285b5f xc0031ac8 1 xc0031ac8 1} {x42b40000 xc2306677 xc00545e8 1 xc00545e8 1} {x42b60000 xc239041c xbfffa650 1 xbfffa650 1} {x42b80000 xc24060dc xbff249a0 1 xbff249a0 1} {x42ba0000 xc24828b6 xbff15910 1 xbff15910 1} {x42bc0000 xc24f766d xbffafc60 1 xbffafc60 1} {x42be0000 xc257d87c xc007a6e0 1 xc007a6e0 1} {x42c00000 xc2606b49 xc00dbc28 1 xc00dbc28 1} {x42c20000 xc2699001 -} {x42c40000 xc2670d28 x3f10fd00 1 x3f10fd00 1} {x42c60000 xc2650819 x3f09aa20 1 x3f09aa20 1} {x42c80000 xc262bfd7 x3f246a20 1 x3f246a20 1} {x42ca0000 xc25fe4c8 x3f361a00 1 x3f361a00 1} {x42cc0000 xc25d0f07 x3f180c60 1 x3f180c60 1} {x42ce0000 xc25b2465 x3ef900c0 1 x3ef900c0 1} {x42d00000 xc2592b04 x3edc7940 1 x3edc7940 1} {x42d20000 xc257b280 x3e8d5000 1 x3e8d5000 1} {x42d40000 xc256f5c4 x3e3afd00 1 x3e3afd00 1} {x42d60000 xc2563c86 x3ecbc680 1 x3ecbc680 1} {x42d80000 xc253c6aa x3f2dcaa0 1 x3f2dcaa0 1} {x42da0000 xc250ce31 x3f5ea140 1 x3f5ea140 1} {x42dc0000 xc24cd1a0 x3f8a90f0 1 x3f8a90f0 1} {x42de0000 xc2482522 x3fae14a0 1 x3fae14a0 1} {x42e00000 xc241f056 x3fcc3a60 1 x3fcc3a60 1} {x42e20000 xc23b617c x3feb8f10 1 x3feb8f10 1} {x42e40000 xc2333765 x40092cc8 1 x40092cc8 1} {x42e60000 xc22a3be3 x40111338 1 x40111338 1} {x42e80000 xc22114fe x401baaf8 1 x401baaf8 1} {x42ea0000 xc216c684 x403134f8 1 x403134f8 1} {x42ec0000 xc20aee5f x404da488 1 x404da488 1} {x42ee0000 xc1fa23e6 x40622b60 1 x40622b60 1} {x42f00000 xc1dd51e6 x407b2784 1 x407b2784 1} {x42f20000 xc1bb5a05 x408c1488 1 x408c1488 1} {x42f40000 xc19747a2 x4093662c 1 x4093662c 1} {x42f60000 xc1634dde x4097b0d8 1 x4097b0d8 1} {x42f80000 xc116de6c x40998668 1 x40998668 1} {x42fa0000 xc0938eeb x4096de6c 1 x4096de6c 1} {x42fc0000 0 x40957c85 1 x40957c85 1} {x42fe0000 x40976a1f x409590de 1 x409590de 1} {x43000000 x411590de x408e9b30 1 x408e9b30 1} {x43010000 x415a5040 x4086f15e 1 x4086f15e 1} {x43020000 x418e411e x40810b44 1 x40810b44 1} {x43030000 x41adadc2 x406ccca0 1 x406ccca0 1} {x43040000 x41c97446 x405642cc 1 x405642cc 1} {x43050000 x41e33e75 x403f0ae0 1 x403f0ae0 1} {x43060000 x41f936fe x401fa4cc 1 x401fa4cc 1} {x43070000 x420593d4 x4003c060 1 x4003c060 1} {x43080000 x420d138b x3fe29ef0 1 x3fe29ef0 1} {x43090000 x4213bdc3 x3fd38240 1 x3fd38240 1} {x430a0000 x421a4baf x3fd2e910 1 x3fd2e910 1} {x430b0000 x4220ec54 x3fd98700 1 x3fd98700 1} {x430c0000 x4227e41f x3fd8c150 1 x3fd8c150 1} {x430d0000 x422e7869 x3fcf3560 1 x3fcf3560 1} {x430e0000 x4234d775 x3fd92cb0 1 x3fd92cb0 1} {x430f0000 x423c0b34 x3ff44720 1 x3ff44720 1} {x43100000 x42441be7 x3ffeae30 1 x3ffeae30 1} {x43110000 x424bf617 x3ff7bb50 1 x3ff7bb50 1} {x43120000 x4253979c x3feb7e30 1 x3feb7e30 1} {x43130000 x425aadfa x3fbb9d00 1 x3fbb9d00 1} {x43140000 x425f516c x3f0c6100 1 x3f0c6100 1} {x43150000 x42600c98 -} {x43160000 x425cfad4 xbf9354c0 1 0 1}} {{x42540000 x444727a2 0 1 xc1132120 1} {x42580000 x4444de75 xc1109f80 1 xc1109f80 1} {x425c0000 x4442a2a6 xc113bc00 1 xc113bc00 1} {x42600000 x44404095 xc1305700 1 xc1305700 1} {x42640000 x443d1fee xc157b8c0 1 xc157b8c0 1} {x42680000 x443982cf xc16de840 1 xc16de840 1} {x426c0000 x4435b0ac xc15fb240 1 xc15fb240 1} {x42700000 x4432853d xc14db9e0 1 xc14db9e0 1} {x42740000 x442f42dd xc1584e20 1 xc1584e20 1} {x42780000 x442bc2cc xc16bbfe0 1 xc16bbfe0 1} {x427c0000 x4427e4de xc17cdb60 1 xc17cdb60 1} {x42800000 x4423dbf1 xc1801190 1 xc1801190 1} {x42820000 x441fe3c5 xc17d4d40 1 xc17d4d40 1} {x42840000 x441bf187 xc1800ea0 1 xc1800ea0 1} {x42860000 x4417e2db xc179fac0 1 xc179fac0 1} {x42880000 x441421b1 xc1723b00 1 xc1723b00 1} {x428a0000 x44105103 xc1762e00 1 xc1762e00 1} {x428c0000 x440c7041 xc1814390 1 xc1814390 1} {x428e0000 x44083cca xc189b3f0 1 xc189b3f0 1} {x42900000 x4403d502 xc18b2af0 1 xc18b2af0 1} {x42920000 x43ff1436 xc1895890 1 xc1895890 1} {x42940000 x43f67ef2 xc18a3710 1 xc18a3710 1} {x42960000 x43edcd54 xc188e7d8 1 xc188e7d8 1} {x42980000 x43e561f7 xc17933f0 1 xc17933f0 1} {x429a0000 x43de3a15 xc15cca00 1 xc15cca00 1} {x429c0000 x43d79557 xc151de70 1 xc151de70 1} {x429e0000 x43d11c2e xc1540320 1 xc1540320 1} {x42a00000 x43ca5525 xc1607440 1 xc1607440 1} {x42a20000 x43c314ea xc16d03c0 1 xc16d03c0 1} {x42a40000 x43bb84e9 xc1757a20 1 xc1757a20 1} {x42a60000 x43b3bd48 xc176e1c0 1 xc176e1c0 1} {x42a80000 x43ac16cd xc1748bd0 1 xc1748bd0 1} {x42aa0000 x43a4748b xc16d74c0 1 xc16d74c0 1} {x42ac0000 x439d3f81 xc161aff0 1 xc161aff0 1} {x42ae0000 x4396598c xc15d45e0 1 xc15d45e0 1} {x42b00000 x438f6b23 xc15e48d0 1 xc15e48d0 1} {x42b20000 x438874ff xc160b200 1 xc160b200 1} {x42b40000 x43816003 xc1645138 1 xc1645138 1} {x42b60000 x43745fd7 xc167fb78 1 xc167fb78 1} {x42b80000 x4365c097 xc16a8cd0 1 xc16a8cd0 1} {x42ba0000 x43570e3d xc16600c8 1 xc16600c8 1} {x42bc0000 x4349007e xc1585c80 1 xc1585c80 1} {x42be0000 x433c02ad xc14492a8 1 xc14492a8 1} {x42c00000 x43306e29 xc13204e0 1 xc13204e0 1} {x42c20000 x4325c211 xc11ebba8 1 xc11ebba8 1} {x42c40000 x431c96b4 xc110eb28 1 xc110eb28 1} {x42c60000 x4313a4ac xc10f92f8 1 xc10f92f8 1} {x42c80000 x430aa455 xc10d9cf0 1 xc10d9cf0 1} {x42ca0000 x4301f10e xc1090448 1 xc1090448 1} {x42cc0000 x42f30798 xc10456c0 1 xc10456c0 1} {x42ce0000 x42e2cc6c xc0fd9fb8 1 xc0fd9fb8 1} {x42d00000 x42d353a1 xc0ed1568 1 xc0ed1568 1} {x42d20000 x42c529bf xc0d83b88 1 xc0d83b88 1} {x42d40000 x42b84c30 xc0c955c0 1 xc0c955c0 1} {x42d60000 x42abff07 xc0c57208 1 xc0c57208 1} {x42d80000 x429f9def xc0cc0748 1 xc0cc0748 1} {x42da0000 x42927e1e xc0d7ab20 1 xc0d7ab20 1} {x42dc0000 x4284a88b xc0d567e8 1 xc0d567e8 1} {x42de0000 x426fa242 xc0c03c58 1 xc0c03c58 1} {x42e00000 x42594200 xc0a68948 1 xc0a68948 1} {x42e20000 x4245fff0 xc093de98 1 xc093de98 1} {x42e40000 x42344a5a xc087a300 1 xc087a300 1} {x42e60000 x42241730 xc06b03e0 1 xc06b03e0 1} {x42e80000 x4216e9de xc04df0b0 1 xc04df0b0 1} {x42ea0000 x420a591a xc05125d0 1 xc05125d0 1} {x42ec0000 x41f98a48 xc05c7d28 1 xc05c7d28 1} {x42ee0000 x41dd92ea xc06517d4 1 xc06517d4 1} {x42f00000 x41c04453 xc0799ce4 1 xc0799ce4 1} {x42f20000 x419f2bb1 xc087aadc 1 xc087aadc 1} {x42f40000 x4178ddca xc085d1b1 1 xc085d1b1 1} {x42f60000 x413885b1 xc0807cd1 1 xc0807cd1 1} {x42f80000 x40f0c1f2 xc07eea91 1 xc07eea91 1} {x42fa0000 x406441a2 xc070c1f2 1 xc070c1f2 1} {x42fc0000 0 xc0559858 1 xc0559858 1} {x42fe0000 xc046ef0d xc0501c39 1 xc0501c39 1} {x43000000 xc0d01c39 xc0525672 1 xc0525672 1} {x43010000 xc11ae6fc xc045fb2b 1 xc045fb2b 1} {x43020000 xc14b0bb2 xc02b05a0 1 xc02b05a0 1} {x43030000 xc17069cc xc012f13c 1 xc012f13c 1} {x43040000 xc18a4228 xc00b42e0 1 xc00b42e0 1} {x43050000 xc19b059e xc00ad10c 1 xc00ad10c 1} {x43060000 xc1acf66b xc00b4dc0 1 xc00b4dc0 1} {x43070000 xc1bdd90e xbfeeaf00 1 xbfeeaf00 1} {x43080000 xc1cacc4b xbfbeb4f0 1 xbfbeb4f0 1} {x43090000 xc1d5afac xbfa2f858 1 xbfa2f858 1} {x430a0000 xc1df2b56 xbfa48380 1 xbfa48380 1} {x430b0000 xc1ea401c xbfbd42b8 1 xbfbd42b8 1} {x430c0000 xc1f6d3ad xbfa663e0 1 xbfa663e0 1} {x430d0000 xc1ff0c98 xbf82bdd8 1 xbf82bdd8 1} {x430e0000 xc20395b4 xbf7ee6c0 1 xbf7ee6c0 1} {x430f0000 xc2077d82 xbf851880 1 xbf851880 1} {x43100000 xc20be73c xbf85ada0 1 xbf85ada0 1} {x43110000 xc20fd85c xbf7b5800 1 xbf7b5800 1} {x43120000 xc213c1fc xbf6fd8c0 1 xbf6fd8c0 1} {x43130000 xc2175722 xbf85a3b0 1 xbf85a3b0 1} {x43140000 xc21c1c37 xbfba57d0 1 xbfba57d0 1} {x43150000 xc222fc9f xc0292498 1 xc0292498 1} {x43160000 xc23140ca xc080e8de 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke23 262656 bezier {cc {f 8224} {p {0 0 1} {x4466bde3 x43eae9fc 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke24 262656 bezier {cc {f 8224} {p {0 0 1} {x4466bde3 x43eae9fc 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3ca363c 0 1 x40cc7660 1} {x42580000 xc3c6e1df x40e65900 1 x40e65900 1} {x425c0000 xc3c30374 x41061400 1 x41061400 1} {x42600000 xc3be809f x411fa300 1 x411fa300 1} {x42640000 xc3b90944 x412f87c0 1 x412f87c0 1} {x42680000 xc3b38823 x412cd2e0 1 x412cd2e0 1} {x426c0000 xc3ae3c16 x4123bc10 1 x4123bc10 1} {x42700000 xc3a94c62 x4125eac0 1 x4125eac0 1} {x42740000 xc3a3dd6a x4129c370 1 x4129c370 1} {x42780000 xc39eb02b x41248a30 1 x41248a30 1} {x427c0000 xc39994c7 x41273ac0 1 x41273ac0 1} {x42800000 xc3943c7f x41244860 1 x41244860 1} {x42820000 xc38f5041 x410fdf50 1 x410fdf50 1} {x42840000 xc38b3e8a x40f85080 1 x40f85080 1} {x42860000 xc3878dbd x40f6cd40 1 x40f6cd40 1} {x42880000 xc3838820 x41026bf8 1 x41026bf8 1} {x428a0000 xc37ecdfb x40fbba10 1 x40fbba10 1} {x428c0000 xc377549f x40e60490 1 x40e60490 1} {x428e0000 xc3706db2 x40e253b0 1 x40e253b0 1} {x42900000 xc3692f64 x40f07ba0 1 x40f07ba0 1} {x42920000 xc36165f8 x40eb1810 1 x40eb1810 1} {x42940000 xc35a7de3 x40c93e70 1 x40c93e70 1} {x42960000 xc354d211 x40a790c0 1 x40a790c0 1} {x42980000 xc35004d7 x40961020 1 x40961020 1} {x429a0000 xc34b710f x408a4a90 1 x408a4a90 1} {x429c0000 xc347602e x40769160 1 x40769160 1} {x429e0000 xc343bc84 x406c5200 1 x406c5200 1} {x42a00000 xc33ffd9e x407c1a60 1 x407c1a60 1} {x42a20000 xc33bdbb1 x409581a0 1 x409581a0 1} {x42a40000 xc336a584 x40bc8210 1 x40bc8210 1} {x42a60000 xc3301390 x40b3be00 1 x40b3be00 1} {x42a80000 xc32b69a4 x4097dde0 1 x4097dde0 1} {x42aa0000 xc32695b2 x40959a70 1 x40959a70 1} {x42ac0000 xc3220ffd x407b4760 1 x407b4760 1} {x42ae0000 xc31ebb77 x4039b420 1 x4039b420 1} {x42b00000 xc31c425c x4005a900 1 x4005a900 1} {x42b20000 xc31a8e2f x3fcf50c0 1 x3fcf50c0 1} {x42b40000 xc3190519 x3fc58740 1 x3fc58740 1} {x42b60000 xc3177812 x3fce98c0 1 x3fce98c0 1} {x42b80000 xc315cab6 x3fd31940 1 x3fd31940 1} {x42ba0000 xc3142bad x3fc815c0 1 x3fc815c0 1} {x42bc0000 xc312aa5f x3fc74900 1 x3fc74900 1} {x42be0000 xc3110e89 x3fc5bd40 1 x3fc5bd40 1} {x42c00000 xc30f936a x3fc001c0 1 x3fc001c0 1} {x42c20000 xc30e0e82 x40392300 1 x40392300 1} {x42c40000 xc309ca52 x408c49c0 1 x408c49c0 1} {x42c60000 xc30549e6 x40942a20 1 x40942a20 1} {x42c80000 xc30087b0 x4097d338 1 x4097d338 1} {x42ca0000 xc2f79965 x4099e4c0 1 x4099e4c0 1} {x42cc0000 xc2edd2c8 x409a6ba0 1 x409a6ba0 1} {x42ce0000 xc2e44bf1 x4093ffb0 1 x4093ffb0 1} {x42d00000 xc2db52d2 x408a99d8 1 x408a99d8 1} {x42d20000 xc2d2f8b6 x407e0ca0 1 x407e0ca0 1} {x42d40000 xc2cb7208 x40700a40 1 x40700a40 1} {x42d60000 xc2c3f812 x4064f790 1 x4064f790 1} {x42d80000 xc2bd228f x40584870 1 x40584870 1} {x42da0000 xc2b6738b x40570680 1 x40570680 1} {x42dc0000 xc2afb227 x405f02c0 1 x405f02c0 1} {x42de0000 xc2a8835f x406cafc0 1 x406cafc0 1} {x42e00000 xc2a0e72b x4075cb40 1 x4075cb40 1} {x42e20000 xc29926ab x407996e0 1 x407996e0 1} {x42e40000 xc2914dbd x407e57b0 1 x407e57b0 1} {x42e60000 xc2894130 x40835430 1 x40835430 1} {x42e80000 xc280e337 x408aef2c 1 x408aef2c 1} {x42ea0000 xc26fc695 x4096f74c 1 x4096f74c 1} {x42ec0000 xc25c089b x40aa6c0c 1 x40aa6c0c 1} {x42ee0000 xc2452b92 x40badbd4 1 x40badbd4 1} {x42f00000 xc22d51a6 x40cd40ec 1 x40cd40ec 1} {x42f20000 xc211db57 x40deb3de 1 x40deb3de 1} {x42f40000 xc1eb495d x40ea6a3c 1 x40ea6a3c 1} {x42f60000 xc1ae8190 x40ed3e0d 1 x40ed3e0d 1} {x42f80000 xc16954ad x40e8a636 1 x40e8a636 1} {x42fa0000 xc0e8b9d5 x40e954ad 1 x40e954ad 1} {x42fc0000 0 x40ed4ae0 1 x40ed4ae0 1} {x42fe0000 x40f1dbeb x40f01e17 1 x40f01e17 1} {x43000000 x41701e17 x40e9ba04 1 x40e9ba04 1} {x43010000 x41b153fd x40e08bd1 1 x40e08bd1 1} {x43020000 x41e854f4 x40d6f306 1 x40d6f306 1} {x43030000 x420e66c0 x40c9ef84 1 x40c9ef84 1} {x43040000 x4226a65b x40b7f170 1 x40b7f170 1} {x43050000 x423c631c x40abd1cc 1 x40abd1cc 1} {x43060000 x42519ace x40a2ddd0 1 x40a2ddd0 1} {x43070000 x42651a90 x40863cd0 1 x40863cd0 1} {x43080000 x42732a02 x405b4460 1 x405b4460 1} {x43090000 x4280418e x404aa6a0 1 x404aa6a0 1} {x430a0000 x42863f6b x403630e0 1 x403630e0 1} {x430b0000 x428ba49c x402439b0 1 x402439b0 1} {x430c0000 x42908306 x4017c710 1 x4017c710 1} {x430d0000 x4295210d x4011a670 1 x4011a670 1} {x430e0000 x42999d6d x40182f00 1 x40182f00 1} {x430f0000 x429ea3fd x4027f150 1 x4027f150 1} {x43100000 x42a41c82 x403069f0 1 x403069f0 1} {x43110000 x42a9aa9c x4030a5f0 1 x4030a5f0 1} {x43120000 x42af26e1 x402a9940 1 x402a9940 1} {x43130000 x42b45430 x401315b0 1 x401315b0 1} {x43140000 x42b8583c x3fc7e820 1 x3fc7e820 1} {x43150000 x42ba9371 x3ebbc500 1 x3ebbc500 1} {x43160000 x42bad208 -}} {{x42540000 x44884227 0 1 xc15dcd20 1} {x42580000 x44867517 xc177fdc0 1 xc177fdc0 1} {x425c0000 x44846230 xc186ec00 1 xc186ec00 1} {x42600000 x44823db7 xc18826a0 1 xc18826a0 1} {x42640000 x448020fb xc18481a0 1 xc18481a0 1} {x42680000 x447c3354 xc1874760 1 xc1874760 1} {x426c0000 x4477cd80 xc18a5a40 1 xc18a5a40 1} {x42700000 x44738db0 xc18f1870 1 xc18f1870 1} {x42740000 x446edbf9 xc19fe260 1 xc19fe260 1} {x42780000 x44698f8a xc1ad4fc0 1 xc1ad4fc0 1} {x427c0000 x446406fd xc1bec0b0 1 xc1bec0b0 1} {x42800000 x445da37f xc1cb56c0 1 xc1cb56c0 1} {x42820000 x44575191 xc1c989e0 1 xc1c989e0 1} {x42840000 x44510ae1 xc1c95e90 1 xc1c95e90 1} {x42860000 x444abba8 xc1cf50f0 1 xc1cf50f0 1} {x42880000 x444415d2 xc1d11b90 1 xc1d11b90 1} {x428a0000 x443da9ef xc1ce5100 1 xc1ce5100 1} {x428c0000 x443730c2 xc1d23070 1 xc1d23070 1} {x428e0000 x443086e8 xc1d78af0 1 xc1d78af0 1} {x42900000 x4429b813 xc1deac10 1 xc1deac10 1} {x42920000 x44229c27 xc1dc4940 1 xc1dc4940 1} {x42940000 x441bf37f xc1d15d20 1 xc1d15d20 1} {x42960000 x44158655 xc1c8e060 1 xc1c8e060 1} {x42980000 x440f6579 xc1bcce50 1 xc1bcce50 1} {x429a0000 x4409b970 xc1b1ce70 1 xc1b1ce70 1} {x429c0000 x44044892 xc1ac20f8 1 xc1ac20f8 1} {x429e0000 x43fdeec1 xc1aa0088 1 xc1aa0088 1} {x42a00000 x43f35113 xc1aaded8 1 xc1aaded8 1} {x42a20000 x43e892e6 xc1a94a58 1 xc1a94a58 1} {x42a40000 x43de27c8 xc19e09e0 1 xc19e09e0 1} {x42a60000 x43d4d1aa xc19fe600 1 xc19fe600 1} {x42a80000 x43ca2b08 xc1ae9a78 1 xc1ae9a78 1} {x42aa0000 x43befe5b xc1ad3290 1 xc1ad3290 1} {x42ac0000 x43b484b6 xc1a6aea8 1 xc1a6aea8 1} {x42ae0000 x43aa2886 xc1a51cb0 1 xc1a51cb0 1} {x42b00000 x439fe120 xc1a4ee40 1 xc1a4ee40 1} {x42b20000 x43958abe xc1a6d790 1 xc1a6d790 1} {x42b40000 x438b062e xc1a914f0 1 xc1a914f0 1} {x42b60000 x43806820 xc1aa5f64 1 xc1aa5f64 1} {x42b80000 x436b7483 xc1a7fffc 1 xc1a7fffc 1} {x42ba0000 x4356d041 xc1a0eeec 1 xc1a0eeec 1} {x42bc0000 x434338c8 xc198c188 1 xc198c188 1} {x42be0000 x43309fdf xc18ef208 1 xc18ef208 1} {x42c00000 x431f7c46 xc183e3a4 1 xc183e3a4 1} {x42c20000 x430fa6f6 xc17148a0 1 xc17148a0 1} {x42c40000 x43015332 xc160ac18 1 xc160ac18 1} {x42c60000 x42e722e6 xc15cff10 1 xc15cff10 1} {x42c80000 x42cb66a0 xc15ea124 1 xc15ea124 1} {x42ca0000 x42af7a9d xc15a3bd8 1 xc15a3bd8 1} {x42cc0000 x4294d7aa xc13a7454 1 xc13a7454 1} {x42ce0000 x4280dd88 xc12ddb7a 1 xc12ddb7a 1} {x42d00000 x4252c197 xc13f4a2e 1 xc13f4a2e 1} {x42d20000 x422215f9 xc13727bb 1 xc13727bb 1} {x42d40000 x41ee5b73 xc123bee7 1 xc123bee7 1} {x42d60000 x41a06d0b xc1123b44 1 xc1123b44 1} {x42d80000 x4138405e xc102bade 1 xc102bade 1} {x42da0000 x406d9166 xc0f24bf3 1 xc0f24bf3 1} {x42dc0000 xc0682e54 xc0d8cb70 1 xc0d8cb70 1} {x42de0000 xc11d6716 xc0a967b5 1 xc0a967b5 1} {x42e00000 xc163734a xc06285a8 1 xc06285a8 1} {x42e20000 xc18754f5 xc006655c 1 xc006655c 1} {x42e40000 xc19352fc xbf7c6580 1 xbf7c6580 1} {x42e60000 xc1971b4d -} {x42e80000 xc1909123 x3f8e2688 1 x3f8e2688 1} {x42ea0000 xc185567c x3fb5dc34 1 x3fb5dc34 1} {x42ec0000 xc173ab39 x3fb8c7fc 1 x3fb8c7fc 1} {x42ee0000 xc15c7af9 x3fce9640 1 x3fce9640 1} {x42f00000 xc14005a9 x3fbd7acc 1 x3fbd7acc 1} {x42f20000 xc12d1c46 x3fa8a040 1 x3fa8a040 1} {x42f40000 xc115dd99 x3fb595d6 1 x3fb595d6 1} {x42f60000 xc0ff6da1 x3fec8dc6 1 x3fec8dc6 1} {x42f80000 xc0b5744f x401548ce 1 x401548ce 1} {x42fa0000 xc05449a6 x4035744f 1 x4035744f 1} {x42fc0000 0 x405e2b23 1 x405e2b23 1} {x42fe0000 x40680ca0 x40675ddd 1 x40675ddd 1} {x43000000 x40e75ddd x406a7708 1 x406a7708 1} {x43010000 x412f3eac x407eac0d 1 x407eac0d 1} {x43020000 x417304f5 x408dc51e 1 x408dc51e 1} {x43030000 x419e81e5 x40990a35 1 x40990a35 1} {x43040000 x41c60795 x409f7aec 1 x409f7aec 1} {x43050000 x41ee3f5b x40be1eba 1 x40be1eba 1} {x43060000 x42128b79 x40f38152 1 x40f38152 1} {x43070000 x42340002 x40e864c0 1 x40e864c0 1} {x43080000 x424ca4a9 x40cbe88c 1 x40cbe88c 1} {x43090000 x4266fa25 x40d17b8c 1 x40d17b8c 1} {x430a0000 x428081c6 x40ca9594 1 x40ca9594 1} {x430b0000 x428ccfc5 x40c23fe0 1 x40c23fe0 1} {x430c0000 x4298c9c2 x40c5ecb0 1 x40c5ecb0 1} {x430d0000 x42a58d5b x40d2d070 1 x40d2d070 1} {x430e0000 x42b323d0 x40d7f4d0 1 x40d7f4d0 1} {x430f0000 x42c08bf5 x40d33bb8 1 x40d33bb8 1} {x43100000 x42cd8b47 x40cecc58 1 x40cecc58 1} {x43110000 x42da6580 x40c7d3e8 1 x40c7d3e8 1} {x43120000 x42e685c4 x40ba3ae0 1 x40ba3ae0 1} {x43130000 x42f1acdc x40aafa08 1 x40aafa08 1} {x43140000 x42fbe505 x4097d030 1 x4097d030 1} {x43150000 x43025371 x4055bb50 1 x4055bb50 1} {x43160000 x4304a05d x3fe3f5b0 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke25 262656 bezier {cc {f 8224} {p {0 0 1} {x43eb23f8 x443259bb 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke26 262656 bezier {cc {f 8224} {p {0 0 1} {x43eb23f8 x443259bb 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc39fc1df 0 1 x40815b90 1} {x42580000 xc39d9490 x409f4420 1 x409f4420 1} {x425c0000 xc39ac7be x40c5fa60 1 x40c5fa60 1} {x42600000 xc39764bd x40e0ab00 1 x40e0ab00 1} {x42640000 xc393c266 x40e42600 1 x40e42600 1} {x42680000 xc390438d x40e0e180 1 x40e0e180 1} {x426c0000 xc38cbb5a x40e255e0 1 x40e255e0 1} {x42700000 xc38930de x40e57dc0 1 x40e57dc0 1} {x42740000 xc3858f6c x40f68c40 1 x40f68c40 1} {x42780000 xc3817c7c x41017ea8 1 x41017ea8 1} {x427c0000 xc37aef03 x4105b068 1 x4105b068 1} {x42800000 xc37242eb x4109d628 1 x4109d628 1} {x42820000 xc369b43e x41025fb8 1 x41025fb8 1} {x42840000 xc361f6f4 x40f467e0 1 x40f467e0 1} {x42860000 xc35a6dc0 x40ca9c70 1 x40ca9c70 1} {x42880000 xc3554d2d x40cccb10 1 x40cccb10 1} {x428a0000 xc34da10f x40b46ab0 1 x40b46ab0 1} {x428c0000 xc34a0682 x406951c0 1 x406951c0 1} {x428e0000 xc3465681 x40789c00 1 x40789c00 1} {x42900000 xc34241a2 x40828810 1 x40828810 1} {x42920000 xc33e2e00 x3fd11c00 1 x3fd11c00 1} {x42940000 xc33da298 x3fa25a80 1 x3fa25a80 1} {x42960000 xc33ba496 x40078520 1 x40078520 1} {x42980000 xc339666f x405e7500 1 x405e7500 1} {x429a0000 xc334b0ee x4054af00 1 x4054af00 1} {x429c0000 xc332c0f7 x3fb209c0 1 x3fb209c0 1} {x429e0000 xc331e8c7 x3fbf15c0 1 x3fbf15c0 1} {x42a00000 xc32fc4a0 x401cd660 1 x401cd660 1} {x42a20000 xc32d0214 x40346e60 1 x40346e60 1} {x42a40000 xc32a212d x403e9aa0 1 x403e9aa0 1} {x42a60000 xc3270d3f x40465520 1 x40465520 1} {x42a80000 xc323ee84 x404d5d80 1 x404d5d80 1} {x42aa0000 xc320a253 x404135a0 1 x404135a0 1} {x42ac0000 xc31de4d7 x4004c060 1 x4004c060 1} {x42ae0000 xc31c7c50 x3f880500 1 x3f880500 1} {x42b00000 xc31bc4c3 x3ee7df00 1 x3ee7df00 1} {x42b20000 xc31b9471 -} {x42b40000 xc31be747 xbcf18000 1 xbcf18000 1} {x42b60000 xc31be9cb -} {x42b80000 xc31bc68c x3e87dc00 1 x3e87dc00 1} {x42ba0000 xc31b61ef x3ed09a00 1 x3ed09a00 1} {x42bc0000 xc31af5f2 x3f024f00 1 x3f024f00 1} {x42be0000 xc31a5d51 x3f1c2f80 1 x3f1c2f80 1} {x42c00000 xc319bd93 x3f2b6980 1 x3f2b6980 1} {x42c20000 xc319067e x40094fc0 1 x40094fc0 1} {x42c40000 xc3156470 x406c6700 1 x406c6700 1} {x42c60000 xc311a346 x4080b6b0 1 x4080b6b0 1} {x42c80000 xc30d5905 x40881f60 1 x40881f60 1} {x42ca0000 xc3092150 x40885a10 1 x40885a10 1} {x42cc0000 xc304d364 x4088d3f0 1 x4088d3f0 1} {x42ce0000 xc3009411 x40840c10 1 x40840c10 1} {x42d00000 xc2f92546 x40736050 1 x40736050 1} {x42d20000 xc2f1f21d x40676fa0 1 x40676fa0 1} {x42d40000 xc2eaae4c x40613b60 1 x40613b60 1} {x42d60000 xc2e3de67 x405ccb30 1 x405ccb30 1} {x42d80000 xc2dce199 x406032f0 1 x406032f0 1} {x42da0000 xc2d5db38 x40637910 1 x40637910 1} {x42dc0000 xc2ceaa08 x40768170 1 x40768170 1} {x42de0000 xc2c67321 x40874f68 1 x40874f68 1} {x42e00000 xc2bdc01b x408b9770 1 x408b9770 1} {x42e20000 xc2b50033 x408e77a8 1 x408e77a8 1} {x42e40000 xc2abf126 x4093e010 1 x4093e010 1} {x42e60000 xc2a28431 x409b81f0 1 x409b81f0 1} {x42e80000 xc29880e8 x40a86148 1 x40a86148 1} {x42ea0000 xc28d7808 x40b46348 1 x40b46348 1} {x42ec0000 xc281f47f x40c8ebd4 1 x40c8ebd4 1} {x42ee0000 xc268b51b x40ddb400 1 x40ddb400 1} {x42f00000 xc24c7bfe x40f21b4c 1 x40f21b4c 1} {x42f20000 xc22c2e48 x41042334 1 x41042334 1} {x42f40000 xc20a6a64 x410a6fa9 1 x410a6fa9 1} {x42f60000 xc1cdece7 x410a59f7 1 x410a59f7 1} {x42f80000 xc18a7ad1 x41098f68 1 x41098f68 1} {x42fa0000 xc108bafe x410a7ad1 1 x410a7ad1 1} {x42fc0000 0 x410b5455 1 x410b5455 1} {x42fe0000 x410dedac x410c332d 1 x410c332d 1} {x43000000 x418c332d x4108c190 1 x4108c190 1} {x43010000 x41cfb866 x41047963 1 x41047963 1} {x43020000 x42085648 x40fcb130 1 x40fcb130 1} {x43030000 x4227087f x40edec18 1 x40edec18 1} {x43040000 x4243d14e x40d96dd8 1 x40d96dd8 1} {x43050000 x425d63f5 x40bf8024 1 x40bf8024 1} {x43060000 x4273b157 x40aa0f14 1 x40aa0f14 1} {x43070000 x4283f3dd x409c3d9c 1 x409c3d9c 1} {x43080000 x428d605f x408eb178 1 x408eb178 1} {x43090000 x4295ca0c x40806478 1 x40806478 1} {x430a0000 x429d6cee x40716350 1 x40716350 1} {x430b0000 x42a4e041 x406342d0 1 x406342d0 1} {x430c0000 x42aba11b x4052edc0 1 x4052edc0 1} {x430d0000 x42b20f1d x40564980 1 x40564980 1} {x430e0000 x42b905b3 x40620c70 1 x40620c70 1} {x430f0000 x42c02fe4 x406d96d0 1 x406d96d0 1} {x43100000 x42c7df20 x40751bf0 1 x40751bf0 1} {x43110000 x42cf81a3 x406fc2e0 1 x406fc2e0 1} {x43120000 x42d6db4e x40699dd0 1 x40699dd0 1} {x43130000 x42de1b80 x40576ee0 1 x40576ee0 1} {x43140000 x42e4523c x4026f7d0 1 x4026f7d0 1} {x43150000 x42e88afd x3fd573c0 1 x3fd573c0 1} {x43160000 x42eafdda x3f805900 1 0 1}} {{x42540000 x448763e1 0 1 xc155ea80 1} {x42580000 x4485a928 xc16c4080 1 xc16c4080 1} {x425c0000 x4483b2df xc1819340 1 xc1819340 1} {x42600000 x44819c8e xc184a4a0 1 xc184a4a0 1} {x42640000 x447f1b74 xc1836430 1 xc1836430 1} {x42680000 x447b02d9 xc1853730 1 xc1853730 1} {x426c0000 x4476c801 xc18bbf60 1 xc18bbf60 1} {x42700000 x447246e3 xc198ddf0 1 xc198ddf0 1} {x42740000 x446d3a22 xc1aa60f0 1 xc1aa60f0 1} {x42780000 x4467a0d4 xc1bc1e60 1 xc1bc1e60 1} {x427c0000 x4461783c xc1cb8650 1 xc1cb8650 1} {x42800000 x445ae86f xc1d3af50 1 xc1d3af50 1} {x42820000 x44543d47 xc1d1bb70 1 xc1d1bb70 1} {x42840000 x444dccb8 xc1ce59f0 1 xc1ce59f0 1} {x42860000 x444757a8 xc1d01400 1 xc1d01400 1} {x42880000 x4440cb78 xc1d50040 1 xc1d50040 1} {x428a0000 x443a07a4 xc1cbcbf0 1 xc1cbcbf0 1} {x428c0000 x44340eb9 xc1b4cb10 1 xc1b4cb10 1} {x428e0000 x442ebaf3 xc1af8e90 1 xc1af8e90 1} {x42900000 x442915d0 xc1b9b400 1 xc1b9b400 1} {x42920000 x44231fb3 xc1c2b6e0 1 xc1c2b6e0 1} {x42940000 x441cea62 xc1c80cd0 1 xc1c80cd0 1} {x42960000 x44169ee6 xc1c7b100 1 xc1c7b100 1} {x42980000 x44106f52 xc1bc3c70 1 xc1bc3c70 1} {x429a0000 x440adb1f xc1b33bf0 1 xc1b33bf0 1} {x429c0000 x44053b93 xc1b46a60 1 xc1b46a60 1} {x429e0000 x43ff28f2 xc1b27168 1 xc1b27168 1} {x42a00000 x43f428f9 xc1b225f0 1 xc1b225f0 1} {x42a20000 x43e8e434 xc1b2e418 1 xc1b2e418 1} {x42a40000 x43ddcc76 xc1b30a78 1 xc1b30a78 1} {x42a60000 x43d282e5 xc1b538a8 1 xc1b538a8 1} {x42a80000 x43c72561 xc1b53430 1 xc1b53430 1} {x42aa0000 x43bbdc5f xc1b2e9f8 1 xc1b2e9f8 1} {x42ac0000 x43b0c822 xc1ab81c8 1 xc1ab81c8 1} {x42ae0000 x43a66c26 xc1b02d48 1 xc1b02d48 1} {x42b00000 x439ac279 xc1b656b8 1 xc1b656b8 1} {x42b20000 x438fa14f xc1b30190 1 xc1b30190 1} {x42b40000 x43846247 xc1b58764 1 xc1b58764 1} {x42b60000 x4371e0c5 xc1b58d84 1 xc1b58d84 1} {x42b80000 x435b612d xc1b19864 1 xc1b19864 1} {x42ba0000 x43457aac xc1a9c90c 1 xc1a9c90c 1} {x42bc0000 x4330eeea xc19fc3ec 1 xc19fc3ec 1} {x42be0000 x431d89b1 xc1951d18 1 xc1951d18 1} {x42c00000 x430ba7a4 xc18b073a 1 xc18b073a 1} {x42c20000 x42f58fc5 xc1806012 1 xc1806012 1} {x42c40000 x42d71f3f xc1722a00 1 xc1722a00 1} {x42c60000 x42b90545 xc1729374 1 xc1729374 1} {x42c80000 x429a7a62 xc1741a1e 1 xc1741a1e 1} {x42ca0000 x4277fd7b xc1755272 1 xc1755272 1} {x42cc0000 x423a4b8b xc16ea8a2 1 xc16ea8a2 1} {x42ce0000 x4200a92a xc1644039 1 xc1644039 1} {x42d00000 x419056dd xc15437c3 1 xc15437c3 1} {x42d20000 x40b46a45 xc13ffd02 1 xc13ffd02 1} {x42d40000 xc0be9893 xc12c7ed6 1 xc12c7ed6 1} {x42d60000 xc17ec889 xc11447c6 1 xc11447c6 1} {x42d80000 xc1c3edeb xc1006784 1 xc1006784 1} {x42da0000 xc1ffcbc8 xc0e23cf6 1 xc0e23cf6 1} {x42dc0000 xc21a8633 xc0bbf804 1 xc0bbf804 1} {x42de0000 xc22ee3e5 xc082c8a8 1 xc082c8a8 1} {x42e00000 xc23b385d xc003eb48 1 xc003eb48 1} {x42e20000 xc23f614e -} {x42e40000 xc23ddb12 x3f79b360 1 x3f79b360 1} {x42e60000 xc23793b3 x4010f0d8 1 x4010f0d8 1} {x42e80000 xc22bbcf7 x405821b8 1 x405821b8 1} {x42ea0000 xc21c8f7c x40728cf8 1 x40728cf8 1} {x42ec0000 xc20d6b58 x4071d590 1 x4071d590 1} {x42ee0000 xc1fca994 x407b05b0 1 x407b05b0 1} {x42f00000 xc1dc1544 x407b3b44 1 x407b3b44 1} {x42f20000 xc1bddac3 x40743f24 1 x40743f24 1} {x42f40000 xc19f057b x40770328 1 x40770328 1} {x42f60000 xc18019f9 x40890cba 1 x40890cba 1} {x42f80000 xc134fe3c x40a0cc46 1 x40a0cc46 1} {x42fa0000 xc0becf59 x40b4fe3c 1 x40b4fe3c 1} {x42fc0000 0 x40c732d4 1 x40c732d4 1} {x42fe0000 x40cf964f x40c8459b 1 x40c8459b 1} {x43000000 x4148459b x40c62b0c 1 x40c62b0c 1} {x43010000 x4196fb1a x40d22b27 1 x40d22b27 1} {x43020000 x41cd3861 x40dd3e8c 1 x40dd3e8c 1} {x43030000 x4202cd30 x40e87992 1 x40e87992 1} {x43040000 x4220ba95 x40ede858 1 x40ede858 1} {x43050000 x423e4746 x40f0eb30 1 x40f0eb30 1} {x43060000 x425cf561 x40fc6e48 1 x40fc6e48 1} {x43070000 x427d62d8 x4106c0a6 1 x4106c0a6 1} {x43080000 x42902ada x410ecbcc 1 x410ecbcc 1} {x43090000 x42a2645f x410f1d68 1 x410f1d68 1} {x430a0000 x42b3f234 x410a8ad8 1 x410a8ad8 1} {x430b0000 x42c50715 x410604ec 1 x410604ec 1} {x430c0000 x42d5736f x41076164 1 x41076164 1} {x430d0000 x42e6df6e x410e4bac 1 x410e4bac 1} {x430e0000 x42f9065a x410dc5f0 1 x410dc5f0 1} {x430f0000 x43052875 x4109b968 1 x4109b968 1} {x43100000 x430dba5a x4107d810 1 x4107d810 1} {x43110000 x43162377 x4101b740 1 x4101b740 1} {x43120000 x431df142 x40f25830 1 x40f25830 1} {x43130000 x432548fa x40e36c90 1 x40e36c90 1} {x43140000 x432c280b x40cfb530 1 x40cfb530 1} {x43150000 x4332444d x40a02ae0 1 x40a02ae0 1} {x43160000 x43362ab9 x40563da0 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke27 262656 bezier {cc {f 8224} {p {0 0 1} {x44be9431 x4438c313 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke28 262656 bezier {cc {f 8224} {p {0 0 1} {x44be9431 x4438c313 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3a9bb8a 0 1 x40df1f60 1} {x42580000 xc3a61c3e x40f93a40 1 x40f93a40 1} {x425c0000 xc3a1f1b8 x40e9bde0 1 x40e9bde0 1} {x42600000 xc39ece4f x40ff7080 1 x40ff7080 1} {x42640000 xc399f634 x41170230 1 x41170230 1} {x42680000 xc3955e2c x410b5750 1 x410b5750 1} {x426c0000 xc39140bf x410f0af0 1 x410f0af0 1} {x42700000 xc38c6d7d x4118fb50 1 x4118fb50 1} {x42740000 xc387b10a x410d42e0 1 x410d42e0 1} {x42780000 xc383994f x410516c8 1 x410516c8 1} {x427c0000 xc37ebf3b x41065678 1 x41065678 1} {x42800000 xc37667cf x410178a0 1 x410178a0 1} {x42820000 xc36e9027 x40ef76b0 1 x40ef76b0 1} {x42840000 xc3677064 x40d390c0 1 x40d390c0 1} {x42860000 xc361571b x40d79e50 1 x40d79e50 1} {x42880000 xc359f67f x40d93810 1 x40d93810 1} {x428a0000 xc353c39a x40d598a0 1 x40d598a0 1} {x428c0000 xc34c9cf5 x40cbd8d0 1 x40cbd8d0 1} {x428e0000 xc347060d x40b36bf0 1 x40b36bf0 1} {x42900000 xc3416636 x40d7fdc0 1 x40d7fdc0 1} {x42920000 xc3398631 x40e3a800 1 x40e3a800 1} {x42940000 xc3332bb6 x40bc4cb0 1 x40bc4cb0 1} {x42960000 xc32dc166 x40a23410 1 x40a23410 1} {x42980000 xc3290875 x409bf970 1 x409bf970 1} {x429a0000 xc32401cf x408ca680 1 x408ca680 1} {x429c0000 xc3203e0d x40694fe0 1 x40694fe0 1} {x429e0000 xc31cb750 x40711640 1 x40711640 1} {x42a00000 xc318b55b x40669c00 1 x40669c00 1} {x42a20000 xc3158270 x409a5af0 1 x409a5af0 1} {x42a40000 xc30f0fac x40ad09d0 1 x40ad09d0 1} {x42a60000 xc30ab1d3 x40981f00 1 x40981f00 1} {x42a80000 xc3058dbc x40a42460 1 x40a42460 1} {x42aa0000 xc3006f8d x4088a020 1 x4088a020 1} {x42ac0000 xc2fa0774 x40368bb0 1 x40368bb0 1} {x42ae0000 xc2f5765f x3ff93300 1 x3ff93300 1} {x42b00000 xc2f23ddc x3e912000 1 x3e912000 1} {x42b20000 xc2f20d7c x3e584900 1 x3e584900 1} {x42b40000 xc2f16593 -} {x42b60000 xc2f22946 -} {x42b80000 xc2f19527 -} {x42ba0000 xc2f1b38d -} {x42bc0000 xc2f1571e -} {x42be0000 xc2f20c4b -} {x42c00000 xc2f1df10 -} {x42c20000 xc2f24b0b -} {x42c40000 xc2edded7 x400d9580 1 x400d9580 1} {x42c60000 xc2e971b3 x402b0370 1 x402b0370 1} {x42c80000 xc2e32ea0 x4040dfb0 1 x4040dfb0 1} {x42ca0000 xc2dd63b8 x40323620 1 x40323620 1} {x42cc0000 xc2d80b3e x402404f0 1 x402404f0 1} {x42ce0000 xc2d32369 x4020e670 1 x4020e670 1} {x42d00000 xc2cdfcd7 x402636c0 1 x402636c0 1} {x42d20000 xc2c8bffd x401685c0 1 x401685c0 1} {x42d40000 xc2c4947b x40139f90 1 x40139f90 1} {x42d60000 xc2bf8604 x402802d0 1 x402802d0 1} {x42d80000 xc2ba144e x403b2590 1 x403b2590 1} {x42da0000 xc2b3d3ab x40459cc0 1 x40459cc0 1} {x42dc0000 xc2adba82 x405312c0 1 x405312c0 1} {x42de0000 xc2a6a27f x407a2e60 1 x407a2e60 1} {x42e00000 xc29e179c x40866020 1 x40866020 1} {x42e20000 xc295d67b x408b9418 1 x408b9418 1} {x42e40000 xc28ca519 x409482c8 1 x409482c8 1} {x42e60000 xc2834622 x40987be0 1 x40987be0 1} {x42e80000 xc2732b3a x4097a3d8 1 x4097a3d8 1} {x42ea0000 xc260a34e x40a51bd8 1 x40a51bd8 1} {x42ec0000 xc249e444 x40b095ec 1 x40b095ec 1} {x42ee0000 xc2347dd3 x40ac9284 1 x40ac9284 1} {x42f00000 xc21ebfa3 x40c76778 1 x40c76778 1} {x42f20000 xc202a3f5 x40d3e7b0 1 x40d3e7b0 1} {x42f40000 xc1d38b6e x40d67c74 1 x40d67c74 1} {x42f60000 xc19a09b0 x40d15a95 1 x40d15a95 1} {x42f80000 xc155bc47 x40caa25c 1 x40caa25c 1} {x42fa0000 xc0d2e209 x40d5bc47 1 x40d5bc47 1} {x42fc0000 0 x40d548f8 1 x40d548f8 1} {x42fe0000 x40d7afe6 x40d0bb34 1 x40d0bb34 1} {x43000000 x4150bb34 x40bf74a7 1 x40bf74a7 1} {x43010000 x4195a64d x40b52462 1 x40b52462 1} {x43020000 x41c2efcb x40a865f4 1 x40a865f4 1} {x43030000 x41e9d947 x409ba262 1 x409ba262 1} {x43040000 x4208607e x408beb2a 1 x408beb2a 1} {x43050000 x4217e76e x405d71c0 1 x405d71c0 1} {x43060000 x42240eb6 x403b8970 1 x403b8970 1} {x43070000 x422f589c x403014e8 1 x403014e8 1} {x43080000 x423a1153 x402918d8 1 x402918d8 1} {x43090000 x42447bb7 x401c8850 1 x401c8850 1} {x430a0000 x424da25d x4013fde8 1 x4013fde8 1} {x430b0000 x4256fb74 x40100620 1 x40100620 1} {x430c0000 x425fa321 x3fffca40 1 x3fffca40 1} {x430d0000 x4266f818 x400d4038 1 x400d4038 1} {x430e0000 x42714b28 x401fd8a8 1 x401fd8a8 1} {x430f0000 x427af32d x401cb250 1 x401cb250 1} {x43100000 x428270b9 x402e8e58 1 x402e8e58 1} {x43110000 x4288627c x40270390 1 x40270390 1} {x43120000 x428ce0f2 x400ddec0 1 x400ddec0 1} {x43130000 x42914068 x3ff3cb60 1 x3ff3cb60 1} {x43140000 x42947f4d x3f838700 1 x3f838700 1} {x43150000 x42955ca0 -} {x43160000 x42950f4d xbe67f900 1 0 1}} {{x42540000 x446629ca 0 1 xc1171810 1} {x42580000 x4463d8c6 xc10e92e0 1 xc10e92e0 1} {x425c0000 x4461b533 xc1130ce0 1 xc1130ce0 1} {x42600000 x445f405f xc14b3c80 1 xc14b3c80 1} {x42640000 x445b5b4f xc17e96a0 1 xc17e96a0 1} {x42680000 x44574baa xc1848f10 1 xc1848f10 1} {x426c0000 x4453125e xc17d4340 1 xc17d4340 1} {x42700000 x444f6190 xc1713080 1 xc1713080 1} {x42740000 x444b88da xc176fd20 1 xc176fd20 1} {x42780000 x4447a9a7 xc17ffb80 1 xc17ffb80 1} {x427c0000 x444388fe xc18c60b0 1 xc18c60b0 1} {x42800000 x443ee39c xc195ea80 1 xc195ea80 1} {x42820000 x443a2a56 xc1981d10 1 xc1981d10 1} {x42840000 x443561cb xc19caef0 1 xc19caef0 1} {x42860000 x44305f67 xc1a2afc0 1 xc1a2afc0 1} {x42880000 x442b36cf xc19b8c30 1 xc19b8c30 1} {x428a0000 x4426a6a4 xc19b22f0 1 xc19b22f0 1} {x428c0000 x442184a0 xc199fe60 1 xc199fe60 1} {x428e0000 x441d06be xc19308a0 1 xc19308a0 1} {x42900000 x44185416 xc1a65b00 1 xc1a65b00 1} {x42920000 x4412a10e xc1b34a40 1 xc1b34a40 1} {x42940000 x440d1f72 xc1a63580 1 xc1a63580 1} {x42960000 x44083db6 xc1979c60 1 xc1979c60 1} {x42980000 x4403a5ac xc189d208 1 xc189d208 1} {x429a0000 x43ff412b xc17a7fc0 1 xc17a7fc0 1} {x429c0000 x43f7a35c xc16babb0 1 xc16babb0 1} {x429e0000 x43f08670 xc16d3990 1 xc16d3990 1} {x42a00000 x43e8cfc3 xc1846450 1 xc1846450 1} {x42a20000 x43dff9e6 xc1953fa8 1 xc1953fa8 1} {x42a40000 x43d627ce xc1937ff8 1 xc1937ff8 1} {x42a60000 x43cd89e7 xc194c0b0 1 xc194c0b0 1} {x42a80000 x43c38fb8 xc19e61c8 1 xc19e61c8 1} {x42aa0000 x43b9bdae xc1929540 1 xc1929540 1} {x42ac0000 x43b13d10 xc1876220 1 xc1876220 1} {x42ae0000 x43a8d16a xc1883388 1 xc1883388 1} {x42b00000 x43a0369f xc18674b8 1 xc18674b8 1} {x42b20000 x439802d3 xc185fb20 1 xc185fb20 1} {x42b40000 x438f773b xc18e22f0 1 xc18e22f0 1} {x42b60000 x43863e75 xc19350e4 1 xc19350e4 1} {x42b80000 x437a1a3d xc19109f8 1 xc19109f8 1} {x42ba0000 x43683a6c xc18beb98 1 xc18beb98 1} {x42bc0000 x43571f57 xc1815ec0 1 xc1815ec0 1} {x42be0000 x4347e2bc xc162ce70 1 xc162ce70 1} {x42c00000 x433ac589 xc14337d8 1 xc14337d8 1} {x42c20000 x432f7bc1 xc1293e10 1 xc1293e10 1} {x42c40000 x43259dc7 xc12810f0 1 xc12810f0 1} {x42c60000 x431a79a3 xc13b5a88 1 xc13b5a88 1} {x42c80000 x430e3276 xc13a3200 1 xc13a3200 1} {x42ca0000 x43033363 xc12990ac 1 xc12990ac 1} {x42cc0000 x42f200c1 xc12d3f40 1 xc12d3f40 1} {x42ce0000 x42db16f6 xc12f8f0c 1 xc12f8f0c 1} {x42d00000 x42c61cfe xc1179624 1 xc1179624 1} {x42d20000 x42b5316d xc10102b8 1 xc10102b8 1} {x42d40000 x42a5dc50 xc0f44600 1 xc0f44600 1} {x42d60000 x4296a8ad xc0eb7470 1 xc0eb7470 1} {x42d80000 x42886dc2 xc0e9b5b4 1 xc0e9b5b4 1} {x42da0000 x4272e3ed xc0f1f36c 1 xc0f1f36c 1} {x42dc0000 x42545ea9 xc0f38244 1 xc0f38244 1} {x42de0000 x4236035c xc0dfd68c 1 xc0dfd68c 1} {x42e00000 x421c6906 xc0ba82d0 1 xc0ba82d0 1} {x42e20000 x420762a8 xc0a25092 1 xc0a25092 1} {x42e40000 x41e7a9c3 xc090886c 1 xc090886c 1} {x42e60000 x41c6811a xc06d5cac 1 xc06d5cac 1} {x42e80000 x41ac5298 xc03a5cb4 1 xc03a5cb4 1} {x42ea0000 x4197e9ed xc033ea2a 1 xc033ea2a 1} {x42ec0000 x417eb01b xc03093c6 1 xc03093c6 1} {x42ee0000 x415789f7 xc011392e 1 xc011392e 1} {x42f00000 x41361384 xc025c154 1 xc025c154 1} {x42f20000 x4104a94d xc02b26bf 1 xc02b26bf 1} {x42f40000 x40c10049 xc0111600 1 xc0111600 1} {x42f60000 x40707933 xbfe14e0a 1 xbfe14e0a 1} {x42f80000 x4020b288 xbfbc8706 1 xbfbc8706 1} {x42fa0000 x3f4fc8b2 xbfa0b288 1 xbfa0b288 1} {x42fc0000 0 xbf433391 1 xbf433391 1} {x42fe0000 xbf369e70 xbf22477c 1 xbf22477c 1} {x43000000 xbfa2477c xbec8b8d4 1 xbec8b8d4 1} {x43010000 xbfbfaba2 -} {x43020000 xbf6b3e2e x3f83bcfe 1 x3f83bcfe 1} {x43030000 x3f0f9cb4 x3fb8feee 1 x3fb8feee 1} {x43040000 x3ffc5ec5 x3fc933b3 1 x3fc933b3 1} {x43050000 x406d1ae0 x3ff9fe2c 1 x3ff9fe2c 1} {x43060000 x40bc16c7 x40079bac 1 x40079bac 1} {x43070000 x40fe291c x400a2be5 1 x400a2be5 1} {x43080000 x41232156 x4025b958 1 x4025b958 1} {x43090000 x4151f13a x40306888 1 x40306888 1} {x430a0000 x417b559a x40185f24 1 x40185f24 1} {x430b0000 x418f1066 x3fff2988 1 x3fff2988 1} {x430c0000 x419d8ffe x4004cc24 1 x4004cc24 1} {x430d0000 x41b0436f x4011ca48 1 x4011ca48 1} {x430e0000 x41c20290 x400dc900 1 x400dc900 1} {x430f0000 x41d3b5af x4002c808 1 x4002c808 1} {x43100000 x41e2b492 x4008efcc 1 x4008efcc 1} {x43110000 x41f5f1a2 x402035d0 1 x402035d0 1} {x43120000 x42056103 x402482c0 1 x402482c0 1} {x43130000 x420f8929 x3ff35a50 1 x3ff35a50 1} {x43140000 x421496a8 x3f91a8b0 1 x3f91a8b0 1} {x43150000 x4218a3b4 -} {x43160000 x421411c4 xbfdb5d00 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke29 262656 bezier {cc {f 8224} {p {0 0 1} {x44b23a25 x4446076d 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke30 262656 bezier {cc {f 8224} {p {0 0 1} {x44b23a25 x4446076d 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3bea4d9 0 1 x40f0e7c0 1} {x42580000 xc3bac198 x410450a0 1 x410450a0 1} {x425c0000 xc3b65fcf x410c2be0 1 x410c2be0 1} {x42600000 xc3b1feda x41150be0 1 x41150be0 1} {x42640000 xc3ad0f11 x412c0fe0 1 x412c0fe0 1} {x42680000 xc3a73ddc x412b81a0 1 x412b81a0 1} {x426c0000 xc3a256f7 x412866d0 1 x412866d0 1} {x42700000 xc39cb76f x4134cbd0 1 x4134cbd0 1} {x42740000 xc3970a3a x412e3540 1 x412e3540 1} {x42780000 xc391d41b x41265dc0 1 x41265dc0 1} {x427c0000 xc38ca45e x4115b840 1 x4115b840 1} {x42800000 xc3887897 x410876c0 1 x410876c0 1} {x42820000 xc3841cf2 x410767a0 1 x410767a0 1} {x42840000 xc380021d x41025cc0 1 x41025cc0 1} {x42860000 xc377ee4c x410bd718 1 x410bd718 1} {x42880000 xc36e8957 x410a5110 1 x410a5110 1} {x428a0000 xc366a42a x40f0f650 1 x40f0f650 1} {x428c0000 xc35f79f2 x40d75770 1 x40d75770 1} {x428e0000 xc3592eb3 x40ca1db0 1 x40ca1db0 1} {x42900000 xc352d817 x40e51530 1 x40e51530 1} {x42920000 xc34add60 x40f062d0 1 x40f062d0 1} {x42940000 xc343d1ea x40d0ffd0 1 x40d0ffd0 1} {x42960000 xc33dcd63 x40adc630 1 x40adc630 1} {x42980000 xc338f587 x409df320 1 x409df320 1} {x429a0000 xc333ee31 x4093d110 1 x4093d110 1} {x429c0000 xc32fb876 x4072c600 1 x4072c600 1} {x429e0000 xc32c5801 x406c0960 1 x406c0960 1} {x42a00000 xc328582b x40831530 1 x40831530 1} {x42a20000 xc32426ae x40a9e0e0 1 x40a9e0e0 1} {x42a40000 xc31dba1d x40ac6c30 1 x40ac6c30 1} {x42a60000 xc3195feb x40986d80 1 x40986d80 1} {x42a80000 xc3143345 x40a629c0 1 x40a629c0 1} {x42aa0000 xc30efd4f x4095c8b0 1 x4095c8b0 1} {x42ac0000 xc30ad6ba x4069f520 1 x4069f520 1} {x42ae0000 xc307ada6 x4038ba60 1 x4038ba60 1} {x42b00000 xc30510e7 x3fd83cc0 1 x3fd83cc0 1} {x42b20000 xc3044cb3 x3f0a4000 1 x3f0a4000 1} {x42b40000 xc303fc67 x3efb0900 1 x3efb0900 1} {x42b60000 xc30351aa x3f0bdf00 1 x3f0bdf00 1} {x42b80000 xc302e4a9 x3f20ec00 1 x3f20ec00 1} {x42ba0000 xc3020fd2 x3f110280 1 x3f110280 1} {x42bc0000 xc301c2a4 x3e8a1500 1 x3e8a1500 1} {x42be0000 xc30185bd -} {x42c00000 xc3019be8 xbe1ee200 1 xbe1ee200 1} {x42c20000 xc301d52e -} {x42c40000 xc2fe73e9 x4030c840 1 x4030c840 1} {x42c60000 xc2f89dd8 x40439090 1 x40439090 1} {x42c80000 xc2f23ae0 x4047a960 1 x4047a960 1} {x42ca0000 xc2ec2342 x4035e1e0 1 x4035e1e0 1} {x42cc0000 xc2e6dcc2 x40404b30 1 x40404b30 1} {x42ce0000 xc2e01e8f x403d12b0 1 x403d12b0 1} {x42d00000 xc2db0b97 x40242a30 1 x40242a30 1} {x42d20000 xc2d5dbec x401767d0 1 x401767d0 1} {x42d40000 xc2d1951a x400a3fb0 1 x400a3fb0 1} {x42d60000 xc2cd37f1 x401a8b70 1 x401a8b70 1} {x42d80000 xc2c7ec63 x40386f60 1 x40386f60 1} {x42da0000 xc2c1b0fb x405cf430 1 x405cf430 1} {x42dc0000 xc2ba1d20 x40727890 1 x40727890 1} {x42de0000 xc2b28972 x40820c90 1 x40820c90 1} {x42e00000 xc2a9db8e x408ad7a0 1 x408ad7a0 1} {x42e20000 xc2a12e7e x4098b6e8 1 x4098b6e8 1} {x42e40000 xc296c4b1 x40a44a70 1 x40a44a70 1} {x42e60000 xc28ca530 x40a433c8 1 x40a433c8 1} {x42e80000 xc2823e38 x40a2c1f8 1 x40a2c1f8 1} {x42ea0000 xc27099e2 x40ac5d10 1 x40ac5d10 1} {x42ec0000 xc259652c x40c41ca0 1 x40c41ca0 1} {x42ee0000 xc23f92ba x40c53488 1 x40c53488 1} {x42f00000 xc228180a x40ccaec8 1 x40ccaec8 1} {x42f20000 xc20c6708 x40dc7a9c 1 x40dc7a9c 1} {x42f40000 xc1e1f2c6 x40e359a4 1 x40e359a4 1} {x42f60000 xc1a7213e x40e0333a 1 x40e0333a 1} {x42f80000 xc163b252 x40def137 1 x40def137 1} {x42fa0000 xc0dea28a x40e3b252 1 x40e3b252 1} {x42fc0000 0 x40e4ce6a 1 x40e4ce6a 1} {x42fe0000 x40eafa4b x40e31c34 1 x40e31c34 1} {x43000000 x41631c34 x40d697c4 1 x40d697c4 1} {x43010000 x41a60a75 x40ca0b50 1 x40ca0b50 1} {x43020000 x41d693c2 x40b678ba 1 x40b678ba 1} {x43030000 x4200a369 x40a90c40 1 x40a90c40 1} {x43040000 x42158cf1 x40982708 1 x40982708 1} {x43050000 x4226ad2b x407e0fa0 1 x407e0fa0 1} {x43060000 x42354ee5 x40671060 1 x40671060 1} {x43070000 x42438f37 x404da8e0 1 x404da8e0 1} {x43080000 x424f0401 x4038b6b0 1 x4038b6b0 1} {x43090000 x425aa60d x403b6220 1 x403b6220 1} {x430a0000 x42667045 x402cce88 1 x402cce88 1} {x430b0000 x42703fde x40136ce8 1 x40136ce8 1} {x430c0000 x4278dde2 x400bf2d0 1 x400bf2d0 1} {x430d0000 x4280df1c x4023e5f0 1 x4023e5f0 1} {x430e0000 x4286ad50 x4029be80 1 x4029be80 1} {x430f0000 x428b7b04 x4022fb60 1 x4022fb60 1} {x43100000 x4290dd06 x40227b10 1 x40227b10 1} {x43110000 x4295a2b5 x40237350 1 x40237350 1} {x43120000 x429b143b x401ace10 1 x401ace10 1} {x43130000 x429f4f96 x3ff199e0 1 x3ff199e0 1} {x43140000 x42a2a10a x3fbfb900 1 x3fbfb900 1} {x43150000 x42a54d5e -} {x43160000 x42a4fafa xbe772c00 1 0 1}} {{x42540000 x446fc847 0 1 xc12012e0 1} {x42580000 x446d44be xc1228100 1 xc1228100 1} {x425c0000 x446ab43f xc13e66c0 1 xc13e66c0 1} {x42600000 x44675188 xc169dbc0 1 xc169dbc0 1} {x42640000 x44636561 xc184bb40 1 xc184bb40 1} {x42680000 x445f05d4 xc18a5740 1 xc18a5740 1} {x426c0000 x445abfed xc183bd60 1 xc183bd60 1} {x42700000 x4456c9fe xc182a6f0 1 xc182a6f0 1} {x42740000 x4452957e xc18b0550 1 xc18b0550 1} {x42780000 x444e19a9 xc1948fa0 1 xc1948fa0 1} {x427c0000 x44494c84 xc1972df0 1 xc1972df0 1} {x42800000 x4444a6ca xc19dd660 1 xc19dd660 1} {x42820000 x443f6f1e xc1a85630 1 xc1a85630 1} {x42840000 x443a2167 xc1af5dc0 1 xc1af5dc0 1} {x42860000 x44347942 xc1c20fa0 1 xc1c20fa0 1} {x42880000 x442e006d xc1bc4790 1 xc1bc4790 1} {x428a0000 x4428b4c9 xc1a7bab0 1 xc1a7bab0 1} {x428c0000 x442384c2 xc1a0be20 1 xc1a0be20 1} {x428e0000 x441ea8e7 xc19d4f00 1 xc19d4f00 1} {x42900000 x4419afd2 xc1ab81c0 1 xc1ab81c0 1} {x42920000 x4413f0cb xc1b6e5d0 1 xc1b6e5d0 1} {x42940000 x440e4175 xc1abec70 1 xc1abec70 1} {x42960000 x44093204 xc19a2d60 1 xc19a2d60 1} {x42980000 x44049e9f xc18988f0 1 xc18988f0 1} {x429a0000 x44009975 xc1789410 1 xc1789410 1} {x429c0000 x43f9b3fd xc16def80 1 xc16def80 1} {x429e0000 x43f253f2 xc177ad20 1 xc177ad20 1} {x42a00000 x43ea392b xc18cc9b0 1 xc18cc9b0 1} {x42a20000 x43e0babc xc19a5880 1 xc19a5880 1} {x42a40000 x43d6ee1b xc1938290 1 xc1938290 1} {x42a60000 x43ce4a6a xc1950b38 1 xc1950b38 1} {x42a80000 x43c44cb4 xc19eb990 1 xc19eb990 1} {x42aa0000 x43ba7338 xc1936420 1 xc1936420 1} {x42ac0000 x43b1e030 xc188be90 1 xc188be90 1} {x42ae0000 x43a95b66 xc18a1780 1 xc18a1780 1} {x42b00000 x43a09d40 xc186d860 1 xc186d860 1} {x42b20000 x4398805a xc1881e40 1 xc1881e40 1} {x42b40000 x438f9978 xc194cb40 1 xc194cb40 1} {x42b60000 x4385e6f2 xc1983b98 1 xc1983b98 1} {x42b80000 x4379240a xc1963f94 1 xc1963f94 1} {x42ba0000 x43663dff xc190ac60 1 xc190ac60 1} {x42bc0000 x4354f8f2 xc1832a00 1 xc1832a00 1} {x42be0000 x4345737f xc1646898 1 xc1646898 1} {x42c00000 x43386bdf xc143f6b8 1 xc143f6b8 1} {x42c20000 x432cf4a8 xc12f5500 1 xc12f5500 1} {x42c40000 x4322813f xc131c420 1 xc131c420 1} {x42c60000 x4316bc24 xc1419550 1 xc1419550 1} {x42c80000 x430a4e95 xc13d9f28 1 xc13d9f28 1} {x42ca0000 x42fe107e xc12e00a4 1 xc12e00a4 1} {x42cc0000 x42e91d01 xc134aa3c 1 xc134aa3c 1} {x42ce0000 x42d0e5ef xc1372dc0 1 xc1372dc0 1} {x42d00000 x42bb5191 xc11cb82c 1 xc11cb82c 1} {x42d20000 x42a9b7e4 xc1047b50 1 xc1047b50 1} {x42d40000 x429a32bd xc0fa60b8 1 xc0fa60b8 1} {x42d60000 x428a6bcd xc0f38954 1 xc0f38954 1} {x42d80000 x42778325 xc0e77e40 1 xc0e77e40 1} {x42da0000 x425af80a xc0f09dac 1 xc0f09dac 1} {x42dc0000 x423b5bba xc0f50e6c 1 xc0f50e6c 1} {x42de0000 x421db46f xc0db628c 1 xc0db628c 1} {x42e00000 x42048317 xc0b4a7ec 1 xc0b4a7ec 1} {x42e20000 x41e114e8 xc09df96c 1 xc09df96c 1} {x42e40000 x41ba0978 xc08f0316 1 xc08f0316 1} {x42e60000 x4199935d xc054e4e8 1 xc054e4e8 1} {x42e80000 x4184d03e xc01da834 1 xc01da834 1} {x42ea0000 x416452a0 xc0225816 1 xc0225816 1} {x42ec0000 x41387471 xc0215a76 1 xc0215a76 1} {x42ee0000 x4113a565 xc0036efc 1 xc0036efc 1} {x42f00000 x40ed79e6 xbfe5490e 1 xbfe5490e 1} {x42f20000 x40b4a643 xbfe9e73f 1 xbfe9e73f 1} {x42f40000 x40710c8d xbfea34f2 1 xbfea34f2 1} {x42f60000 x3ffe2f28 xbf9fa71e 1 xbf9fa71e 1} {x42f80000 x3fa2cadd xbf68c300 1 xbf68c300 1} {x42fa0000 x3e2b6142 xbf0088f2 1 xbf0088f2 1} {x42fc0000 0 xbe3cfbfb 1 xbe3cfbfb 1} {x42fe0000 xbe4e96b4 xbd5b3738 1 xbd5b3738 1} {x43000000 xbe60db4e -} {x43010000 x3e8dc62a x3f51cb33 1 x3f51cb33 1} {x43020000 x3fb5afc9 x3fcd4553 1 x3fcd4553 1} {x43030000 x405efe18 x40065c88 1 x40065c88 1} {x43040000 x40b3c87a x4014cd58 1 x4014cd58 1} {x43050000 x41022632 x401f49d4 1 x401f49d4 1} {x43060000 x41298927 x401dc2e2 1 x401dc2e2 1} {x43070000 x415107a3 x403720b6 1 x403720b6 1} {x43080000 x41828cc1 x4046de12 1 x4046de12 1} {x43090000 x419a3b56 x40411b40 1 x40411b40 1} {x430a0000 x41b2d391 x40332e38 1 x40332e38 1} {x430b0000 x41c706e4 x4023e888 1 x4023e888 1} {x430c0000 x41dbcdb3 x4028ca8c 1 x4028ca8c 1} {x430d0000 x41f13987 x4026e83c 1 x4026e83c 1} {x430e0000 x4202c3e1 x4027f8b4 1 x4027f8b4 1} {x430f0000 x420d9bda x402f6cd0 1 x402f6cd0 1} {x43100000 x4218b17b x403d96d0 1 x403d96d0 1} {x43110000 x42254eb4 x40430cc0 1 x40430cc0 1} {x43120000 x42311313 x402bdb30 1 x402bdb30 1} {x43130000 x423aca1a x40160d70 1 x40160d70 1} {x43140000 x4243d4c1 x3fb39710 1 x3fb39710 1} {x43150000 x4246038b -} {x43160000 x42413402 xbfe6e9b0 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke31 262656 bezier {cc {f 8224} {p {0 0 1} {x44ece5cb x44533bf8 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke32 262656 bezier {cc {f 8224} {p {0 0 1} {x44ece5cb x44533bf8 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc2a45d33 0 1 x3f8e1a50 1} {x42580000 xc2a1c278 x3fd7d7a0 1 x3fd7d7a0 1} {x425c0000 xc29d9e76 x401cf0a0 1 x401cf0a0 1} {x42600000 xc297f36e x4086ff18 1 x4086ff18 1} {x42640000 xc28cbe93 x40a99838 1 x40a99838 1} {x42680000 xc282c067 x40b95d80 1 x40b95d80 1} {x426c0000 xc26b25c6 x408c8620 1 x408c8620 1} {x42700000 xc2625f46 x40138fb8 1 x40138fb8 1} {x42740000 xc258b3cf x403cfb48 1 x403cfb48 1} {x42780000 xc24abfdd x406d9710 1 x406d9710 1} {x427c0000 xc23b00ed x40746bd0 1 x40746bd0 1} {x42800000 xc22c3263 x40738450 1 x40738450 1} {x42820000 xc21c9063 x40899c40 1 x40899c40 1} {x42840000 xc209cb53 -} {x42860000 xc20ab9a5 xbee5bdc0 1 xbee5bdc0 1} {x42880000 xc20d624a -} {x428a0000 xc20caa72 -} {x428c0000 xc211263f -} {x428e0000 xc1ff7043 x4094b7cc 1 x4094b7cc 1} {x42900000 xc1d7f098 x409ee20e 1 x409ee20e 1} {x42920000 xc1afff3c x409c3668 1 x409c3668 1} {x42940000 xc189d564 x4082889c 1 x4082889c 1} {x42960000 xc15d75dc x405ea3c4 1 x405ea3c4 1} {x42980000 xc12458e6 x40692a05 1 x40692a05 1} {x429a0000 xc0d1c1b3 x405d4ea2 1 x405d4ea2 1} {x429c0000 xc056c654 x3fd97fac 1 x3fd97fac 1} {x429e0000 xc0328662 x3f4ca677 1 x3f4ca677 1} {x42a00000 xbfe0e631 x3f808c0e 1 x3f808c0e 1} {x42a20000 xbf47e950 x3f87224f 1 x3f87224f 1} {x42a40000 x3eb579b3 x3f74a59f 1 x3f74a59f 1} {x42a60000 x3f90b0f7 x3eef2412 1 x3eef2412 1} {x42a80000 x3fa4f076 x3e15464c 1 x3e15464c 1} {x42aa0000 x3fb6028a -} {x42ac0000 x3f970403 xbf39f72a 1 xbf39f72a 1} {x42ae0000 xbeb273a8 xbff6034c 1 xbff6034c 1} {x42b00000 xc02a814b xc023a620 1 xc023a620 1} {x42b20000 xc0aecd5b xc0293710 1 xc0293710 1} {x42b40000 xc0fe77b6 xc02f89ad 1 xc02f89ad 1} {x42b60000 xc12f2b84 xc03b2bd0 1 xc03b2bd0 1} {x42b80000 xc15cd1c3 xc040f84c 1 xc040f84c 1} {x42ba0000 xc187d3d5 xc0466f82 1 xc0466f82 1} {x42bc0000 xc1a004c2 xc04a6ac0 1 xc04a6ac0 1} {x42be0000 xc1ba6e85 xc055f358 1 xc055f358 1} {x42c00000 xc1d58198 xc05cdf58 1 xc05cdf58 1} {x42c20000 xc1f1a65b xc00f5d64 1 xc00f5d64 1} {x42c40000 xc1f958f1 xbf694710 1 xbf694710 1} {x42c60000 xc2001d66 xbf532850 1 xbf532850 1} {x42c80000 xc20345bb xbf3aaa20 1 xbf3aaa20 1} {x42ca0000 xc205f2b7 xbf20f6c0 1 xbf20f6c0 1} {x42cc0000 xc2084d71 xbf314c80 1 xbf314c80 1} {x42ce0000 xc20b7d1b xbf8f64e0 1 xbf8f64e0 1} {x42d00000 xc21143bf xbfb8e360 1 xbfb8e360 1} {x42d20000 xc2170b51 xbfb6d890 1 xbfb6d890 1} {x42d40000 xc21cb148 xbfdd9e30 1 xbfdd9e30 1} {x42d60000 xc224e534 xbfd55ed0 1 xbfd55ed0 1} {x42d80000 xc22a0735 xbf69d840 1 xbf69d840 1} {x42da0000 xc22c33f6 xbe293200 1 xbe293200 1} {x42dc0000 xc22c6c5c -} {x42de0000 xc22b4761 x3f131b20 1 x3f131b20 1} {x42e00000 xc227d383 x3f96ea60 1 x3f96ea60 1} {x42e20000 xc221d8bb x3fc41c40 1 x3fc41c40 1} {x42e40000 xc21b91bf x3fd87970 1 x3fd87970 1} {x42e60000 xc2145124 x40008758 1 x40008758 1} {x42e80000 xc20b80d4 x400b0d38 1 x400b0d38 1} {x42ea0000 xc202ef7d x40136e88 1 x40136e88 1} {x42ec0000 xc1f22606 x40226f7c 1 x40226f7c 1} {x42ee0000 xc1dd431b x403e19e4 1 x403e19e4 1} {x42f00000 xc1c29f8d x405e28b8 1 x405e28b8 1} {x42f20000 xc1a5b8ed x40731e28 1 x40731e28 1} {x42f40000 xc185d803 x408166ad 1 x408166ad 1} {x42f60000 xc14a0b2d x40846b8e 1 x40846b8e 1} {x42f80000 xc1074478 x4085c046 1 x4085c046 1} {x42fa0000 xc08895ce x40874478 1 x40874478 1} {x42fc0000 0 x4085e930 1 x4085e930 1} {x42fe0000 x40833c91 x408498ce 1 x408498ce 1} {x43000000 x410498ce x408089ce 1 x408089ce 1} {x43010000 x41422816 x40682d92 1 x40682d92 1} {x43020000 x4178af97 x405b6ce4 1 x405b6ce4 1} {x43030000 x4197ef44 x4043f716 1 x4043f716 1} {x43040000 x41ad5591 x402a3528 1 x402a3528 1} {x43050000 x41c27c8e x4016831c 1 x4016831c 1} {x43060000 x41d2f658 x3ffc6a18 1 x3ffc6a18 1} {x43070000 x41e209d1 x3fcbfbf0 1 x3fcbfbf0 1} {x43080000 x41ec75d6 x3fa351e8 1 x3fa351e8 1} {x43090000 x41f6740e x3fb184a0 1 x3fb184a0 1} {x430a0000 x42015335 x3faf7300 1 x3faf7300 1} {x430b0000 x42063137 x3fb9a470 1 x3fb9a470 1} {x430c0000 x420ced7c x3fcfc220 1 x3fcfc220 1} {x430d0000 x42132d59 x3fcae410 1 x3fcae410 1} {x430e0000 x42199bbd x3fe59a00 1 x3fe59a00 1} {x430f0000 x422186f9 x3fffa690 1 x3fffa690 1} {x43100000 x42299626 x4002bcb0 1 x4002bcb0 1} {x43110000 x4231de8f x3ffad9c0 1 x3ffad9c0 1} {x43120000 x423943c2 x3fe09730 1 x3fe09730 1} {x43130000 x423fe802 x3fb66a60 1 x3fb66a60 1} {x43140000 x4244aa68 x3f3ff380 1 x3f3ff380 1} {x43150000 x4245e79e -} {x43160000 x4241688b xbfd7d390 1 0 1}} {{x42540000 x4432ccc9 0 1 xc10cb2a0 1} {x42580000 x4430994a xc10d3a00 1 xc10d3a00 1} {x425c0000 x442e62f9 xc104bd20 1 xc104bd20 1} {x42600000 x442c7361 xc11e5880 1 xc11e5880 1} {x42640000 x44297035 xc13ccce0 1 xc13ccce0 1} {x42680000 x44268cfa xc15674c0 1 xc15674c0 1} {x426c0000 x4422bc8f xc144adc0 1 xc144adc0 1} {x42700000 x4420678c xc1158200 1 xc1158200 1} {x42740000 x441e107f xc1301900 1 xc1301900 1} {x42780000 x441ae6c4 xc14f0740 1 xc14f0740 1} {x427c0000 x44179845 xc1537da0 1 xc1537da0 1} {x42800000 x44144ad7 xc1565f60 1 xc1565f60 1} {x42820000 x4410e54a xc16ae080 1 xc16ae080 1} {x42840000 x440cf3d3 xc149db80 1 xc149db80 1} {x42860000 x440a966e xc10ef260 1 xc10ef260 1} {x42880000 x44087c40 xc111aa80 1 xc111aa80 1} {x428a0000 x4406091a xc115ca20 1 xc115ca20 1} {x428c0000 x4403cdef xc14a0d60 1 xc14a0d60 1} {x428e0000 x43ff715e xc18513f0 1 xc18513f0 1} {x42900000 x43f6f960 xc1886088 1 xc1886088 1} {x42920000 x43ee654d xc18941d0 1 xc18941d0 1} {x42940000 x43e5d126 xc183b740 1 xc183b740 1} {x42960000 x43ddee65 xc1747950 1 xc1747950 1} {x42980000 x43d68991 xc168c480 1 xc168c480 1} {x429a0000 x43cf621d xc1570810 1 xc1570810 1} {x429c0000 x43c91910 xc14a8b70 1 xc14a8b70 1} {x429e0000 x43c2b966 xc14d4fc0 1 xc14d4fc0 1} {x42a00000 x43bc4414 xc151bb20 1 xc151bb20 1} {x42a20000 x43b59db4 xc161cc10 1 xc161cc10 1} {x42a40000 x43ae2753 xc1758ae0 1 xc1758ae0 1} {x42a60000 x43a64506 xc17f2400 1 xc17f2400 1} {x42a80000 x439e3513 xc17df8f0 1 xc17df8f0 1} {x42aa0000 x43966577 xc16fe440 1 xc16fe440 1} {x42ac0000 x438f36cf xc15bf3c0 1 xc15bf3c0 1} {x42ae0000 x4388a63b xc14b0920 1 xc14b0920 1} {x42b00000 x4382863d xc143e070 1 xc143e070 1} {x42b20000 x4378d068 xc1467568 1 xc1467568 1} {x42b40000 x436c3dcd xc14c70b8 1 xc14c70b8 1} {x42b60000 x435f4251 xc1555ab0 1 xc1555ab0 1} {x42b80000 x43519277 xc1542800 1 xc1542800 1} {x42ba0000 x4344bd51 xc142ec18 1 xc142ec18 1} {x42bc0000 x433934f4 xc1339068 1 xc1339068 1} {x42be0000 x432e4b44 xc11e1ea8 1 xc11e1ea8 1} {x42c00000 x4325711f xc10dba10 1 xc10dba10 1} {x42c20000 x431c9402 xc1032a60 1 xc1032a60 1} {x42c40000 x43150bd3 xc0ee3620 1 xc0ee3620 1} {x42c60000 x430db0a0 xc0f38520 1 xc0f38520 1} {x42c80000 x4305d381 xc0f90620 1 xc0f90620 1} {x42ca0000 x42fc407c xc0f21de0 1 xc0f21de0 1} {x42cc0000 x42ed6346 xc0e36f80 1 xc0e36f80 1} {x42ce0000 x42dfd28c xc0d67278 1 xc0d67278 1} {x42d00000 x42d294f7 xc0c9cda0 1 xc0c9cda0 1} {x42d20000 x42c698d8 xc0b78438 1 xc0b78438 1} {x42d40000 x42bba470 xc0a734f8 1 xc0a734f8 1} {x42d60000 x42b1b239 xc0a175d0 1 xc0a175d0 1} {x42d80000 x42a775b6 xc0b59ce8 1 xc0b59ce8 1} {x42da0000 x429afe9c xc0c6f9f0 1 xc0c6f9f0 1} {x42dc0000 x428e9678 xc0ce6938 1 xc0ce6938 1} {x42de0000 x42813175 xc0bae54c 1 xc0bae54c 1} {x42e00000 x426e739d xc0a7ee7c 1 xc0a7ee7c 1} {x42e20000 x4258674b xc09a6968 1 xc09a6968 1} {x42e40000 x4247d943 xc084950c 1 xc084950c 1} {x42e60000 x42374208 xc0863d70 1 xc0863d70 1} {x42e80000 x422649e7 xc0724bf0 1 xc0724bf0 1} {x42ea0000 x4218f88a xc0518898 1 xc0518898 1} {x42ec0000 x420c18d4 xc0499b04 1 xc0499b04 1} {x42ee0000 x41ff8a53 xc07868a0 1 xc07868a0 1} {x42f00000 x41da1780 xc0964098 1 xc0964098 1} {x42f20000 x41b46a07 xc094f55e 1 xc094f55e 1} {x42f40000 x418f9cd1 xc08be92b 1 xc08be92b 1} {x42f60000 x415ceae3 xc0922899 1 xc0922899 1} {x42f80000 x410d1109 xc09a419b 1 xc09a419b 1} {x42fa0000 x40855290 xc08d1109 1 xc08d1109 1} {x42fc0000 0 xc06dd904 1 xc06dd904 1} {x42fe0000 xc0510ce7 xc0616b5c 1 xc0616b5c 1} {x43000000 xc0e16b5c xc06cc618 1 xc06cc618 1} {x43010000 xc12aa646 xc047e026 1 xc047e026 1} {x43020000 xc154a5c1 xc0464394 1 xc0464394 1} {x43030000 xc186e408 xc02accaa 1 xc02accaa 1} {x43040000 xc195060b xc010c9e0 1 xc010c9e0 1} {x43050000 xc1ab1680 xc0207a48 1 xc0207a48 1} {x43060000 xc1bd249d xc0231fbc 1 xc0231fbc 1} {x43070000 xc1d3de6f xc00ce7ec 1 xc00ce7ec 1} {x43080000 xc1e05e98 xbfc674c8 1 xbfc674c8 1} {x43090000 xc1ecad08 xbfd20870 1 xbfd20870 1} {x430a0000 xc1fa9fa6 xbfbff1e0 1 xbfbff1e0 1} {x430b0000 xc20255a2 xbfee10a0 1 xbfee10a0 1} {x430c0000 xc20c30dd xbfe1f5b0 1 xbfe1f5b0 1} {x430d0000 xc21074fd xbfa568f0 1 xbfa568f0 1} {x430e0000 xc216876c xbfbd23f0 1 xbfbd23f0 1} {x430f0000 xc21c473c xbfe74dc0 1 xbfe74dc0 1} {x43100000 xc224fc48 xbfebda10 1 xbfebda10 1} {x43110000 xc22b04dd xbfb062b0 1 xbfb062b0 1} {x43120000 xc2300273 xbfc82b80 1 xbfc82b80 1} {x43130000 xc2378795 xbffbdb80 1 xbffbdb80 1} {x43140000 xc23fc02b xc026b8a8 1 xc026b8a8 1} {x43150000 xc24c5eaa xc059cc60 1 xc059cc60 1} {x43160000 xc25af9b7 xc071a308 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke33 262656 bezier {cc {f 8224} {p {0 0 1} {x447c34fe x444f020c 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke34 262656 bezier {cc {f 8224} {p {0 0 1} {x447c34fe x444f020c 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3e8c6a9 0 1 x40cc53d0 1} {x42580000 xc3e57363 x40e5cce0 1 x40e5cce0 1} {x425c0000 xc3e19842 x41059f50 1 x41059f50 1} {x42600000 xc3dd196e x411f4740 1 x411f4740 1} {x42640000 xc3d7a3ce x412f4570 1 x412f4570 1} {x42680000 xc3d22517 x412cb7f0 1 x412cb7f0 1} {x426c0000 xc3ccd84f x41297a80 1 x41297a80 1} {x42700000 xc3c78d6f x412fc9b0 1 x412fc9b0 1} {x42740000 xc3c1dbb4 x412da510 1 x412da510 1} {x42780000 xc3bcb31e x41247230 1 x41247230 1} {x427c0000 xc3b79491 x4127bfa0 1 x4127bfa0 1} {x42800000 xc3b23724 x41222480 1 x41222480 1} {x42820000 xc3ad7249 x410cfd40 1 x410cfd40 1} {x42840000 xc3a96750 x41007100 1 x41007100 1} {x42860000 xc3a56b39 x41053c10 1 x41053c10 1} {x42880000 xc3a1138f x41072380 1 x41072380 1} {x428a0000 xc39cf901 x40fc6080 1 x40fc6080 1} {x428c0000 xc399308b x40e90680 1 x40e90680 1} {x428e0000 xc395b0cd x40dd3240 1 x40dd3240 1} {x42900000 xc39246f9 x40effd80 1 x40effd80 1} {x42920000 xc38e30e1 x40f1e560 1 x40f1e560 1} {x42940000 xc38ab7ce x40c8f600 1 x40c8f600 1} {x42960000 xc387e931 x40a6d140 1 x40a6d140 1} {x42980000 xc3858144 x409740a0 1 x409740a0 1} {x429a0000 xc3832f2c x408c0f00 1 x408c0f00 1} {x429c0000 xc38120cc x407ab6a0 1 x407ab6a0 1} {x429e0000 xc37e88a3 x40755a60 1 x40755a60 1} {x42a00000 xc37a96c5 x4085cf80 1 x4085cf80 1} {x42a20000 xc3762bab x409fb290 1 x409fb290 1} {x42a40000 xc3709b9c x40c59fb0 1 x40c59fb0 1} {x42a60000 xc369d1b0 x40ba4eb0 1 x40ba4eb0 1} {x42a80000 xc364f6b1 x409e5070 1 x409e5070 1} {x42aa0000 xc35feca9 x409c1810 1 x409c1810 1} {x42ac0000 xc35b3530 x40893710 1 x40893710 1} {x42ae0000 xc3575938 x40576c20 1 x40576c20 1} {x42b00000 xc35479cf x402176a0 1 x402176a0 1} {x42b20000 xc3524d83 x3ff06480 1 x3ff06480 1} {x42b40000 xc350b83d x3fdc2c00 1 x3fdc2c00 1} {x42b60000 xc34edcd3 x4006ca60 1 x4006ca60 1} {x42b80000 xc34c81ea x4009ecc0 1 x4009ecc0 1} {x42ba0000 xc34a8d6d x40046c40 1 x40046c40 1} {x42bc0000 xc3485e88 x401463e0 1 x401463e0 1} {x42be0000 xc345ea4e x4010dd20 1 x4010dd20 1} {x42c00000 xc343d79f x40052760 1 x40052760 1} {x42c20000 xc341c113 x4060bc20 1 x4060bc20 1} {x42c40000 xc33cd1be x40a785b0 1 x40a785b0 1} {x42c60000 xc33748b8 x40b3b140 1 x40b3b140 1} {x42c80000 xc33196aa x40b23740 1 x40b23740 1} {x42ca0000 xc32c2544 x40ac80b0 1 x40ac80b0 1} {x42cc0000 xc326ce9f x40af0460 1 x40af0460 1} {x42ce0000 xc32134fe x40ad5890 1 x40ad5890 1} {x42d00000 xc31bf916 x409eae00 1 x409eae00 1} {x42d20000 xc3174a1e x40953aa0 1 x40953aa0 1} {x42d40000 xc312a56c x40964360 1 x40964360 1} {x42d60000 xc30de5e8 x4099a510 1 x4099a510 1} {x42d80000 xc3090b1b x409c98f0 1 x409c98f0 1} {x42da0000 xc3041c59 x40a556e8 1 x40a556e8 1} {x42dc0000 xc2fd6b59 x40b0fef0 1 x40b0fef0 1} {x42de0000 xc2f218d4 x40bcfa38 1 x40bcfa38 1} {x42e00000 xc2e5cc12 x40c64560 1 x40c64560 1} {x42e20000 xc2d95028 x40ca4f58 1 x40ca4f58 1} {x42e40000 xc2cc8227 x40d077f0 1 x40d077f0 1} {x42e60000 xc2bf412a x40d70e18 1 x40d70e18 1} {x42e80000 xc2b1a064 x40e0a178 1 x40e0a178 1} {x42ea0000 xc2a32cfb x40ee1f08 1 x40ee1f08 1} {x42ec0000 xc293dc83 x4100ad98 1 x4100ad98 1} {x42ee0000 xc2830195 x410483be 1 x410483be 1} {x42f00000 xc2657727 x410fe5a2 1 x410fe5a2 1} {x42f20000 xc23e1059 x4118a7ea 1 x4118a7ea 1} {x42f40000 xc2192332 x411cdfba 1 x411cdfba 1} {x42f60000 xc1df40f8 x4119fea1 1 x4119fea1 1} {x42f80000 xc19847c3 x41145298 1 x41145298 1} {x42fa0000 xc115dcc1 x411847c3 1 x411847c3 1} {x42fc0000 0 x4117f60a 1 x4117f60a 1} {x42fe0000 x411a0f53 x41178067 1 x41178067 1} {x43000000 x41978067 x41105b3a 1 x41105b3a 1} {x43010000 x41dd62e3 x41089221 1 x41089221 1} {x43020000 x42100944 x41008d9f 1 x41008d9f 1} {x43030000 x422ef841 x40eee590 1 x40eee590 1} {x43040000 x424bc2a8 x40db4b7c 1 x40db4b7c 1} {x43050000 x4265cb20 x40c12cdc 1 x40c12cdc 1} {x43060000 x427c0ddf x40a721f0 1 x40a721f0 1} {x43070000 x4287c9ce x40955a8c 1 x40955a8c 1} {x43080000 x4290b241 x408a2a28 1 x408a2a28 1} {x43090000 x42990f13 x408060b8 1 x408060b8 1} {x430a0000 x42a0be58 x406c4380 1 x406c4380 1} {x430b0000 x42a7d34b x40597970 1 x40597970 1} {x430c0000 x42ae55ef x404b4160 1 x404b4160 1} {x430d0000 x42b48761 x404ca180 1 x404ca180 1} {x430e0000 x42bb2007 x40593800 1 x40593800 1} {x430f0000 x42c21ae1 x405eb080 1 x405eb080 1} {x43100000 x42c90b0f x40607410 1 x40607410 1} {x43110000 x42d02222 x405deb20 1 x405deb20 1} {x43120000 x42d6e9c1 x40543800 1 x40543800 1} {x43130000 x42dd65a2 x4040bf50 1 x4040bf50 1} {x43140000 x42e2f5b6 x401510c0 1 x401510c0 1} {x43150000 x42e6b6ae x3fbd4780 1 x3fbd4780 1} {x43160000 x42e8dff2 x3f61ab80 1 0 1}} {{x42540000 x44872dc0 0 1 xc15dde20 1} {x42580000 x448560af xc177dd40 1 xc177dd40 1} {x425c0000 x44834e4b xc186c820 1 xc186c820 1} {x42600000 x44812a6e xc1880da0 1 xc1880da0 1} {x42640000 x447e1bbc xc18475d0 1 xc18475d0 1} {x42680000 x447a0d7f xc18744a0 1 xc18744a0 1} {x426c0000 x4475a772 xc1880700 1 xc1880700 1} {x42700000 x44718d0f xc189fb90 1 xc189fb90 1} {x42740000 x446d07b9 xc19ce570 1 xc19ce570 1} {x42780000 x4467beb8 xc1acef30 1 xc1acef30 1} {x427c0000 x446238c6 xc1be94d0 1 xc1be94d0 1} {x42800000 x445bd56b xc1c6b9b0 1 xc1c6b9b0 1} {x42820000 x4455cd2b xc1c2ccd0 1 xc1c2ccd0 1} {x42840000 x444fa89e xc1c65ed0 1 xc1c65ed0 1} {x42860000 x4449673e xc1cf5c20 1 xc1cf5c20 1} {x42880000 x4442b2dc xc1ce4bc0 1 xc1ce4bc0 1} {x428a0000 x443c8282 xc1c8a470 1 xc1c8a470 1} {x428c0000 x44362895 xc1cca540 1 xc1cca540 1} {x428e0000 x442fb82e xc1c8a640 1 xc1c8a640 1} {x42900000 x44299e31 xc1caae50 1 xc1caae50 1} {x42920000 x44230d49 xc1ce89e0 1 xc1ce89e0 1} {x42940000 x441cb593 xc1c73490 1 xc1c73490 1} {x42960000 x44169a00 xc1c3b360 1 xc1c3b360 1} {x42980000 x44107a5d xc1bc57f0 1 xc1bc57f0 1} {x429a0000 x440ad481 xc1b12be0 1 xc1b12be0 1} {x429c0000 x4405679f xc1ac10c0 1 xc1ac10c0 1} {x429e0000 x44001375 xc1a9c020 1 xc1a9c020 1} {x42a00000 x43f5973a xc1a8f9c0 1 xc1a8f9c0 1} {x42a20000 x43eb07b2 xc1a9a780 1 xc1a9a780 1} {x42a40000 x43e0624a xc1a787c0 1 xc1a787c0 1} {x42a60000 x43d616ba xc1a4e4e8 1 xc1a4e4e8 1} {x42a80000 x43cbc5ad xc1a292f0 1 xc1a292f0 1} {x42aa0000 x43c1c45c xc1a12f88 1 xc1a12f88 1} {x42ac0000 x43b79fbc xc1a2c408 1 xc1a2c408 1} {x42ae0000 x43ad6bdb xc1a1a008 1 xc1a1a008 1} {x42b00000 x43a36bbb xc1a16c00 1 xc1a16c00 1} {x42b20000 x43993e5b xc1a516f0 1 xc1a516f0 1} {x42b40000 x438ec8dd xc1a9a030 1 xc1a9a030 1} {x42b60000 x43840a55 xc1ac1238 1 xc1ac1238 1} {x42b80000 x43728d2c xc1ab8a28 1 xc1ab8a28 1} {x42ba0000 x435d3220 xc1a5b570 1 xc1a5b570 1} {x42bc0000 x43491fd0 xc19d32d0 1 xc19d32d0 1} {x42be0000 x4335e56c xc193139c 1 xc193139c 1} {x42c00000 x43245ae9 xc1870100 1 xc1870100 1} {x42c20000 x4314252c xc17735b8 1 xc17735b8 1} {x42c40000 x43057432 xc16be75c 1 xc16be75c 1} {x42c60000 x42ed5081 xc16ae414 1 xc16ae414 1} {x42c80000 x42d02f5f xc16a2578 1 xc16a2578 1} {x42ca0000 x42b2c723 xc169447c 1 xc169447c 1} {x42cc0000 x4295de40 xc1666d36 1 xc1666d36 1} {x42ce0000 x427257ab xc15f32cc 1 xc15f32cc 1} {x42d00000 x423c231a xc14eddb0 1 xc14eddb0 1} {x42d20000 x420ae8d3 xc13bcd3a 1 xc13bcd3a 1} {x42d40000 x41bc78fa xc12acf30 1 xc12acf30 1} {x42d60000 x415604ec xc11872ed 1 xc11872ed 1} {x42d80000 x40901835 xc1087542 1 xc1087542 1} {x42da0000 xc06b9663 xc0fd047c 1 xc0fd047c 1} {x42dc0000 xc134f862 xc0de6a2f 1 xc0de6a2f 1} {x42de0000 xc18ca7e4 xc0a8c58a 1 xc0a8c58a 1} {x42e00000 xc1aedef6 xc0576674 1 xc0576674 1} {x42e20000 xc1c28181 xbfec7080 1 xbfec7080 1} {x42e40000 xc1cc6d06 xbf238f00 1 xbf238f00 1} {x42e60000 xc1ce212e -} {x42e80000 xc1c493bd x3fc72188 1 x3fc72188 1} {x42ea0000 xc1b53cfd x3fe8d4c8 1 x3fe8d4c8 1} {x42ec0000 xc1a77924 x3fefa030 1 x3fefa030 1} {x42ee0000 xc19748f7 x40120b10 1 x40120b10 1} {x42f00000 xc182f660 x3ffd47f0 1 x3ffd47f0 1} {x42f20000 xc16f3ff2 x3ff2788c 1 x3ff2788c 1} {x42f40000 xc1494e9d x4004601c 1 x4004601c 1} {x42f60000 xc12d0fe4 x40282d03 1 x40282d03 1} {x42f80000 xc0ea7037 x4052330d 1 x4052330d 1} {x42fa0000 xc087ecbb x406a7037 1 x406a7037 1} {x42fc0000 0 x408c1ca8 1 x408c1ca8 1} {x42fe0000 x40904c96 x40906ec0 1 x40906ec0 1} {x43000000 x41106ec0 x40960efa 1 x40960efa 1} {x43010000 x415e3545 x40a5162e 1 x40a5162e 1} {x43020000 x419ac277 x40b8fd55 1 x40b8fd55 1} {x43030000 x41cb994d x40c65a70 1 x40c65a70 1} {x43040000 x41fdefaf x40ca484a 1 x40ca484a 1} {x43050000 x42185eb9 x40cdd8c2 1 x40cdd8c2 1} {x43060000 x42326e08 x40d57e0c 1 x40d57e0c 1} {x43070000 x424dbe3c x40e582bc 1 x40e582bc 1} {x43080000 x426bceb7 x40f3a9d8 1 x40f3a9d8 1} {x43090000 x42855459 x40f48344 1 x40f48344 1} {x430a0000 x429477c4 x40e7e3c0 1 x40e7e3c0 1} {x430b0000 x42a250d1 x40d72fb0 1 x40d72fb0 1} {x430c0000 x42af5dba x40db5a08 1 x40db5a08 1} {x430d0000 x42bdbc12 x40e57a20 1 x40e57a20 1} {x430e0000 x42cc0cfe x40e6f158 1 x40e6f158 1} {x430f0000 x42da9a3d x40e406d0 1 x40e406d0 1} {x43100000 x42e88dd8 x40ddc388 1 x40ddc388 1} {x43110000 x42f652ae x40d55eb0 1 x40d55eb0 1} {x43120000 x43019cd7 x40c60110 1 x40c60110 1} {x43130000 x43078968 x40b08640 1 x40b08640 1} {x43140000 x430ca53b x409bd810 1 x409bd810 1} {x43150000 x431146e9 x405ef100 1 x405ef100 1} {x43160000 x43139cc3 x3fe17280 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke35 262656 bezier {cc {f 8224} {p {0 0 1} {x44d63ff8 x44540eea 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke36 262656 bezier {cc {f 8224} {p {0 0 1} {x44d63ff8 x44540eea 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc345299a 0 1 x40a63468 1} {x42580000 xc33fc6e0 x40b89cf0 1 x40b89cf0 1} {x425c0000 xc3399fcb x40c141a0 1 x40c141a0 1} {x42600000 xc333b2c6 x40be9f70 1 x40be9f70 1} {x42640000 xc32db5d4 x40d57ba0 1 x40d57ba0 1} {x42680000 xc3265b0c x40df8060 1 x40df8060 1} {x426c0000 xc31fbdce x40cfe3e0 1 x40cfe3e0 1} {x42700000 xc3195cce x40cb30e0 1 x40cb30e0 1} {x42740000 xc3130ac0 x40be7b20 1 x40be7b20 1} {x42780000 xc30d751c x40c6e990 1 x40c6e990 1} {x427c0000 xc3069c27 x40de0848 1 x40de0848 1} {x42800000 xc2ff292f x40d22088 1 x40d22088 1} {x42820000 xc2f2f43d x40afed78 1 x40afed78 1} {x42840000 xc2e92b80 x409b2a38 1 x409b2a38 1} {x42860000 xc2df8ef6 x409b7960 1 x409b7960 1} {x42880000 xc2d5bc54 x409d4b98 1 x409d4b98 1} {x428a0000 xc2cbe583 x40999118 1 x40999118 1} {x428c0000 xc2c28a31 x4098b770 1 x4098b770 1} {x428e0000 xc2b8ce95 x409f6650 1 x409f6650 1} {x42900000 xc2ae9d67 x40a12b60 1 x40a12b60 1} {x42920000 xc2a4a929 x409baa58 1 x409baa58 1} {x42940000 xc29b281c x40932ff0 1 x40932ff0 1} {x42960000 xc292432b x408d7f38 1 x408d7f38 1} {x42980000 xc2897835 x4081a208 1 x4081a208 1} {x429a0000 xc2820eea x40633718 1 x40633718 1} {x429c0000 xc2768987 x3ff13b60 1 x3ff13b60 1} {x429e0000 xc274063e x3f5b6800 1 x3f5b6800 1} {x42a00000 xc26fae47 x3f9fba00 1 x3f9fba00 1} {x42a20000 xc26a0a9e x3fc05130 1 x3fc05130 1} {x42a40000 xc263a934 x3fc600c0 1 x3fc600c0 1} {x42a60000 xc25daa92 x3f8e1690 1 x3f8e1690 1} {x42a80000 xc25ac7cb x3f271dc0 1 x3f271dc0 1} {x42aa0000 xc25871a4 -} {x42ac0000 xc258d532 xbe955500 1 xbe955500 1} {x42ae0000 xc25d4f64 xbfba95a0 1 xbfba95a0 1} {x42b00000 xc2647e8c xc003c938 1 xc003c938 1} {x42b20000 xc26dc88b xc004c088 1 xc004c088 1} {x42b40000 xc275169d xbfe95af0 1 xbfe95af0 1} {x42b60000 xc27c5e3a xbfd15bf0 1 xbfd15bf0 1} {x42b80000 xc281162e xbfc4a6c0 1 xbfc4a6c0 1} {x42ba0000 xc2845453 xbfc8bee0 1 xbfc8bee0 1} {x42bc0000 xc2875c25 xbfced740 1 xbfced740 1} {x42be0000 xc28acb0d xbfd5fc60 1 xbfd5fc60 1} {x42c00000 xc28e0c08 xbfd87900 1 xbfd87900 1} {x42c20000 xc2918ed5 -} {x42c40000 xc2909f14 x3f184200 1 x3f184200 1} {x42c60000 xc28f2dcd x3f2f9d40 1 x3f2f9d40 1} {x42c80000 xc28de09f x3f47d4c0 1 x3f47d4c0 1} {x42ca0000 xc28c0e7a x3f593840 1 x3f593840 1} {x42cc0000 xc28a7bbe x3f40b340 1 x3f40b340 1} {x42ce0000 xc2890bad x3f19b9c0 1 x3f19b9c0 1} {x42d00000 xc28814d7 x3f1ecf00 1 x3f1ecf00 1} {x42d20000 xc2869071 x3f107e80 1 x3f107e80 1} {x42d40000 xc285d2dd x3edc5d00 1 x3edc5d00 1} {x42d60000 xc284d7b7 x3f2b7a40 1 x3f2b7a40 1} {x42d80000 xc28324f4 x3f87e080 1 x3f87e080 1} {x42da0000 xc28098b3 x3fb63460 1 x3fb63460 1} {x42dc0000 xc27ae6a2 x3fd2bf70 1 x3fd2bf70 1} {x42de0000 xc274056f x3fee37c0 1 x3fee37c0 1} {x42e00000 xc26c0326 x400637e0 1 x400637e0 1} {x42e20000 xc2633e73 x401993d8 1 x401993d8 1} {x42e40000 xc258d0ab x402ec918 1 x402ec918 1} {x42e60000 xc24d6550 x403a3278 1 x403a3278 1} {x42e80000 xc2418a5c x4046ad18 1 x4046ad18 1} {x42ea0000 xc2348fad x405f2e98 1 x405f2e98 1} {x42ec0000 xc225a489 x407f8980 1 x407f8980 1} {x42ee0000 xc2149e7d x408b5d14 1 x408b5d14 1} {x42f00000 xc202cd44 x409798e0 1 x409798e0 1} {x42f20000 xc1dd708a x40a4f412 1 x40a4f412 1} {x42f40000 xc1b3207f x40ae245e 1 x40ae245e 1} {x42f60000 xc1865e5b x40b31391 1 x40b31391 1} {x42f80000 xc1332d6d x40b2ee66 1 x40b2ee66 1} {x42fa0000 xc0b39ca0 x40b32d6d 1 x40b32d6d 1} {x42fc0000 0 x40b3efd0 1 x40b3efd0 1} {x42fe0000 x40b44301 x40aca7d3 1 x40aca7d3 1} {x43000000 x412ca7d3 x40a820b6 1 x40a820b6 1} {x43010000 x4181211b x40a2fa41 1 x40a2fa41 1} {x43020000 x41a7d10a x40962806 1 x40962806 1} {x43030000 x41cc351e x4088c8ba 1 x4088c8ba 1} {x43040000 x41ec3567 x40707298 1 x40707298 1} {x43050000 x420428e2 x4058a7f4 1 x4058a7f4 1} {x43060000 x42112fb2 x40484c30 1 x40484c30 1} {x43070000 x421d3268 x40290210 1 x40290210 1} {x43080000 x42264ff4 x4010ae30 1 x4010ae30 1} {x43090000 x422f482e x40154710 1 x40154710 1} {x430a0000 x4238f8d6 x40121b18 1 x40121b18 1} {x430b0000 x42418b91 x3ff96580 1 x3ff96580 1} {x430c0000 x42488f2e x3fe98820 1 x3fe98820 1} {x430d0000 x42502413 x3ffb82e0 1 x3ffb82e0 1} {x430e0000 x4258475c x3feeabe0 1 x3feeabe0 1} {x430f0000 x425f0ed1 x3ff88510 1 x3ff88510 1} {x43100000 x4267cfad x4003fe60 1 x4003fe60 1} {x43110000 x426f8e9d x4001be60 1 x4001be60 1} {x43120000 x42780779 x3ff25880 1 x3ff25880 1} {x43130000 x427eb425 x3fb7cc90 1 x3fb7cc90 1} {x43140000 x4281c221 x3e6cbe00 1 x3e6cbe00 1} {x43150000 x4281e996 -} {x43160000 x4280523f xbf98c0a0 1 0 1}} {{x42540000 x44459abf 0 1 xc111c930 1} {x42580000 x444365fc xc103ffe0 1 xc103ffe0 1} {x425c0000 x44417ac0 xc10993e0 1 xc10993e0 1} {x42600000 x443f195d xc12fbf00 1 xc12fbf00 1} {x42640000 x443bfcc8 xc1576840 1 xc1576840 1} {x42680000 x44385e1b xc16e6a60 1 xc16e6a60 1} {x426c0000 x44348975 xc1600ba0 1 xc1600ba0 1} {x42700000 x44315dbe xc14dc500 1 xc14dc500 1} {x42740000 x442e1b4d xc1585400 1 xc1585400 1} {x42780000 x442a9b1e xc16bdd00 1 xc16bdd00 1} {x427c0000 x4426bc65 xc17d0c40 1 xc17d0c40 1} {x42800000 x4422b2bc xc18018c0 1 xc18018c0 1} {x42820000 x441ebad9 xc17d3e20 1 xc17d3e20 1} {x42840000 x441ac8cb xc18018c0 1 xc18018c0 1} {x42860000 x4416b94d xc17f19a0 1 xc17f19a0 1} {x42880000 x4412cffe xc1773400 1 xc1773400 1} {x428a0000 x440effad xc1762180 1 xc1762180 1} {x428c0000 x440b1ef2 xc1815100 1 xc1815100 1} {x428e0000 x4406ea9d xc189de40 1 xc189de40 1} {x42900000 x4402810e xc18b4a70 1 xc18b4a70 1} {x42920000 x43fc6bec xc1896620 1 xc1896620 1} {x42940000 x43f3d558 xc18a76b8 1 xc18a76b8 1} {x42960000 x43eb1d15 xc1897118 1 xc1897118 1} {x42980000 x43e2a735 xc179f800 1 xc179f800 1} {x429a0000 x43db7d95 xc15d7000 1 xc15d7000 1} {x429c0000 x43d4d035 xc1514900 1 xc1514900 1} {x429e0000 x43ce6905 xc152c820 1 xc152c820 1} {x42a00000 x43c7a3b3 xc160acc0 1 xc160acc0 1} {x42a20000 x43c05e39 xc16d6050 1 xc16d6050 1} {x42a40000 x43b8cdae xc17592c0 1 xc17592c0 1} {x42a60000 x43b1050d xc177a730 1 xc177a730 1} {x42a80000 x43a9533b xc176c550 1 xc176c550 1} {x42aa0000 x43a198b8 xc16ef4c0 1 xc16ef4c0 1} {x42ac0000 x439a63ef xc15fe480 1 xc15fe480 1} {x42ae0000 x43939a70 xc15a4f30 1 xc15a4f30 1} {x42b00000 x438cbefc xc15b14c0 1 xc15b14c0 1} {x42b20000 x4385e924 xc16222a0 1 xc16222a0 1} {x42b40000 x437d39a4 xc169e450 1 xc169e450 1} {x42b60000 x436e95be xc169a8c0 1 xc169a8c0 1} {x42b80000 x4360048c xc16c3878 1 xc16c3878 1} {x42ba0000 x43510eaf xc169dc60 1 xc169dc60 1} {x42bc0000 x4342c900 xc15eed48 1 xc15eed48 1} {x42be0000 x43353106 xc14e7c10 1 xc14e7c10 1} {x42c00000 x4328f97e xc1386a38 1 xc1386a38 1} {x42c20000 x431e23bf xc123cf68 1 xc123cf68 1} {x42c40000 x43147f91 xc1169238 1 xc1169238 1} {x42c60000 x430b5178 xc11382f8 1 xc11382f8 1} {x42c80000 x43020f32 xc10f012c 1 xc10f012c 1} {x42ca0000 x42f2e2a5 xc10a5998 1 xc10a5998 1} {x42cc0000 x42e187fe xc1090f50 1 xc1090f50 1} {x42ce0000 x42d09ed1 xc1081430 1 xc1081430 1} {x42d00000 x42bf82f2 xc0fcc6a8 1 xc0fcc6a8 1} {x42d20000 x42b105fc xc0e4d2d0 1 xc0e4d2d0 1} {x42d40000 x42a2e898 xc0d9b310 1 xc0d9b310 1} {x42d60000 x4295cf9a xc0d1c710 1 xc0d1c710 1} {x42d80000 x4288afb6 xc0d089a0 1 xc0d089a0 1} {x42da0000 x42777ccc xc0d01a6c 1 xc0d01a6c 1} {x42dc0000 x425d58d1 xc0d4fec4 1 xc0d4fec4 1} {x42de0000 x42423d1b xc0bee774 1 xc0bee774 1} {x42e00000 x422d9ef4 xc09d2df0 1 xc09d2df0 1} {x42e20000 x421af19f xc085e544 1 xc085e544 1} {x42e40000 x420c25a3 xc0642244 1 xc0642244 1} {x42e60000 x41fcdaad xc04473e0 1 xc04473e0 1} {x42e80000 x41e72e4e xc028cadc 1 xc028cadc 1} {x42ea0000 x41d2a7f6 xc0239944 1 xc0239944 1} {x42ec0000 x41be47fd xc022411c 1 xc022411c 1} {x42ee0000 x41aa17af xc024a490 1 xc024a490 1} {x42f00000 x41951ed9 xc03f43c4 1 xc03f43c4 1} {x42f20000 x41748d7c xc0587964 1 xc0587964 1} {x42f40000 x413e0100 xc04f830e 1 xc04f830e 1} {x42f60000 x410ccbf5 xc04a1836 1 xc04a1836 1} {x42f80000 x40b1e9ca xc04c61da 1 xc04c61da 1} {x42fa0000 x401a6c1f xc031e9ca 1 xc031e9ca 1} {x42fc0000 0 xc00df603 1 xc00df603 1} {x42fe0000 xc0017fe7 xc0170521 1 xc0170521 1} {x43000000 xc0970521 xc00c96f8 1 xc00c96f8 1} {x43010000 xc0cd56eb xbfdd8c7e 1 xbfdd8c7e 1} {x43020000 xc102e5b0 xbfd573e6 1 xbfd573e6 1} {x43030000 xc11c086f xbfb61b08 1 xbfb61b08 1} {x43040000 xc1306c72 xbfa4a188 1 xbfa4a188 1} {x43050000 xc14530d1 xbf99820c 1 xbf99820c 1} {x43060000 xc156ccf5 xbf4ea688 1 xbf4ea688 1} {x43070000 xc15f05a2 xbf4ddad8 1 xbf4ddad8 1} {x43080000 xc1708850 xbf44bf80 1 xbf44bf80 1} {x43090000 xc1779d92 xbec84d90 1 xbec84d90 1} {x430a0000 xc17d0d29 xbf17e520 1 xbf17e520 1} {x430b0000 xc1854d1b xbf8ecf1c 1 xbf8ecf1c 1} {x430c0000 xc1906078 xbfaca860 1 xbfaca860 1} {x430d0000 xc19ae227 xbf9650b0 1 xbf9650b0 1} {x430e0000 xc1a32a8e xbf9a2c10 1 xbf9a2c10 1} {x430f0000 xc1ae27a9 xbfa3a170 1 xbfa3a170 1} {x43100000 xc1b79ebc xbfa60fc0 1 xbfa60fc0 1} {x43110000 xc1c2e9a1 xbf9e4ac8 1 xbf9e4ac8 1} {x43120000 xc1cb6815 xbf946140 1 xbf946140 1} {x43130000 xc1d575c9 xbfb5d750 1 xbfb5d750 1} {x43140000 xc1e222ff xbfe8d328 1 xbfe8d328 1} {x43150000 xc1f2902e xc0379c7c 1 xc0379c7c 1} {x43160000 xc208050f xc082f481 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke37 262656 bezier {cc {f 8224} {p {0 0 1} {x44969ab8 x44515c3a 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke38 262656 bezier {cc {f 8224} {p {0 0 1} {x44969ab8 x44515c3a 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3e14983 0 1 x40de81a0 1} {x42580000 xc3dda6e8 x40fcf100 1 x40fcf100 1} {x425c0000 xc3d961fb x41121f30 1 x41121f30 1} {x42600000 xc3d484f5 x4125a900 1 x4125a900 1} {x42640000 xc3cf076b x413a24e0 1 x413a24e0 1} {x42680000 xc3c8e2a7 x413bf910 1 x413bf910 1} {x426c0000 xc3c347da x41339b00 1 x41339b00 1} {x42700000 xc3bda8f7 x41350380 1 x41350380 1} {x42740000 xc3b7f7a2 x412f1ce0 1 x412f1ce0 1} {x42780000 xc3b2b729 x4126a820 1 x4126a820 1} {x427c0000 xc3ad8d20 x412853d0 1 x412853d0 1} {x42800000 xc3a831ec x412834e0 1 x412834e0 1} {x42820000 xc3a309d2 x4112fef0 1 x4112fef0 1} {x42840000 xc39f01fd x41060ec0 1 x41060ec0 1} {x42860000 xc39aa8e6 x4110ca80 1 x4110ca80 1} {x42880000 xc395f555 x410fda00 1 x410fda00 1} {x428a0000 xc391ab46 x40ffc740 1 x40ffc740 1} {x428c0000 xc38df71b x40de7100 1 x40de7100 1} {x428e0000 xc38ab7be x40d5eb20 1 x40d5eb20 1} {x42900000 xc38747c2 x40f0d760 1 x40f0d760 1} {x42920000 xc3833103 x40f4f430 1 x40f4f430 1} {x42940000 xc37f4041 x40d253f0 1 x40d253f0 1} {x42960000 xc3793cc7 x40ac4b90 1 x40ac4b90 1} {x42980000 xc3747b88 x40993980 1 x40993980 1} {x429a0000 xc36fa92f x408fac50 1 x408fac50 1} {x429c0000 xc36b80c3 x407f9f20 1 x407f9f20 1} {x429e0000 xc367ac36 x4079ae00 1 x4079ae00 1} {x42a00000 xc363b353 x408c5b60 1 x408c5b60 1} {x42a20000 xc35ee680 x40ab5ac0 1 x40ab5ac0 1} {x42a40000 xc358fda7 x40a92a30 1 x40a92a30 1} {x42a60000 xc35453dd x409d1a00 1 x409d1a00 1} {x42a80000 xc34f2c07 x40b4e550 1 x40b4e550 1} {x42aa0000 xc3490588 x40a97e70 1 x40a97e70 1} {x42ac0000 xc3449420 x4079e4e0 1 x4079e4e0 1} {x42ae0000 xc3413661 x403fdfe0 1 x403fdfe0 1} {x42b00000 xc33e9521 x4006d880 1 x4006d880 1} {x42b20000 xc33cff9d x3fb1eec0 1 x3fb1eec0 1} {x42b40000 xc33bcd66 x3fa63540 1 x3fa63540 1} {x42b60000 xc33a66c8 x3ff155c0 1 x3ff155c0 1} {x42b80000 xc338080f x3ffcd5c0 1 x3ffcd5c0 1} {x42ba0000 xc3367371 x3ff30f80 1 x3ff30f80 1} {x42bc0000 xc3343bd1 x40039980 1 x40039980 1} {x42be0000 xc33256a5 x3fd8f400 1 x3fd8f400 1} {x42c00000 xc330d801 x3fc4b340 1 x3fc4b340 1} {x42c20000 xc32f43d8 x40387de0 1 x40387de0 1} {x42c40000 xc32b1412 x40891aa0 1 x40891aa0 1} {x42c60000 xc326b22e x40953120 1 x40953120 1} {x42c80000 xc321c100 x409a9950 1 x409a9950 1} {x42ca0000 xc31d0899 x4095b8f0 1 x4095b8f0 1} {x42cc0000 xc3186571 x4097d930 1 x4097d930 1} {x42ce0000 xc3138b06 x40940cf0 1 x40940cf0 1} {x42d00000 xc30f24a2 x408e3c30 1 x408e3c30 1} {x42d20000 xc30aa743 x408326b0 1 x408326b0 1} {x42d40000 xc306f237 x407d1260 1 x407d1260 1} {x42d60000 xc302beb0 x40867d20 1 x40867d20 1} {x42d80000 xc2fd14ca x408b9e78 1 x408b9e78 1} {x42da0000 xc2f40991 x4095e988 1 x4095e988 1} {x42dc0000 xc2ea5799 x40a05f50 1 x40a05f50 1} {x42de0000 xc2dffda7 x40abb7f0 1 x40abb7f0 1} {x42e00000 xc2d4e09b x40b5e8d8 1 x40b5e8d8 1} {x42e20000 xc2c9408c x40ba82c0 1 x40ba82c0 1} {x42e40000 xc2bd9043 x40c05928 1 x40c05928 1} {x42e60000 xc2b13567 x40c8a328 1 x40c8a328 1} {x42e80000 xc2a47bde x40ceaf10 1 x40ceaf10 1} {x42ea0000 xc2975f85 x40dae4b8 1 x40dae4b8 1} {x42ec0000 xc2891f47 x40ebd03c 1 x40ebd03c 1} {x42ee0000 xc273cafb x40f5511c 1 x40f5511c 1} {x42f00000 xc254ea47 x41064d5c 1 x41064d5c 1} {x42f20000 xc230a44d x410f3292 1 x410f3292 1} {x42f40000 xc20d50fe x4111aa62 1 x4111aa62 1} {x42f60000 xc1cf9e38 x410e54f1 1 x410e54f1 1} {x42f80000 xc18c4d0b x410bb01e 1 x410bb01e 1} {x42fa0000 xc107dc34 x410c4d0b 1 x410c4d0b 1} {x42fc0000 0 x410d05b8 1 x410d05b8 1} {x42fe0000 x41122f3c x410bfdd5 1 x410bfdd5 1} {x43000000 x418bfdd5 x41054089 1 x41054089 1} {x43010000 x41ce5827 x40fcb51a 1 x40fcb51a 1} {x43020000 x42052c31 x40e952c6 1 x40e952c6 1} {x43030000 x422180c5 x40d931f0 1 x40d931f0 1} {x43040000 x423b78ad x40c5b044 1 x40c5b044 1} {x43050000 x4252ecd6 x40aacfbc 1 x40aacfbc 1} {x43060000 x42662c9c x40972a10 1 x40972a10 1} {x43070000 x4278b75a x408c9ff8 1 x408c9ff8 1} {x43080000 x4284aa4d x407865d0 1 x407865d0 1} {x43090000 x428be20a x405e96b0 1 x405e96b0 1} {x430a0000 x429293b8 x4053d570 1 x4053d570 1} {x430b0000 x42991f61 x404fdc20 1 x404fdc20 1} {x430c0000 x429f917a x404193f0 1 x404193f0 1} {x430d0000 x42a538a0 x40346940 1 x40346940 1} {x430e0000 x42aad80e x403bc520 1 x403bc520 1} {x430f0000 x42b0f4f2 x404e05b0 1 x404e05b0 1} {x43100000 x42b7b869 x40563fa0 1 x40563fa0 1} {x43110000 x42be58ec x404aeb40 1 x404aeb40 1} {x43120000 x42c4671d x40477fe0 1 x40477fe0 1} {x43130000 x42cad0ea x402f2070 1 x402f2070 1} {x43140000 x42cf5924 x3ff403a0 1 x3ff403a0 1} {x43150000 x42d27107 x3f911a00 1 x3f911a00 1} {x43160000 x42d3e1f4 x3f0397c0 1 0 1}} {{x42540000 x44814141 0 1 xc1394430 1} {x42580000 x447f82d5 xc14d3960 1 xc14d3960 1} {x425c0000 x447c18b7 xc17131a0 1 xc17131a0 1} {x42600000 x4477f948 xc185a000 1 xc185a000 1} {x42640000 x4473beb7 xc18b1030 1 xc18b1030 1} {x42680000 x446f4845 xc19199d0 1 xc19199d0 1} {x426c0000 x446aa51a xc1899b30 1 xc1899b30 1} {x42700000 x4466ae92 xc1879050 1 xc1879050 1} {x42740000 x44622c15 xc1967020 1 xc1967020 1} {x42780000 x445d4790 xc1a122b0 1 xc1a122b0 1} {x427c0000 x445819ea xc1b83d00 1 xc1b83d00 1} {x42800000 x4451c3c0 xc1c5d660 1 xc1c5d660 1} {x42820000 x444bbc84 xc1c0a890 1 xc1c0a890 1} {x42840000 x4445b937 xc1c46af0 1 xc1c46af0 1} {x42860000 x443f75d5 xc1cbd560 1 xc1cbd560 1} {x42880000 x4438fbe1 xc1c35100 1 xc1c35100 1} {x428a0000 x443340c5 xc1b7e720 1 xc1b7e720 1} {x428c0000 x442d7d6f xc1b743c0 1 xc1b743c0 1} {x428e0000 x4427cc89 xc1b793b0 1 xc1b793b0 1} {x42900000 x44220434 xc1c25c10 1 xc1c25c10 1} {x42920000 x441ba6c8 xc1c13c20 1 xc1c13c20 1} {x42940000 x4415f072 xc1b3c130 1 xc1b3c130 1} {x42960000 x44106ab5 xc1a72710 1 xc1a72710 1} {x42980000 x440b7e01 xc1986240 1 xc1986240 1} {x429a0000 x4406e491 xc18e2130 1 xc18e2130 1} {x429c0000 x44029bee xc1944bf8 1 xc1944bf8 1} {x429e0000 x43fb3fa3 xc197de48 1 xc197de48 1} {x42a00000 x43f23c13 xc19b10f0 1 xc19b10f0 1} {x42a20000 x43e7dd85 xc1a15ef0 1 xc1a15ef0 1} {x42a40000 x43de1035 xc195bd80 1 xc195bd80 1} {x42a60000 x43d525d5 xc197d510 1 xc197d510 1} {x42a80000 x43cb1593 xc1a311f8 1 xc1a311f8 1} {x42aa0000 x43c0c396 xc19be680 1 xc19be680 1} {x42ac0000 x43b798c3 xc19063d8 1 xc19063d8 1} {x42ae0000 x43aeb71b xc18fd8a0 1 xc18fd8a0 1} {x42b00000 x43a59daf xc18a7278 1 xc18a7278 1} {x42b20000 x439d68cc xc190aa48 1 xc190aa48 1} {x42b40000 x43938866 xc1a37d50 1 xc1a37d50 1} {x42b60000 x4388f922 xc1a9cb90 1 xc1a9cb90 1} {x42b80000 x437c9de8 xc1a7c420 1 xc1a7c420 1} {x42ba0000 x4368013c xc1a0864c 1 xc1a0864c 1} {x42bc0000 x43547c55 xc1936778 1 xc1936778 1} {x42be0000 x4343275e xc1854178 1 xc1854178 1} {x42c00000 x43332bf7 xc1709fb0 1 xc1709fb0 1} {x42c20000 x43251368 xc15aace8 1 xc15aace8 1} {x42c40000 x4317d65a xc15616b0 1 xc15616b0 1} {x42c60000 x430a5092 xc15e8128 1 xc15e8128 1} {x42c80000 x42f80c6a xc15f41f0 1 xc15f41f0 1} {x42ca0000 x42dcd0a8 xc1533468 1 xc1533468 1} {x42cc0000 x42c33f50 xc155a2e0 1 xc155a2e0 1} {x42ce0000 x42a767f0 xc1546e80 1 xc1546e80 1} {x42d00000 x428e23b0 xc1402dba 1 xc1402dba 1} {x42d20000 x426eb903 xc12ebf6c 1 xc12ebf6c 1} {x42d40000 x4244e7aa xc11eb08a 1 xc11eb08a 1} {x42d60000 x421f60be xc110d8f7 1 xc110d8f7 1} {x42d80000 x41f8f65d xc105ca93 1 xc105ca93 1} {x42da0000 x41b8f6e9 xc101c276 1 xc101c276 1} {x42dc0000 x416e67ce xc0f04fff 1 xc0f04fff 1} {x42de0000 x41019dd3 xc0c760f0 1 xc0c760f0 1} {x42e00000 x401c1b7a xc0975d23 1 xc0975d23 1} {x42e20000 xbfadfa7e xc0533589 1 xc0533589 1} {x42e40000 xc08527cc xc01f5642 1 xc01f5642 1} {x42e60000 xc0cad4e2 xbfc0d04a 1 xbfc0d04a 1} {x42e80000 xc0e58ff1 -} {x42ea0000 xc0deccd5 -} {x42ec0000 xc0f348e9 -} {x42ee0000 xc0f0fbee x3e5cde20 1 x3e5cde20 1} {x42f00000 xc0dbd801 -} {x42f20000 xc0e68014 -} {x42f40000 xc0cf4dcd x3ef30e28 1 x3ef30e28 1} {x42f60000 xc0c81e4f x3f2c73d0 1 x3f2c73d0 1} {x42f80000 xc0851e20 x3fee9e78 1 x3fee9e78 1} {x42fa0000 xc0219e26 x40051e20 1 x40051e20 1} {x42fc0000 0 x402d6b0c 1 x402d6b0c 1} {x42fe0000 x403937f1 x402d2a0d 1 x402d2a0d 1} {x43000000 x40ad2a0d x4035a9ee 1 x4035a9ee 1} {x43010000 x410922f3 x40604bbd 1 x40604bbd 1} {x43020000 x4146bae5 x408771f9 1 x408771f9 1} {x43030000 x41884a76 x4097476f 1 x4097476f 1} {x43040000 x41af012a x409ac99c 1 x409ac99c 1} {x43050000 x41d5af44 x40a08638 1 x40a08638 1} {x43060000 x41ff4446 x40a6f8d8 1 x40a6f8d8 1} {x43070000 x421495d8 x40af3ad4 1 x40af3ad4 1} {x43080000 x422b70d8 x40bb76a8 1 x40bb76a8 1} {x43090000 x42437382 x40be9978 1 x40be9978 1} {x430a0000 x425b1736 x40b373c0 1 x40b373c0 1} {x430b0000 x42705072 x409e8e90 1 x409e8e90 1} {x430c0000 x42815d6d x40a33380 1 x40a33380 1} {x430d0000 x428c8ea9 x40ac1ea8 1 x40ac1ea8 1} {x430e0000 x4296e142 x40afd840 1 x40afd840 1} {x430f0000 x42a289b1 x40af0c58 1 x40af0c58 1} {x43100000 x42acc2cd x40a69980 1 x40a69980 1} {x43110000 x42b75ce1 x40a473e0 1 x40a473e0 1} {x43120000 x42c15149 x409a1c78 1 x409a1c78 1} {x43130000 x42caa070 x40882410 1 x40882410 1} {x43140000 x42d255cb x405b8d90 1 x405b8d90 1} {x43150000 x42d85949 x400764e0 1 x400764e0 1} {x43160000 x42dacc19 x3f475240 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke39 262656 bezier {cc {f 8224} {p {0 0 1} {x438cb7cf x43e654fe 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke40 262656 bezier {cc {f 8224} {p {0 0 1} {x438cb7cf x43e654fe 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc355c08c 0 1 x40810d88 1} {x42580000 xc3516837 x409f04d0 1 x409f04d0 1} {x425c0000 xc34bd03f x40c591c0 1 x40c591c0 1} {x42600000 xc3450f1b x40e006b0 1 x40e006b0 1} {x42640000 xc33dcfd4 x40e37cf0 1 x40e37cf0 1} {x42680000 xc336d74c x40e031d0 1 x40e031d0 1} {x426c0000 xc32fccb7 x40e195e0 1 x40e195e0 1} {x42700000 xc328bdee x40e4b9d0 1 x40e4b9d0 1} {x42740000 xc321811a x40ebdbc0 1 x40ebdbc0 1} {x42780000 xc31a0032 x40ee0fb0 1 x40ee0fb0 1} {x427c0000 xc312a01f x40f8d910 1 x40f8d910 1} {x42800000 xc30a72a1 x4103aa80 1 x4103aa80 1} {x42820000 xc3022acf x40fa33d0 1 x40fa33d0 1} {x42840000 xc2f59ec8 x40ea9138 1 x40ea9138 1} {x42860000 xc2e70377 x40c10530 1 x40c10530 1} {x42880000 xc2dd7e22 x40c90140 1 x40c90140 1} {x428a0000 xc2cde34f x40a86840 1 x40a86840 1} {x428c0000 xc2c8711a x404265a0 1 x404265a0 1} {x428e0000 xc2c1bcf5 x4062a590 1 x4062a590 1} {x42900000 xc2ba46c1 x407721f0 1 x407721f0 1} {x42920000 xc2b24ad6 x401da050 1 x401da050 1} {x42940000 xc2b06cbc x3f724600 1 x3f724600 1} {x42960000 xc2ae81be x3f8eaa20 1 x3f8eaa20 1} {x42980000 xc2abf76b x3fd14d00 1 x3fd14d00 1} {x429a0000 xc2a7f756 x3fc8b3a0 1 x3fc8b3a0 1} {x429c0000 xc2a5b1ce -} {x429e0000 xc2a5c880 -} {x42a00000 xc2a5221d x3ee4ec80 1 x3ee4ec80 1} {x42a20000 xc2a3fea7 x3f0f7a40 1 x3f0f7a40 1} {x42a40000 xc2a2e434 x3f26db00 1 x3f26db00 1} {x42a60000 xc2a1633b x3f079700 1 x3f079700 1} {x42a80000 xc2a0c5d8 x3e9c9080 1 x3e9c9080 1} {x42aa0000 xc2a02a1a x3eabf680 1 x3eabf680 1} {x42ac0000 xc29f6deb -} {x42ae0000 xc2a07134 xbf6a08c0 1 xbf6a08c0 1} {x42b00000 xc2a3160e xbfd0f5e0 1 xbfd0f5e0 1} {x42b20000 xc2a6f8e3 xbff8aa60 1 xbff8aa60 1} {x42b40000 xc2aadb61 xbff0e340 1 xbff0e340 1} {x42b60000 xc2ae7ffd xbfd51d80 1 xbfd51d80 1} {x42b80000 xc2b1844d xbfd71360 1 xbfd71360 1} {x42ba0000 xc2b53898 xbff20f40 1 xbff20f40 1} {x42bc0000 xc2b914c7 xbfa92260 1 xbfa92260 1} {x42be0000 xc2ba81ab xbf5004c0 1 xbf5004c0 1} {x42c00000 xc2bc54da xbf590740 1 xbf590740 1} {x42c20000 xc2bde5c8 -} {x42c40000 xc2b9dcc3 x400e9b70 1 x400e9b70 1} {x42c60000 xc2b4fc11 x401bab70 1 x401bab70 1} {x42c80000 xc2b0220c x40280ca0 1 x40280ca0 1} {x42ca0000 xc2aa7b47 x402c8410 1 x402c8410 1} {x42cc0000 xc2a559cb x4036a5c0 1 x4036a5c0 1} {x42ce0000 xc29f10eb x402aa070 1 x402aa070 1} {x42d00000 xc29aafc4 x4009aa70 1 x4009aa70 1} {x42d20000 xc2967644 x3ffae560 1 x3ffae560 1} {x42d40000 xc292d899 x3fd054a0 1 x3fd054a0 1} {x42d60000 xc28ff39f x3fa45660 1 x3fa45660 1} {x42d80000 xc28db5e6 x3fa0e3c0 1 x3fa0e3c0 1} {x42da0000 xc28aec81 x3fc37d60 1 x3fc37d60 1} {x42dc0000 xc28799fb x3fd6dd00 1 x3fd6dd00 1} {x42de0000 xc2843599 x3fee3c60 1 x3fee3c60 1} {x42e00000 xc2802818 x400e78b0 1 x400e78b0 1} {x42e20000 xc2769c1c x401b3760 1 x401b3760 1} {x42e40000 xc26ce944 x401f5ac0 1 x401f5ac0 1} {x42e60000 xc262b0c4 x402ca8d8 1 x402ca8d8 1} {x42e80000 xc2575429 x403fd5d8 1 x403fd5d8 1} {x42ea0000 xc24ab609 x405be8d8 1 x405be8d8 1} {x42ec0000 xc23bd70e x40811fa8 1 x40811fa8 1} {x42ee0000 xc22a6e1f x4096c510 1 x4096c510 1} {x42f00000 xc21625ca x40aae29c 1 x40aae29c 1} {x42f20000 xc1ff6af0 x40bb8336 1 x40bb8336 1} {x42f40000 xc1ce89f9 x40ca8198 1 x40ca8198 1} {x42f60000 xc19a2a24 x40cf9274 1 x40cf9274 1} {x42f80000 xc14d817e x40cc7dc4 1 x40cc7dc4 1} {x42fa0000 xc0cfad08 x40cd817e 1 x40cd817e 1} {x42fc0000 0 x40d39f56 1 x40d39f56 1} {x42fe0000 x40d791a3 x40d89ae5 1 x40d89ae5 1} {x43000000 x41589ae5 x40d7bed2 1 x40d7bed2 1} {x43010000 x41a1c3d2 x40d3fc2d 1 x40d3fc2d 1} {x43020000 x41d64b89 x40cac75c 1 x40cac75c 1} {x43030000 x420393c0 x40bfd2fa 1 x40bfd2fa 1} {x43040000 x421b1a83 x40b2465c 1 x40b2465c 1} {x43050000 x42302557 x409cae0c 1 x409cae0c 1} {x43060000 x42424606 x408a0194 1 x408a0194 1} {x43070000 x4252a5bc x407357b0 1 x407357b0 1} {x43080000 x4260b0fc x40594000 1 x40594000 1} {x43090000 x426dcdbc x404c4bd0 1 x404c4bd0 1} {x430a0000 x427a3a76 x403d8c50 1 x403d8c50 1} {x430b0000 x4282bfa3 x402f2e40 1 x402f2e40 1} {x430c0000 x4288101f x402600a0 1 x402600a0 1} {x430d0000 x428d1fad x402687d0 1 x402687d0 1} {x430e0000 x4292789c x4030e120 1 x4030e120 1} {x430f0000 x42982dbf x40436c80 1 x40436c80 1} {x43100000 x429eaf64 x4051f8f0 1 x4051f8f0 1} {x43110000 x42a54d4e x40506180 1 x40506180 1} {x43120000 x42abb57c x4043e510 1 x4043e510 1} {x43130000 x42b18b9f x402b35b0 1 x402b35b0 1} {x43140000 x42b668d7 x3ff799c0 1 x3ff799c0 1} {x43150000 x42b9486d x3f8a3760 1 x3f8a3760 1} {x43160000 x42baba92 x3f0b6460 1 0 1}} {{x42540000 x4484320f 0 1 xc155e460 1} {x42580000 x4482776a xc16c2ec0 1 xc16c2ec0 1} {x425c0000 x44808154 xc1818f30 1 xc1818f30 1} {x42600000 x447cd5e1 xc184a360 1 xc184a360 1} {x42640000 x4478b872 xc1836540 1 xc1836540 1} {x42680000 x44749f8d xc1854110 1 xc1854110 1} {x426c0000 x44706461 xc18bc260 1 xc18bc260 1} {x42700000 x446be367 xc198db60 1 xc198db60 1} {x42740000 x4466d6ab xc1a9e140 1 xc1a9e140 1} {x42780000 x44614553 xc1bb20a0 1 xc1bb20a0 1} {x427c0000 x445b24a1 xc1cc9820 1 xc1cc9820 1} {x42800000 x44547bd1 xc1d9f140 1 xc1d9f140 1} {x42820000 x444d858d xc1dddcc0 1 xc1dddcc0 1} {x42840000 x44469e05 xc1dea2c0 1 xc1dea2c0 1} {x42860000 x443f9b61 xc1d81ad0 1 xc1d81ad0 1} {x42880000 x44391c58 xc1d9a840 1 xc1d9a840 1} {x428a0000 x443200dd xc1cf10c0 1 xc1cf10c0 1} {x428c0000 x442c2b4c xc1b1b4f0 1 xc1b1b4f0 1} {x428e0000 x4426e58e xc1adbca0 1 xc1adbca0 1} {x42900000 x44214f82 xc1b84540 1 xc1b84540 1} {x42920000 x441b613a xc1c3bb50 1 xc1c3bb50 1} {x42940000 x441513cd xc1c875c0 1 xc1c875c0 1} {x42960000 x440ed9de xc1c610e0 1 xc1c610e0 1} {x42980000 x4408b2bf xc1b7cdd0 1 xc1b7cdd0 1} {x429a0000 x44035d01 xc1af7cb8 1 xc1af7cb8 1} {x429c0000 x43fb75e7 xc1b219f0 1 xc1b219f0 1} {x429e0000 x43f076c4 xc1afb3f0 1 xc1afb3f0 1} {x42a00000 x43e57f69 xc1afa450 1 xc1afa450 1} {x42a20000 x43da823a xc1b035a8 1 xc1b035a8 1} {x42a40000 x43cf78b4 xc1b16d48 1 xc1b16d48 1} {x42a60000 x43c45491 xc1b1cb18 1 xc1b1cb18 1} {x42a80000 x43b93f51 xc1b160e8 1 xc1b160e8 1} {x42aa0000 x43ae2874 xc1ad49a0 1 xc1ad49a0 1} {x42ac0000 x43a3961d xc1a63c18 1 xc1a63c18 1} {x42ae0000 x439960f1 xc1a1d5c8 1 xc1a1d5c8 1} {x42b00000 x438f5b64 xc1a02fd0 1 xc1a02fd0 1} {x42b20000 x43855af7 xc1a01e68 1 xc1a01e68 1} {x42b40000 x4376af2e xc1a0e154 1 xc1a0e154 1} {x42b60000 x43627d99 xc1a25d20 1 xc1a25d20 1} {x42b80000 x434e17e6 xc19f2648 1 xc19f2648 1} {x42ba0000 x433ab407 xc197d910 1 xc197d910 1} {x42bc0000 x432821a2 xc192309c 1 xc192309c 1} {x42be0000 x431627e0 xc1898b60 1 xc1898b60 1} {x42c00000 x4305beca xc17da204 1 xc17da204 1} {x42c20000 x42ece73f xc168f2f8 1 xc168f2f8 1} {x42c40000 x42d140d6 xc15c7818 1 xc15c7818 1} {x42c60000 x42b5c939 xc15a96cc 1 xc15a96cc 1} {x42c80000 x429a9b23 xc15c3d12 1 xc15c3d12 1} {x42ca0000 x427d73e9 xc15cf22c 1 xc15cf22c 1} {x42cc0000 x4246bd30 xc1581284 1 xc1581284 1} {x42ce0000 x42116aa7 xc14b3a08 1 xc14b3a08 1} {x42d00000 x41c24058 xc13b3904 1 xc13b3904 1} {x42d20000 x414f3893 xc12c5ad4 1 xc12c5ad4 1} {x42d40000 x402f2c1e xc11801c6 1 xc11801c6 1} {x42d60000 xc0c195f4 xc101f34a 1 xc101f34a 1} {x42d80000 xc1581b8d xc0e1c418 1 xc0e1c418 1} {x42da0000 xc1a14789 xc0ccd257 1 xc0ccd257 1} {x42dc0000 xc1d276f2 xc0b1e3e0 1 xc0b1e3e0 1} {x42de0000 xc1fa3979 xc0841860 1 xc0841860 1} {x42e00000 xc20a4191 xc01eb104 1 xc01eb104 1} {x42e20000 xc210f2dd xbf656140 1 xbf656140 1} {x42e40000 xc21224b4 -} {x42e60000 xc20e94e5 x3fbcb8e0 1 x3fbcb8e0 1} {x42e80000 xc2065926 x401c1154 1 x401c1154 1} {x42ea0000 xc1f62575 x40397d74 1 x40397d74 1} {x42ec0000 xc1de52ef x40397f60 1 x40397f60 1} {x42ee0000 xc1c7c59d x40397e4c 1 x40397e4c 1} {x42f00000 xc1aff35c x4038ac74 1 x4038ac74 1} {x42f20000 xc1999a80 x4035354c 1 x4035354c 1} {x42f40000 xc182a609 x40427366 1 x40427366 1} {x42f60000 xc151fb4d x405e53f8 1 x405e53f8 1} {x42f80000 xc1162216 x4081d5f6 1 x4081d5f6 1} {x42fa0000 xc0a04aaf x40962216 1 x40962216 1} {x42fc0000 0 x40a4703a 1 x40a4703a 1} {x42fe0000 x40a895c4 x40a5d170 1 x40a5d170 1} {x43000000 x4125d170 x40a43d7c 1 x40a43d7c 1} {x43010000 x4178885e x40abac44 1 x40abac44 1} {x43020000 x41a8beda x40b8db12 1 x40b8db12 1} {x43030000 x41d8b1b8 x40c106f4 1 x40c106f4 1} {x43040000 x4204a12a x40c60af8 1 x40c60af8 1} {x43050000 x421ddb9a x40cda950 1 x40cda950 1} {x43060000 x42380b7e x40db0204 1 x40db0204 1} {x43070000 x42549c1b x40ebd94c 1 x40ebd94c 1} {x43080000 x427301d1 x40facc44 1 x40facc44 1} {x43090000 x4289a796 x40fe4f2c 1 x40fe4f2c 1} {x430a0000 x42994ace x40f92d80 1 x40f92d80 1} {x430b0000 x42a8cd46 x40f4cc00 1 x40f4cc00 1} {x430c0000 x42b7e44e x40f8c7b0 1 x40f8c7b0 1} {x430d0000 x42c7e63c x4102a770 1 x4102a770 1} {x430e0000 x42d88e2a x4104b7bc 1 x4104b7bc 1} {x430f0000 x42e9142b x41021324 1 x41021324 1} {x43100000 x42f912f3 x40fe93c8 1 x40fe93c8 1} {x43110000 x43047352 x40f7bb78 1 x40f7bb78 1} {x43120000 x430c0531 x40e94780 1 x40e94780 1} {x43130000 x431307ca x40da09c0 1 x40da09c0 1} {x43140000 x4319a5cd x40ca6710 1 x40ca6710 1} {x43150000 x431fae3b x409c7440 1 x409c7440 1} {x43160000 x43236d11 x404b1c00 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke41 262656 bezier {cc {f 8224} {p {0 0 1} {x44b6cbf0 x4451f5e3 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke42 262656 bezier {cc {f 8224} {p {0 0 1} {x44b6cbf0 x4451f5e3 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3b6111b 0 1 x40f48000 1} {x42580000 xc3b22d89 x4100d6c0 1 x4100d6c0 1} {x425c0000 xc3ae03af x41088be0 1 x41088be0 1} {x42600000 xc3a9a4cb x411465f0 1 x411465f0 1} {x42640000 xc3a4bd50 x4118a600 1 x4118a600 1} {x42680000 xc3a01a6b x4117dc20 1 x4117dc20 1} {x426c0000 xc39b3f8e x411b7e90 1 x411b7e90 1} {x42700000 xc3966282 x41289c20 1 x41289c20 1} {x42740000 xc390b5cc x412ac530 1 x412ac530 1} {x42780000 xc38bb62f x411afd40 1 x411afd40 1} {x427c0000 xc38705f8 x410dbea0 1 x410dbea0 1} {x42800000 xc382da45 x41085130 1 x41085130 1} {x42820000 xc37d01ca x410725d0 1 x410725d0 1} {x42840000 xc374cfd0 x40f3f5c0 1 x40f3f5c0 1} {x42860000 xc36dc26e x40fb86e0 1 x40fb86e0 1} {x42880000 xc3651762 x41046178 1 x41046178 1} {x428a0000 xc35d363f x40f0b150 1 x40f0b150 1} {x428c0000 xc3560c4d x40d725c0 1 x40d725c0 1} {x428e0000 xc34fc3e3 x40bf2350 1 x40bf2350 1} {x42900000 xc34a1a18 x40d9b600 1 x40d9b600 1} {x42920000 xc3422883 x40e59240 1 x40e59240 1} {x42940000 xc33bc0f4 x40c64060 1 x40c64060 1} {x42960000 xc335c47d x40ad7d30 1 x40ad7d30 1} {x42980000 xc330e921 x409e1ed0 1 x409e1ed0 1} {x429a0000 xc32be290 x40939e50 1 x40939e50 1} {x429c0000 xc327af3c x4071ff40 1 x4071ff40 1} {x429e0000 xc3245296 x406bafe0 1 x406bafe0 1} {x42a00000 xc32051bd x4082a1e0 1 x4082a1e0 1} {x42a20000 xc31c2878 x40a95580 1 x40a95580 1} {x42a40000 xc315bc65 x40acadc0 1 x40acadc0 1} {x42a60000 xc3115d9c x40987380 1 x40987380 1} {x42a80000 xc30c352d x40a62f10 1 x40a62f10 1} {x42aa0000 xc306faab x40962660 1 x40962660 1} {x42ac0000 xc302d2c7 x406a9a60 1 x406a9a60 1} {x42ae0000 xc2ff4bb0 x403a1910 1 x403a1910 1} {x42b00000 xc2fa03fd x3fd4bc60 1 x3fd4bc60 1} {x42b20000 xc2f8a5cd x3f07dc80 1 x3f07dc80 1} {x42b40000 xc2f7e48b x3f035c80 1 x3f035c80 1} {x42b60000 xc2f6985b x3f0d9440 1 x3f0d9440 1} {x42b80000 xc2f5ae3a x3f025fc0 1 x3f025fc0 1} {x42ba0000 xc2f48edc x3ed4c200 1 x3ed4c200 1} {x42bc0000 xc2f404b6 x3e4e1700 1 x3e4e1700 1} {x42be0000 xc2f3c0c5 -} {x42c00000 xc2f44859 xbec8ac00 1 xbec8ac00 1} {x42c20000 xc2f5521d -} {x42c40000 xc2f05ca6 x401d0610 1 x401d0610 1} {x42c60000 xc2eb81bc x4037b5a0 1 x4037b5a0 1} {x42c80000 xc2e4e14c x403c8870 1 x403c8870 1} {x42ca0000 xc2dfb935 x4026f580 1 x4026f580 1} {x42cc0000 xc2da71f4 x4032aed0 1 x4032aed0 1} {x42ce0000 xc2d48e48 x402acab0 1 x402acab0 1} {x42d00000 xc2cfc549 x40196080 1 x40196080 1} {x42d20000 xc2caf840 x40080150 1 x40080150 1} {x42d40000 xc2c74534 x400aed80 1 x400aed80 1} {x42d60000 xc2c24968 x402342f0 1 x402342f0 1} {x42d80000 xc2bd1105 x402f6df0 1 x402f6df0 1} {x42da0000 xc2b75289 x404aaf00 1 x404aaf00 1} {x42dc0000 xc2b06615 x406103c0 1 x406103c0 1} {x42de0000 xc2a9424d x40710710 1 x40710710 1} {x42e00000 xc2a155a4 x40832600 1 x40832600 1} {x42e20000 xc298dd8d x40862c78 1 x40862c78 1} {x42e40000 xc2909015 x40891a60 1 x40891a60 1} {x42e60000 xc287ba41 x40961940 1 x40961940 1} {x42e80000 xc27b99da x4097c824 1 x4097c824 1} {x42ea0000 xc2698279 x40a3390c 1 x40a3390c 1} {x42ec0000 xc252cb97 x40b71324 1 x40b71324 1} {x42ee0000 xc23bbdb0 x40b8b190 1 x40b8b190 1} {x42f00000 xc2249f33 x40c7ef20 1 x40c7ef20 1} {x42f20000 xc209c1e8 x40d42cf4 1 x40d42cf4 1} {x42f40000 xc1df27ec x40dd5254 1 x40dd5254 1} {x42f60000 xc1a4daa6 x40dc57ce 1 x40dc57ce 1} {x42f80000 xc161f80a x40de6837 1 x40de6837 1} {x42fa0000 xc0d69a2a x40e1f80a 1 x40e1f80a 1} {x42fc0000 0 x40dcff96 1 x40dcff96 1} {x42fe0000 x40e36501 x40e0ed6b 1 x40e0ed6b 1} {x43000000 x4160ed6b x40d76680 1 x40d76680 1} {x43010000 x41a48c80 x40c689e7 1 x40c689e7 1} {x43020000 x41d3bba9 x40b6be44 1 x40b6be44 1} {x43030000 x41ffeba2 x40aa9932 1 x40aa9932 1} {x43040000 x42148421 x40958710 1 x40958710 1} {x43050000 x42255795 x407fabd8 1 x407fabd8 1} {x43060000 x4234799c x40615870 1 x40615870 1} {x43070000 x424182a3 x40475428 1 x40475428 1} {x43080000 x424d6421 x403f6448 1 x403f6448 1} {x43090000 x42596f2c x403227e8 1 x403227e8 1} {x430a0000 x4263a91e x4021f258 1 x4021f258 1} {x430b0000 x426dad77 x40243fc0 1 x40243fc0 1} {x430c0000 x42783116 x401f45a8 1 x401f45a8 1} {x430d0000 x4280cb16 x4019da90 1 x4019da90 1} {x430e0000 x4285b634 x402703c0 1 x402703c0 1} {x430f0000 x428b3b52 x402f00d0 1 x402f00d0 1} {x43100000 x4290a641 x40221730 1 x40221730 1} {x43110000 x42955cc5 x40277150 1 x40277150 1} {x43120000 x429b1d56 x401859a0 1 x401859a0 1} {x43130000 x429ee25f x40021e90 1 x40021e90 1} {x43140000 x42a33f3f x3fc88be0 1 x3fc88be0 1} {x43150000 x42a526be -} {x43160000 x42a4853a xbef24600 1 0 1}} {{x42540000 x446b8e1e 0 1 xc1265280 1} {x42580000 x44690c35 xc114c9c0 1 xc114c9c0 1} {x425c0000 x4466e7d0 xc1305c40 1 xc1305c40 1} {x42600000 x44638953 xc168fca0 1 xc168fca0 1} {x42640000 x445f9feb xc17fef00 1 xc17fef00 1} {x42680000 x445b89db xc1855a70 1 xc1855a70 1} {x426c0000 x44574a44 xc17e6ee0 1 xc17e6ee0 1} {x42700000 x44539664 xc17d0840 1 xc17d0840 1} {x42740000 x444f6202 xc188e610 1 xc188e610 1} {x42780000 x444b0803 xc18cb4b0 1 xc18cb4b0 1} {x427c0000 x444696b7 xc1916a20 1 xc1916a20 1} {x42800000 x4441f161 xc19da9c0 1 xc19da9c0 1} {x42820000 x443cbc1b xc1a80570 1 xc1a80570 1} {x42840000 x4437710a xc1adde00 1 xc1adde00 1} {x42860000 x4431de3b xc1b894b0 1 xc1b894b0 1} {x42880000 x442be7bf xc1b3d530 1 xc1b3d530 1} {x428a0000 x4426a0e8 xc1a71c80 1 xc1a71c80 1} {x428c0000 x442175f7 xc1a03b10 1 xc1a03b10 1} {x428e0000 x441c9d37 xc198e840 1 xc198e840 1} {x42900000 x4417e773 xc1a707d0 1 xc1a707d0 1} {x42920000 x44122cba xc1b41e10 1 xc1b41e10 1} {x42940000 x440ca592 xc1a93f90 1 xc1a93f90 1} {x42960000 x440798c1 xc19a2aa0 1 xc19a2aa0 1} {x42980000 x440302e8 xc189b3e8 1 xc189b3e8 1} {x429a0000 x43fdfb05 xc178c650 1 xc178c650 1} {x429c0000 x43f6796b xc16d6620 1 xc16d6620 1} {x429e0000 x43ef24a3 xc176b380 1 xc176b380 1} {x42a00000 x43e70e33 xc18c88e0 1 xc18c88e0 1} {x42a20000 x43dd9387 xc19a4bf0 1 xc19a4bf0 1} {x42a40000 x43d3c4b5 xc1937e10 1 xc1937e10 1} {x42a60000 x43cb23c5 xc194e6d8 1 xc194e6d8 1} {x42a80000 x43c127da xc19eb670 1 xc19eb670 1} {x42aa0000 x43b74cf7 xc1935a58 1 xc1935a58 1} {x42ac0000 x43aebc8f xc1888618 1 xc1888618 1} {x42ae0000 x43a63c34 xc189dd30 1 xc189dd30 1} {x42b00000 x439d80e9 xc186dd08 1 xc186dd08 1} {x42b20000 x43956093 xc18807f8 1 xc18807f8 1} {x42b40000 x438c7fea xc19460a8 1 xc19460a8 1} {x42b60000 x4382d47e xc197eb98 1 xc197eb98 1} {x42b80000 x437304ee xc1950710 1 xc1950710 1} {x42ba0000 x43606738 xc18fc0c0 1 xc18fc0c0 1} {x42bc0000 x434f14be xc182ce88 1 xc182ce88 1} {x42be0000 x433fb396 xc16554c0 1 xc16554c0 1} {x42c00000 x43326a26 xc1486e10 1 xc1486e10 1} {x42c20000 x4326a5d4 xc1336700 1 xc1336700 1} {x42c40000 x431bfd46 xc12e96f8 1 xc12e96f8 1} {x42c60000 x4310d2f5 xc13c1ae8 1 xc13c1ae8 1} {x42c80000 x430479e9 xc13cf2a0 1 xc13cf2a0 1} {x42ca0000 x42f26942 xc12eabd4 1 xc12eabd4 1} {x42cc0000 x42dd48dd xc130cef8 1 xc130cef8 1} {x42ce0000 x42c63584 xc130c1e8 1 xc130c1e8 1} {x42d00000 x42b11863 xc11d532c 1 xc11d532c 1} {x42d20000 x429ee0b9 xc1085918 1 xc1085918 1} {x42d40000 x428f021d xc0fc37c4 1 xc0fc37c4 1} {x42d60000 x427eb381 xc0f1cfc0 1 xc0f1cfc0 1} {x42d80000 x4261904a xc0e85e30 1 xc0e85e30 1} {x42da0000 x42449bf5 xc0eb9774 1 xc0eb9774 1} {x42dc0000 x4226aa6d xc0e572b4 1 xc0e572b4 1} {x42de0000 x420b3f48 xc0c94fba 1 xc0c94fba 1} {x42e00000 x41e8acfd xc0acf496 1 xc0acf496 1} {x42e20000 x41c00445 xc08fc886 1 xc08fc886 1} {x42e40000 x41a0c8ba xc0673710 1 xc0673710 1} {x42e60000 x41863681 xc0326144 1 xc0326144 1} {x42e80000 x416860d2 xbff41d48 1 xbff41d48 1} {x42ea0000 x414f65b0 xbff74a28 1 xbff74a28 1} {x42ec0000 x412a8e48 xc003028c 1 xc003028c 1} {x42ee0000 x410de46a xbfd6db1a 1 xbfd6db1a 1} {x42f00000 x40e9af03 xbfe2b382 1 xbfe2b382 1} {x42f20000 x40aa6f13 xbfe1676e 1 xbfe1676e 1} {x42f40000 x4071f698 xbfdd21ff 1 xbfdd21ff 1} {x42f60000 x3fef784e xbfa4d9fd 1 xbfa4d9fd 1} {x42f80000 x3f9a3936 xbf623407 1 xbf623407 1} {x42fa0000 x3dd4446c xbe9f3351 1 xbe9f3351 1} {x42fc0000 0 xbe752338 1 xbe752338 1} {x42fe0000 xbec0121d xbea1ed58 1 xbea1ed58 1} {x43000000 xbf21ed58 -} {x43010000 xbecbf16b x3f1921da 1 x3f1921da 1} {x43020000 x3f10565b x3f9ec015 1 x3f9ec015 1} {x43030000 x400541e8 x3fc82910 1 x3fc82910 1} {x43040000 x406c3ea7 x3ff8a336 1 x3ff8a336 1} {x43050000 x40bef28f x4015dee4 1 x4015dee4 1} {x43060000 x4105ff1c x4013bfbd 1 x4013bfbd 1} {x43070000 x41295926 x4024583c 1 x4024583c 1} {x43080000 x41582b3a x40314368 1 x40314368 1} {x43090000 x4180fd6d x403249e4 1 x403249e4 1} {x430a0000 x4198a816 x402417a0 1 x402417a0 1} {x430b0000 x41aa0355 x40092fa8 1 x40092fa8 1} {x430c0000 x41baf400 x400b886c 1 x400b886c 1} {x430d0000 x41cce570 x40146840 1 x40146840 1} {x430e0000 x41e00e10 x4019562c 1 x4019562c 1} {x430f0000 x41f33afb x401a0198 1 x401a0198 1} {x43100000 x4203473b x401d769c 1 x401d769c 1} {x43110000 x420d4c51 x401ee180 1 x401ee180 1} {x43120000 x4217236b x40272de8 1 x40272de8 1} {x43130000 x4222320e x3ffcca30 1 x3ffcca30 1} {x43140000 x4226f00e x3f899960 1 x3f899960 1} {x43150000 x422acba4 -} {x43160000 x42285226 xbf6d8f40 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke43 262656 bezier {cc {f 8224} {p {0 0 1} {x44e7c5a2 x440c9811 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke44 262656 bezier {cc {f 8224} {p {0 0 1} {x44e7c5a2 x440c9811 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc2ad911c 0 1 x3f78e180 1} {x42580000 xc2ab410e x3fc32900 1 x3fc32900 1} {x425c0000 xc2a777d4 x401106d0 1 x401106d0 1} {x42600000 xc2a230a1 x4081d768 1 x4081d768 1} {x42640000 xc2973ce7 x40a644c8 1 x40a644c8 1} {x42680000 xc28d6808 x40b6dd58 1 x40b6dd58 1} {x426c0000 xc280613c x408cc930 1 x408cc930 1} {x42700000 xc2779dc4 x40199048 1 x40199048 1} {x42740000 xc26d906f x403c4178 1 x403c4178 1} {x42780000 xc2601595 x405d27d0 1 x405d27d0 1} {x427c0000 xc251eb75 x405ce460 1 x405ce460 1} {x42800000 xc2447909 x405e5f20 1 x405e5f20 1} {x42820000 xc2361f91 x4081e614 1 x4081e614 1} {x42840000 xc223ff84 -} {x42860000 xc2264b9f xbf077b20 1 xbf077b20 1} {x42880000 xc2283b5d -} {x428a0000 xc2270662 -} {x428c0000 xc22ad2f5 -} {x428e0000 xc2190f98 x408e5728 1 x408e5728 1} {x42900000 xc2073d2b x4098c280 1 x4098c280 1} {x42920000 xc1e5bdf0 x40a2160c 1 x40a2160c 1} {x42940000 xc1bd6f50 x4077ca84 1 x4077ca84 1} {x42960000 xc1a7cb4f x40286018 1 x40286018 1} {x42980000 xc193574a x40509d5a 1 x40509d5a 1} {x429a0000 xc16747f1 x40634108 1 x40634108 1} {x429c0000 xc1350e10 x40029506 1 x40029506 1} {x429e0000 xc125fd6e x3f74f338 1 x3f74f338 1} {x42a00000 xc1166fa9 x3f57f750 1 x3f57f750 1} {x42a20000 xc10afe84 x3f752864 1 x3f752864 1} {x42a40000 xc0ef9539 x3f797fd8 1 x3f797fd8 1} {x42a60000 xc0d79d12 -} {x42a80000 xc0dc1ac0 -} {x42aa0000 xc0ce93fe -} {x42ac0000 xc0daf50f xbf230238 1 xbf230238 1} {x42ae0000 xc0f7548c xbfc6dbfe 1 xbfc6dbfe 1} {x42b00000 xc11f3187 xbfffa794 1 xbfffa794 1} {x42b20000 xc13b942b xc00d1bf4 1 xc00d1bf4 1} {x42b40000 xc165bf81 xc01128a2 1 xc01128a2 1} {x42b60000 xc182143e xc002b06e 1 xc002b06e 1} {x42b80000 xc1938bdc xbffa3df0 1 xbffa3df0 1} {x42ba0000 xc1a15bfc xc00697d0 1 xc00697d0 1} {x42bc0000 xc1b531d0 xc0059ebc 1 xc0059ebc 1} {x42be0000 xc1c2c3ab xc006df70 1 xc006df70 1} {x42c00000 xc1d6e9ac xc032237c 1 xc032237c 1} {x42c20000 xc1ef4c8a xbff129d8 1 xbff129d8 1} {x42c40000 xc1f50ee7 xbf08c9b0 1 xbf08c9b0 1} {x42c60000 xc1f7d925 xbc6c8800 1 xbc6c8800 1} {x42c80000 xc1f7e300 xbc6c8800 1 xbc6c8800 1} {x42ca0000 xc1f90a97 xbe6265c0 1 xbe6265c0 1} {x42cc0000 xc1fb6c97 xbf08a7b0 1 xbf08a7b0 1} {x42ce0000 xc200ca89 xbf07d530 1 xbf07d530 1} {x42d00000 xc201f4f5 xbf03a8e0 1 xbf03a8e0 1} {x42d20000 xc204e7d0 xbf41ed60 1 xbf41ed60 1} {x42d40000 xc2080460 xbf2eda40 1 xbf2eda40 1} {x42d60000 xc20a5ea2 xbf28b780 1 xbf28b780 1} {x42d80000 xc20d4a1c -} {x42da0000 xc20b264b -} {x42dc0000 xc20b29cb -} {x42de0000 xc209ce81 x3eb885c0 1 x3eb885c0 1} {x42e00000 xc20847b4 x3f349860 1 x3f349860 1} {x42e20000 xc20429be x3f917bd0 1 x3f917bd0 1} {x42e40000 xc1fe5fee x3fc11330 1 x3fc11330 1} {x42e60000 xc1f03116 x3fc9ed20 1 x3fc9ed20 1} {x42e80000 xc1e5224a x3fc2aa78 1 x3fc2aa78 1} {x42ea0000 xc1d7dbc7 x3fd910c8 1 x3fd910c8 1} {x42ec0000 xc1ca0031 x400293c4 1 x400293c4 1} {x42ee0000 xc1b736d6 x401ce670 1 x401ce670 1} {x42f00000 xc1a2c695 x402cbcd0 1 x402cbcd0 1} {x42f20000 xc18c07a2 x4051faf0 1 x4051faf0 1} {x42f40000 xc15c8fb2 x40600bb2 1 x40600bb2 1} {x42f60000 xc128096b x405fab4f 1 x405fab4f 1} {x42f80000 xc0d97415 x4057b5cc 1 x4057b5cc 1} {x42fa0000 xc070ba14 x40597415 1 x40597415 1} {x42fc0000 0 x406997fa 1 x406997fa 1} {x42fe0000 x406275df x40624715 1 x40624715 1} {x43000000 x40e24715 x4057a5a2 1 x4057a5a2 1} {x43010000 x41247049 x40446b5f 1 x40446b5f 1} {x43020000 x4153593a x404be646 1 x404be646 1} {x43030000 x418531b6 x403fbaf8 1 x403fbaf8 1} {x43040000 x41999b5b x4029d474 1 x4029d474 1} {x43050000 x41afa6d3 x40197754 1 x40197754 1} {x43060000 x41bff930 x4001483c 1 x4001483c 1} {x43070000 x41cff8e2 x3fd99d40 1 x3fd99d40 1} {x43080000 x41db2cd8 x3fb65488 1 x3fb65488 1} {x43090000 x41e6c373 x3fa89090 1 x3fa89090 1} {x430a0000 x41f03eea x3fb93ee8 1 x3fb93ee8 1} {x430b0000 x41fdeb50 x3fcbb950 1 x3fcbb950 1} {x430c0000 x4204db0a x3fb949d0 1 x3fb949d0 1} {x430d0000 x420a8a45 x3fb374a0 1 x3fb374a0 1} {x430e0000 x42101254 x3fb3f220 1 x3fb3f220 1} {x430f0000 x4215c967 x3fdc7cf0 1 x3fdc7cf0 1} {x43100000 x421dda23 x3fe9e1b0 1 x3fe9e1b0 1} {x43110000 x42246782 x3fd07ab0 1 x3fd07ab0 1} {x43120000 x422ae1ce x3fb33130 1 x3fb33130 1} {x43130000 x422f9a95 x3f8efb00 1 x3f8efb00 1} {x43140000 x4233d17e x3f4aa8e0 1 x3f4aa8e0 1} {x43150000 x4235efdc -} {x43160000 x4230f660 xbfeec740 1 0 1}} {{x42540000 x443863cf 0 1 xc10c9080 1} {x42580000 x443631dd xc10c5480 1 xc10c5480 1} {x425c0000 x4434012b xc1024d60 1 xc1024d60 1} {x42600000 x44321f72 xc11b9ce0 1 xc11b9ce0 1} {x42640000 x442f2444 xc13adb00 1 xc13adb00 1} {x42680000 x442c489a xc1541360 1 xc1541360 1} {x426c0000 x442883a9 xc1439e60 1 xc1439e60 1} {x42700000 x44262ba7 xc1168a00 1 xc1168a00 1} {x42740000 x4423cf59 xc1303f00 1 xc1303f00 1} {x42780000 x4420a9af xc14cd620 1 xc14cd620 1} {x427c0000 x441d68a8 xc14f9580 1 xc14f9580 1} {x42800000 x441a2d03 xc15321e0 1 xc15321e0 1} {x42820000 x4416cf99 xc16930a0 1 xc16930a0 1} {x42840000 x4412e37e xc1471b80 1 xc1471b80 1} {x42860000 x441096bd xc10e1ea0 1 xc10e1ea0 1} {x42880000 x440e7289 xc1141b60 1 xc1141b60 1} {x428a0000 x440bf5e2 xc1183420 1 xc1183420 1} {x428c0000 x4409b0e8 xc14b1b40 1 xc14b1b40 1} {x428e0000 x44059d08 xc183ffd0 1 xc183ffd0 1} {x42900000 x440170eb xc18632c0 1 xc18632c0 1} {x42920000 x43fa73b8 xc187d538 1 xc187d538 1} {x42940000 x43f1e72f xc1804488 1 xc1804488 1} {x42960000 x43ea6b27 xc16b92a0 1 xc16b92a0 1} {x42980000 x43e32e05 xc165c0d0 1 xc165c0d0 1} {x429a0000 x43dc0f1a xc155ef70 1 xc155ef70 1} {x429c0000 x43d5cf0e xc149f9c0 1 xc149f9c0 1} {x429e0000 x43cf6f7e xc14f7510 1 xc14f7510 1} {x42a00000 x43c8d7bd xc15622d0 1 xc15622d0 1} {x42a20000 x43c20d51 xc15ba030 1 xc15ba030 1} {x42a40000 x43bb1dba xc165c7a0 1 xc165c7a0 1} {x42a60000 x43b3b0d7 xc1790c80 1 xc1790c80 1} {x42a80000 x43ab8cf2 xc17b1520 1 xc17b1520 1} {x42aa0000 x43a3ff85 xc16bf680 1 xc16bf680 1} {x42ac0000 x439ccd8a xc15cc8f0 1 xc15cc8f0 1} {x42ae0000 x439632f6 xc15841d0 1 xc15841d0 1} {x42b00000 x438f496d xc15391d0 1 xc15391d0 1} {x42b20000 x4388f9d9 xc155e510 1 xc155e510 1} {x42b40000 x4381eb1c xc1551770 1 xc1551770 1} {x42b60000 x437750c4 xc150a120 1 xc150a120 1} {x42b80000 x4369c214 xc150ff18 1 xc150ff18 1} {x42ba0000 x435d30e1 xc150bd30 1 xc150bd30 1} {x42bc0000 x434faa6e xc145cb80 1 xc145cb80 1} {x42be0000 x43447771 xc136b2b8 1 xc136b2b8 1} {x42c00000 x4338d417 xc1366c50 1 xc1366c50 1} {x42c20000 x432da9e7 xc1205be0 1 xc1205be0 1} {x42c40000 x4324c89b xc10b3e18 1 xc10b3e18 1} {x42c60000 x431c4224 xc1002ab8 1 xc1002ab8 1} {x42c80000 x4314c344 xc0fd4ef0 1 xc0fd4ef0 1} {x42ca0000 x430c6d35 xc1018c78 1 xc1018c78 1} {x42cc0000 x430491b5 xc100da50 1 xc100da50 1} {x42ce0000 x42f8a3d6 xc0fe26f8 1 xc0fe26f8 1} {x42d00000 x42e95e8b xc0e190c0 1 xc0e190c0 1} {x42d20000 x42dc71be xc0cb8738 1 xc0cb8738 1} {x42d40000 x42cfeda4 xc0beef20 1 xc0beef20 1} {x42d60000 x42c493da xc0c27058 1 xc0c27058 1} {x42d80000 x42b79f99 xc0b5c8d8 1 xc0b5c8d8 1} {x42da0000 x42addabf xc0c5bb20 1 xc0c5bb20 1} {x42dc0000 x429ee835 xc0e11e40 1 xc0e11e40 1} {x42de0000 x4291b6f7 xc0d163d8 1 xc0d163d8 1} {x42e00000 x4284bbba xc0b34478 1 xc0b34478 1} {x42e20000 x42769cd0 xc09c5748 1 xc09c5748 1} {x42e40000 x426261a2 xc0982d94 1 xc0982d94 1} {x42e60000 x4250916b xc08d2858 1 xc08d2858 1} {x42e80000 x423f178c xc08044cc 1 xc08044cc 1} {x42ea0000 x42308038 xc0814390 1 xc0814390 1} {x42ec0000 x421ec6a8 xc08b512c 1 xc08b512c 1} {x42ee0000 x420dabed xc08ea226 1 xc08ea226 1} {x42f00000 x41f63c3d xc09e6d44 1 xc09e6d44 1} {x42f20000 x41cc2138 xc09e517a 1 xc09e517a 1} {x42f40000 x41a71380 xc09f79ff 1 xc09f79ff 1} {x42f60000 x4178c871 xc0a00fe1 1 xc0a00fe1 1} {x42f80000 x412e171f xc0ae138e 1 xc0ae138e 1} {x42fa0000 x409569c6 xc0ae171f 1 xc0ae171f 1} {x42fc0000 0 xc093ba15 1 xc093ba15 1} {x42fe0000 xc0920a64 xc092c5d2 1 xc092c5d2 1} {x43000000 xc112c5d2 xc08fff95 1 xc08fff95 1} {x43010000 xc15904c7 xc08ac890 1 xc08ac890 1} {x43020000 xc18ec731 xc05ef5ee 1 xc05ef5ee 1} {x43030000 xc1a43fdf xc04bfb40 1 xc04bfb40 1} {x43040000 xc1c1c601 xc0469bcc 1 xc0469bcc 1} {x43050000 xc1d5e6d2 xc030f148 1 xc030f148 1} {x43060000 xc1ee0253 xc037c640 1 xc037c640 1} {x43070000 xc201ec31 xc029471c 1 xc029471c 1} {x43080000 xc20c2a0d xc00da288 1 xc00da288 1} {x43090000 xc213a082 xbffb0d30 1 xbffb0d30 1} {x430a0000 xc21bdae0 xbfe2f220 1 xbfe2f220 1} {x430b0000 xc221cfa4 xbfe49a80 1 xbfe49a80 1} {x430c0000 xc22a2488 xc0088d58 1 xc0088d58 1} {x430d0000 xc232e14f xbff6d0c0 1 xbff6d0c0 1} {x430e0000 xc2399194 xbfc6bf00 1 xbfc6bf00 1} {x430f0000 xc23f4d3f xbfab7550 1 xbfab7550 1} {x43100000 xc24448e9 xbfd527d0 1 xbfd527d0 1} {x43110000 xc24c9fbc xbff3f4b0 1 xbff3f4b0 1} {x43120000 xc2538834 xbfd1eb30 1 xbfd1eb30 1} {x43130000 xc259be6f xbfd2b960 1 xbfd2b960 1} {x43140000 xc260b3ca xbfd34620 1 xbfd34620 1} {x43150000 xc266f2d1 xc02f9830 1 xc02f9830 1} {x43160000 xc276a6d0 xc09089e8 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke45 262656 bezier {cc {f 8224} {p {0 0 1} {x44cd2917 x446143d7 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke46 262656 bezier {cc {f 8224} {p {0 0 1} {x44cd2917 x446143d7 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc370b3d7 0 1 x40dceee0 1} {x42580000 xc369861f x40f74740 1 x40f74740 1} {x425c0000 xc3613f63 x40e52090 1 x40e52090 1} {x42600000 xc35b3416 x40c14780 1 x40c14780 1} {x42640000 xc3552aeb x40d6a580 1 x40d6a580 1} {x42680000 xc34dc9be x40f58da0 1 x40f58da0 1} {x426c0000 xc345d211 x40e5c600 1 x40e5c600 1} {x42700000 xc33f6d5e x40cb5de0 1 x40cb5de0 1} {x42740000 xc3391c33 x40be6f90 1 x40be6f90 1} {x42780000 xc3338665 x40deb050 1 x40deb050 1} {x427c0000 xc32b312e x4100d568 1 x4100d568 1} {x42800000 xc3236bb8 x40ee1db0 1 x40ee1db0 1} {x42820000 xc31c4f53 x40cbae00 1 x40cbae00 1} {x42840000 xc316b0d8 x40b2e790 1 x40b2e790 1} {x42860000 xc31120da x40b796d0 1 x40b796d0 1} {x42880000 xc30b376b x40bc0510 1 x40bc0510 1} {x428a0000 xc3056089 x40b73b60 1 x40b73b60 1} {x428c0000 xc2ff876a x40a852e0 1 x40a852e0 1} {x428e0000 xc2f5b6b6 x40a06d68 1 x40a06d68 1} {x42900000 xc2eb79bd x40a97478 1 x40a97478 1} {x42920000 xc2e08827 x40a8f678 1 x40a8f678 1} {x42940000 xc2d65aee x40992e00 1 x40992e00 1} {x42960000 xc2cd6267 x408ecec0 1 x408ecec0 1} {x42980000 xc2c48116 x408adef8 1 x408adef8 1} {x429a0000 xc2bc0688 x40769440 1 x40769440 1} {x429c0000 xc2b517d2 x4042ad60 1 x4042ad60 1} {x429e0000 xc2afdbb2 x400aeeb0 1 x400aeeb0 1} {x42a00000 xc2ac68e7 x3fcb7fa0 1 x3fcb7fa0 1} {x42a20000 xc2a97fb5 x3fd32bc0 1 x3fd32bc0 1} {x42a40000 xc2a5cf89 x3fecad00 1 x3fecad00 1} {x42a60000 xc2a21a4d x3fba3540 1 x3fba3540 1} {x42a80000 xc29ffddf x3f845340 1 x3f845340 1} {x42aa0000 xc29df7b3 x3f3535c0 1 x3f3535c0 1} {x42ac0000 xc29d2908 -} {x42ae0000 xc29ec7d0 xbf9be060 1 xbf9be060 1} {x42b00000 xc2a2080b xbfcb91e0 1 xbfcb91e0 1} {x42b20000 xc2a5245f xbfa240c0 1 xbfa240c0 1} {x42b40000 xc2a71a11 xbf7965c0 1 xbf7965c0 1} {x42b60000 xc2a909f6 xbf68c800 1 xbf68c800 1} {x42b80000 xc2aabd31 xbf7ef240 1 xbf7ef240 1} {x42ba0000 xc2ad05bf xbf8d7940 1 xbf8d7940 1} {x42bc0000 xc2af28fb xbf8b9a00 1 xbf8b9a00 1} {x42be0000 xc2b1628f xbf865140 1 xbf865140 1} {x42c00000 xc2b35b85 xbf721040 1 xbf721040 1} {x42c20000 xc2b52ad0 -} {x42c40000 xc2b35a25 x3fbb4f40 1 x3fbb4f40 1} {x42c60000 xc2af5056 x3fb9f140 1 x3fb9f140 1} {x42c80000 xc2ad8a9b x3f821bc0 1 x3f821bc0 1} {x42ca0000 xc2ab3f78 x3fba05c0 1 x3fba05c0 1} {x42cc0000 xc2a7ba6d x3fb9bec0 1 x3fb9bec0 1} {x42ce0000 xc2a57182 x3f9b0c20 1 x3f9b0c20 1} {x42d00000 xc2a2e20c x3f81a040 1 x3f81a040 1} {x42d20000 xc2a16480 x3f63d2c0 1 x3f63d2c0 1} {x42d40000 xc29f52c1 x3f72e080 1 x3f72e080 1} {x42d60000 xc29d98fe x3f9a5480 1 x3f9a5480 1} {x42d80000 xc29a801d x3fc76520 1 x3fc76520 1} {x42da0000 xc2975dd5 x3ffa1d20 1 x3ffa1d20 1} {x42dc0000 xc292af34 x401cb480 1 x401cb480 1} {x42de0000 xc28d928d x402de6c0 1 x402de6c0 1} {x42e00000 xc287d0c8 x40416a50 1 x40416a50 1} {x42e20000 xc2817be8 x404bd3c8 1 x404bd3c8 1} {x42e40000 xc2762717 x40587a50 1 x40587a50 1} {x42e60000 xc267e886 x4067c8c0 1 x4067c8c0 1} {x42e80000 xc2592dff x406b2d38 1 x406b2d38 1} {x42ea0000 xc24a82df x4083603c 1 x4083603c 1} {x42ec0000 xc23855f0 x4096bf4c 1 x4096bf4c 1} {x42ee0000 xc224d30c x409ce818 1 x409ce818 1} {x42f00000 xc2111bea x40a93b52 1 x40a93b52 1} {x42f20000 xc1f5086f x40b7c550 1 x40b7c550 1} {x42f40000 xc1c6552c x40c33008 1 x40c33008 1} {x42f60000 xc193706b x40c30b73 1 x40c30b73 1} {x42f80000 xc1499ee5 x40c2a31e 1 x40c2a31e 1} {x42fa0000 xc0c87b71 x40c99ee5 1 x40c99ee5 1} {x42fc0000 0 x40c09efb 1 x40c09efb 1} {x42fe0000 x40b8c285 x40b83ce5 1 x40b83ce5 1} {x43000000 x41383ce5 x40b8ce02 1 x40b8ce02 1} {x43010000 x418a97a2 x40b1ad37 1 x40b1ad37 1} {x43020000 x41b4f50e x40a48396 1 x40a48396 1} {x43030000 x41dcd96d x40975938 1 x40975938 1} {x43040000 x420050d5 x40884fb6 1 x40884fb6 1} {x43050000 x421080a4 x407069b0 1 x407069b0 1} {x43060000 x421e5e0b x405f27c8 1 x405f27c8 1} {x43070000 x422c659d x40509810 1 x40509810 1} {x43080000 x4238710d x402bc808 1 x402bc808 1} {x43090000 x4241de9e x402ed318 1 x402ed318 1} {x430a0000 x424e4b70 x40342818 1 x40342818 1} {x430b0000 x425863a1 x40195080 1 x40195080 1} {x430c0000 x42617580 x400a5108 1 x400a5108 1} {x430d0000 x4269adc2 x4012d6f0 1 x4012d6f0 1} {x430e0000 x4273d05e x4016a1e0 1 x4016a1e0 1} {x430f0000 x427c81fe x40149720 1 x40149720 1} {x43100000 x428331a1 x401ca930 1 x401ca930 1} {x43110000 x42880b92 x40173b90 1 x40173b90 1} {x43120000 x428ca55a x4002ccc0 1 x4002ccc0 1} {x43130000 x4290385e x3fdd3480 1 x3fdd3480 1} {x43140000 x42938efe x3f882260 1 x3f882260 1} {x43150000 x42947971 -} {x43160000 x4293d617 xbef50700 1 0 1}} {{x42540000 x444d62ca 0 1 xc1172d00 1} {x42580000 x444b106b xc10f6d40 1 xc10f6d40 1} {x425c0000 x4448e760 xc1121fe0 1 xc1121fe0 1} {x42600000 x44467f6c xc130ecc0 1 xc130ecc0 1} {x42640000 x44435ffa xc1581b00 1 xc1581b00 1} {x42680000 x443fbe94 xc17907c0 1 xc17907c0 1} {x426c0000 x443b97bc xc16a5fe0 1 xc16a5fe0 1} {x42700000 x44386b95 xc14dd220 1 xc14dd220 1} {x42740000 x4435292b xc15853c0 1 xc15853c0 1} {x42780000 x4431a8f7 xc1737f40 1 xc1737f40 1} {x427c0000 x442d8d31 xc1875bf0 1 xc1875bf0 1} {x42800000 x44293338 xc188fe80 1 xc188fe80 1} {x42820000 x4424fd49 xc1874130 1 xc1874130 1} {x42840000 x4420bf25 xc1895700 1 xc1895700 1} {x42860000 x441c67d9 xc189fa30 1 xc189fa30 1} {x42880000 x44181f82 xc184c3f0 1 xc184c3f0 1} {x428a0000 x44141b9a xc17fc3c0 1 xc17fc3c0 1} {x428c0000 x44102164 xc1830670 1 xc1830670 1} {x428e0000 x440beb33 xc18a30e0 1 xc18a30e0 1} {x42900000 x44077e56 xc1903940 1 xc1903940 1} {x42920000 x4402e79f xc193b2e0 1 xc193b2e0 1} {x42940000 x43fc8650 xc1907508 1 xc1907508 1} {x42960000 x43f3c09d xc18a8220 1 xc18a8220 1} {x42980000 x43eb360c xc17e6570 1 xc17e6570 1} {x429a0000 x43e3da46 xc161f090 1 xc161f090 1} {x429c0000 x43dd1703 xc1601a20 1 xc1601a20 1} {x429e0000 x43d5d8a4 xc1682e00 1 xc1682e00 1} {x42a00000 x43ce9423 xc1693f40 1 xc1693f40 1} {x42a20000 x43c744b0 xc16ee5c0 1 xc16ee5c0 1} {x42a40000 x43bfa5c7 xc17824e0 1 xc17824e0 1} {x42a60000 x43b7c262 xc17c9b70 1 xc17c9b70 1} {x42a80000 x43afdc10 xc17ba1b0 1 xc17ba1b0 1} {x42aa0000 x43a80847 xc1747410 1 xc1747410 1} {x42ac0000 x43a094cf xc1654640 1 xc1654640 1} {x42ae0000 x4399b3e3 xc15b62e0 1 xc15b62e0 1} {x42b00000 x4392dea1 xc1621dd0 1 xc1621dd0 1} {x42b20000 x438b9206 xc1714220 1 xc1714220 1} {x42b40000 x4383ca7f xc1792740 1 xc1792740 1} {x42b60000 x4377ff24 xc1783a78 1 xc1783a78 1} {x42b80000 x43688daf xc17b0ea8 1 xc17b0ea8 1} {x42ba0000 x43589d4f xc1778c58 1 xc1778c58 1} {x42bc0000 x43499c24 xc168f268 1 xc168f268 1} {x42be0000 x433b7f02 xc1556250 1 xc1556250 1} {x42c00000 x432eefda xc13d1cb8 1 xc13d1cb8 1} {x42c20000 x4323db6b xc1260810 1 xc1260810 1} {x42c40000 x431a2ed8 xc114db30 1 xc114db30 1} {x42c60000 x43114005 xc118c5f8 1 xc118c5f8 1} {x42c80000 x43071619 xc12170ec 1 xc12170ec 1} {x42ca0000 x42fa23cf xc115e390 1 xc115e390 1} {x42cc0000 x42e8b34e xc1108c54 1 xc1108c54 1} {x42ce0000 x42d600ba xc11062e0 1 xc11062e0 1} {x42d00000 x42c49a96 xc1072420 1 xc1072420 1} {x42d20000 x42b437b2 xc0fb4e20 1 xc0fb4e20 1} {x42d40000 x42a530d2 xc0e85e60 1 xc0e85e60 1} {x42d60000 x42972be6 xc0d861b0 1 xc0d861b0 1} {x42d80000 x428a249c xc0db3844 1 xc0db3844 1} {x42da0000 x427789bb xc0de5340 1 xc0de5340 1} {x42dc0000 x425cb468 xc0d71b98 1 xc0d71b98 1} {x42de0000 x4241c2d5 xc0bda818 1 xc0bda818 1} {x42e00000 x422d4a62 xc094571c 1 xc094571c 1} {x42e20000 x421cad0e xc0887bb0 1 xc0887bb0 1} {x42e40000 x420b2b76 xc07dfd3c 1 xc07dfd3c 1} {x42e60000 x41f9dacd xc04b1550 1 xc04b1550 1} {x42e80000 x41e39198 xc02fccf0 1 xc02fccf0 1} {x42ea0000 x41cde791 xc03384a4 1 xc03384a4 1} {x42ec0000 x41b6b06f xc02e1dbc 1 xc02e1dbc 1} {x42ee0000 x41a26022 xc033b008 1 xc033b008 1} {x42f00000 x4189c46d xc048afc0 1 xc048afc0 1} {x42f20000 x41606864 xc0542596 1 xc0542596 1} {x42f40000 x4129760f xc047dc39 1 xc047dc39 1} {x42f60000 x40f8f48f xc046dc3b 1 xc046dc3b 1} {x42f80000 x408c0fe3 xc0432a0c 1 xc0432a0c 1} {x42fa0000 x3fd72a0d xc00c0fe3 1 xc00c0fe3 1} {x42fc0000 0 xc001431d 1 xc001431d 1} {x42fe0000 xc016f134 xc016263e 1 xc016263e 1} {x43000000 xc096263e xbffa99c8 1 xbffa99c8 1} {x43010000 xc0c8c57e xbfc46228 1 xbfc46228 1} {x43020000 xc0f85752 xbf9c8294 1 xbf9c8294 1} {x43030000 xc10b8364 xbf41e910 1 xbf41e910 1} {x43040000 xc11468cb xbf266db8 1 xbf266db8 1} {x43050000 xc120511b xbf28e5f0 1 xbf28e5f0 1} {x43060000 xc1298589 -} {x43070000 xc124659d x3e6bd0a0 1 x3e6bd0a0 1} {x43080000 xc1222704 x3e83bbe0 1 x3e83bbe0 1} {x43090000 xc11c29df x3f1a3300 1 x3f1a3300 1} {x430a0000 xc10ee0a4 x3f1086a0 1 x3f1086a0 1} {x430b0000 xc10a190b -} {x430c0000 xc1121420 xbf1bd410 1 xbf1bd410 1} {x430d0000 xc11d938d xbeeccbc0 1 xbeeccbc0 1} {x430e0000 xc120e0dc xbec8d700 1 xbec8d700 1} {x430f0000 xc12a20fd xbf0f77c8 1 xbf0f77c8 1} {x43100000 xc132cfd5 xbee7c7d0 1 xbee7c7d0 1} {x43110000 xc1389d7a -} {x43120000 xc136ea14 -} {x43130000 xc13ff31e xbf145f38 1 xbf145f38 1} {x43140000 xc14975fb xbf7d93d0 1 xbf7d93d0 1} {x43150000 xc15fa598 xc0007b42 1 xc0007b42 1} {x43160000 xc184d9ce xc03c1677 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke47 262656 bezier {cc {f 8224} {p {0 0 1} {x43b3ad50 x43a2b45a 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke48 262656 bezier {cc {f 8224} {p {0 0 1} {x43b3ad50 x43a2b45a 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc33c2cdc 0 1 x4081b9e8 1} {x42580000 xc337ceb5 x409fdad0 1 x409fdad0 1} {x425c0000 xc3322f2f x40c666e0 1 x40c666e0 1} {x42600000 xc32b6847 x40e0cdd0 1 x40e0cdd0 1} {x42640000 xc3242252 x40e453a0 1 x40e453a0 1} {x42680000 xc31d230d x40e108a0 1 x40e108a0 1} {x426c0000 xc31611c8 x40e27410 1 x40e27410 1} {x42700000 xc30efbcc x40e598e0 1 x40e598e0 1} {x42740000 xc307b83a x40f6e530 1 x40f6e530 1} {x42780000 xc2ff1af2 x410143a0 1 x410143a0 1} {x427c0000 xc2ef1f8c x410635e8 1 x410635e8 1} {x42800000 xc2dd8d78 x4108c018 1 x4108c018 1} {x42820000 xc2ccef86 x4100e484 1 x4100e484 1} {x42840000 xc2bd5457 x40fb0b58 1 x40fb0b58 1} {x42860000 xc2ad8e1b x40b8bad0 1 x40b8bad0 1} {x42880000 xc2a63cfd x40b65530 1 x40b65530 1} {x428a0000 xc296c375 x40ab7028 1 x40ab7028 1} {x428c0000 xc290cef8 x40732040 1 x40732040 1} {x428e0000 xc2879171 x409941b4 1 x409941b4 1} {x42900000 xc27b4d83 x409108a8 1 x409108a8 1} {x42920000 xc26ae0b8 x3fd90e60 1 x3fd90e60 1} {x42940000 xc2689de7 x3f030aa0 1 x3f030aa0 1} {x42960000 xc266c863 x3eeeae40 1 x3eeeae40 1} {x42980000 xc264e32e x3fb5f3e0 1 x3fb5f3e0 1} {x429a0000 xc25a5647 x40117e70 1 x40117e70 1} {x429c0000 xc252b360 x3fdbc2e0 1 x3fdbc2e0 1} {x429e0000 xc24c9a19 x3d581800 1 x3d581800 1} {x42a00000 xc24c8817 x3d581800 1 x3d581800 1} {x42a20000 xc245b43a x3fefc9b0 1 x3fefc9b0 1} {x42a40000 xc23d8b7c x402c3520 1 x402c3520 1} {x42a60000 xc2302d96 x402356a8 1 x402356a8 1} {x42a80000 xc22920a7 x3fc29790 1 x3fc29790 1} {x42aa0000 xc224041d x3fbf5960 1 x3fbf5960 1} {x42ac0000 xc21d2b11 x3f0d66c0 1 x3f0d66c0 1} {x42ae0000 xc21c6e88 -} {x42b00000 xc21f9add xbf86b5a0 1 xbf86b5a0 1} {x42b20000 xc224d9e2 xbfa8c800 1 xbfa8c800 1} {x42b40000 xc22a275d xbfa1d890 1 xbfa1d890 1} {x42b60000 xc22ef76b xbf943cf0 1 xbf943cf0 1} {x42b80000 xc2336b2c xbf961500 1 xbf961500 1} {x42ba0000 xc23858bb xbfa57ba0 1 xbfa57ba0 1} {x42bc0000 xc23dc2e6 xbfad45e0 1 xbfad45e0 1} {x42be0000 xc2432d19 xbfb56d90 1 xbfb56d90 1} {x42c00000 xc24919bf xbfc53160 1 xbfc53160 1} {x42c20000 xc24f802f -} {x42c40000 xc24add32 x3f9b6e50 1 x3f9b6e50 1} {x42c60000 xc245c94a x3f8ecf00 1 x3f8ecf00 1} {x42c80000 xc241f042 x3f959eb0 1 x3f959eb0 1} {x42ca0000 xc23c6f5f x3fa4c200 1 x3fa4c200 1} {x42cc0000 xc237a422 x3fd833f0 1 x3fd833f0 1} {x42ce0000 xc22eec20 x3fe0ad10 1 x3fe0ad10 1} {x42d00000 xc2299951 x3f93ea70 1 x3f93ea70 1} {x42d20000 xc225ad79 x3f433760 1 x3f433760 1} {x42d40000 xc2237f96 x3eee40c0 1 x3eee40c0 1} {x42d60000 xc221f476 x3e74d100 1 x3e74d100 1} {x42d80000 xc22195f4 x3da93900 1 x3da93900 1} {x42da0000 xc2214b3d x3dc41600 1 x3dc41600 1} {x42dc0000 xc220d1de x3ea2d0c0 1 x3ea2d0c0 1} {x42de0000 xc21ebffa x3ef7f240 1 x3ef7f240 1} {x42e00000 xc21cf215 x3f115940 1 x3f115940 1} {x42e20000 xc21a3530 x3f590660 1 x3f590660 1} {x42e40000 xc21629e2 x3f8929c0 1 x3f8929c0 1} {x42e60000 xc211a294 x3fa02190 1 x3fa02190 1} {x42e80000 xc20c27c9 x3fbe8780 1 x3fbe8780 1} {x42ea0000 xc205ba1c x3fe93f28 1 x3fe93f28 1} {x42ec0000 xc1fb27ad x4017d43c 1 x4017d43c 1} {x42ee0000 xc1e57f29 x403df3c0 1 x403df3c0 1} {x42f00000 xc1cbaabd x405ac5c4 1 x405ac5c4 1} {x42f20000 xc1aecdb8 x40787e10 1 x40787e10 1} {x42f40000 xc18d8b39 x4087db27 1 x4087db27 1} {x42f60000 xc155c049 x408cb1af 1 x408cb1af 1} {x42f80000 xc10e64c3 x408dd1ce 1 x408dd1ce 1} {x42fa0000 xc08fdcf7 x408e64c3 1 x408e64c3 1} {x42fc0000 0 x4092d978 1 x4092d978 1} {x42fe0000 x4095d5fa x409800ad 1 x409800ad 1} {x43000000 x411800ad x40989b65 1 x40989b65 1} {x43010000 x41638662 x408fd7f9 1 x408fd7f9 1} {x43020000 x4193ec53 x408747b2 1 x408747b2 1} {x43030000 x41b5670a x4082a15e 1 x4082a15e 1} {x43040000 x41d53d02 x406cfeb0 1 x406cfeb0 1} {x43050000 x41f0a6b6 x405ec900 1 x405ec900 1} {x43060000 x420677a1 x407d1a98 1 x407d1a98 1} {x43070000 x4217f6ae x4051f8c8 1 x4051f8c8 1} {x43080000 x4220b6ba x3ff822c0 1 x3ff822c0 1} {x43090000 x422778da x3fdf43f0 1 x3fdf43f0 1} {x430a0000 x422eaaf9 x3fdf8310 1 x3fdf8310 1} {x430b0000 x4235710b x3fd57ea0 1 x3fd57ea0 1} {x430c0000 x423c02e3 x3fd07ab0 1 x3fd07ab0 1} {x430d0000 x424278b6 x3fdcf9c0 1 x3fdcf9c0 1} {x430e0000 x4249d27f x3ff8ec30 1 x3ff8ec30 1} {x430f0000 x42520779 x40099428 1 x40099428 1} {x43100000 x425b0504 x4014e4c0 1 x4014e4c0 1} {x43110000 x4264a411 x40192578 1 x40192578 1} {x43120000 x426e29b3 x4012d918 1 x4012d918 1} {x43130000 x4276ff34 x3ff27fe0 1 x3ff27fe0 1} {x43140000 x427d51b1 x3f8dfb50 1 x3f8dfb50 1} {x43150000 x427fdee9 -} {x43160000 x427e7a39 xbf05c200 1 0 1}} {{x42540000 x44819ac7 0 1 xc155eb50 1} {x42580000 x447fc000 xc16c53e0 1 xc16c53e0 1} {x425c0000 x447bd2ef xc181a0e0 1 xc181a0e0 1} {x42600000 x4477a5f2 xc184ab40 1 xc184ab40 1} {x42640000 x4473883b xc1836f30 1 xc1836f30 1} {x42680000 x446f6eff xc1854620 1 xc1854620 1} {x426c0000 x446b33d9 xc18bc800 1 xc18bc800 1} {x42700000 x4466b27f xc198e5d0 1 xc198e5d0 1} {x42740000 x4461a57c xc1aa4ae0 1 xc1aa4ae0 1} {x42780000 x445c0dd1 xc1bbe410 1 xc1bbe410 1} {x427c0000 x4455e73b xc1ccfa90 1 xc1ccfa90 1} {x42800000 x444f3e28 xc1d9f420 1 xc1d9f420 1} {x42820000 x444847f9 xc1ddb4a0 1 xc1ddb4a0 1} {x42840000 x444162de xc1de5390 1 xc1de5390 1} {x42860000 x443a62c0 xc1d2a130 1 xc1d2a130 1} {x42880000 x443438cb xc1d3d450 1 xc1d3d450 1} {x428a0000 x442d257b xc1cfa960 1 xc1cfa960 1} {x428c0000 x44273e35 xc1b23ea0 1 xc1b23ea0 1} {x428e0000 x44220191 xc1ad0180 1 xc1ad0180 1} {x42900000 x441c6e1d xc1b75290 1 xc1b75290 1} {x42920000 x44168c68 xc1b9fe70 1 xc1b9fe70 1} {x42940000 x4410ce36 xc1b747d0 1 xc1b747d0 1} {x42960000 x440b17eb xc1b5c490 1 xc1b5c490 1} {x42980000 x440571ed xc1b136c0 1 xc1b136c0 1} {x429a0000 x4400047f xc1abbfa8 1 xc1abbfa8 1} {x429c0000 x43f56be5 xc1a82a60 1 xc1a82a60 1} {x429e0000 x43eb03b2 xc1a3ef60 1 xc1a3ef60 1} {x42a00000 x43e0edf9 xc1a3bc58 1 xc1a3bc58 1} {x42a20000 x43d68c27 xc1a6bd90 1 xc1a6bd90 1} {x42a40000 x43cc1647 xc1a2e9d0 1 xc1a2e9d0 1} {x42a60000 x43c22eed xc1a19e88 1 xc1a19e88 1} {x42a80000 x43b7e276 xc1a5fa98 1 xc1a5fa98 1} {x42aa0000 x43ad6f9a xc1a78718 1 xc1a78718 1} {x42ac0000 x43a2f193 xc1a4b868 1 xc1a4b868 1} {x42ae0000 x4398d88d xc19ed910 1 xc19ed910 1} {x42b00000 x438f1671 xc19b76d8 1 xc19b76d8 1} {x42b20000 x438569b2 xc19b71d8 1 xc19b71d8 1} {x42b40000 x4377506c xc19d2b28 1 xc19d2b28 1} {x42b60000 x4363889a xc19eb924 1 xc19eb924 1} {x42b80000 x434fa223 xc19c86bc 1 xc19c86bc 1} {x42ba0000 x433c66eb xc1958720 1 xc1958720 1} {x42bc0000 x432a405b xc18c26a8 1 xc18c26a8 1} {x42be0000 x43195d41 xc1816b10 1 xc1816b10 1} {x42c00000 x4309e597 xc16ca7b4 1 xc16ca7b4 1} {x42c20000 x42f79095 xc156fd50 1 xc156fd50 1} {x42c40000 x42de0bda xc148d8d0 1 xc148d8d0 1} {x42c60000 x42c55a61 xc144f2d8 1 xc144f2d8 1} {x42c80000 x42accf24 xc144a928 1 xc144a928 1} {x42ca0000 x42943017 xc1439a20 1 xc1439a20 1} {x42cc0000 x4277d138 xc12fc6ce 1 xc12fc6ce 1} {x42ce0000 x42507cc7 xc11c9646 1 xc11c9646 1} {x42d00000 x42298615 xc11e26f8 1 xc11e26f8 1} {x42d20000 x4201694b xc118687c 1 xc118687c 1} {x42d40000 x41baa3ae xc1080a26 1 xc1080a26 1} {x42d60000 x417590df xc0f0794e 1 xc0f0794e 1} {x42d80000 x4104ce0e xc0d544e4 1 xc0d544e4 1} {x42da0000 x40012fed xc0c4a69c 1 xc0c4a69c 1} {x42dc0000 xc07f623a xc0b56e2d 1 xc0b56e2d 1} {x42de0000 xc1152232 xc090f70e 1 xc090f70e 1} {x42e00000 xc150cf9c xc0444c94 1 xc0444c94 1} {x42e20000 xc177487c xbfe8c2f0 1 xbfe8c2f0 1} {x42e40000 xc185802c xbf49c090 1 xbf49c090 1} {x42e60000 xc1884047 -} {x42e80000 xc1816b20 x3f95e9d8 1 x3f95e9d8 1} {x42ea0000 xc16b0618 x3fb81f6c 1 x3fb81f6c 1} {x42ec0000 xc154ce65 x3fb43420 1 x3fb43420 1} {x42ee0000 xc13df910 x3fa7c994 1 x3fa7c994 1} {x42f00000 xc12adc00 x3f96be24 1 x3f96be24 1} {x42f20000 xc1184987 x3f9a7ffc 1 x3f9a7ffc 1} {x42f40000 xc1043c01 x3fa837ba 1 x3fa837ba 1} {x42f60000 xc0dc7731 x3fc94a60 1 x3fc94a60 1} {x42f80000 xc0a3d2d2 x4003fbba 1 x4003fbba 1} {x42fa0000 xc030f6ef x4023d2d2 1 x4023d2d2 1} {x42fc0000 0 x4038f2c4 1 x4038f2c4 1} {x42fe0000 x4040ee99 x40391107 1 x40391107 1} {x43000000 x40b91107 x4033677c 1 x4033677c 1} {x43010000 x4109ef64 x4036d56d 1 x4036d56d 1} {x43020000 x4137f33a x4041b188 1 x4041b188 1} {x43030000 x416ac828 x404d8334 1 x404d8334 1} {x43040000 x418f5a6a x4055b7d0 1 x4055b7d0 1} {x43050000 x41aad208 x407edcfc 1 x407edcfc 1} {x43060000 x41cf11a9 x40ac7274 1 x40ac7274 1} {x43070000 x420085a1 x40b21f06 1 x40b21f06 1} {x43080000 x42141096 x409c1efc 1 x409c1efc 1} {x43090000 x42278d60 x409d13e0 1 x409d13e0 1} {x430a0000 x423b558e x409f3f90 1 x409f3f90 1} {x430b0000 x424f5d44 x409ff9f8 1 x409ff9f8 1} {x430c0000 x4263540c x40a4dca0 1 x40a4dca0 1} {x430d0000 x4278946c x40b2ee00 1 x40b2ee00 1} {x430e0000 x428807c6 x40ba0cb0 1 x40ba0cb0 1} {x430f0000 x42938bcc x40b66250 1 x40b66250 1} {x43100000 x429ed410 x40b1b7a0 1 x40b1b7a0 1} {x43110000 x42a9c2c0 x40aa22c8 1 x40aa22c8 1} {x43120000 x42b41869 x40a204e8 1 x40a204e8 1} {x43130000 x42be035d x40989e38 1 x40989e38 1} {x43140000 x42c72c30 x408aa460 1 x408aa460 1} {x43150000 x42cf57e9 x4046f9e0 1 x4046f9e0 1} {x43160000 x42d39bce x3fd27c00 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke49 262656 bezier {cc {f 8224} {p {0 0 1} {x444833a6 x447347cf 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke50 262656 bezier {cc {f 8224} {p {0 0 1} {x444833a6 x447347cf 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3d25dfe 0 1 x408c0740 1} {x42580000 xc3cfd8d7 x40cbcec0 1 x40cbcec0 1} {x425c0000 xc3cbff88 x40fad9c0 1 x40fad9c0 1} {x42600000 xc3c80209 x41140d80 1 x41140d80 1} {x42640000 xc3c2beb0 x4128f7b0 1 x4128f7b0 1} {x42680000 xc3bd728e x41294f50 1 x41294f50 1} {x426c0000 xc3b829bb x41219ec0 1 x41219ec0 1} {x42700000 xc3b358a2 x41239d90 1 x41239d90 1} {x42740000 xc3adefe2 x412898d0 1 x412898d0 1} {x42780000 xc3a8cf15 x411b5880 1 x411b5880 1} {x427c0000 xc3a43a5a x41179f00 1 x41179f00 1} {x42800000 xc39f5525 x411d4fe0 1 x411d4fe0 1} {x42820000 xc39a655c x410ce570 1 x410ce570 1} {x42840000 xc39686ce x40f20660 1 x40f20660 1} {x42860000 xc392d529 x40db71c0 1 x40db71c0 1} {x42880000 xc38fab40 x40de83c0 1 x40de83c0 1} {x428a0000 xc38be10b x40c0cb00 1 x40c0cb00 1} {x428c0000 xc389a4e8 x4087acc0 1 x4087acc0 1} {x428e0000 xc387a3a5 x40889a40 1 x40889a40 1} {x42900000 xc3856016 x40909760 1 x40909760 1} {x42920000 xc3831eea x405aa000 1 x405aa000 1} {x42940000 xc381f596 x4051cca0 1 x4051cca0 1} {x42960000 xc37faf6f x4090b960 1 x4090b960 1} {x42980000 xc37adf96 x40976950 1 x40976950 1} {x429a0000 xc37638da x408c53f0 1 x408c53f0 1} {x429c0000 xc3721a57 x406d4c00 1 x406d4c00 1} {x429e0000 xc36ece7a x40532100 1 x40532100 1} {x42a00000 xc36b814f x4065a440 1 x4065a440 1} {x42a20000 xc367a158 x408676a0 1 x408676a0 1} {x42a40000 xc36319e5 x409d4710 1 x409d4710 1} {x42a60000 xc35dcce7 x409acdb0 1 x409acdb0 1} {x42a80000 xc3596d0a x408bc560 1 x408bc560 1} {x42aa0000 xc3551091 x407d7c00 1 x407d7c00 1} {x42ac0000 xc351812a x405bfc80 1 x405bfc80 1} {x42ae0000 xc34e30ad x402177e0 1 x402177e0 1} {x42b00000 xc34c756b x3fb1d140 1 x3fb1d140 1} {x42b20000 xc34b6968 x3f7e4300 1 x3f7e4300 1} {x42b40000 xc34a78e5 x3f905400 1 x3f905400 1} {x42b60000 xc3492818 x3fbcfd00 1 x3fbcfd00 1} {x42b80000 xc34784f1 x3ff14d40 1 x3ff14d40 1} {x42ba0000 xc34562e3 x40108140 1 x40108140 1} {x42bc0000 xc34300e7 x401c6720 1 x401c6720 1} {x42be0000 xc3407faa x401669e0 1 x401669e0 1} {x42c00000 xc33e4d98 x400a9420 1 x400a9420 1} {x42c20000 xc33c2b09 x40649be0 1 x40649be0 1} {x42c40000 xc33728b9 x40aaf150 1 x40aaf150 1} {x42c60000 xc3317bf4 x40b771d0 1 x40b771d0 1} {x42c80000 xc32bb19c x40a98ad0 1 x40a98ad0 1} {x42ca0000 xc326e347 x409a6700 1 x409a6700 1} {x42cc0000 xc3220b2c x4097d8f0 1 x4097d8f0 1} {x42ce0000 xc31d65b8 x4093aad0 1 x4093aad0 1} {x42d00000 xc318d07f x408c6c90 1 x408c6c90 1} {x42d20000 xc3149eef x4084c490 1 x4084c490 1} {x42d40000 xc3108436 x4086b0c0 1 x4086b0c0 1} {x42d60000 xc30c33e3 x408a7720 1 x408a7720 1} {x42d80000 xc307dcc4 x408f4870 1 x408f4870 1} {x42da0000 xc3033f5c x40978828 1 x40978828 1} {x42dc0000 xc2fcc883 x40a46e48 1 x40a46e48 1} {x42de0000 xc2f1f0ef x40b26660 1 x40b26660 1} {x42e00000 xc2e67bb7 x40b880b0 1 x40b880b0 1} {x42e20000 xc2dae0d9 x40be9670 1 x40be9670 1} {x42e40000 xc2cea8e9 x40c5f8f8 1 x40c5f8f8 1} {x42e60000 xc2c221ba x40cd8438 1 x40cd8438 1} {x42e80000 xc2b4f862 x40d8da58 1 x40d8da58 1} {x42ea0000 xc2a7066f x40e7fda0 1 x40e7fda0 1} {x42ec0000 xc297f8ae x40fc3870 1 x40fc3870 1} {x42ee0000 xc2877f61 x4105e6cc 1 x4105e6cc 1} {x42f00000 xc26cfdf6 x4110756a 1 x4110756a 1} {x42f20000 xc246c40d x4119da8c 1 x4119da8c 1} {x42f40000 xc22010b0 x4120dcde 1 x4120dcde 1} {x42f60000 xc1ecab3c x412223b7 1 x412223b7 1} {x42f80000 xc19dfda9 x411db420 1 x411db420 1} {x42fa0000 xc11dee37 x411dfda9 1 x411dfda9 1} {x42fc0000 0 x411e3a36 1 x411e3a36 1} {x42fe0000 x411e8634 x411cb35a 1 x411cb35a 1} {x43000000 x419cb35a x41178785 1 x41178785 1} {x43010000 x41e6ca9f x41108d7a 1 x41108d7a 1} {x43020000 x4216a06a x410ac35f 1 x410ac35f 1} {x43030000 x4238c6ff x41023db8 1 x41023db8 1} {x43040000 x4257bf46 x40ea5568 1 x40ea5568 1} {x43050000 x42735c59 x40cf7ce8 1 x40cf7ce8 1} {x43060000 x4285cf40 x40b90024 1 x40b90024 1} {x43070000 x4290ce31 x40abb210 1 x40abb210 1} {x43080000 x429b4582 x409ef9a0 1 x409ef9a0 1} {x43090000 x42a4ad65 x40902110 1 x40902110 1} {x430a0000 x42ad49a4 x40868638 1 x40868638 1} {x430b0000 x42b57e2c x407ccd70 1 x407ccd70 1} {x430c0000 x42bd167b x40611050 1 x40611050 1} {x430d0000 x42c38f31 x4054caa0 1 x4054caa0 1} {x430e0000 x42ca6325 x4061aab0 1 x4061aab0 1} {x430f0000 x42d1a9dc x406bb870 1 x406bb870 1} {x43100000 x42d91eac x406fbd00 1 x406fbd00 1} {x43110000 x42e0a5ac x406cdd50 1 x406cdd50 1} {x43120000 x42e7ec81 x4062c880 1 x4062c880 1} {x43130000 x42eed234 x404cfe80 1 x404cfe80 1} {x43140000 x42f4bc69 x401fdf70 1 x401fdf70 1} {x43150000 x42f8d02b x3fcceba0 1 x3fcceba0 1} {x43160000 x42fb23c6 x3f71c8a0 1 0 1}} {{x42540000 x44863755 0 1 xc1528140 1} {x42580000 x44847c80 xc1733d00 1 xc1733d00 1} {x425c0000 x44826a61 xc186fe20 1 xc186fe20 1} {x42600000 x4480448f xc18899b0 1 xc18899b0 1} {x42640000 x447c4b27 xc1853d40 1 xc1853d40 1} {x42680000 x4478354a xc187ac60 1 xc187ac60 1} {x426c0000 x4473d061 xc18aff90 1 xc18aff90 1} {x42700000 x446f8551 xc18fcf40 1 xc18fcf40 1} {x42740000 x446ad36d xc19fdee0 1 xc19fdee0 1} {x42780000 x44658763 xc1b101f0 1 xc1b101f0 1} {x427c0000 x445fc34e xc1c37f00 1 xc1c37f00 1} {x42800000 x44594f73 xc1cc6c80 1 xc1cc6c80 1} {x42820000 x4452fc86 xc1cbff10 1 xc1cbff10 1} {x42840000 x444c8f82 xc1cbcbb0 1 xc1cbcbb0 1} {x42860000 x44463fcb xc1cc4460 1 xc1cc4460 1} {x42880000 x443fcb3c xc1cf51b0 1 xc1cf51b0 1} {x428a0000 x44394ab0 xc1c6a350 1 xc1c6a350 1} {x428c0000 x44336107 xc1b8f5a0 1 xc1b8f5a0 1} {x428e0000 x442dbb56 xc1b9ef60 1 xc1b9ef60 1} {x42900000 x4427c211 xc1c371b0 1 xc1c371b0 1} {x42920000 x4421843b xc1cbbbf0 1 xc1cbbbf0 1} {x42940000 x441b0652 xc1ce2ec0 1 xc1ce2ec0 1} {x42960000 x4414a14f xc1c84a40 1 xc1c84a40 1} {x42980000 x440e81ae xc1bc48c0 1 xc1bc48c0 1} {x429a0000 x4408dcc3 xc1b113e0 1 xc1b113e0 1} {x429c0000 x44037070 xc1af1a28 1 xc1af1a28 1} {x429e0000 x43fbd641 xc1ae0820 1 xc1ae0820 1} {x42a00000 x43f11fdc xc1ab1778 1 xc1ab1778 1} {x42a20000 x43e67352 xc1ada980 1 xc1ada980 1} {x42a40000 x43db6aac xc1b2ce50 1 xc1b2ce50 1} {x42a60000 x43d01988 xc1af2aa8 1 xc1af2aa8 1} {x42a80000 x43c58557 xc1a65de8 1 xc1a65de8 1} {x42aa0000 x43bb4dcb xc1a725c0 1 xc1a725c0 1} {x42ac0000 x43b0a09f xc1a8bb88 1 xc1a8bb88 1} {x42ae0000 x43a6365a xc1aa7fc0 1 xc1aa7fc0 1} {x42b00000 x439b50a7 xc1ac9ad0 1 xc1ac9ad0 1} {x42b20000 x4390a300 xc1ab3a70 1 xc1ab3a70 1} {x42b40000 x4385e959 xc1ad9a10 1 xc1ad9a10 1} {x42b60000 x4375df7c xc1b01920 1 xc1b01920 1} {x42b80000 x435fcc6a xc1ad4298 1 xc1ad4298 1} {x42ba0000 x434a8ed6 xc1a5893c 1 xc1a5893c 1} {x42bc0000 x43366a1b xc19ca73c 1 xc19ca73c 1} {x42be0000 x43236507 xc1918b4c 1 xc1918b4c 1} {x42c00000 x43120748 xc185b2dc 1 xc185b2dc 1} {x42c20000 x4301f850 xc1752010 1 xc1752010 1} {x42c40000 x42e6c68c xc16a09f4 1 xc16a09f4 1} {x42c60000 x42c96e23 xc16a8e1c 1 xc16a8e1c 1} {x42c80000 x42ac2305 xc16d5c58 1 xc16d5c58 1} {x42ca0000 x428e170d xc16efba8 1 xc16efba8 1} {x42cc0000 x4260c836 xc16908a4 1 xc16908a4 1} {x42ce0000 x4227a9c8 xc15da054 1 xc15da054 1} {x42d00000 x41e3f018 xc1501932 1 xc1501932 1} {x42d20000 x417e74bb xc13e314c 1 xc13e314c 1} {x42d40000 x4096fb32 xc126ee60 1 xc126ee60 1} {x42d60000 xc09ed009 xc111a137 1 xc111a137 1} {x42d80000 xc157c4d5 xc1024269 1 xc1024269 1} {x42da0000 xc1a9f66b xc0ec0f0d 1 xc0ec0f0d 1} {x42dc0000 xc1e1e9f1 xc0c63e02 1 xc0c63e02 1} {x42de0000 xc2068ab6 xc08bf5ba 1 xc08bf5ba 1} {x42e00000 xc213f267 xc015eec8 1 xc015eec8 1} {x42e20000 xc219488f xbed52100 1 xbed52100 1} {x42e40000 xc219d6a5 -} {x42e60000 xc2150833 x3fe40cf0 1 x3fe40cf0 1} {x42e80000 xc20b95d6 x402db554 1 x402db554 1} {x42ea0000 xc1fea311 x404155b8 1 x404155b8 1} {x42ec0000 xc1e6d63e x4044bc1c 1 x4044bc1c 1} {x42ee0000 xc1cd740a x404fc760 1 x404fc760 1} {x42f00000 xc1b2e466 x404160d0 1 x404160d0 1} {x42f20000 xc19d1bd6 x4038a098 1 x4038a098 1} {x42f40000 xc184bc40 x40461d96 1 x40461d96 1} {x42f60000 xc15728e1 x4064df1e 1 x4064df1e 1} {x42f80000 xc11708f1 x4084c4de 1 x4084c4de 1} {x42fa0000 xc0a4c805 x409708f1 1 x409708f1 1} {x42fc0000 0 x40a8be80 1 x40a8be80 1} {x42fe0000 x40acb4fa x40aa80f9 1 x40aa80f9 1} {x43000000 x412a80f9 x40ac2761 1 x40ac2761 1} {x43010000 x418140ef x40b70faf 1 x40b70faf 1} {x43020000 x41b0c854 x40c6c37a 1 x40c6c37a 1} {x43030000 x41e4a2ac x40d2071c 1 x40d2071c 1} {x43040000 x420ce5f1 x40d54ee4 1 x40d54ee4 1} {x43050000 x4227a50f x40d762b4 1 x40d762b4 1} {x43060000 x4242be9e x40def444 1 x40def444 1} {x43070000 x425f6220 x40eeafcc 1 x40eeafcc 1} {x43080000 x427e6a91 x40fe2e70 1 x40fe2e70 1} {x43090000 x428f76de x40fdd3dc 1 x40fdd3dc 1} {x430a0000 x429eefc4 x40ef2670 1 x40ef2670 1} {x430b0000 x42ad5bac x40e49b28 1 x40e49b28 1} {x430c0000 x42bb8329 x40ea77d8 1 x40ea77d8 1} {x430d0000 x42caaaa7 x40f55610 1 x40f55610 1} {x430e0000 x42da2deb x40f77428 1 x40f77428 1} {x430f0000 x42e9992c x40f258b8 1 x40f258b8 1} {x43100000 x42f87902 x40ed0120 1 x40ed0120 1} {x43110000 x43039ca8 x40e4aa20 1 x40e4aa20 1} {x43120000 x430a8723 x40d4e550 1 x40d4e550 1} {x43130000 x4310eafd x40c0d260 1 x40c0d260 1} {x43140000 x43169449 x40ab8170 1 x40ab8170 1} {x43150000 x431ba314 x40794ec0 1 x40794ec0 1} {x43160000 x431e5ebf x4009b8c0 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke51 262656 bezier {cc {f 8224} {p {0 0 1} {x440877df x445e6540 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke52 262656 bezier {cc {f 8224} {p {0 0 1} {x440877df x445e6540 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3ac9202 0 1 x40929bb0 1} {x42580000 xc3aa0f17 x40bcf8e0 1 x40bcf8e0 1} {x425c0000 xc3a6aa3b x40d90aa0 1 x40d90aa0 1} {x42600000 xc3a346c2 x40e0ca60 1 x40e0ca60 1} {x42640000 xc39fa3e8 x40e445c0 1 x40e445c0 1} {x42680000 xc39c2494 x40e10300 1 x40e10300 1} {x426c0000 xc3989bd0 x40e27b20 1 x40e27b20 1} {x42700000 xc39510bb x40ff6120 1 x40ff6120 1} {x42740000 xc390a0c7 x410ed460 1 x410ed460 1} {x42780000 xc38c2375 x4108d370 1 x4108d370 1} {x427c0000 xc3881390 x410f0280 1 x410f0280 1} {x42800000 xc383334d x41163150 1 x41163150 1} {x42820000 xc37d60f6 x410618e0 1 x410618e0 1} {x42840000 xc375a37e x40f44a30 1 x40f44a30 1} {x42860000 xc36e1c53 x40cc4d70 1 x40cc4d70 1} {x42880000 xc368dea7 x40d49860 1 x40d49860 1} {x428a0000 xc360d2cd x40be4ac0 1 x40be4ac0 1} {x428c0000 xc35cf9fb x4075afa0 1 x4075afa0 1} {x428e0000 xc3592550 x40829af0 1 x40829af0 1} {x42900000 xc354d04c x408ae540 1 x408ae540 1} {x42920000 xc35076fc x404d8d60 1 x404d8d60 1} {x42940000 xc34e63e1 x40068cc0 1 x40068cc0 1} {x42960000 xc34c4296 x404a41e0 1 x404a41e0 1} {x42980000 xc34811d2 x408d9680 1 x408d9680 1} {x429a0000 xc343692e x40842f10 1 x40842f10 1} {x429c0000 xc33fcee1 x404311e0 1 x404311e0 1} {x429e0000 xc33d509f x40237000 1 x40237000 1} {x42a00000 xc33ab361 x403e3bc0 1 x403e3bc0 1} {x42a20000 xc3375ec1 x405d2aa0 1 x405d2aa0 1} {x42a40000 xc333ca0c x4069eee0 1 x4069eee0 1} {x42a60000 xc3300f4a x406b6180 1 x406b6180 1} {x42a80000 xc32c6f00 x407088e0 1 x407088e0 1} {x42aa0000 xc3288b03 x4055f720 1 x4055f720 1} {x42ac0000 xc325bf47 x400887e0 1 x400887e0 1} {x42ae0000 xc32446c4 x3f9a8c00 1 x3f9a8c00 1} {x42b00000 xc3235517 x3f230700 1 x3f230700 1} {x42b20000 xc32300b6 -} {x42b40000 xc3230891 -} {x42b60000 xc322c351 x3e94ed00 1 x3e94ed00 1} {x42b80000 xc32273a4 -} {x42ba0000 xc322b141 xbe824000 1 xbe824000 1} {x42bc0000 xc322f5e4 -} {x42be0000 xc322e474 -} {x42c00000 xc322ea28 -} {x42c20000 xc322c082 x3ef9e400 1 x3ef9e400 1} {x42c40000 xc31f9d34 x4047a760 1 x4047a760 1} {x42c60000 xc31c8347 x40577b00 1 x40577b00 1} {x42c80000 xc318e15c x406ba600 1 x406ba600 1} {x42ca0000 xc3152617 x40763140 1 x40763140 1} {x42cc0000 xc3112fd2 x407ef040 1 x407ef040 1} {x42ce0000 xc30d2e95 x4079a840 1 x4079a840 1} {x42d00000 xc3096290 x406de1a0 1 x406de1a0 1} {x42d20000 xc305bf88 x4061fd60 1 x4061fd60 1} {x42d40000 xc30252a5 x4062b910 1 x4062b910 1} {x42d60000 xc2fd537f x40681440 1 x40681440 1} {x42d80000 xc2f62406 x4068ebd0 1 x4068ebd0 1} {x42da0000 xc2eec4c2 x4077ac80 1 x4077ac80 1} {x42dc0000 xc2e6a93e x408bdca8 1 x408bdca8 1} {x42de0000 xc2dd492d x4096f0a8 1 x4096f0a8 1} {x42e00000 xc2d3cb29 x409b7478 1 x409b7478 1} {x42e20000 xc2c9da9e x40a5be98 1 x40a5be98 1} {x42e40000 xc2bf1356 x40abf4a0 1 x40abf4a0 1} {x42e60000 xc2b45c0a x40b1d310 1 x40b1d310 1} {x42e80000 xc2a8d8f4 x40bfe690 1 x40bfe690 1} {x42ea0000 xc29c5f38 x40ce5100 1 x40ce5100 1} {x42ec0000 xc28f0ed4 x40e3447c 1 x40e3447c 1} {x42ee0000 xc27fed51 x40f7a818 1 x40f7a818 1} {x42f00000 xc26033a2 x41069c1c 1 x41069c1c 1} {x42f20000 xc23c9f43 x411011b0 1 x411011b0 1} {x42f40000 xc2182aca x411806c2 1 x411806c2 1} {x42f60000 xc1e137c4 x4118f89f 1 x4118f89f 1} {x42f80000 xc1975cf5 x41166717 1 x41166717 1} {x42fa0000 xc115a15a x41175cf5 1 x41175cf5 1} {x42fc0000 0 x41174878 1 x41174878 1} {x42fe0000 x4118ef97 x4117aebe 1 x4117aebe 1} {x43000000 x4197aebe x411366a0 1 x411366a0 1} {x43010000 x41dfde6b x410dfbd4 1 x410dfbd4 1} {x43020000 x4212d549 x4107a385 1 x4107a385 1} {x43030000 x4233c0f8 x40fcd68c 1 x40fcd68c 1} {x43040000 x42520aec x40e74860 1 x40e74860 1} {x43050000 x426d9310 x40cf6f10 1 x40cf6f10 1} {x43060000 x4282f358 x40ba1f20 1 x40ba1f20 1} {x43070000 x428e0d6c x40ab26b0 1 x40ab26b0 1} {x43080000 x4298582e x409bb970 1 x409bb970 1} {x43090000 x42a1849a x408eb170 1 x408eb170 1} {x430a0000 x42aa2e5c x40869aa8 1 x40869aa8 1} {x430b0000 x42b257ef x407e21c0 1 x407e21c0 1} {x430c0000 x42ba1078 x40704480 1 x40704480 1} {x430d0000 x42c15c37 x406cf200 1 x406cf200 1} {x430e0000 x42c8df98 x40783570 1 x40783570 1} {x430f0000 x42d0df8e x40831f80 1 x40831f80 1} {x43100000 x42d94388 x40872b78 1 x40872b78 1} {x43110000 x42e1c4fd x40861bf8 1 x40861bf8 1} {x43120000 x42ea0707 x4080d0b8 1 x4080d0b8 1} {x43130000 x42f1df14 x4068a530 1 x4068a530 1} {x43140000 x42f8915a x4039e0c0 1 x4039e0c0 1} {x43150000 x42fd7d20 x3ffb8440 1 x3ffb8440 1} {x43160000 x430036be x3f9c6060 1 0 1}} {{x42540000 x4485e1b1 0 1 xc153f200 1} {x42580000 x448426eb xc1704500 1 xc1704500 1} {x425c0000 x4482209d xc1839320 1 xc1839320 1} {x42600000 x44800a52 xc184a4a0 1 xc184a4a0 1} {x42640000 x447bf6f0 xc1836370 1 xc1836370 1} {x42680000 x4477de6d xc1853470 1 xc1853470 1} {x426c0000 x4473a3a9 xc18bbe60 1 xc18bbe60 1} {x42700000 x446f2287 xc1975b20 1 xc1975b20 1} {x42740000 x446a2df7 xc1a82df0 1 xc1a82df0 1} {x42780000 x44649fa8 xc1b96120 1 xc1b96120 1} {x427c0000 x445e97e5 xc1c7cba0 1 xc1c7cba0 1} {x42800000 x445822ee xc1d05be0 1 xc1d05be0 1} {x42820000 x44519227 xc1cffeb0 1 xc1cffeb0 1} {x42840000 x444b2303 xc1ce27e0 1 xc1ce27e0 1} {x42860000 x4444afa9 xc1d05c10 1 xc1d05c10 1} {x42880000 x443e1d42 xc1d2be60 1 xc1d2be60 1} {x428a0000 x443783c3 xc1ca0ae0 1 xc1ca0ae0 1} {x428c0000 x44317c94 xc1b97a80 1 xc1b97a80 1} {x428e0000 x442bec1b xc1b74520 1 xc1b74520 1} {x42900000 x44260842 xc1c11d00 1 xc1c11d00 1} {x42920000 x441fda4b xc1ca93e0 1 xc1ca93e0 1} {x42940000 x44195f04 xc1cc5760 1 xc1cc5760 1} {x42960000 x441314d5 xc1c794c0 1 xc1c794c0 1} {x42980000 x440ce5b8 xc1bd3540 1 xc1bd3540 1} {x429a0000 x44074181 xc1b37460 1 xc1b37460 1} {x429c0000 x4401ae72 xc1b31828 1 xc1b31828 1} {x429e0000 x43f81ffd xc1b007e8 1 xc1b007e8 1} {x42a00000 x43ed5be7 xc1addf90 1 xc1addf90 1} {x42a20000 x43e2640b xc1afafe8 1 xc1afafe8 1} {x42a40000 x43d765ea xc1b22e10 1 xc1b22e10 1} {x42a60000 x43cc1e49 xc1b11258 1 xc1b11258 1} {x42a80000 x43c1439f xc1ac5418 1 xc1ac5418 1} {x42aa0000 x43b693c6 xc1ae60d8 1 xc1ae60d8 1} {x42ac0000 x43ab7784 xc1abf6b0 1 xc1abf6b0 1} {x42ae0000 x43a114f0 xc1ac6070 1 xc1ac6070 1} {x42b00000 x4395eb76 xc1b09098 1 xc1b09098 1} {x42b20000 x438b02dd xc1af1658 1 xc1af1658 1} {x42b40000 x438008ab xc1b1b708 1 xc1b1b708 1} {x42b60000 x436997f8 xc1b204b4 1 xc1b204b4 1} {x42b80000 x43539029 xc1acec6c 1 xc1acec6c 1} {x42ba0000 x433e5cdd xc1a4e49c 1 xc1a4e49c 1} {x42bc0000 x432a5702 xc19a51f8 1 xc19a51f8 1} {x42be0000 x4317c85f xc18f9134 1 xc18f9134 1} {x42c00000 x430672b5 xc1862082 1 xc1862082 1} {x42c20000 x42ec807d xc1791510 1 xc1791510 1} {x42c40000 x42cea026 xc16b838c 1 xc16b838c 1} {x42c60000 x42b19f9a xc16955ac 1 xc16955ac 1} {x42c80000 x42944abb xc16c947e 1 xc16c947e 1} {x42ca0000 x426cf4f5 xc16d2800 1 xc16d2800 1} {x42cc0000 x42320176 xc166fb66 1 xc166fb66 1} {x42ce0000 x41f2ee84 xc15dc110 1 xc15dc110 1} {x42d00000 x418641dc xc15092de 1 xc15092de 1} {x42d20000 x40896e98 xc13f180b 1 xc13f180b 1} {x42d40000 xc0e358bc xc12ab793 1 xc12ab793 1} {x42d60000 xc1885bed xc1118a7d 1 xc1118a7d 1} {x42d80000 xc1ca60ac xc0f6e052 1 xc0f6e052 1} {x42da0000 xc201e60b xc0db3bb4 1 xc0db3bb4 1} {x42dc0000 xc21bff43 xc0bc41b8 1 xc0bc41b8 1} {x42de0000 xc230f679 xc07fa620 1 xc07fa620 1} {x42e00000 xc23bf407 xbfec1c20 1 xbfec1c20 1} {x42e20000 xc23fb83b -} {x42e40000 xc23df9bc x3f935e70 1 x3f935e70 1} {x42e60000 xc2368254 x401f99c8 1 x401f99c8 1} {x42e80000 xc22a0683 x405bb408 1 x405bb408 1} {x42ea0000 xc21b0bd3 x406ea428 1 x406ea428 1} {x42ec0000 xc20c31fe x4073461c 1 x4073461c 1} {x42ee0000 xc1f9461f x407f3164 1 x407f3164 1} {x42f00000 xc1d897a3 x4074796c 1 x4074796c 1} {x42f20000 xc1bc27c4 x406c85e0 1 x406c85e0 1} {x42f40000 xc19d762b x407940c6 1 x407940c6 1} {x42f60000 xc17baf25 x4089794b 1 x4089794b 1} {x42f80000 xc131730b x409e57bb 1 x409e57bb 1} {x42fa0000 xc0baaed4 x40b1730b 1 x40b1730b 1} {x42fc0000 0 x40c1a1d8 1 x40c1a1d8 1} {x42fe0000 x40c894db x40c322b9 1 x40c322b9 1} {x43000000 x414322b9 x40c33db0 1 x40c33db0 1} {x43010000 x4193c40f x40d04659 1 x40d04659 1} {x43020000 x41c9b489 x40dc0aee 1 x40dc0aee 1} {x43030000 x4200e4c3 x40e2b4da 1 x40e2b4da 1} {x43040000 x421d877b x40e87da4 1 x40e87da4 1} {x43050000 x423b042c x40ee4e70 1 x40ee4e70 1} {x43060000 x42591b17 x40f74df4 1 x40f74df4 1} {x43070000 x4278d7a9 x410341ae 1 x410341ae 1} {x43080000 x428d5df7 x410a1f8a 1 x410a1f8a 1} {x43090000 x429ef3b7 x410aab98 1 x410aab98 1} {x430a0000 x42b008dd x41052068 1 x41052068 1} {x430b0000 x42c03bd1 x40ffd988 1 x40ffd988 1} {x430c0000 x42d0040e x41026ca4 1 x41026ca4 1} {x430d0000 x42e0d6fa x4107ac94 1 x4107ac94 1} {x430e0000 x42f1ef33 x4106ba48 1 x4106ba48 1} {x430f0000 x430142c6 x41026b54 1 x41026b54 1} {x43100000 x43094504 x40ffada0 1 x40ffada0 1} {x43110000 x43113da0 x40f6af00 1 x40f6af00 1} {x43120000 x4318aff4 x40e66490 1 x40e66490 1} {x43130000 x431fa3e9 x40d51bb0 1 x40d51bb0 1} {x43140000 x432601af x40c04b50 1 x40c04b50 1} {x43150000 x432ba89e x408e8820 1 x408e8820 1} {x43160000 x432eea31 x402a0f00 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke53 262656 bezier {cc {f 8224} {p {0 0 1} {x44565ccd x43e318d5 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke54 262656 bezier {cc {f 8224} {p {0 0 1} {x44565ccd x43e318d5 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3c6d3af 0 1 x40cb9d60 1} {x42580000 xc3c38238 x40e5de80 1 x40e5de80 1} {x425c0000 xc3bfa4bb x4105f2c0 1 x4105f2c0 1} {x42600000 xc3bb230c x411f2d50 1 x411f2d50 1} {x42640000 xc3b5b1e6 x412ea8c0 1 x412ea8c0 1} {x42680000 xc3b03880 x412c0320 1 x412c0320 1} {x426c0000 xc3aaf1b4 x41231eb0 1 x41231eb0 1} {x42700000 xc3a60695 x412579d0 1 x412579d0 1} {x42740000 xc3a09a17 x4126e870 1 x4126e870 1} {x42780000 xc39b980e x4119be20 1 x4119be20 1} {x427c0000 xc396fe35 x411ed700 1 x411ed700 1} {x42800000 xc391aa9e x4123bbb0 1 x4123bbb0 1} {x42820000 xc38cc27a x410f6d00 1 x410f6d00 1} {x42840000 xc388b3ce x40f7ba40 1 x40f7ba40 1} {x42860000 xc38504a8 x40f61740 1 x40f61740 1} {x42880000 xc3810314 x410239d8 1 x410239d8 1} {x428a0000 xc379c215 x40fb9440 1 x40fb9440 1} {x428c0000 xc3724ce4 x40e56920 1 x40e56920 1} {x428e0000 xc36b6b83 x40e25cd0 1 x40e25cd0 1} {x42900000 xc3642717 x40eff490 1 x40eff490 1} {x42920000 xc35c6c3a x40e4ba20 1 x40e4ba20 1} {x42940000 xc355db75 x40c0cb30 1 x40c0cb30 1} {x42960000 xc3505f87 x40a497a0 1 x40a497a0 1} {x42980000 xc34b91fb x40956430 1 x40956430 1} {x429a0000 xc3470944 x408917d0 1 x408917d0 1} {x429c0000 xc343007e x407052e0 1 x407052e0 1} {x429e0000 xc33f86ad x40643a80 1 x40643a80 1} {x42a00000 xc33bdeaa x407bd9e0 1 x407bd9e0 1} {x42a20000 xc337a7de x4092b9a0 1 x4092b9a0 1} {x42a40000 xc332b310 x40b20ae0 1 x40b20ae0 1} {x42a60000 xc32c8730 x40ae2ef0 1 x40ae2ef0 1} {x42a80000 xc327d021 x4098b700 1 x4098b700 1} {x42aa0000 xc322fbc0 x409391f0 1 x409391f0 1} {x42ac0000 xc31e9702 x4077eaa0 1 x4077eaa0 1} {x42ae0000 xc31b3c6b x403da840 1 x403da840 1} {x42b00000 xc318a9c0 x40085020 1 x40085020 1} {x42b20000 xc316f9ea x3fc839c0 1 x3fc839c0 1} {x42b40000 xc31588d9 x3fc36a00 1 x3fc36a00 1} {x42b60000 xc313ec42 x3fce78c0 1 x3fce78c0 1} {x42b80000 xc3124ef6 x3fc96240 1 x3fc96240 1} {x42ba0000 xc310c6b9 x3fbd0300 1 x3fbd0300 1} {x42bc0000 xc30f5aea x3fc064c0 1 x3fc064c0 1} {x42be0000 xc30dc526 x3fc513c0 1 x3fc513c0 1} {x42c00000 xc30c469b x3fbe3ac0 1 x3fbe3ac0 1} {x42c20000 xc30acc3b x40365980 1 x40365980 1} {x42c40000 xc30693cf x408a4aa0 1 x408a4aa0 1} {x42c60000 xc3022791 x40921ad8 1 x40921ad8 1} {x42c80000 xc2fae443 x4095a2c8 1 x4095a2c8 1} {x42ca0000 xc2f19ac9 x4095ad90 1 x4095ad90 1} {x42cc0000 xc2e82e91 x4098ca58 1 x4098ca58 1} {x42ce0000 xc2de817e x409271c8 1 x409271c8 1} {x42d00000 xc2d5e058 x408766a8 1 x408766a8 1} {x42d20000 xc2cd94a9 x4078f4b0 1 x4078f4b0 1} {x42d40000 xc2c6510d x40663400 1 x40663400 1} {x42d60000 xc2bf3169 x405c2a40 1 x405c2a40 1} {x42d80000 xc2b88e69 x404f8230 1 x404f8230 1} {x42da0000 xc2b23946 x404dbba0 1 x404dbba0 1} {x42dc0000 xc2abb2af x40575550 1 x40575550 1} {x42de0000 xc2a4c3f1 x4062a3e0 1 x4062a3e0 1} {x42e00000 xc29d8871 x406b89a0 1 x406b89a0 1} {x42e20000 xc2960b57 x40715b00 1 x40715b00 1} {x42e40000 xc28e72c1 x40764990 1 x40764990 1} {x42e60000 xc286a6be x407cada8 1 x407cada8 1} {x42e80000 xc27d4fcd x4085b5f8 1 x4085b5f8 1} {x42ea0000 xc26bdffe x40933248 1 x40933248 1} {x42ec0000 xc258833b x40a6ce28 1 x40a6ce28 1} {x42ee0000 xc2422c74 x40b77a60 1 x40b77a60 1} {x42f00000 xc22aa4a3 x40c8bd48 1 x40c8bd48 1} {x42f20000 xc20ffd22 x40dabeee 1 x40dabeee 1} {x42f40000 xc1e7e9cf x40e65460 1 x40e65460 1} {x42f60000 xc1acd014 x40e9919b 1 x40e9919b 1} {x42f80000 xc1664203 x40e77682 1 x40e77682 1} {x42fa0000 xc0e4534c x40e64203 1 x40e64203 1} {x42fc0000 0 x40e7b270 1 x40e7b270 1} {x42fe0000 x40eb1194 x40ea23e4 1 x40ea23e4 1} {x43000000 x416a23e4 x40e5c87c 1 x40e5c87c 1} {x43010000 x41ada8a3 x40dde706 1 x40dde706 1} {x43020000 x41e40575 x40d374da 1 x40d374da 1} {x43030000 x420bb188 x40c7367e 1 x40c7367e 1} {x43040000 x4223d05a x40b5bda8 1 x40b5bda8 1} {x43050000 x423920f2 x40aa4234 1 x40aa4234 1} {x43060000 x424e60e7 x40a41c24 1 x40a41c24 1} {x43070000 x426227fb x408830e0 1 x408830e0 1} {x43080000 x42706d1f x405a8e50 1 x405a8e50 1} {x43090000 x427d79c5 x40489538 1 x40489538 1} {x430a0000 x4284bfe3 x4035a478 1 x4035a478 1} {x430b0000 x428a172a x402303e0 1 x402303e0 1} {x430c0000 x428ef021 x4016a3b0 1 x4016a3b0 1} {x430d0000 x42938165 x4010f5f0 1 x4010f5f0 1} {x430e0000 x4297ff80 x401966c0 1 x401966c0 1} {x430f0000 x429d17d1 x402840a0 1 x402840a0 1} {x43100000 x42a2838a x4030e0e0 1 x4030e0e0 1} {x43110000 x42a825df x40322210 1 x40322210 1} {x43120000 x42ada5ab x402a66d0 1 x402a66d0 1} {x43130000 x42b2cc4c x4013d850 1 x4013d850 1} {x43140000 x42b6e330 x3fc811a0 1 x3fc811a0 1} {x43150000 x42b90cd9 x3f05dd00 1 x3f05dd00 1} {x43160000 x42b96617 -}} {{x42540000 x44880ef5 0 1 xc15d9de0 1} {x42580000 x44864238 xc177dfc0 1 xc177dfc0 1} {x425c0000 x44842f76 xc186e1e0 1 xc186e1e0 1} {x42600000 x44820b29 xc1880f00 1 xc1880f00 1} {x42640000 x447fddfc xc18483f0 1 xc18483f0 1} {x42680000 x447bce13 xc1874380 1 xc1874380 1} {x426c0000 x447769c4 xc18a5f30 1 xc18a5f30 1} {x42700000 x44732820 xc18f3a30 1 xc18f3a30 1} {x42740000 x446e7621 xc1a2cee0 1 xc1a2cee0 1} {x42780000 x4468fb32 xc1b3de30 1 xc1b3de30 1} {x427c0000 x4463383e xc1c26820 1 xc1c26820 1} {x42800000 x445cd4b0 xc1cb4e70 1 xc1cb4e70 1} {x42820000 x44568357 xc1c97610 1 xc1c97610 1} {x42840000 x44503d4f xc1c93640 1 xc1c93640 1} {x42860000 x4449eff3 xc1cf39f0 1 xc1cf39f0 1} {x42880000 x444349b0 xc1d121e0 1 xc1d121e0 1} {x428a0000 x443cddd5 xc1ce6160 1 xc1ce6160 1} {x428c0000 x4436639a xc1d2a930 1 xc1d2a930 1} {x428e0000 x442fb342 xc1d87440 1 xc1d87440 1} {x42900000 x4428dc56 xc1df6770 1 xc1df6770 1} {x42920000 x4421bccb xc1dc5e00 1 xc1dc5e00 1} {x42940000 x441b1676 xc1d0eaa0 1 xc1d0eaa0 1} {x42960000 x4414ae21 xc1c89090 1 xc1c89090 1} {x42980000 x440e8d6d xc1bd0e40 1 xc1bd0e40 1} {x429a0000 x4408dd3d xc1b23c30 1 xc1b23c30 1} {x429c0000 x440369aa xc1ac2e28 1 xc1ac2e28 1} {x429e0000 x43fc34b5 xc1a9ce20 1 xc1a9ce20 1} {x42a00000 x43f19990 xc1aa4e70 1 xc1aa4e70 1} {x42a20000 x43e6eae7 xc1a80bc0 1 xc1a80bc0 1} {x42a40000 x43dc9818 xc19dbc00 1 xc19dbc00 1} {x42a60000 x43d33367 xc19f00b0 1 xc19f00b0 1} {x42a80000 x43c8b802 xc1ac16e8 1 xc1ac16e8 1} {x42aa0000 x43bdb08a xc1ad4620 1 xc1ad4620 1} {x42ac0000 x43b30f3e xc1a81820 1 xc1a81820 1} {x42ae0000 x43a8ad86 xc1a3dee0 1 xc1a3dee0 1} {x42b00000 x439e9362 xc1a36088 1 xc1a36088 1} {x42b20000 x43944175 xc1a64848 1 xc1a64848 1} {x42b40000 x4389ca59 xc1a8b1a0 1 xc1a8b1a0 1} {x42b60000 x437e5682 xc1aa28d4 1 xc1aa28d4 1} {x42b80000 x43690a7d xc1a7af50 1 xc1a7af50 1} {x42ba0000 x43546aae xc1a08c70 1 xc1a08c70 1} {x42bc0000 x4340e761 xc198357c 1 xc198357c 1} {x42be0000 x432e5d4f xc18ed3f0 1 xc18ed3f0 1} {x42c00000 x431d3265 xc1842050 1 xc1842050 1} {x42c20000 x430d553b xc1712540 1 xc1712540 1} {x42c40000 x42fe1b7a xc1602130 1 xc1602130 1} {x42c60000 x42e2a22a xc15be280 1 xc15be280 1} {x42c80000 x42c722da xc15ca2c8 1 xc15ca2c8 1} {x42ca0000 x42ab7978 xc158f48c 1 xc158f48c 1} {x42cc0000 x4290e5b7 xc1402588 1 xc1402588 1} {x42ce0000 x4276e02c xc13196a0 1 xc13196a0 1} {x42d00000 x4249001e xc13d055c 1 xc13d055c 1} {x42d20000 x42185d7e xc1373bf1 1 xc1373bf1 1} {x42d40000 x41dac44b xc122e0b7 1 xc122e0b7 1} {x42d60000 x418dda45 xc1105cda 1 xc1105cda 1} {x42d80000 x4114cee3 xc10181fb 1 xc10181fb 1} {x42da0000 x3fc584a4 xc0eeba6a 1 xc0eeba6a 1} {x42dc0000 xc0b3d70e xc0d3e528 1 xc0d3e528 1} {x42de0000 xc13b3494 xc0a54551 1 xc0a54551 1} {x42e00000 xc17f30d8 xc05a092c 1 xc05a092c 1} {x42e20000 xc1941c95 xbff9dad8 1 xbff9dad8 1} {x42e40000 xc19ed3c7 xbf580360 1 xbf580360 1} {x42e60000 xc1a19ccb -} {x42e80000 xc199b852 x3fa399c8 1 x3fa399c8 1} {x42ea0000 xc18d2992 x3fcacd88 1 x3fcacd88 1} {x42ec0000 xc1805ea1 x3fd0a754 1 x3fd0a754 1} {x42ee0000 xc166294f x3fe61058 1 x3fe61058 1} {x42f00000 xc147392c x3fd1739c 1 x3fd1739c 1} {x42f20000 xc131cc68 x3fb2cee8 1 x3fb2cee8 1} {x42f40000 xc11a8572 x3fc395a4 1 x3fc395a4 1} {x42f60000 xc100e6ff x3ff6185a 1 x3ff6185a 1} {x42f80000 xc0b9feb7 x4016c266 1 x4016c266 1} {x42fa0000 xc0561730 x4039feb7 1 x4039feb7 1} {x42fc0000 0 x4063f206 1 x4063f206 1} {x42fe0000 x4071ccdd x406be05e 1 x406be05e 1} {x43000000 x40ebe05e x406ac366 1 x406ac366 1} {x43010000 x4131d4ea x407eec82 1 x407eec82 1} {x43020000 x41756670 x408cbd26 1 x408cbd26 1} {x43030000 x419f4908 x4097ad04 1 x4097ad04 1} {x43040000 x41c689ba x40a04724 1 x40a04724 1} {x43050000 x41ef6c9a x40c39f2c 1 x40c39f2c 1} {x43060000 x42142ca8 x4100b2cc 1 x4100b2cc 1} {x43070000 x42380fb3 x40f4a744 1 x40f4a744 1} {x43080000 x42515679 x40cecae0 1 x40cecae0 1} {x43090000 x426bc26b x40d26204 1 x40d26204 1} {x430a0000 x4282f77d x40cc4834 1 x40cc4834 1} {x430b0000 x428f6a3c x40c5a5d0 1 x40c5a5d0 1} {x430c0000 x429bac37 x40c7ad78 1 x40c7ad78 1} {x430d0000 x42a85feb x40d34bf8 1 x40d34bf8 1} {x430e0000 x42b615b6 x40d90958 1 x40d90958 1} {x430f0000 x42c38116 x40d476a8 1 x40d476a8 1} {x43100000 x42d0a48b x40d01558 1 x40d01558 1} {x43110000 x42dd83c1 x40c9cc30 1 x40c9cc30 1} {x43120000 x42e9de11 x40be20e8 1 x40be20e8 1} {x43130000 x42f547de x40acd5e8 1 x40acd5e8 1} {x43140000 x42ff78ce x4098dd70 1 x4098dd70 1} {x43150000 x430431c6 x4059e6c0 1 x4059e6c0 1} {x43160000 x43068b9d x3fe97a80 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke55 262656 bezier {cc {f 8224} {p {0 0 1} {x44e540bc x44695bd7 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke56 262656 bezier {cc {f 8224} {p {0 0 1} {x44e540bc x44695bd7 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc2fbc8bd 0 1 x408fa21c 1} {x42580000 xc2f37fdb x405ccc50 1 x405ccc50 1} {x425c0000 xc2edfbf8 x403d4df0 1 x403d4df0 1} {x42600000 xc2e7aafc x408ec2b8 1 x408ec2b8 1} {x42640000 xc2dc23a1 x40d18dd8 1 x40d18dd8 1} {x42680000 xc2cd7941 x40df0a98 1 x40df0a98 1} {x426c0000 xc2c0424e x40a79798 1 x40a79798 1} {x42700000 xc2b8864e x4082a6f8 1 x4082a6f8 1} {x42740000 xc2afed6f x409e1e40 1 x409e1e40 1} {x42780000 xc2a4c286 x40baa9d0 1 x40baa9d0 1} {x427c0000 xc2989835 x40c18e60 1 x40c18e60 1} {x42800000 xc28c90ba x40c1fd80 1 x40c1fd80 1} {x42820000 xc2805885 x40b01830 1 x40b01830 1} {x42840000 xc26d1b68 -} {x42860000 xc26d1d4a xbbb4c000 1 xbbb4c000 1} {x42880000 xc26ed720 -} {x428a0000 xc2645a39 -} {x428c0000 xc267d662 -} {x428e0000 xc25475a6 x409f0660 1 x409f0660 1} {x42900000 xc24014ca x40a145d4 1 x40a145d4 1} {x42920000 xc22c2431 x409bf7fc 1 x409bf7fc 1} {x42940000 xc21916cb x4083be78 1 x4083be78 1} {x42960000 xc20b3493 x405886ac 1 x405886ac 1} {x42980000 xc1fc0beb x40602320 1 x40602320 1} {x429a0000 xc1de605e x405de894 1 x405de894 1} {x429c0000 xc1c491c6 x3fe2bc30 1 x3fe2bc30 1} {x429e0000 xc1bfd885 x3f512bc0 1 x3f512bc0 1} {x42a00000 xc1b77f0a x3f81a560 1 x3f81a560 1} {x42a20000 xc1afa3d9 x3f8f2b38 1 x3f8f2b38 1} {x42a40000 xc1a599a3 x3f91ef60 1 x3f91ef60 1} {x42a60000 xc19d65ed x3f1e0420 1 x3f1e0420 1} {x42a80000 xc19bb961 x3e34f340 1 x3e34f340 1} {x42aa0000 xc19a9220 -} {x42ac0000 xc19b8f33 xbebdce40 1 xbebdce40 1} {x42ae0000 xc1a619cc xbfdc22d8 1 xbfdc22d8 1} {x42b00000 xc1b7138e xc019a4c8 1 xc019a4c8 1} {x42b20000 xc1cc82fe xc0219440 1 xc0219440 1} {x42b40000 xc1df789e xc02437e4 1 xc02437e4 1} {x42b60000 xc1f590f7 xc026d4c8 1 xc026d4c8 1} {x42b80000 xc20496e8 xc02aefbc 1 xc02aefbc 1} {x42ba0000 xc2102673 xc0320818 1 xc0320818 1} {x42bc0000 xc21ad7eb xc03234e8 1 xc03234e8 1} {x42be0000 xc2266d10 xc035bcb0 1 xc035bcb0 1} {x42c00000 xc2318f81 xc03baac8 1 xc03baac8 1} {x42c20000 xc23de269 xbfd54380 1 xbfd54380 1} {x42c40000 xc2401b1d xbf0fa760 1 xbf0fa760 1} {x42c60000 xc2425fa4 xbee41600 1 xbee41600 1} {x42c80000 xc243ab75 xbeab5280 1 xbeab5280 1} {x42ca0000 xc2450cee xbea619c0 1 xbea619c0 1} {x42cc0000 xc24643dc xbead0bc0 1 xbead0bc0 1} {x42ce0000 xc247c11d xbe98c5c0 1 xbe98c5c0 1} {x42d00000 xc248a6f3 xbe96fd40 1 xbe96fd40 1} {x42d20000 xc24a1d12 xbea4cc40 1 xbea4cc40 1} {x42d40000 xc24b3a24 xbe662000 1 xbe662000 1} {x42d60000 xc24be952 -} {x42d80000 xc24b5ed1 x3e84b580 1 x3e84b580 1} {x42da0000 xc249d67c x3f33e6c0 1 x3f33e6c0 1} {x42dc0000 xc245bf9b x3f80d8c0 1 x3f80d8c0 1} {x42de0000 xc241c8f0 x3f9236e0 1 x3f9236e0 1} {x42e00000 xc23c9c2d x3fc48620 1 x3fc48620 1} {x42e20000 xc235808e x3fdb4c00 1 x3fdb4c00 1} {x42e40000 xc22ee76d x3fdf82e0 1 x3fdf82e0 1} {x42e60000 xc2278860 x400160d0 1 x400160d0 1} {x42e80000 xc21ebb53 x4009bf58 1 x4009bf58 1} {x42ea0000 xc2165075 x401d1898 1 x401d1898 1} {x42ec0000 xc20b1840 x403f2634 1 x403f2634 1} {x42ee0000 xc1fcd75d x4057dd88 1 x4057dd88 1} {x42f00000 xc1e0391e x4070b70c 1 x4070b70c 1} {x42f20000 xc1c0a99a x40915218 1 x40915218 1} {x42f40000 xc1979012 x40978389 1 x40978389 1} {x42f60000 xc169cfab x40967286 1 x40967286 1} {x42f80000 xc118ad9e x409c61de 1 x409c61de 1} {x42fa0000 xc09adb9a x4098ad9e 1 x4098ad9e 1} {x42fc0000 0 x4094425e 1 x4094425e 1} {x42fe0000 x408da921 x40939f74 1 x40939f74 1} {x43000000 x41139f74 x40934300 1 x40934300 1} {x43010000 x415a1790 x408408da 1 x408408da 1} {x43020000 x418bd427 x40748b34 1 x40748b34 1} {x43030000 x41aa2e95 x40556034 1 x40556034 1} {x43040000 x41c12c34 x4030c3d0 1 x4030c3d0 1} {x43050000 x41d65f89 x401dcd7c 1 x401dcd7c 1} {x43060000 x41e89f93 x400f7964 1 x400f7964 1} {x43070000 x41fa3de2 x3fe750e8 1 x3fe750e8 1} {x43080000 x4202c4d8 x3fc37ac0 1 x3fc37ac0 1} {x43090000 x4209569d x3fc2ce90 1 x3fc2ce90 1} {x430a0000 x420ef1c1 x3fd3cf80 1 x3fd3cf80 1} {x430b0000 x42169395 x3fd84410 1 x3fd84410 1} {x430c0000 x421c7602 x3fc682e0 1 x3fc682e0 1} {x430d0000 x4222fbc3 x3fc83830 1 x3fc83830 1} {x430e0000 x4228f985 x3fce98e0 1 x3fce98e0 1} {x430f0000 x422fe551 x3fd951a0 1 x3fd951a0 1} {x43100000 x42368e9f x3fe49b40 1 x3fe49b40 1} {x43110000 x423e2f05 x3fdad1c0 1 x3fdad1c0 1} {x43120000 x42443bbb x3fb74b90 1 x3fb74b90 1} {x43130000 x4249a3be x3f928a00 1 x3f928a00 1} {x43140000 x424d645b -} {x43150000 x424d2ccf xbe26a400 1 xbe26a400 1} {x43160000 x42476b33 xc004f180 1 0 1}} {{x42540000 x443adc62 0 1 xc117d590 1} {x42580000 x4438932d xc1073ca0 1 xc1073ca0 1} {x425c0000 x4436a27d xc0fb50c0 1 xc0fb50c0 1} {x42600000 x4434a5ea xc1214560 1 xc1214560 1} {x42640000 x44319852 xc1554440 1 xc1554440 1} {x42680000 x442dfbc8 xc16dfb80 1 xc16dfb80 1} {x426c0000 x442a2876 xc151a840 1 xc151a840 1} {x42700000 x44276e86 xc12f0620 1 xc12f0620 1} {x42740000 x4424b045 xc147d4e0 1 xc147d4e0 1} {x42780000 x44212fdf xc1656d60 1 xc1656d60 1} {x427c0000 x441d84da xc16ff980 1 xc16ff980 1} {x42800000 x4419b013 xc1799d60 1 xc1799d60 1} {x42820000 x4415b7ef xc17d4ac0 1 xc17d4ac0 1} {x42840000 x4411c5bd xc14c72e0 1 xc14c72e0 1} {x42860000 x440f5458 xc11343e0 1 xc11343e0 1} {x42880000 x440d2b9e xc12866e0 1 xc12866e0 1} {x428a0000 x440a1121 xc12c9680 1 xc12c9680 1} {x428c0000 x4407c6ea xc14f96a0 1 xc14f96a0 1} {x428e0000 x4403946c xc1899350 1 xc1899350 1} {x42900000 x43fe5b6a xc18b14f8 1 xc18b14f8 1} {x42920000 x43f5c639 xc1895720 1 xc1895720 1} {x42940000 x43ed3086 xc183e5d8 1 xc183e5d8 1} {x42960000 x43e5497e xc1763660 1 xc1763660 1} {x42980000 x43ddcd20 xc16a5660 1 xc16a5660 1} {x429a0000 x43d6a418 xc1576240 1 xc1576240 1} {x429c0000 x43d056fc xc14b0920 1 xc14b0920 1} {x429e0000 x43c9f386 xc14dd5a0 1 xc14dd5a0 1} {x42a00000 x43c379a2 xc1526260 1 xc1526260 1} {x42a20000 x43bccd60 xc165dd70 1 xc165dd70 1} {x42a40000 x43b51bcb xc17a15a0 1 xc17a15a0 1} {x42a60000 x43ad2c06 xc17f12e0 1 xc17f12e0 1} {x42a80000 x43a52a9d xc17ca990 1 xc17ca990 1} {x42aa0000 x439d616d xc1703180 1 xc1703180 1} {x42ac0000 x43962785 xc15f2400 1 xc15f2400 1} {x42ae0000 x438f6f2d xc1529480 1 xc1529480 1} {x42b00000 x4388fe3d xc1532d20 1 xc1532d20 1} {x42b20000 x43823c5b xc157f268 1 xc157f268 1} {x42b40000 x4376fe2d xc15433c0 1 xc15433c0 1} {x42b60000 x4369f23e xc156c758 1 xc156c758 1} {x42b80000 x435c2542 xc1571df0 1 xc1571df0 1} {x42ba0000 x434f0e80 xc14946a8 1 xc14946a8 1} {x42bc0000 x4342fc6d xc13fbc38 1 xc13fbc38 1} {x42be0000 x433716f9 xc12d8f08 1 xc12d8f08 1} {x42c00000 x432d4a8c xc1198408 1 xc1198408 1} {x42c20000 x4323e678 xc10cfc98 1 xc10cfc98 1} {x42c40000 x431baaf9 xc0fdf2e0 1 xc0fdf2e0 1} {x42c60000 x4314074a xc100ea70 1 xc100ea70 1} {x42c80000 x430b8dab xc1043780 1 xc1043780 1} {x42ca0000 x4303805a xc0fd1e78 1 xc0fd1e78 1} {x42cc0000 x42f77787 xc0ef9df8 1 xc0ef9df8 1} {x42ce0000 x42e90cf5 xc0e96428 1 xc0e96428 1} {x42d00000 x42da4b02 xc0e44320 1 xc0e44320 1} {x42d20000 x42cc8491 xc0d78308 1 xc0d78308 1} {x42d40000 x42bf5aa1 xc0cba4f0 1 xc0cba4f0 1} {x42d60000 x42b30ff3 xc0c3ed88 1 xc0c3ed88 1} {x42d80000 x42a6dcf0 xc0cb68a8 1 xc0cb68a8 1} {x42da0000 x4299a2de xc0d6ed48 1 xc0d6ed48 1} {x42dc0000 x428bff47 xc0d5a204 1 xc0d5a204 1} {x42de0000 x427ddd3b xc0bfbd20 1 xc0bfbd20 1} {x42e00000 x42680f46 xc0a79c7c 1 xc0a79c7c 1} {x42e20000 x4253f61c xc09b6f60 1 xc09b6f60 1} {x42e40000 x4241336e xc08e0298 1 xc08e0298 1} {x42e60000 x42307576 xc079f7a8 1 xc079f7a8 1} {x42e80000 x4221f479 xc05f4770 1 xc05f4770 1} {x42ea0000 x42148c88 xc0577690 1 xc0577690 1} {x42ec0000 x420705a7 xc05ad04c 1 xc05ad04c 1} {x42ee0000 x41f264fd xc075bc3c 1 xc075bc3c 1} {x42f00000 x41d09c3f xc08af40c 1 xc08af40c 1} {x42f20000 x41aceaf7 xc091663e 1 xc091663e 1} {x42f40000 x4187e920 xc08fad3b 1 xc08fad3b 1} {x42f60000 x414a28b3 xc08bf040 1 xc08bf040 1} {x42f80000 x4103e200 xc08a98dd 1 xc08a98dd 1} {x42fa0000 x407e3f59 xc083e200 1 xc083e200 1} {x42fc0000 0 xc06f65b7 1 xc06f65b7 1} {x42fe0000 xc0608c15 xc0623e0d 1 xc0623e0d 1} {x43000000 xc0e23e0d xc06554fa 1 xc06554fa 1} {x43010000 xc12acd82 xc055c0f5 1 xc055c0f5 1} {x43020000 xc15bff81 xc03d3b5c 1 xc03d3b5c 1} {x43030000 xc184b598 xc030ab3e 1 xc030ab3e 1} {x43040000 xc19a2a90 xc024bb38 1 xc024bb38 1} {x43050000 xc1ade466 xc01dea00 1 xc01dea00 1} {x43060000 xc1c1a510 xc01dddcc 1 xc01dddcc 1} {x43070000 xc1d55bd9 xc00f1908 1 xc00f1908 1} {x43080000 xc1e56b52 xbfddad58 1 xbfddad58 1} {x43090000 xc1f11184 xbfc77f80 1 xbfc77f80 1} {x430a0000 xc1fe5b42 xbfd1f8e0 1 xbfd1f8e0 1} {x430b0000 xc205a850 xbfea1410 1 xbfea1410 1} {x430c0000 xc20dcee2 xbff5f810 1 xbff5f810 1} {x430d0000 xc21507d1 xbfdd1700 1 xbfdd1700 1} {x430e0000 xc21ba052 xbfd6f550 1 xbfd6f550 1} {x430f0000 xc2227726 xbfdb9610 1 xbfdb9610 1} {x43100000 xc22959b3 xbfe17fb0 1 xbfe17fb0 1} {x43110000 xc2308f21 xbfd7cf30 1 xbfd7cf30 1} {x43120000 xc236d6a6 xbfc3f040 1 xbfc3f040 1} {x43130000 xc23cce25 xbfe6a990 1 xbfe6a990 1} {x43140000 xc245413f xc012c4b0 1 xc012c4b0 1} {x43150000 xc24f26bb xc053b038 1 xc053b038 1} {x43160000 xc25fb746 xc091da76 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke57 262656 bezier {cc {f 8224} {p {0 0 1} {x44c076d9 x4471ffae 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke58 262656 bezier {cc {f 8224} {p {0 0 1} {x44c076d9 x4471ffae 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3a2a4ab 0 1 x40dded90 1} {x42580000 xc39f09f4 x40f82e20 1 x40f82e20 1} {x425c0000 xc39ae33a x40e6f200 1 x40e6f200 1} {x42600000 xc397d264 x40fd5c80 1 x40fd5c80 1} {x42640000 xc392f856 x41169440 1 x41169440 1} {x42680000 xc38e6920 x410a5210 1 x410a5210 1} {x426c0000 xc38a5335 x410d4f90 1 x410d4f90 1} {x42700000 xc3859427 x41175730 1 x41175730 1} {x42740000 xc380ddc2 x410c8f20 1 x410c8f20 1} {x42780000 xc379966a x41045a60 1 x41045a60 1} {x427c0000 xc3713038 x4105ea40 1 x4105ea40 1} {x42800000 xc368d922 x41016650 1 x41016650 1} {x42820000 xc361036e x40ef1a70 1 x40ef1a70 1} {x42840000 xc359e77b x40d36220 1 x40d36220 1} {x42860000 xc353cd4c x40d7af50 1 x40d7af50 1} {x42880000 xc34c6c86 x40d917c0 1 x40d917c0 1} {x428a0000 xc3463bd0 x40d5aa80 1 x40d5aa80 1} {x428c0000 xc33f11de x40cb6170 1 x40cb6170 1} {x428e0000 xc33985b9 x40b24820 1 x40b24820 1} {x42900000 xc333ed5c x40bff3b0 1 x40bff3b0 1} {x42920000 xc32d867e x40cc6f50 1 x40cc6f50 1} {x42940000 xc3272667 x40bc8080 1 x40bc8080 1} {x42960000 xc321be76 x40a22f60 1 x40a22f60 1} {x42980000 xc31d0371 x4093d470 1 x4093d470 1} {x429a0000 xc318812f x40849950 1 x40849950 1} {x429c0000 xc314b9dc x40467740 1 x40467740 1} {x429e0000 xc3124d75 x40305120 1 x40305120 1} {x42a00000 xc30f3753 x40382880 1 x40382880 1} {x42a20000 xc30c8c31 x40508360 1 x40508360 1} {x42a40000 xc308b338 x404642c0 1 x404642c0 1} {x42a60000 xc3065a1b x402401a0 1 x402401a0 1} {x42a80000 xc303932b x4061d650 1 x4061d650 1} {x42aa0000 xc2fe96d1 x4048cc20 1 x4048cc20 1} {x42ac0000 xc2fa9994 x3fa77960 1 x3fa77960 1} {x42ae0000 xc2f95b06 -} {x42b00000 xc2f9c4e5 xbe653900 1 xbe653900 1} {x42b20000 xc2fa403f xbe50f800 1 xbe50f800 1} {x42b40000 xc2fa95dd xbe01e300 1 xbe01e300 1} {x42b60000 xc2fac222 -} {x42b80000 xc2faae13 x3df0b400 1 x3df0b400 1} {x42ba0000 xc2f9b495 x3ec36400 1 x3ec36400 1} {x42bc0000 xc2f9274b x3e350c00 1 x3e350c00 1} {x42be0000 xc2f8ff89 -} {x42c00000 xc2f959b0 xbe8e3a80 1 xbe8e3a80 1} {x42c20000 xc2fa1bfe -} {x42c40000 xc2f53294 x401dc4f0 1 x401dc4f0 1} {x42c60000 xc2f03faf x4019ec30 1 x4019ec30 1} {x42c80000 xc2eb93d1 x400ed7e0 1 x400ed7e0 1} {x42ca0000 xc2e75231 x400f8a90 1 x400f8a90 1} {x42cc0000 xc2e29b28 x4016d6c0 1 x4016d6c0 1} {x42ce0000 xc2dde4c5 x4013f6e0 1 x4013f6e0 1} {x42d00000 xc2d95bba x400da5c0 1 x400da5c0 1} {x42d20000 xc2d50a69 x3ffa2bc0 1 x3ffa2bc0 1} {x42d40000 xc2d18a5c x40005af0 1 x40005af0 1} {x42d60000 xc2cd04ba x40108000 1 x40108000 1} {x42d80000 xc2c8825c x40220b30 1 x40220b30 1} {x42da0000 xc2c2e407 x402eddd0 1 x402eddd0 1} {x42dc0000 xc2bd947f x40479f60 1 x40479f60 1} {x42de0000 xc2b66a11 x405fd610 1 x405fd610 1} {x42e00000 xc2af971e x407a4290 1 x407a4290 1} {x42e20000 xc2a6c5e8 x408a20d0 1 x408a20d0 1} {x42e40000 xc29e5304 x40938808 1 x40938808 1} {x42e60000 xc29454e7 x409b6290 1 x409b6290 1} {x42e80000 xc28ae6b2 x409e4858 1 x409e4858 1} {x42ea0000 xc2808bdc x40b2c300 1 x40b2c300 1} {x42ec0000 xc2691ca4 x40c688a8 1 x40c688a8 1} {x42ee0000 xc24f758e x40ce5554 1 x40ce5554 1} {x42f00000 xc235874f x40da7bec 1 x40da7bec 1} {x42f20000 xc218d693 x40ed3f6e 1 x40ed3f6e 1} {x42f40000 xc1f46ee7 x40f9484e 1 x40f9484e 1} {x42f60000 xc1b508ff x40fcda59 1 x40fcda59 1} {x42f80000 xc16c0375 x40ef98a1 1 x40ef98a1 1} {x42fa0000 xc0f4f2ba x40ec0375 1 x40ec0375 1} {x42fc0000 0 x40ee9eb2 1 x40ee9eb2 1} {x42fe0000 x40e84aab x40e72e56 1 x40e72e56 1} {x43000000 x41672e56 x40df20f2 1 x40df20f2 1} {x43010000 x41a9a324 x40d0689c 1 x40d0689c 1} {x43020000 x41dbcb79 x40bf947c 1 x40bf947c 1} {x43030000 x4204b6b1 x40b47812 1 x40b47812 1} {x43040000 x421b03c1 x40a7b1f0 1 x40a7b1f0 1} {x43050000 x422ea32d x408c151c 1 x408c151c 1} {x43060000 x423e0908 x4075f390 1 x4075f390 1} {x43070000 x424d619f x4070ef68 1 x4070ef68 1} {x43080000 x425c26f5 x4058a808 1 x4058a808 1} {x43090000 x426876a0 x40456480 1 x40456480 1} {x430a0000 x4274d385 x4034fe98 1 x4034fe98 1} {x430b0000 x427f1673 x4020f1c8 1 x4020f1c8 1} {x430c0000 x428478df x401555a8 1 x401555a8 1} {x430d0000 x4288e094 x401a4040 1 x401a4040 1} {x430e0000 x428e1ce3 x4024ce60 1 x4024ce60 1} {x430f0000 x42932d7a x4025a050 1 x4025a050 1} {x43100000 x429876e8 x40297170 1 x40297170 1} {x43110000 x429dc491 x401e41e0 1 x401e41e0 1} {x43120000 x42a25b06 x401d5e30 1 x401d5e30 1} {x43130000 x42a79a74 x4018da10 1 x4018da10 1} {x43140000 x42abe8a7 x40043a80 1 x40043a80 1} {x43150000 x42afde1c x3fd724e0 1 x3fd724e0 1} {x43160000 x42b2a1ce x3f9dd050 1 0 1}} {{x42540000 x445d7c48 0 1 xc1173500 1} {x42580000 x445b2a44 xc10f1900 1 xc10f1900 1} {x425c0000 x44590380 xc11272a0 1 xc11272a0 1} {x42600000 x445696af xc14a3440 1 xc14a3440 1} {x42640000 x4452b1de xc17ddc60 1 xc17ddc60 1} {x42680000 x444ea7cc xc183f310 1 xc183f310 1} {x426c0000 x444a72ad xc17bd3a0 1 xc17bd3a0 1} {x42700000 x4446c92f xc16ff780 1 xc16ff780 1} {x42740000 x4442f2f1 xc1768480 1 xc1768480 1} {x42780000 x443f150b xc17f8b00 1 xc17f8b00 1} {x427c0000 x443af699 xc18c2ff0 1 xc18c2ff0 1} {x42800000 x4436520c xc195c800 1 xc195c800 1} {x42820000 x44319a19 xc197f550 1 xc197f550 1} {x42840000 x442cd2b7 xc19c8a70 1 xc19c8a70 1} {x42860000 x4427d172 xc1a2a5f0 1 xc1a2a5f0 1} {x42880000 x4422a858 xc19ba2b0 1 xc19ba2b0 1} {x428a0000 x441e1747 xc19b47a0 1 xc19b47a0 1} {x428c0000 x4418f3de xc199f500 1 xc199f500 1} {x428e0000 x441477f7 xc192b8c0 1 xc192b8c0 1} {x42900000 x440fc852 xc19e4910 1 xc19e4910 1} {x42920000 x440a9366 xc1ab8f70 1 xc1ab8f70 1} {x42940000 x44050f5b xc1a660e0 1 xc1a660e0 1} {x42960000 x44002d58 xc197ddf8 1 xc197ddf8 1} {x42980000 x43f722f7 xc1888170 1 xc1888170 1} {x429a0000 x43ef4a82 xc177a0a0 1 xc177a0a0 1} {x429c0000 x43e7a8ed xc162e270 1 xc162e270 1} {x429e0000 x43e11c5b xc161a4a0 1 xc161a4a0 1} {x42a00000 x43d98ea3 xc17a83e0 1 xc17a83e0 1} {x42a20000 x43d1741d xc184a950 1 xc184a950 1} {x42a40000 x43c8f979 xc1861b90 1 xc1861b90 1} {x42a60000 x43c0b0ab xc1889b70 1 xc1889b70 1} {x42a80000 x43b7e60b xc1906a18 1 xc1906a18 1} {x42aa0000 x43aea368 xc18a5ad0 1 xc18a5ad0 1} {x42ac0000 x43a69ab1 xc17a4fb0 1 xc17a4fb0 1} {x42ae0000 x439efe6d xc172ef50 1 xc172ef50 1} {x42b00000 x43976bbc xc1771290 1 xc1771290 1} {x42b20000 x438f8d44 xc1822db0 1 xc1822db0 1} {x42b40000 x43872606 xc18c246c 1 xc18c246c 1} {x42b60000 x437c116d xc19172f4 1 xc19172f4 1} {x42b80000 x4369ef4f xc192a5e0 1 xc192a5e0 1} {x42ba0000 x435767f5 xc18f603c 1 xc18f603c 1} {x42bc0000 x43461740 xc182b7c8 1 xc182b7c8 1} {x42be0000 x4336ba03 xc163d780 1 xc163d780 1} {x42c00000 x43299c50 xc1457e58 1 xc1457e58 1} {x42c20000 x431e0a38 xc12fd8f0 1 xc12fd8f0 1} {x42c40000 x4313a132 xc1267ff0 1 xc1267ff0 1} {x42c60000 x43093a3a xc12fbe54 1 xc12fbe54 1} {x42c80000 x42fb52cf xc1338794 1 xc1338794 1} {x42ca0000 x42e5928f xc125920c 1 xc125920c 1} {x42cc0000 x42d1ee4c xc125a020 1 xc125a020 1} {x42ce0000 x42bc2a87 xc124fc38 1 xc124fc38 1} {x42d00000 x42a8af3e xc113922c 1 xc113922c 1} {x42d20000 x429745fc xc104c1a8 1 xc104c1a8 1} {x42d40000 x42877ed4 xc0f39ac8 1 xc0f39ac8 1} {x42d60000 x4271a546 xc0e51284 1 xc0e51284 1} {x42d80000 x4255b907 xc0df56a8 1 xc0df56a8 1} {x42da0000 x4239cf9c xc0e6ab2c 1 xc0e6ab2c 1} {x42dc0000 x421c0e3c xc0dc2f40 1 xc0dc2f40 1} {x42de0000 x4202c3cc xc0b7a670 1 xc0b7a670 1} {x42e00000 x41dc4940 xc08f78f0 1 xc08f78f0 1} {x42e20000 x41bdcb20 xc0671ae8 1 xc0671ae8 1} {x42e40000 x41a28286 xc038d0a4 1 xc038d0a4 1} {x42e60000 x418f96f7 xc00a6038 1 xc00a6038 1} {x42e80000 x417fd4f0 xbfdda170 1 xbfdda170 1} {x42ea0000 x4167c592 xbfc5b874 1 xbfc5b874 1} {x42ec0000 x414e66d3 xbfbd68f4 1 xbfbd68f4 1} {x42ee0000 x41386b55 xbfc71b0c 1 xbfc71b0c 1} {x42f00000 x411ca010 xbffb59f6 1 xbffb59f6 1} {x42f20000 x40f329af xc002dbef 1 xc002dbef 1} {x42f40000 x40b66431 xbfe6b014 1 xbfe6b014 1} {x42f60000 x407fa34a xbfce872a 1 xbfce872a 1} {x42f80000 x401e4138 xbfc73b6a 1 xbfc73b6a 1} {x42fa0000 x3f619f7e xbf9e4138 1 xbf9e4138 1} {x42fc0000 0 xbf56d226 1 xbf56d226 1} {x42fe0000 xbf4c04cf xbf41b1d4 1 xbf41b1d4 1} {x43000000 xbfc1b1d4 xbf17f53e 1 xbf17f53e 1} {x43010000 xbffdf7a5 xbeb15124 1 xbeb15124 1} {x43020000 xc00d2d33 -} {x43030000 xc0083220 x3e6f1390 1 x3e6f1390 1} {x43040000 xbfc9db93 x3f024548 1 x3f024548 1} {x43050000 xbf8e1ef8 x3e8fa4c0 1 x3e8fa4c0 1} {x43060000 xbf820933 x3e60a946 1 x3e60a946 1} {x43070000 xbf2be94d x3f0be9d4 1 x3f0be9d4 1} {x43080000 x3d9e0a15 x3f51c716 1 x3f51c716 1} {x43090000 x3f77a4df x3f837ea5 1 x3f837ea5 1} {x430a0000 x40086ef6 x3f4fdccc 1 x3f4fdccc 1} {x430b0000 x4025d79e x3e9c3b78 1 x3e9c3b78 1} {x430c0000 x402f7dd4 x3ee79510 1 x3ee79510 1} {x430d0000 x4065abb6 x3f5abda4 1 x3f5abda4 1} {x430e0000 x408e6e53 x3f68395c 1 x3f68395c 1} {x430f0000 x40ace432 x3f46f90c 1 x3f46f90c 1} {x43100000 x40c02c96 x3f4ec4ec 1 x3f4ec4ec 1} {x43110000 x40e0956d x3f8b6a2c 1 x3f8b6a2c 1} {x43120000 x4102f0d6 x3f9ce926 1 x3f9ce926 1} {x43130000 x41178500 x3f662470 1 x3f662470 1} {x43140000 x411fb564 x3ea8b050 1 x3ea8b050 1} {x43150000 x41221005 -} {x43160000 x410786e5 xc01f36c0 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke59 262656 bezier {cc {f 8224} {p {0 0 1} {x44da4bf8 x4462b75c 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke60 262656 bezier {cc {f 8224} {p {0 0 1} {x44da4bf8 x4462b75c 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc338bd3a 0 1 x4083e7e8 1} {x42580000 xc3346432 x40999330 1 x40999330 1} {x425c0000 xc32f2407 x40b1bd60 1 x40b1bd60 1} {x42600000 xc329485c x40bc7010 1 x40bc7010 1} {x42640000 xc3235d06 x40d455d0 1 x40d455d0 1} {x42680000 xc31c02ff x40df7cd0 1 x40df7cd0 1} {x426c0000 xc3156539 x40cfec40 1 x40cfec40 1} {x42700000 xc30f043b x40cb34a0 1 x40cb34a0 1} {x42740000 xc308b1ef x40be7e60 1 x40be7e60 1} {x42780000 xc3031c55 x40c6d948 1 x40c6d948 1} {x427c0000 xc2f888b5 x40dde5b8 1 x40dde5b8 1} {x42800000 xc2ea7bf3 x40d20f48 1 x40d20f48 1} {x42820000 xc2de46cc x40afef50 1 x40afef50 1} {x42840000 xc2d47e09 x405b17c0 1 x405b17c0 1} {x42860000 xc2d09550 x3fe5d800 1 x3fe5d800 1} {x42880000 xc2cd4f49 x401100f0 1 x401100f0 1} {x428a0000 xc2c78541 x40119470 1 x40119470 1} {x428c0000 xc2c43602 x4050aff0 1 x4050aff0 1} {x428e0000 xc2ba7a42 x409f7908 1 x409f7908 1} {x42900000 xc2b046e1 x40a143f8 1 x40a143f8 1} {x42920000 xc2a651c3 x409bc0d0 1 x409bc0d0 1} {x42940000 xc29ccec7 x408c08c0 1 x408c08c0 1} {x42960000 xc294d0ab x407e7b10 1 x407e7b10 1} {x42980000 xc28ce716 x40752420 1 x40752420 1} {x429a0000 xc2857e69 x4062d208 1 x4062d208 1} {x429c0000 xc27d73eb x3feb7e20 1 x3feb7e20 1} {x429e0000 xc27afff0 x3f5a78e0 1 x3f5a78e0 1} {x42a00000 xc276a024 x3f9f45b0 1 x3f9f45b0 1} {x42a20000 xc2710b95 x3fbeea10 1 x3fbeea10 1} {x42a40000 xc26ab183 x3fc54920 1 x3fc54920 1} {x42a60000 xc264b703 x3f8d3c30 1 x3f8d3c30 1} {x42a80000 xc261ddc0 x3f246bc0 1 x3f246bc0 1} {x42aa0000 xc25f93a5 -} {x42ac0000 xc25ff925 xbe984000 1 xbe984000 1} {x42ae0000 xc26498a2 xbfbf8ce0 1 xbfbf8ce0 1} {x42b00000 xc26bf1f3 xc0064e28 1 xc0064e28 1} {x42b20000 xc2756267 xc0075758 1 xc0075758 1} {x42b40000 xc27cdcde xbfefa0f0 1 xbfefa0f0 1} {x42b60000 xc2822e3b xbfd7fe00 1 xbfd7fe00 1} {x42b80000 xc2852e5f xbfca2360 1 xbfca2360 1} {x42ba0000 xc2887f56 xbfc670e0 1 xbfc670e0 1} {x42bc0000 xc28b61e6 xbfc2a440 1 xbfc2a440 1} {x42be0000 xc28e9478 xbfc708e0 1 xbfc708e0 1} {x42c00000 xc2919a2d xbfcbdfa0 1 xbfcbdfa0 1} {x42c20000 xc294f375 -} {x42c40000 xc293cd7c x3f4c3e80 1 x3f4c3e80 1} {x42c60000 xc291c27b x3f621f00 1 x3f621f00 1} {x42c80000 xc2904500 x3f5a6700 1 x3f5a6700 1} {x42ca0000 xc28e58df x3f80d260 1 x3f80d260 1} {x42cc0000 xc28c3e6d x3f79ffc0 1 x3f79ffc0 1} {x42ce0000 xc28a70e0 x3f3d1880 1 x3f3d1880 1} {x42d00000 xc2894a0b x3f294380 1 x3f294380 1} {x42d20000 xc287cbd2 x3f30e9c0 1 x3f30e9c0 1} {x42d40000 xc2868664 x3f284280 1 x3f284280 1} {x42d60000 xc2852ac8 x3f5abb00 1 x3f5abb00 1} {x42d80000 xc2831b78 x3fa10560 1 x3fa10560 1} {x42da0000 xc280229d x3fd072e0 1 x3fd072e0 1} {x42dc0000 xc2792fc2 x3fedf8c0 1 x3fedf8c0 1} {x42de0000 xc27165ae x40058848 1 x40058848 1} {x42e00000 xc2687eb9 x40130aa0 1 x40130aa0 1} {x42e20000 xc25f045a x401e5d50 1 x401e5d50 1} {x42e40000 xc254b30f x402d0858 1 x402d0858 1} {x42e60000 xc249634f x403552d0 1 x403552d0 1} {x42e80000 xc23e08b5 x404f75c0 1 x404f75c0 1} {x42ea0000 xc22f7497 x405d82d8 1 x405d82d8 1} {x42ec0000 xc222585a x40712550 1 x40712550 1} {x42ee0000 xc2114fed x40896212 1 x40896212 1} {x42f00000 xc1ffffab x409477b4 1 x409477b4 1} {x42f20000 xc1d86400 x40a29eee 1 x40a29eee 1} {x42f40000 xc1aeb034 x40aeea08 1 x40aeea08 1} {x42f60000 xc180eefc x40b4c0fa 1 x40b4c0fa 1} {x42f80000 xc1289f6e x40ad1602 1 x40ad1602 1} {x42fa0000 xc0a98fed x40a89f6e 1 x40a89f6e 1} {x42fc0000 0 x40a8a992 1 x40a8a992 1} {x42fe0000 x40a7c336 x40a5f72e 1 x40a5f72e 1} {x43000000 x4125f72e x40a01ff2 1 x40a01ff2 1} {x43010000 x4174018d x40963968 1 x40963968 1} {x43020000 x419e184b x408a2b4f 1 x408a2b4f 1} {x43030000 x41bf166e x4079bdbc 1 x4079bdbc 1} {x43040000 x41dc87ba x40640334 1 x40640334 1} {x43050000 x41f8173b x404b5948 1 x404b5948 1} {x43060000 x4207af06 x402c674c 1 x402c674c 1} {x43070000 x42119887 x40038880 1 x40038880 1} {x43080000 x42182016 x3fffced0 1 x3fffced0 1} {x43090000 x42219574 x401536f8 1 x401536f8 1} {x430a0000 x422ac6f5 x400d27b0 1 x400d27b0 1} {x430b0000 x42333a6a x3fe36bc0 1 x3fe36bc0 1} {x430c0000 x4238fdb1 x3fdd3ab0 1 x3fdd3ab0 1} {x430d0000 x42410e15 x400b4fa0 1 x400b4fa0 1} {x430e0000 x424a67a5 x40002710 1 x40002710 1} {x430f0000 x425112f7 x4001e970 1 x4001e970 1} {x43100000 x425aa4d3 x400a0740 1 x400a0740 1} {x43110000 x426253df x400915f0 1 x400915f0 1} {x43120000 x426bc791 x40024b38 1 x40024b38 1} {x43130000 x42729d46 x3fc1f9d0 1 x3fc1f9d0 1} {x43140000 x4277e72e x3ee3c100 1 x3ee3c100 1} {x43150000 x42787f04 -} {x43160000 x42762791 xbf60cb20 1 0 1}} {{x42540000 x4443bb85 0 1 xc11322e0 1} {x42580000 x4441725b xc11099c0 1 xc11099c0 1} {x425c0000 x443f36b7 xc1132880 1 xc1132880 1} {x42600000 x443cd917 xc12eafa0 1 xc12eafa0 1} {x42640000 x4439c13a xc156ca00 1 xc156ca00 1} {x42680000 x443622c7 xc16e69c0 1 xc16e69c0 1} {x426c0000 x44324dec xc1601220 1 xc1601220 1} {x42700000 x442f2236 xc14dc6e0 1 xc14dc6e0 1} {x42740000 x442bdfb5 xc15858a0 1 xc15858a0 1} {x42780000 x44285f71 xc16bd460 1 xc16bd460 1} {x427c0000 x44248112 xc17cf700 1 xc17cf700 1} {x42800000 x442077b9 xc18013f0 1 xc18013f0 1} {x42820000 x441c7fd3 xc17d3ec0 1 xc17d3ec0 1} {x42840000 x44188dc3 xc1630d40 1 xc1630d40 1} {x42860000 x44156769 xc144d360 1 xc144d360 1} {x42880000 x44126728 xc145e660 1 xc145e660 1} {x428a0000 x440f3836 xc14846a0 1 xc14846a0 1} {x428c0000 x440c24f3 xc168e900 1 xc168e900 1} {x428e0000 x4407f0ee xc189d300 1 xc189d300 1} {x42900000 x440387c3 xc18b42e0 1 xc18b42e0 1} {x42920000 x43fe7980 xc1896558 1 xc1896558 1} {x42940000 x43f5e2db xc1878598 1 xc1878598 1} {x42960000 x43ed88cd xc1844108 1 xc1844108 1} {x42980000 x43e55aba xc1757f30 1 xc1757f30 1} {x429a0000 x43de30da xc15d3db0 1 xc15d3db0 1} {x429c0000 x43d786df xc150fe10 1 xc150fe10 1} {x429e0000 x43d120f9 xc1527be0 1 xc1527be0 1} {x42a00000 x43ca5f21 xc16048b0 1 xc16048b0 1} {x42a20000 x43c31c6e xc16d4020 1 xc16d4020 1} {x42a40000 x43bb8b1f xc175ab50 1 xc175ab50 1} {x42a60000 x43b3c1b9 xc177b700 1 xc177b700 1} {x42a80000 x43ac0faf xc176c2c0 1 xc176c2c0 1} {x42aa0000 x43a4558d xc16eec90 1 xc16eec90 1} {x42ac0000 x439d20e6 xc15f9220 1 xc15f9220 1} {x42ae0000 x43965c6b xc159cde0 1 xc159cde0 1} {x42b00000 x438f8408 xc15a8ef0 1 xc15a8ef0 1} {x42b20000 x4388b37c xc16178b0 1 xc16178b0 1} {x42b40000 x43816c7d xc1693850 1 xc1693850 1} {x42b60000 x43743fee xc1693660 1 xc1693660 1} {x42b80000 x4365b22e xc16bd648 1 xc16bd648 1} {x42ba0000 x4356c525 xc16a3ae0 1 xc16a3ae0 1} {x42bc0000 x43486ad2 xc15f4708 1 xc15f4708 1} {x42be0000 x433adc44 xc14d5dc0 1 xc14d5dc0 1} {x42c00000 x432ebf1a xc1378b00 1 xc1378b00 1} {x42c20000 x4323eae4 xc12352e0 1 xc12352e0 1} {x42c40000 x431a54be xc1160e40 1 xc1160e40 1} {x42c60000 x4311291c xc1147d70 1 xc1147d70 1} {x42c80000 x4307c510 xc1148404 1 xc1148404 1} {x42ca0000 x42fd3137 xc10e615c 1 xc10e615c 1} {x42cc0000 x42ebf1c9 xc1091e1c 1 xc1091e1c 1} {x42ce0000 x42dae9b0 xc105baac 1 xc105baac 1} {x42d00000 x42ca831e xc0f24d78 1 xc0f24d78 1} {x42d20000 x42bca001 xc0da27c8 1 xc0da27c8 1} {x42d40000 x42af3e25 xc0cd0d78 1 xc0cd0d78 1} {x42d60000 x42a2fe52 xc0c44610 1 xc0c44610 1} {x42d80000 x4296b563 xc0cb18a8 1 xc0cb18a8 1} {x42da0000 x42899b3d xc0d2b028 1 xc0d2b028 1} {x42dc0000 x4278bebc xc0d2004c 1 xc0d2004c 1} {x42de0000 x425eb667 xc0bb197c 1 xc0bb197c 1} {x42e00000 x4249f85d xc09d688c 1 xc09d688c 1} {x42e20000 x42375c44 xc08c6dc4 1 xc08c6dc4 1} {x42e40000 x4226dcec xc07d2158 1 xc07d2158 1} {x42e60000 x4217b819 xc061bce0 1 xc061bce0 1} {x42e80000 x420aa550 xc03bde08 1 xc03bde08 1} {x42ea0000 x42003c58 xc03e81a0 1 xc03e81a0 1} {x42ec0000 x41e5aa38 xc04d5dbc 1 xc04d5dbc 1} {x42ee0000 x41cd2141 xc04f34fc 1 xc04f34fc 1} {x42f00000 x41b1dcf9 xc068d544 1 xc068d544 1} {x42f20000 x4192ebf0 xc078d0c0 1 xc078d0c0 1} {x42f40000 x41675192 xc06fffc2 1 xc06fffc2 1} {x42f60000 x412dd7ff xc06bb14e 1 xc06bb14e 1} {x42f80000 x40e2f1d6 xc06e8dba 1 xc06e8dba 1} {x42fa0000 x405a4487 xc062f1d6 1 xc062f1d6 1} {x42fc0000 0 xc042c214 1 xc042c214 1} {x42fe0000 xc02b3fa2 xc03e1df1 1 xc03e1df1 1} {x43000000 xc0be1df1 xc0437fd9 1 xc0437fd9 1} {x43010000 xc10c8fd5 xc02c22e5 1 xc02c22e5 1} {x43020000 xc135206b xc019ee06 1 xc019ee06 1} {x43030000 xc15986d8 xc0092fc0 1 xc0092fc0 1} {x43040000 xc179b84b xbff26f98 1 xbff26f98 1} {x43050000 xc18b115f xbff31794 1 xbff31794 1} {x43060000 xc19b3f18 xbff268d0 1 xbff268d0 1} {x43070000 xc1a95e79 xbfe71900 1 xbfe71900 1} {x43080000 xc1b82238 xbf9a7598 1 xbf9a7598 1} {x43090000 xc1bcad2c xbf241080 1 xbf241080 1} {x430a0000 xc1c26340 xbf814960 1 xbf814960 1} {x430b0000 xc1ccd658 xbfc2e4b8 1 xbfc2e4b8 1} {x430c0000 xc1dabfd7 xbfbf0658 1 xbfbf0658 1} {x430d0000 xc1e4b723 xbf857838 1 xbf857838 1} {x430e0000 xc1eb6ede xbf8fbb10 1 xbf8fbb10 1} {x430f0000 xc1f6ae85 xbf9aaa88 1 xbf9aaa88 1} {x43100000 xc1fec42f xbf9c6038 1 xbf9c6038 1} {x43110000 xc2051d46 xbf935048 1 xbf935048 1} {x43120000 xc208971c xbf8a3090 1 xbf8a3090 1} {x43130000 xc20dc04f xbfb671a0 1 xbfb671a0 1} {x43140000 xc213fe36 xbfe67c80 1 xbfe67c80 1} {x43150000 xc21c2817 xc03379a8 1 xc03379a8 1} {x43160000 xc22a6d6b xc07cc30c 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke61 262656 bezier {cc {f 8224} {p {0 0 1} {x44c4aff8 x4475b4dd 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke62 262656 bezier {cc {f 8224} {p {0 0 1} {x44c4aff8 x4475b4dd 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3918dc8 0 1 x40dd91c0 1} {x42580000 xc38df474 x40f7db80 1 x40f7db80 1} {x425c0000 xc389ceec x40e63480 1 x40e63480 1} {x42600000 xc386c2d0 x40fbc900 1 x40fbc900 1} {x42640000 xc381f0a4 x411578e0 1 x411578e0 1} {x42680000 xc37ad684 x410935c8 1 x410935c8 1} {x426c0000 xc372ba8f x40fcdd80 1 x40fcdd80 1} {x42700000 xc36b08ac x40fc1c70 1 x40fc1c70 1} {x42740000 xc362f8c8 x40f01080 1 x40f01080 1} {x42780000 xc35c07a4 x40f52190 1 x40f52190 1} {x427c0000 xc353a6af x4105bf60 1 x4105bf60 1} {x42800000 xc34b4fb8 x41016150 1 x41016150 1} {x42820000 xc3437a85 x40eeea80 1 x40eeea80 1} {x42840000 xc33c6110 x40d33f20 1 x40d33f20 1} {x42860000 xc3364693 x40c0c140 1 x40c0c140 1} {x42880000 xc33054fc x40b6d430 1 x40b6d430 1} {x428a0000 xc32ad950 x40bc9420 1 x40bc9420 1} {x428c0000 xc3248bba x40bd1230 1 x40bd1230 1} {x428e0000 xc31f082d x40b14010 1 x40b14010 1} {x42900000 xc31977b9 x40b0f4c0 1 x40b0f4c0 1} {x42920000 xc313f8e1 x40af6b10 1 x40af6b10 1} {x42940000 xc30e8108 x40adee30 1 x40adee30 1} {x42960000 xc30919fe x40a243c0 1 x40a243c0 1} {x42980000 xc3045ccc x4093a8f0 1 x4093a8f0 1} {x429a0000 xc2ffbede x407d0f00 1 x407d0f00 1} {x429c0000 xc2f8e8a8 x4043e060 1 x4043e060 1} {x429e0000 xc2f380d8 x40125140 1 x40125140 1} {x42a00000 xc2efc394 x3fd4e4c0 1 x3fd4e4c0 1} {x42a20000 xc2ecd9b2 x402482a0 1 x402482a0 1} {x42a40000 xc2e57b6a x403fb000 1 x403fb000 1} {x42a60000 xc2e0deb2 x401eb6b0 1 x401eb6b0 1} {x42a80000 xc2db8fff x401eecc0 1 x401eecc0 1} {x42aa0000 xc2d6efe6 x40068990 1 x40068990 1} {x42ac0000 xc2d32766 x3f98fa40 1 x3f98fa40 1} {x42ae0000 xc2d22814 -} {x42b00000 xc2d2ce72 xbea70880 1 xbea70880 1} {x42b20000 xc2d37625 xbe8dc480 1 xbe8dc480 1} {x42b40000 xc2d3e9fb xbebd7600 1 xbebd7600 1} {x42b60000 xc2d4f111 xbebf8900 1 xbebf8900 1} {x42b80000 xc2d5690d xbed2a000 1 xbed2a000 1} {x42ba0000 xc2d69651 xbf2d4f40 1 xbf2d4f40 1} {x42bc0000 xc2d81e4a xbf62da80 1 xbf62da80 1} {x42be0000 xc2da21bb xbf7232c0 1 xbf7232c0 1} {x42c00000 xc2dbe715 xbf7209c0 1 xbf7209c0 1} {x42c20000 xc2dde9e2 -} {x42c40000 xc2db7215 x3fca05a0 1 x3fca05a0 1} {x42c60000 xc2d799b5 x3fdd2400 1 x3fdd2400 1} {x42c80000 xc2d488f5 x3fbfbba0 1 x3fbfbba0 1} {x42ca0000 xc2d19bd8 x3fd5e3a0 1 x3fd5e3a0 1} {x42cc0000 xc2cdd9d8 x3fdd1740 1 x3fdd1740 1} {x42ce0000 xc2cab31e x3fe94f40 1 x3fe94f40 1} {x42d00000 xc2c68f5e x3ff94880 1 x3ff94880 1} {x42d20000 xc2c2e8da x3fdc0280 1 x3fdc0280 1} {x42d40000 xc2bfaf4a x3fe44140 1 x3fe44140 1} {x42d60000 xc2bbc6d0 x3ffad040 1 x3ffad040 1} {x42d80000 xc2b7d8c8 x401123e0 1 x401123e0 1} {x42da0000 xc2b2b492 x401ebe70 1 x401ebe70 1} {x42dc0000 xc2adece1 x4036a9e0 1 x4036a9e0 1} {x42de0000 xc2a749f4 x4052f3b0 1 x4052f3b0 1} {x42e00000 xc2a0bda6 x406391c0 1 x406391c0 1} {x42e20000 xc29910d8 x407449b0 1 x407449b0 1} {x42e40000 xc291790b x4081e998 1 x4081e998 1} {x42e60000 xc288d3a5 x4089d308 1 x4089d308 1} {x42e80000 xc2803eaa x4091a2dc 1 x4091a2dc 1} {x42ea0000 xc26d3e93 x409fd0e0 1 x409fd0e0 1} {x42ec0000 xc258891c x40aed08c 1 x40aed08c 1} {x42ee0000 xc2418a70 x40b91638 1 x40b91638 1} {x42f00000 xc22a438e x40c528ac 1 x40c528ac 1} {x42f20000 xc2104045 x40da7d92 1 x40da7d92 1} {x42f40000 xc1e74853 x40e811d4 1 x40e811d4 1} {x42f60000 xc1ac77a0 x40ed8630 1 x40ed8630 1} {x42f80000 xc1610a76 x40e706aa 1 x40e706aa 1} {x42fa0000 xc0e3d12b x40e10a76 1 x40e10a76 1} {x42fc0000 0 x40dff358 1 x40dff358 1} {x42fe0000 x40dc1585 x40dc4ca3 1 x40dc4ca3 1} {x43000000 x415c4ca3 x40d7fc12 1 x40d7fc12 1} {x43010000 x41a3036a x40cb9b3f 1 x40cb9b3f 1} {x43020000 x41d3f3f1 x40b61caa 1 x40b61caa 1} {x43030000 x41fe11bf x40ab54d2 1 x40ab54d2 1} {x43040000 x4214cf2d x40a4ae42 1 x40a4ae42 1} {x43050000 x42283470 x4089267c 1 x4089267c 1} {x43060000 x423718cc x406c6628 1 x406c6628 1} {x43070000 x4245c135 x40672198 1 x40672198 1} {x43080000 x4253fcff x404b1fb0 1 x404b1fb0 1} {x43090000 x425f252b x40371920 1 x40371920 1} {x430a0000 x426ae023 x40327198 1 x40327198 1} {x430b0000 x4275735e x40250968 1 x40250968 1} {x430c0000 x427f8150 x40191ad0 1 x40191ad0 1} {x430d0000 x42844b5c x402c8450 1 x402c8450 1} {x430e0000 x428a88ed x403b3e20 1 x403b3e20 1} {x430f0000 x428fff3e x402cd010 1 x402cd010 1} {x43100000 x429555ee x4030a750 1 x4030a750 1} {x43110000 x429b09b3 x4024a9f0 1 x4024a9f0 1} {x43120000 x429fa08d x40177e00 1 x40177e00 1} {x43130000 x42a48193 x4011d1a0 1 x4011d1a0 1} {x43140000 x42a8bda7 x40039c90 1 x40039c90 1} {x43150000 x42acbb5c x3fb9c1a0 1 x3fb9c1a0 1} {x43160000 x42ae8bb4 x3f228060 1 0 1}} {{x42540000 x44564a1e 0 1 xc1173560 1} {x42580000 x4453f7ed xc10f3a00 1 xc10f3a00 1} {x425c0000 x4451d04e xc1124c60 1 xc1124c60 1} {x42600000 x444f658a xc149a1a0 1 xc149a1a0 1} {x42640000 x444b8341 xc17ccc60 1 xc17ccc60 1} {x42680000 x44477f27 xc1834ed0 1 xc1834ed0 1} {x426c0000 x44434e54 xc1731900 1 xc1731900 1} {x42700000 x443fe65f xc15e6be0 1 xc15e6be0 1} {x42740000 x443c5af5 xc1648dc0 1 xc1648dc0 1} {x42780000 x4438c1f1 xc176d440 1 xc176d440 1} {x427c0000 x4434a453 xc18c1d90 1 xc18c1d90 1} {x42800000 x44300018 xc195b6b0 1 xc195b6b0 1} {x42820000 x442b48e8 xc197df20 1 xc197df20 1} {x42840000 x44268226 xc19c6ff0 1 xc19c6ff0 1} {x42860000 x442181e9 xc194c880 1 xc194c880 1} {x42880000 x441d359e xc184a410 1 xc184a410 1} {x428a0000 x441937a8 xc187b170 1 xc187b170 1} {x428c0000 x4414ba87 xc18f60c0 1 xc18f60c0 1} {x428e0000 x4410419c xc1925ce0 1 xc1925ce0 1} {x42900000 x440b94b9 xc19474f0 1 xc19474f0 1} {x42920000 x4406fa4d xc19a77f0 1 xc19a77f0 1} {x42940000 x4401ed3a xc19ef1a0 1 xc19ef1a0 1} {x42960000 x43fa1666 xc197fdb0 1 xc197fdb0 1} {x42980000 x43f0dabe xc1889678 1 xc1889678 1} {x429a0000 x43e90397 xc16e4c10 1 xc16e4c10 1} {x429c0000 x43e1f5fd xc1655950 1 xc1655950 1} {x429e0000 x43daae02 xc167ac50 1 xc167ac50 1} {x42a00000 x43d37b38 xc16828b0 1 xc16828b0 1} {x42a20000 x43cc2b77 xc17bb0a0 1 xc17bb0a0 1} {x42a40000 x43c3c02e xc1856b60 1 xc1856b60 1} {x42a60000 x43bb7e0b xc187e5c8 1 xc187e5c8 1} {x42a80000 x43b2c375 xc189ef58 1 xc189ef58 1} {x42aa0000 x43aa4020 xc18416c8 1 xc18416c8 1} {x42ac0000 x43a2409c xc178c060 1 xc178c060 1} {x42ae0000 x439ab41a xc170e650 1 xc170e650 1} {x42b00000 x43933237 xc1755a00 1 xc1755a00 1} {x42b20000 x438b5e7a xc1818150 1 xc1818150 1} {x42b40000 x4383020d xc1866d9c 1 xc1866d9c 1} {x42b60000 x4375218d xc1867a5c 1 xc1867a5c 1} {x42b80000 x43646583 xc186b7f4 1 xc186b7f4 1} {x42ba0000 x43537390 xc1814518 1 xc1814518 1} {x42bc0000 x4344143d xc16cfe40 1 xc16cfe40 1} {x42be0000 x4335d3c8 xc15745e8 1 xc15745e8 1} {x42c00000 x43292b80 xc13f3d00 1 xc13f3d00 1} {x42c20000 x431dec28 xc12a5e20 1 xc12a5e20 1} {x42c40000 x4313dfbc xc11cc808 1 xc11cc808 1} {x42c60000 x430a5327 xc1211068 1 xc1211068 1} {x42c80000 x42ff7b5e xc126ee28 1 xc126ee28 1} {x42ca0000 x42eaeac4 xc11bb248 1 xc11bb248 1} {x42cc0000 x42d88ecc xc11708e4 1 xc11708e4 1} {x42ce0000 x42c5288b xc11a49f4 1 xc11a49f4 1} {x42d00000 x42b1fc4f xc1123484 1 xc1123484 1} {x42d20000 x42a09b6a xc1042f20 1 xc1042f20 1} {x42d40000 x4290f087 xc0f2c930 1 xc0f2c930 1} {x42d60000 x42824244 xc0e22f14 1 xc0e22f14 1} {x42d80000 x42695549 xc0db684c 1 xc0db684c 1} {x42da0000 x424daa75 xc0e208c8 1 xc0e208c8 1} {x42dc0000 x4230d317 xc0d82014 1 xc0d82014 1} {x42de0000 x4217a270 xc0b63bb0 1 xc0b63bb0 1} {x42e00000 x4203442b xc092943a 1 xc092943a 1} {x42e20000 x41e5fac3 xc075a438 1 xc075a438 1} {x42e40000 x41c91f48 xc04cfeb8 1 xc04cfeb8 1} {x42e60000 x41b2bb15 xc01e0e30 1 xc01e0e30 1} {x42e80000 x41a19bbc xbfed4b98 1 xbfed4b98 1} {x42ea0000 x419511a2 xbff09838 1 xbff09838 1} {x42ec0000 x418388b5 xbffde350 1 xbffde350 1} {x42ee0000 x416aaa70 xc0031b68 1 xc0031b68 1} {x42f00000 x414583b6 xc019951a 1 xc019951a 1} {x42f20000 x411ddfe3 xc01f2664 1 xc01f2664 1} {x42f40000 x40ebe108 xc0120eb9 1 xc0120eb9 1} {x42f60000 x40a9b10d xc0042dda 1 xc0042dda 1} {x42f80000 x404f665d xbffe4552 1 xbffe4552 1} {x42fa0000 x3faa3990 xbfcf665d 1 xbfcf665d 1} {x42fc0000 0 xbfa6f7c8 1 xbfa6f7c8 1} {x42fe0000 xbfa3b601 xbf9e808a 1 xbf9e808a 1} {x43000000 xc01e808a xbf8893de 1 xbf8893de 1} {x43010000 xc05a6edf xbf4f298c 1 xbf4f298c 1} {x43020000 xc0830aa8 xbf0584ae 1 xbf0584ae 1} {x43030000 xc08e989b -} {x43040000 xc08bd79b x3ddc05c0 1 x3ddc05c0 1} {x43050000 xc087b86d -} {x43060000 xc08d5aa8 xbcc03000 1 xbcc03000 1} {x43070000 xc08d9ab8 -} {x43080000 xc07cebe1 x3ef5dbdc 1 x3ef5dbdc 1} {x43090000 xc05dbe79 x3f236e4e 1 x3f236e4e 1} {x430a0000 xc02b34ba x3f04ca5a 1 x3f04ca5a 1} {x430b0000 xc01b594c x3e1a2ae0 1 x3e1a2ae0 1} {x430c0000 xc017ef5e x3e23dca0 1 x3e23dca0 1} {x430d0000 xbffd7a5e x3f1a5ab0 1 x3f1a5ab0 1} {x430e0000 xbf95840c x3f532bab 1 x3f532bab 1} {x430f0000 xbea93acc x3f1a897e 1 x3f1a897e 1} {x43100000 x3d20ae4d x3f2a4f4e 1 x3f2a4f4e 1} {x43110000 x3f80009b x3f40ade0 1 x3f40ade0 1} {x43120000 x3fc5b352 x3f589879 1 x3f589879 1} {x43130000 x402c4c8a x3f53a476 1 x3f53a476 1} {x43140000 x404cabe4 x3e91b090 1 x3e91b090 1} {x43150000 x4052bdea -} {x43160000 x3f970762 xc04ad756 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke63 262656 bezier {cc {f 8224} {p {0 0 1} {x438756a8 x435a08b4 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke64 262656 bezier {cc {f 8224} {p {0 0 1} {x438756a8 x435a08b4 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc30ebfd6 0 1 x40811ad8 1} {x42580000 xc30a6666 x409f5450 1 x409f5450 1} {x425c0000 xc304ca91 x40c58240 1 x40c58240 1} {x42600000 xc2fc1c84 x40df68f0 1 x40df68f0 1} {x42640000 xc2eda804 x40e2e630 1 x40e2e630 1} {x42680000 xc2dfbfbe x40df8ab8 1 x40df8ab8 1} {x426c0000 xc2d1b6ad x40e0d008 1 x40e0d008 1} {x42700000 xc2c3a5bd x40e3eb40 1 x40e3eb40 1} {x42740000 xc2b53945 x40eb6038 1 x40eb6038 1} {x42780000 xc2a639b6 x40edfbc0 1 x40edfbc0 1} {x427c0000 xc29779cd x40f8d9b8 1 x40f8d9b8 1} {x42800000 xc2871e7f x410377b0 1 x410377b0 1} {x42820000 xc26d37c2 x40f9c654 1 x40f9c654 1} {x42840000 xc24fcb69 x40ea6f10 1 x40ea6f10 1} {x42860000 xc2329bfe x40c7a870 1 x40c7a870 1} {x42880000 xc21de14d x40d01d9a 1 x40d01d9a 1} {x428a0000 xc1fd292f x40c183bc 1 x40c183bc 1} {x428c0000 xc1db00bc x4091791c 1 x4091791c 1} {x428e0000 xc1b46ca1 x409fb6c8 1 x409fb6c8 1} {x42900000 xc18b2558 x40630926 1 x40630926 1} {x42920000 xc17754af x3fbf9244 1 x3fbf9244 1} {x42940000 xc166661f x3f5b4420 1 x3f5b4420 1} {x42960000 xc15bec2b x3f31ec70 1 x3f31ec70 1} {x42980000 xc1502891 x3f834474 1 x3f834474 1} {x429a0000 xc13b1b0e x3fa8d198 1 x3fa8d198 1} {x429c0000 xc125f42b x3f69d638 1 x3f69d638 1} {x429e0000 xc11de047 x3ebe3810 1 x3ebe3810 1} {x42a00000 xc11a10aa x3ecdd960 1 x3ecdd960 1} {x42a20000 xc11102b1 x3f11aee0 1 x3f11aee0 1} {x42a40000 xc107dace -} {x42a60000 xc1111ac0 xbf151210 1 xbf151210 1} {x42a80000 xc11a7d10 xbf6284d8 1 xbf6284d8 1} {x42aa0000 xc12d6b5b -} {x42ac0000 xc11e4373 -} {x42ae0000 xc13ac086 xc00d6162 1 xc00d6162 1} {x42b00000 xc164f424 xc0338be4 1 xc0338be4 1} {x42b20000 xc18a433c xc03c436c 1 xc03c436c 1} {x42b40000 xc1a18aed xc03401b8 1 xc03401b8 1} {x42b60000 xc1b743aa xc0296e50 1 xc0296e50 1} {x42b80000 xc1cbe681 xc027add0 1 xc027add0 1} {x42ba0000 xc1e12f1e xc02bddc4 1 xc02bddc4 1} {x42bc0000 xc1f6ddf2 xc02eae48 1 xc02eae48 1} {x42be0000 xc2066d58 xc0327e20 1 xc0327e20 1} {x42c00000 xc211bebd xc0385b30 1 xc0385b30 1} {x42c20000 xc21d78be xbedcad00 1 xbedcad00 1} {x42c40000 xc21e0bdc -} {x42c60000 xc21d40f0 x3e935000 1 x3e935000 1} {x42c80000 xc21bbe9c x3efe40c0 1 x3efe40c0 1} {x42ca0000 xc21947ed x3f436cc0 1 x3f436cc0 1} {x42cc0000 xc215a336 x3fca1590 1 x3fca1590 1} {x42ce0000 xc20ca694 x3fbaf380 1 x3fbaf380 1} {x42d00000 xc209f3fe -} {x42d20000 xc20b0f85 xbe7dfc00 1 xbe7dfc00 1} {x42d40000 xc20beff6 xbe82fd40 1 xbe82fd40 1} {x42d60000 xc20d1b7a xbe48b600 1 xbe48b600 1} {x42d80000 xc20d8162 xbe98dc00 1 xbe98dc00 1} {x42da0000 xc20fc35e xbebc0540 1 xbebc0540 1} {x42dc0000 xc2107177 -} {x42de0000 xc2104bde x3da4ed00 1 x3da4ed00 1} {x42e00000 xc20fcc8a x3e65b100 1 x3e65b100 1} {x42e20000 xc20e807c x3efc3400 1 x3efc3400 1} {x42e40000 xc20bdbba x3f2eda00 1 x3f2eda00 1} {x42e60000 xc20909ac x3f6c4300 1 x3f6c4300 1} {x42e80000 xc20479a2 x3f92a408 1 x3f92a408 1} {x42ea0000 xc1ffbed7 x3fb22210 1 x3fb22210 1} {x42ec0000 xc1f2af02 x4000d4b0 1 x4000d4b0 1} {x42ee0000 xc1df89ab x40349ff8 1 x40349ff8 1} {x42f00000 xc1c58704 x405a6850 1 x405a6850 1} {x42f20000 xc1a8ef97 x406ef84c 1 x406ef84c 1} {x42f40000 xc189c8f1 x4082f75b 1 x4082f75b 1} {x42f60000 xc14ee7d3 x40890fad 1 x40890fad 1} {x42f80000 xc10a8235 x4088426e 1 x4088426e 1} {x42fa0000 xc08d4aca x408a8235 1 x408a8235 1} {x42fc0000 0 x4094e733 1 x4094e733 1} {x42fe0000 x409c839c x409b08ac 1 x409b08ac 1} {x43000000 x411b08ac x409ab8b7 1 x409ab8b7 1} {x43010000 x4168fa85 x409555de 1 x409555de 1} {x43020000 x41982f45 x408cd9b5 1 x408cd9b5 1} {x43030000 x41baea1d x408951d8 1 x408951d8 1} {x43040000 x41dcd831 x407ea2f8 1 x407ea2f8 1} {x43050000 x41fa92db x4059b594 1 x4059b594 1} {x43060000 x4209a2cb x402c0a44 1 x402c0a44 1} {x43070000 x4212cab6 x4008bd40 1 x4008bd40 1} {x43080000 x421aba73 x3ff7ab20 1 x3ff7ab20 1} {x43090000 x42224568 x3ff19100 1 x3ff19100 1} {x430a0000 x4229d383 x3feae600 1 x3feae600 1} {x430b0000 x4230f3c8 x3fe1bad0 1 x3fe1bad0 1} {x430c0000 x4237ef30 x3fd251d0 1 x3fd251d0 1} {x430d0000 x423e18e5 x3fd122f0 1 x3fd122f0 1} {x430e0000 x4245015f x3fec6e00 1 x3fec6e00 1} {x430f0000 x424cdfc5 x4009bab8 1 x4009bab8 1} {x43100000 x425638b6 x401a6398 1 x401a6398 1} {x43110000 x42602c38 x401c7a28 1 x401c7a28 1} {x43120000 x4269c7fb x40191d00 1 x40191d00 1} {x43130000 x42734fd8 x3ff5f370 1 x3ff5f370 1} {x43140000 x42792732 x3f80c420 1 x3f80c420 1} {x43150000 x427b5c1a -} {x43160000 x42794d01 xbf45a960 1 0 1}} {{x42540000 x44801b43 0 1 xc155ddf0 1} {x42580000 x447cc14d xc16c2ee0 1 xc16c2ee0 1} {x425c0000 x4478d50f xc1819a20 1 xc1819a20 1} {x42600000 x4474a7ab xc184a9e0 1 xc184a9e0 1} {x42640000 x44708a71 xc18373d0 1 xc18373d0 1} {x42680000 x446c706e xc1855ef0 1 xc1855ef0 1} {x426c0000 x44683482 xc18bd040 1 xc18bd040 1} {x42700000 x4463b36a xc198e190 1 xc198e190 1} {x42740000 x445ea669 xc1a9edb0 1 xc1a9edb0 1} {x42780000 x4459148f xc1bb3270 1 xc1bb3270 1} {x427c0000 x4452f342 xc1cca050 1 xc1cca050 1} {x42800000 x444c4a8a xc1d9f700 1 xc1d9f700 1} {x42820000 x444553d2 xc1dde080 1 xc1dde080 1} {x42840000 x443e6c82 xc1dea680 1 xc1dea680 1} {x42860000 x4437696a xc1da1a70 1 xc1da1a70 1} {x42880000 x4430cadb xc1dbce40 1 xc1dbce40 1} {x428a0000 x4429ac86 xc1d628b0 1 xc1d628b0 1} {x428c0000 x44236850 xc1c732e0 1 xc1c732e0 1} {x428e0000 x441d3958 xc1ca4a00 1 xc1ca4a00 1} {x42900000 x4416c3b0 xc1c73cc0 1 xc1c73cc0 1} {x42920000 x4410c58c xc1bb68e0 1 xc1bb68e0 1} {x42940000 x440b0d22 xc1b5e6b0 1 xc1b5e6b0 1} {x42960000 x44056721 xc1b3e5f8 1 xc1b3e5f8 1} {x42980000 x43ff9d85 xc1af8818 1 xc1af8818 1} {x429a0000 x43f4dd3f xc1a95650 1 xc1a95650 1} {x429c0000 x43ea72bb xc1a3c360 1 xc1a3c360 1} {x429e0000 x43e064d3 xc19fc200 1 xc19fc200 1} {x42a00000 x43d67a7b xc19fc848 1 xc19fc848 1} {x42a20000 x43cc6bca xc1a0dd28 1 xc1a0dd28 1} {x42a40000 x43c25ed6 xc19b7f00 1 xc19b7f00 1} {x42a60000 x43b8fbea xc1964450 1 xc1964450 1} {x42a80000 x43af964c xc1994ca8 1 xc1994ca8 1} {x42aa0000 x43a5d255 xc1a15b48 1 xc1a15b48 1} {x42ac0000 x439b6ae3 xc1a07980 1 xc1a07980 1} {x42ae0000 x4391c325 xc1978010 1 xc1978010 1} {x42b00000 x43887ae1 xc1941818 1 xc1941818 1} {x42b20000 x437e8044 xc1935c34 1 xc1935c34 1} {x42b40000 x436c1eb5 xc1932c28 1 xc1932c28 1} {x42b60000 x4359b53a xc1956bf4 1 xc1956bf4 1} {x42b80000 x4346c3b8 xc194d838 1 xc194d838 1} {x42ba0000 x43347f2c xc18e6b88 1 xc18e6b88 1} {x42bc0000 x432328d6 xc185ad88 1 xc185ad88 1} {x42be0000 x431313ca xc175a220 1 xc175a220 1} {x42c00000 x43047492 xc15ef108 1 xc15ef108 1} {x42c20000 x42ee6b52 xc14a6d74 1 xc14a6d74 1} {x42c40000 x42d64dc7 xc14215b4 1 xc14215b4 1} {x42c60000 x42bde5e5 xc14076c0 1 xc14076c0 1} {x42c80000 x42a63017 xc13ee684 1 xc13ee684 1} {x42ca0000 x428e2c44 xc1404160 1 xc1404160 1} {x42cc0000 x426c3f7e xc126fc8c 1 xc126fc8c 1} {x42ce0000 x4248da42 xc10a7c4c 1 xc10a7c4c 1} {x42d00000 x42270158 xc10c25d4 1 xc10c25d4 1} {x42d20000 x4202c758 xc10ae946 1 xc10ae946 1} {x42d40000 x41c3196a xc0fb6afe 1 xc0fb6afe 1} {x42d60000 x4187d931 xc0ea2220 1 xc0ea2220 1} {x42d80000 x411c10b4 xc0d6c30d 1 xc0d6c30d 1} {x42da0000 x4063bd53 xc0c1537a 1 xc0c1537a 1} {x42dc0000 xc0150b1a xc0b258c3 1 xc0b258c3 1} {x42de0000 xc0f2d2dc xc0925e8c 1 xc0925e8c 1} {x42e00000 xc137a153 xc05377c2 1 xc05377c2 1} {x42e20000 xc163254f xc0041382 1 xc0041382 1} {x42e40000 xc179ab14 xbf8975dc 1 xbf8975dc 1} {x42e60000 xc182c163 -} {x42e80000 xc17b5450 x3f692240 1 x3f692240 1} {x42ea0000 xc1685e7e x3faa8754 1 x3faa8754 1} {x42ec0000 xc150b27b x3fb0de24 1 x3fb0de24 1} {x42ee0000 xc13c26f5 x3f956bf4 1 x3f956bf4 1} {x42f00000 xc12b577e x3f84a604 1 x3f84a604 1} {x42f20000 xc11afd74 x3f88ec90 1 x3f88ec90 1} {x42f40000 xc1091c5a x3fa66f6e 1 x3fa66f6e 1} {x42f60000 xc0e2c331 x3fd888d2 1 x3fd888d2 1} {x42f80000 xc0a5f44b x4008e5aa 1 x4008e5aa 1} {x42fa0000 xc033bb0d x4025f44b 1 x4025f44b 1} {x42fc0000 0 x403efec0 1 x403efec0 1} {x42fe0000 x404a4272 x4043d9ba 1 x4043d9ba 1} {x43000000 x40c3d9ba x403d78a5 1 x403d78a5 1} {x43010000 x41114cef x40458a06 1 x40458a06 1} {x43020000 x4144b1e0 x4057c078 1 x4057c078 1} {x43030000 x417d2d2b x4063fa80 1 x4063fa80 1} {x43040000 x419b5790 x406bf4c6 1 x406bf4c6 1} {x43050000 x41b993c7 x408a9eb0 1 x408a9eb0 1} {x43060000 x41e0a6e8 x40bebc22 1 x40bebc22 1} {x43070000 x420c78ec x40c6f388 1 x40c6f388 1} {x43080000 x42221056 x40abb3c4 1 x40abb3c4 1} {x43090000 x423765dd x40ace7bc 1 x40ace7bc 1} {x430a0000 x424d4a45 x40ac04cc 1 x40ac04cc 1} {x430b0000 x42626710 x40a89ae0 1 x40a89ae0 1} {x430c0000 x427770fd x40b15c20 1 x40b15c20 1} {x430d0000 x42875f0c x40c48ec4 1 x40c48ec4 1} {x430e0000 x42944a57 x40ce6bd8 1 x40ce6bd8 1} {x430f0000 x42a12c87 x40c8a9c0 1 x40c8a9c0 1} {x43100000 x42ad5f8f x40be0d48 1 x40be0d48 1} {x43110000 x42b8ee30 x40b739c0 1 x40b739c0 1} {x43120000 x42c446c7 x40af65a8 1 x40af65a8 1} {x43130000 x42cedae5 x40a022f0 1 x40a022f0 1} {x43140000 x42d84b25 x408ec008 1 x408ec008 1} {x43150000 x42e0b2e6 x404f9e70 1 x404f9e70 1} {x43160000 x42e5450c x3fe72fd0 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke65 262656 bezier {cc {f 8224} {p {0 0 1} {x44b454c5 x447edc08 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke66 262656 bezier {cc {f 8224} {p {0 0 1} {x44b454c5 x447edc08 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3c167b2 0 1 x40f0bc20 1} {x42580000 xc3bd854c x41042a20 1 x41042a20 1} {x425c0000 xc3b92510 x410c22f0 1 x410c22f0 1} {x42600000 xc3b4c31d x41197770 1 x41197770 1} {x42640000 xc3af8d99 x41302660 1 x41302660 1} {x42680000 xc3a9c0b7 x412a9ee0 1 x412a9ee0 1} {x426c0000 xc3a4e3ab x4127c5e0 1 x4127c5e0 1} {x42700000 xc39f4459 x4134c560 1 x4134c560 1} {x42740000 xc3999755 x412e37d0 1 x412e37d0 1} {x42780000 xc39460dc x4120b450 1 x4120b450 1} {x427c0000 xc38f8c10 x411006a0 1 x411006a0 1} {x42800000 xc38b6072 x410869b0 1 x410869b0 1} {x42820000 xc3870575 x41075430 1 x41075430 1} {x42840000 xc382eb2f x41024a90 1 x41024a90 1} {x42860000 xc37dc198 x41062b70 1 x41062b70 1} {x42880000 xc37510f0 x4104b900 1 x4104b900 1} {x428a0000 xc36d2a78 x40f12e30 1 x40f12e30 1} {x428c0000 xc365fe0d x40d759d0 1 x40d759d0 1} {x428e0000 xc35fb4db x40c9d8e0 1 x40c9d8e0 1} {x42900000 xc359607f x40e485b0 1 x40e485b0 1} {x42920000 xc3516c80 x40f05890 1 x40f05890 1} {x42940000 xc34a5af6 x40d135e0 1 x40d135e0 1} {x42960000 xc3445922 x40adfd80 1 x40adfd80 1} {x42980000 xc33f7b1e x409e3c30 1 x409e3c30 1} {x429a0000 xc33a755f x409403e0 1 x409403e0 1} {x429c0000 xc3363ae0 x40735ac0 1 x40735ac0 1} {x429e0000 xc332da89 x406bae20 1 x406bae20 1} {x42a00000 xc32edd6f x408027c0 1 x408027c0 1} {x42a20000 xc32ad80d x40a055e0 1 x40a055e0 1} {x42a40000 xc324d811 x40a92da0 1 x40a92da0 1} {x42a60000 xc3204533 x409c3f10 1 x409c3f10 1} {x42a80000 xc31b1420 x40a84ab0 1 x40a84ab0 1} {x42aa0000 xc315c088 x40980940 1 x40980940 1} {x42ac0000 xc311938c x4044ad20 1 x4044ad20 1} {x42ae0000 xc30f9b1f x3fd438c0 1 x3fd438c0 1} {x42b00000 xc30e42a9 x3f8a8f00 1 x3f8a8f00 1} {x42b20000 xc30d70e3 x3f1f2600 1 x3f1f2600 1} {x42b40000 xc30d045d x3ecd6000 1 x3ecd6000 1} {x42b60000 xc30ca383 x3f2a4200 1 x3f2a4200 1} {x42b80000 xc30bafd9 x3f3d7f80 1 x3f3d7f80 1} {x42ba0000 xc30b2884 x3f1fc100 1 x3f1fc100 1} {x42bc0000 xc30a7057 -} {x42be0000 xc30a79a3 xbd544800 1 xbd544800 1} {x42c00000 xc30a8ae0 xbe472200 1 xbe472200 1} {x42c20000 xc30add34 -} {x42c40000 xc3085bcf x40283460 1 x40283460 1} {x42c60000 xc3059b91 x40411b00 1 x40411b00 1} {x42c80000 xc30252f7 x40455190 1 x40455190 1} {x42ca0000 xc2fee209 x4031a150 1 x4031a150 1} {x42cc0000 xc2f98bd9 x403b8c60 1 x403b8c60 1} {x42ce0000 xc2f32943 x40326860 1 x40326860 1} {x42d00000 xc2ee6553 x40187d50 1 x40187d50 1} {x42d20000 xc2e9a16e x4008d900 1 x4008d900 1} {x42d40000 xc2e5d7c3 x400735b0 1 x400735b0 1} {x42d60000 xc2e12e13 x40148930 1 x40148930 1} {x42d80000 xc2dc8f30 x402439f0 1 x402439f0 1} {x42da0000 xc2d6ea74 x40475290 1 x40475290 1} {x42dc0000 xc2d01a07 x407977a0 1 x407977a0 1} {x42de0000 xc2c752fa x4085e1d8 1 x4085e1d8 1} {x42e00000 xc2bf5dcc x40883de0 1 x40883de0 1} {x42e20000 xc2b64b3e x4096d950 1 x4096d950 1} {x42e40000 xc2ac82a2 x409c5f88 1 x409c5f88 1} {x42e60000 xc2a2bf4d x40a3b8d0 1 x40a3b8d0 1} {x42e80000 xc2980b88 x40a9c040 1 x40a9c040 1} {x42ea0000 xc28d8745 x40bdccd0 1 x40bdccd0 1} {x42ec0000 xc28051ee x40db2fa0 1 x40db2fa0 1} {x42ee0000 xc26442a2 x40de02b4 1 x40de02b4 1} {x42f00000 xc249232f x40ec9bd4 1 x40ec9bd4 1} {x42f20000 xc2291bad x41023962 1 x41023962 1} {x42f40000 xc208067e x4109a24d 1 x4109a24d 1} {x42f60000 xc1c8950d x410a94c8 1 x410a94c8 1} {x42f80000 xc1857834 x41070a1a 1 x41070a1a 1} {x42fa0000 xc10315e6 x41057834 1 x41057834 1} {x42fc0000 0 x410701e4 1 x410701e4 1} {x42fe0000 x410aede1 x410552f3 1 x410552f3 1} {x43000000 x418552f3 x40f95f2d 1 x40f95f2d 1} {x43010000 x41c22687 x40e73572 1 x40e73572 1} {x43020000 x41f8edac x40ce27de 1 x40ce27de 1} {x43030000 x42149d3b x40bf8874 1 x40bf8874 1} {x43040000 x422c58f3 x40b4bf58 1 x40b4bf58 1} {x43050000 x4241cd11 x409c9f90 1 x409c9f90 1} {x43060000 x425380d7 x40892708 1 x40892708 1} {x43070000 x426416d3 x407c3578 1 x407c3578 1} {x43080000 x42730786 x405aea38 1 x405aea38 1} {x43090000 x427f741a x40473720 1 x40473720 1} {x430a0000 x4285f735 x4029ac90 1 x4029ac90 1} {x430b0000 x428a54d6 x40128fe0 1 x40128fe0 1} {x430c0000 x428f2033 x400eb620 1 x400eb620 1} {x430d0000 x42934038 x3fe21920 1 x3fe21920 1} {x430e0000 x429630fc x3fe2e6e0 1 x3fe2e6e0 1} {x430f0000 x429a576f x40105240 1 x40105240 1} {x43100000 x429f3620 x401069a0 1 x401069a0 1} {x43110000 x42a35e09 x400952f0 1 x400952f0 1} {x43120000 x42a7cb4f x3ff76880 1 x3ff76880 1} {x43130000 x42ab194d x3fe89a20 1 x3fe89a20 1} {x43140000 x42af1020 x3ff569c0 1 x3ff569c0 1} {x43150000 x42b2c49b x3fd46980 1 x3fd46980 1} {x43160000 x42b5b36c x3faf59a0 1 0 1}} {{x42540000 x446abf27 0 1 xc11fd8f0 1} {x42580000 x44683aa0 xc123b360 1 xc123b360 1} {x425c0000 x4465a18c xc13fd600 1 xc13fd600 1} {x42600000 x44623bf0 xc171a500 1 xc171a500 1} {x42640000 x445e1464 xc1883170 1 xc1883170 1} {x42680000 x4459b8d9 xc189afa0 1 xc189afa0 1} {x426c0000 x4455796a xc1835810 1 xc1835810 1} {x42700000 x44518358 xc182a860 1 xc182a860 1} {x42740000 x444d4ee4 xc18b0680 1 xc18b0680 1} {x42780000 x4448d2f0 xc191fa70 1 xc191fa70 1} {x427c0000 x44442f3d xc19489d0 1 xc19489d0 1} {x42800000 x443f8a53 xc19dbcd0 1 xc19dbcd0 1} {x42820000 x443a5370 xc1a83db0 1 xc1a83db0 1} {x42840000 x44350678 xc1af48e0 1 xc1af48e0 1} {x42860000 x442f5ee2 xc1ba1dd0 1 xc1ba1dd0 1} {x42880000 x4429649b xc1b44ea0 1 xc1b44ea0 1} {x428a0000 x442419f8 xc1a76760 1 xc1a76760 1} {x428c0000 x441eee25 xc1a07080 1 xc1a07080 1} {x428e0000 x441a12f0 xc19d3c30 1 xc19d3c30 1} {x42900000 x44151a62 xc1ab3e50 1 xc1ab3e50 1} {x42920000 x440f5f0b xc1b6c0f0 1 xc1b6c0f0 1} {x42940000 x4409ae53 xc1abfbc0 1 xc1abfbc0 1} {x42960000 x44049f4f xc19a7020 1 xc19a7020 1} {x42980000 x44000751 xc189dd40 1 xc189dd40 1} {x429a0000 x43f802f6 xc178e340 1 xc178e340 1} {x429c0000 x43f0806e xc16e08c0 1 xc16e08c0 1} {x429e0000 x43e9226a xc177a120 1 xc177a120 1} {x42a00000 x43e1065c xc18a68b8 1 xc18a68b8 1} {x42a20000 x43d7d553 xc197d280 1 xc197d280 1} {x42a40000 x43ce0c0c xc1957880 1 xc1957880 1} {x42a60000 x43c52643 xc197b8b8 1 xc197b8b8 1} {x42a80000 x43bb14f5 xc19fa1d0 1 xc19fa1d0 1} {x42aa0000 x43b13209 xc1937b80 1 xc1937b80 1} {x42ac0000 x43a8a585 xc1862018 1 xc1862018 1} {x42ae0000 x43a06e06 xc1848968 1 xc1848968 1} {x42b00000 x43981458 xc1839c30 1 xc1839c30 1} {x42b20000 x438ffa80 xc1883720 1 xc1883720 1} {x42b40000 x43870d74 xc195b104 1 xc195b104 1} {x42b60000 x437a88bf xc19b2800 1 xc19b2800 1} {x42b80000 x436750e8 xc1973140 1 xc1973140 1} {x42ba0000 x4354bc6f xc18fccf4 1 xc18fccf4 1} {x42bc0000 x43435dab xc18487d8 1 xc18487d8 1} {x42be0000 x43339a79 xc167aa88 1 xc167aa88 1} {x42c00000 x4326685a xc145ee70 1 xc145ee70 1} {x42c20000 x431adcab xc1301698 1 xc1301698 1} {x42c40000 x43106587 xc1301550 1 xc1301550 1} {x42c60000 x4304da01 xc1400538 1 xc1400538 1} {x42c80000 x42f0c9c0 xc13df990 1 xc13df990 1} {x42ca0000 x42da359e xc12e7fb0 1 xc12e7fb0 1} {x42cc0000 x42c529d4 xc13335d0 1 xc13335d0 1} {x42ce0000 x42ad682a xc130c190 1 xc130c190 1} {x42d00000 x4298f970 xc1189904 1 xc1189904 1} {x42d20000 x428741e9 xc105d5a8 1 xc105d5a8 1} {x42d40000 x426f080c xc0f7251c 1 xc0f7251c 1} {x42d60000 x4250ba8b xc0e9d35c 1 xc0e9d35c 1} {x42d80000 x42349335 xc0e752ec 1 xc0e752ec 1} {x42da0000 x4216e5d0 xc0eafc2c 1 xc0eafc2c 1} {x42dc0000 x41f3a854 xc0db8f7e 1 xc0db8f7e 1} {x42de0000 x41c003e1 xc0b2f7a4 1 xc0b2f7a4 1} {x42e00000 x419a2c82 xc08773b9 1 xc08773b9 1} {x42e20000 x41789409 xc0558b9e 1 xc0558b9e 1} {x42e40000 x41499335 xc0287f9e 1 xc0287f9e 1} {x42e60000 x4124543a xbfda4918 1 xbfda4918 1} {x42e80000 x411300ef xbf802978 1 xbf802978 1} {x42ea0000 x410449dc xbf826124 1 xbf826124 1} {x42ec0000 x40e4d14c xbf7d4eb4 1 xbf7d4eb4 1} {x42ee0000 x40c9400b xbf7642f8 1 xbf7642f8 1} {x42f00000 x40a7408e xbfa1f98d 1 xbfa1f98d 1} {x42f20000 x40708689 xbfb65fb7 1 xbfb65fb7 1} {x42f40000 x40182165 xbf9f9e13 1 xbf9f9e13 1} {x42f60000 x3fa1d0ec xbf651c70 1 xbf651c70 1} {x42f80000 x3f164cb5 xbf1ca19f 1 xbf1ca19f 1} {x42fa0000 x3d25e9ae xbdf8de85 1 xbdf8de85 1} {x42fc0000 0 -} {x42fe0000 x3e7e4124 x3e8cc82e 1 x3e8cc82e 1} {x43000000 x3f0cc82e x3ebeb7cd 1 x3ebeb7cd 1} {x43010000 x3f7e4816 x3f205ed4 1 x3f205ed4 1} {x43020000 x3fe6c2eb x3f641efd 1 x3f641efd 1} {x43030000 x4031a184 x3f90b978 1 x3f90b978 1} {x43040000 x40820d77 x3f887600 1 x3f887600 1} {x43050000 x409d0bc2 x3f3768b8 1 x3f3768b8 1} {x43060000 x40afe7a5 x3f27d538 1 x3f27d538 1} {x43070000 x40c70110 x3f75eb94 1 x3f75eb94 1} {x43080000 x40ed628a x3faa5144 1 x3faa5144 1} {x43090000 x410e14d9 x3fdb36c8 1 x3fdb36c8 1} {x430a0000 x412d7ef7 x3fba93ac 1 x3fba93ac 1} {x430b0000 x413cb9c4 x3f619080 1 x3f619080 1} {x430c0000 x4149b107 x3f7927a0 1 x3f7927a0 1} {x430d0000 x415bdeb8 x3f9a7808 1 x3f9a7808 1} {x430e0000 x41704f09 x3fa9dc78 1 x3fa9dc78 1} {x430f0000 x41832aeb x3faae684 1 x3faae684 1} {x43100000 x418d8455 x3fa8c710 1 x3fa8c710 1} {x43110000 x419843cd x3fa4caa8 1 x3fa4caa8 1} {x43120000 x41a21daa x3f8bf648 1 x3f8bf648 1} {x43130000 x41a9c296 x3f50ed20 1 x3f50ed20 1} {x43140000 x41af2c7c x3d84d800 1 x3d84d800 1} {x43150000 x41af58c4 -} {x43160000 x41a267af xc01b4cfc 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke67 262656 bezier {cc {f 8224} {p {0 0 1} {x447839db x43ff076d 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke68 262656 bezier {cc {f 8224} {p {0 0 1} {x447839db x43ff076d 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3d7890c 0 1 x40cce890 1} {x42580000 xc3d4333e x40e68960 1 x40e68960 1} {x425c0000 xc3d054c1 x41061680 1 x41061680 1} {x42600000 xc3cbd1d6 x411fde10 1 x411fde10 1} {x42640000 xc3c656e0 x413008a0 1 x413008a0 1} {x42680000 xc3c0d14c x412d5060 1 x412d5060 1} {x426c0000 xc3bb81da x4129a6a0 1 x4129a6a0 1} {x42700000 xc3b636e2 x412bae50 1 x412bae50 1} {x42740000 xc3b0c6f5 x413146d0 1 x413146d0 1} {x42780000 xc3ab2275 x412c1d80 1 x412c1d80 1} {x427c0000 xc3a6051d x41279310 1 x41279310 1} {x42800000 xc3a0a944 x4124b310 1 x4124b310 1} {x42820000 xc39bb9ec x410d9700 1 x410d9700 1} {x42840000 xc397cfd4 x40fc5280 1 x40fc5280 1} {x42860000 xc393d758 x4104dd10 1 x4104dd10 1} {x42880000 xc38f8203 x4106d5a0 1 x4106d5a0 1} {x428a0000 xc38b69fe x40fc0da0 1 x40fc0da0 1} {x428c0000 xc387a196 x40e7f000 1 x40e7f000 1} {x428e0000 xc3842a7e x40e279e0 1 x40e279e0 1} {x42900000 xc3808dc7 x40f12070 1 x40f12070 1} {x42920000 xc37942f5 x40ee88f0 1 x40ee88f0 1} {x42940000 xc37232ff x40cea9b0 1 x40cea9b0 1} {x42960000 xc36c585a x40aa8a00 1 x40aa8a00 1} {x42980000 xc3678a5f x409679d0 1 x409679d0 1} {x429a0000 xc362f0bd x408aec40 1 x408aec40 1} {x429c0000 xc35edb9b x407dc440 1 x407dc440 1} {x429e0000 xc35b029b x407ddbc0 1 x407ddbc0 1} {x42a00000 xc356ecbd x408b6940 1 x408b6940 1} {x42a20000 xc3524c07 x40a53730 1 x40a53730 1} {x42a40000 xc34c994a x40c43910 1 x40c43910 1} {x42a60000 xc3460876 x40bb4010 1 x40bb4010 1} {x42a80000 xc340e549 x40a47710 1 x40a47710 1} {x42aa0000 xc33bc105 x409ea2c0 1 x409ea2c0 1} {x42ac0000 xc336fb1d x40892790 1 x40892790 1} {x42ae0000 xc3332e8c x405288e0 1 x405288e0 1} {x42b00000 xc33066d6 x401a5980 1 x401a5980 1} {x42b20000 xc32e5bc0 x3ff36440 1 x3ff36440 1} {x42b40000 xc32c9945 x3fed0440 1 x3fed0440 1} {x42b60000 xc32aa7af x40022920 1 x40022920 1} {x42b80000 xc32887fc x40035960 1 x40035960 1} {x42ba0000 xc3268ce4 x3fffdc00 1 x3fffdc00 1} {x42bc0000 xc324888c x40016e60 1 x40016e60 1} {x42be0000 xc3228171 x3ff9d480 1 x3ff9d480 1} {x42c00000 xc320a13a x3ff3c4c0 1 x3ff3c4c0 1} {x42c20000 xc31eb25e x4056f0c0 1 x4056f0c0 1} {x42c40000 xc319e9b4 x409fa860 1 x409fa860 1} {x42c60000 xc314b7d8 x40a8c1f0 1 x40a8c1f0 1} {x42c80000 xc30f5d95 x40a90a40 1 x40a90a40 1} {x42ca0000 xc30a2734 x40ab8f40 1 x40ab8f40 1} {x42cc0000 xc304a4a1 x40aa4e80 1 x40aa4e80 1} {x42ce0000 xc2ff0498 x409c7db0 1 x409c7db0 1} {x42d00000 xc2f5b98c x4088b190 1 x4088b190 1} {x42d20000 xc2edee66 x407b1bd0 1 x407b1bd0 1} {x42d40000 xc2e607cf x407d8480 1 x407d8480 1} {x42d60000 xc2de161e x407b96a0 1 x407b96a0 1} {x42d80000 xc2d64e65 x40773880 1 x40773880 1} {x42da0000 xc2cea296 x40792f40 1 x40792f40 1} {x42dc0000 xc2c6bb71 x40814d80 1 x40814d80 1} {x42de0000 xc2be78e6 x4088efb0 1 x4088efb0 1} {x42e00000 xc2b59d7b x40911b20 1 x40911b20 1} {x42e20000 xc2ac5582 x4096fde0 1 x4096fde0 1} {x42e40000 xc2a2bdbf x4099e818 1 x4099e818 1} {x42e60000 xc299187f x409e5ea0 1 x409e5ea0 1} {x42e80000 xc28ef1eb x40a7bb00 1 x40a7bb00 1} {x42ea0000 xc284211f x40af2658 1 x40af2658 1} {x42ec0000 xc2721a40 x40c2933c 1 x40c2933c 1} {x42ee0000 xc2579d6f x40ce5b60 1 x40ce5b60 1} {x42f00000 xc23e8368 x40e5c9f0 1 x40e5c9f0 1} {x42f20000 xc21e2af3 x40f7e4d4 1 x40f7e4d4 1} {x42f40000 xc2008a33 x41006819 1 x41006819 1} {x42f60000 xc1bbedcd x40fe4452 1 x40fe4452 1} {x42f80000 xc181f23d x40fb3bd0 1 x40fb3bd0 1} {x42fa0000 xc0f93f95 x4101f23d 1 x4101f23d 1} {x42fc0000 0 x41026863 1 x41026863 1} {x42fe0000 x410830fb x41052034 1 x41052034 1} {x43000000 x41852034 x40ff6caf 1 x40ff6caf 1} {x43010000 x41c3ced5 x40f47ce8 1 x40f47ce8 1} {x43020000 x41ff5ea8 x40e6b4b6 1 x40e6b4b6 1} {x43030000 x421b9498 x40d73a3c 1 x40d73a3c 1} {x43040000 x42357de3 x40c5a51c 1 x40c5a51c 1} {x43050000 x424cfddf x40b3c050 1 x40b3c050 1} {x43060000 x42626df7 x409f80b0 1 x409f80b0 1} {x43070000 x4274de0b x4082975c 1 x4082975c 1} {x43080000 x428189e7 x40619268 1 x40619268 1} {x43090000 x4288882c x4054a6f0 1 x4054a6f0 1} {x430a0000 x428ed456 x4042c7f0 1 x4042c7f0 1} {x430b0000 x4294b4ab x4031f6e0 1 x4031f6e0 1} {x430c0000 x4299f3c4 x40225c10 1 x40225c10 1} {x430d0000 x429eda6c x402053b0 1 x402053b0 1} {x430e0000 x42a3f8ff x402be700 1 x402be700 1} {x430f0000 x42a998dc x4035be20 1 x4035be20 1} {x43100000 x42af54e1 x403d8ed0 1 x403d8ed0 1} {x43110000 x42b571c9 x403d3250 1 x403d3250 1} {x43120000 x42bb2806 x403454e0 1 x403454e0 1} {x43130000 x42c0b717 x4020ff00 1 x4020ff00 1} {x43140000 x42c537f6 x3fe4e3a0 1 x3fe4e3a0 1} {x43150000 x42c7de34 x3f55d780 1 x3f55d780 1} {x43160000 x42c88f54 x3dcf6200 1 0 1}} {{x42540000 x44877f33 0 1 xc15de8e0 1} {x42580000 x4485b1f6 xc17809c0 1 xc17809c0 1} {x425c0000 x44839f0c xc186ecc0 1 xc186ecc0 1} {x42600000 x44817a90 xc1883160 1 xc1883160 1} {x42640000 x447ebb02 xc1847e30 1 xc1847e30 1} {x42680000 x447aad3d xc1874940 1 xc1874940 1} {x426c0000 x4476466e xc18811e0 1 xc18811e0 1} {x42700000 x44722c1f xc18cbd70 1 xc18cbd70 1} {x42740000 x446d7a97 xc19dbfb0 1 xc19dbfb0 1} {x42780000 x44685024 xc1ab15d0 1 xc1ab15d0 1} {x427c0000 x4462c93a xc1bea5f0 1 xc1bea5f0 1} {x42800000 x445c65c5 xc1cb5cc0 1 xc1cb5cc0 1} {x42820000 x4456136e xc1c7ff10 1 xc1c7ff10 1} {x42840000 x444fe5d4 xc1c6fde0 1 xc1c6fde0 1} {x42860000 x4449a390 xc1cf6d90 1 xc1cf6d90 1} {x42880000 x4442eefb xc1ce6ac0 1 xc1ce6ac0 1} {x428a0000 x443cbce4 xc1c8d8d0 1 xc1c8d8d0 1} {x428c0000 x4436616e xc1cfe350 1 xc1cfe350 1} {x428e0000 x442fbeaf xc1d67e10 1 xc1d67e10 1} {x42900000 x4428f98d xc1ddd4f0 1 xc1ddd4f0 1} {x42920000 x4421e160 xc1dc1d90 1 xc1dc1d90 1} {x42940000 x441b37b4 xc1d17990 1 xc1d17990 1} {x42960000 x4414c9c7 xc1c8e700 1 xc1c8e700 1} {x42980000 x440ea944 xc1bca580 1 xc1bca580 1} {x429a0000 x4408ff6f xc1b19450 1 xc1b19450 1} {x429c0000 x44038fff xc1ac6d90 1 xc1ac6d90 1} {x429e0000 x43fc712c xc1a9c898 1 xc1a9c898 1} {x42a00000 x43f1e6eb xc1a8b820 1 xc1a8b820 1} {x42a20000 x43e75a28 xc1a86898 1 xc1a86898 1} {x42a40000 x43dcd9d8 xc1a397c0 1 xc1a397c0 1} {x42a60000 x43d2e730 xc1a339b0 1 xc1a339b0 1} {x42a80000 x43c872a2 xc1a6a380 1 xc1a6a380 1} {x42aa0000 x43be12c0 xc1a5a350 1 xc1a5a350 1} {x42ac0000 x43b3be38 xc1a52f70 1 xc1a52f70 1} {x42ae0000 x43a96cd2 xc1a3c728 1 xc1a3c728 1} {x42b00000 x439f4553 xc1a380a8 1 xc1a380a8 1} {x42b20000 x4394fcbd xc1a57d10 1 xc1a57d10 1} {x42b40000 x438a95b1 xc1a7c088 1 xc1a7c088 1} {x42b60000 x438004ac xc1aa5bac 1 xc1aa5bac 1} {x42b80000 x436a9477 xc1a89fbc 1 xc1a89fbc 1} {x42ba0000 x4355e169 xc1a258bc 1 xc1a258bc 1} {x42bc0000 x4341fe48 xc199ea38 1 xc199ea38 1} {x42be0000 x432f66db xc18ef180 1 xc18ef180 1} {x42c00000 x431e41e8 xc183f66c 1 xc183f66c 1} {x42c20000 x430e6940 xc17284d8 1 xc17284d8 1} {x42c40000 x42ffe29a xc16567d0 1 xc16567d0 1} {x42c60000 x42e3788c xc1612cd0 1 xc1612cd0 1} {x42c80000 x42c79766 xc15fe9cc 1 xc15fe9cc 1} {x42ca0000 x42ab7e19 xc1600574 1 xc1600574 1} {x42cc0000 x428f9609 xc14e3770 1 xc14e3770 1} {x42ce0000 x426fe07a xc13c406c 1 xc13c406c 1} {x42d00000 x42410bdc xc1330aa6 1 xc1330aa6 1} {x42d20000 x42165b27 xc1273ab6 1 xc1273ab6 1} {x42d40000 x41dadd02 xc11c9c56 1 xc11c9c56 1} {x42d60000 x419019f8 xc10e4be5 1 xc10e4be5 1} {x42d80000 x4119223a xc10253b7 1 xc10253b7 1} {x42da0000 x3fdc640c xc0f3823f 1 xc0f3823f 1} {x42dc0000 xc0b4c00a xc0d46d2c 1 xc0d46d2c 1} {x42de0000 xc138e0aa xc0a0e5f2 1 xc0a0e5f2 1} {x42e00000 xc17b45f7 xc0567894 1 xc0567894 1} {x42e20000 xc1920e7a xc004ab86 1 xc004ab86 1} {x42e40000 xc19ecddd xbf59f4a0 1 xbf59f4a0 1} {x42e60000 xc1a11314 -} {x42e80000 xc19ad2b3 x3f92e918 1 x3f92e918 1} {x42ea0000 xc18eb5f1 x3fb204f8 1 x3fb204f8 1} {x42ec0000 xc1849214 x3f9dba1c 1 x3f9dba1c 1} {x42ee0000 xc175fd5b x3fce6f64 1 x3fce6f64 1} {x42f00000 xc155884f x3fbc4234 1 x3fbc4234 1} {x42f20000 xc146ecce x3fb9cb48 1 x3fb9cb48 1} {x42f40000 xc127157d x3fcca2dc 1 x3fcca2dc 1} {x42f60000 xc113c417 x40098943 1 x40098943 1} {x42f80000 xc0c4a1b7 x402de714 1 x402de714 1} {x42fa0000 xc0734233 x4044a1b7 1 x4044a1b7 1} {x42fc0000 0 x4067cfa4 1 x4067cfa4 1} {x42fe0000 x405c5d14 x406bca9e 1 x406bca9e 1} {x43000000 x40ebca9e x408271f6 1 x408271f6 1} {x43010000 x4139893b x408f1ad1 1 x408f1ad1 1} {x43020000 x41828010 x409fa009 1 x409fa009 1} {x43030000 x41ac94a2 x40ad0002 1 x40ad0002 1} {x43040000 x41d90011 x40b55418 1 x40b55418 1} {x43050000 x42039f57 x40bfb5be 1 x40bfb5be 1} {x43060000 x421c6d78 x40d7c19c 1 x40d7c19c 1} {x43070000 x42398fbe x40ecc858 1 x40ecc858 1} {x43080000 x42579f8e x40f299b8 1 x40f299b8 1} {x43090000 x4276362c x40ef5510 1 x40ef5510 1} {x430a0000 x4289ba69 x40e2e1b8 1 x40e2e1b8 1} {x430b0000 x4297774d x40d72d48 1 x40d72d48 1} {x430c0000 x42a4a012 x40d70e70 1 x40d70e70 1} {x430d0000 x42b2591b x40db2128 1 x40db2128 1} {x430e0000 x42c00437 x40d73738 1 x40d73738 1} {x430f0000 x42cd4002 x40d5dd80 1 x40d5dd80 1} {x43100000 x42dabfe7 x40d53720 1 x40d53720 1} {x43110000 x42e7e6e6 x40cdce80 1 x40cdce80 1} {x43120000 x42f479b7 x40c33800 1 x40c33800 1} {x43130000 x430026f3 x40afefe8 1 x40afefe8 1} {x43140000 x43053bda x4096bcd0 1 x4096bcd0 1} {x43150000 x430992c0 x40549000 1 x40549000 1} {x43160000 x430be05a x3fe5a380 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke69 262656 bezier {cc {f 8224} {p {0 0 1} {x44d38c9c x4477dd60 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke70 262656 bezier {cc {f 8224} {p {0 0 1} {x44d38c9c x4477dd60 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3546c30 0 1 x40a7a320 1} {x42580000 xc34efdc0 x40ba23c0 1 x40ba23c0 1} {x425c0000 xc348c9f4 x40c24c90 1 x40c24c90 1} {x42600000 xc342d8f7 x40be2440 1 x40be2440 1} {x42640000 xc33ce7b0 x40d50210 1 x40d50210 1} {x42680000 xc33588d6 x40f4eba0 1 x40f4eba0 1} {x426c0000 xc32d98f6 x40e53c50 1 x40e53c50 1} {x42700000 xc3273511 x40cb5860 1 x40cb5860 1} {x42740000 xc320e370 x40be75c0 1 x40be75c0 1} {x42780000 xc31b4db5 x40c703f0 1 x40c703f0 1} {x427c0000 xc3147331 x40e9d310 1 x40e9d310 1} {x42800000 xc30cb084 x40eda380 1 x40eda380 1} {x42820000 xc30598f9 x40cb2f20 1 x40cb2f20 1} {x42840000 xc2fffb24 x40b29320 1 x40b29320 1} {x42860000 xc2f4df8e x40a79458 1 x40a79458 1} {x42880000 xc2eb0899 x409d46b0 1 x409d46b0 1} {x428a0000 xc2e136b8 x40538470 1 x40538470 1} {x428c0000 xc2ddd052 x4052e4a0 1 x4052e4a0 1} {x428e0000 xc2d4086e x40a01318 1 x40a01318 1} {x42900000 xc2c9cdef x40a91f38 1 x40a91f38 1} {x42920000 xc2bee487 x40a67868 1 x40a67868 1} {x42940000 xc2b4fee2 x409683e8 1 x409683e8 1} {x42960000 xc2ac140a x408de598 1 x408de598 1} {x42980000 xc2a3422f x4081b700 1 x4081b700 1} {x429a0000 xc29bdd2a x4063efa0 1 x4063efa0 1} {x429c0000 xc2950335 x3febecc0 1 x3febecc0 1} {x429e0000 xc293c8a4 x3f5a4c80 1 x3f5a4c80 1} {x42a00000 xc2919a03 x3fa0cec0 1 x3fa0cec0 1} {x42a20000 xc28ec22e x3fcc22e0 1 x3fcc22e0 1} {x42a40000 xc28b38ec x3fdbd080 1 x3fdbd080 1} {x42a60000 xc287e3aa x3faca200 1 x3faca200 1} {x42a80000 xc285d3dc x3f7f8e40 1 x3f7f8e40 1} {x42aa0000 xc283e571 -} {x42ac0000 xc284133a xbe895b00 1 xbe895b00 1} {x42ae0000 xc2866598 xbfbff6a0 1 xbfbff6a0 1} {x42b00000 xc28a12ef xbfe09960 1 xbfe09960 1} {x42b20000 xc28d6a63 xbfdf4180 1 xbfdf4180 1} {x42b40000 xc2910cfb xbfb68700 1 xbfb68700 1} {x42b60000 xc2931e9b xbf792cc0 1 xbf792cc0 1} {x42b80000 xc294f1ae xbf86d020 1 xbf86d020 1} {x42ba0000 xc297551c xbfa63c00 1 xbfa63c00 1} {x42bc0000 xc29a238e xbfbc5a20 1 xbfbc5a20 1} {x42be0000 xc29d37ed xbfbf8ca0 1 xbfbf8ca0 1} {x42c00000 xc2a01ff3 xbfc46b20 1 xbfc46b20 1} {x42c20000 xc2a35b46 -} {x42c40000 xc2a1a865 x3f8bcc00 1 x3f8bcc00 1} {x42c60000 xc29efce6 x3f87a620 1 x3f87a620 1} {x42c80000 xc29d6b34 x3f670600 1 x3f670600 1} {x42ca0000 xc29b60ce x3f922cc0 1 x3f922cc0 1} {x42cc0000 xc298d9ce x3f8eaa20 1 x3f8eaa20 1} {x42ce0000 xc296eb7d x3f6d1e80 1 x3f6d1e80 1} {x42d00000 xc2952554 x3f521780 1 x3f521780 1} {x42d20000 xc293a31f x3f4158c0 1 x3f4158c0 1} {x42d40000 xc2921ff1 x3f402a40 1 x3f402a40 1} {x42d60000 xc290a276 x3f910600 1 x3f910600 1} {x42d80000 xc28d97c1 x3fd88740 1 x3fd88740 1} {x42da0000 xc289de3c x40017af0 1 x40017af0 1} {x42dc0000 xc2858012 x400acaf0 1 x400acaf0 1} {x42de0000 xc281318d x400f62a8 1 x400f62a8 1} {x42e00000 xc27913cf x402c33a8 1 x402c33a8 1} {x42e20000 xc26cdca5 x4040ad10 1 x4040ad10 1} {x42e40000 xc260fe2d x40421e90 1 x40421e90 1} {x42e60000 xc25498d3 x404808a0 1 x404808a0 1} {x42e80000 xc247fd19 x40537eb8 1 x40537eb8 1} {x42ea0000 xc23a28fc x40673eb0 1 x40673eb0 1} {x42ec0000 xc22b1543 x408270b8 1 x408270b8 1} {x42ee0000 xc2198cce x408e5290 1 x408e5290 1} {x42f00000 xc207809f x409c9f5e 1 x409c9f5e 1} {x42f20000 xc1e4c9ed x40b024f2 1 x40b024f2 1} {x42f40000 xc1b6eec5 x40b16512 1 x40b16512 1} {x42f60000 xc18c1764 x40b9af76 1 x40b9af76 1} {x42f80000 xc1342e14 x40b9d71c 1 x40b9d71c 1} {x42fa0000 xc0bcaf59 x40b42e14 1 x40b42e14 1} {x42fc0000 0 x40b76213 1 x40b76213 1} {x42fe0000 x40b214cd x40b9a99c 1 x40b9a99c 1} {x43000000 x4139a99c x40b1c3fa 1 x40b1c3fa 1} {x43010000 x41856730 x409e4e36 1 x409e4e36 1} {x43020000 x41abfbe9 x4092f9ee 1 x4092f9ee 1} {x43030000 x41cee427 x408369b0 1 x408369b0 1} {x43040000 x41edb0c1 x4067870c 1 x4067870c 1} {x43050000 x420462f5 x404384bc 1 x404384bc 1} {x43060000 x420f48f8 x402bcc68 1 x402bcc68 1} {x43070000 x4219dc82 x401c3510 1 x401c3510 1} {x43080000 x4222cf9a x40028ba0 1 x40028ba0 1} {x43090000 x422a2df6 x3ffa4ae0 1 x3ffa4ae0 1} {x430a0000 x42327448 x3feb74e0 1 x3feb74e0 1} {x430b0000 x4238e544 x3fe405a0 1 x3fe405a0 1} {x430c0000 x4240b4a2 x3ff04f30 1 x3ff04f30 1} {x430d0000 x4247ea37 x3ff00460 1 x3ff00460 1} {x430e0000 x424fb4e8 x40019df0 1 x40019df0 1} {x430f0000 x42581df5 x400e23d8 1 x400e23d8 1} {x43100000 x42617963 x401dcfc0 1 x401dcfc0 1} {x43110000 x426bd7ed x401378a0 1 x401378a0 1} {x43120000 x4273e877 x3feba140 1 x3feba140 1} {x43130000 x427a9201 x3fd80970 1 x3fd80970 1} {x43140000 x4280b487 x3f83c510 1 x3f83c510 1} {x43150000 x42816729 -} {x43160000 x428070d1 xbf38c200 1 0 1}} {{x42540000 x444a1e0b 0 1 xc111e8a0 1} {x42580000 x4447e8f3 xc10400c0 1 xc10400c0 1} {x425c0000 x4445fe05 xc109a5e0 1 xc109a5e0 1} {x42600000 x44439bc4 xc12f6b60 1 xc12f6b60 1} {x42640000 x444082aa xc1573440 1 xc1573440 1} {x42680000 x443ce222 xc178a460 1 xc178a460 1} {x426c0000 x4438bd87 xc16a1520 1 xc16a1520 1} {x42700000 x44359179 xc14dd180 1 xc14dd180 1} {x42740000 x44324efb xc1585940 1 xc1585940 1} {x42780000 x442eceaf xc16bfbe0 1 xc16bfbe0 1} {x427c0000 x442aef1c xc1838350 1 xc1838350 1} {x42800000 x4426967a xc188d280 1 xc188d280 1} {x42820000 x442261f4 xc1870b10 1 xc1870b10 1} {x42840000 x441e25c9 xc1892720 1 xc1892720 1} {x42860000 x4419cf82 xc1840ce0 1 xc1840ce0 1} {x42880000 x4415e4fb xc1774e60 1 xc1774e60 1} {x428a0000 x4412150f xc15cca20 1 xc15cca20 1} {x428c0000 x440efeaa xc1696e00 1 xc1696e00 1} {x428e0000 x440ac99f xc18a00e0 1 xc18a00e0 1} {x42900000 x44065e9c xc18fece0 1 xc18fece0 1} {x42920000 x4401cad1 xc19279f8 1 xc19279f8 1} {x42940000 x43fa6df9 xc18f2368 1 xc18f2368 1} {x42960000 x43f1b135 xc189cf18 1 xc189cf18 1} {x42980000 x43e93416 xc17a8690 1 xc17a8690 1} {x429a0000 x43e208cc xc15e1d30 1 xc15e1d30 1} {x429c0000 x43db5243 xc151c580 1 xc151c580 1} {x429e0000 x43d4ec74 xc1529910 1 xc1529910 1} {x42a00000 x43ce28b2 xc160c030 1 xc160c030 1} {x42a20000 x43c6e071 xc1712b90 1 xc1712b90 1} {x42a40000 x43bf15f9 xc17c2d20 1 xc17c2d20 1} {x42a60000 x43b71d9f xc17da960 1 xc17da960 1} {x42a80000 x43af3b63 xc17b24d0 1 xc17b24d0 1} {x42aa0000 x43a76b52 xc17056d0 1 xc17056d0 1} {x42ac0000 x43a035f6 xc15f9bd0 1 xc15f9bd0 1} {x42ae0000 x43997195 xc159d4e0 1 xc159d4e0 1} {x42b00000 x439298a8 xc1615380 1 xc1615380 1} {x42b20000 x438b5c5d xc168c980 1 xc168c980 1} {x42b40000 x43840c10 xc1713380 1 xc1713380 1} {x42b60000 x4378924a xc1778920 1 xc1778920 1} {x42b80000 x436926fc xc17a5c70 1 xc17a5c70 1} {x42ba0000 x435946bc xc1722598 1 xc1722598 1} {x42bc0000 x434ae249 xc15facf8 1 xc15facf8 1} {x42be0000 x433d511d xc14d5430 1 xc14d5430 1} {x42c00000 x433137c3 xc13774d0 1 xc13774d0 1} {x42c20000 x43266283 xc1240840 1 xc1240840 1} {x42c40000 x431cb6bb xc1161b70 1 xc1161b70 1} {x42c60000 x43139f15 xc115df90 1 xc115df90 1} {x42c80000 x4309fac9 xc1185820 1 xc1185820 1} {x42ca0000 x43009411 xc11082c8 1 xc11082c8 1} {x42cc0000 x42efd4e0 xc10b9b1c 1 xc10b9b1c 1} {x42ce0000 x42de415b xc108fd98 1 xc108fd98 1} {x42d00000 x42cd957a xc0fc5980 1 xc0fc5980 1} {x42d20000 x42beb62b xc0e6d1d8 1 xc0e6d1d8 1} {x42d40000 x42b0bb3f xc0d90fe0 1 xc0d90fe0 1} {x42d60000 x42a3942f xc0cff280 1 xc0cff280 1} {x42d80000 x4296bcef xc0d51048 1 xc0d51048 1} {x42da0000 x4288f226 xc0db3478 1 xc0db3478 1} {x42dc0000 x4276acc0 xc0daaadc 1 xc0daaadc 1} {x42de0000 x425b3995 xc0c26628 1 xc0c26628 1} {x42e00000 x42461336 xc09fb174 1 xc09fb174 1} {x42e20000 x42334d38 xc08f37b8 1 xc08f37b8 1} {x42e40000 x42224548 xc07ba528 1 xc07ba528 1} {x42e60000 x4213d893 xc0592110 1 xc0592110 1} {x42e80000 x42072126 xc04045c8 1 xc04045c8 1} {x42ea0000 x41f79fb4 xc0489fa4 1 xc0489fa4 1} {x42ec0000 x41dc1a63 xc0546634 1 xc0546634 1} {x42ee0000 x41c28627 xc04f0fc4 1 xc04f0fc4 1} {x42f00000 x41a85672 xc0678f74 1 xc0678f74 1} {x42f20000 x4188a24a xc076487e 1 xc076487e 1} {x42f40000 x415588a5 xc06a7060 1 xc06a7060 1} {x42f60000 x411c0c64 xc065308c 1 xc065308c 1} {x42f80000 x40c5e0be xc059f38a 1 xc059f38a 1} {x42fa0000 x403c4a7c xc045e0be 1 xc045e0be 1} {x42fc0000 0 xc0310fd8 1 xc0310fd8 1} {x42fe0000 xc025d535 xc0349e71 1 xc0349e71 1} {x43000000 xc0b49e71 xc03c261a 1 xc03c261a 1} {x43010000 xc107885a xc02226cd 1 xc02226cd 1} {x43020000 xc12b629f xc00de9de 1 xc00de9de 1} {x43030000 xc14e7d49 xbff1c230 1 xbff1c230 1} {x43040000 xc167d32b xbfd869dc 1 xbfd869dc 1} {x43050000 xc1824be0 xbfc8a88c 1 xbfc8a88c 1} {x43060000 xc18cfea7 xbfcbd978 1 xbfcbd978 1} {x43070000 xc19bc70f xbfc06b68 1 xbfc06b68 1} {x43080000 xc1a50c14 xbf53d560 1 xbf53d560 1} {x43090000 xc1a90465 xbf1743c0 1 xbf1743c0 1} {x430a0000 xc1ae8050 xbf522d00 1 xbf522d00 1} {x430b0000 xc1b62735 xbf704a30 1 xbf704a30 1} {x430c0000 xc1bd84f3 xbf872838 1 xbf872838 1} {x430d0000 xc1c70c3c xbf593650 1 xbf593650 1} {x430e0000 xc1cb1858 xbf30ede0 1 xbf30ede0 1} {x430f0000 xc1d21b1a xbf5957a0 1 xbf5957a0 1} {x43100000 xc1d8add2 xbf25f490 1 xbf25f490 1} {x43110000 xc1dc7a63 xbf05abc0 1 xbf05abc0 1} {x43120000 xc1e1088e xbf5c6550 1 xbf5c6550 1} {x43130000 xc1ea40b8 xbf7e0100 1 xbf7e0100 1} {x43140000 xc1f0e89e xbfad9348 1 xbfad9348 1} {x43150000 xc1fff321 xc01f6cd0 1 xc01f6cd0 1} {x43160000 xc20c61e9 xc05a11e4 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke71 262656 bezier {cc {f 8224} {p {0 0 1} {x44effd2f x442505e3 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke72 262656 bezier {cc {f 8224} {p {0 0 1} {x44effd2f x442505e3 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc0a64b6b 0 1 x3d2a0ea0 1} {x42580000 xc09fa7ec x3f0a1214 1 x3f0a1214 1} {x425c0000 xc083c6e6 x3f981316 1 x3f981316 1} {x42600000 xc0273cc2 x3fe407ec 1 x3fe407ec 1} {x42640000 xbf0e177e x405312ae 1 x405312ae 1} {x42680000 x407ee899 x40a53756 1 x40a53756 1} {x426c0000 x411c55de x406ffce4 1 x406ffce4 1} {x42700000 x4137b898 x3fe1f424 1 x3fe1f424 1} {x42740000 x4154d2e7 x3fc10024 1 x3fc10024 1} {x42780000 x4167f8a1 x3f9ff4d0 1 x3f9ff4d0 1} {x427c0000 x417cd01b x3f8f43ec 1 x3f8f43ec 1} {x42800000 x4185e4ce x4002235a 1 x4002235a 1} {x42820000 x419ef0e4 x4073a950 1 x4073a950 1} {x42840000 x41c2cf22 -} {x42860000 x41ba445a xbfaee418 1 xbfaee418 1} {x42880000 x41acf29f xbf8ef258 1 xbf8ef258 1} {x428a0000 x41a8660f xbfb12b18 1 xbfb12b18 1} {x428c0000 x4196cd3c -} {x428e0000 x41ba53c3 x408d8504 1 x408d8504 1} {x42900000 x41dd8fbe x406d6574 1 x406d6574 1} {x42920000 x41f5ad20 x404f9e70 1 x404f9e70 1} {x42940000 x4208bbad x40367138 1 x40367138 1} {x42960000 x4211a4b7 x40043480 1 x40043480 1} {x42980000 x4219423d x400677b8 1 x400677b8 1} {x429a0000 x422273ae x40170c30 1 x40170c30 1} {x429c0000 x422c23c3 x3fd5a8b0 1 x3fd5a8b0 1} {x429e0000 x422fce39 x3f6b2680 1 x3f6b2680 1} {x42a00000 x42337cf7 x3f64b5a0 1 x3f64b5a0 1} {x42a20000 x4236f3e6 x3f73e8c0 1 x3f73e8c0 1} {x42a40000 x423b1c3d x3f53cf40 1 x3f53cf40 1} {x42a60000 x423d9260 -} {x42a80000 x423d1d8f -} {x42aa0000 x423dfe1d -} {x42ac0000 x423cd5fe xbf480a60 1 xbf480a60 1} {x42ae0000 x4237bdca xbfdd0940 1 xbfdd0940 1} {x42b00000 x422f056a xc008fa90 1 xc008fa90 1} {x42b20000 x42269e78 xc00dfa10 1 xc00dfa10 1} {x42b40000 x421d4628 xc01130d0 1 xc01130d0 1} {x42b60000 x4214785e xc00263e0 1 xc00263e0 1} {x42b80000 x420cf9ac xbff0c630 1 xbff0c630 1} {x42ba0000 x42056bfb xc0158bf0 1 xc0158bf0 1} {x42bc0000 x41f4905c xc0239348 1 xc0239348 1} {x42be0000 x41e1f324 xc0187f0c 1 xc0187f0c 1} {x42c00000 x41ce7099 xc038b590 1 xc038b590 1} {x42c20000 x41b3c5c0 xc002bd90 1 xc002bd90 1} {x42c40000 x41adc135 xbf104f20 1 xbf104f20 1} {x42c60000 x41aac0ce xbe6ffc00 1 xbe6ffc00 1} {x42c80000 x41aa0145 xbe8fa6c0 1 xbe8fa6c0 1} {x42ca0000 x418c5448 xc079a974 1 xc079a974 1} {x42cc0000 x41572dd0 xc0861f0f 1 xc0861f0f 1} {x42ce0000 x41128981 xc08914a4 1 xc08914a4 1} {x42d00000 x409c3259 xc0a026b7 1 xc0a026b7 1} {x42d20000 xbf59d361 xc0b2f668 1 xc0b2f668 1} {x42d40000 xc0c9ba77 xc0a9b51c 1 xc0a9b51c 1} {x42d60000 xc1375252 xc0a1ddd8 1 xc0a1ddd8 1} {x42d80000 xc1835d8a xc08fccf2 1 xc08fccf2 1} {x42da0000 xc1a38fa2 xc0763f80 1 xc0763f80 1} {x42dc0000 xc1c0ed6a xc0608abc 1 xc0608abc 1} {x42de0000 xc1dbb251 -} {x42e00000 xc1d6d0ce x3f60e7c0 1 x3f60e7c0 1} {x42e20000 xc1cda3d5 x3f9c7748 1 x3f9c7748 1} {x42e40000 xc1c341e5 x3fb7e688 1 x3fb7e688 1} {x42e60000 xc1b6a704 x3fc0bc00 1 x3fc0bc00 1} {x42e80000 xc1ab2a65 x3fbf9290 1 x3fbf9290 1} {x42ea0000 xc19eb4b2 x3fe47800 1 x3fe47800 1} {x42ec0000 xc18e9b65 x400fb442 1 x400fb442 1} {x42ee0000 xc1758f43 x402524b2 1 x402524b2 1} {x42f00000 xc14aa471 x4031075a 1 x4031075a 1} {x42f20000 xc11d0b96 x402e6755 1 x402e6755 1} {x42f40000 xc0e6e18d x4014425d 1 x4014425d 1} {x42f60000 xc0a5d4cf x40046303 1 x40046303 1} {x42f80000 xc044fd14 x3fe6d6be 1 x3fe6d6be 1} {x42fa0000 xbfc9a5c0 x3fc4fd14 1 x3fc4fd14 1} {x42fc0000 0 x3fba732b 1 x3fba732b 1} {x42fe0000 x3fab4096 x401ec8a5 1 x401ec8a5 1} {x43000000 x409ec8a5 x40616626 1 x40616626 1} {x43010000 x41061b26 x4053a6cd 1 x4053a6cd 1} {x43020000 x413937b9 x404d2ede 1 x404d2ede 1} {x43030000 x416cb295 x403a7e66 1 x403a7e66 1} {x43040000 x418b3b76 x402386a2 1 x402386a2 1} {x43050000 x419f3af3 x400c92d0 1 x400c92d0 1} {x43060000 x41ae602a x3fe72c40 1 x3fe72c40 1} {x43070000 x41bc207b x3fc2a7f8 1 x3fc2a7f8 1} {x43080000 x41c6b529 x3fa00148 1 x3fa00148 1} {x43090000 x41d020a4 x3f9c83f0 1 x3f9c83f0 1} {x430a0000 x41da45a7 x3fa9e8b8 1 x3fa9e8b8 1} {x430b0000 x41e55dbb x3fb9a5f0 1 x3fb9a5f0 1} {x430c0000 x41f17a65 x3fbef580 1 x3fbef580 1} {x430d0000 x41fd3c6b x3fc67f38 1 x3fc67f38 1} {x430e0000 x42052526 x3fd0da48 1 x3fd0da48 1} {x430f0000 x420babda x3fdb13a0 1 x3fdb13a0 1} {x43100000 x4212d660 x3fe3c780 1 x3fe3c780 1} {x43110000 x4219e852 x3fd6fc90 1 x3fd6fc90 1} {x43120000 x42204629 x3fc37c70 1 x3fc37c70 1} {x43130000 x42262019 x3f945b20 1 x3f945b20 1} {x43140000 x42298bdb -} {x43150000 x42296bd3 xbdc03000 1 xbdc03000 1} {x43160000 x42248e01 xbfe395e0 1 0 1}} {{x42540000 x4429a65a 0 1 xc111eac0 1} {x42580000 x44276069 xc1109f40 1 xc1109f40 1} {x425c0000 x44252160 xc105afe0 1 xc105afe0 1} {x42600000 x442332ea xc106e240 1 xc106e240 1} {x42640000 x4420ea4e xc123ba20 1 xc123ba20 1} {x42680000 x441e1519 xc146be80 1 xc146be80 1} {x426c0000 x441ab45a xc133c680 1 xc133c680 1} {x42700000 x441876e5 xc10ea140 1 xc10ea140 1} {x42740000 x44163f50 xc11ec780 1 xc11ec780 1} {x42780000 x441380a9 xc1305fc0 1 xc1305fc0 1} {x427c0000 x4410bc52 xc12df480 1 xc12df480 1} {x42800000 x440e1105 xc13d8180 1 xc13d8180 1} {x42820000 x440ad046 xc1657280 1 xc1657280 1} {x42840000 x4406e571 xc1412640 1 xc1412640 1} {x42860000 x4404c714 xc0ff2fc0 1 xc0ff2fc0 1} {x42880000 x4402e8b2 xc1031d20 1 xc1031d20 1} {x428a0000 x4400ae2b xc106c0b0 1 xc106c0b0 1} {x428c0000 x43fd6559 xc141d7a0 1 xc141d7a0 1} {x428e0000 x43f53edc xc183d860 1 xc183d860 1} {x42900000 x43ecea4d xc17b4580 1 xc17b4580 1} {x42920000 x43e58a84 xc17281b0 1 xc17281b0 1} {x42940000 x43ddc232 xc16cf4b0 1 xc16cf4b0 1} {x42960000 x43d6bb39 xc15af900 1 xc15af900 1} {x42980000 x43d012a2 xc14f91a0 1 xc14f91a0 1} {x429a0000 x43c9c21f xc14d7760 1 xc14d7760 1} {x429c0000 x43c33b2c xc14dcea0 1 xc14dcea0 1} {x429e0000 x43bce535 xc14f5ca0 1 xc14f5ca0 1} {x42a00000 x43b64562 xc153eda0 1 xc153eda0 1} {x42a20000 x43afa65b xc15cda90 1 xc15cda90 1} {x42a40000 x43a877b9 xc16e07a0 1 xc16e07a0 1} {x42a60000 x43a0c5e1 xc17f5ea0 1 xc17f5ea0 1} {x42a80000 x439881cf xc1803d78 1 xc1803d78 1} {x42aa0000 x4390be32 xc16f73b0 1 xc16f73b0 1} {x42ac0000 x43898a94 xc15be6b0 1 xc15be6b0 1} {x42ae0000 x4382ffc7 xc14f5950 1 xc14f5950 1} {x42b00000 x437929fe xc1433e20 1 xc1433e20 1} {x42b20000 x436d97ca xc1407888 1 xc1407888 1} {x42b40000 x43611aed xc14d5a50 1 xc14d5a50 1} {x42b60000 x4353ec80 xc149f108 1 xc149f108 1} {x42b80000 x4347dccc xc1411218 1 xc1411218 1} {x42ba0000 x433bca3d xc14674b0 1 xc14674b0 1} {x42bc0000 x432f0e36 xc1453348 1 xc1453348 1} {x42be0000 x432323d4 xc132c7b0 1 xc132c7b0 1} {x42c00000 x4318b540 xc12357a8 1 xc12357a8 1} {x42c20000 x430eb8df xc111a3b0 1 xc111a3b0 1} {x42c40000 x430680ca xc0fe32f0 1 xc0fe32f0 1} {x42c60000 x42fdab60 xc0f01b70 1 xc0f01b70 1} {x42c80000 x42eefe26 xc0c39900 1 xc0c39900 1} {x42ca0000 x42e53840 xc09bade0 1 xc09bade0 1} {x42cc0000 x42db886a xc086da48 1 xc086da48 1} {x42ce0000 x42d45cf7 xc06dd850 1 xc06dd850 1} {x42d00000 x42ccaae5 xc03ea750 1 xc03ea750 1} {x42d20000 x42c87282 xbfec3ea0 1 xbfec3ea0 1} {x42d40000 x42c548f0 xbfd8c640 1 xbfd8c640 1} {x42d60000 x42c1ac50 xc0274000 1 xc0274000 1} {x42d80000 x42bad4f0 xc0672170 1 xc0672170 1} {x42da0000 x42b33a39 xc09605a8 1 xc09605a8 1} {x42dc0000 x42a8143b xc0bd9da0 1 xc0bd9da0 1} {x42de0000 x429b8685 xc0c113a0 1 xc0c113a0 1} {x42e00000 x428ff1c7 xc0adc0a0 1 xc0adc0a0 1} {x42e20000 x4285ce71 xc09d1294 1 xc09d1294 1} {x42e40000 x42789ee9 xc08a587c 1 xc08a587c 1} {x42e60000 x426906c3 xc0813570 1 xc0813570 1} {x42e80000 x4258518d xc08154ac 1 xc08154ac 1} {x42ea0000 x4248b198 xc081c0bc 1 xc081c0bc 1} {x42ec0000 x4237e15e xc080daf4 1 xc080daf4 1} {x42ee0000 x42287adb xc0722830 1 xc0722830 1} {x42f00000 x42199c58 xc072ab10 1 xc072ab10 1} {x42f20000 x420a2579 xc0842a94 1 xc0842a94 1} {x42f40000 x41f12366 xc0b7e798 1 xc0b7e798 1} {x42f60000 x41b85726 xc0ec9212 1 xc0ec9212 1} {x42f80000 x4175b4ba xc0ffe3d4 1 xc0ffe3d4 1} {x42fa0000 x40e194f1 xc0f5b4ba 1 xc0f5b4ba 1} {x42fc0000 0 xc0d40046 1 xc0d40046 1} {x42fe0000 xc0c66b9c xc0ae448b 1 xc0ae448b 1} {x43000000 xc12e448b xc0910f11 1 xc0910f11 1} {x43010000 xc17444df xc083a9f3 1 xc083a9f3 1} {x43020000 xc198f73f xc071200e 1 xc071200e 1} {x43030000 xc1b66a73 xc062a2ac 1 xc062a2ac 1} {x43040000 xc1d19fea xc04c3e18 1 xc04c3e18 1} {x43050000 xc1e979f9 xc0477ef0 1 xc0477ef0 1} {x43060000 xc201bfd3 xc047bf5c 1 xc047bf5c 1} {x43070000 xc20db4e8 xc031bf78 1 xc031bf78 1} {x43080000 xc217f7c2 xc011b370 1 xc011b370 1} {x43090000 xc21feb56 xc0080180 1 xc0080180 1} {x430a0000 xc228f7f2 xc00afa68 1 xc00afa68 1} {x430b0000 xc2314aa3 xc0108d88 1 xc0108d88 1} {x430c0000 xc23b09a3 xc0106880 1 xc0106880 1} {x430d0000 xc24357b3 xbfee59f0 1 xbfee59f0 1} {x430e0000 xc249ef42 xbfcf0a90 1 xbfcf0a90 1} {x430f0000 xc250485c xbfddd890 1 xbfddd890 1} {x43100000 xc257cccb xc0024ff0 1 xc0024ff0 1} {x43110000 xc260925a xbfeda880 1 xbfeda880 1} {x43120000 xc266a753 xbfd9f580 1 xbfd9f580 1} {x43130000 xc26e31b2 xbffb3b30 1 xbffb3b30 1} {x43140000 xc2765b06 xc0145780 1 xc0145780 1} {x43150000 xc2805e51 xc0645ce0 1 xc0645ce0 1} {x43160000 xc2897351 xc0a0e0c8 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke73 262656 bezier {cc {f 8224} {p {0 0 1} {x439727ae x437f649c 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke74 262656 bezier {cc {f 8224} {p {0 0 1} {x439727ae x437f649c 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc31baaa5 0 1 x40818b50 1} {x42580000 xc3174dc8 x409fbc40 1 x409fbc40 1} {x425c0000 xc311aee1 x40c61f00 1 x40c61f00 1} {x42600000 xc30aebd8 x40e04bc0 1 x40e04bc0 1} {x42640000 xc303aa25 x40e3cf48 1 x40e3cf48 1} {x42680000 xc2f95dc7 x40e07d58 1 x40e07d58 1} {x426c0000 xc2eb449f x40e1d950 1 x40e1d950 1} {x42700000 xc2dd229d x40e4f9e8 1 x40e4f9e8 1} {x42740000 xc2cea562 x40f64318 1 x40f64318 1} {x42780000 xc2be5a3a x41010f40 1 x41010f40 1} {x427c0000 xc2ae6192 x41018ef0 1 x41018ef0 1} {x42800000 xc29df67e x4103fc54 1 x4103fc54 1} {x42820000 xc28d627d x40fadc6c 1 x40fadc6c 1} {x42840000 xc27d35e1 x40ebfa84 1 x40ebfa84 1} {x42860000 xc25fc659 x40c09fa8 1 x40c09fa8 1} {x42880000 xc24d0df7 x40c7278c 1 x40c7278c 1} {x428a0000 xc22dfc76 x40b953a4 1 x40b953a4 1} {x428c0000 xc21eb90e x4090186c 1 x4090186c 1} {x428e0000 xc209f65b x40ae37a6 1 x40ae37a6 1} {x42900000 xc1e65649 x409aba94 1 x409aba94 1} {x42920000 xc1c68f6c x40228494 1 x40228494 1} {x42940000 xc1bdb524 x3f5b9db0 1 x3f5b9db0 1} {x42960000 xc1b8d591 x3f268390 1 x3f268390 1} {x42980000 xc1b34ceb x3fb244a8 1 x3fb244a8 1} {x429a0000 xc1a28cfc x3fc7e748 1 x3fc7e748 1} {x429c0000 xc19a5002 x3f2d1030 1 x3f2d1030 1} {x429e0000 xc197bbf9 x3e873740 1 x3e873740 1} {x42a00000 xc1961648 x3eac07c0 1 x3eac07c0 1} {x42a20000 xc1925bbb x3f13e2a0 1 x3f13e2a0 1} {x42a40000 xc18cd81e x3f5b4bd0 1 x3f5b4bd0 1} {x42a60000 xc184a6fe -} {x42a80000 xc186e63f xbf2023c0 1 xbf2023c0 1} {x42aa0000 xc18ea93a xbf10cfc0 1 xbf10cfc0 1} {x42ac0000 xc1902b64 xbf10cfc0 1 xbf10cfc0 1} {x42ae0000 xc19da05b xbfd9e3f0 1 xbfd9e3f0 1} {x42b00000 xc1ab67e2 xbff81d90 1 xbff81d90 1} {x42b20000 xc1bca40d xc00885e0 1 xc00885e0 1} {x42b40000 xc1cd895a xc003fc6c 1 xc003fc6c 1} {x42b60000 xc1dda328 xbff82f60 1 xbff82f60 1} {x42b80000 xc1ec8f46 xbff3da90 1 xbff3da90 1} {x42ba0000 xc1fc1e7a xc00064b0 1 xc00064b0 1} {x42bc0000 xc2065439 xc0038b20 1 xc0038b20 1} {x42be0000 xc20e80a1 xc0064548 1 xc0064548 1} {x42c00000 xc2171ce2 xc00cd0b0 1 xc00cd0b0 1} {x42c20000 xc2201ab7 -} {x42c40000 xc21e084d x3f216f20 1 x3f216f20 1} {x42c60000 xc21b0f3e x3f2ef040 1 x3f2ef040 1} {x42c80000 xc21890cb x3f45a460 1 x3f45a460 1} {x42ca0000 xc214e21b x3f797420 1 x3f797420 1} {x42cc0000 xc210c52a x3fd17850 1 x3fd17850 1} {x42ce0000 xc207ca96 x3fd4bb10 1 x3fd4bb10 1} {x42d00000 xc2037979 x3f01c180 1 x3f01c180 1} {x42d20000 xc202cc77 x3ddbed00 1 x3ddbed00 1} {x42d40000 xc2029d8c -} {x42d60000 xc202e2fa xbe175b80 1 xbe175b80 1} {x42d80000 xc203cc43 xbe9c4dc0 1 xbe9c4dc0 1} {x42da0000 xc2055431 xbe812a80 1 xbe812a80 1} {x42dc0000 xc205d0ed -} {x42de0000 xc2059b7a x3dee9f00 1 x3dee9f00 1} {x42e00000 xc204e24e x3e896640 1 x3e896640 1} {x42e20000 xc20375e1 x3f04e780 1 x3f04e780 1} {x42e40000 xc200bb12 x3f401980 1 x3f401980 1} {x42e60000 xc1faea2a x3f554340 1 x3f554340 1} {x42e80000 xc1f421f0 x3f6d4da0 1 x3f6d4da0 1} {x42ea0000 xc1ec1550 x3f9691f0 1 x3f9691f0 1} {x42ec0000 xc1e14fb2 x3fe06c78 1 x3fe06c78 1} {x42ee0000 xc1d007c1 x402c8924 1 x402c8924 1} {x42f00000 xc1b62d69 x4050c478 1 x4050c478 1} {x42f20000 xc19bd6a3 x40609136 1 x40609136 1} {x42f40000 xc17c1237 x40748a1c 1 x40748a1c 1} {x42f60000 xc13d6838 x407862d3 1 x407862d3 1} {x42f80000 xc0ffc19b x407b4310 1 x407b4310 1} {x42fa0000 xc07f1ac0 x407fc19b 1 x407fc19b 1} {x42fc0000 0 x4084d778 1 x4084d778 1} {x42fe0000 x408a2191 x408bc84f 1 x408bc84f 1} {x43000000 x410bc84f x408a7d5a 1 x408a7d5a 1} {x43010000 x414f8e23 x40851a17 1 x40851a17 1} {x43020000 x41887133 x407ce9a6 1 x407ce9a6 1} {x43030000 x41a7017b x40726608 1 x40726608 1} {x43040000 x41c50ab5 x4062dff0 1 x4062dff0 1} {x43050000 x41dfb977 x40592528 1 x40592528 1} {x43060000 x41fb53ff x4062f8cc 1 x4062f8cc 1} {x43070000 x420c3bd5 x403452ac 1 x403452ac 1} {x43080000 x42143455 x3fd614f0 1 x3fd614f0 1} {x43090000 x42199d24 x3fbbd040 1 x3fbbd040 1} {x430a0000 x421ff159 x3fbf8ea0 1 x3fbf8ea0 1} {x430b0000 x4225960e x3fbbb360 1 x3fbbb360 1} {x430c0000 x422bac8f x3fb2df90 1 x3fb2df90 1} {x430d0000 x4230c407 x3fa54530 1 x3fa54530 1} {x430e0000 x423600e2 x3fbd3bf0 1 x3fbd3bf0 1} {x430f0000 x423c97c6 x3fe33bc0 1 x3fe33bc0 1} {x43100000 x4244349e x40008478 1 x40008478 1} {x43110000 x424ca855 x400b0890 1 x400b0890 1} {x43120000 x425595b0 x400cc350 1 x400cc350 1} {x43130000 x425e40bf x3fe10490 1 x3fe10490 1} {x43140000 x4263a5f9 x3f6c4d20 1 x3f6c4d20 1} {x43150000 x4265a328 -} {x43160000 x426335f7 xbf68f260 1 0 1}} {{x42540000 x44814506 0 1 xc155e6d0 1} {x42580000 x447f1499 xc16c48a0 1 xc16c48a0 1} {x425c0000 x447b27c7 xc1819ff0 1 xc1819ff0 1} {x42600000 x4476fa9a xc184ab80 1 xc184ab80 1} {x42640000 x4472dd0f xc1837220 1 xc1837220 1} {x42680000 x446ec378 xc18550f0 1 xc18550f0 1} {x426c0000 x446a8800 xc18bcc00 1 xc18bcc00 1} {x42700000 x446606b8 xc198e500 1 xc198e500 1} {x42740000 x4460f9b0 xc1aa5340 1 xc1aa5340 1} {x42780000 x445b6184 xc1bbf640 1 xc1bbf640 1} {x427c0000 x44553a4c xc1ccefd0 1 xc1ccefd0 1} {x42800000 x444e9287 xc1d9e2a0 1 xc1d9e2a0 1} {x42820000 x44479c22 xc1ddc2a0 1 xc1ddc2a0 1} {x42840000 x4440b65d xc1de6cb0 1 xc1de6cb0 1} {x42860000 x4439b557 xc1d7b410 1 xc1d7b410 1} {x42880000 x44333b1c xc1d910d0 1 xc1d910d0 1} {x428a0000 x442c244a xc1d36fb0 1 xc1d36fb0 1} {x428c0000 x44260421 xc1c03c50 1 xc1c03c50 1} {x428e0000 x44202085 xc1c1d5d0 1 xc1c1d5d0 1} {x42900000 x4419e6c4 xc1c82d40 1 xc1c82d40 1} {x42920000 x44139db1 xc1c0a300 1 xc1c0a300 1} {x42940000 x440ddc94 xc1b73800 1 xc1b73800 1} {x42960000 x44082a31 xc1b57900 1 xc1b57900 1} {x42980000 x44028504 xc1b17f00 1 xc1b17f00 1} {x429a0000 x43fa2482 xc1aab728 1 xc1aab728 1} {x429c0000 x43efb323 xc1a48ba0 1 xc1a48ba0 1} {x429e0000 x43e5930e xc1a132f8 1 xc1a132f8 1} {x42a00000 x43db8cc4 xc1a11c08 1 xc1a11c08 1} {x42a20000 x43d16f8d xc1a189b0 1 xc1a189b0 1} {x42a40000 x43c75b8e xc19af150 1 xc19af150 1} {x42a60000 x43be1163 xc1981d18 1 xc1981d18 1} {x42a80000 x43b457eb xc19ea948 1 xc19ea948 1} {x42aa0000 x43aa3c3a xc1a05f58 1 xc1a05f58 1} {x42ac0000 x43a04c00 xc19d6c10 1 xc19d6c10 1} {x42ae0000 x43968eb8 xc19a8430 1 xc19a8430 1} {x42b00000 x438cfb7a xc198c648 1 xc198c648 1} {x42b20000 x438375ef xc198805c 1 xc198805c 1} {x42b40000 x4373d6dd xc1996f9c 1 xc1996f9c 1} {x42b60000 x43608ff7 xc19ae658 1 xc19ae658 1} {x42b80000 x434d1d47 xc1990a5c 1 xc1990a5c 1} {x42ba0000 x433a4d60 xc1924310 1 xc1924310 1} {x42bc0000 x43288c83 xc1892638 1 xc1892638 1} {x42be0000 x431803d2 xc17d1f90 1 xc17d1f90 1} {x42c00000 x4308e891 xc16783f8 1 xc16783f8 1} {x42c20000 x42f626a6 xc1524a98 1 xc1524a98 1} {x42c40000 x42dd3e7c xc1458424 1 xc1458424 1} {x42c60000 x42c4c59d xc142ee70 1 xc142ee70 1} {x42c80000 x42ac82e0 xc142eac4 1 xc142eac4 1} {x42ca0000 x42940aec xc1424d54 1 xc1424d54 1} {x42cc0000 x4277df16 xc1271114 1 xc1271114 1} {x42ce0000 x42548d4e xc1109dea 1 xc1109dea 1} {x42d00000 x422f9021 xc119e9ec 1 xc119e9ec 1} {x42d20000 x42079858 xc116e9ad 1 xc116e9ad 1} {x42d40000 x41c83695 xc105e1c3 1 xc105e1c3 1} {x42d60000 x41894eed xc0ec631d 1 xc0ec631d 1} {x42d80000 x41240a0d xc0d1c91a 1 xc0d1c91a 1} {x42da0000 x4081a981 xc0c1b37f 1 xc0c1b37f 1} {x42dc0000 xbfed4b93 xc0b1d5f0 1 xc0b1d5f0 1} {x42de0000 xc0e20260 xc090c6c4 1 xc090c6c4 1} {x42e00000 xc12e7036 xc04e966c 1 xc04e966c 1} {x42e20000 xc1584c66 xc001b0ba 1 xc001b0ba 1} {x42e40000 xc16f4893 xbf8736c0 1 xbf8736c0 1} {x42e60000 xc17a1a16 -} {x42e80000 xc1705d8a x3f705f30 1 x3f705f30 1} {x42ea0000 xc15c0e30 x3fad6a68 1 x3fad6a68 1} {x42ec0000 xc14502f0 x3fac3acc 1 x3fac3acc 1} {x42ee0000 xc130ff7d x3f8e90dc 1 x3f8e90dc 1} {x42f00000 xc1215eb9 x3f73e6b8 1 x3f73e6b8 1} {x42f20000 xc11282a6 x3f7a7820 1 x3f7a7820 1} {x42f40000 xc1020fb5 x3f95de22 1 x3f95de22 1} {x42f60000 xc0da163b x3fc90216 1 x3fc90216 1} {x42f80000 xc09f9e5f x40024166 1 x40024166 1} {x42fa0000 xc02fa9aa x401f9e5f 1 x401f9e5f 1} {x42fc0000 0 x40385dce 1 x40385dce 1} {x42fe0000 x404111f3 x4039f9c8 1 x4039f9c8 1} {x43000000 x40b9f9c8 x40323bce 1 x40323bce 1} {x43010000 x41096264 x403b3ed4 1 x403b3ed4 1} {x43020000 x413a9c4e x4050382e 1 x4050382e 1} {x43030000 x41717e7b x405bd608 1 x405bd608 1} {x43040000 x419443a9 x40608c1e 1 x40608c1e 1} {x43050000 x41b0e245 x4088682a 1 x4088682a 1} {x43060000 x41d877be x40c3eb2e 1 x40c3eb2e 1} {x43070000 x42096bee x40c7bce8 1 x40c7bce8 1} {x43080000 x421e2b19 x40a52e04 1 x40a52e04 1} {x43090000 x4232b76f x40a59418 1 x40a59418 1} {x430a0000 x4247901f x40a5c590 1 x40a5c590 1} {x430b0000 x425c28d3 x40a3a54c 1 x40a3a54c 1} {x430c0000 x42707972 x40abe8bc 1 x40abe8bc 1} {x430d0000 x42839181 x40bdb6d8 1 x40bdb6d8 1} {x430e0000 x428ff394 x40c700b8 1 x40c700b8 1} {x430f0000 x429c7198 x40c2cd78 1 x40c2cd78 1} {x43100000 x42a84d43 x40ba1290 1 x40ba1290 1} {x43110000 x42b3b3ea x40b32808 1 x40b32808 1} {x43120000 x42beb244 x40aa4f30 1 x40aa4f30 1} {x43130000 x42c8fdd0 x409efc90 1 x409efc90 1} {x43140000 x42d291d6 x409111f8 1 x409111f8 1} {x43150000 x42db200f x4053c840 1 x4053c840 1} {x43160000 x42dfce5a x3fed93e0 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke75 262656 bezier {cc {f 8224} {p {0 0 1} {x42bef127 x43f35290 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke76 262656 bezier {cc {f 8224} {p {0 0 1} {x42bef127 x43f35290 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc2eabe6f 0 1 x4080c0c0 1} {x42580000 xc2e212d2 x409eabf0 1 x409eabf0 1} {x425c0000 xc2d6e8f1 x40c531d8 1 x40c531d8 1} {x42600000 xc2c96c97 x40dfa0e0 1 x40dfa0e0 1} {x42640000 xc2baf4d5 x40d8e5a8 1 x40d8e5a8 1} {x42680000 xc2ae4fe2 x40cba998 1 x40cba998 1} {x426c0000 xc2a17fa2 x40ccde70 1 x40ccde70 1} {x42700000 xc294b414 x40d07818 1 x40d07818 1} {x42740000 xc287709f x40e1a9dc 1 x40e1a9dc 1} {x42780000 xc270fdb1 x40ed7e6c 1 x40ed7e6c 1} {x427c0000 xc25381a3 x40f88c70 1 x40f88c70 1} {x42800000 xc232da95 x40fdd6dc 1 x40fdd6dc 1} {x42820000 xc2140bec x40f0b198 1 x40f0b198 1} {x42840000 xc1ed5c5e x40e9e068 1 x40e9e068 1} {x42860000 xc1b327a4 x40c145c0 1 x40c145c0 1} {x42880000 xc18cb97e x40ca00a5 1 x40ca00a5 1} {x428a0000 xc11c4ea3 x40ab5024 1 x40ab5024 1} {x428c0000 xc0dc45af x4046401c 1 x4046401c 1} {x428e0000 xc064ba54 x405feb8d 1 x405feb8d 1} {x42900000 x3de97799 x402e0178 1 x402e0178 1} {x42920000 x3fee9136 -} {x42940000 x3fcd3cea xbe5c6130 1 xbe5c6130 1} {x42960000 x3fb778ea -} {x42980000 x3fcb2f8b x3eec8f8c 1 x3eec8f8c 1} {x429a0000 x40607714 x3e51d780 1 x3e51d780 1} {x429c0000 x4064d63c -} {x429e0000 x3ff0a6bd xbfc58d03 1 xbfc58d03 1} {x42a00000 x3efa49ca xbf99a7e6 1 xbf99a7e6 1} {x42a20000 xbf05521e xbf7850a2 1 xbf7850a2 1} {x42a40000 xbfb9be30 xbf71ed77 1 xbf71ed77 1} {x42a60000 xc01a4b43 xbf90c329 1 xbf90c329 1} {x42a80000 xc06da241 xbfaab643 1 xbfaab643 1} {x42aa0000 xc0a280c3 xbfbeff9b 1 xbfbeff9b 1} {x42ac0000 xc0d650ee xc00bc26d 1 xc00bc26d 1} {x42ae0000 xc1172198 xc046188e 1 xc046188e 1} {x42b00000 xc14e34be xc06315a8 1 xc06315a8 1} {x42b20000 xc1845636 xc065d600 1 xc065d600 1} {x42b40000 xc1a08fdf xc05d1e04 1 xc05d1e04 1} {x42b60000 xc1bb9db7 xc0506b40 1 xc0506b40 1} {x42b80000 xc1d4aaaf xc047b9a4 1 xc047b9a4 1} {x42ba0000 xc1ed8c20 xc04b87c4 1 xc04b87c4 1} {x42bc0000 xc203c650 xc04bae60 1 xc04bae60 1} {x42be0000 xc2103bdc xc048e8b8 1 xc048e8b8 1} {x42c00000 xc21ce367 xc04b16b0 1 xc04b16b0 1} {x42c20000 xc2299eb2 xbf9fb220 1 xbf9fb220 1} {x42c40000 xc22b488d xbe3ece00 1 xbe3ece00 1} {x42c60000 xc22b8827 -} {x42c80000 xc22b4338 x3e4ecd00 1 x3e4ecd00 1} {x42ca0000 xc229bd0c x3ee60c00 1 x3ee60c00 1} {x42cc0000 xc227ab08 x3edf46c0 1 x3edf46c0 1} {x42ce0000 xc2263ff1 x3e81a980 1 x3e81a980 1} {x42d00000 xc225a462 -} {x42d20000 xc226c391 xbe801d00 1 xbe801d00 1} {x42d40000 xc227a4d6 xbe8c6080 1 xbe8c6080 1} {x42d60000 xc228f513 xbeceb2c0 1 xbeceb2c0 1} {x42d80000 xc22adfa1 xbed5a6c0 1 xbed5a6c0 1} {x42da0000 xc22c4bae xbe40e400 1 xbe40e400 1} {x42dc0000 xc22c8bfa -} {x42de0000 xc22b821e x3e9cdb00 1 x3e9cdb00 1} {x42e00000 xc22a188e x3f08e460 1 x3f08e460 1} {x42e20000 xc2273afb x3f5b9e60 1 x3f5b9e60 1} {x42e40000 xc2233b9b x3f97cab0 1 x3f97cab0 1} {x42e60000 xc21dbe50 x3fbc2720 1 x3fbc2720 1} {x42e80000 xc2177929 x3fde2060 1 x3fde2060 1} {x42ea0000 xc20fdc4a x40084ed0 1 x40084ed0 1} {x42ec0000 xc2066f4f x402be488 1 x402be488 1} {x42ee0000 xc1f4bf72 x404af3dc 1 x404af3dc 1} {x42f00000 xc1da21a7 x40660a68 1 x40660a68 1} {x42f20000 xc1bb3cd8 x4081bdc4 1 x4081bdc4 1} {x42f40000 xc19942c5 x408f08c1 1 x408f08c1 1} {x42f60000 xc16770ef x4095dc3f 1 x4095dc3f 1} {x42f80000 xc11ca94b x40986d94 1 x40986d94 1} {x42fa0000 xc09e06b6 x409ca94b 1 x409ca94b 1} {x42fc0000 0 x409fd05a 1 x409fd05a 1} {x42fe0000 x40a199ff x40a2c6d7 1 x40a2c6d7 1} {x43000000 x4122c6d7 x40a1e25e 1 x40a1e25e 1} {x43010000 x4172af5d x409af791 1 x409af791 1} {x43020000 x419edf34 x4093c205 1 x4093c205 1} {x43030000 x41c338b1 x408f1eee 1 x408f1eee 1} {x43040000 x41e66eab x4082353e 1 x4082353e 1} {x43050000 x420229a8 x40643c54 1 x40643c54 1} {x43060000 x420fbee0 x4049b278 1 x4049b278 1} {x43070000 x421b5ff7 x4034c760 1 x4034c760 1} {x43080000 x422657cc x4029ee50 1 x4029ee50 1} {x43090000 x42309dc1 x401eafc0 1 x401eafc0 1} {x430a0000 x423a2dc4 x401a1fa8 1 x401a1fa8 1} {x430b0000 x4243e1b6 x4018b8a0 1 x4018b8a0 1} {x430c0000 x424d44d8 x40151cb0 1 x40151cb0 1} {x430d0000 x4256854c x401b9600 1 x401b9600 1} {x430e0000 x4260b798 x402c6900 1 x402c6900 1} {x430f0000 x426c126c x403c11d0 1 x403c11d0 1} {x43100000 x427839d2 x4043b660 1 x4043b660 1} {x43110000 x4282449c x4042fe80 1 x4042fe80 1} {x43120000 x42884cd1 x403afdb0 1 x403afdb0 1} {x43130000 x428df477 x402a36e0 1 x402a36e0 1} {x43140000 x4292f03f x3ff56440 1 x3ff56440 1} {x43150000 x42959f99 x3f5d1980 1 x3f5d1980 1} {x43160000 x429664a5 x3e14f100 1 0 1}} {{x42540000 x4482f011 0 1 xc155e010 1} {x42580000 x4481357d xc16c1de0 1 xc16c1de0 1} {x425c0000 x447e7f33 xc1818810 1 xc1818810 1} {x42600000 x447a5279 xc184a040 1 xc184a040 1} {x42640000 x4476352f xc182e030 1 xc182e030 1} {x42680000 x44722476 xc1844e80 1 xc1844e80 1} {x426c0000 x446df047 xc18ad090 1 xc18ad090 1} {x42700000 x4469776d xc197dd40 1 xc197dd40 1} {x42740000 x44647273 xc1a96bc0 1 xc1a96bc0 1} {x42780000 x445ee0b1 xc1bb3040 1 xc1bb3040 1} {x427c0000 x4458bf6f xc1cca8a0 1 xc1cca8a0 1} {x42800000 x44521627 xc1d9f4c0 1 xc1d9f4c0 1} {x42820000 x444b2023 xc1dde530 1 xc1dde530 1} {x42840000 x444437d4 xc1debcf0 1 xc1debcf0 1} {x42860000 x443d3454 xc1d902c0 1 xc1d902c0 1} {x42880000 x4436a7a8 xc1daad90 1 xc1daad90 1} {x428a0000 x442f897b xc1d02e60 1 xc1d02e60 1} {x428c0000 x4429a4c2 xc1b330c0 1 xc1b330c0 1} {x428e0000 x4424566f xc1aec580 1 xc1aec580 1} {x42900000 x441eb86a xc1b42e30 1 xc1b42e30 1} {x42920000 x4419138c xc1bdfa90 1 xc1bdfa90 1} {x42940000 x4412d8c1 xc1c5a5f0 1 xc1c5a5f0 1} {x42960000 x440cb92d xc1c2f520 1 xc1c2f520 1} {x42980000 x4406a96f xc1b63350 1 xc1b63350 1} {x429a0000 x440155f8 xc1ae0ad0 1 xc1ae0ad0 1} {x429c0000 x43f79184 xc1b057e8 1 xc1b057e8 1} {x429e0000 x43eca0f3 xc1ae4170 1 xc1ae4170 1} {x42a00000 x43e1c956 xc1adb580 1 xc1adb580 1} {x42a20000 x43d6ea43 xc1ae6138 1 xc1ae6138 1} {x42a40000 x43cbfd2f xc1aea4c8 1 xc1aea4c8 1} {x42a60000 x43c115aa xc1af5570 1 xc1af5570 1} {x42a80000 x43b61281 xc1afad90 1 xc1afad90 1} {x42aa0000 x43ab1ff8 xc1ac1288 1 xc1ac1288 1} {x42ac0000 x43a09030 xc1a69f28 1 xc1a69f28 1} {x42ae0000 x43964c13 xc1a22b08 1 xc1a22b08 1} {x42b00000 x438c4acf xc1a015f8 1 xc1a015f8 1} {x42b20000 x43824954 xc19fc2a0 1 xc19fc2a0 1} {x42b40000 x4370a4f6 xc1a0759c 1 xc1a0759c 1} {x42b60000 x435c7541 xc1a16fac 1 xc1a16fac 1} {x42b80000 x4348490b xc19e6e54 1 xc19e6e54 1} {x42ba0000 x4334d9ac xc1969294 1 xc1969294 1} {x42bc0000 x4322a466 xc18c934c 1 xc18c934c 1} {x42be0000 x4311b4d9 xc181ecf8 1 xc181ecf8 1} {x42c00000 x43022928 xc170585c 1 xc170585c 1} {x42c20000 x42e7539b xc15b96b4 1 xc15b96b4 1} {x42c40000 x42cd6ca3 xc14e604c 1 xc14e604c 1} {x42c60000 x42b3bb88 xc14f7c94 1 xc14f7c94 1} {x42c80000 x42998d7e xc15166ac 1 xc15166ac 1} {x42ca0000 x427ec3ba xc150e048 1 xc150e048 1} {x42cc0000 x424aaad8 xc14dc0fa 1 xc14dc0fa 1} {x42ce0000 x4217e33d xc142520f 1 xc142520f 1} {x42d00000 x41d303a1 xc1305e75 1 xc1305e75 1} {x42d20000 x417ed00a xc11ed618 1 xc11ed618 1} {x42d40000 x40d0b623 xc10d3ffa 1 xc10d3ffa 1} {x42d60000 xbfdd7f4d xc0f0f624 1 xc0f0f624 1} {x42d80000 xc1089b12 xc0cbc9b1 1 xc0cbc9b1 1} {x42da0000 xc167799b xc0b55322 1 xc0b55322 1} {x42dc0000 xc19ef71a xc09f0bf3 1 xc09f0bf3 1} {x42de0000 xc1c342c7 xc074f52c 1 xc074f52c 1} {x42e00000 xc1dc3465 xc0113b00 1 xc0113b00 1} {x42e20000 xc1e79187 xbf6b6dc0 1 xbf6b6dc0 1} {x42e40000 xc1eaeb41 -} {x42e60000 xc1e77780 x3f926a80 1 x3f926a80 1} {x42e80000 xc1d89df1 x4009639c 1 x4009639c 1} {x42ea0000 xc1c51e99 x401fbdf0 1 x401fbdf0 1} {x42ec0000 xc1b0ae75 x401b3c90 1 x401b3c90 1} {x42ee0000 xc19e4f75 x400efc18 1 x400efc18 1} {x42f00000 xc18cef6f x4012b16e 1 x4012b16e 1} {x42f20000 xc1734633 x401294dc 1 x401294dc 1} {x42f40000 xc1509470 x4014fa84 1 x4014fa84 1} {x42f60000 xc128c8f1 x402ba698 1 x402ba698 1} {x42f80000 xc0f58248 x404c967f 1 x404c967f 1} {x42fa0000 xc084fb63 x40758248 1 x40758248 1} {x42fc0000 0 x40854eb2 1 x40854eb2 1} {x42fe0000 x4085a201 x40831c6b 1 x40831c6b 1} {x43000000 x41031c6b x40780c33 1 x40780c33 1} {x43010000 x413ed71a x407cac72 1 x407cac72 1} {x43020000 x4180b952 x40865e1a 1 x40865e1a 1} {x43030000 x41a29a9a x408d11c0 1 x408d11c0 1} {x43040000 x41c74232 x40904d9c 1 x40904d9c 1} {x43050000 x41eac168 x4094cba4 1 x4094cba4 1} {x43060000 x4208d402 x409ea348 1 x409ea348 1} {x43070000 x421d0986 x40aa3f20 1 x40aa3f20 1} {x43080000 x423363ca x40bb4040 1 x40bb4040 1} {x43090000 x424bd996 x40c666f4 1 x40c666f4 1} {x430a0000 x4264fd87 x40c88788 1 x40c88788 1} {x430b0000 x427dfb78 x40c5b37c 1 x40c5b37c 1} {x430c0000 x428b3533 x40cbbac8 1 x40cbbac8 1} {x430d0000 x42987515 x40dad990 1 x40dad990 1} {x430e0000 x42a69065 x40e013f8 1 x40e013f8 1} {x430f0000 x42b47794 x40d7d360 1 x40d7d360 1} {x43100000 x42c18ad1 x40ce7f18 1 x40ce7f18 1} {x43110000 x42ce4777 x40c87c18 1 x40c87c18 1} {x43120000 x42da9a54 x40bddaa0 1 x40bddaa0 1} {x43130000 x42e602cb x40b51780 1 x40b51780 1} {x43140000 x42f13d44 x40aa9a70 1 x40aa9a70 1} {x43150000 x42fb5619 x40813ed0 1 x40813ed0 1} {x43160000 x4300b28f x40219220 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke77 262656 bezier {cc {f 8224} {p {0 0 1} {x42a306a8 x441380e6 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke78 262656 bezier {cc {f 8224} {p {0 0 1} {x42a306a8 x441380e6 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc302ec78 0 1 x4080dca4 1} {x42580000 xc2fd2bbb x409ec0a8 1 x409ec0a8 1} {x425c0000 xc2f200db x40c556d8 1 x40c556d8 1} {x42600000 xc2e480e0 x40dfddf0 1 x40dfddf0 1} {x42640000 xc2d6051d x40e34ee8 1 x40e34ee8 1} {x42680000 xc2c81703 x40d5f250 1 x40d5f250 1} {x426c0000 xc2bb46d3 x40ccdd50 1 x40ccdd50 1} {x42700000 xc2ae7b59 x40d078a8 1 x40d078a8 1} {x42740000 xc2a137be x40e1b580 1 x40e1b580 1} {x42780000 xc29244a9 x40ed8a30 1 x40ed8a30 1} {x427c0000 xc2838678 x40f89104 1 x40f89104 1} {x42800000 xc2666511 x40fdda3c 1 x40fdda3c 1} {x42820000 xc2479661 x40f0b6ec 1 x40f0b6ec 1} {x42840000 xc22a3756 x40e9f170 1 x40e9f170 1} {x42860000 xc20d1a05 x40c4d574 1 x40c4d574 1} {x42880000 xc1f203f2 x40cd8ba0 1 x40cd8ba0 1} {x428a0000 xc1b36e3a x40b4b328 1 x40b4b328 1} {x428c0000 xc197aa5e x405e4ed6 1 x405e4ed6 1} {x428e0000 xc177b509 x406ad96e 1 x406ad96e 1} {x42900000 xc139e805 x40344388 1 x40344388 1} {x42920000 xc11d9345 x3f19d2f0 1 x3f19d2f0 1} {x42940000 xc11a5ee0 x3e6b0040 1 x3e6b0040 1} {x42960000 xc1163b43 x3ed81420 1 x3ed81420 1} {x42980000 xc10cdd9e x3fa47d38 1 x3fa47d38 1} {x429a0000 xc0da37ea x3f9eff04 1 x3f9eff04 1} {x429c0000 xc0ca3bba -} {x429e0000 xc0e8b403 xbf49bbd0 1 xbf49bbd0 1} {x42a00000 xc0fcaaae xbef6a0f8 1 xbef6a0f8 1} {x42a20000 xc103c411 xbe9a2240 1 xbe9a2240 1} {x42a40000 xc107f77b xbe749a00 1 xbe749a00 1} {x42a60000 xc10b68e1 xbed9e240 1 xbed9e240 1} {x42a80000 xc115959f xbf2a2060 1 xbf2a2060 1} {x42aa0000 xc120aced xbf3ce8c0 1 xbf3ce8c0 1} {x42ac0000 xc12d32b7 xbfa302d0 1 xbfa302d0 1} {x42ae0000 xc1496da1 xc006faf6 1 xc006faf6 1} {x42b00000 xc170b032 xc027cfde 1 xc027cfde 1} {x42b20000 xc18eaac8 xc02f56f4 1 xc02f56f4 1} {x42b40000 xc1a42dd6 xc028f5f8 1 xc028f5f8 1} {x42b60000 xc1b8e846 xc0219da0 1 xc0219da0 1} {x42b80000 xc1cc953e xc01c16d8 1 xc01c16d8 1} {x42ba0000 xc1dfedfc xc01eeb54 1 xc01eeb54 1} {x42bc0000 xc1f45013 xc0214a40 1 xc0214a40 1} {x42be0000 xc2042046 xc024802c 1 xc024802c 1} {x42c00000 xc20eb80f xc0269010 1 xc0269010 1} {x42c20000 xc218f248 xbfeec1e0 1 xbfeec1e0 1} {x42c40000 xc21da42d xbf521da0 1 xbf521da0 1} {x42c60000 xc21f8335 xbf023560 1 xbf023560 1} {x42c80000 xc221b5d8 -} {x42ca0000 xc21dea9f x3f6b61c0 1 x3f6b61c0 1} {x42cc0000 xc21a5aca -} {x42ce0000 xc21bb90b xbec82740 1 xbec82740 1} {x42d00000 xc21d7b67 xbf0c2240 1 xbf0c2240 1} {x42d20000 xc2201a1d xbf07a9e0 1 xbf07a9e0 1} {x42d40000 xc221b8b6 xbedf0580 1 xbedf0580 1} {x42d60000 xc2239633 xbf3a46e0 1 xbf3a46e0 1} {x42d80000 xc2278aed xbe9f3480 1 xbe9f3480 1} {x42da0000 xc227f510 xbe9f3480 1 xbe9f3480 1} {x42dc0000 xc22a127c -} {x42de0000 xc228ad45 x3e9d2b80 1 x3e9d2b80 1} {x42e00000 xc2279dce x3f223920 1 x3f223920 1} {x42e20000 xc2239b7c x3f91b9a0 1 x3f91b9a0 1} {x42e40000 xc21e8234 x3fed5110 1 x3fed5110 1} {x42e60000 xc214c66b x3fff6d70 1 x3fff6d70 1} {x42e80000 xc20e8b5d x3fd45ad0 1 x3fd45ad0 1} {x42ea0000 xc20780be x3fda2450 1 x3fda2450 1} {x42ec0000 xc200e918 x401f0e54 1 x401f0e54 1} {x42ee0000 xc1e73de7 x40470a90 1 x40470a90 1} {x42f00000 xc1d00f8c x40536868 1 x40536868 1} {x42f20000 xc1b263cd x4074befc 1 x4074befc 1} {x42f40000 xc192dfcd x4087f555 1 x4087f555 1} {x42f60000 xc15cd245 x408f66f4 1 x408f66f4 1} {x42f80000 xc11658a6 x4093adb8 1 x4093adb8 1} {x42fa0000 xc092491b x409658a6 1 x409658a6 1} {x42fc0000 0 x409e4655 1 x409e4655 1} {x42fe0000 x40aa438f x409da073 1 x409da073 1} {x43000000 x411da073 x408f8a88 1 x408f8a88 1} {x43010000 x4164ac50 x40937be5 1 x40937be5 1} {x43020000 x41988e2c x409443ae 1 x409443ae 1} {x43030000 x41bc77ff x40826842 1 x40826842 1} {x43040000 x41d9c24d x4077f8e8 1 x4077f8e8 1} {x43050000 x41fa7639 x4073a3e4 1 x4073a3e4 1} {x43060000 x420b55a3 x403b77d4 1 x403b77d4 1} {x43070000 x4214aa17 x403c6a10 1 x403c6a10 1} {x43080000 x4222e2e5 x403fbdc0 1 x403fbdc0 1} {x43090000 x422ca1cf x401e0ae8 1 x401e0ae8 1} {x430a0000 x4236a442 x4022d330 1 x4022d330 1} {x430b0000 x4240fc35 x40232e30 1 x40232e30 1} {x430c0000 x424b0a08 x401da238 1 x401da238 1} {x430d0000 x4254b07c x401abe08 1 x401abe08 1} {x430e0000 x425e61c9 x4025ba78 1 x4025ba78 1} {x430f0000 x426967cb x40374258 1 x40374258 1} {x43100000 x42754a14 x403d6168 1 x403d6168 1} {x43110000 x428089fc x403bc0e0 1 x403bc0e0 1} {x43120000 x42866118 x40370a90 1 x40370a90 1} {x43130000 x428bfaa5 x402494f0 1 x402494f0 1} {x43140000 x4290aa67 x3fe264c0 1 x3fe264c0 1} {x43150000 x42930dcb x3f3e3540 1 x3f3e3540 1} {x43160000 x4293a33c x3d87d100 1 0 1}} {{x42540000 x4482c65a 0 1 xc155e220 1} {x42580000 x44810bbf xc16c2440 1 xc16c2440 1} {x425c0000 x447e2b92 xc1818940 1 xc1818940 1} {x42600000 x4479feea xc184a080 1 xc184a080 1} {x42640000 x4475e18a xc1836100 1 xc1836100 1} {x42680000 x4471c8da xc184ca90 1 xc184ca90 1} {x426c0000 x446d94e1 xc18acc30 1 xc18acc30 1} {x42700000 x44691c17 xc197daa0 1 xc197daa0 1} {x42740000 x44641737 xc1a96880 1 xc1a96880 1} {x42780000 x445e858f xc1bb2cb0 1 xc1bb2cb0 1} {x427c0000 x4458646c xc1cca680 1 xc1cca680 1} {x42800000 x4451bb27 xc1d9f340 1 xc1d9f340 1} {x42820000 x444ac538 xc1dde380 1 xc1dde380 1} {x42840000 x4443dcef xc1deba90 1 xc1deba90 1} {x42860000 x443cd98f xc1d95dc0 1 xc1d95dc0 1} {x42880000 x44364713 xc1db0ae0 1 xc1db0ae0 1} {x428a0000 x442f28e1 xc1d26750 1 xc1d26750 1} {x428c0000 x4429209e xc1b5a3d0 1 xc1b5a3d0 1} {x428e0000 x4423cea4 xc1af4560 1 xc1af4560 1} {x42900000 x441e2c48 xc1b47050 1 xc1b47050 1} {x42920000 x4418879f xc1bdba40 1 xc1bdba40 1} {x42940000 x441250a4 xc1c589a0 1 xc1c589a0 1} {x42960000 x440c2f05 xc1c31920 1 xc1c31920 1} {x42980000 x44061f12 xc1b66180 1 xc1b66180 1} {x429a0000 x4400c8ed xc1ae2358 1 xc1ae2358 1} {x429c0000 x43f679b9 xc1b01738 1 xc1b01738 1} {x429e0000 x43eb8ef3 xc1ae4680 1 xc1ae4680 1} {x42a00000 x43e0b0e9 xc1ae0a08 1 xc1ae0a08 1} {x42a20000 x43d5cdb2 xc1aeb2b0 1 xc1aeb2b0 1} {x42a40000 x43cada93 xc1af92d0 1 xc1af92d0 1} {x42a60000 x43bfdb58 xc1b00c58 1 xc1b00c58 1} {x42a80000 x43b4d908 xc1affdf8 1 xc1affdf8 1} {x42aa0000 x43a9db99 xc1ad4690 1 xc1ad4690 1} {x42ac0000 x439f3036 xc1a6c980 1 xc1a6c980 1} {x42ae0000 x43950269 xc1a1aeb0 1 xc1a1aeb0 1} {x42b00000 x438afa60 xc1a0d388 1 xc1a0d388 1} {x42b20000 x4380e7f8 xc1a073cc 1 xc1a073cc 1} {x42b40000 x436dd7cd xc1a12334 1 xc1a12334 1} {x42b60000 x43598723 xc1a24a58 1 xc1a24a58 1} {x42b80000 x43454537 xc19ee56c 1 xc19ee56c 1} {x42ba0000 x4331cdc8 xc19634e0 1 xc19634e0 1} {x42bc0000 x431fb7ff xc18d04a4 1 xc18d04a4 1} {x42be0000 x430e8c9f xc183917e 1 xc183917e 1} {x42c00000 x42fda73f xc173131c 1 xc173131c 1} {x42c20000 x42e05477 xc15b81c8 1 xc15b81c8 1} {x42c40000 x42c6c6cd xc14810cc 1 xc14810cc 1} {x42c60000 x42ae5044 xc14514fc 1 xc14514fc 1} {x42c80000 x4295818e xc14cff8a 1 xc14cff8a 1} {x42ca0000 x427620c3 xc1523d60 1 xc1523d60 1} {x42cc0000 x4241e46c xc14c87b2 1 xc14c87b2 1} {x42ce0000 x420fdcea xc13d6586 1 xc13d6586 1} {x42d00000 x41c66352 xc122aff5 1 xc122aff5 1} {x42d20000 x417a13be xc10bdd66 1 xc10bdd66 1} {x42d40000 x40ea17b0 xc1067741 1 xc1067741 1} {x42d60000 xbf96d61f xc0eeb3d8 1 xc0eeb3d8 1} {x42d80000 xc0f35001 xc0d1b3ec 1 xc0d1b3ec 1} {x42da0000 xc1648eb0 xc0b9dc9e 1 xc0b9dc9e 1} {x42dc0000 xc199c24f xc0a4d0f6 1 xc0a4d0f6 1} {x42de0000 xc1c4afd3 xc06c4888 1 xc06c4888 1} {x42e00000 xc1d4d471 xbfe01cd0 1 xbfe01cd0 1} {x42e20000 xc1e0b36d xbf7123e0 1 xbf7123e0 1} {x42e40000 xc1e3e6af -} {x42e60000 xc1dcbd26 x3fce9518 1 x3fce9518 1} {x42e80000 xc1ca140c x4014334c 1 x4014334c 1} {x42ea0000 xc1b7b053 x40301848 1 x40301848 1} {x42ec0000 xc19e0dfa x403143a4 1 x403143a4 1} {x42ee0000 xc18b5f6a x3fd57db0 1 x3fd57db0 1} {x42f00000 xc1835e44 x3ff1b35c 1 x3ff1b35c 1} {x42f20000 xc15a51fd x3ffd8d5c 1 x3ffd8d5c 1} {x42f40000 xc1475931 x3ffa41f0 1 x3ffa41f0 1} {x42f60000 xc11bc181 x4022b0e1 1 x4022b0e1 1} {x42f80000 xc0ec0181 x40306b15 1 x40306b15 1} {x42fa0000 xc08717ed x406c0181 1 x406c0181 1} {x42fc0000 0 x40873f4a 1 x40873f4a 1} {x42fe0000 x408766a6 x408cf12d 1 x408cf12d 1} {x43000000 x410cf12d x40778c80 1 x40778c80 1} {x43010000 x413f7993 x406aad26 1 x406aad26 1} {x43020000 x418123e0 x40559fe6 1 x40559fe6 1} {x43030000 x419524c3 x4074facc 1 x4074facc 1} {x43040000 x41be6293 x40722dc8 1 x40722dc8 1} {x43050000 x41d1b035 x40000f68 1 x40000f68 1} {x43060000 x41de666d x40042da0 1 x40042da0 1} {x43070000 x41f2bb9d x400b1844 1 x400b1844 1} {x43080000 x4200963f x401453d4 1 x401453d4 1} {x43090000 x420be849 x40829f78 1 x40829f78 1} {x430a0000 x42213e1d x40aa9574 1 x40aa9574 1} {x430b0000 x42368da6 x40ac28f0 1 x40ac28f0 1} {x430c0000 x424c4859 x40b2b24c 1 x40b2b24c 1} {x430d0000 x42633a39 x40cb1e74 1 x40cb1e74 1} {x430e0000 x427f0ff6 x40dc83fc 1 x40dc83fc 1} {x430f0000 x428d2d9c x40d46000 1 x40d46000 1} {x43100000 x429a13fb x40cc4d00 1 x40cc4d00 1} {x43110000 x42a6b73c x40c769e8 1 x40c769e8 1} {x43120000 x42b30138 x40bbb6b8 1 x40bbb6b8 1} {x43130000 x42be2e13 x40aee8f8 1 x40aee8f8 1} {x43140000 x42c8de57 x40a27538 1 x40a27538 1} {x43150000 x42d27cba x40782d60 1 x40782d60 1} {x43160000 x42d8612d x401ebee0 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke79 262656 bezier {cc {f 8224} {p {0 0 1} {x44404550 x43e116c9 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke80 262656 bezier {cc {f 8224} {p {0 0 1} {x44404550 x43e116c9 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3c2cd67 0 1 x408daac0 1} {x42580000 xc3c04295 x40ccc800 1 x40ccc800 1} {x425c0000 xc3bc6727 x4105a960 1 x4105a960 1} {x42600000 xc3b7e7ff x41141840 1 x41141840 1} {x42640000 xc3b325a3 x4116bf60 1 x4116bf60 1} {x42680000 xc3ae7c09 x411722e0 1 x411722e0 1} {x426c0000 xc3a9b375 x41141f40 1 x41141f40 1} {x42700000 xc3a53a15 x41199830 1 x41199830 1} {x42740000 xc3a019f2 x41217030 1 x41217030 1} {x42780000 xc39b2312 x41181160 1 x41181160 1} {x427c0000 xc39698dc x41169e90 1 x41169e90 1} {x42800000 xc391b929 x411c3360 1 x411c3360 1} {x42820000 xc38cd5a6 x410bd890 1 x410bd890 1} {x42840000 xc388fba0 x40f0f080 1 x40f0f080 1} {x42860000 xc3854e22 x40ce1420 1 x40ce1420 1} {x42880000 xc3828aff x40d93810 1 x40d93810 1} {x428a0000 xc37d08c3 x40f26a50 1 x40f26a50 1} {x428c0000 xc375ef59 x40da9470 1 x40da9470 1} {x428e0000 xc36f5f7c x40da6e20 1 x40da6e20 1} {x42900000 xc3684877 x40e22d30 1 x40e22d30 1} {x42920000 xc3613ca9 x40d59360 1 x40d59360 1} {x42940000 xc35aef41 x40b67af0 1 x40b67af0 1} {x42960000 xc355d4fa x409ece30 1 x409ece30 1} {x42980000 xc351025e x4097ff70 1 x4097ff70 1} {x429a0000 xc34c5503 x408c40c0 1 x408c40c0 1} {x429c0000 xc3483e52 x407ba2e0 1 x407ba2e0 1} {x429e0000 xc34477ec x40710720 1 x40710720 1} {x42a00000 xc340b619 x4080d9f0 1 x4080d9f0 1} {x42a20000 xc33c6a4d x409089f0 1 x409089f0 1} {x42a40000 xc337ad7a x409d70b0 1 x409d70b0 1} {x42a60000 xc3329342 x40997820 1 x40997820 1} {x42a80000 xc32e15f8 x40920a60 1 x40920a60 1} {x42aa0000 xc329729c x40960f70 1 x40960f70 1} {x42ac0000 xc324b501 x4088e300 1 x4088e300 1} {x42ae0000 xc320e46c x40529860 1 x40529860 1} {x42b00000 xc31e203e x401c3bc0 1 x401c3bc0 1} {x42b20000 xc31c028e x3ff6d840 1 x3ff6d840 1} {x42b40000 xc31a44dd x3fea2880 1 x3fea2880 1} {x42b60000 xc31859ec x3ff42000 1 x3ff42000 1} {x42b80000 xc316745d x3ff14500 1 x3ff14500 1} {x42ba0000 xc31494d8 x3febb800 1 x3febb800 1} {x42bc0000 xc312c57d x3fee87c0 1 x3fee87c0 1} {x42be0000 xc310dab9 x3ff5c500 1 x3ff5c500 1} {x42c00000 xc30eee69 x3ff15200 1 x3ff15200 1} {x42c20000 xc30d1571 x40499020 1 x40499020 1} {x42c40000 xc308a1e8 x40911380 1 x40911380 1} {x42c60000 xc3040439 x40997b18 1 x40997b18 1} {x42c80000 xc2fe146d x409eaaa0 1 x409eaaa0 1} {x42ca0000 xc2f4331e x409f8650 1 x409f8650 1} {x42cc0000 xc2ea23a3 x409e1968 1 x409e1968 1} {x42ce0000 xc2e06ff1 x4093cc30 1 x4093cc30 1} {x42d00000 xc2d7aa1d x408860a0 1 x408860a0 1} {x42d20000 xc2cf63dd x407915d0 1 x407915d0 1} {x42d40000 xc2c818c0 x4066f110 1 x4066f110 1} {x42d60000 xc2c0f4cc x405bdd60 1 x405bdd60 1} {x42d80000 xc2ba5aea x404eb930 1 x404eb930 1} {x42da0000 xc2b40939 x404ce600 1 x404ce600 1} {x42dc0000 xc2ad8c8a x40567870 1 x40567870 1} {x42de0000 xc2a6a1b2 x40629880 1 x40629880 1} {x42e00000 xc29f6302 x406b12c0 1 x406b12c0 1} {x42e20000 xc297f086 x40705450 1 x40705450 1} {x42e40000 xc2905dbd x4074dfe0 1 x4074dfe0 1} {x42e60000 xc288a288 x407e06c0 1 x407e06c0 1} {x42e80000 xc2807d51 x408847b0 1 x408847b0 1} {x42ea0000 xc26f3324 x40943a2c 1 x40943a2c 1} {x42ec0000 xc25bec17 x40a72b80 1 x40a72b80 1} {x42ee0000 xc2456844 x40b96df8 1 x40b96df8 1} {x42f00000 xc22d9099 x40cbbba8 1 x40cbbba8 1} {x42f20000 xc212795a x40dcbe16 1 x40dcbe16 1} {x42f40000 xc1ecc227 x40e9a704 1 x40e9a704 1} {x42f60000 xc1b01f32 x40ecd249 1 x40ecd249 1} {x42f80000 xc16cb205 x40ea9966 1 x40ea9966 1} {x42fa0000 xc0eb49fd x40ecb205 1 x40ecb205 1} {x42fc0000 0 x40ef5830 1 x40ef5830 1} {x42fe0000 x40f36663 x40f21db4 1 x40f21db4 1} {x43000000 x41721db4 x40ed97aa 1 x40ed97aa 1} {x43010000 x41b3a56e x40e4cdf0 1 x40e4cdf0 1} {x43020000 x41eb75d2 x40d98874 1 x40d98874 1} {x43030000 x421034d4 x40ccb764 1 x40ccb764 1} {x43040000 x4228e8c2 x40bc3604 1 x40bc3604 1} {x43050000 x423f4255 x40aaa27c 1 x40aaa27c 1} {x43060000 x42539161 x409c41bc 1 x409c41bc 1} {x43070000 x426652c4 x40849fc0 1 x40849fc0 1} {x43080000 x4274b951 x405bfc50 1 x405bfc50 1} {x43090000 x4280e927 x40495668 1 x40495668 1} {x430a0000 x4286f20f x403953e0 1 x403953e0 1} {x430b0000 x428c7e65 x402708e0 1 x402708e0 1} {x430c0000 x4291629d x4017f0d0 1 x4017f0d0 1} {x430d0000 x4295fd72 x4013b0c0 1 x4013b0c0 1} {x430e0000 x429a9da9 x401c49a0 1 x401c49a0 1} {x430f0000 x429fc20c x402c5680 1 x402c5680 1} {x43100000 x42a56311 x4034e670 1 x4034e670 1} {x43110000 x42ab1073 x40346630 1 x40346630 1} {x43120000 x42b0a974 x403081e0 1 x403081e0 1} {x43130000 x42b61891 x40194080 1 x40194080 1} {x43140000 x42ba3d7c x3fcfba20 1 x3fcfba20 1} {x43150000 x42bc9662 x3f38e0c0 1 x3f38e0c0 1} {x43160000 x42bd20ff x3d385600 1 0 1}} {{x42540000 x4485de54 0 1 xc1529620 1} {x42580000 x4484234d xc1735e40 1 xc1735e40 1} {x425c0000 x448210db xc186cbb0 1 xc186cbb0 1} {x42600000 x447fd9df xc186dae0 1 xc186dae0 1} {x42640000 x447bb408 xc184cae0 1 xc184cae0 1} {x42680000 x44778d31 xc18639c0 1 xc18639c0 1} {x426c0000 x4473506c xc18adad0 1 xc18adad0 1} {x42700000 x446edf84 xc193a170 1 xc193a170 1} {x42740000 x446a1655 xc1a444a0 1 xc1a444a0 1} {x42780000 x44649b3a xc1b44340 1 xc1b44340 1} {x427c0000 x445ed221 xc1c3d350 1 xc1c3d350 1} {x42800000 x44585e05 xc1cc4c40 1 xc1cc4c40 1} {x42820000 x44520d5d xc1cb6a70 1 xc1cb6a70 1} {x42840000 x444ba75e xc1cb1630 1 xc1cb1630 1} {x42860000 x44455bfa xc1ceb650 1 xc1ceb650 1} {x42880000 x443ebbf9 xc1d339d0 1 xc1d339d0 1} {x428a0000 x4438285d xc1d39380 1 xc1d39380 1} {x428c0000 x443182c1 xc1cf32b0 1 xc1cf32b0 1} {x428e0000 x442b3532 xc1cc95f0 1 xc1cc95f0 1} {x42900000 x4424b962 xc1d47770 1 xc1d47770 1} {x42920000 x441dedbb xc1d7a8a0 1 xc1d7a8a0 1} {x42940000 x44173ed8 xc1cf8bb0 1 xc1cf8bb0 1} {x42960000 x4410f500 xc1c66760 1 xc1c66760 1} {x42980000 x440ad862 xc1bc2610 1 xc1bc2610 1} {x429a0000 x4405329f xc1b1a3c0 1 xc1b1a3c0 1} {x429c0000 x43ff7c4c xc1ae02f8 1 xc1ae02f8 1} {x429e0000 x43f4a4df xc1aad858 1 xc1aad858 1} {x42a00000 x43ea2141 xc1a68098 1 xc1a68098 1} {x42a20000 x43dfd4cc xc1a82e40 1 xc1a82e40 1} {x42a40000 x43d51b79 xc1ab7198 1 xc1ab7198 1} {x42a60000 x43ca6699 xc1a13138 1 xc1a13138 1} {x42a80000 x43c0f552 xc197df40 1 xc197df40 1} {x42aa0000 x43b76ab1 xc19bf878 1 xc19bf878 1} {x42ac0000 x43ad7643 xc1a02b58 1 xc1a02b58 1} {x42ae0000 x43a36546 xc19f8728 1 xc19f8728 1} {x42b00000 x4399855e xc19f0570 1 xc19f0570 1} {x42b20000 x438f8498 xc1a11f08 1 xc1a11f08 1} {x42b40000 x4385617d xc1a39530 1 xc1a39530 1} {x42b60000 x437623e4 xc1a7040c 1 xc1a7040c 1} {x42b80000 x436101f7 xc1a50f68 1 xc1a50f68 1} {x42ba0000 x434ce00a xc19f7e54 1 xc19f7e54 1} {x42bc0000 x43392262 xc1978f70 1 xc1978f70 1} {x42be0000 x4326fc2e xc18bcbd8 1 xc18bcbd8 1} {x42c00000 x43162f6c xc18085ac 1 xc18085ac 1} {x42c20000 x4306dac3 xc16c60e4 1 xc16c60e4 1} {x42c40000 x42f1469f xc1611b54 1 xc1611b54 1} {x42c60000 x42d56eb1 xc15a43b4 1 xc15a43b4 1} {x42c80000 x42bab5b2 xc156ffa8 1 xc156ffa8 1} {x42ca0000 x429faec7 xc15a55b0 1 xc15a55b0 1} {x42cc0000 x42842046 xc1442b8e 1 xc1442b8e 1} {x42ce0000 x425d47c7 xc131f3b6 1 xc131f3b6 1} {x42d00000 x422f46b1 xc13b92e3 1 xc13b92e3 1} {x42d20000 x41fefcab xc1353272 1 xc1353272 1} {x42d40000 x41a95af0 xc122795a 1 xc122795a 1} {x42d60000 x413906a2 xc11047c5 1 xc11047c5 1} {x42d80000 x40489956 xc101c5b8 1 xc101c5b8 1} {x42da0000 xc095099b xc0efc6ce 1 xc0efc6ce 1} {x42dc0000 xc13da079 xc0d47fb2 1 xc0d47fb2 1} {x42de0000 xc18f8240 xc0a555ab 1 xc0a555ab 1} {x42e00000 xc1b17b12 xc058f63c 1 xc058f63c 1} {x42e20000 xc1c5bfcf xbff71240 1 xbff71240 1} {x42e40000 xc1d05d5a xbf4e5510 1 xbf4e5510 1} {x42e60000 xc1d2a520 -} {x42e80000 xc1c7507f x3fdc7808 1 x3fdc7808 1} {x42ea0000 xc1b7161f x3ff685d8 1 x3ff685d8 1} {x42ec0000 xc1a87fc4 x3fe912e0 1 x3fe912e0 1} {x42ee0000 xc199f3c3 x3ffc1ed8 1 x3ffc1ed8 1} {x42f00000 xc188fbe9 x4004310e 1 x4004310e 1} {x42f20000 xc171ceff x400719e4 1 x400719e4 1} {x42f40000 xc14e6ae0 x400f6d86 1 x400f6d86 1} {x42f60000 xc12a183c x4028a5e9 1 x4028a5e9 1} {x42f80000 xc0f42fd7 x404bcd77 1 x404bcd77 1} {x42fa0000 xc0886301 x40742fd7 1 x40742fd7 1} {x42fc0000 0 x408774a9 1 x408774a9 1} {x42fe0000 x40868651 x408a1f86 1 x408a1f86 1} {x43000000 x410a1f86 x408fe190 1 x408fe190 1} {x43010000 x415324b8 x409945f6 1 x409945f6 1} {x43020000 x4191b2be x40a5f64e 1 x40a5f64e 1} {x43030000 x41bc8d83 x40b04418 1 x40b04418 1} {x43040000 x41e9d4ca x40baa186 1 x40baa186 1} {x43050000 x420cef23 x40be7094 1 x40be7094 1} {x43060000 x4224868a x40d50440 1 x40d50440 1} {x43070000 x42423033 x40f2d590 1 x40f2d590 1} {x43080000 x42613bee x40f882ac 1 x40f882ac 1} {x43090000 x4280286f x40f29308 1 x40f29308 1} {x430a0000 x428ef058 x40e84498 1 x40e84498 1} {x430b0000 x429d3102 x40df2080 1 x40df2080 1} {x430c0000 x42aad468 x40e09cb8 1 x40e09cb8 1} {x430d0000 x42b94499 x40e78188 1 x40e78188 1} {x430e0000 x42c7c499 x40e4f418 1 x40e4f418 1} {x430f0000 x42d5e31c x40e2b3a0 1 x40e2b3a0 1} {x43100000 x42e41b0d x40df31b0 1 x40df31b0 1} {x43110000 x42f1c952 x40d79348 1 x40d79348 1} {x43120000 x42ff0d76 x40ce38a0 1 x40ce38a0 1} {x43130000 x4305c833 x40bca0f0 1 x40bca0f0 1} {x43140000 x430b50ca x40a49160 1 x40a49160 1} {x43150000 x43101149 x4070c340 1 x4070c340 1} {x43160000 x4312d6e4 x4011b880 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke81 262656 bezier {cc {f 8224} {p {0 0 1} {x4336c7f0 x43a0120d 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke82 262656 bezier {cc {f 8224} {p {0 0 1} {x4336c7f0 x43a0120d 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc2e4078b 0 1 x40808638 1} {x42580000 xc2db5ed4 x409e95e0 1 x409e95e0 1} {x425c0000 xc2d034cf x40c4db18 1 x40c4db18 1} {x42600000 xc2c2c371 x40deea20 1 x40deea20 1} {x42640000 xc2b4578b x40e259f8 1 x40e259f8 1} {x42680000 xc2a67832 x40df0260 1 x40df0260 1} {x426c0000 xc298773f x40e048f0 1 x40e048f0 1} {x42700000 xc28a6f14 x40da5778 1 x40da5778 1} {x42740000 xc27a58a0 x40e19390 1 x40e19390 1} {x42780000 xc25c7944 x40ed6bd0 1 x40ed6bd0 1} {x427c0000 xc23efdac x40f88a4c 1 x40f88a4c 1} {x42800000 xc21e56b1 x40fdd66c 1 x40fdd66c 1} {x42820000 xc1ff1022 x40f0a972 1 x40f0a972 1} {x42840000 xc1c458a9 x40e9bdfe 1 x40e9bdfe 1} {x42860000 xc18a3123 x40bbf5d4 1 x40bbf5d4 1} {x42880000 xc14cbb7e x40c4c62d 1 x40c4c62d 1} {x428a0000 xc09f3832 x4089bbf2 1 x4089bbf2 1} {x428c0000 xc0629dc3 x4005e959 1 x4005e959 1} {x428e0000 xbf4a76c8 x403c9dec 1 x403c9dec 1} {x42900000 x40169e16 -} {x42920000 x400a5b9f xbd294340 1 xbd294340 1} {x42940000 x400979f0 -} {x42960000 x400ef512 x3e748df8 1 x3e748df8 1} {x42980000 x40280baf x3ee272ec 1 x3ee272ec 1} {x429a0000 x404791cd x3ecbae60 1 x3ecbae60 1} {x429c0000 x405af747 -} {x429e0000 x4054d078 xbda6c800 1 xbda6c800 1} {x42a00000 x40508ac7 -} {x42a20000 x40555e97 -} {x42a40000 x404e95be -} {x42a60000 x4087e9a2 -} {x42a80000 x401be0a0 xc0064e7a 1 xc0064e7a 1} {x42aa0000 x3d4d93e3 xc002cd78 1 xc002cd78 1} {x42ac0000 xbfd374a0 xbfeb18e3 1 xbfeb18e3 1} {x42ae0000 xc067e293 xc01fb7c0 1 xc01fb7c0 1} {x42b00000 xc0d494e8 xc04caf70 1 xc04caf70 1} {x42b20000 xc120505d xc053cdfe 1 xc053cdfe 1} {x42b40000 xc1543173 xc048fba6 1 xc048fba6 1} {x42b60000 xc1826718 xc03b4556 1 xc03b4556 1} {x42b80000 xc198ea0f xc03848d0 1 xc03848d0 1} {x42ba0000 xc1b0794c xc0379f9c 1 xc0379f9c 1} {x42bc0000 xc1c6d1f6 xc03a25cc 1 xc03a25cc 1} {x42be0000 xc1df02bf xc0421490 1 xc0421490 1} {x42c00000 xc1f7571a xc04c45ac 1 xc04c45ac 1} {x42c20000 xc2090a15 xbf574840 1 xbf574840 1} {x42c40000 xc20a2920 -} {x42c60000 xc2094a28 -} {x42c80000 xc209ba39 -} {x42ca0000 xc20934c9 x3ec82800 1 x3ec82800 1} {x42cc0000 xc20605b6 x3fd4f368 1 x3fd4f368 1} {x42ce0000 xc1f7cb25 x3fb52990 1 x3fb52990 1} {x42d00000 xc1f404f2 -} {x42d20000 xc1f753b7 xbebaf100 1 xbebaf100 1} {x42d40000 xc1f9dc7a xbf11d730 1 xbf11d730 1} {x42d60000 xc2003895 xbf519f20 1 xbf519f20 1} {x42d80000 xc2037b36 xbf254be0 1 xbf254be0 1} {x42da0000 xc20562f4 xbe941580 1 xbe941580 1} {x42dc0000 xc205cb8c xbe0b7300 1 xbe0b7300 1} {x42de0000 xc20679da -} {x42e00000 xc20644cc x3def0400 1 x3def0400 1} {x42e20000 xc2058ad6 x3ee27140 1 x3ee27140 1} {x42e40000 xc202bb07 x3f264380 1 x3f264380 1} {x42e60000 xc20058ba x3f4591f0 1 x3f4591f0 1} {x42e80000 xc1f91cef x3f8bb880 1 x3f8bb880 1} {x42ea0000 xc1ef3a64 x3fd29730 1 x3fd29730 1} {x42ec0000 xc1deca09 x40097648 1 x40097648 1} {x42ee0000 xc1ccdcd2 x40292b2c 1 x40292b2c 1} {x42f00000 xc1b47f3e x40462ce4 1 x40462ce4 1} {x42f20000 xc19b5199 x405434ec 1 x405434ec 1} {x42f40000 xc17ee406 x406e7348 1 x406e7348 1} {x42f60000 xc13f698e x40800052 1 x40800052 1} {x42f80000 xc0fdc769 x407d979c 1 x407d979c 1} {x42fa0000 xc0813b80 x407dc769 1 x407dc769 1} {x42fc0000 0 x40897cf8 1 x40897cf8 1} {x42fe0000 x4091be6f x408e3e3f 1 x408e3e3f 1} {x43000000 x410e3e3f x408be822 1 x408be822 1} {x43010000 x4154c759 x40875ee3 1 x40875ee3 1} {x43020000 x418ace91 x4081d303 1 x4081d303 1} {x43030000 x41ab4d2e x4076cb28 1 x4076cb28 1} {x43040000 x41c8815b x405b9320 1 x405b9320 1} {x43050000 x41e231f6 x404a3a2c 1 x404a3a2c 1} {x43060000 x41fb0fe6 x40425cb8 1 x40425cb8 1} {x43070000 x42096492 x40106868 1 x40106868 1} {x43080000 x420f9500 x3fc8ec80 1 x3fc8ec80 1} {x43090000 x4215f35a x3fd13a00 1 x3fd13a00 1} {x430a0000 x421ca8a0 x3fd1bb40 1 x3fd1bb40 1} {x430b0000 x42230f0e x3fcf8ca0 1 x3fcf8ca0 1} {x430c0000 x4229a16a x3fd398e0 1 x3fd398e0 1} {x430d0000 x4230489c x3feaf800 1 x3feaf800 1} {x430e0000 x423850ea x400b0678 1 x400b0678 1} {x430f0000 x4241a96b x40193970 1 x40193970 1} {x43100000 x424b7818 x4020ecb0 1 x4020ecb0 1} {x43110000 x4255c701 x4025beb8 1 x4025beb8 1} {x43120000 x42602fef x401e01e0 1 x401e01e0 1} {x43130000 x4269873d x40075758 1 x40075758 1} {x43140000 x42711ada x3fb68100 1 x3fb68100 1} {x43150000 x4274ef4d -} {x43160000 x42747f79 xbe27be00 1 0 1}} {{x42540000 x447b0dac 0 1 xc155d830 1} {x42580000 x447798ac xc16c0fa0 1 xc16c0fa0 1} {x425c0000 x4473ad2f xc1818930 1 xc1818930 1} {x42600000 x446f8019 xc184a200 1 xc184a200 1} {x42640000 x446b630f xc18368b0 1 xc18368b0 1} {x42680000 x4467498e xc1855480 1 xc1855480 1} {x426c0000 x44630dc7 xc18bc8d0 1 xc18bc8d0 1} {x42700000 x445e8d01 xc1986340 1 xc1986340 1} {x42740000 x44598793 xc1a97890 1 xc1a97890 1} {x42780000 x4453f578 xc1bb3ca0 1 xc1bb3ca0 1} {x427c0000 x444dd3c9 xc1ccaeb0 1 xc1ccaeb0 1} {x42800000 x44472a8d xc1d9f9b0 1 xc1d9f9b0 1} {x42820000 x4440342e xc1dde970 1 xc1dde970 1} {x42840000 x44394bf6 xc1dec130 1 xc1dec130 1} {x42860000 x4432481b xc1d74ef0 1 xc1d74ef0 1} {x42880000 x442bd707 xc1d8fa00 1 xc1d8fa00 1} {x428a0000 x4424b87b xc1c9f280 1 xc1c9f280 1} {x428c0000 x441f37df xc1ae0070 1 xc1ae0070 1} {x428e0000 x4419d874 xc1b0a2d0 1 xc1b0a2d0 1} {x42900000 x44142db2 xc1b60b50 1 xc1b60b50 1} {x42920000 x440e77bf xc1b5c5d0 1 xc1b5c5d0 1} {x42940000 x4408d155 xc1b569d0 1 xc1b569d0 1} {x42960000 x44032122 xc1b43890 1 xc1b43890 1} {x42980000 x43fb1b98 xc1ac3f50 1 xc1ac3f50 1} {x429a0000 x43f0ba5a xc1a34ed8 1 xc1a34ed8 1} {x429c0000 x43e6b1bd xc1a21178 1 xc1a21178 1} {x429e0000 x43dc782b xc1a18da8 1 xc1a18da8 1} {x42a00000 x43d28008 xc19e8148 1 xc19e8148 1} {x42a20000 x43c8a802 xc1a177b8 1 xc1a177b8 1} {x42a40000 x43be5111 xc1a84d28 1 xc1a84d28 1} {x42a60000 x43b39e5d xc1a10e60 1 xc1a10e60 1} {x42a80000 x43aa2f45 xc1952a38 1 xc1952a38 1} {x42aa0000 x43a0f916 xc1964e70 1 xc1964e70 1} {x42ac0000 x43976577 xc19924c8 1 xc19924c8 1} {x42ae0000 x438dd47d xc195d998 1 xc195d998 1} {x42b00000 x4384aa44 xc191775c 1 xc191775c 1} {x42b20000 x43774b23 xc1903f74 1 xc1903f74 1} {x42b40000 x436544ab xc19120e4 1 xc19120e4 1} {x42b60000 x435302ea xc1949e08 1 xc1949e08 1} {x42b80000 x43401d29 xc193cb00 1 xc193cb00 1} {x42ba0000 x432e102a xc18eed60 1 xc18eed60 1} {x42bc0000 x431c61d1 xc185ef84 1 xc185ef84 1} {x42be0000 x430c9449 xc172a698 1 xc172a698 1} {x42c00000 x42fc19fc xc15b05d4 1 xc15b05d4 1} {x42c20000 x42e2671d xc147f7a0 1 xc147f7a0 1} {x42c40000 x42ca1c14 xc144d290 1 xc144d290 1} {x42c60000 x42b13279 xc140ec70 1 xc140ec70 1} {x42c80000 x4299e0f8 xc13ae264 1 xc13ae264 1} {x42ca0000 x428279e0 xc140e1bc 1 xc140e1bc 1} {x42cc0000 x42535112 xc1332988 1 xc1332988 1} {x42ce0000 x422b5efc xc11030fc 1 xc11030fc 1} {x42d00000 x420b3894 xc10389c5 1 xc10389c5 1} {x42d20000 x41d33433 xc102a85d 1 xc102a85d 1} {x42d40000 x4193c8cb xc0e6e75d 1 xc0e6e75d 1} {x42d60000 x413f8109 xc0c79f56 1 xc0c79f56 1} {x42d80000 x40bfe480 xc0bb5b4b 1 xc0bb5b4b 1} {x42da0000 x3e84b7bb xc0b92218 1 xc0b92218 1} {x42dc0000 xc0b25fb0 xc0aabe7d 1 xc0aabe7d 1} {x42de0000 xc12698bf xc0882a97 1 xc0882a97 1} {x42e00000 xc1615a6f xc03cb2f2 1 xc03cb2f2 1} {x42e20000 xc182791c xbff0036c 1 xbff0036c 1} {x42e40000 xc18eada5 -} {x42e60000 xc18e577d x3e013c00 1 x3e013c00 1} {x42e80000 xc188f825 x3f8dcea0 1 x3f8dcea0 1} {x42ea0000 xc1793b52 x3f87b76c 1 x3f87b76c 1} {x42ec0000 xc170026f x3f546e40 1 x3f546e40 1} {x42ee0000 xc15ead8a x3f87fdfc 1 x3f87fdfc 1} {x42f00000 xc14e02f0 x3f99dfd4 1 x3f99dfd4 1} {x42f20000 xc1383595 x3fbe30c0 1 x3fbe30c0 1} {x42f40000 xc11e76c0 x3fd30fdc 1 x3fd30fdc 1} {x42f60000 xc103719e x3ff801ac 1 x3ff801ac 1} {x42f80000 xc0c0ecaa x401e0a1c 1 x401e0a1c 1} {x42fa0000 xc051b241 x4040ecaa 1 x4040ecaa 1} {x42fc0000 0 x4042cc3a 1 x4042cc3a 1} {x42fe0000 x4033e633 x40441206 1 x40441206 1} {x43000000 x40c41206 x404b3bfc 1 x404b3bfc 1} {x43010000 x4112978b x404f0474 1 x404f0474 1} {x43020000 x41498b3d x405ae6b6 1 x405ae6b6 1} {x43030000 x41800573 x4065e612 1 x4065e612 1} {x43040000 x419e3f23 x40750b18 1 x40750b18 1} {x43050000 x41bd4839 x407b8660 1 x407b8660 1} {x43060000 x41dd20bb x40926a56 1 x40926a56 1} {x43070000 x42033eb2 x40b1d922 1 x40b1d922 1} {x43080000 x421b06a6 x40bc422c 1 x40bc422c 1} {x43090000 x42324f3d x40b83de4 1 x40b83de4 1} {x430a0000 x4249161f x40b35e88 1 x40b35e88 1} {x430b0000 x425f26df x40afc84c 1 x40afc84c 1} {x430c0000 x42750832 x40b6254c 1 x40b6254c 1} {x430d0000 x42865819 x40bdddc8 1 x40bdddc8 1} {x430e0000 x42923fd2 x40b52958 1 x40b52958 1} {x430f0000 x429cfd44 x40b27998 1 x40b27998 1} {x43100000 x42a88f05 x40b70278 1 x40b70278 1} {x43110000 x42b3dd93 x40af1260 1 x40af1260 1} {x43120000 x42be7151 x40a8dab8 1 x40a8dab8 1} {x43130000 x42c8f8ea x40a0a978 1 x40a0a978 1} {x43140000 x42d28680 x4089f968 1 x4089f968 1} {x43150000 x42da3817 x40466840 1 x40466840 1} {x43160000 x42deed04 x3ffd70a0 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke83 262656 bezier {cc {f 8224} {p {0 0 1} {x43e68b02 x4396ac4a 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke84 262656 bezier {cc {f 8224} {p {0 0 1} {x43e68b02 x4396ac4a 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc36d35f7 0 1 x409440c8 1} {x42580000 xc3682cc8 x40baf010 1 x40baf010 1} {x425c0000 xc36186f6 x40d73740 1 x40d73740 1} {x42600000 xc35ab954 x40e1b2f0 1 x40e1b2f0 1} {x42640000 xc3536bc7 x40e54420 1 x40e54420 1} {x42680000 xc34c6512 x40e1ff00 1 x40e1ff00 1} {x426c0000 xc3454bd7 x40e37b90 1 x40e37b90 1} {x42700000 xc33e2d59 x40e6a440 1 x40e6a440 1} {x42740000 xc336e193 x40f7f690 1 x40f7f690 1} {x42780000 xc32eadf0 x41017330 1 x41017330 1} {x427c0000 xc326b32d x41087690 1 x41087690 1} {x42800000 xc31d9f1e x410d4918 1 x410d4918 1} {x42820000 xc3150a0a x41029b80 1 x41029b80 1} {x42840000 xc30d4bae x40f5e7f0 1 x40f5e7f0 1} {x42860000 xc305ab8b x40c6e200 1 x40c6e200 1} {x42880000 xc300dd8e x40c68188 1 x40c68188 1} {x428a0000 xc2f286e5 x40c284b8 1 x40c284b8 1} {x428c0000 xc2e96a85 x40af2c18 1 x40af2c18 1} {x428e0000 xc2dca162 x40ce8fa0 1 x40ce8fa0 1} {x42900000 xc2cf9891 x40acce98 1 x40acce98 1} {x42920000 xc2c7078f x406b6500 1 x406b6500 1} {x42940000 xc2c0e241 x40413af0 1 x40413af0 1} {x42960000 xc2baf3e0 x4027ade0 1 x4027ade0 1} {x42980000 xc2b66763 x401fe910 1 x401fe910 1} {x429a0000 xc2b0f54f x4010b200 1 x4010b200 1} {x429c0000 xc2ad5c43 x3fcf31e0 1 x3fcf31e0 1} {x429e0000 xc2aa7bc0 x3ec79800 1 x3ec79800 1} {x42a00000 xc2aa3938 x3ec79800 1 x3ec79800 1} {x42a20000 xc2a6c9fb x3ff2dfa0 1 x3ff2dfa0 1} {x42a40000 xc2a2a23b x402d7400 1 x402d7400 1} {x42a60000 xc29bf2bb x4025f320 1 x4025f320 1} {x42a80000 xc2984309 x3fd1a380 1 x3fd1a380 1} {x42aa0000 xc295659f x40057be0 1 x40057be0 1} {x42ac0000 xc28feb4b x3f9255c0 1 x3f9255c0 1} {x42ae0000 xc28f282e -} {x42b00000 xc2904e19 xbf53ff00 1 xbf53ff00 1} {x42b20000 xc292782a xbf89ae00 1 xbf89ae00 1} {x42b40000 xc2949b89 xbf7d2440 1 xbf7d2440 1} {x42b60000 xc2966cbb xbf5b3240 1 xbf5b3240 1} {x42b80000 xc2980852 xbf5a4b80 1 xbf5a4b80 1} {x42ba0000 xc299d5e9 xbf730b00 1 xbf730b00 1} {x42bc0000 xc29bd47e xbf7bb0c0 1 xbf7bb0c0 1} {x42be0000 xc29dc4ac xbf8322c0 1 xbf8322c0 1} {x42c00000 xc29fed94 xbf900060 1 xbf900060 1} {x42c20000 xc2a244af -} {x42c40000 xc29e024d x400a3780 1 x400a3780 1} {x42c60000 xc299a137 x40146390 1 x40146390 1} {x42c80000 xc294bc14 x4020cef0 1 x4020cef0 1} {x42ca0000 xc28f9448 x40252130 1 x40252130 1} {x42cc0000 xc28a6a01 x40344170 1 x40344170 1} {x42ce0000 xc2845031 x403a9b98 1 x403a9b98 1} {x42d00000 xc27d808f x4024bb28 1 x4024bb28 1} {x42d20000 xc27408fd x400b9b10 1 x400b9b10 1} {x42d40000 xc26c0d2d x3ff57a60 1 x3ff57a60 1} {x42d60000 xc264b157 x3fd1aa30 1 x3fd1aa30 1} {x42d80000 xc25ef28a x3fae5fa0 1 x3fae5fa0 1} {x42da0000 xc259cb5d x3fa149f0 1 x3fa149f0 1} {x42dc0000 xc254ddeb x3fa8d230 1 x3fa8d230 1} {x42de0000 xc24f3e3a x3fbd2630 1 x3fbd2630 1} {x42e00000 xc2490b88 x3fcd2410 1 x3fcd2410 1} {x42e20000 xc2426bf9 x3fe010a0 1 x3fe010a0 1} {x42e40000 xc23b0a7e x3ff74540 1 x3ff74540 1} {x42e60000 xc232f7a5 x4003d230 1 x4003d230 1} {x42e80000 xc22a9038 x40024ee8 1 x40024ee8 1} {x42ea0000 xc222adc8 x4014d5d8 1 x4014d5d8 1} {x42ec0000 xc217f57d x4041d240 1 x4041d240 1} {x42ee0000 xc20a7380 x406ecf00 1 x406ecf00 1} {x42f00000 xc1f4373a x4089bb44 1 x4089bb44 1} {x42f20000 xc1d0095e x40977a6c 1 x40977a6c 1} {x42f40000 xc1a87a04 x40a37b89 1 x40a37b89 1} {x42f60000 xc17c9733 x40a97ade 1 x40a97ade 1} {x42f80000 xc127792a x40a7e942 1 x40a7e942 1} {x42fa0000 xc0a95be1 x40a7792a 1 x40a7792a 1} {x42fc0000 0 x40ad1dcc 1 x40ad1dcc 1} {x42fe0000 x40b0dfb6 x40b33f68 1 x40b33f68 1} {x43000000 x41333f68 x40b2addf 1 x40b2addf 1} {x43010000 x41858edd x40ab204a 1 x40ab204a 1} {x43020000 x41af2fd9 x40a2ab34 1 x40a2ab34 1} {x43030000 x41d6e477 x409b51a4 1 x409b51a4 1} {x43040000 x41fcd8ab x408eca76 1 x408eca76 1} {x43050000 x420f24d9 x40760b9c 1 x40760b9c 1} {x43060000 x421d2dc9 x405238b8 1 x405238b8 1} {x43070000 x42296bf0 x40363e50 1 x40363e50 1} {x43080000 x4233f593 x401d9130 1 x401d9130 1} {x43090000 x423d1e16 x4011d628 1 x4011d628 1} {x430a0000 x42463058 x4009c9c0 1 x4009c9c0 1} {x430b0000 x424e574e x3ffda290 1 x3ffda290 1} {x430c0000 x42560a81 x3feada70 1 x3feada70 1} {x430d0000 x425d04f5 x3fe60d20 1 x3fe60d20 1} {x430e0000 x42646b53 x40006c98 1 x40006c98 1} {x430f0000 x426d1288 x400e73d8 1 x400e73d8 1} {x43100000 x427639ce x40176ac8 1 x40176ac8 1} {x43110000 x427fffe1 x401e5250 1 x401e5250 1} {x43120000 x4285020c x401c88a8 1 x401c88a8 1} {x43130000 x4289c87b x40044df0 1 x40044df0 1} {x43140000 x428d46eb x3fa0b620 1 x3fa0b620 1} {x43150000 x428ece2c -} {x43160000 x428e77aa xbe81c300 1 0 1}} {{x42540000 x448363fc 0 1 xc15529f0 1} {x42580000 x4481a908 xc16e1a20 1 xc16e1a20 1} {x425c0000 x447f5727 xc1827e10 1 xc1827e10 1} {x42600000 x447b2a2f xc184b020 1 xc184b020 1} {x42640000 x44770c25 xc1837300 1 xc1837300 1} {x42680000 x4472f2ff xc1854040 1 xc1854040 1} {x426c0000 x446eb821 xc18bc830 1 xc18bc830 1} {x42700000 x446a367c xc198ecd0 1 xc198ecd0 1} {x42740000 x44652954 xc1aa3830 1 xc1aa3830 1} {x42780000 x445f92f9 xc1bbb4e0 1 xc1bbb4e0 1} {x427c0000 x44596e06 xc1cbe010 1 xc1cbe010 1} {x42800000 x4452d4f8 xc1d47e70 1 xc1d47e70 1} {x42820000 x444c261f xc1d58990 1 xc1d58990 1} {x42840000 x44457c5f xc1d312f0 1 xc1d312f0 1} {x42860000 x443ef4f0 xc1d0fe60 1 xc1d0fe60 1} {x42880000 x44386c79 xc1d5ef30 1 xc1d5ef30 1} {x428a0000 x443195fd xc1d29a60 1 xc1d29a60 1} {x428c0000 x442b42d3 xc1c3c3b0 1 xc1c3c3b0 1} {x428e0000 x442559c2 xc1c20e50 1 xc1c20e50 1} {x42900000 x441f21ee xc1c311e0 1 xc1c311e0 1} {x42920000 x441928a4 xc1c3b140 1 xc1c3b140 1} {x42940000 x4412e6da xc1c71b20 1 xc1c71b20 1} {x42960000 x440cb6f2 xc1c30360 1 xc1c30360 1} {x42980000 x4406b6a4 xc1b7b040 1 xc1b7b040 1} {x429a0000 x44013bee xc1ac8160 1 xc1ac8160 1} {x429c0000 x43f7dd1c xc1a7ee88 1 xc1a7ee88 1} {x429e0000 x43ed7a0b xc1a390f0 1 xc1a390f0 1} {x42a00000 x43e36afe xc1a39198 1 xc1a39198 1} {x42a20000 x43d907d8 xc1a6d7b0 1 xc1a6d7b0 1} {x42a40000 x43ce9008 xc1a2e3c8 1 xc1a2e3c8 1} {x42a60000 x43c4ab5f xc1a1d9d0 1 xc1a1d9d0 1} {x42a80000 x43ba54ce xc1a6bcb8 1 xc1a6bcb8 1} {x42aa0000 x43afd3c8 xc1aa05c8 1 xc1aa05c8 1} {x42ac0000 x43a51415 xc1a71760 1 xc1a71760 1} {x42ae0000 x439af0dc xc19f97d0 1 xc19f97d0 1} {x42b00000 x4391211b xc19c4c50 1 xc19c4c50 1} {x42b20000 x43876752 xc19c7aec 1 xc19c7aec 1} {x42b40000 x437b237b xc19e9a74 1 xc19e9a74 1} {x42b60000 x43672807 xc1a0443c 1 xc1a0443c 1} {x42b80000 x4353126c xc19e0fac 1 xc19e0fac 1} {x42ba0000 x433fa41c xc19707f4 1 xc19707f4 1} {x42bc0000 x432d506f xc18d995c 1 xc18d995c 1} {x42be0000 x431c3dc5 xc18304e8 1 xc18304e8 1} {x42c00000 x430c8f35 xc17008d8 1 xc17008d8 1} {x42c20000 x42fc7954 xc15cd140 1 xc15cd140 1} {x42c40000 x42e1ea1a xc14ec308 1 xc14ec308 1} {x42c60000 x42c8c892 xc14c8b38 1 xc14c8b38 1} {x42c80000 x42aec74c xc14ffb8c 1 xc14ffb8c 1} {x42ca0000 x4294c9af xc14efb7e 1 xc14efb7e 1} {x42cc0000 x427610d9 xc142489e 1 xc142489e 1} {x42ce0000 x42486f0f xc131b00a 1 xc131b00a 1} {x42d00000 x421d38d4 xc1294730 1 xc1294730 1} {x42d20000 x41e796ee xc11da68d 1 xc11da68d 1} {x42d40000 x419ccb1b xc10dc0af 1 xc10dc0af 1} {x42d60000 x4133ac7e xc0f70343 1 xc0f70343 1} {x42d80000 x408525e6 xc0d7643c 1 xc0d7643c 1} {x42da0000 xc00edef8 xc0c67ac3 1 xc0c67ac3 1} {x42dc0000 xc103e7d0 xc0b2ff3f 1 xc0b2ff3f 1} {x42de0000 xc156b6fd xc08d63a0 1 xc08d63a0 1} {x42e00000 xc188a5b8 xc03d8d22 1 xc03d8d22 1} {x42e20000 xc19abec7 xbfd7ddc8 1 xbfd7ddc8 1} {x42e40000 xc1a3a171 xbf3b5910 1 xbf3b5910 1} {x42e60000 xc1a67458 -} {x42e80000 xc19e275d x3fb3ddc8 1 x3fb3ddc8 1} {x42ea0000 xc18ff89f x3fda13b0 1 x3fda13b0 1} {x42ec0000 xc182e4e7 x3fce80b0 1 x3fce80b0 1} {x42ee0000 xc16c5112 x3fcffd64 1 x3fcffd64 1} {x42f00000 xc151ca75 x3fcd37d4 1 x3fcd37d4 1} {x42f20000 xc139031d x3fc539c4 1 x3fc539c4 1} {x42f40000 xc1207c04 x3fd4dd20 1 x3fd4dd20 1} {x42f60000 xc103cbd5 x3ff8fcd2 1 x3ff8fcd2 1} {x42f80000 xc0c4799f x401df336 1 x401df336 1} {x42fa0000 xc05348e9 x4044799f 1 x4044799f 1} {x42fc0000 0 x405e7701 1 x405e7701 1} {x42fe0000 x4069a519 x4062a1ab 1 x4062a1ab 1} {x43000000 x40e2a1ab x405dfe26 1 x405dfe26 1} {x43010000 x41296859 x4069b85d 1 x4069b85d 1} {x43020000 x41662d04 x40803885 1 x40803885 1} {x43030000 x4194d06f x4089aa44 1 x4089aa44 1} {x43040000 x41b7eba4 x408cad96 1 x408cad96 1} {x43050000 x41db273a x4096c810 1 x4096c810 1} {x43060000 x4201a7d6 x40aa9e94 1 x40aa9e94 1} {x43070000 x42183b42 x40b827e8 1 x40b827e8 1} {x43080000 x422fb1d0 x40c22dcc 1 x40c22dcc 1} {x43090000 x4248c6b5 x40c918b0 1 x40c918b0 1} {x430a0000 x4261f7fc x40c459a8 1 x40c459a8 1} {x430b0000 x4279dd1f x40bf9e48 1 x40bf9e48 1} {x430c0000 x4288efc7 x40c738c4 1 x40c738c4 1} {x430d0000 x4295d5a8 x40d2fe68 1 x40d2fe68 1} {x430e0000 x42a34f94 x40d962d8 1 x40d962d8 1} {x430f0000 x42b10203 x40d57068 1 x40d57068 1} {x43100000 x42bdfda1 x40d0bbf8 1 x40d0bbf8 1} {x43110000 x42cb1982 x40cbc5f8 1 x40cbc5f8 1} {x43120000 x42d77660 x40bf4fd8 1 x40bf4fd8 1} {x43130000 x42e3037d x40b1be88 1 x40b1be88 1} {x43140000 x42edae31 x40a255f0 1 x40a255f0 1} {x43150000 x42f74e3b x40727b90 1 x40727b90 1} {x43160000 x42fcd5ea x40103308 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke85 262656 bezier {cc {f 8224} {p {0 0 1} {x429a21cb x4464420c 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke86 262656 bezier {cc {f 8224} {p {0 0 1} {x429a21cb x4464420c 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc35ea514 0 1 x408107e0 1} {x42580000 xc35a4d45 x409edde0 1 x409edde0 1} {x425c0000 xc354b736 x40c58fe0 1 x40c58fe0 1} {x42600000 xc34df447 x40e040e0 1 x40e040e0 1} {x42640000 xc346b328 x40e3b400 1 x40e3b400 1} {x42680000 xc33fb907 x40e06ed0 1 x40e06ed0 1} {x426c0000 xc338ac3b x40e1de30 1 x40e1de30 1} {x42700000 xc3319b24 x40e50530 1 x40e50530 1} {x42740000 xc32a5be8 x40eb8810 1 x40eb8810 1} {x42780000 xc322e2a3 x40ed8520 1 x40ed8520 1} {x427c0000 xc31b8396 x40f88b80 1 x40f88b80 1} {x42800000 xc31359eb x40fdd5b0 1 x40fdd5b0 1} {x42820000 xc30ba63b x40f0f560 1 x40f0f560 1} {x42840000 xc3044a95 x40eb09e0 1 x40eb09e0 1} {x42860000 xc2f9eb3a x40c8c0c0 1 x40c8c0c0 1} {x42880000 xc2ef7d12 x40d0bae8 1 x40d0bae8 1} {x428a0000 xc2dfd3dd x40bf0650 1 x40bf0650 1} {x428c0000 xc2d79c48 x4077dc90 1 x4077dc90 1} {x428e0000 xc2d05614 x407569b0 1 x407569b0 1} {x42900000 xc2c845ad x40813bf0 1 x40813bf0 1} {x42920000 xc2c02e96 x3f91f8c0 1 x3f91f8c0 1} {x42940000 xc2bf6bf5 x3ece3f80 1 x3ece3f80 1} {x42960000 xc2be9217 x3f17b0c0 1 x3f17b0c0 1} {x42980000 xc2bd0d32 x3fb27860 1 x3fb27860 1} {x429a0000 xc2b8fe54 x3fae5000 1 x3fae5000 1} {x429c0000 xc2b79ab2 -} {x429e0000 xc2b8ab2f xbedd1000 1 xbedd1000 1} {x42a00000 xc2b954d2 -} {x42a20000 xc2b91040 x3e3e5400 1 x3e3e5400 1} {x42a40000 xc2b8967e x3e4b7100 1 x3e4b7100 1} {x42a60000 xc2b844cf x3de82400 1 x3de82400 1} {x42a80000 xc2b8226c -} {x42aa0000 xc2b83b75 xbe163600 1 xbe163600 1} {x42ac0000 xc2b8bec9 xbe761400 1 xbe761400 1} {x42ae0000 xc2b93189 -} {x42b00000 xc2b82877 -} {x42b20000 xc2b83283 xbd712000 1 xbd712000 1} {x42b40000 xc2b8c4f7 xbe474000 1 xbe474000 1} {x42b60000 xc2b8f9c3 xbe0ac700 1 xbe0ac700 1} {x42b80000 xc2b94fbe xbeb60e80 1 xbeb60e80 1} {x42ba0000 xc2ba65e0 xbf16ac40 1 xbf16ac40 1} {x42bc0000 xc2bbaa6f xbf0418c0 1 xbf0418c0 1} {x42be0000 xc2bc7643 xbec0fa80 1 xbec0fa80 1} {x42c00000 xc2bd2c64 xbdb2a400 1 xbdb2a400 1} {x42c20000 xc2bd3b47 -} {x42c40000 xc2bbf148 x3f752fc0 1 x3f752fc0 1} {x42c60000 xc2b96688 x3fabc0a0 1 x3fabc0a0 1} {x42c80000 xc2b69343 x3fef6c60 1 x3fef6c60 1} {x42ca0000 xc2b1eb25 x403bb560 1 x403bb560 1} {x42cc0000 xc2aad7ed x4034f9a0 1 x4034f9a0 1} {x42ce0000 xc2a69b8b x40056b50 1 x40056b50 1} {x42d00000 xc2a28138 x3ff7c100 1 x3ff7c100 1} {x42d20000 xc29edd83 x3fe68000 1 x3fe68000 1} {x42d40000 xc29b4d38 x3fe3ff20 1 x3fe3ff20 1} {x42d60000 xc297bd8a x3fda30e0 1 x3fda30e0 1} {x42d80000 xc2947bb1 x3fea8f20 1 x3fea8f20 1} {x42da0000 xc2906911 x40022ee0 1 x40022ee0 1} {x42dc0000 xc28c58c3 x40163480 1 x40163480 1} {x42de0000 xc28705c9 x402e0290 1 x402e0290 1} {x42e00000 xc281789a x4043ec70 1 x4043ec70 1} {x42e20000 xc2758e04 x405f3da0 1 x405f3da0 1} {x42e40000 xc2670980 x40869e48 1 x40869e48 1} {x42e60000 xc253e672 x406b8f18 1 x406b8f18 1} {x42e80000 xc249979d x402f6e00 1 x402f6e00 1} {x42ea0000 xc23df8b2 x4048c110 1 x4048c110 1} {x42ec0000 xc2307f7b x40758798 1 x40758798 1} {x42ee0000 xc21f47bf x408c001c 1 x408c001c 1} {x42f00000 xc20d7f74 x4099b9e2 1 x4099b9e2 1} {x42f20000 xc1f1b28d x40abcbba 1 x40abcbba 1} {x42f40000 xc1c5190b x40b8f346 1 x40b8f346 1} {x42f60000 xc19538ea x40c4e53b 1 x40c4e53b 1} {x42f80000 xc1454cdb x40ca4f08 1 x40ca4f08 1} {x42fa0000 xc0c04597 x40c54cdb 1 x40c54cdb 1} {x42fc0000 0 x40cc5568 1 x40cc5568 1} {x42fe0000 x40d86539 x40cfb928 1 x40cfb928 1} {x43000000 x414fb928 x40c48d24 1 x40c48d24 1} {x43010000 x41985fe0 x40bd0010 1 x40bd0010 1} {x43020000 x41c65c9c x40b885e8 1 x40b885e8 1} {x43030000 x41f4a2d4 x40acb500 1 x40acb500 1} {x43040000 x420e5b8e x4090f7d8 1 x4090f7d8 1} {x43050000 x421e8f60 x40717d70 1 x40717d70 1} {x43060000 x422c8b3c x40576a60 1 x40576a60 1} {x43070000 x42397cac x404df278 1 x404df278 1} {x43080000 x4246498b x4044bce0 1 x4044bce0 1} {x43090000 x42521448 x403f8e78 1 x403f8e78 1} {x430a0000 x425e3b5a x40456b80 1 x40456b80 1} {x430b0000 x426ac1b8 x4049bb30 1 x4049bb30 1} {x430c0000 x427772c0 x40461140 1 x40461140 1} {x430d0000 x4281c1f0 x404ffa70 1 x404ffa70 1} {x430e0000 x4288b907 x40689c10 1 x40689c10 1} {x430f0000 x42904bb1 x4076ace0 1 x4076ace0 1} {x43100000 x429823d5 x407aeb70 1 x407aeb70 1} {x43110000 x429ffa68 x40786500 1 x40786500 1} {x43120000 x42a7aa25 x4071c670 1 x4071c670 1} {x43130000 x42af16cf x4059f090 1 x4059f090 1} {x43140000 x42b5492e x4025dda0 1 x4025dda0 1} {x43150000 x42b974a9 x3fc556c0 1 x3fc556c0 1} {x43160000 x42bb73e4 x3f3a1580 1 0 1}} {{x42540000 x44852d17 0 1 xc155e6e0 1} {x42580000 x4483726f xc16c2e40 1 xc16c2e40 1} {x425c0000 x44817c5e xc1818ad0 1 xc1818ad0 1} {x42600000 x447ecc31 xc184a0e0 1 xc184a0e0 1} {x42640000 x447aaeae xc1835fa0 1 xc1835fa0 1} {x42680000 x44769637 xc1853580 1 xc1853580 1} {x426c0000 x44725b56 xc18bbcf0 1 xc18bbcf0 1} {x42700000 x446dda68 xc198d8c0 1 xc198d8c0 1} {x42740000 x4468cdca xc1a9e2f0 1 xc1a9e2f0 1} {x42780000 x44633c39 xc1bb2990 1 xc1bb2990 1} {x427c0000 x445d1b31 xc1cca5b0 1 xc1cca5b0 1} {x42800000 x445671de xc1d9f1f0 1 xc1d9f1f0 1} {x42820000 x444f7c12 xc1d91960 1 xc1d91960 1} {x42840000 x4448e048 xc1d51f00 1 xc1d51f00 1} {x42860000 x44422a22 xc1d56bd0 1 xc1d56bd0 1} {x42880000 x443b898b xc1dbf660 1 xc1dbf660 1} {x428a0000 x44346abc xc1d52530 1 xc1d52530 1} {x428c0000 x442e3738 xc1b8bf70 1 xc1b8bf70 1} {x428e0000 x4428dec5 xc1b01ee0 1 xc1b01ee0 1} {x42900000 x4423354a xc1ba33d0 1 xc1ba33d0 1} {x42920000 x441d3b88 xc1c2a100 1 xc1c2a100 1} {x42940000 x44170b3a xc1c4ef20 1 xc1c4ef20 1} {x42960000 x4410ec96 xc1c2a9b0 1 xc1c2a9b0 1} {x42980000 x440ae09f xc1b64370 1 xc1b64370 1} {x429a0000 x4405885f xc1adfae0 1 xc1adfae0 1} {x429c0000 x440000f1 xc1b0f130 1 xc1b0f130 1} {x429e0000 x43f4f298 xc1ae4360 1 xc1ae4360 1} {x42a00000 x43ea3976 xc1ad3e58 1 xc1ad3e58 1} {x42a20000 x43df4acd xc1adfe48 1 xc1adfe48 1} {x42a40000 x43d479ad xc1adae30 1 xc1adae30 1} {x42a60000 x43c99507 xc1afb438 1 xc1afb438 1} {x42a80000 x43be8326 xc1b04c60 1 xc1b04c60 1} {x42aa0000 x43b38b7b xc1ad5710 1 xc1ad5710 1} {x42ac0000 x43a8d844 xc1a6fa78 1 xc1a6fa78 1} {x42ae0000 x439eac2c xc1a7d668 1 xc1a7d668 1} {x42b00000 x4393dd77 xc1ac8360 1 xc1ac8360 1} {x42b20000 x43891bc0 xc1ab5b74 1 xc1ab5b74 1} {x42b40000 x437ce411 xc1acab94 1 xc1acab94 1} {x42b60000 x43670c9b xc1acc5b4 1 xc1acc5b4 1} {x42b80000 x4351b2a4 xc1a846fc 1 xc1a846fc 1} {x42ba0000 x433cfadc xc1a13e38 1 xc1a13e38 1} {x42bc0000 x43296316 xc196b39c 1 xc196b39c 1} {x42be0000 x43174df5 xc18c0b98 1 xc18c0b98 1} {x42c00000 x43066030 xc183d4c0 1 xc183d4c0 1} {x42c20000 x42ecb18a xc17188d8 1 xc17188d8 1} {x42c40000 x42d05e2a xc15b460c 1 xc15b460c 1} {x42c60000 x42b5e007 xc155875c 1 xc155875c 1} {x42c80000 x429afc53 xc15dae08 1 xc15dae08 1} {x42ca0000 x427ce90a xc16a205c 1 xc16a205c 1} {x42cc0000 x4240e878 xc1659e66 1 xc1659e66 1} {x42ce0000 x420a19d7 xc1547cdc 1 xc1547cdc 1} {x42d00000 x41ad5414 xc142301a 1 xc142301a 1} {x42d20000 x41240729 xc12cef67 1 xc12cef67 1} {x42d40000 x3d495a41 xc11b6bac 1 xc11b6bac 1} {x42d60000 xc112d02f xc1066fbc 1 xc1066fbc 1} {x42d80000 xc1860b0f xc0e80a7b 1 xc0e80a7b 1} {x42da0000 xc1bd6d55 xc0cd4c26 1 xc0cd4c26 1} {x42dc0000 xc1ecb122 xc0aed056 1 xc0aed056 1} {x42de0000 xc20a6ac0 xc07109f8 1 xc07109f8 1} {x42e00000 xc21479d0 xbfe7f890 1 xbfe7f890 1} {x42e20000 xc218ea49 -} {x42e40000 xc21851e3 x3ee49900 1 x3ee49900 1} {x42e60000 xc211a51d x400166d8 1 x400166d8 1} {x42e80000 xc2082508 x4025058c 1 x4025058c 1} {x42ea0000 xc1fa08d7 x403ed3b0 1 x403ed3b0 1} {x42ec0000 xc1e09524 x404f875c 1 x404f875c 1} {x42ee0000 xc1c62700 x4044c9ac 1 x4044c9ac 1} {x42f00000 xc1af62b9 x40401ea4 1 x40401ea4 1} {x42f20000 xc1961f57 x4043e4a0 1 x4043e4a0 1} {x42f40000 xc17cd322 x40523ba2 1 x40523ba2 1} {x42f60000 xc14320dd x4069577a 1 x4069577a 1} {x42f80000 xc1082765 x407f1beb 1 x407f1beb 1} {x42fa0000 xc08725cf x40882765 1 x40882765 1} {x42fc0000 0 x408fa322 1 x408fa322 1} {x42fe0000 x40982074 x40934bee 1 x40934bee 1} {x43000000 x41134bee x408e1ed2 1 x408e1ed2 1} {x43010000 x415a2f0c x4098a456 1 x4098a456 1} {x43020000 x4195f822 x40935b52 1 x40935b52 1} {x43030000 x41b6c52f x407ab9e8 1 x407ab9e8 1} {x43040000 x41d4a69c -} {x43050000 x41d30b58 -} {x43060000 x41d87143 x3f6f97f0 1 x3f6f97f0 1} {x43070000 x41e204d7 x3f9e0240 1 x3f9e0240 1} {x43080000 x41ec318b x3fc71998 1 x3fc71998 1} {x43090000 x41fae80a x4008782c 1 x4008782c 1} {x430a0000 x420727cb x40275370 1 x40275370 1} {x430b0000 x42125e73 x403aa3b0 1 x403aa3b0 1} {x430c0000 x421e7c41 x404f5c58 1 x404f5c58 1} {x430d0000 x422c49fe x405eb908 1 x405eb908 1} {x430e0000 x423a5362 x40579a18 1 x40579a18 1} {x430f0000 x42473d41 x404811b0 1 x404811b0 1} {x43100000 x42535598 x40371700 1 x40371700 1} {x43110000 x425e2021 x40260698 1 x40260698 1} {x43120000 x4268166b x401ef1c8 1 x401ef1c8 1} {x43130000 x4271fe5a x4026b090 1 x4026b090 1} {x43140000 x427cec7d x401c39b0 1 x401c39b0 1} {x43150000 x4282c2c8 x3ba2c000 1 x3ba2c000 1} {x43160000 x4282c3a1 -}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke87 262656 bezier {cc {f 8224} {p {0 0 1} {x43c21d2f x42663a5e 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke88 262656 bezier {cc {f 8224} {p {0 0 1} {x43c21d2f x42663a5e 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc38a9939 0 1 x40800b10 1} {x42580000 xc38870b6 x409e4c20 1 x409e4c20 1} {x425c0000 xc385a6d8 x40c41700 1 x40c41700 1} {x42600000 xc3824ffe x40dd7d90 1 x40dd7d90 1} {x42640000 xc37d75d7 x40e0ef60 1 x40e0ef60 1} {x42680000 xc3769106 x40d4d2b0 1 x40d4d2b0 1} {x426c0000 xc37028ac x40cce9a0 1 x40cce9a0 1} {x42700000 xc369c26c x40d06f10 1 x40d06f10 1} {x42740000 xc36321bb x40d80050 1 x40d80050 1} {x42780000 xc35c4267 x40e026f0 1 x40e026f0 1} {x427c0000 xc3551f4c x40f08040 1 x40f08040 1} {x42800000 xc34d3a63 x40f98980 1 x40f98980 1} {x42820000 xc34586b4 x40ebd4f0 1 x40ebd4f0 1} {x42840000 xc33e7d14 x40df2d20 1 x40df2d20 1} {x42860000 xc33793e2 x40e69dc0 1 x40e69dc0 1} {x42880000 xc3301338 x40fa6600 1 x40fa6600 1} {x428a0000 xc327ed82 x41026288 1 x41026288 1} {x428c0000 xc31fc6e7 x40f8db00 1 x40f8db00 1} {x428e0000 xc3185fd2 x40f71e90 1 x40f71e90 1} {x42900000 xc31054fe x40b1ebb0 1 x40b1ebb0 1} {x42920000 xc30d4117 x4055f580 1 x4055f580 1} {x42940000 xc309a552 x405c3d80 1 x405c3d80 1} {x42960000 xc3065f2b x404c6d40 1 x404c6d40 1} {x42980000 xc30341e8 x404f7d80 1 x404f7d80 1} {x429a0000 xc2ffc67e x40551cc0 1 x40551cc0 1} {x429c0000 xc2f93204 x403d0130 1 x403d0130 1} {x429e0000 xc2f3f66b x3e6f7000 1 x3e6f7000 1} {x42a00000 xc2f3ce83 x3e4f9800 1 x3e4f9800 1} {x42a20000 xc2f326d3 x3eba8380 1 x3eba8380 1} {x42a40000 xc2f2597c x3f904e60 1 x3f904e60 1} {x42a60000 xc2eea460 x400417c0 1 x400417c0 1} {x42a80000 xc2ea1800 x4006b630 1 x4006b630 1} {x42aa0000 xc2e638fd x405287c0 1 x405287c0 1} {x42ac0000 xc2dcef84 x40875328 1 x40875328 1} {x42ae0000 xc2d54e98 x405489a0 1 x405489a0 1} {x42b00000 xc2cfa6ea x4026f860 1 x4026f860 1} {x42b20000 xc2cadf12 x4004db50 1 x4004db50 1} {x42b40000 xc2c75935 x3feb2e60 1 x3feb2e60 1} {x42b60000 xc2c3859f x3ff98aa0 1 x3ff98aa0 1} {x42b80000 xc2bf8ce0 x40235450 1 x40235450 1} {x42ba0000 xc2b9505a x40381660 1 x40381660 1} {x42bc0000 xc2b40b7a x4026a340 1 x4026a340 1} {x42be0000 xc2aee626 x40073220 1 x40073220 1} {x42c00000 xc2ab9858 x3fcf5b00 1 x3fcf5b00 1} {x42c20000 xc2a86b4e x403b49e0 1 x403b49e0 1} {x42c40000 xc29fe3ba x408c8888 1 x408c8888 1} {x42c60000 xc296da3d x40962cb8 1 x40962cb8 1} {x42c80000 xc28d1e23 x409dadd8 1 x409dadd8 1} {x42ca0000 xc2832482 x40a2aa78 1 x40a2aa78 1} {x42cc0000 xc27191a8 x40a7d568 1 x40a7d568 1} {x42ce0000 xc25c53aa x40913358 1 x40913358 1} {x42d00000 xc24d44d2 x405a9508 1 x405a9508 1} {x42d20000 xc2410109 x40373850 1 x40373850 1} {x42d40000 xc2365dc8 x40466b08 1 x40466b08 1} {x42d60000 xc22833a8 x402f7110 1 x402f7110 1} {x42d80000 xc2206fa6 x3fdad5d0 1 x3fdad5d0 1} {x42da0000 xc21a864b x3fc57580 1 x3fc57580 1} {x42dc0000 xc214184e x3fd2ec80 1 x3fd2ec80 1} {x42de0000 xc20d5783 x3fddfce0 1 x3fddfce0 1} {x42e00000 xc2063880 x3fe99a88 1 x3fe99a88 1} {x42e20000 xc1fd7bb5 x3fbd2548 1 x3fbd2548 1} {x42e40000 xc1f4cc57 x3f8f4ce0 1 x3f8f4ce0 1} {x42e60000 xc1eb9219 x3fa162f0 1 x3fa162f0 1} {x42e80000 xc1e09ff9 x3fa08348 1 x3fa08348 1} {x42ea0000 xc1d781b0 x3fb1c0c0 1 x3fb1c0c0 1} {x42ec0000 xc1ca67e1 x3fd27420 1 x3fd27420 1} {x42ee0000 xc1bd332c x40096390 1 x40096390 1} {x42f00000 xc1a80efd x4032af0c 1 x4032af0c 1} {x42f20000 xc1908769 x4048d44c 1 x4048d44c 1} {x42f40000 xc16bb3d4 x4060b08c 1 x4060b08c 1} {x42f60000 xc130b68c x406f0150 1 x406f0150 1} {x42f80000 xc0e86658 x406910ae 1 x406910ae 1} {x42fa0000 xc070b8d3 x40686658 1 x40686658 1} {x42fc0000 0 x407686b7 1 x407686b7 1} {x42fe0000 x407c549b x407f4c42 1 x407f4c42 1} {x43000000 x40ff4c42 x4082a730 1 x4082a730 1} {x43010000 x4141bc57 x4085191d 1 x4085191d 1} {x43020000 x41825f9f x40758fa2 1 x40758fa2 1} {x43030000 x419e4214 x406283b4 1 x406283b4 1} {x43040000 x41bb008c x40547068 1 x40547068 1} {x43050000 x41d35e2e x403611d0 1 x403611d0 1} {x43060000 x41e88500 x4015f184 1 x4015f184 1} {x43070000 x41f8da8f x3fd76200 1 x3fd76200 1} {x43080000 x4201b8a0 x3f9dcd98 1 x3f9dcd98 1} {x43090000 x42064a21 x3f9fde00 1 x3f9fde00 1} {x430a0000 x420bb680 x3f9a2b50 1 x3f9a2b50 1} {x430b0000 x420fecd6 x3f733900 1 x3f733900 1} {x430c0000 x42135048 x3f37fd20 1 x3f37fd20 1} {x430d0000 x4215acbf x3f3dcd20 1 x3f3dcd20 1} {x430e0000 x42193eb1 x3f817980 1 x3f817980 1} {x430f0000 x421dc457 x3fa32460 1 x3fa32460 1} {x43100000 x422370f7 x3fc57e00 1 x3fc57e00 1} {x43110000 x422a1c37 x3fd53b70 1 x3fd53b70 1} {x43120000 x4230c4ae x3fbe94e0 1 x3fbe94e0 1} {x43130000 x42360585 x3f864020 1 x3f864020 1} {x43140000 x423928b0 -} {x43150000 x42388f8d xbee5b480 1 xbee5b480 1} {x43160000 x4234c290 xbf99b8e0 1 0 1}} {{x42540000 x448dc62b 0 1 xc155caa0 1} {x42580000 x448c0bd1 xc16bf1c0 1 xc16bf1c0 1} {x425c0000 x448a1664 xc1818b20 1 xc1818b20 1} {x42600000 x4487ff78 xc184a660 1 xc184a660 1} {x42640000 x4485f131 xc1837780 1 xc1837780 1} {x42680000 x4483e3bc xc1851ae0 1 xc1851ae0 1} {x426c0000 x4481c85a xc18b0890 1 xc18b0890 1} {x42700000 x447f16ef xc1980120 1 xc1980120 1} {x42740000 x447a10a2 xc1a98130 1 xc1a98130 1} {x42780000 x44747edc xc1bb3cd0 1 xc1bb3cd0 1} {x427c0000 x446e5cd5 xc1cce3f0 1 xc1cce3f0 1} {x42800000 x4467b09d xc1da3460 1 xc1da3460 1} {x42820000 x4460b98f xc1deb4b0 1 xc1deb4b0 1} {x42840000 x4459c552 xc1e04b80 1 xc1e04b80 1} {x42860000 x4452b4d7 xc1e3bad0 1 xc1e3bad0 1} {x42880000 x444b89a5 xc1e81cd0 1 xc1e81cd0 1} {x428a0000 x4444330a xc1eb2620 1 xc1eb2620 1} {x428c0000 x443cd743 xc1e8afe0 1 xc1e8afe0 1} {x428e0000 x4435a80c xc1e71f90 1 xc1e71f90 1} {x42900000 x442e654a xc1d9fb30 1 xc1d9fb30 1} {x42920000 x44280859 xc1caf630 1 xc1caf630 1} {x42940000 x4421b5e7 xc1c85290 1 xc1c85290 1} {x42960000 x441b8330 xc1c45e80 1 xc1c45e80 1} {x42980000 x44156fff xc1bede90 1 xc1bede90 1} {x429a0000 x440f9547 xc1b6eef0 1 xc1b6eef0 1} {x429c0000 x440a0110 xc1afdf40 1 xc1afdf40 1} {x429e0000 x44049753 xc1a5e888 1 xc1a5e888 1} {x42a00000 x43ff450f xc19f4e18 1 xc19f4e18 1} {x42a20000 x43f544e3 xc1a02fe0 1 xc1a02fe0 1} {x42a40000 x43eb3f13 xc1a65d08 1 xc1a65d08 1} {x42a60000 x43e07942 xc1aab2f0 1 xc1aab2f0 1} {x42a80000 x43d5e8b5 xc1ab4628 1 xc1ab4628 1} {x42aa0000 x43cb107d xc1b2e3a0 1 xc1b2e3a0 1} {x42ac0000 x43bf8c41 xc1b4af38 1 xc1b4af38 1} {x42ae0000 x43b47a96 xc1af4490 1 xc1af4490 1} {x42b00000 x43a9a3af xc1aefd98 1 xc1aefd98 1} {x42b20000 x439e9ae3 xc1afb130 1 xc1afb130 1} {x42b40000 x4393ad89 xc1b10108 1 xc1b10108 1} {x42b60000 x43887ac2 xc1b1d354 1 xc1b1d354 1} {x42b80000 x437ae63d xc1b32a08 1 xc1b32a08 1} {x42ba0000 x43642b02 xc1b03850 1 xc1b03850 1} {x42bc0000 x434ed829 xc1a5f2b8 1 xc1a5f2b8 1} {x42be0000 x433aae54 xc197dce4 1 xc197dce4 1} {x42c00000 x4328e0f0 xc1898ab4 1 xc1898ab4 1} {x42c20000 x43184ba7 xc179e8d0 1 xc179e8d0 1} {x42c40000 x4309a3d6 xc16a9030 1 xc16a9030 1} {x42c60000 x42f5f342 xc16618c8 1 xc16618c8 1} {x42c80000 x42d9c17a xc1643c00 1 xc1643c00 1} {x42ca0000 x42bce442 xc167990c 1 xc167990c 1} {x42cc0000 x429fdb37 xc1628f34 1 xc1628f34 1} {x42ce0000 x42844075 xc14e802a 1 xc14e802a 1} {x42d00000 x42587659 xc13d4e0a 1 xc13d4e0a 1} {x42d20000 x4229d9e5 xc12f0d12 1 xc12f0d12 1} {x42d40000 x4200efd0 xc120f87a 1 xc120f87a 1} {x42d60000 x41b2bb50 xc10f092b 1 xc10f092b 1} {x42d80000 x4165acea xc0ef3c8e 1 xc0ef3c8e 1} {x42da0000 x40ec7424 xc0d68874 1 xc0d68874 1} {x42dc0000 x3f72475b xc0c2bf56 1 xc0c2bf56 1} {x42de0000 xc0990a89 xc0994aae 1 xc0994aae 1} {x42e00000 xc10a2638 xc04a55e5 1 xc04a55e5 1} {x42e20000 xc131b037 xbff34600 1 xbff34600 1} {x42e40000 xc146f7b8 xbf77ea30 1 xbf77ea30 1} {x42e60000 xc150ad7d -} {x42e80000 xc144b1b9 x3f7a8da0 1 x3f7a8da0 1} {x42ea0000 xc1315bc9 x3f9a7474 1 x3f9a7474 1} {x42ec0000 xc11e149c x3f725da8 1 x3f725da8 1} {x42ee0000 xc1131014 x3f3e9aa0 1 x3f3e9aa0 1} {x42f00000 xc1064148 x3f20f87c 1 x3f20f87c 1} {x42f20000 xc0fde209 x3f2e33ac 1 x3f2e33ac 1} {x42f40000 xc0e0f5a5 x3f642184 1 x3f642184 1} {x42f60000 xc0c4d9a8 x3f9d2710 1 x3f9d2710 1} {x42f80000 xc092621d x3fdafe51 1 x3fdafe51 1} {x42fa0000 xc02eb4ff x4012621d 1 x4012621d 1} {x42fc0000 0 x402c174e 1 x402c174e 1} {x42fe0000 x4029799c x402d9375 1 x402d9375 1} {x43000000 x40ad9375 x40254525 1 x40254525 1} {x43010000 x40fa01f3 x4033912d 1 x4033912d 1} {x43020000 x41309251 x4053514b 1 x4053514b 1} {x43030000 x4166a99f x405ae44e 1 x405ae44e 1} {x43040000 x418f023c x4068d5ba 1 x4068d5ba 1} {x43050000 x41ad8a3e x407394bc 1 x407394bc 1} {x43060000 x41cbe76b x408dee8c 1 x408dee8c 1} {x43070000 x41f48184 x4099201e 1 x4099201e 1} {x43080000 x420c3bbd x40a18420 1 x40a18420 1} {x43090000 x4222a1ca x40b7e9c8 1 x40b7e9c8 1} {x430a0000 x423a362f x40af2a98 1 x40af2a98 1} {x430b0000 x424e6c70 x40a9aa74 1 x40a9aa74 1} {x430c0000 x4264a0cc x40b59ad0 1 x40b59ad0 1} {x430d0000 x427bd324 x40c7d938 1 x40c7d938 1} {x430e0000 x428b4b8d x40d365b8 1 x40d365b8 1} {x430f0000 x42985649 x40cf6910 1 x40cf6910 1} {x43100000 x42a538af x40cab260 1 x40cab260 1} {x43110000 x42b1ac95 x40ca0670 1 x40ca0670 1} {x43120000 x42be797d x40b93f08 1 x40b93f08 1} {x43130000 x42c8d476 x40a81108 1 x40a81108 1} {x43140000 x42d37b9e x40a5cc08 1 x40a5cc08 1} {x43150000 x42dd8df7 x4077a3c0 1 x4077a3c0 1} {x43160000 x42e2f5da x4007a8b0 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke89 262656 bezier {cc {f 8224} {p {0 0 1} {x44772168 x43d0dbe8 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke90 262656 bezier {cc {f 8224} {p {0 0 1} {x44772168 x43d0dbe8 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3d7e39f 0 1 x40cd4410 1} {x42580000 xc3d48c50 x40e6f320 1 x40e6f320 1} {x425c0000 xc3d0ac06 x41065680 1 x41065680 1} {x42600000 xc3cc26e8 x41201f90 1 x41201f90 1} {x42640000 xc3c6aa0d x41398c90 1 x41398c90 1} {x42680000 xc3c08e1f x4136c080 1 x4136c080 1} {x426c0000 xc3bb3e05 x4129a160 1 x4129a160 1} {x42700000 xc3b5f409 x412bc270 1 x412bc270 1} {x42740000 xc3b081de x41316df0 1 x41316df0 1} {x42780000 xc3aadd2a x412c09a0 1 x412c09a0 1} {x427c0000 xc3a5c144 x412765b0 1 x412765b0 1} {x42800000 xc3a066cf x412488d0 1 x412488d0 1} {x42820000 xc39b78b7 x410d64d0 1 x410d64d0 1} {x42840000 xc3979082 x40fb6880 1 x40fb6880 1} {x42860000 xc3939d73 x41044710 1 x41044710 1} {x42880000 xc38f4c11 x41065aa0 1 x41065aa0 1} {x428a0000 xc38b37c9 x40fb86a0 1 x40fb86a0 1} {x428c0000 xc3876fdc x40e76340 1 x40e76340 1} {x428e0000 xc383fcaf x40e20220 1 x40e20220 1} {x42900000 xc3805fcb x40f07dc0 1 x40f07dc0 1} {x42920000 xc378f182 x40ef0a80 1 x40ef0a80 1} {x42940000 xc371ceee x40d19070 1 x40d19070 1} {x42960000 xc36bd87b x40ac0720 1 x40ac0720 1} {x42980000 xc3670e7c x40966240 1 x40966240 1} {x429a0000 xc3627257 x408b2b60 1 x408b2b60 1} {x429c0000 xc35e5bc6 x40796ec0 1 x40796ec0 1} {x429e0000 xc35aa6e1 x4073aca0 1 x4073aca0 1} {x42a00000 xc356be61 x408537f0 1 x408537f0 1} {x42a20000 xc3525362 x409d36b0 1 x409d36b0 1} {x42a40000 xc34ceaf6 x40bd9cf0 1 x40bd9cf0 1} {x42a60000 xc3467993 x40b64880 1 x40b64880 1} {x42a80000 xc341866e x409f8520 1 x409f8520 1} {x42aa0000 xc33c8141 x4099ac50 1 x4099ac50 1} {x42ac0000 xc337eba9 x40828a10 1 x40828a10 1} {x42ae0000 xc33458a0 x4047a200 1 x4047a200 1} {x42b00000 xc331ae99 x4012d6c0 1 x4012d6c0 1} {x42b20000 xc32fc1ea x3fe6cc40 1 x3fe6cc40 1} {x42b40000 xc32e1368 x3fdeeb40 1 x3fdeeb40 1} {x42b60000 xc32c463d x3ff1b780 1 x3ff1b780 1} {x42b80000 xc32a4c8a x3ff54f00 1 x3ff54f00 1} {x42ba0000 xc3287101 x3fed0680 1 x3fed0680 1} {x42bc0000 xc3269870 x3fef0180 1 x3fef0180 1} {x42be0000 xc324b4fb x3fe87640 1 x3fe87640 1} {x42c00000 xc322f697 x3fe2ff80 1 x3fe2ff80 1} {x42c20000 xc32128fd x404d9600 1 x404d9600 1} {x42c40000 xc31c89e7 x4099bc00 1 x4099bc00 1} {x42c60000 xc3178d3d x40a28c40 1 x40a28c40 1} {x42c80000 xc3126123 x40a3ea30 1 x40a3ea30 1} {x42ca0000 xc30d4e9a x40a64940 1 x40a64940 1} {x42cc0000 xc307fc8f x40a58ce0 1 x40a58ce0 1} {x42ce0000 xc302f5cc x4099fd28 1 x4099fd28 1} {x42d00000 xc2fcb979 x40954990 1 x40954990 1} {x42d20000 xc2f34266 x4090e690 1 x4090e690 1} {x42d40000 xc2ea9ca7 x408d9d18 1 x408d9d18 1} {x42d60000 xc2e18ec3 x408bfe30 1 x408bfe30 1} {x42d80000 xc2d91ce1 x40858568 1 x40858568 1} {x42da0000 xc2d0de16 x4083a208 1 x4083a208 1} {x42dc0000 xc2c8a8a0 x40884238 1 x40884238 1} {x42de0000 xc2bfd5cf x4096da30 1 x4096da30 1} {x42e00000 xc2b5cd5a x40a393b8 1 x40a393b8 1} {x42e20000 xc2ab6358 x40a63500 1 x40a63500 1} {x42e40000 xc2a106ba x40a3ce10 1 x40a3ce10 1} {x42e60000 xc296e996 x40a4d158 1 x40a4d158 1} {x42e80000 xc28c6c8f x40a854e0 1 x40a854e0 1} {x42ea0000 xc281defa x40a86168 1 x40a86168 1} {x42ec0000 xc26ec0c4 x40bd86dc 1 x40bd86dc 1} {x42ee0000 xc2545c3d x40cc599c 1 x40cc599c 1} {x42f00000 xc23baa5d x40e2822c 1 x40e2822c 1} {x42f20000 xc21bbbb2 x40f87474 1 x40f87474 1} {x42f40000 xc1fb1a80 x4100d134 1 x4100d134 1} {x42f60000 xc1b6a630 x40fb8e98 1 x40fb8e98 1} {x42f80000 xc17aa668 x40f3edef 1 x40f3edef 1} {x42fa0000 xc0f2bce2 x40faa668 1 x40faa668 1} {x42fc0000 0 x40fc2b55 1 x40fc2b55 1} {x42fe0000 x4102cce4 x41001084 1 x41001084 1} {x43000000 x41801084 x40f6ae44 1 x40f6ae44 1} {x43010000 x41bcbd94 x40ee2f6c 1 x40ee2f6c 1} {x43020000 x41f7283a x40e1b4ac 1 x40e1b4ac 1} {x43030000 x4216cbf5 x40d15c48 1 x40d15c48 1} {x43040000 x422feb2f x40c1118c 1 x40c1118c 1} {x43050000 x42471058 x40a9a5d4 1 x40a9a5d4 1} {x43060000 x425a54a4 x408f35f4 1 x408f35f4 1} {x43070000 x426addd5 x4071b518 1 x4071b518 1} {x43080000 x42788b47 x40588328 1 x40588328 1} {x43090000 x4282f71d x404a98a8 1 x404a98a8 1} {x430a0000 x4288ef2e x4039e4b0 1 x4039e4b0 1} {x430b0000 x428e9568 x402cc7e0 1 x402cc7e0 1} {x430c0000 x4293bbac x401a71c0 1 x401a71c0 1} {x430d0000 x42983c84 x400cec50 1 x400cec50 1} {x430e0000 x429c8a71 x401172d0 1 x401172d0 1} {x430f0000 x42a153b1 x40253930 1 x40253930 1} {x43100000 x42a6de04 x40326050 1 x40326050 1} {x43110000 x42ac79b6 x4030a100 1 x4030a100 1} {x43120000 x42b1e814 x402f5aa0 1 x402f5aa0 1} {x43130000 x42b76f60 x40182520 1 x40182520 1} {x43140000 x42bb6a66 x3fc98b80 1 x3fc98b80 1} {x43150000 x42bdbbbc x3f060b80 1 x3f060b80 1} {x43160000 x42be1519 -}} {{x42540000 x4487e040 0 1 xc15df1e0 1} {x42580000 x448612e6 xc1782340 1 xc1782340 1} {x425c0000 x4483ffb3 xc18700e0 1 xc18700e0 1} {x42600000 x4481dadf xc1884200 1 xc1884200 1} {x42640000 x447f7b46 xc185d150 1 xc185d150 1} {x42680000 x447b58a9 xc18899c0 1 xc18899c0 1} {x426c0000 x4476f1aa xc1881990 1 xc1881990 1} {x42700000 x4472d710 xc18cc1b0 1 xc18cc1b0 1} {x42740000 x446e258f xc19de330 1 xc19de330 1} {x42780000 x4468f8dd xc1ab4ca0 1 xc1ab4ca0 1} {x427c0000 x446370c5 xc1beb940 1 xc1beb940 1} {x42800000 x445d0d49 xc1cb59a0 1 xc1cb59a0 1} {x42820000 x4456bb2b xc1c7fc00 1 xc1c7fc00 1} {x42840000 x44508d89 xc1c70d70 1 xc1c70d70 1} {x42860000 x444a4a54 xc1cf83e0 1 xc1cf83e0 1} {x42880000 x4443954b xc1ce9820 1 xc1ce9820 1} {x428a0000 x443d60d2 xc1c926e0 1 xc1c926e0 1} {x428c0000 x443702dd xc1d062d0 1 xc1d062d0 1} {x428e0000 x44305aa5 xc1d76840 1 xc1d76840 1} {x42900000 x44298c59 xc1de9040 1 xc1de9040 1} {x42920000 x442271a1 xc1dc4e10 1 xc1dc4e10 1} {x42940000 x441bc778 xc1d1b7e0 1 xc1d1b7e0 1} {x42960000 x44155623 xc1c93ac0 1 xc1c93ac0 1} {x42980000 x440f33cc xc1bcb4f0 1 xc1bcb4f0 1} {x429a0000 x44098ad4 xc1b18120 1 xc1b18120 1} {x429c0000 x44041bba xc1ac2b78 1 xc1ac2b78 1} {x429e0000 x43fd9039 xc1a9d1d8 1 xc1a9d1d8 1} {x42a00000 x43f2fd39 xc1a9ac40 1 xc1a9ac40 1} {x42a20000 x43e85ab1 xc1a868a8 1 xc1a868a8 1} {x42a40000 x43ddf024 xc1a015e0 1 xc1a015e0 1} {x42a60000 x43d457f5 xc1a10ef8 1 xc1a10ef8 1} {x42a80000 x43c9ce45 xc1aa6c60 1 xc1aa6c60 1} {x42aa0000 x43bf0a69 xc1a9ab70 1 xc1a9ab70 1} {x42ac0000 x43b498d7 xc1a64758 1 xc1a64758 1} {x42ae0000 x43aa417e xc1a44828 1 xc1a44828 1} {x42b00000 x43a00fd2 xc1a3f628 1 xc1a3f628 1} {x42b20000 x4395c2b9 xc1a5e958 1 xc1a5e958 1} {x42b40000 x438b52a7 xc1a822b0 1 xc1a822b0 1} {x42b60000 x4380be63 xc1aa5130 1 xc1aa5130 1} {x42b80000 x436c1102 xc1a85eac 1 xc1a85eac 1} {x42ba0000 x4357651b xc1a1d3a8 1 xc1a1d3a8 1} {x42bc0000 x43439c18 xc1997f54 1 xc1997f54 1} {x42be0000 x43310546 xc18ee34c 1 xc18ee34c 1} {x42c00000 x431fe345 xc183dc9c 1 xc183dc9c 1} {x42c20000 x43100e1f xc1720138 1 xc1720138 1} {x42c40000 x4301a31e xc163ca00 1 xc163ca00 1} {x42c60000 x42e729be xc15fb0e8 1 xc15fb0e8 1} {x42c80000 x42cb5a02 xc15f5d78 1 xc15f5d78 1} {x42ca0000 x42af5260 xc15e0fec 1 xc15e0fec 1} {x42cc0000 x4293d607 xc1479eb8 1 xc1479eb8 1} {x42ce0000 x427ad564 xc13727ee 1 xc13727ee 1} {x42d00000 x424c1817 xc13df322 1 xc13df322 1} {x42d20000 x421bdbd3 xc1353870 1 xc1353870 1} {x42d40000 x41e2f7be xc1240018 1 xc1240018 1} {x42d60000 x4193b78e xc113c496 1 xc113c496 1} {x42d80000 x411e6650 xc102a4e3 1 xc102a4e3 1} {x42da0000 x40089558 xc0ef6f28 1 xc0ef6f28 1} {x42dc0000 xc0a211af xc0d6d344 1 xc0d6d344 1} {x42de0000 xc134adee xc0ac62c8 1 xc0ac62c8 1} {x42e00000 xc17d6ba0 xc06bafec 1 xc06bafec 1} {x42e20000 xc19542f2 xc00b561c 1 xc00b561c 1} {x42e40000 xc1a18b57 xbf8dd8e8 1 xbf8dd8e8 1} {x42e60000 xc1a6fe0f -} {x42e80000 xc19f74c1 x3f9cc068 1 x3f9cc068 1} {x42ea0000 xc1936602 x3fb6d8d0 1 x3fb6d8d0 1} {x42ec0000 xc18899a7 x3fcefbbc 1 x3fcefbbc 1} {x42ee0000 xc1730d15 x3fe2271c 1 x3fe2271c 1} {x42f00000 xc158a987 x3fd51074 1 x3fd51074 1} {x42f20000 xc13dc8f8 x3fc73e08 1 x3fc73e08 1} {x42f40000 xc126da05 x3fc8b440 1 x3fc8b440 1} {x42f60000 xc10b9be8 x3ffe63e6 1 x3ffe63e6 1} {x42f80000 xc0ce8217 x4024c289 1 x4024c289 1} {x42fa0000 xc064ea8e x404e8217 1 x404e8217 1} {x42fc0000 0 x4072858c 1 x4072858c 1} {x42fe0000 x40801045 x407f9c18 1 x407f9c18 1} {x43000000 x40ff9c18 x408243ee 1 x408243ee 1} {x43010000 x41424c10 x408ca342 1 x408ca342 1} {x43020000 x418638a7 x409b5c80 1 x409b5c80 1} {x43030000 x41aed448 x40a73842 1 x40a73842 1} {x43040000 x41d9d4c8 x40aec994 1 x40aec994 1} {x43050000 x42031c89 x40c0c194 1 x40c0c194 1} {x43060000 x421d1ac9 x40e590b8 1 x40e590b8 1} {x43070000 x423c80b7 x40e89710 1 x40e89710 1} {x43080000 x4257408d x40dea290 1 x40dea290 1} {x43090000 x4274295b x40e7126c 1 x40e7126c 1} {x430a0000 x42888294 x40dd9d74 1 x40dd9d74 1} {x430b0000 x4295c85c x40d0b308 1 x40d0b308 1} {x430c0000 x42a298f5 x40d3e538 1 x40d3e538 1} {x430d0000 x42b04503 x40e20fa0 1 x40e20fa0 1} {x430e0000 x42bedae9 x40e75b58 1 x40e75b58 1} {x430f0000 x42cd306e x40e1b420 1 x40e1b420 1} {x43100000 x42db116d x40dc8eb0 1 x40dc8eb0 1} {x43110000 x42e8c244 x40d52810 1 x40d52810 1} {x43120000 x42f5b66f x40c5e200 1 x40c5e200 1} {x43130000 x4300bf42 x40b4c8a8 1 x40b4c8a8 1} {x43140000 x430627c2 x40a093a0 1 x40a093a0 1} {x43150000 x430ac87c x40670200 1 x40670200 1} {x43160000 x430d5fd2 x40053f40 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke91 262656 bezier {cc {f 8224} {p {0 0 1} {x4448d439 x43c4724e 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke92 262656 bezier {cc {f 8224} {p {0 0 1} {x4448d439 x43c4724e 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3c4b6fc 0 1 x40caaed0 1} {x42580000 xc3c16890 x40e57360 1 x40e57360 1} {x425c0000 xc3bd8b61 x4105e7d0 1 x4105e7d0 1} {x42600000 xc3b90a13 x411eafa0 1 x411eafa0 1} {x42640000 xc3b3a067 x412d9d40 1 x412d9d40 1} {x42680000 xc3ae303f x412391f0 1 x412391f0 1} {x426c0000 xc3a96748 x411ae840 1 x411ae840 1} {x42700000 xc3a481bb x412094e0 1 x412094e0 1} {x42740000 xc39f5dfa x4121ff80 1 x4121ff80 1} {x42780000 xc39a61c3 x4118b790 1 x4118b790 1} {x427c0000 xc395d281 x41172280 1 x41172280 1} {x42800000 xc390ef9b x411c42b0 1 x411c42b0 1} {x42820000 xc38c0e56 x410ea2d0 1 x410ea2d0 1} {x42840000 xc388056e x40f6ab80 1 x40f6ab80 1} {x42860000 xc38458fa x40e74da0 1 x40e74da0 1} {x42880000 xc380cb01 x40f2f270 1 x40f2f270 1} {x428a0000 xc37982cd x40f30230 1 x40f30230 1} {x428c0000 xc37265df x40e34e00 1 x40e34e00 1} {x428e0000 xc36b4ded x40eb8050 1 x40eb8050 1} {x42900000 xc363adda x40f62c70 1 x40f62c70 1} {x42920000 xc35beb26 x40d88040 1 x40d88040 1} {x42940000 xc35625d6 x40af0fe0 1 x40af0fe0 1} {x42960000 xc350fa28 x409d0670 1 x409d0670 1} {x42980000 xc34c556f x4094fa90 1 x4094fa90 1} {x429a0000 xc347aa7f x408ca050 1 x408ca050 1} {x429c0000 xc3438b6a x407ab780 1 x407ab780 1} {x429e0000 xc33fd4c3 x407001c0 1 x407001c0 1} {x42a00000 xc33c0b5c x40829c50 1 x40829c50 1} {x42a20000 xc337aafe x40934600 1 x40934600 1} {x42a40000 xc332d6fc x40a2a4b0 1 x40a2a4b0 1} {x42a60000 xc32d80b3 x409e46d0 1 x409e46d0 1} {x42a80000 xc328f28f x40936d60 1 x40936d60 1} {x42aa0000 xc32449dd x4092b680 1 x4092b680 1} {x42ac0000 xc31fc727 x4080db00 1 x4080db00 1} {x42ae0000 xc31c3c2d x4048ca60 1 x4048ca60 1} {x42b00000 xc31980d4 x401335a0 1 x401335a0 1} {x42b20000 xc317a280 x3fdb18c0 1 x3fdb18c0 1} {x42b40000 xc3161471 x3fd34980 1 x3fd34980 1} {x42b60000 xc314555a x3fdc5b40 1 x3fdc5b40 1} {x42b80000 xc312a304 x3fd74f80 1 x3fd74f80 1} {x42ba0000 xc310f81c x3fcf17c0 1 x3fcf17c0 1} {x42bc0000 xc30f66a5 x3fd18740 1 x3fd18740 1} {x42be0000 xc30db1ff x3fd80f40 1 x3fd80f40 1} {x42c00000 xc30c0668 x3fd1d0c0 1 x3fd1d0c0 1} {x42c20000 xc30a6abc x403f18c0 1 x403f18c0 1} {x42c40000 xc3060da2 x408e8df0 1 x408e8df0 1} {x42c60000 xc30181dd x40969618 1 x40969618 1} {x42c80000 xc2f94881 x409b1cc0 1 x409b1cc0 1} {x42ca0000 xc2efa022 x409bc808 1 x409bc808 1} {x42cc0000 xc2e5cf80 x409c2a88 1 x409c2a88 1} {x42ce0000 xc2dc1ad1 x4093b108 1 x4093b108 1} {x42d00000 xc2d3595f x40884b90 1 x40884b90 1} {x42d20000 xc2cb115f x40792b00 1 x40792b00 1} {x42d40000 xc2c3c6af x4066e770 1 x4066e770 1} {x42d60000 xc2bca2e8 x405be2d0 1 x405be2d0 1} {x42d80000 xc2b60882 x404ecd60 1 x404ecd60 1} {x42da0000 xc2afb612 x404d1060 1 x404d1060 1} {x42dc0000 xc2a9377c x40569b80 1 x40569b80 1} {x42de0000 xc2a24c5a x40629dd0 1 x40629dd0 1} {x42e00000 xc29b0d9f x406b2520 1 x406b2520 1} {x42e20000 xc2939a08 x40706540 1 x40706540 1} {x42e40000 xc28c074b x40750e50 1 x40750e50 1} {x42e60000 xc2844923 x407cc980 1 x407cc980 1} {x42e80000 xc2787566 x4086bfe4 1 x4086bfe4 1} {x42ea0000 xc266e24d x40935010 1 x40935010 1} {x42ec0000 xc253a162 x40a1c480 1 x40a1c480 1} {x42ee0000 xc23e712d x40b450c4 1 x40b450c4 1} {x42f00000 xc2268d31 x40c5f1a8 1 x40c5f1a8 1} {x42f20000 xc20cf4c3 x40d637f6 1 x40d637f6 1} {x42f40000 xc1e1fe67 x40e1d4f6 1 x40e1d4f6 1} {x42f60000 xc1a8ff0b x40e605dd 1 x40e605dd 1} {x42f80000 xc15df6f1 x40e14c0d 1 x40e14c0d 1} {x42fa0000 xc0e16412 x40ddf6f1 1 x40ddf6f1 1} {x42fc0000 0 x40e3c4bc 1 x40e3c4bc 1} {x42fe0000 x40e62565 x40e5df9a 1 x40e5df9a 1} {x43000000 x4165df9a x40e1c33c 1 x40e1c33c 1} {x43010000 x41aa6af7 x40da15c4 1 x40da15c4 1} {x43020000 x41dffaaf x40d0c276 1 x40d0c276 1} {x43030000 x42096619 x40c3acda 1 x40c3acda 1} {x43040000 x4220e88e x40b2ea18 1 x40b2ea18 1} {x43050000 x4236209f x40995c9c 1 x40995c9c 1} {x43060000 x42473fb5 x4074bda0 1 x4074bda0 1} {x43070000 x4254b853 x40539080 1 x40539080 1} {x43080000 x4261b1c5 x4046fb28 1 x4046fb28 1} {x43090000 x426d97b8 x4037bbb8 1 x4037bbb8 1} {x430a0000 x4278a93c x40295890 1 x40295890 1} {x430b0000 x42816165 x40196270 1 x40196270 1} {x430c0000 x4285eac5 x400a0680 1 x400a0680 1} {x430d0000 x428a01cd x40008a80 1 x40008a80 1} {x430e0000 x428df36d x400ac770 1 x400ac770 1} {x430f0000 x4292ae44 x401d3080 1 x401d3080 1} {x43100000 x4297c675 x4025d5a0 1 x4025d5a0 1} {x43110000 x429d0b9e x4027eb80 1 x4027eb80 1} {x43120000 x42a2452d x4025cc00 1 x4025cc00 1} {x43130000 x42a7685e x400e7b90 1 x400e7b90 1} {x43140000 x42ab2ce6 x3fb654c0 1 x3fb654c0 1} {x43150000 x42ad1b04 x3e76de00 1 x3e76de00 1} {x43160000 x42ad4429 -}} {{x42540000 x4487915a 0 1 xc15d6300 1} {x42580000 x4485c4fe xc177c400 1 xc177c400 1} {x425c0000 x4483b24a xc186de00 1 xc186de00 1} {x42600000 x44818e0e xc187f740 1 xc187f740 1} {x42640000 x447ee520 xc1848980 1 xc1848980 1} {x42680000 x447ad384 xc184e8a0 1 xc184e8a0 1} {x426c0000 x44769696 xc1880c20 1 xc1880c20 1} {x42700000 x447252c2 xc190c4b0 1 xc190c4b0 1} {x42740000 x446d8a4b xc1a43920 1 xc1a43920 1} {x42780000 x44680f30 xc1b429f0 1 xc1b429f0 1} {x427c0000 x446247ac xc1c3a890 1 xc1c3a890 1} {x42800000 x445bd4a7 xc1cc32b0 1 xc1cc32b0 1} {x42820000 x44558481 xc1c94db0 1 xc1c94db0 1} {x42840000 x444f3fcc xc1c8f1e0 1 xc1c8f1e0 1} {x42860000 x4448f563 xc1d11700 1 xc1d11700 1} {x42880000 x44422e5c xc1d56390 1 xc1d56390 1} {x428a0000 x443b9f2a xc1d32080 1 xc1d32080 1} {x428c0000 x4434fc54 xc1d6c710 1 xc1d6c710 1} {x428e0000 x442e32b9 xc1db3c40 1 xc1db3c40 1} {x42900000 x44274890 xc1e19b60 1 xc1e19b60 1} {x42920000 x44201903 xc1dd5410 1 xc1dd5410 1} {x42940000 x4419734f xc1d16080 1 xc1d16080 1} {x42960000 x441302fb xc1ca4250 1 xc1ca4250 1} {x42980000 x440ccf2a xc1bd7c50 1 xc1bd7c50 1} {x429a0000 x44072b36 xc1b111d0 1 xc1b111d0 1} {x429c0000 x4401be0d xc1acf5f0 1 xc1acf5f0 1} {x429e0000 x43f8b7ae xc1aa0c48 1 xc1aa0c48 1} {x42a00000 x43ee3a91 xc1a6f2a8 1 xc1a6f2a8 1} {x42a20000 x43e3d959 xc1a7c3b0 1 xc1a7c3b0 1} {x42a40000 x43d9421b xc1a75c10 1 xc1a75c10 1} {x42a60000 x43ceedd7 xc1a1ed08 1 xc1a1ed08 1} {x42a80000 x43c5047a xc1a13850 1 xc1a13850 1} {x42aa0000 x43bac6cd xc1a4ab00 1 xc1a4ab00 1} {x42ac0000 x43b06f1a xc1a4c008 1 xc1a4c008 1} {x42ae0000 x43a62ecc xc1a15090 1 xc1a15090 1} {x42b00000 x439c4508 xc1a0af18 1 xc1a0af18 1} {x42b20000 x439218e9 xc1a3d6d0 1 xc1a3d6d0 1} {x42b40000 x4387ca2e xc1a649ec 1 xc1a649ec 1} {x42b60000 x437a9f57 xc1a8db48 1 xc1a8db48 1} {x42b80000 x43655d8a xc1a6af38 1 xc1a6af38 1} {x42ba0000 x4350f389 xc1a05cf0 1 xc1a05cf0 1} {x42bc0000 x433d464e xc1984230 1 xc1984230 1} {x42be0000 x432ae2fd xc18db764 1 xc18db764 1} {x42c00000 x4319d875 xc182c6a0 1 xc182c6a0 1} {x42c20000 x430a3155 xc16f6948 1 xc16f6948 1} {x42c40000 x42f7d698 xc1613850 1 xc1613850 1} {x42c60000 x42dc1496 xc15b1040 1 xc15b1040 1} {x42c80000 x42c11288 xc1593c48 1 xc1593c48 1} {x42ca0000 x42a5c584 xc15a3284 1 xc15a3284 1} {x42cc0000 x428a85e7 xc1427336 1 xc1427336 1} {x42ce0000 x426a516d xc131964e 1 xc131964e 1} {x42d00000 x423c40a7 xc13c44da 1 xc13c44da 1} {x42d20000 x420c2f00 xc135e650 1 xc135e650 1} {x42d40000 x41c29afe xc122b4ae 1 xc122b4ae 1} {x42d60000 x416b52a5 xc11071fb 1 xc11071fb 1} {x42d80000 x40c8a40d xc101c630 1 xc101c630 1} {x42da0000 xbfc1cddf xc0efac3e 1 xc0efac3e 1} {x42dc0000 xc10b5a37 xc0d4a980 1 xc0d4a980 1} {x42de0000 xc16ce33c xc0a5ab05 1 xc0a5ab05 1} {x42e00000 xc198829e xc059f118 1 xc059f118 1} {x42e20000 xc1acede4 xbff92d48 1 xbff92d48 1} {x42e40000 xc1b7a847 xbf541450 1 xbf541450 1} {x42e60000 xc1ba2f29 -} {x42e80000 xc1b02eca x3fc59850 1 x3fc59850 1} {x42ea0000 xc1a17c1f x3fe476d0 1 x3fe476d0 1} {x42ec0000 xc1939ff0 x3feb3270 1 x3feb3270 1} {x42ee0000 xc18415d1 x3ff27d94 1 x3ff27d94 1} {x42f00000 xc16aa07b x3fed79b8 1 x3fed79b8 1} {x42f20000 xc14ccd34 x3fd913f8 1 x3fd913f8 1} {x42f40000 xc1345b7d x3fea75a4 1 x3fea75a4 1} {x42f60000 xc1122fcb x400db544 1 x400db544 1} {x42f80000 xc0db01b6 x402e4b31 1 x402e4b31 1} {x42fa0000 xc06c28ca x405b01b6 1 x405b01b6 1} {x42fc0000 0 x407bd8dc 1 x407bd8dc 1} {x42fe0000 x4085c477 x40841732 1 x40841732 1} {x43000000 x41041732 x4083fbb0 1 x4083fbb0 1} {x43010000 x4146ddeb x408da6e2 1 x408da6e2 1} {x43020000 x4188df0a x409ac5ff 1 x409ac5ff 1} {x43030000 x41b0d1f5 x40a505b2 1 x40a505b2 1} {x43040000 x41db61e3 x40acdc4e 1 x40acdc4e 1} {x43050000 x4203a00e x40b62f9e 1 x40b62f9e 1} {x43060000 x421b3cd9 x40cdb1b0 1 x40cdb1b0 1} {x43070000 x42370c7a x40dce270 1 x40dce270 1} {x43080000 x42527575 x40e11f78 1 x40e11f78 1} {x43090000 x426f5458 x40e3a1bc 1 x40e3a1bc 1} {x430a0000 x4285aef2 x40da0a38 1 x40da0a38 1} {x430b0000 x4292eb73 x40d13620 1 x40d13620 1} {x430c0000 x429fd5b6 x40d56b28 1 x40d56b28 1} {x430d0000 x42ad98d8 x40e39b00 1 x40e39b00 1} {x430e0000 x42bc4916 x40e914b8 1 x40e914b8 1} {x430f0000 x42cabb6f x40e29d90 1 x40e29d90 1} {x43100000 x42d89cc8 x40dc2460 1 x40dc2460 1} {x43110000 x42e63ffb x40d5c6d8 1 x40d5c6d8 1} {x43120000 x42f355a3 x40c6eb60 1 x40c6eb60 1} {x43130000 x42ff1d67 x40b727d8 1 x40b727d8 1} {x43140000 x43051d4f x40a43e98 1 x40a43e98 1} {x43150000 x4309d29d x406e6480 1 x406e6480 1} {x43160000 x430c9073 x400ffe00 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke93 262656 bezier {cc {f 8224} {p {0 0 1} {x448722f2 x4439cb85 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke94 262656 bezier {cc {f 8224} {p {0 0 1} {x448722f2 x4439cb85 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3eb151a 0 1 x40cccf50 1} {x42580000 xc3e7c010 x40e628e0 1 x40e628e0 1} {x425c0000 xc3e3e3d3 x4105c6c0 1 x4105c6c0 1} {x42600000 xc3df63a4 x411f9760 1 x411f9760 1} {x42640000 xc3d9ea5d x413977e0 1 x413977e0 1} {x42680000 xc3d3cc26 x4136dc80 1 x4136dc80 1} {x426c0000 xc3ce7c95 x4129ce20 1 x4129ce20 1} {x42700000 xc3c92f44 x412fefc0 1 x412fefc0 1} {x42740000 xc3c37d99 x41355f30 1 x41355f30 1} {x42780000 xc3bdd951 x412c39c0 1 x412c39c0 1} {x427c0000 xc3b8b9fd x4127e000 1 x4127e000 1} {x42800000 xc3b35b51 x41225510 1 x41225510 1} {x42820000 xc3ae94ac x410d31d0 1 x410d31d0 1} {x42840000 xc3aa8834 x4100b7f0 1 x4100b7f0 1} {x42860000 xc3a6892d x4109af30 1 x4109af30 1} {x42880000 xc3a1ed41 x410b7410 1 x410b7410 1} {x428a0000 xc39dd1ec x40fa37c0 1 x40fa37c0 1} {x428c0000 xc39a1b83 x40e154c0 1 x40e154c0 1} {x428e0000 xc396c746 x40d7a320 1 x40d7a320 1} {x42900000 xc3935e6a x40f00ea0 1 x40f00ea0 1} {x42920000 xc38f46d1 x40ef4600 1 x40ef4600 1} {x42940000 xc38be43a x40c6f880 1 x40c6f880 1} {x42960000 xc3890f0d x40a79c80 1 x40a79c80 1} {x42980000 xc386a756 x409721e0 1 x409721e0 1} {x429a0000 xc38455fe x408be5a0 1 x408be5a0 1} {x429c0000 xc3824829 x407b20c0 1 x407b20c0 1} {x429e0000 xc380697b x40768ca0 1 x40768ca0 1} {x42a00000 xc37cdbed x40868e10 1 x40868e10 1} {x42a20000 xc3786a15 x40a08ee0 1 x40a08ee0 1} {x42a40000 xc372d2ff x40c5f080 1 x40c5f080 1} {x42a60000 xc36c0b0d x40bab0c0 1 x40bab0c0 1} {x42a80000 xc36727f3 x409f0fb0 1 x409f0fb0 1} {x42aa0000 xc3621a12 x409c9850 1 x409c9850 1} {x42ac0000 xc35d5e6e x40899010 1 x40899010 1} {x42ae0000 xc3598111 x4052ac00 1 x4052ac00 1} {x42b00000 xc356c90e x40169aa0 1 x40169aa0 1} {x42b20000 xc354cc3c x3fe0ba00 1 x3fe0ba00 1} {x42b40000 xc3534626 x3fdb1ac0 1 x3fdb1ac0 1} {x42b60000 xc3515fd1 x4008a5c0 1 x4008a5c0 1} {x42b80000 xc34f00f8 x40143320 1 x40143320 1} {x42ba0000 xc34cbe38 x4019d5e0 1 x4019d5e0 1} {x42bc0000 xc34a3249 x4024d3c0 1 x4024d3c0 1} {x42be0000 xc347979a x401d8240 1 x401d8240 1} {x42c00000 xc3454637 x4011bd20 1 x4011bd20 1} {x42c20000 xc34309b1 x406b04e0 1 x406b04e0 1} {x42c40000 xc33dee10 x40ae8440 1 x40ae8440 1} {x42c60000 xc338216d x40bc0110 1 x40bc0110 1} {x42c80000 xc3322dff x40b99e10 1 x40b99e10 1} {x42ca0000 xc32c878c x40b568c0 1 x40b568c0 1} {x42cc0000 xc326d773 x40b88d50 1 x40b88d50 1} {x42ce0000 xc320feb7 x40b6fcd0 1 x40b6fcd0 1} {x42d00000 xc31b67a6 x40a61700 1 x40a61700 1} {x42d20000 xc3169d47 x409912c0 1 x409912c0 1} {x42d40000 xc311d67a x409ba150 1 x409ba150 1} {x42d60000 xc30ce332 x409fb4c0 1 x409fb4c0 1} {x42d80000 xc307db2e x409db040 1 x409db040 1} {x42da0000 xc303082e x40a293b8 1 x40a293b8 1} {x42dc0000 xc2fb63e5 x40b48918 1 x40b48918 1} {x42de0000 xc2ef7f39 x40c496e0 1 x40c496e0 1} {x42e00000 xc2e2d109 x40cd11a0 1 x40cd11a0 1} {x42e20000 xc2d5dd05 x40d06f48 1 x40d06f48 1} {x42e40000 xc2c8c320 x40d53678 1 x40d53678 1} {x42e60000 xc2bb3636 x40d7aca0 1 x40d7aca0 1} {x42e80000 xc2adcd8c x40dffcc8 1 x40dffcc8 1} {x42ea0000 xc29f369d x40e9d3d8 1 x40e9d3d8 1} {x42ec0000 xc2909311 x40fc1a70 1 x40fc1a70 1} {x42ee0000 xc27f669e x4101a7b2 1 x4101a7b2 1} {x42f00000 xc2605249 x410effd4 1 x410effd4 1} {x42f20000 xc237e6b4 x41176446 1 x41176446 1} {x42f40000 xc214a026 x41186a72 1 x41186a72 1} {x42f60000 xc1d762f6 x4115ce77 1 x4115ce77 1} {x42f80000 xc19371d5 x410f54ca 1 x410f54ca 1} {x42fa0000 xc1101c57 x411371d5 1 x411371d5 1} {x42fc0000 0 x41108b96 1 x41108b96 1} {x42fe0000 x4110fad4 x410f7bf0 1 x410f7bf0 1} {x43000000 x418f7bf0 x4107c301 1 x4107c301 1} {x43010000 x41d0406b x4102ce5c 1 x4102ce5c 1} {x43020000 x42092526 x40f732b6 1 x40f732b6 1} {x43030000 x4225ece3 x40dd473c 1 x40dd473c 1} {x43040000 x424076f5 x40cdb5a8 1 x40cdb5a8 1} {x43050000 x42595a4d x40b57f1c 1 x40b57f1c 1} {x43060000 x426dd6bc x409be3e4 1 x409be3e4 1} {x43070000 x428029a3 x408cc890 1 x408cc890 1} {x43080000 x42888470 x407e17b0 1 x407e17b0 1} {x43090000 x42900b1e x40678ce0 1 x40678ce0 1} {x430a0000 x4296fd3e x40567bd0 1 x40567bd0 1} {x430b0000 x429d72db x40468300 1 x40468300 1} {x430c0000 x42a3656e x40383be0 1 x40383be0 1} {x430d0000 x42a8f699 x40374190 1 x40374190 1} {x430e0000 x42aed987 x403deec0 1 x403deec0 1} {x430f0000 x42b4d585 x40483e50 1 x40483e50 1} {x43100000 x42bb5d6c x404f73f0 1 x404f73f0 1} {x43110000 x42c1ccc4 x404cb4d0 1 x404cb4d0 1} {x43120000 x42c828b9 x4043ebe0 1 x4043ebe0 1} {x43130000 x42ce0b82 x402a1fa0 1 x402a1fa0 1} {x43140000 x42d2cab3 x40017ff0 1 x40017ff0 1} {x43150000 x42d62381 x3f8a51c0 1 x3f8a51c0 1} {x43160000 x42d71d41 x3e43f900 1 0 1}} {{x42540000 x4487a602 0 1 xc15df440 1} {x42580000 x4485d8c5 xc177f300 1 xc177f300 1} {x425c0000 x4483c636 xc186d3e0 1 xc186d3e0 1} {x42600000 x4481a226 xc1881eb0 1 xc1881eb0 1} {x42640000 x447f0a81 xc18aadf0 1 xc18aadf0 1} {x42680000 x447a996d xc18d7ef0 1 xc18d7ef0 1} {x426c0000 x44763292 xc18806d0 1 xc18806d0 1} {x42700000 x44721900 xc189e760 1 xc189e760 1} {x42740000 x446d941c xc19ac530 1 xc19ac530 1} {x42780000 x44686cad xc1aacb80 1 xc1aacb80 1} {x427c0000 x4462e764 xc1be8a90 1 xc1be8a90 1} {x42800000 x445c8404 xc1c6aec0 1 xc1c6aec0 1} {x42820000 x44567c78 xc1c2b1b0 1 xc1c2b1b0 1} {x42840000 x445058e9 xc1c652c0 1 xc1c652c0 1} {x42860000 x444a174c xc1cc9ee0 1 xc1cc9ee0 1} {x42880000 x44438efb xc1c81cd0 1 xc1c81cd0 1} {x428a0000 x443d957f xc1bbf850 1 xc1bbf850 1} {x428c0000 x4437cf76 xc1bc9100 1 xc1bc9100 1} {x428e0000 x4431cc6f xc1c17b30 1 xc1c17b30 1} {x42900000 x442bb7c3 xc1ca1570 1 xc1ca1570 1} {x42920000 x44252b18 xc1caec40 1 xc1caec40 1} {x42940000 x441f08ff xc1c38320 1 xc1c38320 1} {x42960000 x4418f2e6 xc1c35ef0 1 xc1c35ef0 1} {x42980000 x4412d310 xc1bc6420 1 xc1bc6420 1} {x429a0000 x440d2ca4 xc1b13ac0 1 xc1b13ac0 1} {x429c0000 x4407bf64 xc1ac1dd0 1 xc1ac1dd0 1} {x429e0000 x44026ac7 xc1a9c098 1 xc1a9c098 1} {x42a00000 x43fa46b5 xc1a8e918 1 xc1a8e918 1} {x42a20000 x43efb86b xc1a99160 1 xc1a99160 1} {x42a40000 x43e51489 xc1a76cc8 1 xc1a76cc8 1} {x42a60000 x43dacad2 xc1a4e480 1 xc1a4e480 1} {x42a80000 x43d077f9 xc1a2c040 1 xc1a2c040 1} {x42aa0000 x43c672ca xc1a15ad0 1 xc1a15ad0 1} {x42ac0000 x43bc4c9f xc1a2e3d0 1 xc1a2e3d0 1} {x42ae0000 x43b21650 xc1a30a20 1 xc1a30a20 1} {x42b00000 x43a7eb5b xc1a3aac0 1 xc1a3aac0 1} {x42b20000 x439da0f8 xc1a63880 1 xc1a63880 1} {x42b40000 x4393244b xc1aa3f50 1 xc1aa3f50 1} {x42b60000 x4388590e xc1aced30 1 xc1aced30 1} {x42b80000 x437b0d4a xc1ab2dbc 1 xc1ab2dbc 1} {x42ba0000 x4365e6ad xc1a575f0 1 xc1a575f0 1} {x42bc0000 x4351afce xc19c13fc 1 xc19c13fc 1} {x42be0000 x433ee1ae xc18fce68 1 xc18fce68 1} {x42c00000 x432dbc34 xc18439a8 1 xc18439a8 1} {x42c20000 x431dd344 xc17346e0 1 xc17346e0 1} {x42c40000 x430f5358 xc1687710 1 xc1687710 1} {x42c60000 x4300c462 xc16a77fc 1 xc16a77fc 1} {x42c80000 x42e408b1 xc16b5fa8 1 xc16b5fa8 1} {x42ca0000 x42c6b0da xc1674004 1 xc1674004 1} {x42cc0000 x42aa38b0 xc164ee3c 1 xc164ee3c 1} {x42ce0000 x428d754b xc160320e 1 xc160320e 1} {x42d00000 x42645859 xc14e6b92 1 xc14e6b92 1} {x42d20000 x4233b4cd xc13a41c0 1 xc13a41c0 1} {x42d40000 x42073779 xc12b9f9b 1 xc12b9f9b 1} {x42d60000 x41bbc9ff xc119bec4 1 xc119bec4 1} {x42d80000 x4169605b xc109a13a 1 xc109a13a 1} {x42da0000 x40c8a315 xc1022b92 1 xc1022b92 1} {x42dc0000 xbfd7b644 xc0ea6eec 1 xc0ea6eec 1} {x42de0000 xc1061d62 xc0b7f696 1 xc0b7f696 1} {x42e00000 xc152ed5f xc07ba448 1 xc07ba448 1} {x42e20000 xc181f7c3 xc0205a0a 1 xc0205a0a 1} {x42e40000 xc1918d32 xbfb85e50 1 xbfb85e50 1} {x42e60000 xc199038d -} {x42e80000 xc195a873 x3f510b00 1 x3f510b00 1} {x42ea0000 xc18bf2dd x3eca0980 1 x3eca0980 1} {x42ec0000 xc18ae57b x3eca0980 1 x3eca0980 1} {x42ee0000 xc17fed95 x3fe019a8 1 x3fe019a8 1} {x42f00000 xc15dc48c x3fbaf9f8 1 x3fbaf9f8 1} {x42f20000 xc1512f17 x3faba6d8 1 x3faba6d8 1} {x42f40000 xc132dad6 x3fcda834 1 x3fcda834 1} {x42f60000 xc11dc50a x4014f784 1 x4014f784 1} {x42f80000 xc0d0be28 x403e4d44 1 x403e4d44 1} {x42fa0000 xc07a79a0 x4050be28 1 x4050be28 1} {x42fc0000 0 x407f54d4 1 x407f54d4 1} {x42fe0000 x40821804 x4083a422 1 x4083a422 1} {x43000000 x4103a422 x408b8523 1 x408b8523 1} {x43010000 x414c9125 x409cd4fa 1 x409cd4fa 1} {x43020000 x41903c8e x40b38c03 1 x40b38c03 1} {x43030000 x41c00e94 x40c1bc6e 1 x40c1bc6e 1} {x43040000 x41f11ac5 x40c5347c 1 x40c5347c 1} {x43050000 x42115469 x40ca9382 1 x40ca9382 1} {x43060000 x422b3243 x40d205d0 1 x40d205d0 1} {x43070000 x4245d5dd x40e03f58 1 x40e03f58 1} {x43080000 x42634219 x40f06f6c 1 x40f06f6c 1} {x43090000 x4280f8dc x40f1b91c 1 x40f1b91c 1} {x430a0000 x428fd830 x40e4d298 1 x40e4d298 1} {x430b0000 x429d932f x40d595b0 1 x40d595b0 1} {x430c0000 x42aa8ae6 x40d54890 1 x40d54890 1} {x430d0000 x42b83c41 x40de60f8 1 x40de60f8 1} {x430e0000 x42c65705 x40e01b68 1 x40e01b68 1} {x430f0000 x42d43fae x40dbfa18 1 x40dbfa18 1} {x43100000 x42e1d648 x40d832e0 1 x40d832e0 1} {x43110000 x42ef460a x40d211b0 1 x40d211b0 1} {x43120000 x42fc187e x40c4b9e0 1 x40c4b9e0 1} {x43130000 x4303eea3 x40af0280 1 x40af0280 1} {x43140000 x4308fc67 x4097ad40 1 x4097ad40 1} {x43150000 x430d6977 x40554980 1 x40554980 1} {x43160000 x430fa6b3 x3fd8a380 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke95 262656 bezier {cc {f 8224} {p {0 0 1} {x4451349c x43c93df4 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke96 262656 bezier {cc {f 8224} {p {0 0 1} {x4451349c x43c93df4 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3c6fd2c 0 1 x40cb44e0 1} {x42580000 xc3c3acb8 x40e5cd40 1 x40e5cd40 1} {x425c0000 xc3bfcec2 x41060390 1 x41060390 1} {x42600000 xc3bb4c7f x411efd80 1 x411efd80 1} {x42640000 xc3b5deea x412e29f0 1 x412e29f0 1} {x42680000 xc3b069e0 x412b82f0 1 x412b82f0 1} {x426c0000 xc3ab26bb x4122ba20 1 x4122ba20 1} {x42700000 xc3a63e3e x41254390 1 x41254390 1} {x42740000 xc3a0d282 x4126cd70 1 x4126cd70 1} {x42780000 xc39bd167 x411972d0 1 x411972d0 1} {x427c0000 xc3973b55 x4117cf30 1 x4117cf30 1} {x42800000 xc3925474 x411ca720 1 x411ca720 1} {x42820000 xc38d70e3 x410ed960 1 x410ed960 1} {x42840000 xc38966de x40f6e9a0 1 x40f6e9a0 1} {x42860000 xc385b996 x40f561c0 1 x40f561c0 1} {x42880000 xc381bbd0 x4101f878 1 x4101f878 1} {x428a0000 xc37b341d x40fb47a0 1 x40fb47a0 1} {x428c0000 xc373c326 x40e7cdd0 1 x40e7cdd0 1} {x428e0000 xc36cb740 x40ea5040 1 x40ea5040 1} {x42900000 xc3651e22 x40f51500 1 x40f51500 1} {x42920000 xc35d65f0 x40e1a680 1 x40e1a680 1} {x42940000 xc35703ba x40bc8090 1 x40bc8090 1} {x42960000 xc3519de7 x40a221a0 1 x40a221a0 1} {x42980000 xc34ce1a0 x4095fed0 1 x4095fed0 1} {x429a0000 xc3483dfa x408be850 1 x408be850 1} {x429c0000 xc344231b x4078a1a0 1 x4078a1a0 1} {x429e0000 xc34078ed x406ad860 1 x406ad860 1} {x42a00000 xc33ccc58 x407c1440 1 x407c1440 1} {x42a20000 xc338984b x4091eaf0 1 x4091eaf0 1} {x42a40000 xc333ada9 x40add1b0 1 x40add1b0 1} {x42a60000 xc32dbb30 x40a87780 1 x40a87780 1} {x42a80000 xc3292631 x40943200 1 x40943200 1} {x42aa0000 xc3247810 x409269b0 1 x409269b0 1} {x42ac0000 xc31fff96 x407f2ce0 1 x407f2ce0 1} {x42ae0000 xc31c7ea9 x40420060 1 x40420060 1} {x42b00000 xc319ef93 x400c72c0 1 x400c72c0 1} {x42b20000 xc3181b13 x3fd6f2c0 1 x3fd6f2c0 1} {x42b40000 xc31693c8 x3fcfb940 1 x3fcfb940 1} {x42b60000 xc314dc2e x3fd95fc0 1 x3fd95fc0 1} {x42b80000 xc3132e49 x3fd443c0 1 x3fd443c0 1} {x42ba0000 xc3118b1f x3fcb4940 1 x3fcb4940 1} {x42bc0000 xc3100124 x3fce0b40 1 x3fce0b40 1} {x42be0000 xc30e52f2 x3fd42d00 1 x3fd42d00 1} {x42c00000 xc30cb070 x3fcdddc0 1 x3fcdddc0 1} {x42c20000 xc30b1b7b x403d4c60 1 x403d4c60 1} {x42c40000 xc306c60d x408dae70 1 x408dae70 1} {x42c60000 xc3024094 x4095a2a8 1 x4095a2a8 1} {x42c80000 xc2fad7c5 x4099ef60 1 x4099ef60 1} {x42ca0000 xc2f1433c x409a7a00 1 x409a7a00 1} {x42cc0000 xc2e78885 x409b6fc8 1 x409b6fc8 1} {x42ce0000 xc2ddd543 x409382a0 1 x409382a0 1} {x42d00000 xc2d51831 x40882fb0 1 x40882fb0 1} {x42d20000 xc2cccf4d x40792c40 1 x40792c40 1} {x42d40000 xc2c5856d x4066d330 1 x4066d330 1} {x42d60000 xc2be621a x405beb40 1 x405beb40 1} {x42d80000 xc2b7c6b9 x404ee4f0 1 x404ee4f0 1} {x42da0000 xc2b173cb x404d2dd0 1 x404d2dd0 1} {x42dc0000 xc2aaf3dc x4056b7f0 1 x4056b7f0 1} {x42de0000 xc2a4084c x4062a000 1 x4062a000 1} {x42e00000 xc29cc9dc x406b3440 1 x406b3440 1} {x42e20000 xc2955508 x407081a0 1 x407081a0 1} {x42e40000 xc28dc1c2 x40753a60 1 x40753a60 1} {x42e60000 xc2860162 x407c94a8 1 x407c94a8 1} {x42e80000 xc27bf0ef x408667c0 1 x408667c0 1} {x42ea0000 xc26a68d4 x409339a4 1 x409339a4 1} {x42ec0000 xc2572286 x40a40a78 1 x40a40a78 1} {x42ee0000 xc2416636 x40b89e18 1 x40b89e18 1} {x42f00000 xc228fb00 x40c8a964 1 x40c8a964 1} {x42f20000 xc20f3bdd x40d949a0 1 x40d949a0 1} {x42f40000 xc1e55130 x40e63f38 1 x40e63f38 1} {x42f60000 xc1ab581e x40e94115 1 x40e94115 1} {x42f80000 xc161614b x40e4e62f 1 x40e4e62f 1} {x42fa0000 xc0e3941a x40e1614b 1 x40e1614b 1} {x42fc0000 0 x40e76368 1 x40e76368 1} {x42fe0000 x40eb32b6 x40e9c2ae 1 x40e9c2ae 1} {x43000000 x4169c2ae x40e6ac77 1 x40e6ac77 1} {x43010000 x41ae22e9 x40e00fe6 1 x40e00fe6 1} {x43020000 x41e4e94a x40d4c28e 1 x40d4c28e 1} {x43030000 x420c4218 x40c73d10 1 x40c73d10 1} {x43040000 x422443e9 x40b64a18 1 x40b64a18 1} {x43050000 x4239d49e x409ce368 1 x409ce368 1} {x43060000 x424b7cc3 x407800e0 1 x407800e0 1} {x43070000 x4258d4ba x4051a8e8 1 x4051a8e8 1} {x43080000 x4265b1e0 x404879f0 1 x404879f0 1} {x43090000 x4271e3f8 x403a8098 1 x403a8098 1} {x430a0000 x427d01f3 x402c4c60 1 x402c4c60 1} {x430b0000 x4283b6c2 x401b7488 1 x401b7488 1} {x430c0000 x42883842 x400c9320 1 x400c9320 1} {x430d0000 x428c7ff4 x40015ed0 1 x40015ed0 1} {x430e0000 x42904e2f x400a4730 1 x400a4730 1} {x430f0000 x42952467 x401e7b40 1 x401e7b40 1} {x43100000 x429a35e3 x402810e0 1 x402810e0 1} {x43110000 x429fa575 x402b27a0 1 x402b27a0 1} {x43120000 x42a4e85d x40284f70 1 x40284f70 1} {x43130000 x42aa2a6c x40111630 1 x40111630 1} {x43140000 x42adf9c0 x3fb47060 1 x3fb47060 1} {x43150000 x42afcdef x3e80f700 1 x3e80f700 1} {x43160000 x42aff8ec -}} {{x42540000 x4487a185 0 1 xc15d82a0 1} {x42580000 x4485d4f0 xc177da40 1 xc177da40 1} {x425c0000 x4483c21c xc186e6c0 1 xc186e6c0 1} {x42600000 x44819dba xc1880760 1 xc1880760 1} {x42640000 x447f03c2 xc1848920 1 xc1848920 1} {x42680000 x447af2e2 xc1874200 1 xc1874200 1} {x426c0000 x44768fa2 xc18a5e50 1 xc18a5e50 1} {x42700000 x44724cfd xc18f4d50 1 xc18f4d50 1} {x42740000 x446d9acd xc1a2d390 1 xc1a2d390 1} {x42780000 x44681fc4 xc1b3fe00 1 xc1b3fe00 1} {x427c0000 x44625aed xc1c37040 1 xc1c37040 1} {x42800000 x445be8c0 xc1cc2b80 1 xc1cc2b80 1} {x42820000 x44559835 xc1c95710 1 xc1c95710 1} {x42840000 x444f534f xc1c90470 1 xc1c90470 1} {x42860000 x444907ee xc1cf2840 1 xc1cf2840 1} {x42880000 x444260cb xc1d12770 1 xc1d12770 1} {x428a0000 x443bf577 xc1ce6ca0 1 xc1ce6ca0 1} {x428c0000 x44357a01 xc1d483a0 1 xc1d483a0 1} {x428e0000 x442ead3d xc1dbe2e0 1 xc1dbe2e0 1} {x42900000 x4427bbd3 xc1e22230 1 xc1e22230 1} {x42920000 x44208b1a xc1de3560 1 xc1de3560 1} {x42940000 x4419d87d xc1d1f060 1 xc1d1f060 1} {x42960000 x44136c14 xc1c951e0 1 xc1c951e0 1} {x42980000 x440d435f xc1bcf200 1 xc1bcf200 1} {x429a0000 x44079cf4 xc1b14860 1 xc1b14860 1} {x429c0000 x44022ed9 xc1acc7e8 1 xc1acc7e8 1} {x429e0000 x43f9a0eb xc1aa90f0 1 xc1aa90f0 1} {x42a00000 x43ef0b94 xc1a8f8c8 1 xc1a8f8c8 1} {x42a20000 x43e481d2 xc1a8b208 1 xc1a8b208 1} {x42a40000 x43d9f553 xc1a4d4a8 1 xc1a4d4a8 1} {x42a60000 x43cfe73d xc1a0c178 1 xc1a0c178 1} {x42a80000 x43c5dd24 xc1a396c0 1 xc1a396c0 1} {x42aa0000 x43bb7465 xc1a696f0 1 xc1a696f0 1} {x42ac0000 x43b10a46 xc1a59218 1 xc1a59218 1} {x42ae0000 x43a6c222 xc1a2f6d0 1 xc1a2f6d0 1} {x42b00000 x439cab6c xc1a258e0 1 xc1a258e0 1} {x42b20000 x43927706 xc1a45b18 1 xc1a45b18 1} {x42b40000 x43882009 xc1a6ccec 1 xc1a6ccec 1} {x42b60000 x437b3ad1 xc1a92a68 1 xc1a92a68 1} {x42b80000 x4365f578 xc1a6f28c 1 xc1a6f28c 1} {x42ba0000 x43517e2e xc1a07a00 1 xc1a07a00 1} {x42bc0000 x433dd6f8 xc19851c0 1 xc19851c0 1} {x42be0000 x432b69be xc18e036c 1 xc18e036c 1} {x42c00000 x431a561d xc18320c4 1 xc18320c4 1} {x42c20000 x430aa18d xc16fe750 1 xc16fe750 1} {x42c40000 x42f8b266 xc1611c54 1 xc1611c54 1} {x42c60000 x42dcfc05 xc15b45bc 1 xc15b45bc 1} {x42c80000 x42c1e0f7 xc159f2fc 1 xc159f2fc 1} {x42ca0000 x42a67f46 xc15a0654 1 xc15a0654 1} {x42cc0000 x428b5f62 xc141c7da 1 xc141c7da 1} {x42ce0000 x426c1a9f xc1316a4c 1 xc1316a4c 1} {x42d00000 x423e099e xc13c8e54 1 xc13c8e54 1} {x42d20000 x420dd375 xc1363e97 1 xc1363e97 1} {x42d40000 x41c5d4a5 xc122cb4a 1 xc122cb4a 1} {x42d60000 x4171b741 xc1107d0e 1 xc1107d0e 1} {x42d80000 x40d55e5c xc101bfd7 1 xc101bfd7 1} {x42da0000 xbf8e4364 xc0ef8d11 1 xc0ef8d11 1} {x42dc0000 xc104dde3 xc0d4a3f8 1 xc0d4a3f8 1} {x42de0000 xc1666c64 xc0a5bc07 1 xc0a5bc07 1} {x42e00000 xc1954cf5 xc05a41a0 1 xc05a41a0 1} {x42e20000 xc1a9c69a xbff9e608 1 xbff9e608 1} {x42e40000 xc1b489b6 xbf563fb0 1 xbf563fb0 1} {x42e60000 xc1b72a95 -} {x42e80000 xc1ada674 x3fbd92a0 1 x3fbd92a0 1} {x42ea0000 xc19f7841 x3fde4e28 1 x3fde4e28 1} {x42ec0000 xc191dcaf x3fecb918 1 x3fecb918 1} {x42ee0000 xc181e11e x3ff67b20 1 x3ff67b20 1} {x42f00000 xc1661a96 x3feca704 1 x3feca704 1} {x42f20000 xc148987b x3fd07d10 1 x3fd07d10 1} {x42f40000 xc131fb52 x3fdffa70 1 x3fdffa70 1} {x42f60000 xc11099df x400cf7fc 1 x400cf7fc 1} {x42f80000 xc0d6fea8 x402dbe4e 1 x402dbe4e 1} {x42fa0000 xc066eadf x4056fea8 1 x4056fea8 1} {x42fc0000 0 x40792d78 1 x40792d78 1} {x42fe0000 x4085b808 x408383a1 1 x408383a1 1} {x43000000 x410383a1 x40828a1a 1 x40828a1a 1} {x43010000 x4145661e x408b464f 1 x408b464f 1} {x43020000 x418764f8 x40985754 1 x40985754 1} {x43030000 x41aedeb9 x40a37b74 1 x40a37b74 1} {x43040000 x41d922b2 x40aa71fa 1 x40aa71fa 1} {x43050000 x42020bdb x40bb927c 1 x40bb927c 1} {x43060000 x421b75f8 x40de6700 1 x40de6700 1} {x43070000 x4239a59b x40e23088 1 x40e23088 1} {x43080000 x4254021a x40da0fa0 1 x40da0fa0 1} {x43090000 x42702983 x40df2a28 1 x40df2a28 1} {x430a0000 x4285e652 x40d6c974 1 x40d6c974 1} {x430b0000 x4292edf0 x40cdf360 1 x40cdf360 1} {x430c0000 x429fa4be x40d22c78 1 x40d22c78 1} {x430d0000 x42ad337f x40e1b478 1 x40e1b478 1} {x430e0000 x42bbdb4d x40e9a000 1 x40e9a000 1} {x430f0000 x42ca677f x40e202c0 1 x40e202c0 1} {x43100000 x42d81ba5 x40da9250 1 x40da9250 1} {x43110000 x42e5b9c9 x40d48138 1 x40d48138 1} {x43120000 x42f2abcc x40c3ec30 1 x40c3ec30 1} {x43130000 x42fe374f x40b49330 1 x40b49330 1} {x43140000 x43049f19 x40a28038 1 x40a28038 1} {x43150000 x430943ab x406b21c0 1 x406b21c0 1} {x43160000 x430bf827 x400e1da0 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke97 262656 bezier {cc {f 8224} {p {0 0 1} {x42b35db2 x43db4561 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke98 262656 bezier {cc {f 8224} {p {0 0 1} {x42b35db2 x43db4561 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc2d96202 0 1 x4080a0e8 1} {x42580000 xc2d0b852 x409e8f30 1 x409e8f30 1} {x425c0000 xc2c5901c x40b98618 1 x40b98618 1} {x42600000 xc2b9878f x40c8ca10 1 x40c8ca10 1} {x42640000 xc2ac76da x40cdb0d8 1 x40cdb0d8 1} {x42680000 xc29fd174 x40cbad90 1 x40cbad90 1} {x426c0000 xc2930128 x40ccdf50 1 x40ccdf50 1} {x42700000 xc286358a x40d077c4 1 x40d077c4 1} {x42740000 xc271e45f x40e18a28 1 x40e18a28 1} {x42780000 xc254088a x40ed5b88 1 x40ed5b88 1} {x427c0000 xc2368d7d x40f87b40 1 x40f87b40 1} {x42800000 xc215e9ba x40fdc992 1 x40fdc992 1} {x42820000 xc1ee3631 x40f0a242 1 x40f0a242 1} {x42840000 xc1b38253 x40e9b44d 1 x40e9b44d 1} {x42860000 xc172b815 x40c08c33 1 x40c08c33 1} {x42880000 xc1267873 x40c96ecc 1 x40c96ecc 1} {x428a0000 xc0252523 x40a71283 1 x40a71283 1} {x428c0000 x3d1a0f8f x4038d870 1 x4038d870 1} {x428e0000 x404c8bbd x405606c6 1 x405606c6 1} {x42900000 x40d73ae5 x4025dbea 1 x4025dbea 1} {x42920000 x410610e4 -} {x42940000 x40e4c99d xbf92ad1c 1 xbf92ad1c 1} {x42960000 x40c2cb3a xbf6641e8 1 xbf6641e8 1} {x42980000 x40ab3923 -} {x429a0000 x40bade60 -} {x429c0000 x40a0622b xbf94bb7e 1 xbf94bb7e 1} {x429e0000 x40610142 xbfacb31b 1 xbfacb31b 1} {x42a00000 x4014113b xbf8d15b8 1 xbf8d15b8 1} {x42a20000 x3fa7d714 xbf5fca78 1 xbf5fca78 1} {x42a40000 x3f10affd xbf48076c 1 xbf48076c 1} {x42a60000 xbe80c162 xbf90453a 1 xbf90453a 1} {x42a80000 xbfd83276 xbfc211dd 1 xbfc211dd 1} {x42aa0000 xc0522a09 xbfd18c53 1 xbfd18c53 1} {x42ac0000 xc09ed2c7 xc0077d20 1 xc0077d20 1} {x42ae0000 xc0f09224 xc03bc391 1 xc03bc391 1} {x42b00000 xc12d4b2c xc05dde80 1 xc05dde80 1} {x42b20000 xc1673852 xc0635b90 1 xc0635b90 1} {x42b40000 xc18f7c7a xc05873e8 1 xc05873e8 1} {x42b60000 xc1a9b923 xc0484460 1 xc0484460 1} {x42b80000 xc1c18d92 xc0441ee4 1 xc0441ee4 1} {x42ba0000 xc1dac0dc xc04d2fa0 1 xc04d2fa0 1} {x42bc0000 xc1f4d97a xc0465170 1 xc0465170 1} {x42be0000 xc2062a9c xc0425e90 1 xc0425e90 1} {x42c00000 xc212b88f xc042dc20 1 xc042dc20 1} {x42c20000 xc21e8620 xbf993ea0 1 xbf993ea0 1} {x42c40000 xc2201ec7 xbabe8000 1 xbabe8000 1} {x42c60000 xc2201f46 -} {x42c80000 xc21fa632 x3e841b80 1 x3e841b80 1} {x42ca0000 xc21e0ed8 x3eb40bc0 1 x3eb40bc0 1} {x42cc0000 xc21cd603 x3eba4d00 1 x3eba4d00 1} {x42ce0000 xc21b25a4 x3ea7b100 1 x3ea7b100 1} {x42d00000 xc21a373f -} {x42d20000 xc21a6ff2 xbe151d00 1 xbe151d00 1} {x42d40000 xc21b6179 xbe91b100 1 xbe91b100 1} {x42d60000 xc21cb6b6 xbebdf340 1 xbebdf340 1} {x42d80000 xc21e5946 xbebe79c0 1 xbebe79c0 1} {x42da0000 xc21fb09d xbe622000 1 xbe622000 1} {x42dc0000 xc2201d86 -} {x42de0000 xc21fd17d x3e260680 1 x3e260680 1} {x42e00000 xc21ed179 x3e960240 1 x3e960240 1} {x42e20000 xc21d7974 x3f13f2c0 1 x3f13f2c0 1} {x42e40000 xc21a31e3 x3f856710 1 x3f856710 1} {x42e60000 xc2152303 x3fc12740 1 x3fc12740 1} {x42e80000 xc20e1f6f x3fdd3330 1 x3fdd3330 1} {x42ea0000 xc2074fd0 x3ff64d90 1 x3ff64d90 1} {x42ec0000 xc1fd752c x401ffe98 1 x401ffe98 1} {x42ee0000 xc1e69ffa x403df394 1 x403df394 1} {x42f00000 xc1cdf847 x405561dc 1 x405561dc 1} {x42f20000 xc1b14783 x407503b8 1 x407503b8 1} {x42f40000 xc190b759 x40884a4d 1 x40884a4d 1} {x42f60000 xc15a44b9 x408f03f7 1 x408f03f7 1} {x42f80000 xc1126abb x40900846 1 x40900846 1} {x42fa0000 xc09478e5 x40926abb 1 x40926abb 1} {x42fc0000 0 x4098a93a 1 x4098a93a 1} {x42fe0000 x409cd990 x409c986d 1 x409c986d 1} {x43000000 x411c986d x4099a29d 1 x4099a29d 1} {x43010000 x41680f65 x4094b56b 1 x4094b56b 1} {x43020000 x4198a6ec x408db879 1 x408db879 1} {x43030000 x41bae3ef x4085f2a2 1 x4085f2a2 1} {x43040000 x41dba03d x407663f4 1 x407663f4 1} {x43050000 x41f87cec x4054c5a4 1 x4054c5a4 1} {x43060000 x420868d3 x40374928 1 x40374928 1} {x43070000 x4213279b x4023adb8 1 x4023adb8 1} {x43080000 x421cde8a x401585b8 1 x401585b8 1} {x43090000 x4225d852 x400dad10 1 x400dad10 1} {x430a0000 x422e942c x400c4c68 1 x400c4c68 1} {x430b0000 x423761df x400d3218 1 x400d3218 1} {x430c0000 x42403a6f x4009e288 1 x4009e288 1} {x430d0000 x42489e30 x400e89e0 1 x400e89e0 1} {x430e0000 x42520bab x40216840 1 x40216840 1} {x430f0000 x425ccb38 x4033af60 1 x4033af60 1} {x43100000 x42688197 x403a0c00 1 x403a0c00 1} {x43110000 x42740cb8 x40384b30 1 x40384b30 1} {x43120000 x427f8afd x4031c110 1 x4031c110 1} {x43130000 x4285226d x401c2918 1 x401c2918 1} {x43140000 x42898810 x3fd158a0 1 x3fd158a0 1} {x43150000 x428bad32 x3f273780 1 x3f273780 1} {x43160000 x428c24ee x3cc62800 1 0 1}} {{x42540000 x448247cb 0 1 xc155dda0 1} {x42580000 x44808d3f xc16c16c0 1 xc16c16c0 1} {x425c0000 x447d2ee0 xc18106c0 1 xc18106c0 1} {x42600000 x44790a12 xc1838c40 1 xc1838c40 1} {x42640000 x4474f61c xc1824d90 1 xc1824d90 1} {x42680000 x4470e539 xc1845390 1 xc1845390 1} {x426c0000 x446cb0e3 xc18ad3c0 1 xc18ad3c0 1} {x42700000 x446837fd xc197df30 1 xc197df30 1} {x42740000 x446332f0 xc1a96f30 1 xc1a96f30 1} {x42780000 x445da10a xc1bb3590 1 xc1bb3590 1} {x427c0000 x44577f97 xc1ccad40 1 xc1ccad40 1} {x42800000 x4450d636 xc1d9f740 1 xc1d9f740 1} {x42820000 x4449e023 xc1dde890 1 xc1dde890 1} {x42840000 x4442f7ad xc1dec350 1 xc1dec350 1} {x42860000 x443bf3ee xc1d8ccd0 1 xc1d8ccd0 1} {x42880000 x44356ae0 xc1da7c30 1 xc1da7c30 1} {x428a0000 x442e4c2b xc1cf0f30 1 xc1cf0f30 1} {x428c0000 x442879ed xc1b1fba0 1 xc1b1fba0 1} {x428e0000 x44232c71 xc1ae9ed0 1 xc1ae9ed0 1} {x42900000 x441d9000 xc1b41370 1 xc1b41370 1} {x42920000 x4417eb3a xc1be6e70 1 xc1be6e70 1} {x42940000 x4411a919 xc1c5d6b0 1 xc1c5d6b0 1} {x42960000 x440b8dcf xc1c2b1b0 1 xc1c2b1b0 1} {x42980000 x44057dfe xc1b41c30 1 xc1b41c30 1} {x429a0000 x44004c0c xc1ac2f78 1 xc1ac2f78 1} {x429c0000 x43f5760d xc1ae7be0 1 xc1ae7be0 1} {x429e0000 x43eac89c xc1aaa798 1 xc1aaa798 1} {x42a00000 x43e0211a xc1aa6c90 1 xc1aa6c90 1} {x42a20000 x43d57b0a xc1ab5f70 1 xc1ab5f70 1} {x42a40000 x43cab52c xc1acd798 1 xc1acd798 1} {x42a60000 x43bfe017 xc1acdb48 1 xc1acdb48 1} {x42a80000 x43b519c3 xc1ac5dd0 1 xc1ac5dd0 1} {x42aa0000 x43aa545d xc1ab06f8 1 xc1ab06f8 1} {x42ac0000 x439fb8e4 xc1a6ea50 1 xc1a6ea50 1} {x42ae0000 x43957713 xc1a15ab8 1 xc1a15ab8 1} {x42b00000 x438b8d8d xc19d9da0 1 xc19d9da0 1} {x42b20000 x4381c35f xc19ce728 1 xc19ce728 1} {x42b40000 x436fe150 xc19e6d70 1 xc19e6d70 1} {x42b60000 x435beb62 xc1a09610 1 xc1a09610 1} {x42b80000 x4347bbcc xc19e3290 1 xc19e3290 1} {x42ba0000 x43345ebe xc194d784 1 xc194d784 1} {x42bc0000 x432285eb xc18ab8fc 1 xc18ab8fc 1} {x42be0000 x4311b07f xc180f550 1 xc180f550 1} {x42c00000 x43024897 xc16d8a1c 1 xc16d8a1c 1} {x42c20000 x42e7fe77 xc1575f1c 1 xc1575f1c 1} {x42c40000 x42ceb967 xc14a8264 1 xc14a8264 1} {x42c60000 x42b55dde xc14bc478 1 xc14bc478 1} {x42c80000 x429bc849 xc14cfb80 1 xc14cfb80 1} {x42ca0000 x42821efe xc14b921c 1 xc14b921c 1} {x42cc0000 x4251c784 xc14724ee 1 xc14724ee 1} {x42ce0000 x4220ab85 xc13dae72 1 xc13dae72 1} {x42d00000 x41e5e096 xc12e8811 1 xc12e8811 1} {x42d20000 x4192cef9 xc11d13d7 1 xc11d13d7 1} {x42d40000 x4111997e xc10ab9b9 1 xc10ab9b9 1} {x42d60000 x3f815407 xc0ee982e 1 xc0ee982e 1} {x42d80000 xc0b9fd60 xc0cba02f 1 xc0cba02f 1} {x42da0000 xc13b75ae xc0b6df5c 1 xc0b6df5c 1} {x42dc0000 xc189ef06 xc0a2aba4 1 xc0a2aba4 1} {x42de0000 xc1af10a9 xc07b4828 1 xc07b4828 1} {x42e00000 xc1c8c110 xc0191b0c 1 xc0191b0c 1} {x42e20000 xc1d5576c xbf8b25f0 1 xbf8b25f0 1} {x42e40000 xc1da25ce -} {x42e60000 xc1d71725 x3f92bfb0 1 x3f92bfb0 1} {x42e80000 xc1c742a4 x4006ed70 1 x4006ed70 1} {x42ea0000 xc1b55bc9 x400fccbc 1 x400fccbc 1} {x42ec0000 xc1a34f75 x4009f0b4 1 x4009f0b4 1} {x42ee0000 xc192df9c x4004f4bc 1 x4004f4bc 1} {x42f00000 xc1821246 x400af420 1 x400af420 1} {x42f20000 xc1604528 x4007f4de 1 x4007f4de 1} {x42f40000 xc1402a1d x4008d8cc 1 x4008d8cc 1} {x42f60000 xc11bd8c2 x401f822f 1 x401f822f 1} {x42f80000 xc0e0d20b x403c70af 1 x403c70af 1} {x42fa0000 xc07681aa x4060d20b 1 x4060d20b 1} {x42fc0000 0 x4080363a 1 x4080363a 1} {x42fe0000 x40852b9e x4078dfc0 1 x4078dfc0 1} {x43000000 x40f8dfc0 x4067cf6c 1 x4067cf6c 1} {x43010000 x41367d85 x40716d6a 1 x40716d6a 1} {x43020000 x41752695 x4080f8ad 1 x4080f8ad 1} {x43030000 x419bbb19 x4088d943 1 x4088d943 1} {x43040000 x41beffec x408dabd6 1 x408dabd6 1} {x43050000 x41e29104 x40931770 1 x40931770 1} {x43060000 x420445d2 x409acbd8 1 x409acbd8 1} {x43070000 x4217fb78 x40a8621c 1 x40a8621c 1} {x43080000 x422e5e59 x40b85094 1 x40b85094 1} {x43090000 x42460f9d x40bee61c 1 x40bee61c 1} {x430a0000 x425e17e0 x40c03724 1 x40c03724 1} {x430b0000 x42761d66 x40bfb3e8 1 x40bfb3e8 1} {x430c0000 x4287026d x40c5ce78 1 x40c5ce78 1} {x430d0000 x4293c882 x40d6c4a8 1 x40d6c4a8 1} {x430e0000 x42a1db02 x40de5838 1 x40de5838 1} {x430f0000 x42af9389 x40d4db58 1 x40d4db58 1} {x43100000 x42bc766d x40ccf960 1 x40ccf960 1} {x43110000 x42c932b5 x40c9e1c8 1 x40c9e1c8 1} {x43120000 x42d5b2a6 x40bf4078 1 x40bf4078 1} {x43130000 x42e11ac4 x40b09578 1 x40b09578 1} {x43140000 x42ebc555 x40a0b930 1 x40a0b930 1} {x43150000 x42f531ea x40766430 1 x40766430 1} {x43160000 x42fb2b98 x40239e88 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke99 262656 bezier {cc {f 8224} {p {0 0 1} {x431e8ac1 x438bc106 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke100 262656 bezier {cc {f 8224} {p {0 0 1} {x431e8ac1 x438bc106 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc2ddd794 0 1 x407fc008 1} {x42580000 xc2d5393b x409df0a8 1 x409df0a8 1} {x425c0000 xc2ca197f x40b97b40 1 x40b97b40 1} {x42600000 xc2be09d3 x40c929c8 1 x40c929c8 1} {x42640000 xc2b0f446 x40cdf770 1 x40cdf770 1} {x42680000 xc2a44ae5 x40cbcff8 1 x40cbcff8 1} {x426c0000 xc2977a47 x40cce5c8 1 x40cce5c8 1} {x42700000 xc28aae2c x40d073e4 1 x40d073e4 1} {x42740000 xc27ad795 x40e0aa1c 1 x40e0aa1c 1} {x42780000 xc25d31d1 x40ec6738 1 x40ec6738 1} {x427c0000 xc23fbdc7 x40f80630 1 x40f80630 1} {x42800000 xc21f3045 x40fd7030 1 x40fd7030 1} {x42820000 xc20061bb x40f0379e 1 x40f0379e 1} {x42840000 xc1c644bb x40e87b84 1 x40e87b84 1} {x42860000 xc18c85b4 x40cabf6e 1 x40cabf6e 1} {x42880000 xc141ca08 x40d56ed6 1 x40d56ed6 1} {x428a0000 xc0873925 x40b58984 1 x40b58984 1} {x428c0000 xbf440848 x405e222e 1 x405e222e 1} {x428e0000 x402dd213 x406bf442 1 x406bf442 1} {x42900000 x40d37339 x3f1cc9d8 1 x3f1cc9d8 1} {x42920000 x40d9fba2 -} {x42940000 x40d6b4b4 -} {x42960000 x40d6d62b x3c48ca00 1 x3c48ca00 1} {x42980000 x40dc4b7c x3e292f00 1 x3e292f00 1} {x429a0000 x40e1691b x3e0e7650 1 x3e0e7650 1} {x429c0000 x40e532e1 -} {x429e0000 x40e44668 xbdb15ac0 1 xbdb15ac0 1} {x42a00000 x40dc2d90 xbe3af0c0 1 xbe3af0c0 1} {x42a20000 x40d8975c xbe1b2e40 1 xbe1b2e40 1} {x42a40000 x40d27aac -} {x42a60000 x40d5ff2c -} {x42a80000 x4097711f xc00a4800 1 xc00a4800 1} {x42aa0000 x40176e59 xbff5eac0 1 xbff5eac0 1} {x42ac0000 x3f63ddf8 xbfe65046 1 xbfe65046 1} {x42ae0000 xbf9dc3da xc028f4a4 1 xc028f4a4 1} {x42b00000 xc08c78e5 xc0542348 1 xc0542348 1} {x42b20000 xc0fb943f xc05ae38f 1 xc05ae38f 1} {x42b40000 xc133ae3a xc04c16b5 1 xc04c16b5 1} {x42b60000 xc163d57a xc03daa98 1 xc03daa98 1} {x42b80000 xc18941c3 xc03e99ac 1 xc03e99ac 1} {x42ba0000 xc1a19128 xc03f236c 1 xc03f236c 1} {x42bc0000 xc1b90a9e xc0426478 1 xc0426478 1} {x42be0000 xc1d22a46 xc04a10a0 1 xc04a10a0 1} {x42c00000 xc1eb8ec6 xc0500df0 1 xc0500df0 1} {x42c20000 xc20316e1 xbfb0f8e0 1 xbfb0f8e0 1} {x42c40000 xc204eece xbdda0400 1 xbdda0400 1} {x42c60000 xc2051324 xbd5de800 1 xbd5de800 1} {x42c80000 xc2055dc2 -} {x42ca0000 xc204b790 x3edc5580 1 x3edc5580 1} {x42cc0000 xc201ec6c x3f9c8cd8 1 x3f9c8cd8 1} {x42ce0000 xc1f5dd85 -} {x42d00000 xc1f6371c xbe066280 1 xbe066280 1} {x42d20000 xc1fb9568 xbf1a8410 1 xbf1a8410 1} {x42d40000 xc1ffdf5d xbf17bf00 1 xbf17bf00 1} {x42d60000 xc20288ac xbf321270 1 xbf321270 1} {x42d80000 xc2058042 xbf251040 1 xbf251040 1} {x42da0000 xc207b12e xbee53600 1 xbee53600 1} {x42dc0000 xc209151a xbe92e880 1 xbe92e880 1} {x42de0000 xc209fcd0 -} {x42e00000 xc209a82d x3e617f00 1 x3e617f00 1} {x42e20000 xc20839d2 x3ec52500 1 x3ec52500 1} {x42e40000 xc2069399 x3f0c8620 1 x3f0c8620 1} {x42e60000 xc203d5a1 x3f463d40 1 x3f463d40 1} {x42e80000 xc20061af x3f867860 1 x3f867860 1} {x42ea0000 xc1f6dc36 x3fcefd90 1 x3fcefd90 1} {x42ec0000 xc1e6e3ac x4009c2d0 1 x4009c2d0 1} {x42ee0000 xc1d46b82 x402d0340 1 x402d0340 1} {x42f00000 xc1bba2dc x404cc19c 1 x404cc19c 1} {x42f20000 xc1a13b1b x4060505c 1 x4060505c 1} {x42f40000 xc1838ec5 x40766ba8 1 x40766ba8 1} {x42f60000 xc1474062 x40840fdc 1 x40840fdc 1} {x42f80000 xc1030dae x4086486e 1 x4086486e 1} {x42fa0000 xc081efe7 x40830dae 1 x40830dae 1} {x42fc0000 0 x408ae79e 1 x408ae79e 1} {x42fe0000 x4093df55 x409218f3 1 x409218f3 1} {x43000000 x411218f3 x4090ccfe 1 x4090ccfe 1} {x43010000 x415abca9 x408cfead 1 x408cfead 1} {x43020000 x418f8bd0 x4087870b 1 x4087870b 1} {x43030000 x41b121da x40818584 1 x40818584 1} {x43040000 x41d04e92 x40687244 1 x40687244 1} {x43050000 x41eb3e6b x405489e0 1 x405489e0 1} {x43060000 x4202b885 x40569fdc 1 x40569fdc 1} {x43070000 x42107331 x40240f80 1 x40240f80 1} {x43080000 x42173a75 x3fdbb6b0 1 x3fdbb6b0 1} {x43090000 x421e2e9c x3fde8d30 1 x3fde8d30 1} {x430a0000 x42252348 x3fdf4030 1 x3fdf4030 1} {x430b0000 x422c229f x3fdcb320 1 x3fdcb320 1} {x430c0000 x4232ee7a x3fd9dc10 1 x3fd9dc10 1} {x430d0000 x4239c060 x3fe8a860 1 x3fe8a860 1} {x430e0000 x42417900 x4007f2b0 1 x4007f2b0 1} {x430f0000 x424abeb6 x401757d8 1 x401757d8 1} {x43100000 x425463fb x401bf518 1 x401bf518 1} {x43110000 x425e3d59 x40215b78 1 x40215b78 1} {x43120000 x42688f6a x401c4d60 1 x401c4d60 1} {x43130000 x4271c705 x4002a428 1 x4002a428 1} {x43140000 x4278e3ef x3fa808f0 1 x3fa808f0 1} {x43150000 x427c4794 -} {x43160000 x427bccb2 xbe385300 1 0 1}} {{x42540000 x4479299d 0 1 xc155cd00 1} {x42580000 x4475b4ec xc16beac0 1 xc16beac0 1} {x425c0000 x4471ca47 xc1810810 1 xc1810810 1} {x42600000 x446da46b xc183a0e0 1 xc183a0e0 1} {x42640000 x44699039 xc1826940 1 xc1826940 1} {x42680000 x44657dd7 xc1848030 1 xc1848030 1} {x426c0000 x44614836 xc18aef60 1 xc18aef60 1} {x42700000 x445ccee1 xc197f060 1 xc197f060 1} {x42740000 x4457c930 xc1a98bd0 1 xc1a98bd0 1} {x42780000 x44523624 xc1bb5fa0 1 xc1bb5fa0 1} {x427c0000 x444c1336 xc1cccef0 1 xc1cccef0 1} {x42800000 x44456935 xc1da0950 1 xc1da0950 1} {x42820000 x443e72a1 xc1de00e0 1 xc1de00e0 1} {x42840000 x44378927 xc1def050 1 xc1def050 1} {x42860000 x4430839c xc1da6600 1 xc1da6600 1} {x42880000 x4429e2c7 xc1dd3060 1 xc1dd3060 1} {x428a0000 x4422b096 xc1d44210 1 xc1d44210 1} {x428c0000 x441c9ea6 xc1b87480 1 xc1b87480 1} {x428e0000 x4417294e xc1b394f0 1 xc1b394f0 1} {x42900000 x44116557 xc1b7d9c0 1 xc1b7d9c0 1} {x42920000 x440babb2 xc1b4f070 1 xc1b4f070 1} {x42940000 x44061650 xc1b32010 1 xc1b32010 1} {x42960000 x440079b1 xc1b1fef8 1 xc1b1fef8 1} {x42980000 x43f5ecc1 xc1ab5410 1 xc1ab5410 1} {x429a0000 x43eb88e0 xc1a38f70 1 xc1a38f70 1} {x429c0000 x43e17ad3 xc1a0bbe0 1 xc1a0bbe0 1} {x429e0000 x43d77164 xc19efbc8 1 xc19efbc8 1} {x42a00000 x43cd9b5a xc19cd068 1 xc19cd068 1} {x42a20000 x43c3d757 xc19e5fc8 1 xc19e5fc8 1} {x42a40000 x43b9cf61 xc1a27ba0 1 xc1a27ba0 1} {x42a60000 x43af87e3 xc199c488 1 xc199c488 1} {x42a80000 x43a696d0 xc18f1330 1 xc18f1330 1} {x42aa0000 x439da57d xc1941630 1 xc1941630 1} {x42ac0000 x4394140a xc1983a10 1 xc1983a10 1} {x42ae0000 x438a9e3b xc193e368 1 xc193e368 1} {x42b00000 x4381979d xc18f84e4 1 xc18f84e4 1} {x42b20000 x43715b3d xc18e28a4 1 xc18e28a4 1} {x42b40000 x435fa511 xc18d5680 1 xc18d5680 1} {x42b60000 x434e059d xc1910430 1 xc1910430 1} {x42b80000 x433b6405 xc191e0c0 1 xc191e0c0 1} {x42ba0000 x43298d6d xc18c18c0 1 xc18c18c0 1} {x42bc0000 x43185dd5 xc1837ae8 1 xc1837ae8 1} {x42be0000 x4308aeb3 xc16f731c 1 xc16f731c 1} {x42c00000 x42f4dee3 xc1567c98 1 xc1567c98 1} {x42c20000 x42dbbe40 xc142e81c 1 xc142e81c 1} {x42c40000 x42c424dc xc14069ac 1 xc14069ac 1} {x42c60000 x42aba3d5 xc13d3828 1 xc13d3828 1} {x42c80000 x4294d6d2 xc137e504 1 xc137e504 1} {x42ca0000 x427b5528 xc13d4fb6 1 xc13d4fb6 1} {x42cc0000 x424b05c9 xc12d4660 1 xc12d4660 1} {x42ce0000 x4224b1f8 xc105e228 1 xc105e228 1} {x42d00000 x420814b5 xc0e6014a 1 xc0e6014a 1} {x42d20000 x41d6634b xc0e70aa0 1 xc0e70aa0 1} {x42d40000 x419ca41a xc0da27f5 1 xc0da27f5 1} {x42d60000 x41529ea1 xc0c201fa 1 xc0c201fa 1} {x42d80000 x40ee8c74 xc0b5382f 1 xc0b5382f 1} {x42da0000 x3feb338e xc0b3f0bb 1 xc0b3f0bb 1} {x42dc0000 xc072aa04 xc0a62334 1 xc0a62334 1} {x42de0000 xc108bcc2 xc0881968 1 xc0881968 1} {x42e00000 xc144c3e9 xc03e4798 1 xc03e4798 1} {x42e20000 xc167e08e xbff37754 1 xbff37754 1} {x42e40000 xc180d0df xbde58000 1 xbde58000 1} {x42e60000 xc1811d5f -} {x42e80000 xc1767262 x3f8aacd4 1 x3f8aacd4 1} {x42ea0000 xc15f8f89 x3f7bd918 1 x3f7bd918 1} {x42ec0000 xc156f73f x3f420df0 1 x3f420df0 1} {x42ee0000 xc1474dcb x3f810784 1 x3f810784 1} {x42f00000 xc136b55e x3f91c8f0 1 x3f91c8f0 1} {x42f20000 xc122db8f x3fa3e194 1 x3fa3e194 1} {x42f40000 xc10dbcf9 x3fb0d1fa 1 x3fb0d1fa 1} {x42f60000 xc0ed4e21 x3fd7a8ec 1 x3fd7a8ec 1} {x42f80000 xc0afa57c x400d8826 1 x400d8826 1} {x42fa0000 xc03f8bf5 x402fa57c 1 x402fa57c 1} {x42fc0000 0 x4032dac2 1 x4032dac2 1} {x42fe0000 x4026298f x4031f1ed 1 x4031f1ed 1} {x43000000 x40b1f1ed x40390448 1 x40390448 1} {x43010000 x41060c88 x403de249 1 x403de249 1} {x43020000 x4137ea1b x404b6518 1 x404b6518 1} {x43030000 x416bbf14 x405aa1ee 1 x405aa1ee 1} {x43040000 x41929d89 x406ac130 1 x406ac130 1} {x43050000 x41b08fd6 x407a7360 1 x407a7360 1} {x43060000 x41d13a61 x4092aafa 1 x4092aafa 1} {x43070000 x41f9e553 x40ae4b02 1 x40ae4b02 1} {x43080000 x42142ff1 x40b81eba 1 x40b81eba 1} {x43090000 x422afa58 x40b45b04 1 x40b45b04 1} {x430a0000 x424146b2 x40b1ce2c 1 x40b1ce2c 1} {x430b0000 x42576de3 x40af03d4 1 x40af03d4 1} {x430c0000 x426d07a7 x40b3b1ac 1 x40b3b1ac 1} {x430d0000 x42822d27 x40b995fc 1 x40b995fc 1} {x430e0000 x428db693 x40b27398 1 x40b27398 1} {x430f0000 x42987b9a x40b151b0 1 x40b151b0 1} {x43100000 x42a3e0c9 x40b3fd20 1 x40b3fd20 1} {x43110000 x42aefb3e x40adb880 1 x40adb880 1} {x43120000 x42b997d9 x40a672a0 1 x40a672a0 1} {x43130000 x42c3c992 x409d8080 1 x409d8080 1} {x43140000 x42cd47e9 x40897c00 1 x40897c00 1} {x43150000 x42d4f912 x4044a120 1 x4044a120 1} {x43160000 x42d991fb x3ff4b640 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke101 262656 bezier {cc {f 8224} {p {0 0 1} {x44bb0ed9 x44631313 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke102 262656 bezier {cc {f 8224} {p {0 0 1} {x44bb0ed9 x44631313 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3aae691 0 1 x40de6690 1} {x42580000 xc3a74a08 x40f899a0 1 x40f899a0 1} {x425c0000 xc3a321c4 x40e7f3e0 1 x40e7f3e0 1} {x42600000 xc3a00a69 x40fefce0 1 x40fefce0 1} {x42640000 xc39b29dd x41179390 1 x41179390 1} {x42680000 xc3969130 x410b6440 1 x410b6440 1} {x426c0000 xc3927399 x410e6330 1 x410e6330 1} {x42700000 xc38daafd x41274e90 1 x41274e90 1} {x42740000 xc387feb0 x412ab720 1 x412ab720 1} {x42780000 xc382ff8b x41135448 1 x41135448 1} {x427c0000 xc37d92d7 x41061be0 1 x41061be0 1} {x42800000 xc3753b9a x410833f8 1 x410833f8 1} {x42820000 xc36c8c58 x40fcdc20 1 x40fcdc20 1} {x42840000 xc3656dd8 x40d38520 1 x40d38520 1} {x42860000 xc35f5406 x40d82b20 1 x40d82b20 1} {x42880000 xc357eb26 x40da17f0 1 x40da17f0 1} {x428a0000 xc351b287 x40d62ac0 1 x40d62ac0 1} {x428c0000 xc34a887a x40cbf310 1 x40cbf310 1} {x428e0000 xc344f356 x40b359b0 1 x40b359b0 1} {x42900000 xc33f52df x40d8b560 1 x40d8b560 1} {x42920000 xc3376800 x40e4e620 1 x40e4e620 1} {x42940000 xc331047d x40c5b130 1 x40c5b130 1} {x42960000 xc32b0ced x40ad64d0 1 x40ad64d0 1} {x42980000 xc3262e30 x409e4850 1 x409e4850 1} {x429a0000 xc3212868 x409390b0 1 x409390b0 1} {x429c0000 xc31cf525 x4071c6a0 1 x4071c6a0 1} {x429e0000 xc3199a33 x40506620 1 x40506620 1} {x42a00000 xc31671f4 x404ac9e0 1 x404ac9e0 1} {x42a20000 xc31343e4 x40849060 1 x40849060 1} {x42a40000 xc30e28ee x408b7fd0 1 x408b7fd0 1} {x42a60000 xc30a8be7 x407b34e0 1 x407b34e0 1} {x42a80000 xc3064f47 x40981840 1 x40981840 1} {x42aa0000 xc3010a63 x408a5aa8 1 x408a5aa8 1} {x42ac0000 xc2fb5339 x4029c0c0 1 x4029c0c0 1} {x42ae0000 xc2f778ba x3fcdd1e0 1 x3fcdd1e0 1} {x42b00000 xc2f4e4aa -} {x42b20000 xc2f529c4 xbde97c00 1 xbde97c00 1} {x42b40000 xc2f55968 xbda1f800 1 xbda1f800 1} {x42b60000 xc2f57ac0 -} {x42b80000 xc2f55161 x3e783a00 1 x3e783a00 1} {x42ba0000 xc2f44e38 x3ec79d80 1 x3ec79d80 1} {x42bc0000 xc2f3c226 x3e3ab000 1 x3e3ab000 1} {x42be0000 xc2f39388 -} {x42c00000 xc2f3f939 xbe9a2580 1 xbe9a2580 1} {x42c20000 xc2f4c7d3 -} {x42c40000 xc2efd9f3 x401d4e00 1 x401d4e00 1} {x42c60000 xc2eaf2f3 x4035f400 1 x4035f400 1} {x42c80000 xc2e47ab3 x403f76b0 1 x403f76b0 1} {x42ca0000 xc2defb88 x402c1280 1 x402c1280 1} {x42cc0000 xc2d9b98b x40316650 1 x40316650 1} {x42ce0000 xc2d3e523 x40295b50 1 x40295b50 1} {x42d00000 xc2cf23d6 x401820f0 1 x401820f0 1} {x42d20000 xc2ca6314 x40083210 1 x40083210 1} {x42d40000 xc2c6a0b5 x40077ed0 1 x40077ed0 1} {x42d60000 xc2c1eb27 x4016c6b0 1 x4016c6b0 1} {x42d80000 xc2bd344a x402482d0 1 x402482d0 1} {x42da0000 xc2b7a2fa x40339b00 1 x40339b00 1} {x42dc0000 xc2b1fa9a x404a1730 1 x404a1730 1} {x42de0000 xc2ab0187 x40605220 1 x40605220 1} {x42e00000 xc2a3f578 x407900d0 1 x407900d0 1} {x42e20000 xc29b717a x40844d58 1 x40844d58 1} {x42e40000 xc2936bcd x408aa5d0 1 x408aa5d0 1} {x42e60000 xc28a1cc0 x40966468 1 x40966468 1} {x42e80000 xc2809f40 x409a9bac 1 x409a9bac 1} {x42ea0000 xc26d9295 x40a95f98 1 x40a95f98 1} {x42ec0000 xc256e69a x40ba2368 1 x40ba2368 1} {x42ee0000 xc23f09bb x40c2d9f8 1 x40c2d9f8 1} {x42f00000 xc226301c x40cf6740 1 x40cf6740 1} {x42f20000 xc20b2feb x40d49750 1 x40d49750 1} {x42f40000 xc1e21490 x40e10df2 1 x40e10df2 1} {x42f60000 xc1a5d8dd x40e6187c 1 x40e6187c 1} {x42f80000 xc15e10a4 x40db55a0 1 x40db55a0 1} {x42fa0000 xc0e0b833 x40de10a4 1 x40de10a4 1} {x42fc0000 0 x40dc239c 1 x40dc239c 1} {x42fe0000 x40d78f04 x40d7116e 1 x40d7116e 1} {x43000000 x4157116e x40c7d614 1 x40c7d614 1} {x43010000 x4199cecb x40ba482e 1 x40ba482e 1} {x43020000 x41c8acce x40b60e3a 1 x40b60e3a 1} {x43030000 x41f4d5e8 x40aa96bc 1 x40aa96bc 1} {x43040000 x420efc16 x4098ede8 1 x4098ede8 1} {x43050000 x4220a66e x4086cde0 1 x4086cde0 1} {x43060000 x4230af8e x4068aec8 1 x4068aec8 1} {x43070000 x423dbc47 x404b9540 1 x404b9540 1} {x43080000 x424a2236 x403cdb90 1 x403cdb90 1} {x43090000 x425557b9 x402d2920 1 x402d2920 1} {x430a0000 x425fc75a x40290500 1 x40290500 1} {x430b0000 x426a7859 x40266d58 1 x40266d58 1} {x430c0000 x42749505 x401aa500 1 x401aa500 1} {x430d0000 x427dccf9 x401eb368 1 x401eb368 1} {x430e0000 x428435b9 x402f7778 1 x402f7778 1} {x430f0000 x4289ddf4 x402e4990 1 x402e4990 1} {x43100000 x428f1a52 x4026dd00 1 x4026dd00 1} {x43110000 x42944bc4 x4024c670 1 x4024c670 1} {x43120000 x429966b9 x40211720 1 x40211720 1} {x43130000 x429e5d36 x401675a0 1 x401675a0 1} {x43140000 x42a2ce13 x3fe3f1a0 1 x3fe3f1a0 1} {x43150000 x42a57cc3 x3f609980 1 x3f609980 1} {x43160000 x42a65079 x3e39ef00 1 0 1}} {{x42540000 x4463c790 0 1 xc11730b0 1} {x42580000 x446175d6 xc10eea20 1 xc10eea20 1} {x425c0000 x445f503f xc112a720 1 xc112a720 1} {x42600000 x445ce09d xc14ad5a0 1 xc14ad5a0 1} {x42640000 x4458f992 xc17edc60 1 xc17edc60 1} {x42680000 x4454e9ba xc1849130 1 xc1849130 1} {x426c0000 x4450b07f xc17cb6c0 1 xc17cb6c0 1} {x42700000 x444d0404 xc17c1880 1 xc17c1880 1} {x42740000 x4448cfbb xc188cf60 1 xc188cf60 1} {x42780000 x4444770e xc1878160 1 xc1878160 1} {x427c0000 x444057a5 xc18c4570 1 xc18c4570 1} {x42800000 x443bb2b7 xc19d8540 1 xc19d8540 1} {x42820000 x44367f51 xc19fb740 1 xc19fb740 1} {x42840000 x4431b743 xc19ca4f0 1 xc19ca4f0 1} {x42860000 x442cb502 xc1a30be0 1 xc1a30be0 1} {x42880000 x44278685 xc19c44c0 1 xc19c44c0 1} {x428a0000 x4422f0b6 xc19bcd10 1 xc19bcd10 1} {x428c0000 x441dc9b4 xc19a5eb0 1 xc19a5eb0 1} {x428e0000 x44194acb xc1931680 1 xc1931680 1} {x42900000 x4414984c xc1a6a0d0 1 xc1a6a0d0 1} {x42920000 x440ee0be xc1b3d060 1 xc1b3d060 1} {x42940000 x44095b46 xc1a90ce0 1 xc1a90ce0 1} {x42960000 x44044ff0 xc19a3a00 1 xc19a3a00 1} {x42980000 x43ff6f4c xc189df80 1 xc189df80 1} {x429a0000 x43f763f0 xc178f460 1 xc178f460 1} {x429c0000 x43efe006 xc16d33f0 1 xc16d33f0 1} {x429e0000 x43e890b1 xc16e0520 1 xc16e0520 1} {x42a00000 x43e0ffb4 xc18319f0 1 xc18319f0 1} {x42a20000 x43d82d73 xc18fd920 1 xc18fd920 1} {x42a40000 x43cf0490 xc18e3758 1 xc18e3758 1} {x42a60000 x43c66688 xc1919360 1 xc1919360 1} {x42a80000 x43bcd224 xc19b93d0 1 xc19b93d0 1} {x42aa0000 x43b2f40e xc192cba0 1 xc192cba0 1} {x42ac0000 x43aa78b0 xc1857a38 1 xc1857a38 1} {x42ae0000 x43a244c7 xc18440f0 1 xc18440f0 1} {x42b00000 x4399f092 xc1820be8 1 xc1820be8 1} {x42b20000 x4392034a xc1830da8 1 xc1830da8 1} {x42b40000 x43898edd xc18cf5f8 1 xc18cf5f8 1} {x42b60000 x4380648b xc1921864 1 xc1921864 1} {x42b80000 x436e97a1 xc192f99c 1 xc192f99c 1} {x42ba0000 x435c0aaf xc18f7748 1 xc18f7748 1} {x42bc0000 x434ab9cf xc182bc48 1 xc182bc48 1} {x42be0000 x433b5b9d xc1640b48 1 xc1640b48 1} {x42c00000 x432e3866 xc145f270 1 xc145f270 1} {x42c20000 x43229d4f xc1307f48 1 xc1307f48 1} {x42c40000 x4318287d xc12dcfb8 1 xc12dcfb8 1} {x42c60000 x430ce358 xc13ca0e8 1 xc13ca0e8 1} {x42c80000 x43009460 xc13c06d8 1 xc13c06d8 1} {x42ca0000 x42eac4fa xc12d2110 1 xc12d2110 1} {x42cc0000 x42d5e07c xc130b1e0 1 xc130b1e0 1} {x42ce0000 x42be9882 xc12efae8 1 xc12efae8 1} {x42d00000 x42aa21c2 xc118f83c 1 xc118f83c 1} {x42d20000 x42985a73 xc1062ba8 1 xc1062ba8 1} {x42d40000 x428896d8 xc0f79760 1 xc0f79760 1} {x42d60000 x4272cf0e xc0eaa790 1 xc0eaa790 1} {x42d80000 x425683cc xc0e20544 1 xc0e20544 1} {x42da0000 x423a4dbd xc0e70768 1 xc0e70768 1} {x42dc0000 x421cc1f2 xc0dd578c 1 xc0dd578c 1} {x42de0000 x4202f7da xc0bc04f2 1 xc0bc04f2 1} {x42e00000 x41db816b xc099979e 1 xc099979e 1} {x42e20000 x41b923e5 xc07a4e8c 1 xc07a4e8c 1} {x42e40000 x419cedc8 xc046bc44 1 xc046bc44 1} {x42e60000 x418774d4 xc016421e 1 xc016421e 1} {x42e80000 x416eba81 xbfda5300 1 xbfda5300 1} {x42ea0000 x415854e8 xbfd2f310 1 xbfd2f310 1} {x42ec0000 x4139fdbd xbfdd6f68 1 xbfdd6f68 1} {x42ee0000 x4120f90e xbfd031c4 1 xbfd031c4 1} {x42f00000 x4105f14c xbfe5193c 1 xbfe5193c 1} {x42f20000 x40cf657e xbfefb256 1 xbfefb256 1} {x42f40000 x4094096d xbfe49fc9 1 xbfe49fc9 1} {x42f60000 x403a2b33 xbfbaface 1 xbfbaface 1} {x42f80000 x3fda3019 xbf8c35d2 1 xbf8c35d2 1} {x42fa0000 x3f37d582 xbf5a3019 1 xbf5a3019 1} {x42fc0000 0 -} {x42fe0000 x3d065002 -} {x43000000 xbead6bbd -} {x43010000 x3e7367c8 x3f15a810 1 x3f15a810 1} {x43020000 x3f549a42 x3f463017 1 x3f463017 1} {x43030000 x3fe49d10 x3f8c5bb2 1 x3f8c5bb2 1} {x43040000 x40418243 x3fa4b434 1 x3fa4b434 1} {x43050000 x408b815e x3fa42341 1 x3fa42341 1} {x43060000 x40b2d2c2 x3fa51ef0 1 x3fa51ef0 1} {x43070000 x40de10d6 x3fdb9e8c 1 x3fdb9e8c 1} {x43080000 x41105104 x4001cc8e 1 x4001cc8e 1} {x43090000 x412feeb2 x40047a1a 1 x40047a1a 1} {x430a0000 x41528e11 x3febb2c0 1 x3febb2c0 1} {x430b0000 x416adb62 x3fbb5074 1 x3fbb5074 1} {x430c0000 x4180b117 x3fc73128 1 x3fc73128 1} {x430d0000 x418e53d6 x3fdf6858 1 x3fdf6858 1} {x430e0000 x419c9e22 x3fdd9450 1 x3fdd9450 1} {x430f0000 x41aa0660 x3fda1370 1 x3fda1370 1} {x43100000 x41b7e090 x3fe29338 1 x3fe29338 1} {x43110000 x41c658c7 x3ffe6e80 1 x3ffe6e80 1} {x43120000 x41d7ae60 x40050814 1 x40050814 1} {x43130000 x41e79acc x3fb0e8e0 1 x3fb0e8e0 1} {x43140000 x41edcb7c x3f292980 1 x3f292980 1} {x43150000 x41f22d64 -} {x43160000 x41e9ed19 xbfc60708 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke103 262656 bezier {cc {f 8224} {p {0 0 1} {x448da0d5 x447d178d 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke104 262656 bezier {cc {f 8224} {p {0 0 1} {x448da0d5 x447d178d 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3e4f931 0 1 x40cce680 1} {x42580000 xc3e1a411 x40e60b00 1 x40e60b00 1} {x425c0000 xc3ddc8d9 x4105a2b0 1 x4105a2b0 1} {x42600000 xc3d949e6 x411f6f90 1 x411f6f90 1} {x42640000 xc3d3d1e0 x41398220 1 x41398220 1} {x42680000 xc3cdb1c4 x413b7f60 1 x413b7f60 1} {x426c0000 xc3c819ea x41336a80 1 x41336a80 1} {x42700000 xc3c27b1c x41350430 1 x41350430 1} {x42740000 xc3bcc9a7 x412f3170 1 x412f3170 1} {x42780000 xc3b78805 x41261840 1 x41261840 1} {x427c0000 xc3b26823 x41277c30 1 x41277c30 1} {x42800000 xc3ad1042 x4121fb00 1 x4121fb00 1} {x42820000 xc3a84873 x410cc460 1 x410cc460 1} {x42840000 xc3a443fc x41004af0 1 x41004af0 1} {x42860000 xc3a043c4 x4109c4f0 1 x4109c4f0 1} {x42880000 xc39ba7ad x410b72f0 1 x410b72f0 1} {x428a0000 xc3978c95 x40fa01a0 1 x40fa01a0 1} {x428c0000 xc393d7a0 x40de8b80 1 x40de8b80 1} {x428e0000 xc3909839 x40d62540 1 x40d62540 1} {x42900000 xc38d2676 x40f09440 1 x40f09440 1} {x42920000 xc3891397 x40efec80 1 x40efec80 1} {x42940000 xc385a712 x40c93560 1 x40c93560 1} {x42960000 xc382c9ec x40aa8420 1 x40aa8420 1} {x42980000 xc38052f1 x409b2990 1 x409b2990 1} {x429a0000 xc37be13f x4093cbc0 1 x4093cbc0 1} {x429c0000 xc3776926 x4084c4f0 1 x4084c4f0 1} {x429e0000 xc37394f0 x4076c840 1 x4076c840 1} {x42a00000 xc36fb2e4 x408a6490 1 x408a6490 1} {x42a20000 xc36aeea7 x40a4c080 1 x40a4c080 1} {x42a40000 xc36566dc x40b58850 1 x40b58850 1} {x42a60000 xc35f9622 x40af7de0 1 x40af7de0 1} {x42a80000 xc35a6efe x40aa63b0 1 x40aa63b0 1} {x42aa0000 xc354efe7 x409f4420 1 x409f4420 1} {x42ac0000 xc3507abc x4084ca50 1 x4084ca50 1} {x42ae0000 xc34ca342 x405b6160 1 x405b6160 1} {x42b00000 xc3499fb1 x40216680 1 x40216680 1} {x42b20000 xc347980e x3fcbf040 1 x3fcbf040 1} {x42b40000 xc3466ff0 x3fa17100 1 x3fa17100 1} {x42b60000 xc345124a x3fee9100 1 x3fee9100 1} {x42b80000 xc342b5ac x401129e0 1 x401129e0 1} {x42ba0000 xc34088fb x40102cc0 1 x40102cc0 1} {x42bc0000 xc33e3446 x401179a0 1 x401179a0 1} {x42be0000 xc33bfd2e x3fffc980 1 x3fffc980 1} {x42c00000 xc33a3520 x3fe37ec0 1 x3fe37ec0 1} {x42c20000 xc3386f33 x404a7f00 1 x404a7f00 1} {x42c40000 xc333e128 x40981af0 1 x40981af0 1} {x42c60000 xc32eed84 x40a538c0 1 x40a538c0 1} {x42c80000 xc3298d9c x40a6e0c0 1 x40a6e0c0 1} {x42ca0000 xc3247f78 x40a1d4a0 1 x40a1d4a0 1} {x42cc0000 xc31f7052 x40a1d030 1 x40a1d030 1} {x42ce0000 xc31a6275 x40997870 1 x40997870 1} {x42d00000 xc315d8cb x4091d8b0 1 x4091d8b0 1} {x42d20000 xc31144ea x408714d0 1 x408714d0 1} {x42d40000 xc30d677e x4081d480 1 x4081d480 1} {x42d60000 xc30927a2 x408a0380 1 x408a0380 1} {x42d80000 xc304c746 x40905ac0 1 x40905ac0 1} {x42da0000 xc30021f6 x409a8228 1 x409a8228 1} {x42dc0000 xc2f63e47 x40a2e398 1 x40a2e398 1} {x42de0000 xc2ebe779 x40b0c990 1 x40b0c990 1} {x42e00000 xc2e02515 x40bb5d78 1 x40bb5d78 1} {x42e20000 xc2d47bca x40bf0410 1 x40bf0410 1} {x42e40000 xc2c84493 x40c74938 1 x40c74938 1} {x42e60000 xc2bb92a3 x40cfb780 1 x40cfb780 1} {x42e80000 xc2ae4da3 x40d7b448 1 x40d7b448 1} {x42ea0000 xc2a09c1a x40e573d8 1 x40e573d8 1} {x42ec0000 xc2919f28 x40fa2f00 1 x40fa2f00 1} {x42ee0000 xc281563a x41028958 1 x41028958 1} {x42f00000 xc261f9a4 x410c9246 1 x410c9246 1} {x42f20000 xc23c6351 x41162ea2 1 x41162ea2 1} {x42f40000 xc216e253 x4118bcd0 1 x4118bcd0 1} {x42f60000 xc1e009d2 x411754ca 1 x411754ca 1} {x42f80000 xc1966fdc x4116d78b 1 x4116d78b 1} {x42fa0000 xc112648e x41166fdc 1 x41166fdc 1} {x42fc0000 0 x411126c3 1 x411126c3 1} {x42fe0000 x410fe8f8 x41136114 1 x41136114 1} {x43000000 x41936114 x410ec066 1 x410ec066 1} {x43010000 x41d6b4e2 x4104f344 1 x4104f344 1} {x43020000 x420c2a2c x40fd2754 1 x40fd2754 1} {x43030000 x422aa446 x40e7b1b8 1 x40e7b1b8 1} {x43040000 x4246169a x40d32e6c 1 x40d32e6c 1} {x43050000 x425f6fe1 x40bf0544 1 x40bf0544 1} {x43060000 x4275d7eb x40adf23c 1 x40adf23c 1} {x43070000 x42857638 x409e696c 1 x409e696c 1} {x43080000 x428eb923 x409166c8 1 x409166c8 1} {x43090000 x4297a311 x4080a6f0 1 x4080a6f0 1} {x430a0000 x429ece01 x405e4be0 1 x405e4be0 1} {x430b0000 x42a587cf x40537d40 1 x40537d40 1} {x430c0000 x42ac05d5 x40465220 1 x40465220 1} {x430d0000 x42b1ecf1 x40407bf0 1 x40407bf0 1} {x430e0000 x42b80d94 x4049a080 1 x4049a080 1} {x430f0000 x42be86f9 x40539e70 1 x40539e70 1} {x43100000 x42c5477b x4059e1e0 1 x4059e1e0 1} {x43110000 x42cc2517 x405385f0 1 x405385f0 1} {x43120000 x42d27fda x404c6b70 1 x404c6b70 1} {x43130000 x42d8ebce x40365aa0 1 x40365aa0 1} {x43140000 x42dde584 x4005efd0 1 x4005efd0 1} {x43150000 x42e14acb x3fa36420 1 x3fa36420 1} {x43160000 x42e300a5 x3f24ff60 1 0 1}} {{x42540000 x4483ac46 0 1 xc15e01a0 1} {x42580000 x4481defc xc177ebc0 1 xc177ebc0 1} {x425c0000 x447f992e xc186c860 1 xc186c860 1} {x42600000 x447b5172 xc18814b0 1 xc18814b0 1} {x42640000 x447717e3 xc18ae600 1 xc18ae600 1} {x42680000 x4472a312 xc1916180 1 xc1916180 1} {x426c0000 x446e01cb xc1897d40 1 xc1897d40 1} {x42700000 x446a0b3e xc1879f50 1 xc1879f50 1} {x42740000 x446587d6 xc196a120 1 xc196a120 1} {x42780000 x4460a12c xc1a6b800 1 xc1a6b800 1} {x427c0000 x445b1c56 xc1bdb8e0 1 xc1bdb8e0 1} {x42800000 x4454c59e xc1c5d770 1 xc1c5d770 1} {x42820000 x444ebedf xc1c0ab80 1 xc1c0ab80 1} {x42840000 x4448bae6 xc1c45710 1 xc1c45710 1} {x42860000 x4442796e xc1cc92c0 1 xc1cc92c0 1} {x42880000 x443bf1ba xc1c7fdd0 1 xc1c7fdd0 1} {x428a0000 x4435f991 xc1bbc800 1 xc1bbc800 1} {x428c0000 x4430353a xc1b80330 1 xc1b80330 1} {x428e0000 x442a795e xc1b912f0 1 xc1b912f0 1} {x42900000 x4424a40b xc1c3c0b0 1 xc1c3c0b0 1} {x42920000 x441e3d53 xc1c81f10 1 xc1c81f10 1} {x42940000 x4418221a xc1c2a960 1 xc1c2a960 1} {x42960000 x441212bd xc1bab2a0 1 xc1bab2a0 1} {x42980000 x440c76f0 xc1abd030 1 xc1abd030 1} {x429a0000 x440755ba xc19fe030 1 xc19fe030 1} {x429c0000 x440278ed xc19e2a20 1 xc19e2a20 1} {x429e0000 x43fae630 xc19fe590 1 xc19fe590 1} {x42a00000 x43f0f528 xc1a2b0c0 1 xc1a2b0c0 1} {x42a20000 x43e69018 xc1a3e200 1 xc1a3e200 1} {x42a40000 x43dc78e8 xc19c9f40 1 xc19c9f40 1} {x42a60000 x43d2fc30 xc19cdd28 1 xc19cdd28 1} {x42a80000 x43c8dd43 xc1a25848 1 xc1a25848 1} {x42aa0000 x43beb127 xc19afe00 1 xc19afe00 1} {x42ac0000 x43b57d83 xc194ff08 1 xc194ff08 1} {x42ae0000 x43ac1146 xc197c2e0 1 xc197c2e0 1} {x42b00000 x43a28527 xc193b650 1 xc193b650 1} {x42b20000 x43999a7c xc1955f58 1 xc1955f58 1} {x42b40000 x438fd93c xc1a20878 1 xc1a20878 1} {x42b60000 x4385596d xc1a9abe8 1 xc1a9abe8 1} {x42b80000 x4375477e xc1aa8914 1 xc1aa8914 1} {x42ba0000 x43601095 xc1a52b20 1 xc1a52b20 1} {x42bc0000 x434bfcb6 xc1994cd0 1 xc1994cd0 1} {x42be0000 x4339bd61 xc18ba1b4 1 xc18ba1b4 1} {x42c00000 x43291449 xc17e2ee0 1 xc17e2ee0 1} {x42c20000 x4319f785 xc168a4c0 1 xc168a4c0 1} {x42c40000 x430bffb1 xc1609e34 1 xc1609e34 1} {x42c60000 x42fbc77d xc164acac 1 xc164acac 1} {x42c80000 x42ded437 xc164fc80 1 xc164fc80 1} {x42ca0000 x42c2885d xc15ddd44 1 xc15ddd44 1} {x42cc0000 x42a75ce6 xc15c5090 1 xc15c5090 1} {x42ce0000 x428b7439 xc1571ee4 1 xc1571ee4 1} {x42d00000 x42632a5a xc143a236 1 xc143a236 1} {x42d20000 x42351757 xc12fce28 1 xc12fce28 1} {x42d40000 x420b4346 xc120dd9a 1 xc120dd9a 1} {x42d60000 x41c95114 xc112e9d8 1 xc112e9d8 1} {x42d80000 x41839cb4 xc106e3d0 1 xc106e3d0 1} {x42da0000 x4104da89 xc100c357 1 xc100c357 1} {x42dc0000 x3eb65734 xc0eb9012 1 xc0eb9012 1} {x42de0000 xc0cd6b12 xc0c33f95 1 xc0c33f95 1} {x42e00000 xc13d8cdb xc08f1248 1 xc08f1248 1} {x42e20000 xc175c7d1 xc01f0a92 1 xc01f0a92 1} {x42e40000 xc1868912 xbf8267a4 1 xbf8267a4 1} {x42e60000 xc18b30dd -} {x42e80000 xc18552c0 x3f916260 1 x3f916260 1} {x42ea0000 xc1720922 x3faa6af8 1 x3faa6af8 1} {x42ec0000 xc1600ac2 x3faa021c 1 x3faa021c 1} {x42ee0000 xc147889b x3fd65498 1 x3fd65498 1} {x42f00000 xc12a759c x3fb6ab40 1 x3fb6ab40 1} {x42f20000 xc119ddcb x3f922908 1 x3f922908 1} {x42f40000 xc105eb5a x3f9bd1ac 1 x3f9bd1ac 1} {x42f60000 xc0e5d2c0 x3fc9a2e4 1 x3fc9a2e4 1} {x42f80000 xc0a70542 x400599ce 1 x400599ce 1} {x42fa0000 xc04071e3 x40270542 1 x40270542 1} {x42fc0000 0 x40497a36 1 x40497a36 1} {x42fe0000 x4052828a x404c71f2 1 x404c71f2 1} {x43000000 x40cc71f2 x4055128d 1 x4055128d 1} {x43010000 x411f29e9 x40715490 1 x40715490 1} {x43020000 x415ee341 x4088ff91 1 x4088ff91 1} {x43030000 x419414bd x40938d29 1 x40938d29 1} {x43040000 x41b93835 x409c9070 1 x409c9070 1} {x43050000 x41e25cf5 x40a40c76 1 x40a40c76 1} {x43060000 x42059f38 x40a5cb7e 1 x40a5cb7e 1} {x43070000 x421aa15a x40b0b8b4 1 x40b0b8b4 1} {x43080000 x4231cd65 x40c071c8 1 x40c071c8 1} {x43090000 x424abdcc x40d0d1f8 1 x40d0d1f8 1} {x430a0000 x426601e3 x40d026e8 1 x40d026e8 1} {x430b0000 x427ec786 x40bdd0ac 1 x40bdd0ac 1} {x430c0000 x428abb07 x40c14a88 1 x40c14a88 1} {x430d0000 x42978d14 x40ca93f0 1 x40ca93f0 1} {x430e0000 x42a40d85 x40cc8e60 1 x40cc8e60 1} {x430f0000 x42b11ee0 x40c9f588 1 x40c9f588 1} {x43100000 x42bd4c36 x40c3bc80 1 x40c3bc80 1} {x43110000 x42c99670 x40bef700 1 x40bef700 1} {x43120000 x42d52b16 x40b217c0 1 x40b217c0 1} {x43130000 x42dfd968 x409e1418 1 x409e1418 1} {x43140000 x42e8ed99 x4086b938 1 x4086b938 1} {x43150000 x42f0b08f x403680f0 1 x403680f0 1} {x43160000 x42f455a8 x3fa76870 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke105 262656 bezier {cc {f 8224} {p {0 0 1} {x44a98019 x44835506 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke106 262656 bezier {cc {f 8224} {p {0 0 1} {x44a98019 x44835506 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3c5e580 0 1 x40f090f0 1} {x42580000 xc3c203de x41040bd0 1 x41040bd0 1} {x425c0000 xc3bda4c3 x411195f0 1 x411195f0 1} {x42600000 xc3b8ea7f x411f6220 1 x411f6220 1} {x42640000 xc3b3aea1 x4130fc60 1 x4130fc60 1} {x42680000 xc3addab9 x412bbe30 1 x412bbe30 1} {x426c0000 xc3a8f2be x41287280 1 x41287280 1} {x42700000 xc3a35391 x4134cb20 1 x4134cb20 1} {x42740000 xc39da60c x412e4320 1 x412e4320 1} {x42780000 xc3986f5f x412661d0 1 x412661d0 1} {x427c0000 xc3933fef x411df860 1 x411df860 1} {x42800000 xc38e8fd9 x4110d6d0 1 x4110d6d0 1} {x42820000 xc38a3282 x410797e0 1 x410797e0 1} {x42840000 xc386165b x4102c450 1 x4102c450 1} {x42860000 xc382063d x410c36f8 1 x410c36f8 1} {x42880000 xc37aa5d7 x410fd830 1 x410fd830 1} {x428a0000 xc3721174 x40ff9950 1 x40ff9950 1} {x428c0000 xc36aac42 x40db06c0 1 x40db06c0 1} {x428e0000 xc3646108 x40ca3b00 1 x40ca3b00 1} {x42900000 xc35e0892 x40e53320 1 x40e53320 1} {x42920000 xc3560dd6 x40f10d30 1 x40f10d30 1} {x42940000 xc34ef7bf x40d1f170 1 x40d1f170 1} {x42960000 xc348eebf x40ae5ff0 1 x40ae5ff0 1} {x42980000 xc34411c0 x409e2ec0 1 x409e2ec0 1} {x429a0000 xc33f0bd3 x40944e50 1 x40944e50 1} {x429c0000 xc33accdb x40745700 1 x40745700 1} {x429e0000 xc337691b x406bcf40 1 x406bcf40 1} {x42a00000 xc3336e61 x4082fde0 1 x4082fde0 1} {x42a20000 xc32f393d x40a2f890 1 x40a2f890 1} {x42a40000 xc3293ed8 x40a92cb0 1 x40a92cb0 1} {x42a60000 xc324a672 x409c74b0 1 x409c74b0 1} {x42a80000 xc31f778d x40a89690 1 x40a89690 1} {x42aa0000 xc31a1d09 x40988ec0 1 x40988ec0 1} {x42ac0000 xc315eea1 x406fab00 1 x406fab00 1} {x42ae0000 xc3129fb1 x403c5b40 1 x403c5b40 1} {x42b00000 xc3100bc7 x3fdc6000 1 x3fdc6000 1} {x42b20000 xc30f2e31 x3f262c80 1 x3f262c80 1} {x42b40000 xc30ebf6e x3ee38300 1 x3ee38300 1} {x42b60000 xc30e4aae x3f440700 1 x3f440700 1} {x42b80000 xc30d3760 x3f629900 1 x3f629900 1} {x42ba0000 xc30c857c x3f397400 1 x3f397400 1} {x42bc0000 xc30bc478 x3f17b080 1 x3f17b080 1} {x42be0000 xc30b561b x3eb2e600 1 x3eb2e600 1} {x42c00000 xc30b1192 x3e5ec600 1 x3e5ec600 1} {x42c20000 xc30ae6b8 x3f008e00 1 x3f008e00 1} {x42c40000 xc3086511 x4028f700 1 x4028f700 1} {x42c60000 xc3059f00 x4041c9a0 1 x4041c9a0 1} {x42c80000 xc30256c4 x4045f530 1 x4045f530 1} {x42ca0000 xc2fedead x403264c0 1 x403264c0 1} {x42cc0000 xc2f9873c x403c2d40 1 x403c2d40 1} {x42ce0000 xc2f31bd9 x40334630 1 x40334630 1} {x42d00000 xc2ee52d9 x40198570 1 x40198570 1} {x42d20000 xc2e98382 x400a5430 1 x400a5430 1} {x42d40000 xc2e5ad96 x400769c0 1 x400769c0 1} {x42d60000 xc2e10ce6 x40145220 1 x40145220 1} {x42d80000 xc2dc6874 x40250ce0 1 x40250ce0 1} {x42da0000 xc2d6bc18 x40449fc0 1 x40449fc0 1} {x42dc0000 xc2d01e78 x406d0180 1 x406d0180 1} {x42de0000 xc2c7ec00 x407f2190 1 x407f2190 1} {x42e00000 xc2c02c5f x40862418 1 x40862418 1} {x42e20000 xc2b7277d x4091a590 1 x4091a590 1} {x42e40000 xc2adf7ad x4096fc80 1 x4096fc80 1} {x42e60000 xc2a447ed x409ef330 1 x409ef330 1} {x42e80000 xc29a1947 x40a4eb10 1 x40a4eb10 1} {x42ea0000 xc28faa8b x40bdeea8 1 x40bdeea8 1} {x42ec0000 xc2825b72 x40dc4b50 1 x40dc4b50 1} {x42ee0000 xc2684242 x40dbb8b0 1 x40dbb8b0 1} {x42f00000 xc24dc8b8 x40eaa47c 1 x40eaa47c 1} {x42f20000 xc22d9923 x4103ba8e 1 x4103ba8e 1} {x42f40000 xc20beb71 x410b04c8 1 x410b04c8 1} {x42f60000 xc1d02d7e x410e4394 1 x410e4394 1} {x42f80000 xc189934e x410ce80e 1 x410ce80e 1} {x42fa0000 xc1068adf x4109934e 1 x4109934e 1} {x42fc0000 0 x4107248e 1 x4107248e 1} {x42fe0000 x4107be3e x4103ea19 1 x4103ea19 1} {x43000000 x4183ea19 x40fc33d8 1 x40fc33d8 1} {x43010000 x41c1f90b x40ebd7f2 1 x40ebd7f2 1} {x43020000 x41f9d612 x40dbf66e 1 x40dbf66e 1} {x43030000 x4217fa21 x40cf7418 1 x40cf7418 1} {x43040000 x4230c80f x40b6b800 1 x40b6b800 1} {x43050000 x4245a821 x409d9c34 1 x409d9c34 1} {x43060000 x42582f1c x40916200 1 x40916200 1} {x43070000 x426a00a1 x4088f32c 1 x4088f32c 1} {x43080000 x427a6be7 x40794c28 1 x40794c28 1} {x43090000 x42849513 x405610b8 1 x405610b8 1} {x430a0000 x428a96ff x40289390 1 x40289390 1} {x430b0000 x428f1e4c x40171b00 1 x40171b00 1} {x430c0000 x429408af x4012a700 1 x4012a700 1} {x430d0000 x429848bc x3fe56e20 1 x3fe56e20 1} {x430e0000 x429b3420 x3fe21bc0 1 x3fe21bc0 1} {x430f0000 x429f599a x40111300 1 x40111300 1} {x43100000 x42a44550 x40120cc0 1 x40120cc0 1} {x43110000 x42a87a66 x400b98e0 1 x400b98e0 1} {x43120000 x42acfede x3ffdfb80 1 x3ffdfb80 1} {x43130000 x42b06a42 x3fecc6e0 1 x3fecc6e0 1} {x43140000 x42b46515 x3ff83aa0 1 x3ff83aa0 1} {x43150000 x42b82c17 x3fd5a2a0 1 x3fd5a2a0 1} {x43160000 x42bb122a x3fab75d0 1 0 1}} {{x42540000 x446eba45 0 1 xc11ff2d0 1} {x42580000 x446c3351 xc1255160 1 xc1255160 1} {x425c0000 x44698fba xc149f680 1 xc149f680 1} {x42600000 x4465e39d xc17aa4c0 1 xc17aa4c0 1} {x42640000 x4461ba94 xc1884640 1 xc1884640 1} {x42680000 x445d5f39 xc189fd80 1 xc189fd80 1} {x426c0000 x44591abc xc183ab30 1 xc183ab30 1} {x42700000 x44552486 xc182ac80 1 xc182ac80 1} {x42740000 x4450eff4 xc18b11a0 1 xc18b11a0 1} {x42780000 x444c736c xc194d110 1 xc194d110 1} {x427c0000 x4447a2e3 xc1a0be70 1 xc1a0be70 1} {x42800000 x44426785 xc1a74b00 1 xc1a74b00 1} {x42820000 x443d2e33 xc1a89080 1 xc1a89080 1} {x42840000 x4437de7d xc1afc7f0 1 xc1afc7f0 1} {x42860000 x443231b4 xc1c26730 1 xc1c26730 1} {x42880000 x442bb80a xc1c34340 1 xc1c34340 1} {x428a0000 x4425fd80 xc1b7c140 1 xc1b7c140 1} {x428c0000 x44203bf6 xc1a9fcf0 1 xc1a9fcf0 1} {x428e0000 x441b5db1 xc19d8340 1 xc19d8340 1} {x42900000 x441663c2 xc1ab82a0 1 xc1ab82a0 1} {x42920000 x4410a587 xc1b70680 1 xc1b70680 1} {x42940000 x440af35a xc1ac3b70 1 xc1ac3b70 1} {x42960000 x4405e1d0 xc19a8ef0 1 xc19a8ef0 1} {x42980000 x44014a6b xc189d408 1 xc189d408 1} {x429a0000 x43fa891f xc178cfd0 1 xc178cfd0 1} {x429c0000 x43f307d9 xc16e9420 1 xc16e9420 1} {x429e0000 x43eb9fdd xc1788b80 1 xc1788b80 1} {x42a00000 x43e37f21 xc18d17b0 1 xc18d17b0 1} {x42a20000 x43d9fce7 xc19a6370 1 xc19a6370 1} {x42a40000 x43d032b3 xc1958870 1 xc1958870 1} {x42a60000 x43c74bd9 xc197bf38 1 xc197bf38 1} {x42a80000 x43bd3acc xc19fb2c0 1 xc19fb2c0 1} {x42aa0000 x43b35581 xc1938b58 1 xc1938b58 1} {x42ac0000 x43aac961 xc18b3b60 1 xc18b3b60 1} {x42ae0000 x43a1ee15 xc18f5ee0 1 xc18f5ee0 1} {x42b00000 x4398dd85 xc1894170 1 xc1894170 1} {x42b20000 x4390c5e7 xc18847a8 1 xc18847a8 1} {x42b40000 x4387d490 xc1965de4 1 xc1965de4 1} {x42b60000 x437bf455 xc19c3c68 1 xc19c3c68 1} {x42b80000 x43689a06 xc19a31cc 1 xc19a31cc 1} {x42ba0000 x435567e2 xc19241e4 1 xc19241e4 1} {x42bc0000 x4344098d xc186e390 1 xc186e390 1} {x42be0000 x4333aefe xc172e620 1 xc172e620 1} {x42c00000 x4325acc9 xc1531210 1 xc1531210 1} {x42c20000 x43194cbc xc1369c68 1 xc1369c68 1} {x42c40000 x430ed93c xc1302e50 1 xc1302e50 1} {x42c60000 x430346f2 xc1404cc4 1 xc1404cc4 1} {x42c80000 x42ed9f47 xc13e0e20 1 xc13e0e20 1} {x42ca0000 x42d70a5c xc12e7d80 1 xc12e7d80 1} {x42cc0000 x42c1ffe7 xc1336124 1 xc1336124 1} {x42ce0000 x42aa3213 xc1319e44 1 xc1319e44 1} {x42d00000 x42959856 xc11971c4 1 xc11971c4 1} {x42d20000 x4283d5a2 xc105e9e0 1 xc105e9e0 1} {x42d40000 x42683bbc xc0f7b3b8 1 xc0f7b3b8 1} {x42d60000 x4249be56 xc0eabe5c 1 xc0eabe5c 1} {x42d80000 x422d8c25 xc0e61860 1 xc0e61860 1} {x42da0000 x4210383e xc0eaa4c6 1 xc0eaa4c6 1} {x42dc0000 x41e5c5e7 xc0dd41d6 1 xc0dd41d6 1} {x42de0000 x41b1cf91 xc0b792c4 1 xc0b792c4 1} {x42e00000 x4189fc85 xc08fa2da 1 xc08fa2da 1} {x42e20000 x4153fc48 xc0642af2 1 xc0642af2 1} {x42e40000 x4121e391 xc030b25d 1 xc030b25d 1} {x42e60000 x40f74633 xbff2648c 1 xbff2648c 1} {x42e80000 x40ca94dc xbf9ffe88 1 xbf9ffe88 1} {x42ea0000 x40a746ef xbf8e992c 1 xbf8e992c 1} {x42ec0000 x40834846 xbf828886 1 xbf828886 1} {x42ee0000 x404c0558 xbf90db88 1 xbf90db88 1} {x42f00000 x3feb6a08 xbfb9c540 1 xbfb9c540 1} {x42f20000 x3e9200bc xbfbd6d48 1 xbfbd6d48 1} {x42f40000 xbf8f7089 xbf67af3e 1 xbf67af3e 1} {x42f60000 xbfc32f0f -} {x42f80000 xbfb92eff x3e700180 1 x3e700180 1} {x42fa0000 xbf8471e4 x3f392eff 1 x3f392eff 1} {x42fc0000 0 x3f972c4a 1 x3f972c4a 1} {x42fe0000 x3fa9e6b1 x3faa0b40 1 x3faa0b40 1} {x43000000 x402a0b40 x3fb8e3d4 1 x3fb8e3d4 1} {x43010000 x4086eb96 x3fec6b8a 1 x3fec6b8a 1} {x43020000 x40cb3b65 x4015f824 1 x4015f824 1} {x43030000 x410e71dd x40272f0b 1 x40272f0b 1} {x43040000 x41393538 x3fd76f98 1 x3fd76f98 1} {x43050000 x41444dc3 x3f9d0b08 1 x3f9d0b08 1} {x43060000 x416077fa x3fea5080 1 x3fea5080 1} {x43070000 x417ee1e3 x4009d024 1 x4009d024 1} {x43080000 x4192b006 x40239ee6 1 x40239ee6 1} {x43090000 x41a858ab x4016567c 1 x4016567c 1} {x430a0000 x41b845a5 x3fc276e8 1 x3fc276e8 1} {x430b0000 x41c0a788 x3f7a5070 1 x3f7a5070 1} {x430c0000 x41c7eaac x3f877498 1 x3f877498 1} {x430d0000 x41d1961b x3f9b5cb0 1 x3f9b5cb0 1} {x430e0000 x41db5642 x3fa3e8b0 1 x3fa3e8b0 1} {x430f0000 x41e61331 x3fa661b8 1 x3fa661b8 1} {x43100000 x41f02279 x3fa3cb40 1 x3fa3cb40 1} {x43110000 x41fa8c99 x3f9fc838 1 x3f9fc838 1} {x43120000 x42020dc0 x3f8770f8 1 x3f8770f8 1} {x43130000 x4205bd5c x3f47dee0 1 x3f47dee0 1} {x43140000 x42084cb7 x3cd33800 1 x3cd33800 1} {x43150000 x42085584 -} {x43160000 x4201c137 xc01de738 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke107 262656 bezier {cc {f 8224} {p {0 0 1} {x449061c3 x44393af2 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke108 262656 bezier {cc {f 8224} {p {0 0 1} {x449061c3 x44393af2 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3eab038 0 1 x40e67e60 1} {x42580000 xc3e708da x40f089c0 1 x40f089c0 1} {x425c0000 xc3e32bea x4105dfb0 1 x4105dfb0 1} {x42600000 xc3deaadf x411fdd90 1 x411fdd90 1} {x42640000 xc3d92e11 x4139f180 1 x4139f180 1} {x42680000 xc3d30bc7 x413bc300 1 x413bc300 1} {x426c0000 xc3cd71e1 x413389c0 1 x413389c0 1} {x42700000 xc3c7d32b x41350360 1 x41350360 1} {x42740000 xc3c221ab x412f4600 1 x412f4600 1} {x42780000 xc3bcdecb x412635d0 1 x412635d0 1} {x427c0000 xc3b7be4e x41279ca0 1 x41279ca0 1} {x42800000 xc3b26501 x41281980 1 x41281980 1} {x42820000 xc3ad3cb6 x4112d8c0 1 x4112d8c0 1} {x42840000 xc3a93775 x4105cdc0 1 x4105cdc0 1} {x42860000 xc3a4dfda x410f40b0 1 x410f40b0 1} {x42880000 xc3a0436a x410b7d50 1 x410b7d50 1} {x428a0000 xc39c2805 x40fa1b00 1 x40fa1b00 1} {x428c0000 xc3987292 x40de9800 1 x40de9800 1} {x428e0000 xc3953345 x40d62340 1 x40d62340 1} {x42900000 xc391c178 x40f07b40 1 x40f07b40 1} {x42920000 xc38daf6b x40f01820 1 x40f01820 1} {x42940000 xc38a40b7 x40ca1120 1 x40ca1120 1} {x42960000 xc3875ee2 x40ab1b20 1 x40ab1b20 1} {x42980000 xc384e7de x409b15a0 1 x409b15a0 1} {x429a0000 xc3828635 x4093c260 1 x4093c260 1} {x429c0000 xc38049cb x4084f860 1 x4084f860 1} {x429e0000 xc37cbce4 x40779720 1 x40779720 1} {x42a00000 xc378d6dd x408ae7d0 1 x408ae7d0 1} {x42a20000 xc3740e67 x40a53760 1 x40a53760 1} {x42a40000 xc36e8367 x40bcced0 1 x40bcced0 1} {x42a60000 xc368417a x40b3cfe0 1 x40b3cfe0 1} {x42a80000 xc3634669 x40a7bef0 1 x40a7bef0 1} {x42aa0000 xc35dc58b x40a1c1e0 1 x40a1c1e0 1} {x42ac0000 xc3592a4b x40876b80 1 x40876b80 1} {x42ae0000 xc3554ed3 x4054a4c0 1 x4054a4c0 1} {x42b00000 xc3528525 x401b74e0 1 x401b74e0 1} {x42b20000 xc350732c x3fdf2540 1 x3fdf2540 1} {x42b40000 xc34f0890 x3fd936c0 1 x3fd936c0 1} {x42b60000 xc34d0e51 x40068880 1 x40068880 1} {x42b80000 xc34ad44c x400d20e0 1 x400d20e0 1} {x42ba0000 xc348a54a x40122440 1 x40122440 1} {x42bc0000 xc346432a x401bd3c0 1 x401bd3c0 1} {x42be0000 xc343c6ac x400f5aa0 1 x400f5aa0 1} {x42c00000 xc341c855 x3ff95640 1 x3ff95640 1} {x42c20000 xc33fe153 x40586d40 1 x40586d40 1} {x42c40000 xc33b04eb x40a44f00 1 x40a44f00 1} {x42c60000 xc3359c63 x40b3a780 1 x40b3a780 1} {x42c80000 xc32fca73 x40b36820 1 x40b36820 1} {x42ca0000 xc32a65e1 x40afc4c0 1 x40afc4c0 1} {x42cc0000 xc324ce27 x40b4b7e0 1 x40b4b7e0 1} {x42ce0000 xc31f1a63 x40b2c3f0 1 x40b2c3f0 1} {x42d00000 xc319a1e8 x40a369d0 1 x40a369d0 1} {x42d20000 xc314e3c6 x4095ac30 1 x4095ac30 1} {x42d40000 xc3104725 x40980610 1 x40980610 1} {x42d60000 xc30b6365 x409bb100 1 x409bb100 1} {x42d80000 xc3068c15 x409b4630 1 x409b4630 1} {x42da0000 xc301af02 x40a17708 1 x40a17708 1} {x42dc0000 xc2f8e949 x40b25498 1 x40b25498 1} {x42de0000 xc2ed1371 x40c059a0 1 x40c059a0 1} {x42e00000 xc2e0de15 x40c7acc8 1 x40c7acc8 1} {x42e20000 xc2d41dd8 x40ce6328 1 x40ce6328 1} {x42e40000 xc2c711b0 x40d4a658 1 x40d4a658 1} {x42e60000 xc2b9890d x40d80c38 1 x40d80c38 1} {x42e80000 xc2ac1029 x40dff400 1 x40dff400 1} {x42ea0000 xc29d8a8d x40e745d8 1 x40e745d8 1} {x42ec0000 xc28f276e x40fab9ac 1 x40fab9ac 1} {x42ee0000 xc27c66af x41019f54 1 x41019f54 1} {x42f00000 xc25d7f32 x410d52f2 1 x410d52f2 1} {x42f20000 xc235bd36 x4115b2f4 1 x4115b2f4 1} {x42f40000 xc212a5b8 x4115f56d 1 x4115f56d 1} {x42f60000 xc1d584ff x41125a5c 1 x41125a5c 1} {x42f80000 xc192f114 x410df206 1 x410df206 1} {x42fa0000 xc10f25f2 x4112f114 1 x4112f114 1} {x42fc0000 0 x4111aab8 1 x4111aab8 1} {x42fe0000 x41142f7f x4111f362 1 x4111f362 1} {x43000000 x4191f362 x410a1e8e 1 x410a1e8e 1} {x43010000 x41d4364d x4101f198 1 x4101f198 1} {x43020000 x4209f27d x40f359aa 1 x40f359aa 1} {x43030000 x4226f191 x40dead54 1 x40dead54 1} {x43040000 x42419dd2 x40ced3a4 1 x40ced3a4 1} {x43050000 x425aa67a x40b6177c 1 x40b6177c 1} {x43060000 x426f23b1 x409bd918 1 x409bd918 1} {x43070000 x4280ce60 x408e49fc 1 x408e49fc 1} {x43080000 x42895b18 x40806060 1 x40806060 1} {x43090000 x4290da6c x4067e930 1 x4067e930 1} {x430a0000 x4297d9ab x40571530 1 x40571530 1} {x430b0000 x429e4bbf x40492bb0 1 x40492bb0 1} {x430c0000 x42a46c66 x403e19a0 1 x403e19a0 1} {x430d0000 x42aa2d59 x403a0de0 1 x403a0de0 1} {x430e0000 x42b00d44 x404008e0 1 x404008e0 1} {x430f0000 x42b62de7 x404d7080 1 x404d7080 1} {x43100000 x42bce44c x4052d180 1 x4052d180 1} {x43110000 x42c35aff x404c5040 1 x404c5040 1} {x43120000 x42c9a950 x40480d90 1 x40480d90 1} {x43130000 x42cfdbd8 x402db530 1 x402db530 1} {x43140000 x42d484a3 x4000bf00 1 x4000bf00 1} {x43150000 x42d7e7c8 x3f90f280 1 x3f90f280 1} {x43160000 x42d90c37 x3e94c180 1 0 1}} {{x42540000 x4485a634 0 1 xc1561ac0 1} {x42580000 x4483e581 xc174d700 1 xc174d700 1} {x425c0000 x4481d2d8 xc186db20 1 xc186db20 1} {x42600000 x447f5d50 xc1882cf0 1 xc1882cf0 1} {x42640000 x447b22e1 xc18adf40 1 xc18adf40 1} {x42680000 x4476af5c xc1915340 1 xc1915340 1} {x426c0000 x44720dad xc1898640 1 xc1898640 1} {x42700000 x446e16f8 xc187a630 1 xc187a630 1} {x42740000 x4469934a xc196acc0 1 xc196acc0 1} {x42780000 x4464ac2c xc1a6b6e0 1 xc1a6b6e0 1} {x427c0000 x445f27dc xc1bdaf00 1 xc1bdaf00 1} {x42800000 x4458d13c xc1c5e740 1 xc1c5e740 1} {x42820000 x4452c968 xc1c0ba40 1 xc1c0ba40 1} {x42840000 x444cc598 xc1c47eb0 1 xc1c47eb0 1} {x42860000 x4446817d xc1ccb980 1 xc1ccb980 1} {x42880000 x443ffa00 xc1c7ecc0 1 xc1c7ecc0 1} {x428a0000 x443a02b1 xc1bbc260 1 xc1bbc260 1} {x428c0000 x44343dda xc1b81bf0 1 xc1b81bf0 1} {x428e0000 x442e80f2 xc1b92b40 1 xc1b92b40 1} {x42900000 x4428ab26 xc1c3b570 1 xc1c3b570 1} {x42920000 x4422459b xc1c7f080 1 xc1c7f080 1} {x42940000 x441c2c1e xc1c24e90 1 xc1c24e90 1} {x42960000 x441620b2 xc1ba0b30 1 xc1ba0b30 1} {x42980000 x44108b6b xc1ab3c10 1 xc1ab3c10 1} {x429a0000 x440b6cf1 xc19f7d40 1 xc19f7d40 1} {x429c0000 x44069397 xc19e08f0 1 xc19e08f0 1} {x429e0000 x44018c62 xc1a00368 1 xc1a00368 1} {x42a00000 x43f926c1 xc1a2ad40 1 xc1a2ad40 1} {x42a20000 x43eec31c xc1a61118 1 xc1a61118 1} {x42a40000 x43e4649e xc1a0a948 1 xc1a0a948 1} {x42a60000 x43daadf3 xc1a04450 1 xc1a04450 1} {x42a80000 x43d05c14 xc1a3d900 1 xc1a3d900 1} {x42aa0000 x43c632d3 xc19f5560 1 xc19f5560 1} {x42ac0000 x43bc7168 xc199cb70 1 xc199cb70 1} {x42ae0000 x43b2f965 xc19aa4b8 1 xc19aa4b8 1} {x42b00000 x43a91cd1 xc19c88f8 1 xc19c88f8 1} {x42b20000 x439f6846 xc1a19eb8 1 xc1a19eb8 1} {x42b40000 x4394e8fa xc1ab2060 1 xc1ab2060 1} {x42b60000 x438a043a xc1ad4f94 1 xc1ad4f94 1} {x42b80000 x437e7e0f xc1aa7598 1 xc1aa7598 1} {x42ba0000 x43696b0e xc1a49d1c 1 xc1a49d1c 1} {x42bc0000 x435556c8 xc19ab6f0 1 xc19ab6f0 1} {x42be0000 x4342bd52 xc18cb864 1 xc18cb864 1} {x42c00000 x433228af xc180614c 1 xc180614c 1} {x42c20000 x4322a4ff xc16de340 1 xc16de340 1} {x42c40000 x43146c47 xc1652210 1 xc1652210 1} {x42c60000 x430600bd xc168e374 1 xc168e374 1} {x42c80000 x42ee9fb1 xc1687dbc 1 xc1687dbc 1} {x42ca0000 x42d1e20b xc1638738 1 xc1638738 1} {x42cc0000 x42b5bde3 xc161f150 1 xc161f150 1} {x42ce0000 x429965b7 xc15df6ea 1 xc15df6ea 1} {x42d00000 x427c8051 xc14bf13c 1 xc14bf13c 1} {x42d20000 x424cd2d0 xc1371142 1 xc1371142 1} {x42d40000 x4220f7b0 xc12a08ed 1 xc12a08ed 1} {x42d60000 x41ef9cb3 xc119213c 1 xc119213c 1} {x42d80000 x41a8ce24 xc109dbc2 1 xc109dbc2 1} {x42da0000 x414b81e2 xc1028650 1 xc1028650 1} {x42dc0000 x40991f4e xc0edf9f8 1 xc0edf9f8 1} {x42de0000 xc009e05a xc0c18837 1 xc0c18837 1} {x42e00000 xc0e9f120 xc08980e2 1 xc08980e2 1} {x42e20000 xc12bf8f9 xc03998ec 1 xc03998ec 1} {x42e40000 xc151c506 xbff08bb4 1 xbff08bb4 1} {x42e60000 xc1681be6 -} {x42e80000 xc167b7a1 x3d966780 1 x3d966780 1} {x42ea0000 xc15b91f7 -} {x42ec0000 xc162f967 -} {x42ee0000 xc1539571 x3fa83720 1 x3fa83720 1} {x42f00000 xc138eb9f x3f803630 1 x3f803630 1} {x42f20000 xc13387e5 x3f70b5f8 1 x3f70b5f8 1} {x42f40000 xc11ad4e0 x3fa478a0 1 x3fa478a0 1} {x42f60000 xc10a69bd x3ff55448 1 x3ff55448 1} {x42f80000 xc0baff9c x40233c8e 1 x40233c8e 1} {x42fa0000 xc0632dd7 x403aff9c 1 x403aff9c 1} {x42fc0000 0 x4066fdf0 1 x4066fdf0 1} {x42fe0000 x406ace09 x406e9092 1 x406e9092 1} {x43000000 x40ee9092 x40810e71 1 x40810e71 1} {x43010000 x413bc1f3 x4091f1d1 1 x4091f1d1 1} {x43020000 x41849d0d x40a84f57 1 x40a84f57 1} {x43030000 x41b208a5 x40b7eebc 1 x40b7eebc 1} {x43040000 x41e0946b x40ba1242 1 x40ba1242 1} {x43050000 x420788e3 x40bfee32 1 x40bfee32 1} {x43060000 x422045c2 x40c8262c 1 x40c8262c 1} {x43070000 x4239926e x40d5cbd0 1 x40d5cbd0 1} {x43080000 x4255b8b6 x40e54ad0 1 x40e54ad0 1} {x43090000 x4272e522 x40e53be0 1 x40e53be0 1} {x430a0000 x428783d7 x40d82d10 1 x40d82d10 1} {x430b0000 x42947833 x40c945a0 1 x40c945a0 1} {x430c0000 x42a0ac8b x40c849d0 1 x40c849d0 1} {x430d0000 x42ad816d x40cd2ee8 1 x40cd2ee8 1} {x430e0000 x42ba5268 x40ccdd78 1 x40ccdd78 1} {x430f0000 x42c71d1c x40c93f20 1 x40c93f20 1} {x43100000 x42d37a4c x40c5d7b0 1 x40c5d7b0 1} {x43110000 x42dfd812 x40c046d0 1 x40c046d0 1} {x43120000 x42eb8326 x40b3d668 1 x40b3d668 1} {x43130000 x42f652df x409f7830 1 x409f7830 1} {x43140000 x42ff722c x408616d8 1 x408616d8 1} {x43150000 x43038add x40339d40 1 x40339d40 1} {x43160000 x43055600 x3fa4bd00 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke109 262656 bezier {cc {f 8224} {p {0 0 1} {x4481af4c x43f87354 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke110 262656 bezier {cc {f 8224} {p {0 0 1} {x4481af4c x43f87354 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3dd1052 0 1 x40cd5bc0 1} {x42580000 xc3d9b8f1 x40e6d140 1 x40e6d140 1} {x425c0000 xc3d5d9c8 x41062e80 1 x41062e80 1} {x42600000 xc3d15609 x412022d0 1 x412022d0 1} {x42640000 xc3cbd79b x4139d6f0 1 x4139d6f0 1} {x42680000 xc3c5b89a x41371630 1 x41371630 1} {x426c0000 xc3c06638 x4129fe70 1 x4129fe70 1} {x42700000 xc3bb18b3 x412ff990 1 x412ff990 1} {x42740000 xc3b5669f x41356680 1 x41356680 1} {x42780000 xc3afc24b x412c2bd0 1 x412c2bd0 1} {x427c0000 xc3aaa3e2 x4127c6c0 1 x4127c6c0 1} {x42800000 xc3a545df x4124f2e0 1 x4124f2e0 1} {x42820000 xc3a054b4 x410dc310 1 x410dc310 1} {x42840000 xc39c69ae x40fcfea0 1 x40fcfea0 1} {x42860000 xc3986cbf x41056be0 1 x41056be0 1} {x42880000 xc39412f0 x41074890 1 x41074890 1} {x428a0000 xc38ff836 x40fc9240 1 x40fc9240 1} {x428c0000 xc38c2e5e x40e730e0 1 x40e730e0 1} {x428e0000 xc388beaf x40dad7c0 1 x40dad7c0 1} {x42900000 xc38557a0 x40f34880 1 x40f34880 1} {x42920000 xc381246b x40fa4100 1 x40fa4100 1} {x42940000 xc37b0b30 x40d34f90 1 x40d34f90 1} {x42960000 xc37513dd x40ac4720 1 x40ac4720 1} {x42980000 xc37046be x40969450 1 x40969450 1} {x429a0000 xc36baa98 x408b2fb0 1 x408b2fb0 1} {x429c0000 xc36793c3 x4080bc80 1 x4080bc80 1} {x429e0000 xc3639ed0 x408300e0 1 x408300e0 1} {x42a00000 xc35f63b5 x4090a800 1 x4090a800 1} {x42a20000 xc35a9450 x40ac00c0 1 x40ac00c0 1} {x42a40000 xc354a3a9 x40c97dc0 1 x40c97dc0 1} {x42a60000 xc34dfc74 x40bf8f60 1 x40bf8f60 1} {x42a80000 xc348aab3 x40a92d30 1 x40a92d30 1} {x42aa0000 xc34369a1 x40a26b30 1 x40a26b30 1} {x42ac0000 xc33e8400 x408e34c0 1 x408e34c0 1} {x42ae0000 xc33a8655 x405d2a40 1 x405d2a40 1} {x42b00000 xc3379aae x4022fd20 1 x4022fd20 1} {x42b20000 xc3356e6c x4000a7e0 1 x4000a7e0 1} {x42b40000 xc333956f x3ffce400 1 x3ffce400 1} {x42b60000 xc3317adc x400c33a0 1 x400c33a0 1} {x42b80000 xc32f33d2 x400cc400 1 x400cc400 1} {x42ba0000 xc32d14bc x400a98e0 1 x400a98e0 1} {x42bc0000 xc32adf0b x400c8980 1 x400c8980 1} {x42be0000 xc328b070 x4006a420 1 x4006a420 1} {x42c00000 xc326a9ea x4002ec60 1 x4002ec60 1} {x42c20000 xc324990d x40609c20 1 x40609c20 1} {x42c40000 xc31fa509 x40a5a540 1 x40a5a540 1} {x42c60000 xc31a3eb9 x40aefe90 1 x40aefe90 1} {x42c80000 xc314b520 x40ae1fa0 1 x40ae1fa0 1} {x42ca0000 xc30f5cbf x40b156d0 1 x40b156d0 1} {x42cc0000 xc3099fb3 x40b00b20 1 x40b00b20 1} {x42ce0000 xc3045c0d x409fec10 1 x409fec10 1} {x42d00000 xc2ff41e4 x408a4fb0 1 x408a4fb0 1} {x42d20000 xc2f76e24 x40812c08 1 x40812c08 1} {x42d40000 xc2ef1c63 x4085beb0 1 x4085beb0 1} {x42d60000 xc2e6b64e x4086a3f0 1 x4086a3f0 1} {x42d80000 xc2de47e5 x40873930 1 x40873930 1} {x42da0000 xc2d5cf28 x408971b8 1 x408971b8 1} {x42dc0000 xc2cd19ae x408f7b78 1 x408f7b78 1} {x42de0000 xc2c3dfb9 x4099b908 1 x4099b908 1} {x42e00000 xc2b9e28d x40a1c170 1 x40a1c170 1} {x42e20000 xc2afa78b x40a64838 1 x40a64838 1} {x42e40000 xc2a51986 x40a87750 1 x40a87750 1} {x42e60000 xc29a98a1 x40ad26d8 1 x40ad26d8 1} {x42e80000 xc28f74ab x40b4c5c0 1 x40b4c5c0 1} {x42ea0000 xc283ffe9 x40b1b42c 1 x40b1b42c 1} {x42ec0000 xc2727c4b x40c0d71c 1 x40c0d71c 1} {x42ee0000 xc257ca0b x40cf03bc 1 x40cf03bc 1} {x42f00000 xc23ebb5c x40e55c98 1 x40e55c98 1} {x42f20000 xc21e72e5 x40f8da94 1 x40f8da94 1} {x42f40000 xc20084b7 x4100dc96 1 x4100dc96 1} {x42f60000 xc1bc0934 x40ff07b0 1 x40ff07b0 1} {x42f80000 xc1818596 x40fa5332 1 x40fa5332 1} {x42fa0000 xc0fb7e6b x41018596 1 x41018596 1} {x42fc0000 0 x41022571 1 x41022571 1} {x42fe0000 x41068bac x4103a35e 1 x4103a35e 1} {x43000000 x4183a35e x40fce342 1 x40fce342 1} {x43010000 x41c1b777 x40f29cd0 1 x40f29cd0 1} {x43020000 x41fcf1c6 x40e6754e 1 x40e6754e 1} {x43030000 x421a790f x40d6ac54 1 x40d6ac54 1} {x43040000 x423423f8 x40c47dbc 1 x40c47dbc 1} {x43050000 x424b987e x40af242c 1 x40af242c 1} {x43060000 x425fed03 x40971f28 1 x40971f28 1} {x43070000 x42716048 x4080af5c 1 x4080af5c 1} {x43080000 x42800c6d x40660d40 1 x40660d40 1} {x43090000 x428710f8 x40553d90 1 x40553d90 1} {x430a0000 x428d6046 x4042ca60 1 x4042ca60 1} {x430b0000 x42933d9e x403233b0 1 x403233b0 1} {x430c0000 x42988381 x4022cb20 1 x4022cb20 1} {x430d0000 x429d6a50 x401c6df0 1 x401c6df0 1} {x430e0000 x42a24a60 x40226a30 1 x40226a30 1} {x430f0000 x42a790f3 x403040c0 1 x403040c0 1} {x43100000 x42ad4e6c x403990e0 1 x403990e0 1} {x43110000 x42b32a01 x40391c10 1 x40391c10 1} {x43120000 x42b8e02d x4033c6d0 1 x4033c6d0 1} {x43130000 x42be666e x401bd4d0 1 x401bd4d0 1} {x43140000 x42c29d7a x3fd699c0 1 x3fd699c0 1} {x43150000 x42c51b3c x3f408d80 1 x3f408d80 1} {x43160000 x42c59fb0 x3c441000 1 0 1}} {{x42540000 x44876974 0 1 xc15e0120 1} {x42580000 x44859c0b xc1781b40 1 xc1781b40 1} {x425c0000 x44838907 xc186f420 1 xc186f420 1} {x42600000 x4481646a xc1883f90 1 xc1883f90 1} {x42640000 x447e8e15 xc185d150 1 xc185d150 1} {x42680000 x447a6bbf xc1889fe0 1 xc1889fe0 1} {x426c0000 x44760417 xc18811e0 1 xc18811e0 1} {x42700000 x4471eaa1 xc18a1490 1 xc18a1490 1} {x42740000 x446d62ce xc19b1090 1 xc19b1090 1} {x42780000 x44683998 xc1aaf380 1 xc1aaf380 1} {x427c0000 x4462b396 xc1be9760 1 xc1be9760 1} {x42800000 x445c5022 xc1cb5f70 1 xc1cb5f70 1} {x42820000 x4455fd9f xc1c7f940 1 xc1c7f940 1} {x42840000 x444fd08e xc1c6fc80 1 xc1c6fc80 1} {x42860000 x44498dd7 xc1cf6770 1 xc1cf6770 1} {x42880000 x4442da17 xc1ce4ab0 1 xc1ce4ab0 1} {x428a0000 x443ca92c xc1c8a180 1 xc1c8a180 1} {x428c0000 x44364fff xc1cb3d10 1 xc1cb3d10 1} {x428e0000 x442ff55b xc1ce5470 1 xc1ce5470 1} {x42900000 x44296ab8 xc1d654d0 1 xc1d654d0 1} {x42920000 x4422900e xc1d70e10 1 xc1d70e10 1} {x42940000 x441bf9d7 xc1d06af0 1 xc1d06af0 1} {x42960000 x4415895f xc1c915e0 1 xc1c915e0 1} {x42980000 x440f6879 xc1bc9cf0 1 xc1bc9cf0 1} {x429a0000 x4409bf90 xc1b17d20 1 xc1b17d20 1} {x429c0000 x440450a7 xc1ac9528 1 xc1ac9528 1} {x429e0000 x43fdec7b xc1a9bcf8 1 xc1a9bcf8 1} {x42a00000 x43f369af xc1a7e5e0 1 xc1a7e5e0 1} {x42a20000 x43e8efbf xc1a858c8 1 xc1a858c8 1} {x42a40000 x43de5e96 xc1a6a778 1 xc1a6a778 1} {x42a60000 x43d41ad0 xc1a51e78 1 xc1a51e78 1} {x42a80000 x43c9bac7 xc1a33938 1 xc1a33938 1} {x42aa0000 x43bfb3a9 xc1a25550 1 xc1a25550 1} {x42ac0000 x43b5701d xc1a48050 1 xc1a48050 1} {x42ae0000 x43ab239f xc1a35ff0 1 xc1a35ff0 1} {x42b00000 x43a1041f xc1a31f18 1 xc1a31f18 1} {x42b20000 x4396bfbc xc1a524d0 1 xc1a524d0 1} {x42b40000 x438c5f85 xc1a78080 1 xc1a78080 1} {x42b60000 x4381cfac xc1aa8314 1 xc1aa8314 1} {x42b80000 x436e1e45 xc1a90378 1 xc1a90378 1} {x42ba0000 x43595e7a xc1a30fd4 1 xc1a30fd4 1} {x42bc0000 x43455a50 xc19a80f8 1 xc19a80f8 1} {x42be0000 x4332be3c xc18f2960 1 xc18f2960 1} {x42c00000 x43218ff8 xc1844244 1 xc1844244 1} {x42c20000 x4311adab xc1736c30 1 xc1736c30 1} {x42c40000 x43032272 xc16794a8 1 xc16794a8 1} {x42c60000 x42e9762c xc1635b10 1 xc1635b10 1} {x42c80000 x42cd6e20 xc1611538 1 xc1611538 1} {x42ca0000 x42b130de xc162f810 1 xc162f810 1} {x42cc0000 x4294b01c xc1581ff0 1 xc1581ff0 1} {x42ce0000 x427651c4 xc1450e7c 1 xc1450e7c 1} {x42d00000 x4246d8fa xc12fa018 1 xc12fa018 1} {x42d20000 x421e81b8 xc1210116 1 xc1210116 1} {x42d40000 x41ecb0de xc11a44bc 1 xc11a44bc 1} {x42d60000 x41a2beb4 xc10d2a20 1 xc10d2a20 1} {x42d80000 x413f0d7d xc101a3a8 1 xc101a3a8 1} {x42da0000 x40846c31 xc0f5eb3a 1 xc0f5eb3a 1} {x42dc0000 xc05b76f2 xc0de1e40 1 xc0de1e40 1} {x42de0000 xc11be828 xc0addc66 1 xc0addc66 1} {x42e00000 xc164ba22 xc06eed28 1 xc06eed28 1} {x42e20000 xc189af5e xc01c8878 1 xc01c8878 1} {x42e40000 xc1997f2f xbfa81900 1 xbfa81900 1} {x42e60000 xc19eb27e -} {x42e80000 xc19ad997 x3f5fe320 1 x3f5fe320 1} {x42ea0000 xc190b44c x3fa52e98 1 x3fa52e98 1} {x42ec0000 xc18633c4 x3faf1740 1 x3faf1740 1} {x42ee0000 xc175a2c8 x3fd570cc 1 x3fd570cc 1} {x42f00000 xc1570b55 x3fc66240 1 x3fc66240 1} {x42f20000 xc1440a38 x3fc12244 1 x3fc12244 1} {x42f40000 xc126c2c4 x3fcfaf7c 1 x3fcfaf7c 1} {x42f60000 xc1101e59 x400c47c8 1 x400c47c8 1} {x42f80000 xc0c13dc0 x402aae28 1 x402aae28 1} {x42fa0000 xc06b1d15 x40413dc0 1 x40413dc0 1} {x42fc0000 0 x4064b80f 1 x4064b80f 1} {x42fe0000 x405e5309 x406c2f3e 1 x406c2f3e 1} {x43000000 x40ec2f3e x4081e0ae 1 x4081e0ae 1} {x43010000 x41397570 x408e7b19 1 x408e7b19 1} {x43020000 x4182495c x409f64b0 1 x409f64b0 1} {x43030000 x41ac6d10 x40ad51ee 1 x40ad51ee 1} {x43040000 x41d8f253 x40b50c94 1 x40b50c94 1} {x43050000 x420379ad x40beead2 1 x40beead2 1} {x43060000 x421c33de x40d42b10 1 x40d42b10 1} {x43070000 x42388471 x40e68cfc 1 x40e68cfc 1} {x43080000 x4255d71d x40ef25cc 1 x40ef25cc 1} {x43090000 x42744de4 x40ef0024 1 x40ef0024 1} {x430a0000 x4288cb93 x40e23608 1 x40e23608 1} {x430b0000 x42966db3 x40d63910 1 x40d63910 1} {x430c0000 x42a392b5 x40d64360 1 x40d64360 1} {x430d0000 x42b1361f x40db2c10 1 x40db2c10 1} {x430e0000 x42bef837 x40d90c40 1 x40d90c40 1} {x430f0000 x42cc57a7 x40d75b00 1 x40d75b00 1} {x43100000 x42d9e397 x40d61b28 1 x40d61b28 1} {x43110000 x42e71b0c x40ce7e08 1 x40ce7e08 1} {x43120000 x42f3b358 x40c32940 1 x40c32940 1} {x43130000 x42ff8034 x40afd1e0 1 x40afd1e0 1} {x43140000 x4304d6ca x409752d0 1 x409752d0 1} {x43150000 x43093547 x4055df80 1 x4055df80 1} {x43160000 x430b85c6 x3fe67fc0 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke111 262656 bezier {cc {f 8224} {p {0 0 1} {x4440877d x43fa7a5f 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke112 262656 bezier {cc {f 8224} {p {0 0 1} {x4440877d x43fa7a5f 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3c45925 0 1 x408d4b80 1} {x42580000 xc3c1cf9f x40cc8d80 1 x40cc8d80 1} {x425c0000 xc3bdf4b9 x410596a0 1 x410596a0 1} {x42600000 xc3b97635 x41140450 1 x41140450 1} {x42640000 xc3b4b474 x4116aa10 1 x4116aa10 1} {x42680000 xc3b00b94 x411715c0 1 x411715c0 1} {x426c0000 xc3ab4318 x411418f0 1 x411418f0 1} {x42700000 xc3a6ca05 x411986b0 1 x411986b0 1} {x42740000 xc3a1aaad x41216d00 1 x41216d00 1} {x42780000 xc39cb335 x41183d20 1 x41183d20 1} {x427c0000 xc39826db x4116d1c0 1 x4116d1c0 1} {x42800000 xc3934619 x411c70e0 1 x411c70e0 1} {x42820000 xc38e5fcd x410c1570 1 x410c1570 1} {x42840000 xc38a84c2 x40f13240 1 x40f13240 1} {x42860000 xc386d63b x40cd2ce0 1 x40cd2ce0 1} {x42880000 xc3841b5b x40d837c0 1 x40d837c0 1} {x428a0000 xc380147d x40f26e40 1 x40f26e40 1} {x428c0000 xc3790fd2 x40da4180 1 x40da4180 1} {x428e0000 xc37284e2 x40d990f0 1 x40d990f0 1} {x42900000 xc36b76c3 x40e11e50 1 x40e11e50 1} {x42920000 xc36472fd x40c73060 1 x40c73060 1} {x42940000 xc35f03bd x40ac24d0 1 x40ac24d0 1} {x42960000 xc359b0b0 x40a3cfa0 1 x40a3cfa0 1} {x42980000 xc354c6c3 x409b67f0 1 x409b67f0 1} {x429a0000 xc34ffa31 x4090bb40 1 x4090bb40 1} {x429c0000 xc34bbb0f x40815bc0 1 x40815bc0 1} {x429e0000 xc347e475 x40776b00 1 x40776b00 1} {x42a00000 xc343ffb7 x4085f890 1 x4085f890 1} {x42a20000 xc33f84ec x4096edd0 1 x4096edd0 1} {x42a40000 xc33a90da x40a73b60 1 x40a73b60 1} {x42a60000 xc3351136 x40a05fa0 1 x40a05fa0 1} {x42a80000 xc3308ae0 x4092e360 1 x4092e360 1} {x42aa0000 xc32be300 x4096ce90 1 x4096ce90 1} {x42ac0000 xc3271df7 x4089b480 1 x4089b480 1} {x42ae0000 xc32347b8 x4053fcc0 1 x4053fcc0 1} {x42b00000 xc3207e11 x401d8f00 1 x401d8f00 1} {x42b20000 xc31e5b40 x3ff91880 1 x3ff91880 1} {x42b40000 xc31c99af x3fecaa00 1 x3fecaa00 1} {x42b60000 xc31aa898 x3ff64c40 1 x3ff64c40 1} {x42b80000 xc318c07e x3ff30a80 1 x3ff30a80 1} {x42ba0000 xc316dc6e x3fed7bc0 1 x3fed7bc0 1} {x42bc0000 xc3150a8f x3ff03c40 1 x3ff03c40 1} {x42be0000 xc3131b7d x3ff84b80 1 x3ff84b80 1} {x42c00000 xc3112961 x3ff3aec0 1 x3ff3aec0 1} {x42c20000 xc30f4cc2 x40511300 1 x40511300 1} {x42c40000 xc30aa0c9 x40986770 1 x40986770 1} {x42c60000 xc305c64b x40a0cc00 1 x40a0cc00 1} {x42c80000 xc3009409 x40a357d0 1 x40a357d0 1} {x42ca0000 xc2f7219c x40a1ee10 1 x40a1ee10 1} {x42cc0000 xc2ecea50 x409f62e0 1 x409f62e0 1} {x42ce0000 xc2e33540 x40943498 1 x40943498 1} {x42d00000 xc2da63bd x4087aef8 1 x4087aef8 1} {x42d20000 xc2d23f61 x4077f840 1 x4077f840 1} {x42d40000 xc2cae439 x406ab930 1 x406ab930 1} {x42d60000 xc2c393ce x406246e0 1 x406246e0 1} {x42d80000 xc2bcbfcb x4056c610 1 x4056c610 1} {x42da0000 xc2b6276d x40554080 1 x40554080 1} {x42dc0000 xc2af6bc3 x405f0400 1 x405f0400 1} {x42de0000 xc2a8372d x406bd210 1 x406bd210 1} {x42e00000 xc2a0aea2 x406f9750 1 x406f9750 1} {x42e20000 xc2993db8 x40703190 1 x40703190 1} {x42e40000 xc291ab89 x4074a680 1 x4074a680 1} {x42e60000 xc289f350 x407c5040 1 x407c5040 1} {x42e80000 xc281e685 x4086942c 1 x4086942c 1} {x42ea0000 xc2724195 x4092e8d4 1 x4092e8d4 1} {x42ec0000 xc25f12d5 x40a68324 1 x40a68324 1} {x42ee0000 xc248a0cc x40b7fd44 1 x40b7fd44 1} {x42f00000 xc2311384 x40c9c204 1 x40c9c204 1} {x42f20000 xc216304b x40dbd348 1 x40dbd348 1} {x42f40000 xc1f43d64 x40e89668 1 x40e89668 1} {x42f60000 xc1b81562 x40eea25a 1 x40eea25a 1} {x42f80000 xc179d86e x40f57e32 1 x40f57e32 1} {x42fa0000 xc0f55924 x40f9d86e 1 x40f9d86e 1} {x42fc0000 0 x40fae8fb 1 x40fae8fb 1} {x42fe0000 x41003c69 x40fd7eb7 1 x40fd7eb7 1} {x43000000 x417d7eb7 x40f898f1 1 x40f898f1 1} {x43010000 x41bc6aad x40efa8f5 1 x40efa8f5 1} {x43020000 x41f693d6 x40e326fa 1 x40e326fa 1} {x43030000 x4216ff15 x40d63230 1 x40d63230 1} {x43040000 x4230d677 x40c52bb0 1 x40c52bb0 1} {x43050000 x42484a01 x40b44188 1 x40b44188 1} {x43060000 x425de6d9 x40a51d7c 1 x40a51d7c 1} {x43070000 x42719160 x408de314 1 x408de314 1} {x43080000 x4280afcf x40707d90 1 x40707d90 1} {x43090000 x4287d089 x405948e0 1 x405948e0 1} {x430a0000 x428e445d x40475830 1 x40475830 1} {x430b0000 x4294460c x4035bc70 1 x4035bc70 1} {x430c0000 x4299a024 x40269950 1 x40269950 1} {x430d0000 x429eafa1 x402107a0 1 x402107a0 1} {x430e0000 x42a3b09e x4026cef0 1 x4026cef0 1} {x430f0000 x42a91c90 x4037b710 1 x4037b710 1} {x43100000 x42af2c0f x4041e650 1 x4041e650 1} {x43110000 x42b53af5 x403f4900 1 x403f4900 1} {x43120000 x42bb209f x403c4290 1 x403c4290 1} {x43130000 x42c0ff1e x402690e0 1 x402690e0 1} {x43140000 x42c589ad x3fe3d6e0 1 x3fe3d6e0 1} {x43150000 x42c81dd5 x3f5c5600 1 x3f5c5600 1} {x43160000 x42c8fb05 x3e5ee400 1 0 1}} {{x42540000 x4485c411 0 1 xc15291a0 1} {x42580000 x44840915 xc17356c0 1 xc17356c0 1} {x425c0000 x4481f6b6 xc186c670 1 xc186c670 1} {x42600000 x447fa5c3 xc186d800 1 xc186d800 1} {x42640000 x447b7fec xc184c8f0 1 xc184c8f0 1} {x42680000 x44775934 xc1863720 1 xc1863720 1} {x426c0000 x44731c7a xc18adcd0 1 xc18adcd0 1} {x42700000 x446eab67 xc193a6e0 1 xc193a6e0 1} {x42740000 x4469e20c xc1a44600 1 xc1a44600 1} {x42780000 x44646707 xc1b43120 1 xc1b43120 1} {x427c0000 x445e9efa xc1c3c250 1 xc1c3c250 1} {x42800000 x44582ae2 xc1cc5480 1 xc1cc5480 1} {x42820000 x4451d9b2 xc1cb8c90 1 xc1cb8c90 1} {x42840000 x444b7219 xc1cb4150 1 xc1cb4150 1} {x42860000 x4445259d xc1ce9200 1 xc1ce9200 1} {x42880000 x443e88f9 xc1d314f0 1 xc1d314f0 1} {x428a0000 x4437f44e xc1d3a8c0 1 xc1d3a8c0 1} {x428c0000 x44314e6d xc1ce5e10 1 xc1ce5e10 1} {x428e0000 x442b0e6d xc1cae2d0 1 xc1cae2d0 1} {x42900000 x4424a040 xc1d2f400 1 xc1d2f400 1} {x42920000 x441ddf2d xc1d60970 1 xc1d60970 1} {x42940000 x44173fa9 xc1cfb860 1 xc1cfb860 1} {x42960000 x4410e3a7 xc1c701d0 1 xc1c701d0 1} {x42980000 x440acf8c xc1ba9760 1 xc1ba9760 1} {x429a0000 x44053a31 xc1af4848 1 xc1af4848 1} {x429c0000 x43ffb60f xc1ac5d68 1 xc1ac5d68 1} {x429e0000 x43f4e8b5 xc1a9a100 1 xc1a9a100 1} {x42a00000 x43ea81ef xc1a526a8 1 xc1a526a8 1} {x42a20000 x43e043e0 xc1a88a00 1 xc1a88a00 1} {x42a40000 x43d570af xc1af9a68 1 xc1af9a68 1} {x42a60000 x43ca5093 xc1a793f0 1 xc1a793f0 1} {x42a80000 x43c07e31 xc19ac808 1 xc19ac808 1} {x42aa0000 x43b6f792 xc19ba680 1 xc19ba680 1} {x42ac0000 x43ad0961 xc19fcf90 1 xc19fcf90 1} {x42ae0000 x43a2fda0 xc19f3830 1 xc19f3830 1} {x42b00000 x4399225b xc19eb970 1 xc19eb970 1} {x42b20000 x438f2672 xc1a0d450 1 xc1a0d450 1} {x42b40000 x438507d1 xc1a34730 1 xc1a34730 1} {x42b60000 x43757b18 xc1a6bdc0 1 xc1a6bdc0 1} {x42b80000 x43606032 xc1a4bc80 1 xc1a4bc80 1} {x42ba0000 x434c4bf8 xc19f2ec8 1 xc19f2ec8 1} {x42bc0000 x43389480 xc1974230 1 xc1974230 1} {x42be0000 x43267b6c xc18b62a8 1 xc18b62a8 1} {x42c00000 x4315bbd6 xc1801094 1 xc1801094 1} {x42c20000 x43067747 xc16b4420 1 xc16b4420 1} {x42c40000 x42f0a6a4 xc160b090 1 xc160b090 1} {x42c60000 x42d4c26a xc1592a1c 1 xc1592a1c 1} {x42c80000 x42ba5c1d xc154f52c 1 xc154f52c 1} {x42ca0000 x429f851f xc15a5510 1 xc15a5510 1} {x42cc0000 x4283c6d9 xc14517fa 1 xc14517fa 1} {x42ce0000 x425c7e41 xc130d54c 1 xc130d54c 1} {x42d00000 x422f230c xc137278a 1 xc137278a 1} {x42d20000 x4200ea7c xc130e604 1 xc130e604 1} {x42d40000 x41ad6014 xc12074de 1 xc12074de 1} {x42d60000 x4142c033 xc10f22ec 1 xc10f22ec 1} {x42d80000 x4071e93c xc101c221 1 xc101c221 1} {x42da0000 xc081881d xc0f0d7f2 1 xc0f0d7f2 1} {x42dc0000 xc1345da3 xc0d4ec2e 1 xc0d4ec2e 1} {x42de0000 xc18ad81e xc0a4e0ed 1 xc0a4e0ed 1} {x42e00000 xc1ac9f48 xc057d7c8 1 xc057d7c8 1} {x42e20000 xc1c0ce10 xbff5f130 1 xbff5f130 1} {x42e40000 xc1cb5d6e xbf4afe90 1 xbf4afe90 1} {x42e60000 xc1cd7df9 -} {x42e80000 xc1c32903 x3fca8b10 1 x3fca8b10 1} {x42ea0000 xc1b42c97 x3fe805a0 1 x3fe805a0 1} {x42ec0000 xc1a6284f x3fe17c58 1 x3fe17c58 1} {x42ee0000 xc197fd0c x3ff67578 1 x3ff67578 1} {x42f00000 xc18759a0 x3ff27cec 1 x3ff27cec 1} {x42f20000 xc1735add x3fe83b90 1 x3fe83b90 1} {x42f40000 xc154a45c x3ffb17a4 1 x3ffb17a4 1} {x42f60000 xc13494f4 x402a07f0 1 x402a07f0 1} {x42f80000 xc0ff40c8 x4058d815 1 x4058d815 1} {x42fa0000 xc09051d3 x407f40c8 1 x407f40c8 1} {x42fc0000 0 x408fded3 1 x408fded3 1} {x42fe0000 x408f6bd3 x4092733a 1 x4092733a 1} {x43000000 x4112733a x4096f8e6 1 x4096f8e6 1} {x43010000 x415eaed0 x40a103d8 1 x40a103d8 1} {x43020000 x4199bb89 x40aeae8c 1 x40aeae8c 1} {x43030000 x41c6aeae x40b9f06c 1 x40b9f06c 1} {x43040000 x41f6b3bf x40c3ced4 1 x40c3ced4 1} {x43050000 x42144b0c x40c5c122 1 x40c5c122 1} {x43060000 x422cca28 x40d61328 1 x40d61328 1} {x43070000 x4249cfd6 x40f359c4 1 x40f359c4 1} {x43080000 x4269a099 x41000f00 1 x41000f00 1} {x43090000 x4284ebab x40fb4884 1 x40fb4884 1} {x430a0000 x4294395d x40f0d5c0 1 x40f0d5c0 1} {x430b0000 x42a30663 x40e72660 1 x40e72660 1} {x430c0000 x42b11e29 x40e8ada8 1 x40e8ada8 1} {x430d0000 x42c01c18 x40ef3e08 1 x40ef3e08 1} {x430e0000 x42cf05ea x40ea6140 1 x40ea6140 1} {x430f0000 x42dd6840 x40e8b5f0 1 x40e8b5f0 1} {x43100000 x42ec1ca8 x40e64fb8 1 x40e64fb8 1} {x43110000 x42fa3237 x40ddda60 1 x40ddda60 1} {x43120000 x4303ebfa x40d47d28 1 x40d47d28 1} {x43130000 x430a60ee x40c23270 1 x40c23270 1} {x43140000 x43100f21 x40a8e8a0 1 x40a8e8a0 1} {x43150000 x4314ef78 x4076cee0 1 x4076cee0 1} {x43160000 x4317c598 x4014e490 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke113 262656 bezier {cc {f 8224} {p {0 0 1} {x448ce89c x443a18f6 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke114 262656 bezier {cc {f 8224} {p {0 0 1} {x448ce89c x443a18f6 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3ea7123 0 1 x40cd2310 1} {x42580000 xc3e71af5 x40e65c60 1 x40e65c60 1} {x425c0000 xc3e33e40 x4105d750 1 x4105d750 1} {x42600000 xc3debd80 x411fc480 1 x411fc480 1} {x42640000 xc3d941f8 x4139c4b0 1 x4139c4b0 1} {x42680000 xc3d32135 x413b9d60 1 x413b9d60 1} {x426c0000 xc3cd8822 x41337bb0 1 x41337bb0 1} {x42700000 xc3c7e97a x41350390 1 x41350390 1} {x42740000 xc3c237e9 x412f5430 1 x412f5430 1} {x42780000 xc3bcf437 x41263bf0 1 x41263bf0 1} {x427c0000 xc3b7d42a x412781e0 1 x412781e0 1} {x42800000 xc3b27c19 x41220520 1 x41220520 1} {x42820000 xc3adb3d8 x410cc100 1 x410cc100 1} {x42840000 xc3a9b009 x410056d0 1 x410056d0 1} {x42860000 xc3a5ae6b x4109ddc0 1 x4109ddc0 1} {x42880000 xc3a1122d x410b7a10 1 x410b7a10 1} {x428a0000 xc39cf6ca x40fa2800 1 x40fa2800 1} {x428c0000 xc39940ed x40dea5e0 1 x40dea5e0 1} {x428e0000 xc396019b x40d641e0 1 x40d641e0 1} {x42900000 xc3928ede x40f05360 1 x40f05360 1} {x42920000 xc38e7f00 x40ef3cc0 1 x40ef3cc0 1} {x42940000 xc38b14f8 x40c8d9c0 1 x40c8d9c0 1} {x42960000 xc3883832 x40aa7a00 1 x40aa7a00 1} {x42980000 xc385c128 x409af460 1 x409af460 1} {x429a0000 xc383608f x40934aa0 1 x40934aa0 1} {x429c0000 xc38126d3 x4084a8b0 1 x4084a8b0 1} {x429e0000 xc37e7693 x40780360 1 x40780360 1} {x42a00000 xc37a8d8b x408adf50 1 x408adf50 1} {x42a20000 xc375c89e x40a52d40 1 x40a52d40 1} {x42a40000 xc3703ab7 x40bd6af0 1 x40bd6af0 1} {x42a60000 xc369f1ef x40b45a40 1 x40b45a40 1} {x42a80000 xc364f513 x40a5baf0 1 x40a5baf0 1} {x42aa0000 xc35f9640 x409fb130 1 x409fb130 1} {x42ac0000 xc35afa00 x4085fd80 1 x4085fd80 1} {x42ae0000 xc3573668 x4051b800 1 x4051b800 1} {x42b00000 xc3546c40 x401b9b20 1 x401b9b20 1} {x42b20000 xc352598f x3fe04d80 1 x3fe04d80 1} {x42b40000 xc350eb0a x3fd8f1c0 1 x3fd8f1c0 1} {x42b60000 xc34ef5c8 x400a2960 1 x400a2960 1} {x42b80000 xc34c99bf x4015e680 1 x4015e680 1} {x42ba0000 xc34a4694 x401ad500 1 x401ad500 1} {x42bc0000 xc347c317 x401f5a80 1 x401f5a80 1} {x42be0000 xc3454bc0 x40129520 1 x40129520 1} {x42c00000 xc3432e6e x4001c7e0 1 x4001c7e0 1} {x42c20000 xc3413d81 x405b6b20 1 x405b6b20 1} {x42c40000 xc33c5315 x40a7bdf0 1 x40a7bdf0 1} {x42c60000 xc336c1a2 x40b5b810 1 x40b5b810 1} {x42c80000 xc330f794 x40b50400 1 x40b50400 1} {x42ca0000 xc32b7162 x40b15b70 1 x40b15b70 1} {x42cc0000 xc325e1dd x40b54ed0 1 x40b54ed0 1} {x42ce0000 xc3201c75 x40b4f000 1 x40b4f000 1} {x42d00000 xc31a92dd x40a4ba20 1 x40a4ba20 1} {x42d20000 xc315d0d3 x40963590 1 x40963590 1} {x42d40000 xc3112f84 x4099a230 1 x4099a230 1} {x42d60000 xc30c36b0 x409e7560 1 x409e7560 1} {x42d80000 xc307482e x409c8f90 1 x409c8f90 1} {x42da0000 xc3026db7 x40a1dc18 1 x40a1dc18 1} {x42dc0000 xc2fa54d9 x40b31258 1 x40b31258 1} {x42de0000 xc2ee7923 x40c1eb48 1 x40c1eb48 1} {x42e00000 xc2e21770 x40c96808 1 x40c96808 1} {x42e20000 xc2d54c22 x40cf2658 1 x40cf2658 1} {x42e40000 xc2c832a5 x40d5ef30 1 x40d5ef30 1} {x42e60000 xc2ba8e3c x40d9c8b0 1 x40d9c8b0 1} {x42e80000 xc2acf98f x40e0c148 1 x40e0c148 1} {x42ea0000 xc29e7613 x40e7e9d0 1 x40e7e9d0 1} {x42ec0000 xc28ffc55 x40fb4ec0 1 x40fb4ec0 1} {x42ee0000 xc27e1876 x41025650 1 x41025650 1} {x42f00000 xc25ecd82 x410e2ea6 1 x410e2ea6 1} {x42f20000 xc2370123 x411651ce 1 x411651ce 1} {x42f40000 xc213a49b x4117321b 1 x4117321b 1} {x42f60000 xc1d6d02b x4113421c 1 x4113421c 1} {x42f80000 xc194071a x410eb604 1 x410eb604 1} {x42fa0000 xc110344d x4114071a 1 x4114071a 1} {x42fc0000 0 x411226d5 1 x411226d5 1} {x42fe0000 x4114195d x411272e0 1 x411272e0 1} {x43000000 x419272e0 x410afb90 1 x410afb90 1} {x43010000 x41d5083f x4102de80 1 x4102de80 1} {x43020000 x420aa8b0 x40f4c532 1 x40f4c532 1} {x43030000 x4227b56c x40dfdcf4 1 x40dfdcf4 1} {x43040000 x42429fed x40cffa74 1 x40cffa74 1} {x43050000 x425bb409 x40b6a860 1 x40b6a860 1} {x43060000 x42704a05 x409d0734 1 x409d0734 1} {x43070000 x42817aeb x408e10f4 1 x408e10f4 1} {x43080000 x4289e721 x408059e0 1 x408059e0 1} {x43090000 x42918627 x406a04d0 1 x406a04d0 1} {x430a0000 x4298876e x405730e0 1 x405730e0 1} {x430b0000 x429ef935 x404a0a70 1 x404a0a70 1} {x430c0000 x42a52815 x403dc890 1 x403dc890 1} {x430d0000 x42aad5be x403a2950 1 x403a2950 1} {x430e0000 x42b0caaa x40408430 1 x40408430 1} {x430f0000 x42b6de01 x4049b760 1 x4049b760 1} {x43100000 x42bd6620 x4050c230 1 x4050c230 1} {x43110000 x42c3ea24 x404e17e0 1 x404e17e0 1} {x43120000 x42ca479e x40456f30 1 x40456f30 1} {x43130000 x42d04117 x402aa6f0 1 x402aa6f0 1} {x43140000 x42d4f20d x3fffa820 1 x3fffa820 1} {x43150000 x42d83e58 x3f8de720 1 x3f8de720 1} {x43160000 x42d96146 x3e9896c0 1 0 1}} {{x42540000 x4485f4a7 0 1 xc15e0580 1} {x42580000 x4484274b xc177ff00 1 xc177ff00 1} {x425c0000 x448214ab xc186d8b0 1 xc186d8b0 1} {x42600000 x447fe10b xc1882800 1 xc1882800 1} {x42640000 x447ba6d6 xc18acbf0 1 xc18acbf0 1} {x42680000 x4477344c xc19137f0 1 xc19137f0 1} {x426c0000 x44729357 xc1897b60 1 xc1897b60 1} {x42700000 x446e9c96 xc187ae70 1 xc187ae70 1} {x42740000 x446a1870 xc196c5b0 1 xc196c5b0 1} {x42780000 x4465303b xc1a6ce20 1 xc1a6ce20 1} {x427c0000 x445fab8e xc1bdb890 1 xc1bdb890 1} {x42800000 x445954b2 xc1c5da20 1 xc1c5da20 1} {x42820000 x44534dec xc1c0ade0 1 xc1c0ade0 1} {x42840000 x444d49d4 xc1c45cf0 1 xc1c45cf0 1} {x42860000 x4447081d xc1cc9890 1 xc1cc9890 1} {x42880000 x4440804b xc1c80000 1 xc1c80000 1} {x428a0000 x443a881d xc1bbd880 1 xc1bbd880 1} {x428c0000 x4434c2c3 xc1b88310 1 xc1b88310 1} {x428e0000 x442effec xc1b9f800 1 xc1b9f800 1} {x42900000 x44292343 xc1c469f0 1 xc1c469f0 1} {x42920000 x4422b94d xc1c86c60 1 xc1c86c60 1} {x42940000 x441c9c7d xc1c2c820 1 xc1c2c820 1} {x42960000 x44168ccb xc1bac320 1 xc1bac320 1} {x42980000 x4410f04b xc1ac34a0 1 xc1ac34a0 1} {x429a0000 x440bc981 xc1a08f20 1 xc1a08f20 1} {x429c0000 x4406e759 xc19eeb80 1 xc19eeb80 1} {x429e0000 x4401dac9 xc1a0ab58 1 xc1a0ab58 1} {x42a00000 x43f9b947 xc1a31820 1 xc1a31820 1} {x42a20000 x43ef528e xc1a63f60 1 xc1a63f60 1} {x42a40000 x43e4f15b xc1a0df78 1 xc1a0df78 1} {x42a60000 x43db369f xc1a07a88 1 xc1a07a88 1} {x42a80000 x43d0e20a xc1a64cd8 1 xc1a64cd8 1} {x42aa0000 x43c66d04 xc1a20158 1 xc1a20158 1} {x42ac0000 x43bca1df xc19ddb88 1 xc19ddb88 1} {x42ae0000 x43b2b193 xc19e8ac0 1 xc19e8ac0 1} {x42b00000 x43a8d087 xc19cfe88 1 xc19cfe88 1} {x42b20000 x439f11c2 xc1a23150 1 xc1a23150 1} {x42b40000 x43948a5d xc1ab3310 1 xc1ab3310 1} {x42b60000 x4389ab60 xc1adc060 1 xc1adc060 1} {x42b80000 x437da4a2 xc1ab37c4 1 xc1ab37c4 1} {x42ba0000 x436888cf xc1a4f940 1 xc1a4f940 1} {x42bc0000 x43546652 xc19b1c50 1 xc19b1c50 1} {x42be0000 x4341c1bb xc18dbce0 1 xc18dbce0 1} {x42c00000 x4330f71a xc1819b3c 1 xc1819b3c 1} {x42c20000 x43215aec xc16eeb10 1 xc16eeb10 1} {x42c40000 x431319b8 xc1657900 1 xc1657900 1} {x42c60000 x4304abcc xc168fcd4 1 xc168fcd4 1} {x42c80000 x42ebf43b xc169359c 1 xc169359c 1} {x42ca0000 x42cf0a31 xc1646bec 1 xc1646bec 1} {x42cc0000 x42b2d940 xc162f00c 1 xc162f00c 1} {x42ce0000 x42964e2e xc15e4b20 1 xc15e4b20 1} {x42d00000 x42768cf0 xc14bb726 1 xc14bb726 1} {x42d20000 x4246c0c9 xc137e50c 1 xc137e50c 1} {x42d40000 x421a9a6a xc12aba7f 1 xc12aba7f 1} {x42d60000 x41e2c713 xc1192f54 1 xc1192f54 1} {x42d80000 x419c0580 xc1099f28 1 xc1099f28 1} {x42da0000 x41324fd5 xc102a0c4 1 xc102a0c4 1} {x42dc0000 x404b25e0 xc0ed502a 1 xc0ed502a 1} {x42de0000 xc06c0156 xc0bed662 1 xc0bed662 1} {x42e00000 xc10c0cea xc0868138 1 xc0868138 1} {x42e20000 xc141818e xc0332e7c 1 xc0332e7c 1} {x42e40000 xc165a428 xbfe2b810 1 xbfe2b810 1} {x42e60000 xc17a2f92 -} {x42e80000 xc177f612 x3ed59000 1 x3ed59000 1} {x42ea0000 xc16a8d26 -} {x42ec0000 xc16e8af8 -} {x42ee0000 xc15da828 x3fb5b878 1 x3fb5b878 1} {x42f00000 xc1411cda x3f8f7ff8 1 x3f8f7ff8 1} {x42f20000 xc139c82a x3f85f864 1 x3f85f864 1} {x42f40000 xc11f9ec1 x3fb14da8 1 x3fb14da8 1} {x42f60000 xc10d74c0 x3fff6f98 1 x3fff6f98 1} {x42f80000 xc0bf85b6 x4026fed7 1 x4026fed7 1} {x42fa0000 xc067d552 x403f85b6 1 x403f85b6 1} {x42fc0000 0 x406c8a97 1 x406c8a97 1} {x42fe0000 x40713fdc x407462c6 1 x407462c6 1} {x43000000 x40f462c6 x4083c552 1 x4083c552 1} {x43010000 x41401549 x4094cdaf 1 x4094cdaf 1} {x43020000 x41877f89 x40aaae47 1 x40aaae47 1} {x43030000 x41b561c8 x40ba4f1a 1 x40ba4f1a 1} {x43040000 x41e4a716 x40bcd390 1 x40bcd390 1} {x43050000 x4209e5c8 x40c24f04 1 x40c24f04 1} {x43060000 x4222e74c x40caaa50 1 x40caaa50 1} {x43070000 x423c905c x40d8188c 1 x40d8188c 1} {x43080000 x4258ed6f x40e7c390 1 x40e7c390 1} {x43090000 x42768140 x40e8b2dc 1 x40e8b2dc 1} {x430a0000 x42898d13 x40db5750 1 x40db5750 1} {x430b0000 x4296ab8a x40cc8440 1 x40cc8440 1} {x430c0000 x42a31d9b x40cbeeb0 1 x40cbeeb0 1} {x430d0000 x42b02960 x40d3f640 1 x40d3f640 1} {x430e0000 x42bd9c63 x40d5cf90 1 x40d5cf90 1} {x430f0000 x42cae352 x40d1b268 1 x40d1b268 1} {x43100000 x42d7d2b0 x40cef510 1 x40cef510 1} {x43110000 x42e4c1f4 x40c9bc60 1 x40c9bc60 1} {x43120000 x42f10a3c x40bc61c8 1 x40bc61c8 1} {x43130000 x42fc4e2d x40a72c90 1 x40a72c90 1} {x43140000 x4302f7e7 x408f4bb8 1 x408f4bb8 1} {x43150000 x43071bd2 x4044c6c0 1 x4044c6c0 1} {x43160000 x43091e1d x3fbcf180 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke115 262656 bezier {cc {f 8224} {p {0 0 1} {x446f88e5 x43c8de98 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke116 262656 bezier {cc {f 8224} {p {0 0 1} {x446f88e5 x43c8de98 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3d3324b 0 1 x40cd06b0 1} {x42580000 xc3cfdbbe x40e6dc60 1 x40e6dc60 1} {x425c0000 xc3cbfb68 x41065810 1 x41065810 1} {x42600000 xc3c7763d x411ffa60 1 x411ffa60 1} {x42640000 xc3c1fbc2 x412ff9d0 1 x412ff9d0 1} {x42680000 xc3bc76a0 x412d2d20 1 x412d2d20 1} {x426c0000 xc3b728f0 x4123fb40 1 x4123fb40 1} {x42700000 xc3b236ec x412638e0 1 x412638e0 1} {x42740000 xc3acc562 x41316710 1 x41316710 1} {x42780000 xc3a7207b x412bf600 1 x412bf600 1} {x427c0000 xc3a20602 x41272320 1 x41272320 1} {x42800000 xc39cae49 x41243720 1 x41243720 1} {x42820000 xc397c290 x410fb400 1 x410fb400 1} {x42840000 xc393b309 x40f80d80 1 x40f80d80 1} {x42860000 xc3900224 x40f6f8c0 1 x40f6f8c0 1} {x42880000 xc38bfb43 x41026200 1 x41026200 1} {x428a0000 xc387dc04 x40fb8c20 1 x40fb8c20 1} {x428c0000 xc3841ee2 x40e58ea0 1 x40e58ea0 1} {x428e0000 xc380af8f x40e1ca30 1 x40e1ca30 1} {x42900000 xc37a2121 x40efd0f0 1 x40efd0f0 1} {x42920000 xc372620f x40ed15a0 1 x40ed15a0 1} {x42940000 xc36b4fc7 x40ce54e0 1 x40ce54e0 1} {x42960000 xc3657cc1 x40a9b820 1 x40a9b820 1} {x42980000 xc360b445 x40965180 1 x40965180 1} {x429a0000 xc35c17a9 x408b3640 1 x408b3640 1} {x429c0000 xc35800e1 x407861a0 1 x407861a0 1} {x429e0000 xc354549c x40716dc0 1 x40716dc0 1} {x42a00000 xc3507573 x40841380 1 x40841380 1} {x42a20000 xc34c1364 x409b9600 1 x409b9600 1} {x42a40000 xc346bc13 x40bbccc0 1 x40bbccc0 1} {x42a60000 xc3405698 x40b50470 1 x40b50470 1} {x42a80000 xc33b6bcc x409eb150 1 x409eb150 1} {x42aa0000 xc3366b83 x409888d0 1 x409888d0 1} {x42ac0000 xc331e33f x40810440 1 x40810440 1} {x42ae0000 xc32e5b3f x40459bc0 1 x40459bc0 1} {x42b00000 xc32bb661 x400c6680 1 x400c6680 1} {x42b20000 xc329f80b x3fd1c4c0 1 x3fd1c4c0 1} {x42b40000 xc3286f4e x3fca47c0 1 x3fca47c0 1} {x42b60000 xc326ceec x3fd76c40 1 x3fd76c40 1} {x42b80000 xc325119d x3fd88c80 1 x3fd88c80 1} {x42ba0000 xc3236cba x3fccc640 1 x3fccc640 1} {x42bc0000 xc321de84 x3fcebe40 1 x3fcebe40 1} {x42be0000 xc32031c1 x3fce4940 1 x3fce4940 1} {x42c00000 xc31ea55f x3fc90240 1 x3fc90240 1} {x42c20000 xc31d0db8 x403e9780 1 x403e9780 1} {x42c40000 xc318b0a3 x40902770 1 x40902770 1} {x42c60000 xc3140b41 x409890d0 1 x409890d0 1} {x42c80000 xc30f2796 x409b7040 1 x409b7040 1} {x42ca0000 xc30a543d x409c7f20 1 x409c7f20 1} {x42cc0000 xc3055fa4 x409cfb80 1 x409cfb80 1} {x42ce0000 xc3008485 x4094a608 1 x4094a608 1} {x42d00000 xc2f82a87 x4092ad98 1 x4092ad98 1} {x42d20000 xc2eeb357 x408f3da8 1 x408f3da8 1} {x42d40000 xc2e642d2 x4089ca88 1 x4089ca88 1} {x42d60000 xc2dd7a06 x408713e8 1 x408713e8 1} {x42d80000 xc2d56055 x407f89d0 1 x407f89d0 1} {x42da0000 xc2cd8169 x407f5050 1 x407f5050 1} {x42dc0000 xc2c56b50 x40860e38 1 x40860e38 1} {x42de0000 xc2bcbfa2 x4093adc0 1 x4093adc0 1} {x42e00000 xc2b2f598 x409f5ab0 1 x409f5ab0 1} {x42e20000 xc2a8d44c x40a1bc28 1 x40a1bc28 1} {x42e40000 xc29ebe13 x409fba58 1 x409fba58 1} {x42e60000 xc294dd01 x40a0e1b0 1 x40a0e1b0 1} {x42e80000 xc28aa1dd x40a4c430 1 x40a4c430 1} {x42ea0000 xc280447b x40a623b0 1 x40a623b0 1} {x42ec0000 xc26bbace x40bad6cc 1 x40bad6cc 1} {x42ee0000 xc251d343 x40c9fd38 1 x40c9fd38 1} {x42f00000 xc2393b80 x40dfc3fc 1 x40dfc3fc 1} {x42f20000 xc219e244 x40f4d4f2 1 x40f4d4f2 1} {x42f40000 xc1f80c87 x40fe420a 1 x40fe420a 1} {x42f60000 xc1b4a383 x40f955e6 1 x40f955e6 1} {x42f80000 xc176c328 x40f1561e 1 x40f1561e 1} {x42fa0000 xc0efe1cf x40f6c328 1 x40f6c328 1} {x42fc0000 0 x40f94334 1 x40f94334 1} {x42fe0000 x4101524c x40fde5ef 1 x40fde5ef 1} {x43000000 x417de5ef x40f586ba 1 x40f586ba 1} {x43010000 x41bb6c83 x40ec6b91 1 x40ec6b91 1} {x43020000 x41f528c0 x40e048f6 1 x40e048f6 1} {x43030000 x4215c87f x40d13c44 1 x40d13c44 1} {x43040000 x422ee371 x40c0793c 1 x40c0793c 1} {x43050000 x4245e6ce x40a99f24 1 x40a99f24 1} {x43060000 x42594b3a x408fd0e4 1 x408fd0e4 1} {x43070000 x4269db07 x4071e050 1 x4071e050 1} {x43080000 x42778744 x4057a028 1 x4057a028 1} {x43090000 x42826786 x404a6980 1 x404a6980 1} {x430a0000 x42886a3a x4039ad60 1 x4039ad60 1} {x430b0000 x428e025c x402ac920 1 x402ac920 1} {x430c0000 x429316cc x4019eef0 1 x4019eef0 1} {x430d0000 x4297a14b x400d6c90 1 x400d6c90 1} {x430e0000 x429bed95 x4010ba10 1 x4010ba10 1} {x430f0000 x42a0acec x40249430 1 x40249430 1} {x43100000 x42a636d8 x4031ce70 1 x4031ce70 1} {x43110000 x42abc9d3 x40315690 1 x40315690 1} {x43120000 x42b14c41 x40303750 1 x40303750 1} {x43130000 x42b6cd48 x4017bd90 1 x4017bd90 1} {x43140000 x42bac81a x3fc9b9a0 1 x3fc9b9a0 1} {x43150000 x42bd1b15 x3f082180 1 x3f082180 1} {x43160000 x42bd75d6 -}} {{x42540000 x4487f427 0 1 xc15de220 1} {x42580000 x448626e6 xc1781d40 1 xc1781d40 1} {x425c0000 x448413b2 xc1870140 1 xc1870140 1} {x42600000 x4481eedc xc1883b70 1 xc1883b70 1} {x42640000 x447fa3ad xc1848620 1 xc1848620 1} {x42680000 x447b9556 xc1874a20 1 xc1874a20 1} {x426c0000 x44772f0b xc18a51d0 1 xc18a51d0 1} {x42700000 x4472f039 xc18f0740 1 xc18f0740 1} {x42740000 x446e3e97 xc19e01b0 1 xc19e01b0 1} {x42780000 x4469101e xc1ab7c60 1 xc1ab7c60 1} {x427c0000 x446386d1 xc1becd00 1 xc1becd00 1} {x42800000 x445d234e xc1cb5520 1 xc1cb5520 1} {x42820000 x4456d17f xc1c97da0 1 xc1c97da0 1} {x42840000 x44508b74 xc1c958b0 1 xc1c958b0 1} {x42860000 x444a3bf4 xc1cf5df0 1 xc1cf5df0 1} {x42880000 x44439595 xc1d11920 1 xc1d11920 1} {x428a0000 x443d2a62 xc1ce45e0 1 xc1ce45e0 1} {x428c0000 x4436b137 xc1d287b0 1 xc1d287b0 1} {x428e0000 x443001e7 xc1d87ac0 1 xc1d87ac0 1} {x42900000 x4429298b xc1df6c50 1 xc1df6c50 1} {x42920000 x44220b22 xc1dc8360 1 xc1dc8360 1} {x42940000 x441b6155 xc1d1c230 1 xc1d1c230 1} {x42960000 x4414eeff xc1c95600 1 xc1c95600 1} {x42980000 x440ecbf5 xc1bcbdd0 1 xc1bcbdd0 1} {x429a0000 x44092322 xc1b17e70 1 xc1b17e70 1} {x429c0000 x4403b40e xc1ac1d70 1 xc1ac1d70 1} {x429e0000 x43fcc296 xc1a9d0a0 1 xc1a9d0a0 1} {x42a00000 x43f22e08 xc1a9d660 1 xc1a9d660 1} {x42a20000 x43e787ca xc1a85528 1 xc1a85528 1} {x42a40000 x43dd2363 xc19f3cd8 1 xc19f3cd8 1} {x42a60000 x43d3a02f xc1a08460 1 xc1a08460 1} {x42a80000 x43c912d7 xc1ab2450 1 xc1ab2450 1} {x42aa0000 x43be3ba5 xc1aa8cc8 1 xc1aa8cc8 1} {x42ac0000 x43b3c13e xc1a698d0 1 xc1a698d0 1} {x42ae0000 x43a9688b xc1a45f00 1 xc1a45f00 1} {x42b00000 x439f355e xc1a42f08 1 xc1a42f08 1} {x42b20000 x4394e2aa xc1a66098 1 xc1a66098 1} {x42b40000 x438a694b xc1a89a08 1 xc1a89a08 1} {x42b60000 x437f9ed2 xc1aa21d4 1 xc1aa21d4 1} {x42b80000 x436a4a21 xc1a7c5fc 1 xc1a7c5fc 1} {x42ba0000 x4355ad53 xc1a0b538 1 xc1a0b538 1} {x42bc0000 x43421cd3 xc1987144 1 xc1987144 1} {x42be0000 x432f9102 xc18e9af0 1 xc18e9af0 1} {x42c00000 x431e7617 xc183a814 1 xc183a814 1} {x42c20000 x430ea6fd xc170da80 1 xc170da80 1} {x42c40000 x43005ac7 xc160bba0 1 xc160bba0 1} {x42c60000 x42e51f12 xc15ce0bc 1 xc15ce0bc 1} {x42c80000 x42c97d5f xc15dbbc4 1 xc15dbbc4 1} {x42ca0000 x42adb021 xc15a1ed8 1 xc15a1ed8 1} {x42cc0000 x4292f5a9 xc13ec888 1 xc13ec888 1} {x42ce0000 x427bfbfe xc13029a6 1 xc13029a6 1} {x42d00000 x424dd67f xc13f2b82 1 xc13f2b82 1} {x42d20000 x421c663d xc1387233 1 xc1387233 1} {x42d40000 x41e33acb xc12519f6 1 xc12519f6 1} {x42d60000 x4193b284 xc1140884 1 xc1140884 1} {x42d80000 x411e648f xc1028889 1 xc1028889 1} {x42da0000 x40094fda xc0ef65ca 1 xc0ef65ca 1} {x42dc0000 xc0a20275 xc0d6d186 1 xc0d6d186 1} {x42de0000 xc1347d8f xc0abd680 1 xc0abd680 1} {x42e00000 xc17cd7ba xc06a48de 1 xc06a48de 1} {x42e20000 xc194d0ff xc00aa084 1 xc00aa084 1} {x42e40000 xc1a113fe xbf8be0f0 1 xbf8be0f0 1} {x42e60000 xc1a64d1d -} {x42e80000 xc19ee819 x3f9afaf0 1 x3f9afaf0 1} {x42ea0000 xc192edbf x3fb70a10 1 x3fb70a10 1} {x42ec0000 xc18806d7 x3fc9cb48 1 x3fc9cb48 1} {x42ee0000 xc17368ac x3fde7118 1 x3fde7118 1} {x42f00000 xc1587168 x3fd00818 1 x3fd00818 1} {x42f20000 xc13f66a6 x3fc1cd90 1 x3fc1cd90 1} {x42f40000 xc127fe04 x3fc54d68 1 x3fc54d68 1} {x42f60000 xc10e134c x3ffd1812 1 x3ffd1812 1} {x42f80000 xc0d16fff x4029acd3 1 x4029acd3 1} {x42fa0000 xc064f38a x40516fff 1 x40516fff 1} {x42fc0000 0 x407708e3 1 x407708e3 1} {x42fe0000 x40848f1e x4081e40d 1 x4081e40d 1} {x43000000 x4101e40d x408173f4 1 x408173f4 1} {x43010000 x4143bb83 x408c0b05 1 x408c0b05 1} {x43020000 x4186f789 x409a7ea3 1 x409a7ea3 1} {x43030000 x41af1d13 x40a5d9ca 1 x40a5d9ca 1} {x43040000 x41d9e46e x40ad1492 1 x40ad1492 1} {x43050000 x4202d3ae x40c1dcd0 1 x40c1dcd0 1} {x43060000 x421d696b x40edbc78 1 x40edbc78 1} {x43070000 x423e42cc x40eccc38 1 x40eccc38 1} {x43080000 x42589c79 x40dbf70c 1 x40dbf70c 1} {x43090000 x4275408f x40e44694 1 x40e44694 1} {x430a0000 x4288d70f x40db6c24 1 x40db6c24 1} {x430b0000 x42960dcc x40d00318 1 x40d00318 1} {x430c0000 x42a2d772 x40d301d8 1 x40d301d8 1} {x430d0000 x42b06e07 x40e1f3d0 1 x40e1f3d0 1} {x430e0000 x42bf15ec x40e87950 1 x40e87950 1} {x430f0000 x42cd7d31 x40e2b340 1 x40e2b340 1} {x43100000 x42db6c54 x40dcd840 1 x40dcd840 1} {x43110000 x42e91839 x40d56a50 1 x40d56a50 1} {x43120000 x42f6199e x40c59bd8 1 x40c59bd8 1} {x43130000 x4300e5da x40b45ea0 1 x40b45ea0 1} {x43140000 x430652b9 x40a1b7a0 1 x40a1b7a0 1} {x43150000 x430b0154 x406a3300 1 x406a3300 1} {x43160000 x430da451 x40080560 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke117 262656 bezier {cc {f 8224} {p {0 0 1} {x44643dc3 x43fe5f5c 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke118 262656 bezier {cc {f 8224} {p {0 0 1} {x44643dc3 x43fe5f5c 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3cea921 0 1 x40cc20e0 1} {x42580000 xc3cb5607 x40e611c0 1 x40e611c0 1} {x425c0000 xc3c77893 x4105f1a0 1 x4105f1a0 1} {x42600000 xc3c2f6ed x411f6eb0 1 x411f6eb0 1} {x42640000 xc3bd81a8 x412f3c00 1 x412f3c00 1} {x42680000 xc3b8032d x412c9370 1 x412c9370 1} {x426c0000 xc3b2b871 x41238e60 1 x41238e60 1} {x42700000 xc3adca47 x4125bc30 1 x4125bc30 1} {x42740000 xc3a85cae x412971e0 1 x412971e0 1} {x42780000 xc3a33329 x411c82f0 1 x411c82f0 1} {x427c0000 xc39e947f x411f6ba0 1 x411f6ba0 1} {x42800000 xc3993c6f x41244260 1 x41244260 1} {x42820000 xc3945059 x410fe830 1 x410fe830 1} {x42840000 xc3903dec x40f86280 1 x40f86280 1} {x42860000 xc38c8d45 x40f6ae40 1 x40f6ae40 1} {x42880000 xc388887a x41026d00 1 x41026d00 1} {x428a0000 xc3846675 x40fbcbc0 1 x40fbcbc0 1} {x428c0000 xc380aa1c x40e62f50 1 x40e62f50 1} {x428e0000 xc37a69f5 x40e29360 1 x40e29360 1} {x42900000 xc3732b02 x40f0be40 1 x40f0be40 1} {x42920000 xc36b5e11 x40ea8e50 1 x40ea8e50 1} {x42940000 xc364821d x40c7b260 1 x40c7b260 1} {x42960000 xc35ee2eb x40a6f7e0 1 x40a6f7e0 1} {x42980000 xc35a129f x409604a0 1 x409604a0 1} {x429a0000 xc35582a1 x4089e700 1 x4089e700 1} {x429c0000 xc351742f x40770b40 1 x40770b40 1} {x429e0000 xc34dca47 x406b96e0 1 x406b96e0 1} {x42a00000 xc34a1778 x407b2060 1 x407b2060 1} {x42a20000 xc345f144 x40947b50 1 x40947b50 1} {x42a40000 xc340cfc3 x40ba9860 1 x40ba9860 1} {x42a60000 xc33a47be x40b26440 1 x40b26440 1} {x42a80000 xc335a97f x40956560 1 x40956560 1} {x42aa0000 xc330f168 x4092f680 1 x4092f680 1} {x42ac0000 xc32c7a17 x407a8520 1 x407a8520 1} {x42ae0000 xc3291d3f x403d5660 1 x403d5660 1} {x42b00000 xc3268f64 x400dfa20 1 x400dfa20 1} {x42b20000 xc324ad6e x3fe10bc0 1 x3fe10bc0 1} {x42b40000 xc3230b35 x3fd77cc0 1 x3fd77cc0 1} {x42b60000 xc3214f7b x3febe040 1 x3febe040 1} {x42b80000 xc31f5bb4 x3ff016c0 1 x3ff016c0 1} {x42ba0000 xc31d8f20 x3fe638c0 1 x3fe638c0 1} {x42bc0000 xc31bc2d1 x3fea0bc0 1 x3fea0bc0 1} {x42be0000 xc319e6f1 x3fe50d40 1 x3fe50d40 1} {x42c00000 xc3182e9c x3fe29e00 1 x3fe29e00 1} {x42c20000 xc3165c79 x404e8380 1 x404e8380 1} {x42c40000 xc311ba80 x409ada90 1 x409ada90 1} {x42c60000 xc30caed0 x40a3e3f0 1 x40a3e3f0 1} {x42c80000 xc3077c41 x40a53e20 1 x40a53e20 1} {x42ca0000 xc3025aee x40a67388 1 x40a67388 1} {x42cc0000 xc2fa2a11 x40a4d0d0 1 x40a4d0d0 1} {x42ce0000 xc2f01bc2 x4098f580 1 x4098f580 1} {x42d00000 xc2e70b61 x4087a0f8 1 x4087a0f8 1} {x42d20000 xc2df27a3 x40771cb0 1 x40771cb0 1} {x42d40000 xc2d79996 x4074bed0 1 x4074bed0 1} {x42d60000 xc2cfdbb6 x40702190 1 x40702190 1} {x42d80000 xc2c8977d x4067c5c0 1 x4067c5c0 1} {x42da0000 xc2c15f5a x406a5c50 1 x406a5c50 1} {x42dc0000 xc2b9f1b8 x4075dea0 1 x4075dea0 1} {x42de0000 xc2b20170 x40826400 1 x40826400 1} {x42e00000 xc2a9a538 x40874398 1 x40874398 1} {x42e20000 xc2a118fd x40883318 1 x40883318 1} {x42e40000 xc2989ed5 x40896360 1 x40896360 1} {x42e60000 xc28fec91 x408ed980 1 x408ed980 1} {x42e80000 xc286c3a5 x4098b4b0 1 x4098b4b0 1} {x42ea0000 xc279abf6 x40a3f458 1 x40a3f458 1} {x42ec0000 xc2648a34 x40b7433c 1 x40b7433c 1} {x42ee0000 xc24bdb27 x40c4cc8c 1 x40c4cc8c 1} {x42f00000 xc2335711 x40d6b334 1 x40d6b334 1} {x42f20000 xc2162e5a x40e8b6a8 1 x40e8b6a8 1} {x42f40000 xc1f252ce x40f35aca 1 x40f35aca 1} {x42f60000 xc1b2af4f x40f48952 1 x40f48952 1} {x42f80000 xc1701c4a x40ee4dbb 1 x40ee4dbb 1} {x42fa0000 xc0ee21c6 x40f01c4a 1 x40f01c4a 1} {x42fc0000 0 x40f5b92c 1 x40f5b92c 1} {x42fe0000 x40fd5093 x40f90e29 1 x40f90e29 1} {x43000000 x41790e29 x40f04118 1 x40f04118 1} {x43010000 x41b774b1 x40e6b19b 1 x40e6b19b 1} {x43020000 x41efdfe2 x40dbfb36 1 x40dbfb36 1} {x43030000 x4212b926 x40ce6918 1 x40ce6918 1} {x43040000 x422b8a37 x40bce4f4 1 x40bce4f4 1} {x43050000 x4241f263 x40afd658 1 x40afd658 1} {x43060000 x42577fcd x40a4fd00 1 x40a4fd00 1} {x43070000 x426b31a3 x4087ca60 1 x4087ca60 1} {x43080000 x42797265 x405f8dd8 1 x405f8dd8 1} {x43090000 x428391af x4051ee48 1 x4051ee48 1} {x430a0000 x4289d817 x403dea60 1 x403dea60 1} {x430b0000 x428f7055 x402af010 1 x402af010 1} {x430c0000 x42948718 x401f42b0 1 x401f42b0 1} {x430d0000 x42996480 x401b1150 1 x401b1150 1} {x430e0000 x429e382d x40222be0 1 x40222be0 1} {x430f0000 x42a3873e x40306590 1 x40306590 1} {x43100000 x42a93e86 x40383320 1 x40383320 1} {x43110000 x42af0a70 x403707c0 1 x403707c0 1} {x43120000 x42b4af02 x40304d30 1 x40304d30 1} {x43130000 x42ba0f43 x401a7af0 1 x401a7af0 1} {x43140000 x42be56b1 x3fd60080 1 x3fd60080 1} {x43150000 x42c0bf47 x3f3bcc80 1 x3f3bcc80 1} {x43160000 x42c145e3 x3ce1d800 1 0 1}} {{x42540000 x4487f54d 0 1 xc15dbf20 1} {x42580000 x4486285b xc177ecc0 1 xc177ecc0 1} {x425c0000 x4484159a xc186e1a0 1 xc186e1a0 1} {x42600000 x4481f14e xc1881ac0 1 xc1881ac0 1} {x42640000 x447fa988 xc1847fc0 1 xc1847fc0 1} {x42680000 x447b9aa0 xc18745b0 1 xc18745b0 1} {x426c0000 x4477352d xc18a5e80 1 xc18a5e80 1} {x42700000 x4472f4b8 xc18f23e0 1 xc18f23e0 1} {x42740000 x446e42ef xc19fec90 1 xc19fec90 1} {x42780000 x4468f5ef xc1b0db60 1 xc1b0db60 1} {x427c0000 x44633539 xc1c24320 1 xc1c24320 1} {x42800000 x445cd1bd xc1cb5710 1 xc1cb5710 1} {x42820000 x44567fc8 xc1c98df0 1 xc1c98df0 1} {x42840000 x445038de xc1c95e50 1 xc1c95e50 1} {x42860000 x4449e9e3 xc1cf49c0 1 xc1cf49c0 1} {x42880000 x44434442 xc1d11d10 1 xc1d11d10 1} {x428a0000 x443cd812 xc1ce56f0 1 xc1ce56f0 1} {x428c0000 x44365ed3 xc1d21220 1 xc1d21220 1} {x428e0000 x442fb6f0 xc1d730e0 1 xc1d730e0 1} {x42900000 x4428ebc5 xc1de6410 1 xc1de6410 1} {x42920000 x4421d0af xc1dc36e0 1 xc1dc36e0 1} {x42940000 x441b2857 xc1d13530 1 xc1d13530 1} {x42960000 x4414bd5c xc1c8a710 1 xc1c8a710 1} {x42980000 x440e9de6 xc1bccdb0 1 xc1bccdb0 1} {x429a0000 x4408f081 xc1b1ef80 1 xc1b1ef80 1} {x429c0000 x44037eee xc1ac4020 1 xc1ac4020 1} {x429e0000 x43fc58fe xc1aa02b0 1 xc1aa02b0 1} {x42a00000 x43f1bd86 xc1aa47e0 1 xc1aa47e0 1} {x42a20000 x43e71002 xc1a95988 1 xc1a95988 1} {x42a40000 x43dc9255 xc1a18d78 1 xc1a18d78 1} {x42a60000 x43d2de53 xc1a13808 1 xc1a13808 1} {x42a80000 x43c86b54 xc1aab528 1 xc1aab528 1} {x42aa0000 x43bd87ae xc1aa0480 1 xc1aa0480 1} {x42ac0000 x43b32ac4 xc1a5e300 1 xc1a5e300 1} {x42ae0000 x43a8cb4e xc1a43948 1 xc1a43948 1} {x42b00000 x439ea39b xc1a39368 1 xc1a39368 1} {x42b20000 x439458e1 xc1a581b0 1 xc1a581b0 1} {x42b40000 x4389f365 xc1a78ed0 1 xc1a78ed0 1} {x42b60000 x437ece0e xc1a9f71c 1 xc1a9f71c 1} {x42b80000 x43696903 xc1a80774 1 xc1a80774 1} {x42ba0000 x4354cc31 xc1a1779c 1 xc1a1779c 1} {x42bc0000 x43410b1c xc1993c5c 1 xc1993c5c 1} {x42be0000 x432e7d1a xc18e8e70 1 xc18e8e70 1} {x42c00000 x431d6780 xc1837628 1 xc1837628 1} {x42c20000 x430d9f90 xc1714ef8 1 xc1714ef8 1} {x42c40000 x42fe7b42 xc1630358 1 xc1630358 1} {x42c60000 x42e27e4a xc15e2204 1 xc15e2204 1} {x42c80000 x42c6f2c1 xc15d96d4 1 xc15d96d4 1} {x42ca0000 x42ab1895 xc15c6db4 1 xc15c6db4 1} {x42cc0000 x428fd754 xc143af06 1 xc143af06 1} {x42ce0000 x427459a7 xc1311c14 1 xc1311c14 1} {x42d00000 x4247209e xc133b770 1 xc133b770 1} {x42d20000 x421a7def xc12c1c92 1 xc12c1c92 1} {x42d40000 x41e224aa xc11e47b5 1 xc11e47b5 1} {x42d60000 x4196b429 xc10ed292 1 xc10ed292 1} {x42d80000 x4126a431 xc1028148 1 xc1028148 1} {x42da0000 x4021970a xc0f4bf70 1 xc0f4bf70 1} {x42dc0000 xc09c367d xc0d97702 1 xc0d97702 1} {x42de0000 xc1311140 xc0a7f77c 1 xc0a7f77c 1} {x42e00000 xc17612ba xc05f42cc 1 xc05f42cc 1} {x42e20000 xc1905953 xc00365ac 1 xc00365ac 1} {x42e40000 xc19be2c8 xbf40d140 1 xbf40d140 1} {x42e60000 xc19de4f6 -} {x42e80000 xc196d061 x3f96d608 1 x3f96d608 1} {x42ea0000 xc18b0a35 x3fb3e900 1 x3fb3e900 1} {x42ec0000 xc1805341 x3fac6e04 1 x3fac6e04 1} {x42ee0000 xc16af8e9 x3fcf9278 1 x3fcf9278 1} {x42f00000 xc14cc1e4 x3fc2c064 1 x3fc2c064 1} {x42f20000 xc13a48d0 x3fb6e658 1 x3fb6e658 1} {x42f40000 xc11f084e x3fcabf00 1 x3fcabf00 1} {x42f60000 xc1079910 x3fff81e2 1 x3fff81e2 1} {x42f80000 xc0be4fab x401f76a6 1 x401f76a6 1} {x42fa0000 xc05f76f3 x403e4fab 1 x403e4fab 1} {x42fc0000 0 x40643fe5 1 x40643fe5 1} {x42fe0000 x406908d7 x406aca73 1 x406aca73 1} {x43000000 x40eaca73 x40711210 1 x40711210 1} {x43010000 x4132cb3e x4082ce96 1 x4082ce96 1} {x43020000 x417833cf x4090fb82 1 x4090fb82 1} {x43030000 x41a1e360 x409c3f81 1 x409c3f81 1} {x43040000 x41ca39a8 x40a473ba 1 x40a473ba 1} {x43050000 x41f41d3d x40bd8fa0 1 x40bd8fa0 1} {x43060000 x421480bc x40e9991e 1 x40e9991e 1} {x43070000 x423474e6 x40e80234 1 x40e80234 1} {x43080000 x424e8149 x40d4cd60 1 x40d4cd60 1} {x43090000 x4269a83e x40d74d7c 1 x40d74d7c 1} {x430a0000 x42822a54 x40ceecc0 1 x40ceecc0 1} {x430b0000 x428eb1b7 x40c502a8 1 x40c502a8 1} {x430c0000 x429acaa9 x40c78d90 1 x40c78d90 1} {x430d0000 x42a7a369 x40d2bc30 1 x40d2bc30 1} {x430e0000 x42b5222f x40d63310 1 x40d63310 1} {x430f0000 x42c269cb x40d1a070 1 x40d1a070 1} {x43100000 x42cf563d x40cdb3a8 1 x40cdb3a8 1} {x43110000 x42dc2040 x40c773d8 1 x40c773d8 1} {x43120000 x42e844b8 x40ba8650 1 x40ba8650 1} {x43130000 x42f3710a x40aa25d8 1 x40aa25d8 1} {x43140000 x42fd8973 x4096d540 1 x4096d540 1} {x43150000 x430325d9 x4053c390 1 x4053c390 1} {x43160000 x430562d6 x3fd9fa30 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke119 262656 bezier {cc {f 8224} {p {0 0 1} {x44bd1b2b x4450e71b 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke120 262656 bezier {cc {f 8224} {p {0 0 1} {x44bd1b2b x4450e71b 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc3a84fdc 0 1 x40dea120 1} {x42580000 xc3a4b273 x40f8cc80 1 x40f8cc80 1} {x425c0000 xc3a08978 x40e88ac0 1 x40e88ac0 1} {x42600000 xc39d6e1d x40fef5a0 1 x40fef5a0 1} {x42640000 xc39891cb x41173710 1 x41173710 1} {x42680000 xc393faac x410b3940 1 x410b3940 1} {x426c0000 xc38fde37 x410ef310 1 x410ef310 1} {x42700000 xc38b0b7b x4118eae0 1 x4118eae0 1} {x42740000 xc3864f89 x410d2b30 1 x410d2b30 1} {x42780000 xc38238c8 x4104dcd8 1 x4104dcd8 1} {x427c0000 xc37c0377 x41062b18 1 x41062b18 1} {x42800000 xc373ac2d x41017070 1 x41017070 1} {x42820000 xc36bd569 x40ef5680 1 x40ef5680 1} {x42840000 xc364b6c5 x40d384f0 1 x40d384f0 1} {x42860000 xc35e9d1a x40d7ee70 1 x40d7ee70 1} {x42880000 xc35737de x40d9b160 1 x40d9b160 1} {x428a0000 xc3510204 x40d5e9d0 1 x40d5e9d0 1} {x428c0000 xc349d941 x40cbd690 1 x40cbd690 1} {x428e0000 xc344449b x40b33e90 1 x40b33e90 1} {x42900000 xc33ea558 x40d85c80 1 x40d85c80 1} {x42920000 xc336bed3 x40e46a30 1 x40e46a30 1} {x42940000 xc3305eb5 x40bc9710 1 x40bc9710 1} {x42960000 xc32af562 x40a229c0 1 x40a229c0 1} {x42980000 xc3263c19 x409bf480 1 x409bf480 1} {x429a0000 xc321361a x408cafa0 1 x408cafa0 1} {x429c0000 xc31d711f x406a22a0 1 x406a22a0 1} {x429e0000 xc319e505 x4056b0c0 1 x4056b0c0 1} {x42a00000 xc316bb99 x404aeea0 1 x404aeea0 1} {x42a20000 xc3138d90 x40849a90 1 x40849a90 1} {x42a40000 xc30e71f0 x408b54d0 1 x408b54d0 1} {x42a60000 xc30ad843 x407a8c20 1 x407a8c20 1} {x42a80000 xc3069d8f x40973280 1 x40973280 1} {x42aa0000 xc301651b x4089baf8 1 x4089baf8 1} {x42ac0000 xc2fc03bf x402b4600 1 x402b4600 1} {x42ae0000 xc2f815d6 x3fd217c0 1 x3fd217c0 1} {x42b00000 xc2f57301 -} {x42b20000 xc2f5969a -} {x42b40000 xc2f4ce27 -} {x42b60000 xc2f50443 -} {x42b80000 xc2f4d0f0 x3e8bba80 1 x3e8bba80 1} {x42ba0000 xc2f3ecce x3eb7f480 1 x3eb7f480 1} {x42bc0000 xc2f36107 x3dfc6c00 1 x3dfc6c00 1} {x42be0000 xc2f34bfe -} {x42c00000 xc2f3a830 xbe942f00 1 xbe942f00 1} {x42c20000 xc2f4745c -} {x42c40000 xc2ef9372 x401b85a0 1 x401b85a0 1} {x42c60000 xc2eabc02 x40350640 1 x40350640 1} {x42c80000 xc2e4430e x403fa530 1 x403fa530 1} {x42ca0000 xc2dec1af x402c57f0 1 x402c57f0 1} {x42cc0000 xc2d97d8f x40301ed0 1 x40301ed0 1} {x42ce0000 xc2d3bfc2 x402a6850 1 x402a6850 1} {x42d00000 xc2ced70a x401e6a90 1 x401e6a90 1} {x42d20000 xc2c9d919 x400ea770 1 x400ea770 1} {x42d40000 xc2c5ec93 x400b8b80 1 x400b8b80 1} {x42d60000 xc2c12061 x4021a7c0 1 x4021a7c0 1} {x42d80000 xc2bbd217 x4034b1e0 1 x4034b1e0 1} {x42da0000 xc2b5d543 x404c1050 1 x404c1050 1} {x42dc0000 xc2af1112 x405ef860 1 x405ef860 1} {x42de0000 xc2a7e5bd x40772c10 1 x40772c10 1} {x42e00000 xc29f9e51 x4085d9e0 1 x4085d9e0 1} {x42e20000 xc2972a81 x408ab188 1 x408ab188 1} {x42e40000 xc28e4820 x4090f7a8 1 x4090f7a8 1} {x42e60000 xc2850b8c x4098a538 1 x4098a538 1} {x42e80000 xc27666f2 x40982ef8 1 x40982ef8 1} {x42ea0000 xc2640b5a x40a36524 1 x40a36524 1} {x42ec0000 xc24d8da9 x40b5a3b8 1 x40b5a3b8 1} {x42ee0000 xc236a26c x40b64ca4 1 x40b64ca4 1} {x42f00000 xc21ffa80 x40c7542c 1 x40c7542c 1} {x42f20000 xc204cd61 x40d28c4e 1 x40d28c4e 1} {x42f40000 xc1d6aed9 x40daa652 1 x40daa652 1} {x42f60000 xc19c4799 x40da7f43 1 x40da7f43 1} {x42f80000 xc152de6f x40d66e28 1 x40d66e28 1} {x42fa0000 xc0c44215 x40d2de6f 1 x40d2de6f 1} {x42fc0000 0 x40d1105c 1 x40d1105c 1} {x42fe0000 x40dddea4 x40d40b0b 1 x40d40b0b 1} {x43000000 x41540b0b x40c4223a 1 x40c4223a 1} {x43010000 x419988c6 x40b74553 1 x40b74553 1} {x43020000 x41c5a82f x40a8cde4 1 x40a8cde4 1} {x43030000 x41edefb8 x409b8a52 1 x409b8a52 1} {x43040000 x4209b6ac x408d44f0 1 x408d44f0 1} {x43050000 x421a4918 x40769150 1 x40769150 1} {x43060000 x422888d6 x40502348 1 x40502348 1} {x43070000 x42344d81 x4034b4e8 1 x4034b4e8 1} {x43080000 x423f1f73 x40213b78 1 x40213b78 1} {x43090000 x424874f0 x40179260 1 x40179260 1} {x430a0000 x425211bf x402316c0 1 x402316c0 1} {x430b0000 x425cd7c8 x401ede10 1 x401ede10 1} {x430c0000 x4265ed81 x400dee50 1 x400dee50 1} {x430d0000 x426e9592 x400f65b0 1 x400f65b0 1} {x430e0000 x4277da37 x4023e860 1 x4023e860 1} {x430f0000 x4281894f x40289ce8 1 x40289ce8 1} {x43100000 x428676ea x40207a90 1 x40207a90 1} {x43110000 x428b90f8 x40249040 1 x40249040 1} {x43120000 x4290bfee x40191500 1 x40191500 1} {x43130000 x42952248 x40098630 1 x40098630 1} {x43140000 x42995851 x3fbda6e0 1 x3fbda6e0 1} {x43150000 x429b0f7f -} {x43160000 x429aaeff xbe90c000 1 0 1}} {{x42540000 x44647d33 0 1 xc1172750 1} {x42580000 x44622bb9 xc10ecce0 1 xc10ecce0 1} {x425c0000 x446006cc xc112c920 1 xc112c920 1} {x42600000 x445d9570 xc14aea80 1 xc14aea80 1} {x42640000 x4459af78 xc17e9e00 1 xc17e9e00 1} {x42680000 x4455a080 xc1847a10 1 xc1847a10 1} {x426c0000 x445167d7 xc17d2ac0 1 xc17d2ac0 1} {x42700000 x444db72a xc1712460 1 xc1712460 1} {x42740000 x4449deb4 xc1770000 1 xc1770000 1} {x42780000 x4445ff2a xc17fe940 1 xc17fe940 1} {x427c0000 x4441df6a xc18c4cc0 1 xc18c4cc0 1} {x42800000 x443d3a5e xc195de40 1 xc195de40 1} {x42820000 x44388186 xc1980fe0 1 xc1980fe0 1} {x42840000 x4433b960 xc19ca530 1 xc19ca530 1} {x42860000 x442eb733 xc1a2e1b0 1 xc1a2e1b0 1} {x42880000 x44298b45 xc19bf510 1 xc19bf510 1} {x428a0000 x4424f7e2 xc19b85b0 1 xc19b85b0 1} {x428c0000 x441fd2ea xc19a32c0 1 xc19a32c0 1} {x428e0000 x441b54b6 xc1930670 1 xc1930670 1} {x42900000 x4416a283 xc1a67f70 1 xc1a67f70 1} {x42920000 x4410ecbf xc1b39ca0 1 xc1b39ca0 1} {x42940000 x440b68b9 xc1a65e90 1 xc1a65e90 1} {x42960000 x440686d6 xc197b550 1 xc197b550 1} {x42980000 x4401ed64 xc189ef48 1 xc189ef48 1} {x429a0000 x43fbcfc3 xc17aa5d0 1 xc17aa5d0 1} {x429c0000 x43f4306b xc16be900 1 xc16be900 1} {x429e0000 x43ed1133 xc16b0ab0 1 xc16b0ab0 1} {x42a00000 x43e57fc0 xc1831d18 1 xc1831d18 1} {x42a20000 x43dcad90 xc18fd400 1 xc18fd400 1} {x42a40000 x43d38540 xc18e3168 1 xc18e3168 1} {x42a60000 x43cae763 xc1918bb0 1 xc1918bb0 1} {x42a80000 x43c153ca xc19b6df0 1 xc19b6df0 1} {x42aa0000 x43b779a5 xc192b768 1 xc192b768 1} {x42ac0000 x43aefcdd xc185b230 1 xc185b230 1} {x42ae0000 x43a6c35f xc1849618 1 xc1849618 1} {x42b00000 x439e6a1a xc182ae70 1 xc182ae70 1} {x42b20000 x43966d91 xc18696a8 1 xc18696a8 1} {x42b40000 x438d9745 xc1900650 1 xc1900650 1} {x42b60000 x43846cc7 xc192295c 1 xc192295c 1} {x42b80000 x4376a433 xc192bcb8 1 xc192bcb8 1} {x42ba0000 x43642a60 xc18f1d08 1 xc18f1d08 1} {x42bc0000 x4352dcf1 xc182a04c 1 xc182a04c 1} {x42be0000 x4343824d xc163f2c8 1 xc163f2c8 1} {x42c00000 x43365e98 xc145cf90 1 xc145cf90 1} {x42c20000 x432ac85b xc1300198 1 xc1300198 1} {x42c40000 x43205e65 xc12d4758 1 xc12d4758 1} {x42c60000 x43151f70 xc13c69a0 1 xc13c69a0 1} {x42c80000 x4308d131 xc13be3b8 1 xc13be3b8 1} {x42ca0000 x42fb45f2 xc12ce160 1 xc12ce160 1} {x42cc0000 x42e66a0a xc1305e58 1 xc1305e58 1} {x42ce0000 x42cf2e5c xc13161e0 1 xc13161e0 1} {x42d00000 x42ba1192 xc11b8300 1 xc11b8300 1} {x42d20000 x42a84d9c xc10585f0 1 xc10585f0 1} {x42d40000 x4298b016 xc0f8df30 1 xc0f8df30 1} {x42d60000 x428931b6 xc0efb23c 1 xc0efb23c 1} {x42d80000 x4275739d xc0ea0498 1 xc0ea0498 1} {x42da0000 x4257e246 xc0eec88c 1 xc0eec88c 1} {x42dc0000 x4239c17a xc0ec35c4 1 xc0ec35c4 1} {x42de0000 x421cd4d5 xc0d3c1fc 1 xc0d3c1fc 1} {x42e00000 x4204d0fb xc0b2795c 1 xc0b2795c 1} {x42e20000 x41e06cfc xc09812be 1 xc09812be 1} {x42e40000 x41bd9897 xc0815250 1 xc0815250 1} {x42e60000 x419fc3d4 xc04b2e78 1 xc04b2e78 1} {x42e80000 x418accf9 xc013c79a 1 xc013c79a 1} {x42ea0000 x4175a3db xc010dc74 1 xc010dc74 1} {x42ec0000 x414d2bb8 xc0144f4a 1 xc0144f4a 1} {x42ee0000 x412b7c36 xbff79c20 1 xbff79c20 1} {x42f00000 x410f44b0 xc001f0bc 1 xc001f0bc 1} {x42f20000 x40d507b0 xc0043b49 1 xc0043b49 1} {x42f40000 x409a4e17 xbff43181 1 xbff43181 1} {x42f60000 x4035dddf xbfbec50d 1 xbfbec50d 1} {x42f80000 x3febae42 xbf8ec282 1 xbf8ec282 1} {x42fa0000 x3f1c6d75 xbf6bae42 1 xbf6bae42 1} {x42fc0000 0 xbf0ba33e 1 xbf0ba33e 1} {x42fe0000 xbef5b210 xbee094ac 1 xbee094ac 1} {x43000000 xbf6094ac -} {x43010000 xbf340f89 x3ea8e710 1 x3ea8e710 1} {x43020000 xbe5eb66e x3f5982fa 1 x3f5982fa 1} {x43030000 x3f7ef66c x3fb17cfa 1 x3fb17cfa 1} {x43040000 x40239193 x3fbd09f2 1 x3fbd09f2 1} {x43050000 x407cc78d x3ff04479 1 x3ff04479 1} {x43060000 x40c9eb06 x3ffc22ab 1 x3ffc22ab 1} {x43070000 x40fc751c x4000bf76 1 x4000bf76 1} {x43080000 x4125553e x401d2c4e 1 x401d2c4e 1} {x43090000 x414cd0b5 x401a6b7e 1 x401a6b7e 1} {x430a0000 x41728afd x40078872 1 x40078872 1} {x430b0000 x41884a77 x3feb454c 1 x3feb454c 1} {x430c0000 x4196ae28 x400060cc 1 x400060cc 1} {x430d0000 x41a862aa x4005d620 1 x4005d620 1} {x430e0000 x41b823b0 x3fec8348 1 x3fec8348 1} {x430f0000 x41c5f313 x3ffcd510 1 x3ffcd510 1} {x43100000 x41d7be52 x40052d18 1 x40052d18 1} {x43110000 x41e73e59 x400c2704 1 x400c2704 1} {x43120000 x41fac813 x40021224 1 x40021224 1} {x43130000 x4203e171 x3fa0fbd8 1 x3fa0fbd8 1} {x43140000 x420773c7 x3f2bdb20 1 x3f2bdb20 1} {x43150000 x4209404a -} {x43160000 x4206b8f4 xbf72c040 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke121 262656 bezier {cc {f 8224} {p {0 0 1} {x44cef960 x441d8396 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke122 262656 bezier {cc {f 8224} {p {0 0 1} {x44cef960 x441d8396 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc34802f8 0 1 x40dc2a80 1} {x42580000 xc340db52 x40f68940 1 x40f68940 1} {x425c0000 xc3389a64 x40e65040 1 x40e65040 1} {x42600000 xc332764e x40c60850 1 x40c60850 1} {x42640000 xc32c39df x40d96d60 1 x40d96d60 1} {x42680000 xc324df78 x40df1da0 1 x40df1da0 1} {x426c0000 xc31e4805 x40cf6770 1 x40cf6770 1} {x42700000 xc317e901 x40cb0410 1 x40cb0410 1} {x42740000 xc31197c4 x40be6fc0 1 x40be6fc0 1} {x42780000 xc30c0205 x40c70c70 1 x40c70c70 1} {x427c0000 xc30526fd x40de4368 1 x40de4368 1} {x42800000 xc2fc3b9d x40db3cf0 1 x40db3cf0 1} {x42820000 xc2eee65c x40bf9088 1 x40bf9088 1} {x42840000 xc2e4498c x40a1e200 1 x40a1e200 1} {x42860000 xc2daaa1c x409ba2d0 1 x409ba2d0 1} {x42880000 xc2d0d532 x409d7628 1 x409d7628 1} {x428a0000 xc2c6fb57 x4099b7e0 1 x4099b7e0 1} {x428c0000 xc2bd9e36 x40986750 1 x40986750 1} {x428e0000 xc2b3ee6d x409e6aa8 1 x409e6aa8 1} {x42900000 xc2a9d0e1 x40a73d38 1 x40a73d38 1} {x42920000 xc29f06c6 x40a4cd38 1 x40a4cd38 1} {x42940000 xc295373a x409657f0 1 x409657f0 1} {x42960000 xc28c3bc8 x408ee780 1 x408ee780 1} {x42980000 xc2835a4a x40886b4c 1 x40886b4c 1} {x429a0000 xc2765cbd x4077f158 1 x4077f158 1} {x429c0000 xc267b669 x40313778 1 x40313778 1} {x429e0000 xc26035ce x3fc8fe70 1 x3fc8fe70 1} {x42a00000 xc25b2682 x3fdbde40 1 x3fdbde40 1} {x42a20000 xc25277ea x400230d8 1 x400230d8 1} {x42a40000 xc24ae067 x3ff4c110 1 x3ff4c110 1} {x42a60000 xc2432bd9 x3fd22dd0 1 x3fd22dd0 1} {x42a80000 xc23dbd8a x3fb663c0 1 x3fb663c0 1} {x42aa0000 xc237c59d x3f954160 1 x3f954160 1} {x42ac0000 xc2346974 -} {x42ae0000 xc234e0c3 xbeb2f680 1 xbeb2f680 1} {x42b00000 xc238b245 xbf88f150 1 xbf88f150 1} {x42b20000 xc23d6fd8 xbfa5f4b0 1 xbfa5f4b0 1} {x42b40000 xc2431190 xbfc273f0 1 xbfc273f0 1} {x42b60000 xc2499717 xbfc24bb0 1 xbfc24bb0 1} {x42b80000 xc24f364b xbfb93220 1 xbfb93220 1} {x42ba0000 xc2552a39 xbfc069a0 1 xbfc069a0 1} {x42bc0000 xc25b3ce5 xbfc50010 1 xbfc50010 1} {x42be0000 xc2617a3a xbfc6fa80 1 xbfc6fa80 1} {x42c00000 xc267ac8d xbfe3ec00 1 xbfe3ec00 1} {x42c20000 xc26fb8fa -} {x42c40000 xc26d0c30 x3f405040 1 x3f405040 1} {x42c60000 xc269b678 x3f63c780 1 x3f63c780 1} {x42c80000 xc265edf4 x3f702ea0 1 x3f702ea0 1} {x42ca0000 xc2623503 x3f7728c0 1 x3f7728c0 1} {x42cc0000 xc25e34ae x3f940330 1 x3f940330 1} {x42ce0000 xc258f4d0 x3f84c710 1 x3f84c710 1} {x42d00000 xc255e83d x3f2e8b00 1 x3f2e8b00 1} {x42d20000 xc2538078 x3f160fc0 1 x3f160fc0 1} {x42d40000 xc25137bf x3f2a2fc0 1 x3f2a2fc0 1} {x42d60000 xc24e2efa x3cfdf800 1 x3cfdf800 1} {x42d80000 xc24e2465 x3cfdf800 1 x3cfdf800 1} {x42da0000 xc24d307d x3eeda2c0 1 x3eeda2c0 1} {x42dc0000 xc24a6dda x3f5f6440 1 x3f5f6440 1} {x42de0000 xc246355b x3fa60f10 1 x3fa60f10 1} {x42e00000 xc2400ce9 x3fd27360 1 x3fd27360 1} {x42e20000 xc2390e25 x3ffe8430 1 x3ffe8430 1} {x42e40000 xc23024a6 x400d4a18 1 x400d4a18 1} {x42e60000 xc22764e2 x40157480 1 x40157480 1} {x42e80000 xc21d7616 x401a5ff8 1 x401a5ff8 1} {x42ea0000 xc21418e3 x402ae120 1 x402ae120 1} {x42ec0000 xc20819f2 x404a53c4 1 x404a53c4 1} {x42ee0000 xc1f59cd5 x405deb7c 1 x405deb7c 1} {x42f00000 xc1d8b905 x407d70a0 1 x407d70a0 1} {x42f20000 xc1b640ad x40839d78 1 x40839d78 1} {x42f40000 xc196ea49 x40880502 1 x40880502 1} {x42f60000 xc1647c58 x4092aa9d 1 x4092aa9d 1} {x42f80000 xc11b29f5 x4091a5e0 1 x4091a5e0 1} {x42fa0000 xc0a5acef x409b29f5 1 x409b29f5 1} {x42fc0000 0 x40a93002 1 x40a93002 1} {x42fe0000 x40acb314 x40a482e2 1 x40a482e2 1} {x43000000 x412482e2 x409d812c 1 x409d812c 1} {x43010000 x4173dab6 x4099ba5a 1 x4099ba5a 1} {x43020000 x419f1e9e x408ffa9a 1 x408ffa9a 1} {x43030000 x41c1eaa8 x4084345e 1 x4084345e 1} {x43040000 x41e138cd x406cca8c 1 x406cca8c 1} {x43050000 x41fd1d4b x4053fd5c 1 x4053fd5c 1} {x43060000 x420b1c12 x402b13fc 1 x402b13fc 1} {x43070000 x4213f125 x40069700 1 x40069700 1} {x43080000 x421beef2 x3fef9940 1 x3fef9940 1} {x43090000 x4222eab9 x3fd6d9f0 1 x3fd6d9f0 1} {x430a0000 x42295c91 x3fbea4d0 1 x3fbea4d0 1} {x430b0000 x422ed506 x3fc05760 1 x3fc05760 1} {x430c0000 x42356207 x3fd24de0 1 x3fd24de0 1} {x430d0000 x423bf9e4 x3fbb5ca0 1 x3fbb5ca0 1} {x430e0000 x424117d1 x3fd5dc70 1 x3fd5dc70 1} {x430f0000 x424957ab x3fff7d20 1 x3fff7d20 1} {x43100000 x42510fa3 x40020ce8 1 x40020ce8 1} {x43110000 x42599948 x40097550 1 x40097550 1} {x43120000 x42623e4d x3fff51c0 1 x3fff51c0 1} {x43130000 x42698e64 x3fc35ce0 1 x3fc35ce0 1} {x43140000 x426e741b x3f76e680 1 x3f76e680 1} {x43150000 x42714598 -} {x43160000 x426e54e3 xbf8d21f0 1 0 1}} {{x42540000 x444ca886 0 1 xc116f840 1} {x42580000 x444a568f xc10f88c0 1 xc10f88c0 1} {x425c0000 x44482c40 xc112f480 1 xc112f480 1} {x42600000 x4445beeb xc1336d20 1 xc1336d20 1} {x42640000 x444290d7 xc1598540 1 xc1598540 1} {x42680000 x443ef2c1 xc16df8e0 1 xc16df8e0 1} {x426c0000 x443b2110 xc15fa5e0 1 xc15fa5e0 1} {x42700000 x4437f592 xc14db440 1 xc14db440 1} {x42740000 x4434b36e xc1583cc0 1 xc1583cc0 1} {x42780000 x443133ac xc16bdd00 1 xc16bdd00 1} {x427c0000 x442d5486 xc17d2540 1 xc17d2540 1} {x42800000 x44294a82 xc18210b0 1 xc18210b0 1} {x42820000 x4425337b xc182f4b0 1 xc182f4b0 1} {x42840000 x44211b37 xc1828000 1 xc1828000 1} {x42860000 x441d0b7b xc17f2580 1 xc17f2580 1} {x42880000 x4419220b xc1774340 1 xc1774340 1} {x428a0000 x44155161 xc1763340 1 xc1763340 1} {x428c0000 x44117071 xc1816350 1 xc1816350 1} {x428e0000 x440d3b2c xc189f7e0 1 xc189f7e0 1} {x42900000 x4408d0f3 xc18f9100 1 xc18f9100 1} {x42920000 x4404421c xc191d6b8 1 xc191d6b8 1} {x42940000 x43ff670f xc18f4170 1 xc18f4170 1} {x42960000 x43f69c0a xc18ae2e8 1 xc18ae2e8 1} {x42980000 x43ee0ab2 xc17f6cd0 1 xc17f6cd0 1} {x429a0000 x43e6a53d xc1698a20 1 xc1698a20 1} {x429c0000 x43df7210 xc1619ed0 1 xc1619ed0 1} {x429e0000 x43d88b50 xc16034b0 1 xc16034b0 1} {x42a00000 x43d16ec5 xc16ef130 1 xc16ef130 1} {x42a20000 x43c99c3d xc1782820 1 xc1782820 1} {x42a40000 x43c1ec43 xc17a3bf0 1 xc17a3bf0 1} {x42a60000 x43b9f87e xc17fdc60 1 xc17fdc60 1} {x42a80000 x43b1ee7d xc17f3660 1 xc17f3660 1} {x42aa0000 x43aa0518 xc17836f0 1 xc17836f0 1} {x42ac0000 x43a26b0e xc16ccaf0 1 xc16ccaf0 1} {x42ae0000 x439b3869 xc167a270 1 xc167a270 1} {x42b00000 x4393f0e7 xc169d6d0 1 xc169d6d0 1} {x42b20000 x438c9afc xc16ae9e0 1 xc16ae9e0 1} {x42b40000 x43854249 xc16e3108 1 xc16e3108 1} {x42b60000 x437b6fd7 xc174d6b0 1 xc174d6b0 1} {x42b80000 x436be9bc xc17822a8 1 xc17822a8 1} {x42ba0000 x435c6b82 xc1728eb8 1 xc1728eb8 1} {x42bc0000 x434d97e5 xc163ebd0 1 xc163ebd0 1} {x42be0000 x433fee08 xc14a83a8 1 xc14a83a8 1} {x42c00000 x43344770 xc1376778 1 xc1376778 1} {x42c20000 x43290119 xc1241980 1 xc1241980 1} {x42c40000 x431fc440 xc1154720 1 xc1154720 1} {x42c60000 x43165835 xc118d028 1 xc118d028 1} {x42c80000 x430caa3b xc114efd8 1 xc114efd8 1} {x42ca0000 x4303ba3a xc112c568 1 xc112c568 1} {x42cc0000 x42f4a31c xc111bdd4 1 xc111bdd4 1} {x42ce0000 x42e304ff xc10966dc 1 xc10966dc 1} {x42d00000 x42d24965 xc0fc3340 1 xc0fc3340 1} {x42d20000 x42c37e97 xc0e55f70 1 xc0e55f70 1} {x42d40000 x42b59d77 xc0d631d0 1 xc0d631d0 1} {x42d60000 x42a8b85d xc0c3d2f0 1 xc0c3d2f0 1} {x42d80000 x429d2319 xc0bc26c0 1 xc0bc26c0 1} {x42da0000 x42913385 xc0cd15f8 1 xc0cd15f8 1} {x42dc0000 x4283805a xc0d52fb0 1 xc0d52fb0 1} {x42de0000 x426d1b1e xc0c3ba4c 1 xc0c3ba4c 1} {x42e00000 x42561221 xc0aa3560 1 xc0aa3560 1} {x42e20000 x42428dc6 xc0982f6c 1 xc0982f6c 1} {x42e40000 x42300646 xc0935654 1 xc0935654 1} {x42e60000 x421db831 xc086ab34 1 xc086ab34 1} {x42e80000 x420e5b79 xc0655aa0 1 xc0655aa0 1} {x42ea0000 x42010cdd xc05dd974 1 xc05dd974 1} {x42ec0000 x41e54095 xc065d770 1 xc065d770 1} {x42ee0000 x41c8a3de xc05c0e6c 1 xc05c0e6c 1} {x42f00000 x41ae3cfa xc075cfec 1 xc075cfec 1} {x42f20000 x418b2fe3 xc07b7b3c 1 xc07b7b3c 1} {x42f40000 x415ebc56 xc069b7be 1 xc069b7be 1} {x42f60000 x412183e7 xc07981f2 1 xc07981f2 1} {x42f80000 x40c3f6ba xc07303ea 1 xc07303ea 1} {x42fa0000 x402007c8 xc043f6ba 1 xc043f6ba 1} {x42fc0000 0 xc02a4fbe 1 xc02a4fbe 1} {x42fe0000 xc03497b4 xc025697d 1 xc025697d 1} {x43000000 xc0a5697d xc0212a30 1 xc0212a30 1} {x43010000 xc0fb760a xc012d5c3 1 xc012d5c3 1} {x43020000 xc11c1fa0 xbfd9ca98 1 xbfd9ca98 1} {x43030000 xc1342dab xbfa149a8 1 xbfa149a8 1} {x43040000 xc144720a xbf6e50d0 1 xbf6e50d0 1} {x43050000 xc151f7c5 xbf4d3138 1 xbf4d3138 1} {x43060000 xc15e1831 xbf3a0b88 1 xbf3a0b88 1} {x43070000 xc1693936 xbf1e1290 1 xbf1e1290 1} {x43080000 xc171da83 -} {x43090000 xc166b3ba -} {x430a0000 xc1716ebb xbf223298 1 xbf223298 1} {x430b0000 xc17afa0d -} {x430c0000 xc1757aba x3e9a3800 1 x3e9a3800 1} {x430d0000 xc171568d -} {x430e0000 xc171963b -} {x430f0000 xc16e983f -} {x43100000 xc171db83 -} {x43110000 xc167e8cd x3f20b5e0 1 x3f20b5e0 1} {x43120000 xc15dc4c7 x3f164420 1 x3f164420 1} {x43130000 xc1552049 -} {x43140000 xc15a9ef9 xbf18a118 1 xbf18a118 1} {x43150000 xc168346c xbffcdadc 1 xbffcdadc 1} {x43160000 xc18cead8 xc06a90e1 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke123 262656 bezier {cc {f 8224} {p {0 0 1} {x42036e98 x4439f927 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42fc0000 0}} {{x42fc0000 0}} {{x429e0000 0 0 1 x40082b93 1} {x42fc0000 x42c80000 x40082b93 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}} {cubiccurve Stroke124 262656 bezier {cc {f 8224} {p {0 0 1} {x42036e98 x4439f927 1} {0 0 1}}} {t {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x42540000 xc32424e8 0 1 x4080eaf8 1} {x42580000 xc31fcdf6 x409ec4d0 1 x409ec4d0 1} {x425c0000 xc31a389b x40c56a50 1 x40c56a50 1} {x42600000 xc3137751 x40d488c0 1 x40d488c0 1} {x42640000 xc30cf00f x40cd9180 1 x40cd9180 1} {x42680000 xc3069e39 x40cb9e60 1 x40cb9e60 1} {x426c0000 xc3003629 x40ccdc20 1 x40ccdc20 1} {x42700000 xc2f3a0ee x40d07938 1 x40d07938 1} {x42740000 xc2e65d2b x40e1a3c0 1 x40e1a3c0 1} {x42780000 xc2d76c76 x40ed7490 1 x40ed7490 1} {x427c0000 xc2c8ae99 x40f883e0 1 x40f883e0 1} {x42800000 xc2b85bfa x40fdcfd0 1 x40fdcfd0 1} {x42820000 xc2a8f49f x40f0adb8 1 x40f0adb8 1} {x42840000 xc29a4643 x40e9da30 1 x40e9da30 1} {x42860000 xc28bb959 x40c6cb38 1 x40c6cb38 1} {x42880000 xc2816cdc x40cfa96c 1 x40cfa96c 1} {x428a0000 xc2638857 x40bb7110 1 x40bb7110 1} {x428c0000 xc253fd74 x406ee5a0 1 x406ee5a0 1} {x428e0000 xc245aba3 x4071a7a8 1 x4071a7a8 1} {x42900000 xc235c87f x40361928 1 x40361928 1} {x42920000 xc22ee87e x3f758a40 1 x3f758a40 1} {x42940000 xc22da11b x3eb05300 1 x3eb05300 1} {x42960000 xc22c2732 x3f08ee40 1 x3f08ee40 1} {x42980000 xc22959a9 x3fad7830 1 x3fad7830 1} {x429a0000 xc2214faf x3fa8d630 1 x3fa8d630 1} {x429c0000 xc21ecc46 -} {x429e0000 xc22171d3 xbf0e94a0 1 xbf0e94a0 1} {x42a00000 xc22340eb xbca68000 1 xbca68000 1} {x42a20000 xc22347db -} {x42a40000 xc222df79 x3d7bfa00 1 x3d7bfa00 1} {x42a60000 xc222c9de -} {x42a80000 xc2233cfb xbe2fbb80 1 xbe2fbb80 1} {x42aa0000 xc2242955 xbea15ac0 1 xbea15ac0 1} {x42ac0000 xc225c266 xbec24080 1 xbec24080 1} {x42ae0000 xc2273257 xbf2551c0 1 xbf2551c0 1} {x42b00000 xc22aecf4 xbf92dbc0 1 xbf92dbc0 1} {x42b20000 xc2306013 xbfb5f7e0 1 xbfb5f7e0 1} {x42b40000 xc2364c72 xbfb5b2b0 1 xbfb5b2b0 1} {x42b60000 xc23bbb3e xbfa9ddf0 1 xbfa9ddf0 1} {x42b80000 xc240ea51 xbfb75150 1 xbfb75150 1} {x42ba0000 xc2473053 xbfd1a060 1 xbfd1a060 1} {x42bc0000 xc24e0457 xbfd02dc0 1 xbfd02dc0 1} {x42be0000 xc254332f xbfc30f00 1 xbfc30f00 1} {x42c00000 xc25a3547 xbfeeba90 1 xbfeeba90 1} {x42c20000 xc2631ed8 xbfdd4360 1 xbfdd4360 1} {x42c40000 xc268097d xbf3f7600 1 xbf3f7600 1} {x42c60000 xc2691a88 xbebbe940 1 xbebbe940 1} {x42c80000 xc26af922 -} {x42ca0000 xc266d0f9 x3f935140 1 x3f935140 1} {x42cc0000 xc261c40e x3f7ef8c0 1 x3f7ef8c0 1} {x42ce0000 xc25ed933 x3f2fc720 1 x3f2fc720 1} {x42d00000 xc25c45d5 x3f042760 1 x3f042760 1} {x42d20000 xc25ab7f8 x3ed3a700 1 x3ed3a700 1} {x42d40000 xc258f739 x3edcc540 1 x3edcc540 1} {x42d60000 xc25744e3 x3e90dac0 1 x3e90dac0 1} {x42d80000 xc256b3ce x3ec86d40 1 x3ec86d40 1} {x42da0000 xc254232e x3f2031a0 1 x3f2031a0 1} {x42dc0000 xc251b241 x3f6be400 1 x3f6be400 1} {x42de0000 xc24cc40e x3f9fb3e0 1 x3f9fb3e0 1} {x42e00000 xc247b703 x3f97abc0 1 x3f97abc0 1} {x42e20000 xc2434952 x3f9e4b90 1 x3f9e4b90 1} {x42e40000 xc23dd24a x40280f00 1 x40280f00 1} {x42e60000 xc22e4772 x4036d488 1 x4036d488 1} {x42e80000 xc226f7b9 x3ffb9cb0 1 x3ffb9cb0 1} {x42ea0000 xc21e8da7 x4010a540 1 x4010a540 1} {x42ec0000 xc214e311 x403fff88 1 x403fff88 1} {x42ee0000 xc2068db6 x40656c48 1 x40656c48 1} {x42f00000 xc1f06b10 x407c69c4 1 x407c69c4 1} {x42f20000 xc1ce00fb x408f7eca 1 x408f7eca 1} {x42f40000 xc1a8abab x409d65a2 1 x409d65a2 1} {x42f60000 xc17e9c54 x40a674f6 1 x40a674f6 1} {x42f80000 xc12ae260 x40aae56b 1 x40aae56b 1} {x42fa0000 xc0a76dd2 x40aae260 1 x40aae260 1} {x42fc0000 0 x40a342da 1 x40a342da 1} {x42fe0000 x409f17e3 x409dbcdc 1 x409dbcdc 1} {x43000000 x411dbcdc x4099ac3a 1 x4099ac3a 1} {x43010000 x4169382b x4098bd76 1 x4098bd76 1} {x43020000 x419b3d29 x4099b5bb 1 x4099b5bb 1} {x43030000 x41c176f3 x4096e838 1 x4096e838 1} {x43040000 x41e6b145 x409041de 1 x409041de 1} {x43050000 x4204cbf1 x4072c9d4 1 x4072c9d4 1} {x43060000 x4211b1dd x404458b8 1 x404458b8 1} {x43070000 x421d5708 x40461f38 1 x40461f38 1} {x43080000 x422a75c4 x40470f68 1 x40470f68 1} {x43090000 x423638f5 x403e9bc8 1 x403e9bc8 1} {x430a0000 x4242493d x4044f3a8 1 x4044f3a8 1} {x430b0000 x424ed76a x40489d68 1 x40489d68 1} {x430c0000 x425b5cea x404336e0 1 x404336e0 1} {x430d0000 x42673e46 x40452d28 1 x40452d28 1} {x430e0000 x4274028f x405ad0c0 1 x405ad0c0 1} {x430f0000 x42814c2f x406e84d8 1 x406e84d8 1} {x43100000 x4288e995 x40767ef0 1 x40767ef0 1} {x43110000 x4290b41e x40724960 1 x40724960 1} {x43120000 x42980e2b x4068f660 1 x4068f660 1} {x43130000 x429f4384 x40535f10 1 x40535f10 1} {x43140000 x42a5441c x401c0db0 1 x401c0db0 1} {x43150000 x42a9045f x3fb05d20 1 x3fb05d20 1} {x43160000 x42aac705 x3f219f60 1 0 1}} {{x42540000 x4483c2e2 0 1 xc155e4e0 1} {x42580000 x44820841 xc16c27c0 1 xc16c27c0 1} {x425c0000 x44801243 xc1818910 1 xc1818910 1} {x42600000 x447bf7f1 xc18406f0 1 xc18406f0 1} {x42640000 x4477e417 xc18241a0 1 xc18241a0 1} {x42680000 x4473d3d7 xc1844020 1 xc1844020 1} {x426c0000 x446fa015 xc18ac7a0 1 xc18ac7a0 1} {x42700000 x446b275d xc197d7d0 1 xc197d7d0 1} {x42740000 x44662298 xc1a966d0 1 xc1a966d0 1} {x42780000 x446090f0 xc1bb2cd0 1 xc1bb2cd0 1} {x427c0000 x445a6fcb xc1cca810 1 xc1cca810 1} {x42800000 x4453c66f xc1d9f360 1 xc1d9f360 1} {x42820000 x444cd095 xc1dde4a0 1 xc1dde4a0 1} {x42840000 x4445e825 xc1debe30 1 xc1debe30 1} {x42860000 x443ee4b2 xc1d9f300 1 xc1d9f300 1} {x42880000 x443848f5 xc1dba9b0 1 xc1dba9b0 1} {x428a0000 x44312a17 xc1d43440 1 xc1d43440 1} {x428c0000 x442b05b1 xc1b7aec0 1 xc1b7aec0 1} {x428e0000 x4425af2b xc1afdd30 1 xc1afdd30 1} {x42900000 x442007de xc1b4ba20 1 xc1b4ba20 1} {x42920000 x441a6389 xc1bd6720 1 xc1bd6720 1} {x42940000 x4414316c xc1c516e0 1 xc1c516e0 1} {x42960000 x440e121b xc1c2c430 1 xc1c2c430 1} {x42980000 x44080529 xc1b645d0 1 xc1b645d0 1} {x429a0000 x4402adbe xc1ae0048 1 xc1ae0048 1} {x429c0000 x43fa4a49 xc1b0d318 1 xc1b0d318 1} {x429e0000 x43ef4119 xc1ae1f70 1 xc1ae1f70 1} {x42a00000 x43e4865b xc1ad2b70 1 xc1ad2b70 1} {x42a20000 x43d99bab xc1adeb90 1 xc1adeb90 1} {x42a40000 x43cec8e9 xc1adb708 1 xc1adb708 1} {x42a60000 x43c3e4ca xc1af8fe8 1 xc1af8fe8 1} {x42a80000 x43b8d6ec xc1b01c38 1 xc1b01c38 1} {x42aa0000 x43ade143 xc1ad3790 1 xc1ad3790 1} {x42ac0000 x43a32ffa xc1a6e978 1 xc1a6e978 1} {x42ae0000 x43990414 xc1a684f0 1 xc1a684f0 1} {x42b00000 x438e5f5c xc1a97c80 1 xc1a97c80 1} {x42b20000 x4383d484 xc1a82228 1 xc1a82228 1} {x42b40000 x4372b62e xc1a91a04 1 xc1a91a04 1} {x42b60000 x435d6287 xc1a97f84 1 xc1a97f84 1} {x42b80000 x4348564d xc1a3ab2c 1 xc1a3ab2c 1} {x42ba0000 x433477bc xc19a759c 1 xc19a759c 1} {x42bc0000 x4321b8e6 xc1902e3c 1 xc1902e3c 1} {x42be0000 x43106c2d xc185b2f0 1 xc185b2f0 1} {x42c00000 x43004c2a xc177b7e0 1 xc177b7e0 1} {x42c20000 x42e2ea62 xc16099fc 1 xc16099fc 1} {x42c40000 x42c871d5 xc14a9290 1 xc14a9290 1} {x42c60000 x42b045be xc1429164 1 xc1429164 1} {x42c80000 x4297cd7c xc14d206a 1 xc14d206a 1} {x42ca0000 x4279fb47 xc157be40 1 xc157be40 1} {x42cc0000 x4243bbd8 xc154f36e 1 xc154f36e 1} {x42ce0000 x420f8190 xc147a9fe 1 xc147a9fe 1} {x42d00000 x41bfcdb2 xc132f6aa 1 xc132f6aa 1} {x42d20000 x415818ec xc11e61d3 1 xc11e61d3 1} {x42d40000 x4085af7b xc10ff6d0 1 xc10ff6d0 1} {x42d60000 xc08fa968 xc0f98a98 1 xc0f98a98 1} {x42d80000 xc136b2da xc0d6db28 1 xc0d6db28 1} {x42da0000 xc18f57ee xc0be8bec 1 xc0be8bec 1} {x42dc0000 xc1ba9f63 xc0a5ce20 1 xc0a5ce20 1} {x42de0000 xc1e23efe xc06d60b4 1 xc06d60b4 1} {x42e00000 xc1f5f790 xbffd7bd0 1 xbffd7bd0 1} {x42e20000 xc200f73c xbf70f420 1 xbf70f420 1} {x42e40000 xc2028369 -} {x42e60000 xc1f9fc6c x3fe3c668 1 x3fe3c668 1} {x42e80000 xc1e88e05 x40147b04 1 x40147b04 1} {x42ea0000 xc1d4ddab x402fe778 1 x402fe778 1} {x42ec0000 xc1bc9427 x4037242c 1 x4037242c 1} {x42ee0000 xc1a714a0 x4014a488 1 x4014a488 1} {x42f00000 xc1976b05 x401a1744 1 x401a1744 1} {x42f20000 xc1808ecf x401e9fde 1 x401e9fde 1} {x42f40000 xc15f861b x4024a3f2 1 x4024a3f2 1} {x42f60000 xc12ecba5 x40416da4 1 x40416da4 1} {x42f80000 xc0fd9e92 x40564291 1 x40564291 1} {x42fa0000 xc08754b9 x407d9e92 1 x407d9e92 1} {x42fc0000 0 x407df581 1 x407df581 1} {x42fe0000 x406d4190 x403259a8 1 x403259a8 1} {x43000000 x40b259a8 x3fea58ce 1 x3fea58ce 1} {x43010000 x40ebcd2f x3faef3fc 1 x3faef3fc 1} {x43020000 x4104e9d3 x3f4fced4 1 x3f4fced4 1} {x43030000 x410fe072 x3e16f6c0 1 x3e16f6c0 1} {x43040000 x4110a9bb -} {x43050000 x410a8e0f -} {x43060000 x411e43a7 x3fd1c7d8 1 x3fd1c7d8 1} {x43070000 x413f0005 x3fd01d9c 1 x3fd01d9c 1} {x43080000 x41524b0e x3fc14160 1 x3fc14160 1} {x43090000 x416f505d x400e4a08 1 x400e4a08 1} {x430a0000 x418cb809 x4031b052 1 x4031b052 1} {x430b0000 x41a41443 x404559e4 1 x404559e4 1} {x430c0000 x41be0e82 x4058f6d4 1 x4058f6d4 1} {x430d0000 x41da51f8 x404e57e0 1 x404e57e0 1} {x430e0000 x41f1a47a x403be520 1 x403be520 1} {x430f0000 x4204a5a0 x4043d2c0 1 x4043d2c0 1} {x43100000 x42114c95 x40427b50 1 x40427b50 1} {x43110000 x421cf50a x40381090 1 x40381090 1} {x43120000 x42284ea7 x4035ca08 1 x4035ca08 1} {x43130000 x4233ae4b x403767a8 1 x403767a8 1} {x43140000 x423f3b9c x401e7fc8 1 x401e7fc8 1} {x43150000 x42477e44 x3fa309a0 1 x3fa309a0 1} {x43160000 x42496c36 x3db18900 1 0 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 0}} {{x429e0000 1}}} {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x429e0000 ltm x429e0000 pt 0 ab 1}}}} {edge Stroke1 Stroke2 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke3 Stroke4 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke5 Stroke6 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke7 Stroke8 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke9 Stroke10 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke11 Stroke12 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke13 Stroke14 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke15 Stroke16 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke17 Stroke18 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke19 Stroke20 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke21 Stroke22 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke23 Stroke24 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke25 Stroke26 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke27 Stroke28 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke29 Stroke30 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke31 Stroke32 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke33 Stroke34 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke35 Stroke36 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke37 Stroke38 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke39 Stroke40 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke41 Stroke42 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke43 Stroke44 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke45 Stroke46 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke47 Stroke48 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke49 Stroke50 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke51 Stroke52 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke53 Stroke54 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke55 Stroke56 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke57 Stroke58 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke59 Stroke60 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke61 Stroke62 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke63 Stroke64 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke65 Stroke66 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke67 Stroke68 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke69 Stroke70 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke71 Stroke72 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke73 Stroke74 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke75 Stroke76 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke77 Stroke78 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke79 Stroke80 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke81 Stroke82 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke83 Stroke84 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke85 Stroke86 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke87 Stroke88 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke89 Stroke90 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke91 Stroke92 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke93 Stroke94 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke95 Stroke96 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke97 Stroke98 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke99 Stroke100 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke101 Stroke102 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke103 Stroke104 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke105 Stroke106 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke107 Stroke108 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke109 Stroke110 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke111 Stroke112 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke113 Stroke114 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke115 Stroke116 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke117 Stroke118 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke119 Stroke120 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke121 Stroke122 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}} {edge Stroke123 Stroke124 {cp 0 0 0 0 1 {{{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}} {{{x429e0000 x3f000000}} {{x429e0000 x3f000000}}}} cache {{xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff} {xff7fffff x7f7fffff x7f7fffff}}} {a}}}} toolbar_autokey false toolbar_preview_mode "persistent preview" filter {{parent.FilterMethod}} name si_sw tile_color 0xff selected true xpos 776 ypos 183 disable {{parent.DisableWarp}} } set N72705e40 [stack 0] Dot { name Dot5 tile_color 0xff xpos 810 ypos 263 } set N73fd1d70 [stack 0] Dot { name Dot7 tile_color 0xff xpos 810 ypos 359 } set N73fd4240 [stack 0] Merge2 { inputs 2 operation minus Achannels si_mo Bchannels si_mo output si_mo name si_calcdif tile_color 0xff xpos 776 ypos 491 disable true } push $N73fd4240 add_layer {si_trans si_trans.red si_trans.green si_trans.blue si_trans.alpha} Expression { channel0 {si_trans.red -si_trans.green -si_trans.blue -si_trans.alpha} expr0 (forward.u+.5)/width channel1 {-si_trans.red si_trans.green -si_trans.blue -si_trans.alpha} expr1 (forward.v+.5)/height channel2 {-rgba.red -rgba.green -rgba.blue none} name si_norm tile_color 0xff xpos 679 ypos 495 } Dot { name Dot10 xpos 519 ypos 497 } push $N72705e40 Dot { name Dot8 xpos 700 ypos 190 } set N73ff34e0 [stack 0] Dot { name Dot9 xpos 603 ypos 190 } TimeOffset { time_offset -1 time "" name si_to1 tile_color 0xff xpos 569 ypos 232 } Dot { name Dot11 xpos 603 ypos 328 } push $N73fd1d70 push $N73ff34e0 TimeOffset { time_offset 1 time "" name si_to tile_color 0xff xpos 666 ypos 232 } Merge2 { inputs 2 operation minus Achannels forward Bchannels forward output forward name si_calcdisp1 tile_color 0xff xpos 666 ypos 289 } Merge2 { inputs 2 operation minus Achannels backward Bchannels backward output backward name si_calcdisp3 tile_color 0xff xpos 666 ypos 321 } set N73c93570 [stack 0] Dot { name Dot6 tile_color 0xff xpos 700 ypos 439 } push $N73c93570 push $N73fd4240 ShuffleCopy { inputs 2 in motion alpha alpha2 black red white green red2 blue green2 alpha out2 motion name si_sh2 tile_color 0xff xpos 600 ypos 358 } VectorBlur { uv motion scale 0.5 name si_mb tile_color 0xff xpos 427 ypos 354 disable {{1-parent.enableMotionBlur}} } Input { inputs 0 name InputMask tile_color 0xff xpos 409 ypos -8 number 2 } Dot { name Dot1 tile_color 0xff xpos 443 ypos 41 } Input { inputs 0 name InputSource tile_color 0xff xpos 300 ypos -7 } CameraTracker { inputs 2 serializeKnob "22 serialization::archive 14 0 4 0 2 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0" trackDisplay "Points only" ignore "Mask Alpha" trackRange Custom trackStart {{parent.InputFrom}} trackStop {{parent.InputTo+1}} referenceFrames {{curve x53 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100}} filenameSalt 9831 userTrackViews {left right} trackCurves {"num tracks" {curve} "track len - min" {curve} "track len - avg" {curve} "track len - max" {curve} "Min Length" {curve x53 0 x151 0} "Solve Error" {curve x53 0 x151 0} "error - min" {curve} "error - rms" {curve} "error - track" {curve} "error - max" {curve} "Max Track Error" {curve x53 0 x151 0} "Max Error" {curve x53 0 x151 0}} numberFeatures 75 featureThreshold 1e-05 featureSeparation 9 minTrackLength 5 matchThreshold 0.09 smoothnessThreshold 0.04 consistencyThreshold 0.054 name si_ct tile_color 0xff xpos 300 ypos 38 } Shuffle { red black green black blue black alpha black name si_switch tile_color 0xff xpos 300 ypos 274 disable {{parent.Option_Output!=2 x63 0}} } Merge2 { inputs 2 Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} name si_mrg tile_color 0xff xpos 300 ypos 358 disable {{parent.Option_Output==1}} } ShuffleCopy { inputs 2 in motion alpha alpha2 black red white green red2 blue green2 alpha out2 motion name si_mrg_mv tile_color 0xff xpos 300 ypos 436 disable {{1-parent.displayMotion}} } ShuffleCopy { inputs 2 in si_trans alpha alpha2 black red white green red2 black green2 black out2 si_trans name si_mrg_st tile_color 0xff xpos 300 ypos 495 disable {{1-parent.displayDiffrence}} } Shuffle { in si_trans name Shuffle1 xpos 300 ypos 540 disable {{parent.Option_Output!=3}} } Output { name Output1 tile_color 0xff xpos 300 ypos 578 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_iBlurU.gizmo ================================================ Group { name iBlurU help "iBlur v1.0\n\nThis gizmo should work like the iBlur from Shake. I'm still missing a ramped blur in nuke, especially for technical stuff, where a zBlur is just not the right thing (and also too slow)." tile_color 0xcc804eff selected true addUserKnob {20 Controls} addUserKnob {41 channels t "Select the channels you want to iBlur." T Blur11.channels} addUserKnob {26 divider2 l " " T " "} addUserKnob {14 blur l "blur size" R 0 100} blur 10 addUserKnob {4 blur_type l "blur type" t "The gizmo is indeed using Nuke's 'Blur' or 'Defocus'. You know the difference!" M {blur "defocus " "" "" ""}} addUserKnob {4 quality t "This gizmo blurs the image in blended in slices. \nMore slices mean more accurate blur-ramp, and also more rendertime. \n\nfast = 7 slices\naccurate = 13 slices" M {fast accurate "" ""}} quality accurate addUserKnob {26 spacer l " " T " "} addUserKnob {26 divider l "" +STARTLINE} addUserKnob {26 credit l "" +STARTLINE T "iBlur v2.0 | moritz eiche | 2011\nModified by Tony Lyons 2019"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x2e2e2eff note_font_size 42 xpos 32 ypos -426 bdwidth 2731 bdheight 633 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x262626ff note_font_size 42 xpos 114 ypos -367 bdwidth 2572 bdheight 269 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x262626ff note_font_size 42 xpos 115 ypos -83 bdwidth 2573 bdheight 236 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x2e2e2eff note_font_size 42 xpos 33 ypos 320 bdwidth 2733 bdheight 625 } BackdropNode { inputs 0 name BackdropNode5 tile_color 0x262626ff note_font_size 42 xpos 108 ypos 373 bdwidth 2572 bdheight 269 } BackdropNode { inputs 0 name BackdropNode6 tile_color 0x262626ff note_font_size 42 xpos 109 ypos 652 bdwidth 2575 bdheight 237 } Input { inputs 0 name mask label a xpos -113 ypos -764 number 1 } Dot { name Dot6 xpos -79 ypos -312 } set N54d9edd0 [stack 0] Dot { name Dot87 xpos -79 ypos -51 } set N8b910580 [stack 0] Dot { name Dot57 xpos -79 ypos 430 } set Nc7009840 [stack 0] Dot { name Dot2 xpos 246 ypos 430 } set N10369570 [stack 0] Dot { name Dot4 xpos 445 ypos 430 } set N2afcf8e0 [stack 0] Dot { name Dot32 xpos 651 ypos 430 } set N5102fee0 [stack 0] Dot { name Dot33 xpos 850 ypos 430 } set N8b964150 [stack 0] Dot { name Dot34 xpos 1045 ypos 430 } set N6b6fc4a0 [stack 0] Dot { name Dot35 xpos 1233 ypos 429 } set N13bf2150 [stack 0] Dot { name Dot36 xpos 1438 ypos 429 } set Nd0d7fa20 [stack 0] Dot { name Dot37 xpos 1634 ypos 429 } set N8a3cb40 [stack 0] Dot { name Dot38 xpos 1834 ypos 429 } set N907f6050 [stack 0] Dot { name Dot39 xpos 2036 ypos 429 } set N9100fc40 [stack 0] Dot { name Dot40 xpos 2234 ypos 429 } set Nda464fd0 [stack 0] Dot { name Dot41 xpos 2432 ypos 428 } set N68dfe380 [stack 0] Dot { name Dot42 xpos 2624 ypos 428 } Grade { channels rgba blackpoint 0.9 white_clamp true name Grade12 xpos 2590 ypos 521 } Input { inputs 0 name image label rgba xpos -282 ypos -767 } Dot { name Dot1 xpos -248 ypos -272 } set N6b8fb770 [stack 0] Dot { name Dot25 xpos -248 ypos -155 } set N4f496420 [stack 0] Dot { name Dot86 xpos -248 ypos -11 } set N4f4c5620 [stack 0] Dot { name Dot88 xpos -248 ypos 106 } set N4f489320 [stack 0] Dot { name Dot58 xpos -248 ypos 470 } set Nf7706220 [stack 0] Dot { name Dot43 xpos 152 ypos 470 } set Nf72eff00 [stack 0] Dot { name Dot44 xpos 354 ypos 470 } set N43be6090 [stack 0] Dot { name Dot45 xpos 557 ypos 470 } set N4d7f68a0 [stack 0] Dot { name Dot46 xpos 756 ypos 470 } set N2f850e30 [stack 0] Dot { name Dot47 xpos 954 ypos 470 } set N669d1830 [stack 0] Dot { name Dot48 xpos 1142 ypos 469 } set N1004e930 [stack 0] Dot { name Dot49 xpos 1347 ypos 469 } set N11593d60 [stack 0] Dot { name Dot50 xpos 1543 ypos 469 } set N4f49b310 [stack 0] Dot { name Dot51 xpos 1743 ypos 469 } set N4f4db8e0 [stack 0] Dot { name Dot52 xpos 1945 ypos 469 } set Nfa6c9cc0 [stack 0] Dot { name Dot53 xpos 2143 ypos 469 } set N3fff2230 [stack 0] Dot { name Dot54 xpos 2341 ypos 468 } set N6382d460 [stack 0] Dot { name Dot55 xpos 2533 ypos 468 } Defocus { channels {{{parent.Blur11.channels}}} scale {{blur} {blur}} name Defocus13 xpos 2499 ypos 521 } push $N68dfe380 Grade { channels rgba blackpoint 0.8 whitepoint 0.9 white_clamp true name Grade15 xpos 2398 ypos 521 } push $N6382d460 Defocus { channels {{{parent.Blur11.channels}}} scale {{blur/10*9} {blur/10*9}} name Defocus12 xpos 2307 ypos 520 } push $Nda464fd0 Grade { channels rgba blackpoint 0.7 whitepoint 0.8 white_clamp true name Grade16 xpos 2200 ypos 521 } push $N3fff2230 Defocus { channels {{{parent.Blur11.channels}}} scale {{blur/10*8} {blur/10*8}} name Defocus11 xpos 2109 ypos 522 } push $N9100fc40 Grade { channels rgba blackpoint 0.6 whitepoint 0.7 white_clamp true name Grade17 xpos 2002 ypos 521 } push $Nfa6c9cc0 Defocus { channels {{{parent.Blur11.channels}}} scale {{blur/10*7} {blur/10*7}} name Defocus10 xpos 1911 ypos 521 } push $N907f6050 Grade { channels rgba blackpoint 0.5 whitepoint 0.6 white_clamp true name Grade18 xpos 1800 ypos 521 } push $N4f4db8e0 Defocus { channels {{{parent.Blur11.channels}}} scale {{blur/10*6} {blur/10*6}} name Defocus9 xpos 1709 ypos 521 } push $N8a3cb40 Grade { channels rgba blackpoint 0.4 whitepoint 0.5 white_clamp true name Grade19 xpos 1600 ypos 521 } push $N4f49b310 Defocus { channels {{{parent.Blur11.channels}}} scale {{blur/10*5} {blur/10*5}} name Defocus8 xpos 1509 ypos 521 } push $Nd0d7fa20 Grade { channels rgba blackpoint 0.3 whitepoint 0.4 white_clamp true name Grade20 xpos 1404 ypos 521 } push $N11593d60 Defocus { channels {{{parent.Blur11.channels}}} scale {{blur/10*4} {blur/10*4}} name Defocus7 xpos 1313 ypos 521 } push $N13bf2150 Grade { channels rgba blackpoint 0.2 whitepoint 0.3 white_clamp true name Grade21 xpos 1199 ypos 521 } push $N1004e930 Defocus { channels {{{parent.Blur11.channels}}} scale {{blur/10*3} {blur/10*3}} name Defocus6 xpos 1108 ypos 522 } push $N6b6fc4a0 Grade { channels rgba blackpoint 0.1 whitepoint 0.2 white_clamp true name Grade22 xpos 1011 ypos 521 } push $N669d1830 Defocus { channels {{{parent.Blur11.channels}}} scale {{blur/10*2} {blur/10*2}} name Defocus5 xpos 920 ypos 524 } push $N8b964150 Grade { channels rgba blackpoint 0.075 whitepoint 0.1 white_clamp true name Grade23 xpos 816 ypos 521 } push $N2f850e30 Defocus { channels {{{parent.Blur11.channels}}} scale {{blur/10} {blur/10}} name Defocus4 xpos 722 ypos 522 } push $N5102fee0 Grade { channels rgba blackpoint 0.05 whitepoint 0.075 white_clamp true name Grade24 xpos 617 ypos 521 } push $N4d7f68a0 Defocus { channels {{{parent.Blur11.channels}}} scale {{blur/10/4*3} {blur/10/4*3}} name Defocus3 xpos 523 ypos 520 } push $N2afcf8e0 Grade { channels rgba blackpoint 0.025 whitepoint 0.05 white_clamp true name Grade25 xpos 411 ypos 521 } push $N43be6090 Defocus { channels {{{parent.Blur11.channels}}} scale {{blur/10/4*2} {blur/10/4*2}} name Defocus2 xpos 320 ypos 519 } push $N10369570 Grade { channels rgba whitepoint 0.025 white_clamp true name Grade26 xpos 212 ypos 521 } push $Nf72eff00 Defocus { channels {{{parent.Blur11.channels}}} scale {{blur/10/4} {blur/10/4}} name Defocus1 xpos 118 ypos 518 } push $Nf7706220 Dot { name Dot56 xpos -248 ypos 587 } set N4d9ced90 [stack 0] Group { inputs 3 name KeymixBBox tile_color 0x4b5ec6ff xpos 118 ypos 577 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N4d9dc9c0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N4d9e1580 [stack 0] push $N4d9dc9c0 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N669e1cd0 [stack 0] push $N4d9e1580 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N669e1cd0 push $N4d9dc9c0 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox1 tile_color 0x4b5ec6ff xpos 320 ypos 577 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set Nc6f6b840 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set Nc6f703e0 [stack 0] push $Nc6f6b840 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set Nc6f852b0 [stack 0] push $Nc6f703e0 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $Nc6f852b0 push $Nc6f6b840 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox2 tile_color 0x4b5ec6ff xpos 523 ypos 577 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set Nc2e660b0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N2ff015f0 [stack 0] push $Nc2e660b0 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N2ff164c0 [stack 0] push $N2ff015f0 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N2ff164c0 push $Nc2e660b0 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox3 tile_color 0x4b5ec6ff xpos 722 ypos 577 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N64546550 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N6454b110 [stack 0] push $N64546550 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set Nf75c1470 [stack 0] push $N6454b110 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $Nf75c1470 push $N64546550 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox4 tile_color 0x4b5ec6ff xpos 920 ypos 577 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N7234bc20 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N723507e0 [stack 0] push $N7234bc20 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N723656c0 [stack 0] push $N723507e0 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N723656c0 push $N7234bc20 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox5 tile_color 0x4b5ec6ff xpos 1108 ypos 577 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N8d44e9f0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N8d4535b0 [stack 0] push $N8d44e9f0 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N8d468480 [stack 0] push $N8d4535b0 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N8d468480 push $N8d44e9f0 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox6 tile_color 0x4b5ec6ff xpos 1313 ypos 577 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N258f4090 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set Ndf8c40e0 [stack 0] push $N258f4090 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set Ndf8d8fb0 [stack 0] push $Ndf8c40e0 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $Ndf8d8fb0 push $N258f4090 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox7 tile_color 0x4b5ec6ff xpos 1509 ypos 577 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set Nc6ff6460 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set Nc6ffb020 [stack 0] push $Nc6ff6460 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set Nc7032e20 [stack 0] push $Nc6ffb020 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $Nc7032e20 push $Nc6ff6460 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox9 tile_color 0x4b5ec6ff xpos 1709 ypos 577 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N89e6bd50 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N89e70910 [stack 0] push $N89e6bd50 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set Ne70b340 [stack 0] push $N89e70910 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $Ne70b340 push $N89e6bd50 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox10 tile_color 0x4b5ec6ff xpos 1911 ypos 577 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N18f1c870 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N18f21430 [stack 0] push $N18f1c870 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N18f36300 [stack 0] push $N18f21430 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N18f36300 push $N18f1c870 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox11 tile_color 0x4b5ec6ff xpos 2109 ypos 577 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set Nf6cb2bc0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set Nf6cb7780 [stack 0] push $Nf6cb2bc0 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set Nf6ccc650 [stack 0] push $Nf6cb7780 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $Nf6ccc650 push $Nf6cb2bc0 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox12 tile_color 0x4b5ec6ff xpos 2307 ypos 577 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N437f25e0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N437f71a0 [stack 0] push $N437f25e0 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N5bccf4c0 [stack 0] push $N437f71a0 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N5bccf4c0 push $N437f25e0 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox13 tile_color 0x4b5ec6ff xpos 2499 ypos 577 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N7b4bec30 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N7b4c37f0 [stack 0] push $N7b4bec30 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set Na7e01fa0 [stack 0] push $N7b4c37f0 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $Na7e01fa0 push $N7b4bec30 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Dot { name Dot67 xpos 2886 ypos 587 } push $Nc7009840 Dot { name Dot105 xpos -79 ypos 688 } Dot { name Dot62 xpos 244 ypos 687 } set N5f813960 [stack 0] Dot { name Dot65 xpos 443 ypos 687 } set Na25edc30 [stack 0] Dot { name Dot69 xpos 848 ypos 687 } set Na25f26c0 [stack 0] Dot { name Dot71 xpos 1245 ypos 687 } set Na25f7280 [stack 0] Dot { name Dot82 xpos 1635 ypos 686 } set Na25fbdd0 [stack 0] Dot { name Dot89 xpos 2036 ypos 686 } set Na2600990 [stack 0] Dot { name Dot91 xpos 2622 ypos 685 } Grade { channels rgba blackpoint 0.7 white_clamp true name Grade28 xpos 2588 ypos 778 } push $N4d9ced90 Dot { name Dot106 xpos -248 ypos 728 } set N2a8baa60 [stack 0] Dot { name Dot92 xpos 150 ypos 727 } set N2a8bf430 [stack 0] Dot { name Dot93 xpos 352 ypos 727 } set N2a8c3ff0 [stack 0] Dot { name Dot95 xpos 754 ypos 727 } set N2a8c8b40 [stack 0] Dot { name Dot96 xpos 1154 ypos 727 } set N2a8cdce0 [stack 0] Dot { name Dot100 xpos 1544 ypos 726 } set N2a8d2580 [stack 0] Dot { name Dot102 xpos 1945 ypos 726 } set N2a8d7140 [stack 0] Dot { name Dot104 xpos 2531 ypos 725 } Defocus { channels {{{parent.Blur11.channels}}} scale {{blur} {blur}} name Defocus14 xpos 2497 ypos 779 } push $Na2600990 Grade { channels rgba blackpoint 0.5 whitepoint 0.7 white_clamp true name Grade32 xpos 2002 ypos 779 } push $N2a8d7140 Defocus { channels {{{parent.Blur11.channels}}} scale {{blur/10*7} {blur/10*7}} name Defocus16 xpos 1911 ypos 778 } push $Na25fbdd0 Grade { channels rgba blackpoint 0.3 whitepoint 0.5 white_clamp true name Grade37 xpos 1601 ypos 778 } push $N2a8d2580 Defocus { channels {{{parent.Blur11.channels}}} scale {{blur/10*5} {blur/10*5}} name Defocus18 xpos 1510 ypos 778 } push $Na25f7280 Grade { channels rgba blackpoint 0.1 whitepoint 0.3 white_clamp true name Grade43 xpos 1211 ypos 778 } push $N2a8cdce0 Defocus { channels {{{parent.Blur11.channels}}} scale {{blur/10*3} {blur/10*3}} name Defocus22 xpos 1120 ypos 777 } push $Na25f26c0 Grade { channels rgba blackpoint 0.05 whitepoint 0.1 white_clamp true name Grade44 xpos 814 ypos 778 } push $N2a8c8b40 Defocus { channels {{{parent.Blur11.channels}}} scale {{blur/10} {blur/10}} name Defocus23 xpos 720 ypos 778 } push $Na25edc30 Grade { channels rgba blackpoint 0.025 whitepoint 0.05 white_clamp true name Grade46 xpos 409 ypos 778 } push $N2a8c3ff0 Defocus { channels {{{parent.Blur11.channels}}} scale {{blur/10/4*2} {blur/10/4*2}} name Defocus25 xpos 318 ypos 777 } push $N5f813960 Grade { channels rgba whitepoint 0.025 white_clamp true name Grade47 xpos 210 ypos 777 } push $N2a8bf430 Defocus { channels {{{parent.Blur11.channels}}} scale {{blur/10/4} {blur/10/4}} name Defocus26 xpos 116 ypos 778 } push $N2a8baa60 Dot { name Dot107 xpos -248 ypos 845 } Group { inputs 3 name KeymixBBox8 tile_color 0x4b5ec6ff xpos 116 ypos 835 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set Ndeecbd80 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set Ndeecfa60 [stack 0] push $Ndeecbd80 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set Ndeeb4460 [stack 0] push $Ndeecfa60 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $Ndeeb4460 push $Ndeecbd80 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox14 tile_color 0x4b5ec6ff xpos 318 ypos 835 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set Nd726a40 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set Nd7141f0 [stack 0] push $Nd726a40 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set Nd738430 [stack 0] push $Nd7141f0 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $Nd738430 push $Nd726a40 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox15 tile_color 0x4b5ec6ff xpos 720 ypos 836 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set Nd777010 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set Nd77bb50 [stack 0] push $Nd777010 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set Nd79ca10 [stack 0] push $Nd77bb50 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $Nd79ca10 push $Nd777010 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox16 tile_color 0x4b5ec6ff xpos 1120 ypos 836 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set Nd7e2780 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set Nd7e7060 [stack 0] push $Nd7e2780 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N1f739910 [stack 0] push $Nd7e7060 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N1f739910 push $Nd7e2780 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox17 tile_color 0x4b5ec6ff xpos 1510 ypos 836 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N1f790aa0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N1f793db0 [stack 0] push $N1f790aa0 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N1f7a77c0 [stack 0] push $N1f793db0 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N1f7a77c0 push $N1f790aa0 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox18 tile_color 0x4b5ec6ff xpos 1911 ypos 836 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N1f7de7f0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N1f7e30e0 [stack 0] push $N1f7de7f0 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N1f7fb2f0 [stack 0] push $N1f7e30e0 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N1f7fb2f0 push $N1f7de7f0 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox19 tile_color 0x4b5ec6ff xpos 2497 ypos 836 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N14029560 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N1402dd70 [stack 0] push $N14029560 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N14046820 [stack 0] push $N1402dd70 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N14046820 push $N14029560 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Switch { inputs 2 which {{quality i}} name Switch3 xpos 2852 ypos 842 } push $N54d9edd0 Dot { name Dot23 xpos 255 ypos -312 } set N28094400 [stack 0] Dot { name Dot26 xpos 454 ypos -312 } set N911f8140 [stack 0] Dot { name Dot28 xpos 660 ypos -312 } set N911fcd00 [stack 0] Dot { name Dot30 xpos 859 ypos -312 } set N91201850 [stack 0] Dot { name Dot7 xpos 1054 ypos -312 } set N91206410 [stack 0] Dot { name Dot5 xpos 1242 ypos -313 } set N9120af60 [stack 0] Dot { name Dot9 xpos 1447 ypos -313 } set N912101b0 [stack 0] Dot { name Dot11 xpos 1643 ypos -313 } set N91214a60 [stack 0] Dot { name Dot13 xpos 1843 ypos -313 } set N91219620 [stack 0] Dot { name Dot15 xpos 2045 ypos -313 } set N9121e170 [stack 0] Dot { name Dot17 xpos 2243 ypos -313 } set N91222d30 [stack 0] Dot { name Dot19 xpos 2441 ypos -314 } set N91227880 [stack 0] Dot { name Dot21 xpos 2633 ypos -314 } Grade { channels rgba blackpoint 0.9 white_clamp true name Grade8 xpos 2599 ypos -225 } push $N6b8fb770 Dot { name Dot24 xpos 161 ypos -272 } set N18f55580 [stack 0] Dot { name Dot27 xpos 363 ypos -272 } set N18f59f50 [stack 0] Dot { name Dot29 xpos 566 ypos -272 } set N18f5eb10 [stack 0] Dot { name Dot31 xpos 765 ypos -272 } set N18f63660 [stack 0] Dot { name Dot3 xpos 963 ypos -272 } set N18f68220 [stack 0] Dot { name Dot8 xpos 1151 ypos -273 } set N18f6cd40 [stack 0] Dot { name Dot10 xpos 1356 ypos -273 } set N18f718c0 [stack 0] Dot { name Dot12 xpos 1552 ypos -273 } set N18f76440 [stack 0] Dot { name Dot14 xpos 1752 ypos -273 } set N18f7afc0 [stack 0] Dot { name Dot16 xpos 1954 ypos -273 } set N18f7fb40 [stack 0] Dot { name Dot18 xpos 2152 ypos -273 } set N18f846c0 [stack 0] Dot { name Dot20 xpos 2350 ypos -274 } set N18f89240 [stack 0] Dot { name Dot22 xpos 2542 ypos -274 } Blur { channels {{{parent.Blur11.channels}}} size {{blur/10*10} {blur/10*10}} name Blur10 xpos 2508 ypos -224 } push $N91227880 Grade { channels rgba blackpoint 0.8 whitepoint 0.9 white_clamp true name Grade7 xpos 2407 ypos -225 } push $N18f89240 Blur { channels {{{parent.Blur11.channels}}} size {{blur/10*9} {blur/10*9}} name Blur9 xpos 2316 ypos -225 } push $N91222d30 Grade { channels rgba blackpoint 0.7 whitepoint 0.8 white_clamp true name Grade6 xpos 2209 ypos -225 } push $N18f846c0 Blur { channels {{{parent.Blur11.channels}}} size {{blur/10*8} {blur/10*8}} name Blur8 xpos 2118 ypos -225 } push $N9121e170 Grade { channels rgba blackpoint 0.6 whitepoint 0.7 white_clamp true name Grade5 xpos 2011 ypos -225 } push $N18f7fb40 Blur { channels {{{parent.Blur11.channels}}} size {{blur/10*7} {blur/10*7}} name Blur7 xpos 1920 ypos -227 } push $N91219620 Grade { channels rgba blackpoint 0.5 whitepoint 0.6 white_clamp true name Grade4 xpos 1809 ypos -225 } push $N18f7afc0 Blur { channels {{{parent.Blur11.channels}}} size {{blur/10*6} {blur/10*6}} name Blur6 xpos 1718 ypos -225 } push $N91214a60 Grade { channels rgba blackpoint 0.4 whitepoint 0.5 white_clamp true name Grade3 xpos 1609 ypos -225 } push $N18f76440 Blur { channels {{{parent.Blur11.channels}}} size {{blur/10*5} {blur/10*5}} name Blur5 xpos 1518 ypos -226 } push $N912101b0 Grade { channels rgba blackpoint 0.3 whitepoint 0.4 white_clamp true name Grade2 xpos 1413 ypos -225 } push $N18f718c0 Blur { channels {{{parent.Blur11.channels}}} size {{blur/10*4} {blur/10*4}} name Blur4 xpos 1322 ypos -225 } push $N9120af60 Grade { channels rgba blackpoint 0.2 whitepoint 0.3 white_clamp true name Grade1 xpos 1208 ypos -225 } push $N18f6cd40 Blur { channels {{{parent.Blur11.channels}}} size {{blur/10*3} {blur/10*3}} name Blur3 xpos 1117 ypos -226 } push $N91206410 Grade { channels rgba blackpoint 0.1 whitepoint 0.2 white_clamp true name Grade13 xpos 1020 ypos -225 } push $N18f68220 Blur { channels {{{parent.Blur11.channels}}} size {{blur/10*2} {blur/10*2}} name Blur2 xpos 929 ypos -226 } push $N91201850 Grade { channels rgba blackpoint 0.075 whitepoint 0.1 white_clamp true name Grade14 xpos 825 ypos -225 } push $N18f63660 Blur { channels {{{parent.Blur11.channels}}} size {{blur/10} {blur/10}} name Blur14 xpos 731 ypos -226 } push $N911fcd00 Grade { channels rgba blackpoint 0.05 whitepoint 0.075 white_clamp true name Grade11 xpos 626 ypos -225 } push $N18f5eb10 Blur { channels {{{parent.Blur11.channels}}} size {{blur/10/4*3} {blur/10/4*3}} name Blur13 xpos 532 ypos -225 } push $N911f8140 Grade { channels rgba blackpoint 0.025 whitepoint 0.05 white_clamp true name Grade10 xpos 420 ypos -225 } push $N18f59f50 Blur { channels {{{parent.Blur11.channels}}} size {{blur/10/4*2} {blur/10/4*2}} name Blur12 xpos 329 ypos -227 } push $N28094400 Grade { channels rgba whitepoint 0.025 white_clamp true name Grade9 xpos 221 ypos -225 } push $N18f55580 Blur { channels rgba size {{blur/10/4} {blur/10/4}} name Blur11 xpos 127 ypos -228 } push $N4f496420 Group { inputs 3 name KeymixBBox27 tile_color 0x4b5ec6ff xpos 127 ypos -165 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set Nbcd4000 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set Nbcd8b20 [stack 0] push $Nbcd4000 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set Nf470760 [stack 0] push $Nbcd8b20 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $Nf470760 push $Nbcd4000 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox28 tile_color 0x4b5ec6ff xpos 329 ypos -165 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set Na0770ca0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set Nf555020 [stack 0] push $Na0770ca0 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set Na0780350 [stack 0] push $Nf555020 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $Na0780350 push $Na0770ca0 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox29 tile_color 0x4b5ec6ff xpos 532 ypos -165 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set Na07fde50 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set Na07cbad0 [stack 0] push $Na07fde50 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set Na084c960 [stack 0] push $Na07cbad0 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $Na084c960 push $Na07fde50 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox30 tile_color 0x4b5ec6ff xpos 731 ypos -163 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N8d1180f0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N8d11b650 [stack 0] push $N8d1180f0 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N8d12d120 [stack 0] push $N8d11b650 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N8d12d120 push $N8d1180f0 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox31 tile_color 0x4b5ec6ff xpos 929 ypos -163 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N8d22f770 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set Nf7d470d0 [stack 0] push $N8d22f770 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N8d0f8a20 [stack 0] push $Nf7d470d0 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N8d0f8a20 push $N8d22f770 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox32 tile_color 0x4b5ec6ff xpos 1117 ypos -163 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N8d0cd7a0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N1c7ff0e0 [stack 0] push $N8d0cd7a0 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N8d0bd7d0 [stack 0] push $N1c7ff0e0 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N8d0bd7d0 push $N8d0cd7a0 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox33 tile_color 0x4b5ec6ff xpos 1322 ypos -163 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N96e1fcc0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N8ad7c520 [stack 0] push $N96e1fcc0 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N8ad74ab0 [stack 0] push $N8ad7c520 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N8ad74ab0 push $N96e1fcc0 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox34 tile_color 0x4b5ec6ff xpos 1518 ypos -163 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set Na7be63d0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set Na7beae50 [stack 0] push $Na7be63d0 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N7865ad20 [stack 0] push $Na7beae50 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N7865ad20 push $Na7be63d0 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox35 tile_color 0x4b5ec6ff xpos 1718 ypos -163 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N7869f3e0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N786c1730 [stack 0] push $N7869f3e0 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N786ad850 [stack 0] push $N786c1730 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N786ad850 push $N7869f3e0 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox36 tile_color 0x4b5ec6ff xpos 1920 ypos -163 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set Nf8872d0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N754d57f0 [stack 0] push $Nf8872d0 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set Ndc23bc20 [stack 0] push $N754d57f0 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $Ndc23bc20 push $Nf8872d0 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox37 tile_color 0x4b5ec6ff xpos 2118 ypos -163 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set Ndc99d740 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set Ndc9a21c0 [stack 0] push $Ndc99d740 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N54be7be0 [stack 0] push $Ndc9a21c0 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N54be7be0 push $Ndc99d740 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox38 tile_color 0x4b5ec6ff xpos 2316 ypos -163 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set Nd84a0c0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set Nd854030 [stack 0] push $Nd84a0c0 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N9f7c9040 [stack 0] push $Nd854030 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N9f7c9040 push $Nd84a0c0 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox39 tile_color 0x4b5ec6ff xpos 2508 ypos -163 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N9f62f8c0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N9f6e4800 [stack 0] push $N9f62f8c0 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N9c473700 [stack 0] push $N9f6e4800 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N9c473700 push $N9f62f8c0 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Dot { name Dot59 xpos 2883 ypos -155 } push $N8b910580 Dot { name Dot60 xpos 253 ypos -51 } set N7b493fa0 [stack 0] Dot { name Dot61 xpos 452 ypos -51 } set N7b498b20 [stack 0] Dot { name Dot63 xpos 857 ypos -51 } set N4cf3b610 [stack 0] Dot { name Dot64 xpos 1250 ypos -52 } set N4cf40190 [stack 0] Dot { name Dot66 xpos 1646 ypos -53 } set N4cf44d10 [stack 0] Dot { name Dot68 xpos 2046 ypos -53 } set N4cf49890 [stack 0] Dot { name Dot72 xpos 2631 ypos -53 } Grade { channels rgba blackpoint 0.7 white_clamp true name Grade27 xpos 2597 ypos 36 } push $N4f4c5620 Dot { name Dot73 xpos 159 ypos -11 } set N4cf638f0 [stack 0] Dot { name Dot74 xpos 361 ypos -11 } set N4cf682c0 [stack 0] Dot { name Dot76 xpos 763 ypos -11 } set N2a8cd720 [stack 0] Dot { name Dot77 xpos 1159 ypos -12 } set N4cf72060 [stack 0] Dot { name Dot79 xpos 1555 ypos -13 } set N4cf76c20 [stack 0] Dot { name Dot81 xpos 1955 ypos -13 } set N38c36a50 [stack 0] Dot { name Dot85 xpos 2540 ypos -13 } Blur { channels {{{parent.Blur11.channels}}} size {{blur/10*10} {blur/10*10}} name Blur1 xpos 2506 ypos 35 } push $N4cf49890 Grade { channels rgba blackpoint 0.5 whitepoint 0.7 white_clamp true name Grade31 xpos 2012 ypos 35 } push $N38c36a50 Blur { channels {{{parent.Blur11.channels}}} size {{blur/10*7} {blur/10*7}} name Blur18 xpos 1921 ypos 33 } push $N4cf44d10 Grade { channels rgba blackpoint 0.3 whitepoint 0.5 white_clamp true name Grade33 xpos 1612 ypos 34 } push $N4cf76c20 Blur { channels {{{parent.Blur11.channels}}} size {{blur/10*5} {blur/10*5}} name Blur20 xpos 1521 ypos 35 } push $N4cf40190 Grade { channels rgba blackpoint 0.1 whitepoint 0.3 white_clamp true name Grade35 xpos 1216 ypos 35 } push $N4cf72060 Blur { channels {{{parent.Blur11.channels}}} size {{blur/10*3} {blur/10*3}} name Blur22 xpos 1125 ypos 35 } push $N4cf3b610 Grade { channels rgba blackpoint 0.05 whitepoint 0.1 white_clamp true name Grade36 xpos 823 ypos 36 } push $N2a8cd720 Blur { channels {{{parent.Blur11.channels}}} size {{blur/10} {blur/10}} name Blur23 xpos 729 ypos 35 } push $N7b498b20 Grade { channels rgba blackpoint 0.025 whitepoint 0.05 white_clamp true name Grade38 xpos 418 ypos 36 } push $N4cf682c0 Blur { channels {{{parent.Blur11.channels}}} size {{blur/10/4*2} {blur/10/4*2}} name Blur25 xpos 327 ypos 36 } push $N7b493fa0 Grade { channels rgba whitepoint 0.025 white_clamp true name Grade39 xpos 219 ypos 38 } push $N4cf638f0 Blur { channels {{{parent.Blur11.channels}}} size {{blur/10/4} {blur/10/4}} name Blur26 xpos 125 ypos 38 } push $N4f489320 Group { inputs 3 name KeymixBBox40 tile_color 0x4b5ec6ff xpos 125 ypos 96 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N64cd0460 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N64cd4f20 [stack 0] push $N64cd0460 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -365 } set N64ceb840 [stack 0] push $N64cd4f20 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N64ceb840 push $N64cd0460 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox26 tile_color 0x4b5ec6ff xpos 327 ypos 96 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N8c419fd0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N8c41a420 [stack 0] push $N8c419fd0 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -365 } set N14090e70 [stack 0] push $N8c41a420 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N14090e70 push $N8c419fd0 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox25 tile_color 0x4b5ec6ff xpos 729 ypos 98 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N64d70d10 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N64d73b90 [stack 0] push $N64d70d10 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -365 } set N64d794a0 [stack 0] push $N64d73b90 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N64d794a0 push $N64d70d10 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox23 tile_color 0x4b5ec6ff xpos 1125 ypos 97 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N851d7020 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N851dba10 [stack 0] push $N851d7020 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N851f9400 [stack 0] push $N851dba10 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N851f9400 push $N851d7020 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox22 tile_color 0x4b5ec6ff xpos 1521 ypos 97 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N8519d270 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N851a1d50 [stack 0] push $N8519d270 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N58869eb0 [stack 0] push $N851a1d50 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N58869eb0 push $N8519d270 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox20 tile_color 0x4b5ec6ff xpos 1921 ypos 97 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N587abac0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N587b0560 [stack 0] push $N587abac0 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N587c5410 [stack 0] push $N587b0560 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N587c5410 push $N587abac0 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox21 tile_color 0x4b5ec6ff xpos 2506 ypos 97 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 189 ypos -485 number 1 } set N58823320 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } set N587ff6e0 [stack 0] push $N58823320 Merge2 { inputs 2 operation plus bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 285 ypos -410 } Merge2 { inputs 2 name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos 285 ypos -365 } set N5882b5b0 [stack 0] push $N587ff6e0 CopyBBox { inputs 2 name CopyBBox2 xpos 531 ypos -259 } push $N5882b5b0 push $N58823320 CopyBBox { inputs 2 name CopyBBox1 xpos 189 ypos -259 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 name Keymix8 xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Switch { inputs 2 which {{quality i}} name Switch2 xpos 2849 ypos 103 } Dot { name Dot75 xpos 3248 ypos 106 } Switch { inputs 2 which {{blur_type i}} name Switch1 xpos 3214 ypos 842 } Output { name Output1 xpos 3214 ypos 1164 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_iConvolve.gizmo ================================================ Group { name iConvolve help "iConvolve v0.1 - apEssentials by Adrian Pueyo\n\nQuick tool to convolve an image though a kernel, based on a ctrlMask channel. The ctrlMask must go from 0 to 1..\n\nmin size and max size define the maximum and minimum size in pixels that the kernel will have. Multiplier is an easy way to resize both together.\n\nadrianpueyo.com, 2019" onCreate "n = nuke.thisNode()\nn\['black'].setFlag(0x00000004)\nn\['white'].setFlag(0x00000004)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"auto_steps\":\n n\[\"steps\"].setEnabled(not k.value())" tile_color 0xe88543ff selected true addUserKnob {20 iConvolve} addUserKnob {41 channels T ZDefocus.channels} addUserKnob {26 "" l "Local GPU:" T ""} addUserKnob {26 "" -STARTLINE T "GeForce GTX 580"} addUserKnob {41 useGPUIfAvailable l "Use GPU if available" T ZDefocus.useGPUIfAvailable} addUserKnob {26 ""} addUserKnob {41 ctrlMask_channel l ctrlMask T ChannelMerge1.A} addUserKnob {3 steps +DISABLED} steps 10 addUserKnob {6 auto_steps l auto -STARTLINE} auto_steps true addUserKnob {7 black l "min size (black)" R 0 100} black 1 addUserKnob {7 white l "max size (white)" R 0 100} white 20 addUserKnob {41 multiplier T ZDefocus.size} addUserKnob {26 ""} addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {26 version_author l " " t "iConvolve v0.1\n2019" T "
    iConvolve v0.1 - adrianpueyo.com, 2019
    "} } Input { inputs 0 name Inputfilter xpos -152 ypos 64 number 1 } Input { inputs 0 name InputctrlMask xpos -152 ypos -141 number 2 } set Nd1202bf0 [stack 0] push $Nd1202bf0 ChannelMerge { inputs 2 B none output rgba.red bbox A name ChannelMerge1 xpos -152 ypos -115 } add_layer {iConvolve iConvolve.red iConvolve.green iConvolve.blue iConvolve.alpha} Shuffle { green red blue red alpha red out iConvolve name ShuffleI xpos -152 ypos -65 } Clamp { channels iConvolve name ClampI xpos -152 ypos -39 } Grade { channels iConvolve black {{parent.black}} white {{parent.white}} name GradeI xpos -152 ypos -1 } Input { inputs 0 name Inputimage xpos 0 ypos -58 } Copy { inputs 2 from0 iConvolve.red to0 iConvolve.red bbox B name CopyI xpos 0 ypos -1 } ZDefocus2 { inputs 2 channels rgba z_channel iConvolve.red math direct focal_point {350 260} size 1 max_size {{parent.white*size.w} {parent.white*size.h}} filter_type {{"\[exists parent.input1] ? 2 : 0"}} legacy_resize_mode false show_legacy_resize_mode false name ZDefocus onCreate "n = nuke.thisNode()\nn.knob('focal_point').setFlag(0x00008000)\n" selected true xpos 0 ypos 60 } Remove { channels iConvolve name RemoveI xpos 0 ypos 98 } Output { name Output1 xpos 0 ypos 161 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_iErode.gizmo ================================================ Group { name iErode onCreate "n = nuke.thisNode()\nn.knob('blur').setRange(-100, 100)" tile_color 0xcc804e00 note_font "Bitstream Vera Sans Bold" note_font_color 0xffffffff selected true addUserKnob {20 controls l Controls} addUserKnob {41 channels T Erode_master.channels} addUserKnob {14 blur l size R -100 100} addUserKnob {41 filter T Erode_master.filter} addUserKnob {26 ""} addUserKnob {3 quality l Quality} quality 12 addUserKnob {6 exp l Expo +STARTLINE} exp true addUserKnob {20 info} addUserKnob {26 author l Author: T "Phil Prates - pratesphil@gmail.com"} addUserKnob {26 ver l Version: T 1.0} addUserKnob {26 changelog l "" +STARTLINE +INVISIBLE T "1.0 - First \npublic release of pp_erode"} } Input { inputs 0 name Inputmask xpos -992 ypos 451 number 1 } Shuffle { alpha white name add_alpha xpos -992 ypos 643 disable {{"\[string first \".a\" \[channels \[input this 0]]]>-1"}} } Dot { name Dot8 xpos -961 ypos 797 } Dot { name Dot6 xpos -642 ypos 797 } set N7ea400 [stack 0] Dot { name Dot1 xpos -453 ypos 797 } set N7e9d00 [stack 0] Dot { name Dot7 xpos -251 ypos 797 } set N7e9600 [stack 0] Dot { name Dot10 xpos -51 ypos 797 } set N7e8f00 [stack 0] Dot { name Dot16 xpos 133 ypos 797 } set N7e8800 [stack 0] Dot { name Dot15 xpos 333 ypos 797 } set N7e8100 [stack 0] Dot { name Dot13 xpos 535 ypos 797 } set Nf4ce7900 [stack 0] Dot { name Dot12 xpos 724 ypos 797 } set Nf4ce7200 [stack 0] Dot { name Dot28 xpos 918 ypos 797 } set Nf4ce6b00 [stack 0] Dot { name Dot27 xpos 1107 ypos 797 } set Nf4ce6400 [stack 0] Dot { name Dot26 xpos 1309 ypos 797 } set Nf4ce5d00 [stack 0] Dot { name Dot25 xpos 1509 ypos 797 } set Nf4ce5600 [stack 0] Dot { name Dot24 xpos 1693 ypos 797 } set Nf4ce4f00 [stack 0] Dot { name Dot23 xpos 1893 ypos 797 } set Nf4ce4800 [stack 0] Dot { name Dot22 xpos 2095 ypos 797 } set Nf4ce4100 [stack 0] Dot { name Dot21 xpos 2284 ypos 797 } set Nf4ccf900 [stack 0] Dot { name Dot37 xpos 2465 ypos 797 } set Nf4ccf200 [stack 0] Dot { name Dot39 xpos 2654 ypos 797 } set Nf4cceb00 [stack 0] Dot { name Dot41 xpos 2856 ypos 797 } set Nf4cce400 [stack 0] Dot { name Dot43 xpos 3056 ypos 797 } set Nf4ccdd00 [stack 0] Dot { name Dot45 xpos 3240 ypos 797 } set Nf4ccd600 [stack 0] Dot { name Dot47 xpos 3440 ypos 797 } set Nf4cccf00 [stack 0] Dot { name Dot49 xpos 3642 ypos 797 } set Nf4ccc800 [stack 0] Dot { name Dot51 xpos 3831 ypos 797 } set Nf4ccc100 [stack 0] Dot { name Dot53 xpos 4013 ypos 797 } set Nf4cab900 [stack 0] Dot { name Dot55 xpos 4202 ypos 797 } set Nf4cab200 [stack 0] Dot { name Dot57 xpos 4404 ypos 797 } set Nf4caab00 [stack 0] Dot { name Dot59 xpos 4604 ypos 797 } set Nf4caa400 [stack 0] Dot { name Dot61 xpos 4788 ypos 797 } set Nf4ca9d00 [stack 0] Dot { name Dot63 xpos 4988 ypos 797 } set Nf4ca9600 [stack 0] Dot { name Dot65 xpos 5190 ypos 797 } set Nf4ca8f00 [stack 0] Dot { name Dot67 xpos 5379 ypos 797 } set Nf4ca8800 [stack 0] Dot { name Dot76 xpos 5562 ypos 797 } set Nf4ca8100 [stack 0] Dot { name Dot75 xpos 5751 ypos 797 } set Nf4c93900 [stack 0] Dot { name Dot74 xpos 5953 ypos 797 } set Nf4c93200 [stack 0] Dot { name Dot73 xpos 6153 ypos 797 } set Nf4c92b00 [stack 0] Dot { name Dot72 xpos 6337 ypos 797 } set Nf4c92400 [stack 0] Dot { name Dot71 xpos 6537 ypos 797 } set Nf4c91d00 [stack 0] Dot { name Dot70 xpos 6739 ypos 797 } set Nf4c91600 [stack 0] Dot { name Dot69 xpos 6928 ypos 797 } Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_40 xpos 6897 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } Input { inputs 0 name Input xpos -815 ypos 452 } Dot { name Dot2 xpos -784 ypos 704 } set Nf4df0800 [stack 0] Dot { name Dot3 xpos -593 ypos 704 } set Nf4df0100 [stack 0] Dot { name Dot5 xpos -404 ypos 704 } set Nf4de3900 [stack 0] Dot { name Dot9 xpos -202 ypos 704 } set Nf4de3200 [stack 0] Dot { name Dot11 xpos -2 ypos 704 } set Nf4de2b00 [stack 0] Dot { name Dot20 xpos 170 ypos 704 } set Nf4de2400 [stack 0] Dot { name Dot19 xpos 370 ypos 704 } set Nf4de1d00 [stack 0] Dot { name Dot18 xpos 572 ypos 704 } set Nf4de1600 [stack 0] Dot { name Dot17 xpos 761 ypos 704 } set Nf4de0f00 [stack 0] Dot { name Dot36 xpos 937 ypos 704 } set Nf4de0800 [stack 0] Dot { name Dot35 xpos 1126 ypos 704 } set Nf4de0100 [stack 0] Dot { name Dot34 xpos 1328 ypos 704 } set Nf4dcb900 [stack 0] Dot { name Dot33 xpos 1528 ypos 704 } set Nf4dcb200 [stack 0] Dot { name Dot32 xpos 1700 ypos 704 } set Nf4dcab00 [stack 0] Dot { name Dot31 xpos 1900 ypos 704 } set Nf4dca400 [stack 0] Dot { name Dot30 xpos 2102 ypos 704 } set Nf4dc9d00 [stack 0] Dot { name Dot29 xpos 2291 ypos 704 } set Nf4dc9600 [stack 0] Dot { name Dot38 xpos 2514 ypos 704 } set Nf4dc8f00 [stack 0] Dot { name Dot40 xpos 2703 ypos 704 } set Nf4dc8800 [stack 0] Dot { name Dot42 xpos 2905 ypos 704 } set Nf4dc8100 [stack 0] Dot { name Dot44 xpos 3105 ypos 704 } set Nf4db3900 [stack 0] Dot { name Dot46 xpos 3277 ypos 704 } set Nf4db3200 [stack 0] Dot { name Dot48 xpos 3477 ypos 704 } set Nf4db2b00 [stack 0] Dot { name Dot50 xpos 3679 ypos 704 } set Nf4db2400 [stack 0] Dot { name Dot52 xpos 3868 ypos 704 } set Nf4db1d00 [stack 0] Dot { name Dot54 xpos 4062 ypos 704 } set Nf4db1600 [stack 0] Dot { name Dot56 xpos 4251 ypos 704 } set Nf4db0f00 [stack 0] Dot { name Dot58 xpos 4453 ypos 704 } set Nf4db0800 [stack 0] Dot { name Dot60 xpos 4653 ypos 704 } set Nf4db0100 [stack 0] Dot { name Dot62 xpos 4825 ypos 704 } set Nf4d9f900 [stack 0] Dot { name Dot64 xpos 5025 ypos 704 } set Nf4d9f200 [stack 0] Dot { name Dot66 xpos 5227 ypos 704 } set Nf4d9eb00 [stack 0] Dot { name Dot68 xpos 5416 ypos 704 } set Nf4d9e400 [stack 0] Dot { name Dot84 xpos 5589 ypos 704 } set Nf4d9dd00 [stack 0] Dot { name Dot83 xpos 5778 ypos 704 } set Nf4d9d600 [stack 0] Dot { name Dot82 xpos 5980 ypos 704 } set Nf4d9cf00 [stack 0] Dot { name Dot81 xpos 6180 ypos 704 } set Nf4d9c800 [stack 0] Dot { name Dot80 xpos 6352 ypos 704 } set Nf4d9c100 [stack 0] Dot { name Dot79 xpos 6552 ypos 704 } set Nf4d7b900 [stack 0] Dot { name Dot78 xpos 6754 ypos 704 } set Nf4d7b200 [stack 0] Dot { name Dot77 xpos 6943 ypos 704 } FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_40 xpos 6975 ypos 737 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4c91600 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_39 xpos 6708 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4d7b200 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_39 xpos 6786 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4c91d00 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_38 xpos 6506 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4d7b900 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_38 xpos 6584 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4c92400 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_37 xpos 6306 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4d9c100 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_37 xpos 6384 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4c92b00 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_36 xpos 6122 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4d9c800 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_36 xpos 6211 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4c93200 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_35 xpos 5922 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4d9cf00 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_35 xpos 6011 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4c93900 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_34 xpos 5720 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4d9d600 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_34 xpos 5809 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ca8100 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_33 xpos 5531 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4d9dd00 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_33 xpos 5620 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ca8800 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_32 xpos 5348 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4d9e400 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_32 xpos 5440 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ca8f00 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_31 xpos 5159 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4d9eb00 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_31 xpos 5251 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ca9600 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_30 xpos 4957 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4d9f200 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_30 xpos 5049 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ca9d00 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_29 xpos 4757 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4d9f900 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_29 xpos 4849 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4caa400 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_28 xpos 4573 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4db0100 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_28 xpos 4676 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4caab00 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_27 xpos 4373 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4db0800 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_27 xpos 4476 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4cab200 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_26 xpos 4171 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4db0f00 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_26 xpos 4274 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4cab900 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_25 xpos 3982 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4db1600 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_25 xpos 4085 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ccc100 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_24 xpos 3800 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4db1d00 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_24 xpos 3892 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ccc800 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_23 xpos 3611 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4db2400 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_23 xpos 3703 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4cccf00 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_22 xpos 3409 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4db2b00 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_22 xpos 3501 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ccd600 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_21 xpos 3209 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4db3200 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_21 xpos 3301 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ccdd00 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_20 xpos 3025 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4db3900 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_20 xpos 3128 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4cce400 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_19 xpos 2825 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4dc8100 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_19 xpos 2928 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4cceb00 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_18 xpos 2623 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4dc8800 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_18 xpos 2726 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ccf200 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_17 xpos 2434 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4dc8f00 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_17 xpos 2537 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ccf900 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_16 xpos 2253 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4dc9600 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_16 xpos 2334 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ce4100 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_15 xpos 2064 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4dc9d00 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_15 xpos 2145 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ce4800 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_14 xpos 1862 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4dca400 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_14 xpos 1943 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ce4f00 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_13 xpos 1662 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4dcab00 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_13 xpos 1743 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ce5600 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_12 xpos 1478 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4dcb200 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_12 xpos 1570 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ce5d00 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_11 xpos 1278 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4dcb900 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_11 xpos 1370 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ce6400 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_10 xpos 1076 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4de0100 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_10 xpos 1168 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ce6b00 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_9 xpos 887 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4de0800 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_9 xpos 979 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ce7200 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_8 xpos 693 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4de0f00 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_8 xpos 785 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4ce7900 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_7 xpos 504 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4de1600 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_7 xpos 596 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $N7e8100 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_6 xpos 302 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4de1d00 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_6 xpos 394 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $N7e8800 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_5 xpos 102 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4de2400 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_5 xpos 194 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $N7e8f00 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_4 xpos -82 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4de2b00 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_4 xpos 21 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $N7e9600 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_3 xpos -282 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4de3200 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_3 xpos -179 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $N7e9d00 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_2 xpos -484 ypos 850 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4de3900 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_2 xpos -381 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $N7ea400 Grade { channels alpha blackpoint {{parent.exp==1?expAmnt.x:linAmnt.x}} whitepoint {{parent.exp==1?expAmnt.y:linAmnt.y}} name Grade_1 xpos -676 ypos 851 addUserKnob {20 User} addUserKnob {12 linAmnt l "" +STARTLINE} linAmnt {{(ittNum-1)/parent.Erode_master.quality} {ittNum/parent.Erode_master.quality}} addUserKnob {12 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum-1)/pow2(parent.Erode_master.quality)} {pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4df0100 FilterErode { channels {{{parent.Erode_master.channels}}} size {{parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt} {parent.exp==1?-parent.blur*expAmnt:-parent.blur*linAmnt}} filter {{parent.Erode_master.filter}} name FilterErode_1 xpos -570 ypos 738 addUserKnob {20 User} addUserKnob {7 linAmnt l "" +STARTLINE} linAmnt {{ittNum/parent.Erode_master.quality}} addUserKnob {7 expAmnt l "" +STARTLINE} expAmnt {{pow2(ittNum)/pow2(parent.Erode_master.quality)}} addUserKnob {3 ittNum l "" +STARTLINE} ittNum {{"\[lrange \[split \[value name] _] 1 1]"}} } push $Nf4df0800 Dot { name Dot4 xpos -784 ypos 939 } set Nf4898100 [stack 0] Keymix { inputs 3 bbox A name Keymix1 xpos -570 ypos 932 } set Nf4883900 [stack 0] Keymix { inputs 3 bbox A name Keymix2 xpos -381 ypos 932 } set Nf4883200 [stack 0] Keymix { inputs 3 bbox A name Keymix3 xpos -179 ypos 932 } set Nf4882b00 [stack 0] Keymix { inputs 3 bbox A name Keymix4 xpos 21 ypos 932 } set Nf4882400 [stack 0] Keymix { inputs 3 bbox A name Keymix8 xpos 194 ypos 932 } set Nf4881d00 [stack 0] Keymix { inputs 3 bbox A name Keymix7 xpos 394 ypos 932 } set Nf4881600 [stack 0] Keymix { inputs 3 bbox A name Keymix6 xpos 596 ypos 932 } set Nf4880f00 [stack 0] Keymix { inputs 3 bbox A name Keymix5 xpos 785 ypos 932 } set Nf4880800 [stack 0] Keymix { inputs 3 bbox A name Keymix16 xpos 979 ypos 932 } set Nf4880100 [stack 0] Keymix { inputs 3 bbox A name Keymix15 xpos 1168 ypos 932 } set Nf4853900 [stack 0] Keymix { inputs 3 bbox A name Keymix14 xpos 1370 ypos 932 } set Nf4853200 [stack 0] Keymix { inputs 3 bbox A name Keymix13 xpos 1570 ypos 932 } set Nf4852b00 [stack 0] Keymix { inputs 3 bbox A name Keymix12 xpos 1743 ypos 932 } set Nf4852400 [stack 0] Keymix { inputs 3 bbox A name Keymix11 xpos 1943 ypos 932 } set Nf4851d00 [stack 0] Keymix { inputs 3 bbox A name Keymix10 xpos 2145 ypos 932 } set Nf4851600 [stack 0] Keymix { inputs 3 bbox A name Keymix9 xpos 2334 ypos 932 } set Nf4850f00 [stack 0] Keymix { inputs 3 bbox A name Keymix17 xpos 2537 ypos 932 } set Nf4850800 [stack 0] Keymix { inputs 3 bbox A name Keymix18 xpos 2726 ypos 932 } set Nf4850100 [stack 0] Keymix { inputs 3 bbox A name Keymix19 xpos 2928 ypos 932 } set Nf482b900 [stack 0] Keymix { inputs 3 bbox A name Keymix20 xpos 3128 ypos 932 } set Nf482b200 [stack 0] Keymix { inputs 3 bbox A name Keymix21 xpos 3301 ypos 932 } set Nf482ab00 [stack 0] Keymix { inputs 3 bbox A name Keymix22 xpos 3501 ypos 932 } set Nf482a400 [stack 0] Keymix { inputs 3 bbox A name Keymix23 xpos 3703 ypos 932 } set Nf4829d00 [stack 0] Keymix { inputs 3 bbox A name Keymix24 xpos 3892 ypos 932 } set Nf4829600 [stack 0] Keymix { inputs 3 bbox A name Keymix25 xpos 4085 ypos 932 } set Nf4828f00 [stack 0] Keymix { inputs 3 bbox A name Keymix26 xpos 4274 ypos 932 } set Nf4828800 [stack 0] Keymix { inputs 3 bbox A name Keymix27 xpos 4476 ypos 932 } set Nf4828100 [stack 0] Keymix { inputs 3 bbox A name Keymix28 xpos 4676 ypos 932 } set Nf49f3900 [stack 0] Keymix { inputs 3 bbox A name Keymix29 xpos 4849 ypos 932 } set Nf49f3200 [stack 0] Keymix { inputs 3 bbox A name Keymix30 xpos 5049 ypos 932 } set Nf49f2b00 [stack 0] Keymix { inputs 3 bbox A name Keymix31 xpos 5251 ypos 932 } set Nf49f2400 [stack 0] Keymix { inputs 3 bbox A name Keymix32 xpos 5440 ypos 932 } set Nf49f1d00 [stack 0] Keymix { inputs 3 bbox A name Keymix40 xpos 5620 ypos 932 } set Nf49f1600 [stack 0] Keymix { inputs 3 bbox A name Keymix39 xpos 5809 ypos 932 } set Nf49f0f00 [stack 0] Keymix { inputs 3 bbox A name Keymix38 xpos 6011 ypos 932 } set Nf49f0800 [stack 0] Keymix { inputs 3 bbox A name Keymix37 xpos 6211 ypos 932 } set Nf49f0100 [stack 0] Keymix { inputs 3 bbox A name Keymix36 xpos 6384 ypos 932 } set Nf49c3900 [stack 0] Keymix { inputs 3 bbox A name Keymix35 xpos 6584 ypos 932 } set Nf49c3200 [stack 0] Keymix { inputs 3 bbox A name Keymix34 xpos 6786 ypos 932 } set Nf49c2b00 [stack 0] Keymix { inputs 3 bbox A name Keymix33 xpos 6975 ypos 932 } push $Nf49c2b00 push $Nf49c3200 push $Nf49c3900 push $Nf49f0100 push $Nf49f0800 push $Nf49f0f00 push $Nf49f1600 push $Nf49f1d00 push $Nf49f2400 push $Nf49f2b00 push $Nf49f3200 push $Nf49f3900 push $Nf4828100 push $Nf4828800 push $Nf4828f00 push $Nf4829600 push $Nf4829d00 push $Nf482a400 push $Nf482ab00 push $Nf482b200 push $Nf482b900 push $Nf4850100 push $Nf4850800 push $Nf4850f00 push $Nf4851600 push $Nf4851d00 push $Nf4852400 push $Nf4852b00 push $Nf4853200 push $Nf4853900 push $Nf4880100 push $Nf4880800 push $Nf4880f00 push $Nf4881600 push $Nf4881d00 push $Nf4882400 push $Nf4882b00 push $Nf4883200 push 0 push $Nf4883900 push $Nf4898100 Dot { name Dot14 xpos -784 ypos 1002 } Dissolve { inputs 41+1 which {{parent.Erode_master.quality}} name Dissolve1 xpos 3128 ypos 2149 } Output { name Output1 xpos 3128 ypos 2338 } FilterErode { inputs 0 channels rgba filter gaussian name Erode_master xpos 2876 ypos -169 addUserKnob {20 User} addUserKnob {7 quality l Qualitty} quality {{parent.add_alpha.disable==1?parent.quality:1}} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_iMorph.gizmo ================================================ Group { name iMorph tile_color 0x890074ff note_font "Bitstream Vera Sans Bold Bold" selected true addUserKnob {20 iMorph} addUserKnob {41 maskChannel T TimeMachine_v02_4.maskChannel} addUserKnob {26 ""} addUserKnob {41 method l "Morph Method " T Morph_Dissolve_v01_5.method} addUserKnob {41 vectorDetail l "Vector Detail" T Morph_Dissolve_v01_5.vectorDetail} addUserKnob {41 strength l Strength T Morph_Dissolve_v01_5.strength} addUserKnob {26 TransitionBlend l "Transition Blend" T " "} addUserKnob {41 method_1 l "" -STARTLINE T TimeMachine_v02_4.method} addUserKnob {26 ""} addUserKnob {41 numpixels l AdjustBBox T AdjBBox3.numpixels} } BackdropNode { inputs 0 name BackdropNode18 tile_color 0x46313d00 label "Amazing Morph Disolve" note_font_size 50 note_font_color 0xffffffff xpos 147 ypos -310 bdwidth 681 bdheight 464 } Input { inputs 0 name Inputmask xpos 675 ypos -97 number 2 } Dot { name Dot236 label mask note_font_size 41 xpos 709 ypos -3 } TimeWarp { lookup {{floor(frame/10) C x1001 1001 x1092 1092}} time "" filter none name TimeWarp6 xpos 555 ypos -7 } Input { inputs 0 name InputB xpos 296 ypos -370 number 1 } AddChannels { channels rgba color 1 name AddChannels1 xpos 296 ypos -234 } Dot { name Dot242 label B note_font_size 41 xpos 330 ypos -192 } TimeWarp { lookup {{floor(frame/10) C x1001 1001 x1092 1092}} time "" filter none name TimeWarp2 xpos 296 ypos -150 } set N1a221110 [stack 0] AdjBBox { numpixels 100 name AdjBBox3 xpos 296 ypos -47 } push $N1a221110 Input { inputs 0 name InputA xpos 531 ypos -362 } AddChannels { channels rgba color 1 name AddChannels2 xpos 531 ypos -234 } Dot { name Dot237 label A note_font_size 41 xpos 565 ypos -198 } TimeWarp { lookup {{floor(frame/10) C x1001 1001 x1092 1092}} time "" filter none name TimeWarp3 xpos 531 ypos -152 } Group { inputs 2 name Morph_Dissolve_v01_5 help "Allows to morph between two moving plates automatically, or can be used to improve manual Morphs." tile_color 0x890074ff label "(Plate \[value morph])" xpos 420 ypos -79 addUserKnob {20 User} addUserKnob {7 morph l Morph t "Morphs between input 0 and input 1"} morph {{((frame%10)/(1-1/10))/10}} addUserKnob {26 ""} addUserKnob {4 method l "Morph Method" t "Pick which method to use. They may both display artifacts in different areas, try both to see which one produces the best results for your specific morph." M {iDistort Kronos ""}} method Kronos addUserKnob {7 vectorDetail l "Vector Detail" t "Use this to adjust the density of the calculated motion vector field. Higher details capture finer movements, but take will longer to calculate." R 0.01 1} vectorDetail 0.75 addUserKnob {7 strength l Strength t "Match Strength : Stonger values will match larger differences between the two plates." R 0 1.5} strength 1.5 addUserKnob {26 ""} addUserKnob {26 copyright l "" +STARTLINE T "v1.0 - by Erwan Leroy - 2017"} } BackdropNode { inputs 0 name Backdrop1 tile_color 0x5b4e5658 label Zipping note_font_size 40 xpos 600 ypos -55 bdwidth 180 bdheight 241 } Input { inputs 0 name Input1 xpos 1355 ypos -123 number 1 } Dot { name Dot3 tile_color 0xcccccc00 xpos 1389 ypos -72 } set N1a2022a0 [stack 0] Dot { name Dot8 tile_color 0xcccccc00 xpos 1389 ypos 1115 } push $N1a2022a0 Dot { name Dot13 tile_color 0xcccccc00 xpos 1247 ypos -72 } NoTimeBlur { rounding floor single false name NoTimeBlur2 xpos 1213 ypos -15 } Retime { input.first 1001 input.first_lock true output.first 1001 output.last 1002 speed 0.5 before continue after continue filter none time "" name Retime2 label "x\[value input.first]-->x\[value output.first]\n\[if \{\[value speed] == 1\} then \{return \"\"\} else \{return \"spd \[value speed]\"\}]" xpos 1213 ypos 23 } Input { inputs 0 name Input0 xpos -24 ypos -121 } Dot { name Dot4 tile_color 0xcccccc00 xpos 10 ypos -75 } set N1a28d430 [stack 0] Dot { name Dot14 tile_color 0xcccccc00 xpos 155 ypos -75 } NoTimeBlur { rounding floor single false name NoTimeBlur1 xpos 121 ypos -13 } Retime { input.first 1001 input.first_lock true input.last 1218 output.first 1001 output.last 1436 speed 0.5 before continue after continue filter none time "" name Retime1 label "x\[value input.first]-->x\[value output.first]\n\[if \{\[value speed] == 1\} then \{return \"\"\} else \{return \"spd \[value speed]\"\}]" xpos 121 ypos 23 } Switch { inputs 2 which {{(frame-1001)%2}} name Switch1 xpos 650 ypos 35 } Dot { name Dot9 tile_color 0xcccccc00 xpos 684 ypos 124 } set N1a2b56c0 [stack 0] Dot { name Dot2 tile_color 0xcccccc00 xpos 985 ypos 124 } Kronos { retimedChannels all timing2 Frame timingFrame2 {{(frame-1001)*2+1001+parent.morph}} showLegacyMode false motionEstimation Regularized vectorDetailReg {{parent.vectorDetail}} strengthReg {{parent.strength}} legacyModeNuke9 false name Kronos1 xpos 951 ypos 273 } Dot { name Dot12 tile_color 0xcccccc00 xpos 985 ypos 858 } push $N1a2b56c0 Dot { name Dot10 tile_color 0xcccccc00 xpos 415 ypos 124 } VectorGenerator { motionEstimation Regularized vectorDetailReg {{parent.vectorDetail}} strengthReg {{parent.strength}} name VectorGenerator1 xpos 381 ypos 276 } Dot { name Dot1 tile_color 0xcccccc00 xpos 415 ypos 350 } set N1e550e80 [stack 0] Shuffle { in backward blue black alpha black name Shuffle2 label "in \[value in]-->out \[value out]" xpos 217 ypos 340 } TimeOffset { time_offset -1 time "" name TimeOffset2 label "\[value time_offset]" xpos 217 ypos 484 } push $N1e550e80 Shuffle { in forward blue black alpha black name Shuffle1 label "in \[value in]-->out \[value out]" xpos 560 ypos 340 } TimeOffset { time_offset 1 time "" name TimeOffset1 label "\[value time_offset]" xpos 560 ypos 414 } push $N1e550e80 Copy { inputs 2 from0 forward.u to0 forward.u from1 forward.v to1 forward.v bbox B name Copy1 xpos 381 ypos 408 } Copy { inputs 2 from0 backward.u to0 backward.u from1 backward.v to1 backward.v bbox B name Copy2 xpos 381 ypos 478 } set N1e5965d0 [stack 0] Retime { input.first 1000 input.first_lock true input.last 1002 output.first 1000 output.last 1001 speed 2 before continue after continue filter none time "" name Retime4 label "x\[value input.first]-->x\[value output.first]\n\[if \{\[value speed] == 1\} then \{return \"\"\} else \{return \"spd \[value speed]\"\}]" xpos 459 ypos 559 } IDistort { uv forward uv_scale {{1-parent.morph}} name IDistort2 xpos 459 ypos 628 } push $N1e5965d0 Retime { input.first 1001 input.first_lock true input.last 1436 output.first 1001 output.last 1218 speed 2 before continue after continue filter none time "" name Retime3 label "x\[value input.first]-->x\[value output.first]\n\[if \{\[value speed] == 1\} then \{return \"\"\} else \{return \"spd \[value speed]\"\}]" xpos 308 ypos 559 } IDistort { uv backward uv_scale {{parent.morph}} name IDistort1 xpos 308 ypos 624 } Dissolve { inputs 2 which {{parent.morph}} name Dissolve1 xpos 379 ypos 710 } Dot { name Dot11 tile_color 0xcccccc00 xpos 413 ypos 858 } Switch { inputs 2 which {{parent.method}} name Switch3 xpos 627 ypos 854 } push $N1a28d430 Dot { name Dot7 tile_color 0xcccccc00 xpos 10 ypos 1115 } Switch { inputs 3 which {{parent.morph<=0?0:parent.morph>=1?2:1}} name Switch2 xpos 627 ypos 1111 } Output { name Output1 xpos 627 ypos 1205 } end_group CopyBBox { inputs 2 name CopyBBox3 xpos 420 ypos -47 } Group { inputs 2 name TimeMachine_v02_4 help "Does a per-pixel time offset on the image, based on a secondary mask input.\n\nPixels with a mask value of 1 will be offset by the number of frames set in \"frames\".\nMask values of 0 will return the image at the current frame. Values between 0-1 will return an interpolated offset." knobChanged "\n\ng = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() in \[\"frames\",\"method\"]:\n \n i = nuke.toNode(\"img\")\n i2 = nuke.toNode(\"mask\")\n o = nuke.toNode(\"Output1\")\n c = nuke.toNode(\"Copy1\")\n\n if k.name() == \"frames\":\n \n defaultNodes = \[i,i2,o,c]\n for n in nuke.allNodes():\n if n not in defaultNodes:\n nuke.delete(n)\n \n fvalue = g\['frames'].value()\n step = 1\n if fvalue < 0:\n step = -1\n \n for f in range(0,int(fvalue)+step,step):\n t = nuke.nodes.TimeOffset()\n t\['time_offset'].setValue(-f)\n t.setInput(0,i)\n \n if f == 0 :\n lastnode = t\n \n else :\n slice = nuke.nodes.Grade()\n slice\['channels'].setValue(\"alpha\")\n slice\['blackpoint'].setValue(abs((1/(fvalue+1))*abs(f)))\n slice\['whitepoint'].setValue(abs((1/(fvalue+1))*(abs(f)+1)))\n slice.setInput(0,c)\n exp = nuke.nodes.Expression()\n if g\['method'].value() == \"average\":\n exp\['expr3'].setValue('a>1?1:a')\n else:\n exp\['expr3'].setValue('a>0?1:0')\n exp.setInput(0,slice)\n km = nuke.nodes.Keymix()\n km.setInput(1,t)\n km.setInput(0,lastnode)\n km.setInput(2,exp)\n lastnode = km\n \n sw = nuke.nodes.Switch()\n sw.setInput(0,i)\n sw.setInput(1,lastnode)\n sw\['which'].setExpression('parent.maskChannel!=0')\n o.setInput(0,sw)\n \n for n in nuke.allNodes():\n nuke.autoplace(n)\n\n elif k.name() == \"method\":\n\n for e in nuke.allNodes('Expression'):\n if g\['method'].value() == \"average\":\n e\['expr3'].setValue('a>1?1:a')\n else:\n e\['expr3'].setValue('a>0?1:0')\n\n" xpos 420 ypos -7 addUserKnob {20 User} addUserKnob {41 maskChannel T Copy1.from0} addUserKnob {26 ""} addUserKnob {4 method M {nearest average}} method average addUserKnob {3 frames} frames 9 } Input { inputs 0 name mask xpos 400 ypos -228 number 1 } set N1e613b20 [stack 0] push $N1e613b20 Copy { inputs 2 from0 rgba.alpha name Copy1 xpos 400 ypos -80 } set N1e618660 [stack 0] Grade { channels alpha blackpoint 0.9 name Grade9 xpos 1280 ypos -42 } Expression { expr3 a>1?1:a name Expression9 xpos 1280 ypos -4 } Input { inputs 0 name img xpos 154 ypos -369 } set N1e644ce0 [stack 0] TimeOffset { time_offset -9 time "" name TimeOffset10 xpos 1012 ypos -124 } push $N1e618660 Grade { channels alpha blackpoint 0.8 whitepoint 0.9 name Grade8 xpos 1170 ypos -42 } Expression { expr3 a>1?1:a name Expression8 xpos 1170 ypos -4 } push $N1e644ce0 TimeOffset { time_offset -8 time "" name TimeOffset9 xpos 902 ypos -124 } push $N1e618660 Grade { channels alpha blackpoint 0.7 whitepoint 0.8 name Grade7 xpos 1060 ypos -42 } Expression { expr3 a>1?1:a name Expression7 xpos 1060 ypos -4 } push $N1e644ce0 TimeOffset { time_offset -7 time "" name TimeOffset8 xpos 792 ypos -124 } push $N1e618660 Grade { channels alpha blackpoint 0.6 whitepoint 0.7 name Grade6 xpos 950 ypos -42 } Expression { expr3 a>1?1:a name Expression6 xpos 950 ypos -4 } push $N1e644ce0 TimeOffset { time_offset -6 time "" name TimeOffset7 xpos 682 ypos -124 } push $N1e618660 Grade { channels alpha blackpoint 0.5 whitepoint 0.6 name Grade5 xpos 840 ypos -42 } Expression { expr3 a>1?1:a name Expression5 xpos 840 ypos -4 } push $N1e644ce0 TimeOffset { time_offset -5 time "" name TimeOffset6 xpos 572 ypos -124 } push $N1e618660 Grade { channels alpha blackpoint 0.4 whitepoint 0.5 name Grade4 xpos 730 ypos -42 } Expression { expr3 a>1?1:a name Expression4 xpos 730 ypos -4 } push $N1e644ce0 TimeOffset { time_offset -4 time "" name TimeOffset5 xpos 470 ypos -123 } push $N1e618660 Grade { channels alpha blackpoint 0.3 whitepoint 0.4 name Grade3 xpos 620 ypos -42 } Expression { expr3 a>1?1:a name Expression3 xpos 620 ypos -4 } push $N1e644ce0 TimeOffset { time_offset -3 time "" name TimeOffset4 xpos 350 ypos -121 } push $N1e618660 Grade { channels alpha blackpoint 0.2 whitepoint 0.3 name Grade2 xpos 510 ypos -42 } Expression { expr3 a>1?1:a name Expression2 xpos 510 ypos -4 } push $N1e644ce0 TimeOffset { time_offset -2 time "" name TimeOffset3 xpos 249 ypos -126 } push $N1e618660 Grade { channels alpha blackpoint 0.1 whitepoint 0.2 name Grade1 xpos 400 ypos -42 } Expression { expr3 a>1?1:a name Expression1 xpos 400 ypos -4 } push $N1e644ce0 TimeOffset { time_offset -1 time "" name TimeOffset2 xpos 154 ypos -125 } push $N1e644ce0 TimeOffset { time "" name TimeOffset1 xpos 45 ypos -127 } Group { inputs 3 name KeymixBBox tile_color 0x4b5ec6ff xpos 400 ypos 319 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 56 ypos -508 number 1 } set N1e79f450 [stack 0] Remove { operation keep channels alpha name Remove2 xpos 184 ypos -403 } set N1e7a4000 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } Dot { name Dot1 note_font_size 41 xpos 565 ypos -393 } set N1e7b1460 [stack 0] Remove { operation keep channels alpha name Remove1 xpos 448 ypos -403 } push $N1e7a4000 Merge2 { inputs 2 bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 294 ypos -397 } Merge2 { inputs 2 bbox intersection name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 184 ypos -344 } set N1e7d6de0 [stack 0] push $N1e7b1460 CopyBBox { inputs 2 name CopyBBoxUnion1 xpos 531 ypos -344 } Dot { name Dot3 note_font_size 41 xpos 565 ypos -255 } push $N1e7d6de0 push $N1e79f450 CopyBBox { inputs 2 name CopyBBoxUnion xpos 56 ypos -344 } Dot { name Dot2 note_font_size 41 xpos 90 ypos -255 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 channels rgba name Keymix8 selected true xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox1 tile_color 0x4b5ec6ff xpos 510 ypos 319 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 56 ypos -508 number 1 } set N1e81b790 [stack 0] Remove { operation keep channels alpha name Remove2 xpos 184 ypos -403 } set N1e820340 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } Dot { name Dot1 note_font_size 41 xpos 565 ypos -393 } set N1e82d7a0 [stack 0] Remove { operation keep channels alpha name Remove1 xpos 448 ypos -403 } push $N1e820340 Merge2 { inputs 2 bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 294 ypos -397 } Merge2 { inputs 2 bbox intersection name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 184 ypos -344 } set N1e84b0f0 [stack 0] push $N1e82d7a0 CopyBBox { inputs 2 name CopyBBoxUnion1 xpos 531 ypos -344 } Dot { name Dot3 note_font_size 41 xpos 565 ypos -255 } push $N1e84b0f0 push $N1e81b790 CopyBBox { inputs 2 name CopyBBoxUnion xpos 56 ypos -344 } Dot { name Dot2 note_font_size 41 xpos 90 ypos -255 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 channels rgba name Keymix8 selected true xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox2 tile_color 0x4b5ec6ff xpos 620 ypos 319 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 56 ypos -508 number 1 } set N1e88f9c0 [stack 0] Remove { operation keep channels alpha name Remove2 xpos 184 ypos -403 } set N1e8944e0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } Dot { name Dot1 note_font_size 41 xpos 565 ypos -393 } set N1e8a19f0 [stack 0] Remove { operation keep channels alpha name Remove1 xpos 448 ypos -403 } push $N1e8944e0 Merge2 { inputs 2 bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 294 ypos -397 } Merge2 { inputs 2 bbox intersection name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 184 ypos -344 } set N1e8bf340 [stack 0] push $N1e8a19f0 CopyBBox { inputs 2 name CopyBBoxUnion1 xpos 531 ypos -344 } Dot { name Dot3 note_font_size 41 xpos 565 ypos -255 } push $N1e8bf340 push $N1e88f9c0 CopyBBox { inputs 2 name CopyBBoxUnion xpos 56 ypos -344 } Dot { name Dot2 note_font_size 41 xpos 90 ypos -255 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 channels rgba name Keymix8 selected true xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox3 tile_color 0x4b5ec6ff xpos 730 ypos 319 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 56 ypos -508 number 1 } set N1e903c00 [stack 0] Remove { operation keep channels alpha name Remove2 xpos 184 ypos -403 } set N1e9087b0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } Dot { name Dot1 note_font_size 41 xpos 565 ypos -393 } set N1e915c10 [stack 0] Remove { operation keep channels alpha name Remove1 xpos 448 ypos -403 } push $N1e9087b0 Merge2 { inputs 2 bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 294 ypos -397 } Merge2 { inputs 2 bbox intersection name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 184 ypos -344 } set N1e933560 [stack 0] push $N1e915c10 CopyBBox { inputs 2 name CopyBBoxUnion1 xpos 531 ypos -344 } Dot { name Dot3 note_font_size 41 xpos 565 ypos -255 } push $N1e933560 push $N1e903c00 CopyBBox { inputs 2 name CopyBBoxUnion xpos 56 ypos -344 } Dot { name Dot2 note_font_size 41 xpos 90 ypos -255 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 channels rgba name Keymix8 selected true xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox4 tile_color 0x4b5ec6ff xpos 840 ypos 319 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 56 ypos -508 number 1 } set N1e977e10 [stack 0] Remove { operation keep channels alpha name Remove2 xpos 184 ypos -403 } set N1e97c980 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } Dot { name Dot1 note_font_size 41 xpos 565 ypos -393 } set N1e989e40 [stack 0] Remove { operation keep channels alpha name Remove1 xpos 448 ypos -403 } push $N1e97c980 Merge2 { inputs 2 bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 294 ypos -397 } Merge2 { inputs 2 bbox intersection name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 184 ypos -344 } set N1e9a77a0 [stack 0] push $N1e989e40 CopyBBox { inputs 2 name CopyBBoxUnion1 xpos 531 ypos -344 } Dot { name Dot3 note_font_size 41 xpos 565 ypos -255 } push $N1e9a77a0 push $N1e977e10 CopyBBox { inputs 2 name CopyBBoxUnion xpos 56 ypos -344 } Dot { name Dot2 note_font_size 41 xpos 90 ypos -255 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 channels rgba name Keymix8 selected true xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox5 tile_color 0x4b5ec6ff xpos 950 ypos 319 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 56 ypos -508 number 1 } set N1e9ec060 [stack 0] Remove { operation keep channels alpha name Remove2 xpos 184 ypos -403 } set N1e9f0c10 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } Dot { name Dot1 note_font_size 41 xpos 565 ypos -393 } set N1e9fdfe0 [stack 0] Remove { operation keep channels alpha name Remove1 xpos 448 ypos -403 } push $N1e9f0c10 Merge2 { inputs 2 bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 294 ypos -397 } Merge2 { inputs 2 bbox intersection name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 184 ypos -344 } set N1ea1b9e0 [stack 0] push $N1e9fdfe0 CopyBBox { inputs 2 name CopyBBoxUnion1 xpos 531 ypos -344 } Dot { name Dot3 note_font_size 41 xpos 565 ypos -255 } push $N1ea1b9e0 push $N1e9ec060 CopyBBox { inputs 2 name CopyBBoxUnion xpos 56 ypos -344 } Dot { name Dot2 note_font_size 41 xpos 90 ypos -255 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 channels rgba name Keymix8 selected true xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox6 tile_color 0x4b5ec6ff xpos 1060 ypos 319 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 56 ypos -508 number 1 } set N1ea60260 [stack 0] Remove { operation keep channels alpha name Remove2 xpos 184 ypos -403 } set N1ea64e60 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } Dot { name Dot1 note_font_size 41 xpos 565 ypos -393 } set N1ea722c0 [stack 0] Remove { operation keep channels alpha name Remove1 xpos 448 ypos -403 } push $N1ea64e60 Merge2 { inputs 2 bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 294 ypos -397 } Merge2 { inputs 2 bbox intersection name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 184 ypos -344 } set N1ea8fc10 [stack 0] push $N1ea722c0 CopyBBox { inputs 2 name CopyBBoxUnion1 xpos 531 ypos -344 } Dot { name Dot3 note_font_size 41 xpos 565 ypos -255 } push $N1ea8fc10 push $N1ea60260 CopyBBox { inputs 2 name CopyBBoxUnion xpos 56 ypos -344 } Dot { name Dot2 note_font_size 41 xpos 90 ypos -255 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 channels rgba name Keymix8 selected true xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox7 tile_color 0x4b5ec6ff xpos 1170 ypos 319 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 56 ypos -508 number 1 } set N1ead44d0 [stack 0] Remove { operation keep channels alpha name Remove2 xpos 184 ypos -403 } set N1ead9080 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } Dot { name Dot1 note_font_size 41 xpos 565 ypos -393 } set N1eae6450 [stack 0] Remove { operation keep channels alpha name Remove1 xpos 448 ypos -403 } push $N1ead9080 Merge2 { inputs 2 bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 294 ypos -397 } Merge2 { inputs 2 bbox intersection name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 184 ypos -344 } set N1eb03e50 [stack 0] push $N1eae6450 CopyBBox { inputs 2 name CopyBBoxUnion1 xpos 531 ypos -344 } Dot { name Dot3 note_font_size 41 xpos 565 ypos -255 } push $N1eb03e50 push $N1ead44d0 CopyBBox { inputs 2 name CopyBBoxUnion xpos 56 ypos -344 } Dot { name Dot2 note_font_size 41 xpos 90 ypos -255 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 channels rgba name Keymix8 selected true xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group Group { inputs 3 name KeymixBBox8 tile_color 0x4b5ec6ff xpos 1280 ypos 319 addUserKnob {20 KeymixBBox} addUserKnob {41 channels T Keymix8.channels} addUserKnob {41 maskChannel l "mask channel" T Keymix8.maskChannel} addUserKnob {41 invertMask l invert -STARTLINE T Keymix8.invertMask} addUserKnob {41 mix T Keymix8.mix} addUserKnob {41 bbox l "Set BBox to" T Keymix8.bbox} } Input { inputs 0 name InputA xpos 56 ypos -508 number 1 } set N1eb48700 [stack 0] Remove { operation keep channels alpha name Remove2 xpos 184 ypos -403 } set N1eb4d2b0 [stack 0] Input { inputs 0 name Inputmask xpos 531 ypos -493 number 2 } Dot { name Dot1 note_font_size 41 xpos 565 ypos -393 } set N1eb5a710 [stack 0] Remove { operation keep channels alpha name Remove1 xpos 448 ypos -403 } push $N1eb4d2b0 Merge2 { inputs 2 bbox intersection name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 294 ypos -397 } Merge2 { inputs 2 bbox intersection name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 184 ypos -344 } set N1eb78060 [stack 0] push $N1eb5a710 CopyBBox { inputs 2 name CopyBBoxUnion1 xpos 531 ypos -344 } Dot { name Dot3 note_font_size 41 xpos 565 ypos -255 } push $N1eb78060 push $N1eb48700 CopyBBox { inputs 2 name CopyBBoxUnion xpos 56 ypos -344 } Dot { name Dot2 note_font_size 41 xpos 90 ypos -255 } Input { inputs 0 name InputB xpos 378 ypos -493 } Keymix { inputs 3 channels rgba name Keymix8 selected true xpos 378 ypos -259 } Output { name Output1 xpos 378 ypos -158 } end_group push $N1e644ce0 Switch { inputs 2 which {{parent.maskChannel!=0}} name Switch1 xpos 1257 ypos 412 } Output { name Output1 xpos 1280 ypos 538 } end_group TimeWarp { lookup {{frame*10 C x1001 1001 x1092 1092}} time "" filter none name TimeWarp4 xpos 420 ypos 62 } Output { name Output1 xpos 420 ypos 162 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_iMorph_v2.gizmo ================================================ Group { name iMorph help "iMorph v1.0 by adrianpueyo\n\nBlinkscript-accelerated morph between two inputs based on the vectors calculated by a VectorGenerator, with an optional input mask to drive the morph amount. Useful to create morphing transitions between two plates.\n\nMorphing method based on the awesome MorphDissolve from Erwan Leroy. Tool concept and fun developed with Tony Lyons.\n\nadrianpueyo.com, 2020" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nkn = k.name()\nif kn == \"inputChange\":\n n\[\"morph\"].setEnabled(not n.input(2))\n " tile_color 0x890074ff note_font "Bitstream Vera Sans Bold" selected true addUserKnob {20 iMorph} addUserKnob {26 gpuName l "Local GPU:" T "GeForce GT 750M"} addUserKnob {41 useGPUIfAvailable l "Use GPU if available" T iMorphKernel.useGPUIfAvailable} addUserKnob {41 vectorize l "Vectorize on CPU" -STARTLINE T iMorphKernel.vectorize} addUserKnob {26 ""} addUserKnob {4 outMode l output M {"A warped" "B warped" "AB morph"}} outMode "AB morph" addUserKnob {7 morph t "Morphing amount between A and B (0=A, 1=B).\n\nIf a mask Input is supplied, this knob gets ignored."} morph 1 addUserKnob {41 mask_channel l "mask channel" T CopyMask.from0} addUserKnob {26 ""} addUserKnob {4 motionEstimation l Motion M {Regularized Local "" ""}} addUserKnob {7 vectorDetailReg l "Vector Detail" R 0.01 1} vectorDetailReg 0.3 addUserKnob {7 strengthReg l Strength R 0 1.5} strengthReg 1.5 addUserKnob {26 version_author l " " t "iMorph v1.0\n2020" T "
    iMorph v1.0 - adrianpueyo.com, 2020
    "} } Input { inputs 0 name Inputmask xpos -49 ypos 358 number 2 } Input { inputs 0 name InputA xpos 240 ypos -45 } Shuffle { name Shuffle2 xpos 240 ypos 3 } set N4d33070 [stack 0] Dot { name Dot1 note_font_size 41 xpos 274 ypos 227 } set N8bb00080 [stack 0] Dot { name Dot7 note_font_size 41 xpos 113 ypos 227 } Shuffle { red black green black blue black alpha black name Shuffle1 xpos 79 ypos 270 } Grade { channels rgba white 0 add {{parent.morph}} white_clamp true name Grade1 xpos 79 ypos 294 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name CopyMask label "\[value from0]" xpos 79 ypos 349 disable {{"\[\nif \{ \[lsearch -exact \[channels \[input this 1]] \[value from0]] >= 0\} \{\n return 0\n\} else \{\n if \{ \[lsearch -exact \[channels \[input this 1]] rgba.\[value from0]] >= 0\} \{\n return 0\n \} else \{\n return 1\n\}\n\}\n]"}} } Dot { name Dot5 note_font_size 41 xpos 113 ypos 427 } Input { inputs 0 name InputB xpos 342 ypos -175 number 1 } Shuffle { name Shuffle3 xpos 342 ypos -37 } set N71c81eb0 [stack 0] Dot { name Dot3 note_font_size 41 xpos 611 ypos -34 } TimeWarp { lookup {{floor(frame/2)}} length 0 time "" filter none name TimeWarp2 xpos 577 ypos 23 } push $N4d33070 Dot { name Dot6 note_font_size 41 xpos 492 ypos 6 } TimeWarp { lookup {{floor(frame/2)}} length 0 time "" filter none name TimeWarp1 xpos 458 ypos 44 } Switch { inputs 2 which {{frame%2}} name SwitchInputs xpos 516 ypos 107 } VectorGenerator { useGPUIfAvailable {{parent.iMorphKernel.useGPUIfAvailable}} motionEstimation {{parent.motionEstimation}} vectorDetailReg {{parent.vectorDetailReg}} strengthReg {{parent.strengthReg}} name VectorGenerator1 xpos 516 ypos 157 } set N268df2c0 [stack 0] TimeOffset { time_offset -1 time "" name TimeOffset3 xpos 623 ypos 224 } push $N268df2c0 Shuffle { in forward blue black alpha black name ShuffleVec1 label "\[value in]" xpos 516 ypos 223 } Copy { inputs 2 from0 backward.u to0 rgba.blue from1 backward.v to1 rgba.alpha name CopyVec2 xpos 516 ypos 277 } TimeWarp { lookup {{frame*2}} length 0 time "" filter none name TimeWarp3 xpos 516 ypos 338 } Dot { name Dot4 note_font_size 41 xpos 550 ypos 427 } push $N71c81eb0 Dot { name Dot2 note_font_size 41 xpos 376 ypos 346 } push $N8bb00080 BlinkScript { inputs 4 recompileCount 39 ProgramGroup 1 KernelDescription "2 \"iMorphKernel\" iterate pixelWise f73cb735e959d6b7677ca59a811ae605a17d00706c4cd292f2677544fd90aa0a 5 \"src1\" Read Random \"src2\" Read Random \"vec\" Read Random \"mask\" Read Random \"dst\" Write Point 3 \"useMask\" Int 1 AAAAAA== \"weight\" Float 1 AAAAAA== \"mode\" Int 1 AAAAAA== 3 \"useMask\" 1 1 \"weight\" 1 1 \"mode\" 1 1 0" kernelSource "//---------------------------------------------------------\n// iMorphKernel - iMorph v1.0 by Adrian Pueyo\n// adrianpueyo.com, 2020\n// ---------------------------------------------------------\nkernel iMorphKernel : ImageComputationKernel\n\{\n Image src1;\n Image src2;\n Image vec;\n Image mask;\n Image dst;\n param:\n int useMask;\n float weight;\n int mode; //0=A,1=B,2=morph\n\n void process(int2 pos) \{\n SampleType(vec) vectors = vec(pos.x,pos.y);\n float which;\n if(useMask==0)\{\n which = weight;\n \}else\{\n which = clamp(bilinear(mask,pos.x,pos.y).w,0.0f,1.0f); //alpha channel\n \}\n SampleType(src1) src1_warped, src2_warped;\n if(mode!=1)\{\n src1_warped = bilinear(src1,pos.x+vectors.z*which,pos.y+vectors.w*which);\n \}\n if(mode!=0)\{\n src2_warped = bilinear(src2,pos.x+vectors.x*(1-which),pos.y+vectors.y*(1-which));\n \}\n\n if(mode==0)\{\n dst() = src1_warped;\n \}else if(mode==1)\{\n dst() = src2_warped;\n \}else\{\n dst() = src1_warped*(1-which)+src2_warped*which;\n \}\n \}\n\};" rebuild "" iMorphKernel_useMask {{!CopyMask.disable}} iMorphKernel_weight {{parent.morph}} iMorphKernel_mode {{parent.outMode}} rebuild_finalise "" name iMorphKernel selected true xpos 240 ypos 420 } Output { name Output1 xpos 240 ypos 518 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_iTransform_ae.gizmo ================================================ Group { name iTransform_ae onCreate "n = nuke.thisNode()\nif n.knob('create').value() == False:\n format = n.format()\n center = \[format.width() / 2, format.height() / 2]\n n.knob('center').setValue(center)\n n.knob('create').setValue(1)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"smart\":\n s = n.knob('smart').getValue()\n if s == 0: \n groupNode = nuke.thisNode()\n with groupNode:\n m = nuke.toNode('mask')\n s = nuke.toNode('STMap')\n s.setInput(2, m)\n else:\n groupNode = nuke.thisNode()\n with groupNode:\n m = nuke.toNode('no_filter')\n s = nuke.toNode('STMap')\n s.setInput(2, m)" tile_color 0xa57aaaff note_font "Verdana Bold" note_font_color 0xffffffff selected true addUserKnob {20 iTransform} addUserKnob {41 channels T STMap.channels} addUserKnob {26 ""} addUserKnob {6 blackoutsideBefore l "black outside before" +STARTLINE} addUserKnob {41 translate T inTransform2.translate} addUserKnob {41 rotate_1 l rotate T inTransform2.rotate} addUserKnob {41 scale_1 l scale T inTransform2.scale} addUserKnob {41 skewX_1 l "skew X" T inTransform2.skewX} addUserKnob {41 skewY_1 l "skew Y" T inTransform2.skewY} addUserKnob {4 skewOrder l "skew order" M {XY YX}} addUserKnob {41 center T inTransform2.center} addUserKnob {22 set_center l "set center" -STARTLINE T "n = nuke.thisNode()\nw= n.width()\nh=n.height()\nn\['center'].setValue(\[w/2,h/2])"} addUserKnob {4 filterN l filter M {impulse cubic keys Simon Rifman Mitchell Parzen Notch Lanczos4 Lanczos6 sinc4 "" "" "" ""}} filterN cubic addUserKnob {26 text_5_1 l "" -STARTLINE T " "} addUserKnob {26 text_5_1_1 l "" -STARTLINE T " "} addUserKnob {41 clamp -STARTLINE T inTransform2.clamp} addUserKnob {26 ""} addUserKnob {6 cropformat l "crop to format" +STARTLINE} addUserKnob {26 text_5_2 l "" -STARTLINE T " "} addUserKnob {6 blackoutsideafter l "black outside after" -STARTLINE} addUserKnob {14 addpixels R 0 100} addUserKnob {7 mix} mix 1 addUserKnob {26 text_5 l "" -STARTLINE T " "} addUserKnob {6 smart l "smart mask " -STARTLINE} smart true addUserKnob {26 ""} addUserKnob {6 create +INVISIBLE +STARTLINE} create true addUserKnob {26 about_1 l "" +STARTLINE T "
    iTransform v2.0 - Aitor Echeveste © 2021
    "} addUserKnob {20 About} addUserKnob {26 text_1 l "" +STARTLINE T " "} addUserKnob {26 text_2 l "" +STARTLINE T " "} addUserKnob {26 text_4 l "" +STARTLINE T "iTransform v2.0\n"} addUserKnob {26 about_1_1 l "" +STARTLINE T "by Aitor Echeveste Izquierdo © 2021"} addUserKnob {26 text_1_1 l "" +STARTLINE T " "} addUserKnob {26 ""} addUserKnob {26 text_3 l "" +STARTLINE T " "} addUserKnob {26 website l "" +STARTLINE T "www.aitorecheveste.com"} } Input { inputs 0 name crtlMask xpos 606 ypos 531 number 1 } set Na054ab00 [stack 0] NoOp { name mattebbox xpos 606 ypos 555 addUserKnob {20 User} addUserKnob {15 bbox} bbox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} } Expression { temp_name0 alpha_an temp_expr0 a!=0?1:0 expr0 alpha_an expr1 alpha_an expr2 alpha_an expr3 alpha_an name no_filter xpos 606 ypos 579 } Dot { name Dot1 xpos 640 ypos 727 } Input { inputs 0 name mask xpos 221 ypos 507 number 2 } Expression { expr3 (1-a) name invert xpos 221 ypos 531 } Input { inputs 0 name img xpos 121 ypos 344 } BlackOutside { name BlackOutsideBefore xpos 121 ypos 370 disable {{!blackoutsideBefore}} } set Ncbcf900 [stack 0] Crop { box {{-input.format.width} {-input.format.height} {(input.format.width*2)} {(input.format.height*2)}} crop false name Crop1 xpos 474 ypos 370 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Expression { expr0 (x+0.5)/width expr1 (y+.5)/height name Expression1 xpos 474 ypos 418 } set Ncbceb00 [stack 0] Dot { name Dot2 xpos 343 ypos 421 } push $Na054ab00 push $Ncbceb00 Transform { translate {{parent.inTransform2.translate} {parent.inTransform2.translate}} rotate {{parent.inTransform2.rotate}} scale {{parent.inTransform2.scale} {parent.inTransform2.scale}} skewX {{parent.inTransform2.skewX}} skewY {{parent.inTransform2.skewY}} skew_order {{parent.skewOrder}} center {{parent.inTransform2.center} {parent.inTransform2.center}} invert_matrix {{parent.inTransform2.invert_matrix}} filter {{parent.filterN}} clamp {{parent.inTransform2.clamp}} shutteroffset centred name inTransform1 xpos 599 ypos 418 } push $Ncbceb00 Keymix { inputs 3 name Keymix1 xpos 474 ypos 525 } Keymix { inputs 3 name Keymix2 xpos 309 ypos 525 disable {{"\[exists parent.input2]==1?smart==1?0:1:1" x1 0 x1001 1}} } Expression { expr0 ((x+0.5)/width) expr1 ((y+0.5)/height) mix {{1-parent.mix}} name mix xpos 309 ypos 563 } push $Ncbcf900 NoOp { name inputbbox xpos 126 ypos 723 addUserKnob {20 User} addUserKnob {15 bbox} bbox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} } STMap { inputs 2+1 channels rgba uv rgb name STMap xpos 309 ypos 723 } Crop { box {{"inputbbox.bboxmattebbox.bbox?\n\ninputbbox.bbox+addpixels\n\n:inputbbox.bbox+(mattebbox.bbox- inputbbox.bbox)+addpixels"} {"inputbbox.bbox>mattebbox.bbox?\n\ninputbbox.bbox+addpixels\n:inputbbox.bbox+(mattebbox.bbox- inputbbox.bbox)+addpixels"}} name Crop3 xpos 309 ypos 747 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Reformat { name Reformat2 xpos 309 ypos 771 disable {{!cropformat}} } BlackOutside { name BlackOutsideAfter xpos 309 ypos 797 disable {{!blackoutsideafter}} } Output { name Output1 xpos 309 ypos 823 } Transform { inputs 0 skew_order {{parent.skewOrder}} center {1203 568} filter {{parent.filterN}} shutteroffset centred name inTransform2 xpos 715 ypos 417 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_mScatterGeo.gizmo ================================================ Group { name mScatterGeo onCreate "\nnuke.thisGroup()\['max_instance'].setFlag(0x00000100)\n" tile_color 0x194e7fff note_font Verdana addUserKnob {20 general} addUserKnob {26 title_snap l "SNAP SETUP"} addUserKnob {41 snap_type l "snap type" t "selected vertices/faces\nCreate instance(s) from selected vertices/faces. 'RGB texture' sampling does not support this snap type.\n\ndensity map (alpha)\nUse alpha channel of sampleGeo as density map. 'RGB texture' sampling supported this snap type." T menu02.snap_type} addUserKnob {26 title_vf_setting l "vertices/faces setting"} addUserKnob {7 random_percentage l "random percentage" t "Setup the percentage of the random will apply. The value clipped between 0 to 100." R 0.01 100} random_percentage 100 addUserKnob {3 random_seed l seed} addUserKnob {26 title_dmap_setting l "density map setting" +DISABLED} addUserKnob {4 uv_type l UV t "single tile\nprocess faster.\n\nudim\nwill scan through all the UV tiles before process.\n\n*if not sure what type of UV set in geo, recommend to use 'udim' to scan through all the tiles. Or use my another tool, 'UVEditor', to check." +DISABLED M {"single tile (fast)" udim "" "" "" "" "" "" ""}} addUserKnob {3 sample_res l "sample resolution" t "This resolution setting to control the spacing between each instance. Higher solution will get more sample points in UV. Lower solution will get less sample points in UV." -STARTLINE +DISABLED} sample_res 1024 addUserKnob {78 max_instance l "max instance(s)" t "This can control the maximun instance(s) will be generated, to speed up the process if user only need to generate few instance(s)." +DISABLED n 1} max_instance 1000 addUserKnob {3 dmap_seed l seed -STARTLINE +DISABLED} addUserKnob {3 fail_attempts l "fail attempts" t "set how many times to retry if they fail on sampling. When max instances are larger than available samples, then the sample process will fall into a loop hole. So value limited the retry attempts.\n\n\n- lower value can get faster but may not meet the max instances value.\n\n\n- higher value can meet the max instance value but might take longer time to retry the sampling.\n\n\nWhat makes the sampling fail?\nposition+range size already existing in the sample data.\n\n" +DISABLED} fail_attempts 500 addUserKnob {4 rgb_color l "RGB texture color" t "Sample color from 'sampleGeo' texture input and generated with instance(s).\n\nsample premult RGB\nsemi-transparent pixels will get darker color on generated instance, but the color is 100% match to the sampled texture color.\n\nsample unpremult RGB\nThis can avoid dark color on semi-transparent pixels." +DISABLED M {"not selected" "sample premult RGB" "sample unpremult RGB" "" "" ""}} addUserKnob {26 spacer l "" +STARTLINE T
    } addUserKnob {26 title_rotate l "ROTATION SETUP"} addUserKnob {4 rotation_type l type t "Rotation type of the snap geo.\n\nlookAt axis/camera\ninstance rotation base on the input axis/camera direction. Axis/Camera input will be created in the generate group.\n\nface normal\ninstance rotation base on the geo surface." M {"lookAt axis/camera" "vertices/faces normal" "" "" "" "" ""}} rotation_type "vertices/faces normal" addUserKnob {26 title_input l "INPUT SETUP"} addUserKnob {41 var_type l "variation type" t "select the input variation type.\n\nFramehold\nrandom pick a still frame of texture & geo.\n\nTimeoffset\nrandom pick the start frame of texture sequence and animated geo." T menu01.var_type} addUserKnob {3 frame_start l "frame range"} frame_start 1001 addUserKnob {3 frame_end l "" -STARTLINE} frame_end 1100 addUserKnob {3 offset_start l "offset range" +HIDDEN} offset_start -20 addUserKnob {3 offset_end l "" -STARTLINE +HIDDEN} offset_end 20 addUserKnob {26 spacer_3 l "" +STARTLINE T
    } addUserKnob {22 generate l "\[--- GENERATE ---]" t "Generate group named 'mSnap'" T "thisGRP = nuke.thisGroup()\n\ntry :\n\t##### get functions\n\tgoStore = nuke.toNode('store')\n\tgoStore\['fn01'].execute()\n\tgoStore\['fn02'].execute()\n\n\tfilterCheck = goStore\['filterNonReverse'].getValue().split(',')\n\tfilter3DNodes = goStore\['filter3DNodes'].value().split(',')\n\tfilterPrimitives = goStore\['filterPrimitives'].value().split(',')\n\n\tif thisGRP\['snap_type'].getValue() :\n\t\t##### density map type\n\t\tuvStart = nuke.toNode('uv_dot')\n\t\t##### remove prep nodes\n\t\trmNodes( uvStart )\n\n\t\tcurveTool = nuke.toNode('CurveTool')\n\t\ttexRes = int( thisGRP\['sample_res'].value() )\n\t\tmaxIns = thisGRP\['max_instance'].getValue()\n\n\t\tif texRes > 32 :\n\t\t\t##### find map data on tile\n\t\t\tsamNodes = scanTile( thisGRP, uvStart, curveTool, texRes )\n\n\t\t\tif len(samNodes) :\n\t\t\t\t##### find the sum of area\n\t\t\t\ttotalArea = 0\n\t\t\t\tfor samNode in samNodes :\n\t\t\t\t\ttotalArea += samNode.width() * samNode.height()\n\n\t\t\t\tif maxIns < totalArea :\n\t\t\t\t\t##### find tile proportion\n\t\t\t\t\ttileData = \{\}\n\t\t\t\t\tfor samNode in samNodes :\n\t\t\t\t\t\tsamCount = int( round( ( samNode.width() * samNode.height() ) / totalArea * maxIns ) )\n\t\t\t\t\t\ttileData\[samNode.name()] = \[ samNode, samCount ]\n\n\t\t\t\t\t##### process\n\t\t\t\t\tptsID = samID( thisGRP , tileData )\n\n\t\t\t\t\tif thisGRP\['with_animation'].value() :\n\t\t\t\t\t\t##### snap with animation\n\t\t\t\t\t\tprojRange = str( int( nuke.root()\['first_frame'].getValue() ) ) + '-' + str( int( nuke.root()\['last_frame'].getValue() ) )\n\t\t\t\t\t\tp = nuke.Panel('frame range')\n\t\t\t\t\t\tp.addSingleLineInput('set frame range', projRange)\n\t\t\t\t\t\tif p.show() == 1 :\n\t\t\t\t\t\t\tcrange = p.value('set frame range').replace(' ', '')\n\t\t\t\t\t\t\tif '-' in crange :\n\t\t\t\t\t\t\t\tfRNG = \[ int( crange.split('-')\[0] ) , int( crange.split('-')\[1] ) ]\n\t\t\t\t\t\t\t\tgenDMap( thisGRP , ptsID , samNodes , fRNG )\n\t\t\t\t\telse :\n\t\t\t\t\t\tgenDMap( thisGRP , ptsID , samNodes )\n\n\t\t\t\t\t##### remove prep nodes\n\t\t\t\t\trmNodes( uvStart )\n\t\t\t\telse :\n\t\t\t\t\tnuke.message(\"'max instance(s)'' larger than detected sample area.

    Try to reduce 'max instance(s)' or increase 'sample resolution' to process again.

    Process denied...\")\n\t\t\t\t\t##### remove prep nodes\n\t\t\t\t\trmNodes( uvStart )\n\t\t\telse :\n\t\t\t\tnuke.message('No UV data detected.

    Process denied...')\n\t\telse :\n\t\t\tnuke.message('sample resolution cannot set lower than 32.

    Process denied...')\n\telse :\n\t\t##### selected vertices/faces type\n\t\tmainstream = upstreamNodes( thisGRP , filter3DNodes )\n\n\t\tdisabledNodes = \[]\n\t\tfor lvl01 in mainstream :\n\t\t\tfor lvl02 in lvl01 :\n\t\t\t\tif lvl02\['disable'].getValue() :\n\t\t\t\t\tdisabledNodes.append( lvl02.name() )\n\n\t\t##### check disable nodes\n\t\tif len( disabledNodes ) :\n\t\t\tnuke.message( 'Disabled node(s) :

    \{0\}

    Please disconnect these transformation nodes from the tree.

    Process denied...'.format( '
    '.join(disabledNodes) ) )\n\n\t\telse :\n\t\t\tif failCHK( thisGRP , \['EditGeo','ProcGeo'] ) :\n\t\t\t\tnuke.message(\"'EditGeo' & 'ProceduralNoise' detected in upstream which are not support 'selected vertices/faces' at this moment.

    Recommend to use 'WriteGeo' export it, and then bring it back with 'ReadGeo to process, or use density map.

    Process denied...\")\n\t\t\telse :\n\t\t\t\t##### find primary geo\n\t\t\t\tmainGeo = primaryGeo( mainstream , filterPrimitives )\n\n\t\t\t\t##### get selected ID\n\t\t\t\tptsID = selID()\n\n\t\t\t\tif len( ptsID ) == 0 :\n\t\t\t\t\tfacesVTX = \[]\n\t\t\t\t\tfor key,value in enumerate( mainGeo\['geo_select'].getSelectedFaces()\[0] ) :\n\t\t\t\t\t\tif value :\n\t\t\t\t\t\t\tfacesVTX.append( geoPrims( mainGeo )\[key] )\n\t\t\t\t\tptsID = facesVTX\n\t\t\t\t\tselType = 'face'\n\t\t\t\telse :\n\t\t\t\t\tselType = 'vertex'\n\t\t\t\t\tif thisGRP\['rotation_type'].getValue() :\n\t\t\t\t\t\tif mainGeo.Class() == 'ReadGeo' or mainGeo.Class() == 'ReadGeo2' :\n\t\t\t\t\t\t\tif nuke.ask(\"vertex normal on 'ReadGeo' might wonky in some certain cases.

    'ok' - to keep rotate by vertex normal.
    'cancel' - rotate by faces normal instead.\") :\n\t\t\t\t\t\t\t\tselType = 'vertex'\n\t\t\t\t\t\t\telse :\n\t\t\t\t\t\t\t\tselType = 'vertexFaces'\n\n\t\t\t\t##### random selection\n\t\t\t\tptsID = randSelID( ptsID , thisGRP )\n\n\t\t\t\t##### snap vertex\n\t\t\t\tif ptsID :\n\n\t\t\t\t\tif thisGRP\['rotation_type'].getValue() :\n\t\t\t\t\t\tgonType = len( nuke.toNode('PythonGeo')\['geo'].getGeometry()\[0].primitives() )\n\n\t\t\t\t\tif thisGRP\['with_animation'].value() :\n\t\t\t\t\t\t##### snap with animation\n\t\t\t\t\t\tprojRange = str( int( nuke.root()\['first_frame'].getValue() ) ) + '-' + str( int( nuke.root()\['last_frame'].getValue() ) )\n\t\t\t\t\t\tp = nuke.Panel('frame range')\n\t\t\t\t\t\tp.addSingleLineInput('set frame range', projRange)\n\t\t\t\t\t\tif p.show() == 1 :\n\t\t\t\t\t\t\tcrange = p.value('set frame range').replace(' ', '')\n\t\t\t\t\t\t\tif '-' in crange :\n\t\t\t\t\t\t\t\tfRNG = \[ int( crange.split('-')\[0] ) , int( crange.split('-')\[1] ) ]\n\n\t\t\t\t\t\t\t\t##### Rotation Type\n\t\t\t\t\t\t\t\tif thisGRP\['rotation_type'].getValue() :\n\n\t\t\t\t\t\t\t\t\tif gonType > 1 :\n\t\t\t\t\t\t\t\t\t\t##### tris with animation\n\t\t\t\t\t\t\t\t\t\tgenFaceNor( thisGRP, mainstream, mainGeo, ptsID, selType, fRNG )\n\t\t\t\t\t\t\t\t\telse :\n\t\t\t\t\t\t\t\t\t\t##### quads with animation\n\t\t\t\t\t\t\t\t\t\tgenFaceNor( thisGRP, mainstream, mainGeo, ptsID, selType, fRNG )\n\n\t\t\t\t\t\t\t\telse :\n\t\t\t\t\t\t\t\t\tgenSelVtx( thisGRP, mainstream, ptsID, selType, fRNG )\n\n\t\t\t\t\t\t\telse :\n\t\t\t\t\t\t\t\t##### message of incorrect frame range format\n\t\t\t\t\t\t\t\tnuke.message('Frame range format incorrect.
    It should be :
    \[start frame]-\[last frame]
    spacing allowed.

    e.g.
    1001-1100
    1001 - 1100')\n\n\t\t\t\t\telse :\n\n\t\t\t\t\t\t##### snap static\n\t\t\t\t\t\tif thisGRP\['rotation_type'].getValue() :\n\t\t\t\t\t\t\tif gonType > 1 :\n\t\t\t\t\t\t\t\t##### tris static\n\t\t\t\t\t\t\t\tgenFaceNor( thisGRP, mainstream, mainGeo, ptsID, selType )\n\t\t\t\t\t\t\telse :\n\t\t\t\t\t\t\t\t##### quads static\n\t\t\t\t\t\t\t\tgenFaceNor( thisGRP, mainstream, mainGeo, ptsID, selType )\n\n\t\t\t\t\t\telse :\n\t\t\t\t\t\t\tgenSelVtx( thisGRP, mainstream, ptsID, selType )\n\n\t\t\t\telse :\n\t\t\t\t\tnuke.message( 'Please select vertex/face to start.' )\n\nexcept UnboundLocalError :\n\tnuke.message('No available input found. Input required 3D geo.

    Process denied...')" +STARTLINE} addUserKnob {6 with_animation l "with animated geo" -STARTLINE} addUserKnob {26 ""} addUserKnob {22 selected_vertex_info l "selected vertex info" t "get the vertices/faces info." T "thisGRP = nuke.thisGroup()\npyg = nuke.toNode('PythonGeo')\n\n##### get functions\ngoStore = nuke.toNode('store')\ngoStore\['fn01'].execute()\ngoStore\['fn02'].execute()\n\nfilter3DNodes = goStore\['filter3DNodes'].value().split(',')\nfilterPrimitives = goStore\['filterPrimitives'].value().split(',')\n\nmainstream = upstreamNodes( thisGRP , filter3DNodes )\n\ndisabledNodes = \[]\nfor lvl01 in mainstream :\n for lvl02 in lvl01 :\n if lvl02\['disable'].getValue() :\n disabledNodes.append( lvl02.name() )\n\n##### check disable nodes\nif len( disabledNodes ) :\n nuke.message( 'Disabled node(s) :

    \{0\}

    Please disconnect these transformation nodes from the tree.'.format( '
    '.join(disabledNodes) ) )\n\nelse :\n ##### find primary geo\n mainGeo = primaryGeo( mainstream , filterPrimitives )\n\n ##### get selected ID\n ptsID = selID()\n\n if len( ptsID ) == 0 :\n facesVTX = \[]\n for key,value in enumerate( mainGeo\['geo_select'].getSelectedFaces()\[0] ) :\n if value :\n facesVTX.append( geoPrims( mainGeo )\[key] )\n ptsID = facesVTX\n selType = 1\n else :\n selType = 0\n\n ptsID = randSelID( ptsID , thisGRP )\n\n gData = geoData( pyg , 0 ) ##### get geo data\n\n info = \['geo total vertex : ' + str( len(gData) ) , 'total selected vertex : ' + str( len(ptsID) ) , '' ]\n print ('total vertex : ' + str(len(gData)))\n for i in ptsID :\n if type(i) == str :\n info.append( 'selected geo type : vertex' )\n info.append( 'primitives : ' + str( i.split('_')\[1:]\[0] ) )\n info.append( 'vertex (pos|nor) : ' + str( gData\[i] ) )\n else :\n if len(i) == 3 :\n info.append( 'selected geo type : 3-sides' )\n elif len(i) == 4 :\n info.append( 'selected geo type : 4-sides' )\n else :\n info.append( 'selected geo type : N-sides' )\n\n for prim in i :\n info.append( 'vertex ID : ' + str( prim ) )\n info.append( 'vertex (pos|nor) : ' + str( gData\['0_' + str( prim )] ) )\n\n info.append( '' )\n info.append( '===================' )\n info.append( '' )\n\np = nuke.Panel( 'Selected vertex info :' )\np.addNotepad( '', '
    '.join( info ) )\np.setWidth(1200)\np.show()" +STARTLINE} addUserKnob {26 title_selection l "( optional )" T "save selected vertices / faces"} addUserKnob {41 geo T GeoSelect.geo} addUserKnob {22 save_selection l "save selection" T "if nuke.thisGroup().inputs() :\n\tnuke.thisGroup()\['hidden_btn'].execute()\n\tnuke.thisGroup()\['savedata'].setValue( nuke.thisGroup()\['geo'].toScript() )\nelse :\n\tnuke.message('Save selection fail.
    No inputs found.
    Please connect this node to geo.')" +STARTLINE} addUserKnob {41 hidden_btn l "" +STARTLINE +INVISIBLE T GeoSelect.save_selection} addUserKnob {41 restore_selection l "restore selection" -STARTLINE T GeoSelect.restore_selection} addUserKnob {22 reset_selection l "reset selection" -STARTLINE T "nuke.thisGroup()\['geo'].fromScript('')\nnuke.thisGroup()\['savedata'].setValue('')"} addUserKnob {20 selection_data l "selection data" n 1} selection_data 0 addUserKnob {43 savedata l "saved data" +DISABLED} addUserKnob {20 endGroup n -1} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.4} addUserKnob {26 l_DATE l "Date Modified" T 2021-03-23} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.4
    - added 'fail attempts' knob. (check tooltips)
    - UV type set 'single tile' by default

    1.3
    - compatible with python3
    - fix 'selected vertex info' button (it broke on last version)
    - panel UI update

    1.2
    - Since generated group changed to 'mSnap', 
      it breaks the unique name check, fixed on 1.2 .
    - Added density map feature (alpha).
    - Added RGB as texture color feature.
    - Correct title name on tool's panel ('texture setup' to input 'setup').
    - Minor fix normal to rotate algorithm (x rotation when -y&-z).
    - Removed random selection checkbox.
       *If don't need random selection, just keep random percentage=100.
    - Adjust some backend code.
    - 'mScap' group added group info tab.
    - Input of 'mScatterGeo' changed name from 'Geo' to 'sampleGeo'.
    - Fix rotation X under snap with normal rotation.
      So it match to input geo origin.
    - Fix ReadGeo's vertex normal rotation.
    - Added delete instance on 'mSnap' group.
    - Added 'select all' button on 'mSnap' group.

    1.1
    - 'MassiveSnapGeo' generated group renamed to 'mSnap'
    - fix slider UI after re-open nuke script on 'mSnap'
    - added display snap axis
    - added extract axis

    1.0
    - re-work the unrelease version in 2018\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -510 ypos -41 bdwidth 232 bdheight 407 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x848484ff label bin note_font_size 42 xpos -241 ypos -42 bdwidth 307 bdheight 637 } Input { inputs 0 name sampleGeo xpos 138 ypos -38 } Dot { name Dot1 xpos 172 ypos 64 } set N1e37b800 [stack 0] Normals { display off selectable false action build threshold 0 name Normals xpos 292 ypos 61 } Dot { name Dot2 xpos 326 ypos 141 } set N1e37b000 [stack 0] PythonGeo { name PythonGeo xpos 292 ypos 215 } CurveTool { inputs 0 operation "Auto Crop" channels alpha ROI {0 0 32 32} name CurveTool xpos -130 ypos 128 } NoOp { inputs 0 name menu01 knobChanged "\nif nuke.thisGroup()\['var_type'].value().lower() == 'framehold' :\n nuke.thisGroup()\['frame_start'].setVisible(True)\n nuke.thisGroup()\['frame_end'].setVisible(True)\n nuke.thisGroup()\['offset_start'].setVisible(False)\n nuke.thisGroup()\['offset_end'].setVisible(False)\nelif nuke.thisGroup()\['var_type'].value().lower() == 'timeoffset' :\n nuke.thisGroup()\['frame_start'].setVisible(False)\n nuke.thisGroup()\['frame_end'].setVisible(False)\n nuke.thisGroup()\['offset_start'].setVisible(True)\n nuke.thisGroup()\['offset_end'].setVisible(True)\nelse :\n nuke.thisGroup()\['frame_start'].setVisible(False)\n nuke.thisGroup()\['frame_end'].setVisible(False)\n nuke.thisGroup()\['offset_start'].setVisible(False)\n nuke.thisGroup()\['offset_end'].setVisible(False)\n" xpos -444 ypos 64 addUserKnob {20 User} addUserKnob {4 var_type l "variation type" M {Framehold TimeOffset}} } push $N1e37b000 Dot { name Dot3 xpos 491 ypos 141 } Reformat { inputs 0 type "to box" box_width {{"\[value parent.sample_res]"}} box_height {{"\[value parent.sample_res]"}} box_fixed true name Reformat1 xpos 567 ypos 322 } add_layer {pos pos.red pos.green pos.blue} add_layer {nor nor.red nor.green nor.blue} ScanlineRender { inputs 2 conservative_shader_sampling false projection_mode uv overscan {{"\[value parent.sample_res] * 9"}} motion_vectors_type off MB_channel none output_shader_vectors true P_channel pos N_channel nor name uvRender xpos 457 ypos 322 } Remove { operation keep channels rgba channels2 pos channels3 nor name Remove xpos 457 ypos 402 } Unpremult { name Unpremult1 xpos 457 ypos 482 disable {{"parent.rgb_color == 1 ? 1 : 0"}} } Crop { box {0 0 {"\[value parent.sample_res] * 10"} {"\[value parent.sample_res] * 10"}} name UV1010 xpos 457 ypos 562 } Clamp { channels rgba name Clamp1 xpos 457 ypos 642 } Dot { name uv_dot tile_color 0xff0000ff xpos 491 ypos 722 } NoOp { inputs 0 name store xpos -130 ypos 52 addUserKnob {20 User} addUserKnob {22 fn01 T "import math\nimport random\nimport time\n\n##### mode 0 = lookAt camera || 1 = vertices/faces normal || 2 = density map\n\ndef failCHK( _thisG , _failClass ) :\n\tcurNode = thisGRP\n\tfail = 0\n\twhile curNode :\n\t\tif curNode.Class() in _failClass :\n\t\t\tfail = 1\n\t\tcurNode = curNode.input(0)\n\treturn fail\n\n##########\n\ndef grouper( _n , _iterable ) :\n\timport itertools\n\targs = \[iter(_iterable)] * _n\n\ttry :\n\t\treturn itertools.zip_longest( *args )\n\texcept AttributeError:\n\t\treturn itertools.izip_longest( *args )\n\n##########\n\ndef geoData( _pyNode , _objnum ) :\n\tptsID = \[]\n\tfor i in _pyNode\['geo'].getGeometry()\[_objnum].primitives() :\n\t\tfor j in i :\n\t\t\tif ptsID.count( j ) == 0 :\n\t\t\t\tptsID.append( j )\n\n\tptsID.sort()\n\n\tvtxPos = list( grouper( 3 , list( _pyNode\['geo'].getGeometry()\[_objnum].points() ) ) )\n\tvtxNor = list( grouper( 3 , list( _pyNode\['geo'].getGeometry()\[_objnum].normals() ) ) )\n\n\tgeoFullset = \{\}\n\tfor i in ptsID :\n\t\tgeoFullset\[ str(_objnum) + '_' + str(i) ] = \[ vtxPos\[i] , vtxNor\[i] ]\n\t\n\treturn geoFullset\n\n##########\n\ndef findAvailableName( _name ) :\n\tfindName = 0\n\tdetectName = \[]\n\n\tfor node in nuke.allNodes():\n\t\tif node.name().split('_')\[0] == _name :\n\t\t\tdetectName.append(int(node.name().split('_')\[1]))\n\tdetectName.sort()\n\twhile detectName.count(findName) != 0 :\n\t\tfindName += 1\n\n\treturn findName\n\n##########\n\ndef makePackage( _name , _thisG ) :\n\tavailableName = findAvailableName( _name )\n\txspace = int( nuke.toNode('preferences')\['GridWidth'].getValue() )\n\n\tif _thisG\['var_type'].value().lower() == 'framehold' :\n\t\ttexRNG = \[ _thisG\['frame_start'].getValue() , _thisG\['frame_end'].getValue() ]\n\telif _thisG\['var_type'].value().lower() == 'timeoffset' :\n\t\ttexRNG = \[ _thisG\['offset_start'].getValue() , _thisG\['offset_end'].getValue() ]\n\n\t##### make group\n\tnewName = _name + '_' + str(availableName)\n\trandom.seed( int(time.time()) )\n\tsnapGRP = nuke.nodes.Group(\n\t\tname = newName , \n\t\ttile_color = int(thisGRP\['tile_color'].getValue()) , \n\t\txpos = thisGRP.xpos()+(xspace+random.randint(0,xspace)) , \n\t\typos = thisGRP.ypos()\n\t\t)\n\n\tsnapGRP.addKnob( nuke.Tab_Knob( 'tab_general', 'General' ) )\n\n\tsnapGRP.addKnob( nuke.Link_Knob( 'display_geo', 'display' ) )\n\tsnapGRP\['display_geo'].setLink('MassiveScene.display')\n\tsnapGRP.addKnob( nuke.Link_Knob( 'render_geo', 'render' ) )\n\tsnapGRP\['render_geo'].setLink('MassiveScene.render_mode')\n\n\tsnapGRP.addKnob( nuke.Text_Knob( 'title_random_tex', 'RANDOM INPUT', '( \{0\} )'.format( _thisG\['var_type'].value() ) ) )\n\tsnapGRP.addKnob( nuke.Int_Knob( 'range_start', 'range' ) )\n\tsnapGRP\['range_start'].setValue( int( texRNG\[0] ) )\n\tsnapGRP.addKnob( nuke.Int_Knob( 'range_end', '' ) )\n\tsnapGRP\['range_end'].setValue( int( texRNG\[1] ) )\n\tsnapGRP\['range_end'].clearFlag( nuke.STARTLINE )\n\tsnapGRP.addKnob( nuke.Int_Knob( 'tex_seed', 'seed' ) )\n\n\tsnapGRP.addKnob( nuke.Text_Knob( 'title_random_trans', 'RANDOM FORMATION' ) )\n\n\tsnapGRP.addKnob( nuke.Array_Knob( 'rotateX_range', 'rotate X range' ) )\n\tsnapGRP\['rotateX_range'].setFlag(0x00000002)\n\tsnapGRP.addKnob( nuke.Array_Knob( 'rotateX_seed', 'seed' ) )\n\tsnapGRP\['rotateX_seed'].clearFlag( nuke.STARTLINE )\n\n\tsnapGRP.addKnob( nuke.Array_Knob( 'rotateY_range', 'rotate Y range' ) )\n\tsnapGRP\['rotateY_range'].setFlag(0x00000002)\n\tsnapGRP.addKnob( nuke.Array_Knob( 'rotateY_seed', 'seed' ) )\n\tsnapGRP\['rotateY_seed'].clearFlag( nuke.STARTLINE )\n\n\tsnapGRP.addKnob( nuke.Array_Knob( 'rotateZ_range', 'rotate Z range' ) )\n\tsnapGRP\['rotateZ_range'].setFlag(0x00000002)\n\tsnapGRP.addKnob( nuke.Array_Knob( 'rotateZ_seed', 'seed' ) )\n\tsnapGRP\['rotateZ_seed'].clearFlag( nuke.STARTLINE )\n\n\tsnapGRP.addKnob( nuke.Array_Knob( 'scaleX_range', 'scale X range' ) )\n\tsnapGRP\['scaleX_range'].setFlag(0x00000002)\n\tsnapGRP.addKnob( nuke.Array_Knob( 'scaleX_seed', 'seed' ) )\n\tsnapGRP\['scaleX_seed'].clearFlag( nuke.STARTLINE )\n\n\tsnapGRP.addKnob( nuke.Array_Knob( 'scaleY_range', 'scale Y range' ) )\n\tsnapGRP\['scaleY_range'].setFlag(0x00000002)\n\tsnapGRP.addKnob( nuke.Array_Knob( 'scaleY_seed', 'seed' ) )\n\tsnapGRP\['scaleY_seed'].clearFlag( nuke.STARTLINE )\n\n\tsnapGRP.addKnob( nuke.Array_Knob( 'scaleZ_range', 'scale Z range' ) )\n\tsnapGRP\['scaleZ_range'].setFlag(0x00000002)\n\tsnapGRP.addKnob( nuke.Array_Knob( 'scaleZ_seed', 'seed' ) )\n\tsnapGRP\['scaleZ_seed'].clearFlag( nuke.STARTLINE )\n\n\tsnapGRP.addKnob( nuke.Array_Knob( 'uniform_scale_range', 'uniform scale range' ) )\n\tsnapGRP\['uniform_scale_range'].setFlag(0x00000002)\n\tsnapGRP.addKnob( nuke.Array_Knob( 'uniform_scale_seed', 'seed' ) )\n\tsnapGRP\['uniform_scale_seed'].clearFlag( nuke.STARTLINE )\n\n\tsnapGRP.addKnob( nuke.Tab_Knob( 'tab_misc', 'Misc' ) )\n\n\tsnapGRP.addKnob( nuke.Text_Knob( 'title_axis', 'SNAP AXIS' ) )\n\tsnapGRP.addKnob( nuke.Boolean_Knob( 'display_axis', 'display snap axis' ) )\n\tsnapGRP\['display_axis'].setFlag( nuke.STARTLINE )\n\tsnapGRP.addKnob( nuke.Array_Knob( 'display_size', 'display size' ) )\n\tsnapGRP\['display_size'].setFlag(0x00000002)\n\tsnapGRP\['display_size'].setFlag( nuke.STARTLINE )\n\tsnapGRP\['display_size'].setValue( 1 )\n\tsnapGRP.addKnob( nuke.Link_Knob( 'display_color', 'color' ) )\n\tsnapGRP\['display_color'].setLink('menu01.display_color')\n\tsnapGRP\['display_color'].clearFlag( nuke.STARTLINE )\n\tsnapGRP.addKnob( nuke.PyScript_Knob( 'invert_selection', 'invert selection', \"for node in nuke.allNodes(\\'Axis\\') :\\n\\tif node.name()\[:3] == \\'ax_\\' :\\n\\t\\tnode\[\\'selected\\'].setValue( not node\[\\'selected\\'].value() )\" ) )\n\tsnapGRP\['invert_selection'].setFlag( nuke.STARTLINE )\n\tsnapGRP.addKnob( nuke.PyScript_Knob( 'deselect_all', 'de-select all', 'for node in nuke.allNodes() :\\n\\tnode.setSelected( False )' ) )\n\n\tsnapGRP.addKnob( nuke.Text_Knob( 'title_tools', 'TOOLS' ) )\n\tsnapGRP.addKnob( nuke.Boolean_Knob( 'exTranslate', 'translate' ) )\n\tsnapGRP\['exTranslate'].setValue(True)\n\tsnapGRP.addKnob( nuke.Boolean_Knob( 'exRotate', 'rotate' ) )\n\tsnapGRP\['exRotate'].setValue(True)\n\tsnapGRP.addKnob( nuke.Boolean_Knob( 'exScale', 'scale' ) )\n\tsnapGRP\['exScale'].setValue(True)\n\tsnapGRP\['exTranslate'].setFlag( nuke.STARTLINE )\n\n\tif _thisG\['snap_type'].getValue() and _thisG\['rgb_color'].getValue() :\n\t\tsnapGRP.addKnob( nuke.Boolean_Knob( 'exColor', 'color' ) )\n\t\tsnapGRP\['exColor'].setFlag( nuke.STARTLINE )\n\n\tsnapGRP.addKnob( nuke.PyScript_Knob( 'extract_ins', 'extract selected instance', goStore\['cpCode02'].value() ) )\n\tsnapGRP\['extract_ins'].setFlag( nuke.STARTLINE )\n\n\tsnapGRP.addKnob( nuke.Text_Knob( 'spacer', '', '
    ' ) )\n\t\n\tsnapGRP.addKnob( nuke.PyScript_Knob( 'remove_ins', 'remove selected instance', goStore\['cpCode03'].value() ) )\n\tsnapGRP\['remove_ins'].setFlag( nuke.STARTLINE )\n\n\tsnapGRP.addKnob( nuke.Tab_Knob( 'tab_info', 'Info', ) )\n\tsnapGRP.addKnob( nuke.Text_Knob( 'info_snap', 'snap type :', _thisG\['snap_type'].value() ) )\n\tsnapGRP.addKnob( nuke.Text_Knob( 'info_rot', 'rotation type :', _thisG\['rotation_type'].value() ) )\n\tsnapGRP.addKnob( nuke.Text_Knob( 'info_var', 'input type :', _thisG\['var_type'].value() ) )\n\tif _thisG\['snap_type'].getValue() and _thisG\['rgb_color'].getValue() :\n\t\tsnapGRP.addKnob( nuke.Text_Knob( 'info_tex', 'texture :', 'sample RGB color' ) )\n\telse :\n\t\tsnapGRP.addKnob( nuke.Text_Knob( 'info_tex', 'texture :', 'instance geo texture' ) )\n\tsnapGRP.addKnob( nuke.Text_Knob( 'info_inst', 'total instance :', '' ) )\n\tif _thisG\['with_animation'].getValue() :\n\t\tsnapGRP.addKnob( nuke.Text_Knob( 'info_aniRange', 'anim frame range :', '' ) )\n\n\tsnapGRP\['onCreate'].setValue( \"thisGRP = nuke.thisGroup()\\nknobs = \[\\'rotateX_range\\',\\'rotateY_range\\',\\'rotateZ_range\\',\\'scaleX_range\\',\\'scaleY_range\\',\\'scaleZ_range\\',\\'uniform_scale_range\\',\\'display_size\\']\\nfor knob in knobs :\\n\\tthisGRP\[knob].setFlag(0x00000002)\" )\n\n\treturn snapGRP\n\n##########\n\ndef selGons( _ptsID , _mainGeo ) :\n\t##### get quads prim group\n\tprim = geoPrims( _mainGeo )\n\n\tselVtxIDOnly = \[ int( i\[2:] ) for i in _ptsID ]\n\n\tgonsID = \[]\n\tfor ptsGRP in prim :\n\t\ttemp = 0\n\t\tfor i in ptsGRP :\n\t\t\ttemp += selVtxIDOnly.count( i )\n\t\tif temp != 0 :\n\t\t\tgonsID.append( '0_' + '_'.join( \[ str(j) for j in ptsGRP ] ) )\n\n\treturn gonsID\n\n##########\n\ndef sfvConvert( _svlist ) :\n\tprimNameList = \[]\n\tfor grp in _svlist :\n\t\ttemp = \[]\n\t\tfor vtx in range( len( grp ) ) :\n\t\t\ttemp.append( str( grp\[vtx] ) )\n\t\tprimNameList.append( '0_' + '_'.join( temp ) )\n\n\treturn primNameList\n\n##########\n\ndef genFaceNor( _thisG , _mainstream , _mainGeo , _svlist , _selType , _fRNG=\[0,0] ) :\n\tpyg = nuke.toNode('PythonGeo')\n\n\t##### get selected prims\n\tif _selType =='face' :\n\t\tprimID = sfvConvert( _svlist )\n\telif _selType == 'vertex' :\n\t\tprimID = _svlist\n\telif _selType == 'vertexFaces' :\n\t\tprimID = selGons( _svlist, _mainGeo )\n\n\t##### find available name and create global group\n\twith getLevel() :\n\t\tsnapGRP = makePackage( 'mSnap', _thisG )\n\n\t##### prep\n\twith snapGRP :\n\t\tgrpBasic( primID, _thisG )\n\n\t\t##### snap faces\n\t\t_mainstream.reverse()\n\n\t\tif _thisG\['with_animation'].value() :\n\t\t\tnuke.toNode('store')\['aniRNG'].setValue( '-'.join(\[str(i) for i in _fRNG]) )\n\t\t\tnuke.thisGroup()\['info_aniRange'].setValue( '-'.join(\[str(i) for i in _fRNG]) )\n\n\t\t\tct_hack = nuke.nodes.CurveTool()\n\t\t\tprogBar = nuke.ProgressTask('Sampling vertices')\n\t\t\tjobCount = 0\n\t\t\tjobTotal = ( _fRNG\[1] + 1 )- _fRNG\[0]\n\t\t\tfor ctime in range( _fRNG\[0] , _fRNG\[1] + 1 , 1 ) :\n\t\t\t\tnuke.execute(ct_hack, ctime, ctime)\n\t\t\t\t### progress bar\n\t\t\t\tjobCount += 1\n\t\t\t\tprogShow = int(jobCount/jobTotal * 100)\n\t\t\t\tif progBar.isCancelled() :\n\t\t\t\t\tbreak;\n\t\t\t\tprogBar.setProgress(progShow)\n\t\t\t\t#################\n\n\t\t\t\tgData = geoData( pyg , 0 ) ##### get geo data\n\t\t\t\tfor node in nuke.allNodes( 'Axis' ) :\n\t\t\t\t\tif node.name() != 'worldTransform' :\n\t\t\t\t\t\tkname = node.name().split('_')\[2:]\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ctime == _fRNG\[0] :\n\t\t\t\t\t\t\tnode\['translate'].setAnimated()\n\t\t\t\t\t\t\tnode\['orig_rot'].setAnimated()\n\n\t\t\t\t\t\tif _selType == 'face' or _selType == 'vertexFaces' :\n\t\t\t\t\t\t\tvec1 = nuke.math.Vector3( \n\t\t\t\t\t\t\t\tgData\[ '0_' + str(kname\[0]) ]\[0]\[0] , \n\t\t\t\t\t\t\t\tgData\[ '0_' + str(kname\[0]) ]\[0]\[1] , \n\t\t\t\t\t\t\t\tgData\[ '0_' + str(kname\[0]) ]\[0]\[2] \n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tvec2 = nuke.math.Vector3( \n\t\t\t\t\t\t\t\tgData\[ '0_' + str(kname\[1]) ]\[0]\[0] , \n\t\t\t\t\t\t\t\tgData\[ '0_' + str(kname\[1]) ]\[0]\[1] , \n\t\t\t\t\t\t\t\tgData\[ '0_' + str(kname\[1]) ]\[0]\[2] \n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tvec3 = nuke.math.Vector3( \n\t\t\t\t\t\t\t\tgData\[ '0_' + str(kname\[2]) ]\[0]\[0] , \n\t\t\t\t\t\t\t\tgData\[ '0_' + str(kname\[2]) ]\[0]\[1] , \n\t\t\t\t\t\t\t\tgData\[ '0_' + str(kname\[2]) ]\[0]\[2] \n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tfor i in range(3) :\n\t\t\t\t\t\t\t\tnode\['translate'].setValueAt( nukescripts.snap3d.calcAveragePosition( convertIter( gData, kname ) )\[i], ctime, i )\n\t\t\t\t\t\t\t\tnode\['orig_rot'].setValueAt( math.degrees(nukescripts.snap3d.planeRotation( (vec1, vec2, vec3) , norm=None)\[i]), ctime, i )\n\n\t\t\t\t\t\t\tdel vec1, vec2, vec3\n\t\t\t\t\t\telif _selType == 'vertex' :\n\t\t\t\t\t\t\tfor i in range(3) :\n\t\t\t\t\t\t\t\tnode\['translate'].setValueAt( gData\['0_' + kname\[0]]\[0]\[i], ctime, i )\n\t\t\t\t\t\t\t\tnode\['orig_rot'].setValueAt( norToRot3D( gData , '0_' + kname\[0] )\[i], ctime, i )\n\t\t\t\t\t\n\t\t\t\t\tif node.name() == 'worldTransform' :\n\t\t\t\t\t\twTrans = unify( _mainstream , ctime ) ##### get world transformation\n\t\t\t\t\t\tnode\['useMatrix'].setValue(True)\n\t\t\t\t\t\tnode\['matrix'].setAnimated()\n\t\t\t\t\t\tfor mtx in range(16) :\n\t\t\t\t\t\t\tnode\['matrix'].setValueAt( wTrans\[mtx] , ctime , mtx )\n\n\t\t\tnuke.delete( ct_hack )\n\t\t\tdel progBar, jobCount, jobTotal, progShow\n\n\t\telse :\n\t\t\tgData = geoData( pyg , 0 ) ##### get geo data\n\t\t\tfor node in nuke.allNodes( 'Axis' ) :\n\t\t\t\tif node.name() != 'worldTransform' :\n\t\t\t\t\tkname = node.name().split('_')\[2:]\n\n\t\t\t\t\tif _selType == 'face' or _selType == 'vertexFaces' :\n\t\t\t\t\t\tvec1 = nuke.math.Vector3( \n\t\t\t\t\t\t\tgData\[ '0_' + str(kname\[0]) ]\[0]\[0] , \n\t\t\t\t\t\t\tgData\[ '0_' + str(kname\[0]) ]\[0]\[1] , \n\t\t\t\t\t\t\tgData\[ '0_' + str(kname\[0]) ]\[0]\[2] \n\t\t\t\t\t\t\t)\n\t\t\t\t\t\tvec2 = nuke.math.Vector3( \n\t\t\t\t\t\t\tgData\[ '0_' + str(kname\[1]) ]\[0]\[0] , \n\t\t\t\t\t\t\tgData\[ '0_' + str(kname\[1]) ]\[0]\[1] , \n\t\t\t\t\t\t\tgData\[ '0_' + str(kname\[1]) ]\[0]\[2] \n\t\t\t\t\t\t\t)\n\t\t\t\t\t\tvec3 = nuke.math.Vector3( \n\t\t\t\t\t\t\tgData\[ '0_' + str(kname\[2]) ]\[0]\[0] , \n\t\t\t\t\t\t\tgData\[ '0_' + str(kname\[2]) ]\[0]\[1] , \n\t\t\t\t\t\t\tgData\[ '0_' + str(kname\[2]) ]\[0]\[2] \n\t\t\t\t\t\t\t)\n\t\t\t\t\t\tfor i in range(3) :\n\t\t\t\t\t\t\tnode\['translate'].setValue( nukescripts.snap3d.calcAveragePosition( convertIter( gData, kname ) )\[i], i )\n\t\t\t\t\t\t\tnode\['orig_rot'].setValue( math.degrees(nukescripts.snap3d.planeRotation( (vec1, vec2, vec3), norm=None)\[i]), i )\n\t\t\t\t\telif _selType == 'vertex' :\n\t\t\t\t\t\tnode\['translate'].setValue( gData\['0_' + kname\[0]]\[0] )\n\t\t\t\t\t\tnode\['orig_rot'].setValue( norToRot3D( gData , '0_' + kname\[0] ) )\n\n\t\t\t\tif node.name() == 'worldTransform' :\n\t\t\t\t\twTrans = unify( _mainstream , nuke.frame() ) ##### get world transformation\n\t\t\t\t\tnode\['useMatrix'].setValue(True)\n\t\t\t\t\tfor mtx in range(16) :\n\t\t\t\t\t\tnode\['matrix'].setValue( wTrans\[mtx] , mtx )\n\n\tdel primID, gData, kname, snapGRP, wTrans, _thisG, _mainstream, _mainGeo, _svlist, _selType, _fRNG\n\n##########\n\ndef genSelVtx( _thisG , _mainstream , _svlist , _selType , _fRNG=\[0,0] ) :\n\tpyg = nuke.toNode('PythonGeo')\n\n\t##### find available name and create global group\n\twith getLevel() :\n\t\tsnapGRP = makePackage( 'mSnap', _thisG )\n\n\t##### prep\n\twith snapGRP :\n\t\tif _selType == 'face' :\n\t\t\tgrpBasic( sfvConvert( _svlist ), _thisG )\n\t\telif _selType == 'vertex' :\n\t\t\tgrpBasic( _svlist, _thisG )\n\n\t\t##### snap points\n\t\t_mainstream.reverse()\n\n\t\tif _thisG\['with_animation'].value() :\n\t\t\tnuke.toNode('store')\['aniRNG'].setValue( '-'.join(\[str(i) for i in _fRNG]) )\n\t\t\tnuke.thisGroup()\['info_aniRange'].setValue( '-'.join(\[str(i) for i in _fRNG]) )\n\n\t\t\tct_hack = nuke.nodes.CurveTool()\n\t\t\tprogBar = nuke.ProgressTask('Sampling vertices')\n\t\t\tjobCount = 0\n\t\t\tjobTotal = ( _fRNG\[1] + 1 )- _fRNG\[0]\n\n\t\t\tfor ctime in range( _fRNG\[0] , _fRNG\[1] + 1 ) :\n\t\t\t\tnuke.execute(ct_hack, ctime, ctime)\n\t\t\t\t### progress bar\n\t\t\t\tjobCount += 1\n\t\t\t\tprogShow = int(jobCount/jobTotal * 100)\n\t\t\t\tif progBar.isCancelled() :\n\t\t\t\t\tbreak;\n\t\t\t\tprogBar.setProgress(progShow)\n\t\t\t\t#################\n\n\t\t\t\tgData = geoData( pyg , 0 ) ##### get geo data\n\t\t\t\tfor node in nuke.allNodes( 'Axis' ) :\n\t\t\t\t\tif node.name() != 'worldTransform' :\n\t\t\t\t\t\tkname = node.name().split('_')\[2:]\n\t\t\t\t\t\t\n\t\t\t\t\t\tif _selType == 'face' :\n\t\t\t\t\t\t\tif ctime == _fRNG\[0] :\n\t\t\t\t\t\t\t\tnode\['translate'].setAnimated()\n\t\t\t\t\t\t\tfor i in range(3) :\n\t\t\t\t\t\t\t\tnode\['translate'].setValueAt(nukescripts.snap3d.calcAveragePosition( convertIter( gData, kname ) )\[i], ctime, i)\n\t\t\t\t\t\telif _selType == 'vertex' :\n\t\t\t\t\t\t\tif ctime == _fRNG\[0] :\n\t\t\t\t\t\t\t\tnode\['translate'].setAnimated()\n\t\t\t\t\t\t\tfor i in range(3) :\n\t\t\t\t\t\t\t\tnode\['translate'].setValueAt( gData\['0_' + kname\[0]]\[0]\[i] , ctime , i )\n\t\t\t\t\t\n\t\t\t\t\tif node.name() == 'worldTransform' :\n\t\t\t\t\t\twTrans = unify( _mainstream , ctime ) ##### get world transformation\n\t\t\t\t\t\tnode\['useMatrix'].setValue(True)\n\t\t\t\t\t\tnode\['matrix'].setAnimated()\n\t\t\t\t\t\tfor mtx in range(16) :\n\t\t\t\t\t\t\tnode\['matrix'].setValueAt( wTrans\[mtx] , ctime , mtx )\n\n\t\t\tnuke.delete( ct_hack )\n\t\t\tdel progBar, jobCount, jobTotal, progShow\n\n\t\telse :\n\t\t\tgData = geoData( pyg , 0 ) ##### get geo data\n\t\t\tfor node in nuke.allNodes( 'Axis' ) :\n\t\t\t\tif node.name() != 'worldTransform' :\n\t\t\t\t\tkname = node.name().split('_')\[2:]\n\t\t\t\t\t\n\t\t\t\t\tif _selType == 'face' :\n\t\t\t\t\t\tfor i in range(3) :\n\t\t\t\t\t\t\tnode\['translate'].setValue(nukescripts.snap3d.calcAveragePosition( convertIter( gData, kname ) )\[i], i)\n\t\t\t\t\telif _selType == 'vertex' :\n\t\t\t\t\t\tnode\['translate'].setValue( gData\['0_' + kname\[0]]\[0] )\n\t\t\t\t\n\t\t\t\tif node.name() == 'worldTransform' :\n\t\t\t\t\twTrans = unify( _mainstream , nuke.frame() ) ##### get world transformation\n\t\t\t\t\tnode\['useMatrix'].setValue(True)\n\t\t\t\t\tfor mtx in range(16) :\n\t\t\t\t\t\tnode\['matrix'].setValue( wTrans\[mtx] , mtx )\n\n\tdel gData, kname, snapGRP, wTrans, _thisG, _mainstream, _svlist, _selType, _fRNG\n\n##########\n\ndef convertIter( _gd , _prim ) :\n\tloopNum = len( _prim )\n\tfor i in range( loopNum ) :\n\t\ttPos = nuke.math.Vector4( \n\t\t\t_gd\[ '0_' + str(_prim\[i]) ]\[0]\[0] , \n\t\t\t_gd\[ '0_' + str(_prim\[i]) ]\[0]\[1] , \n\t\t\t_gd\[ '0_' + str(_prim\[i]) ]\[0]\[2] , \n\t\t\t1.0\n\t\t\t)\n\t\tyield nukescripts.snap3d.VertexInfo(0, 0, 1, nuke.math.Vector3(tPos.x, tPos.y, tPos.z))\n\n##########\n\ndef grpBasic( _data , _thisG ) :\n\tglColor = int('%02x%02x%02x%02x' % (1*255,0*255,0*255,1),16)\n\n\tgeoInput = nuke.nodes.Input( name = 'geo')\n\n\tif _thisG\['rotation_type'].getValue() == 0 :\n\t\tcamInput = nuke.nodes.Input( name = 'axis_cam')\n\n\tgeoDot = nuke.nodes.Dot()\n\tgeoDot.setInput(0, geoInput)\n\n\tsceneAll = nuke.nodes.Scene( name = 'MassiveScene' )\n\tnuke.nodes.Output( inputs=\[sceneAll] )\n\n\tmenu01 = nuke.nodes.NoOp( name = 'menu01' )\n\tmenu01.addKnob( nuke.ColorChip_Knob( 'display_color', 'color' ) )\n\tmenu01\['knobChanged'].setValue( goStore\['cpCode01'].value() )\n\tmenu01\['display_color'].setValue( glColor )\n\n\t##### copy function\n\tcopyStore = nuke.nodes.NoOp( name = 'store' )\n\tcopyStore.addKnob( nuke.PyScript_Knob( 'fn', 'fn', goStore\['fn02'].value() ) )\n\tcopyStore.addKnob( nuke.Multiline_Eval_String_Knob( 'filterNonReverse', 'filterNonReverse', goStore\['filterNonReverse'].value() ) )\n\tcopyStore\['filterNonReverse'].setEnabled( False )\n\tcopyStore.addKnob( nuke.Multiline_Eval_String_Knob( 'filter3DNodes', 'filter3DNodes', goStore\['filter3DNodes'].value() ) )\n\tcopyStore\['filter3DNodes'].setEnabled( False )\n\tif _thisG\['with_animation'].value() :\n\t\tcopyStore.addKnob( nuke.EvalString_Knob( 'aniRNG', 'aniRNG' , '1001-1100' ) )\n\n\t##### apply geo's transformation\n\tworldTrans = nuke.nodes.Axis(\n\t\tname = 'worldTransform' , \n\t\tdisplay = 'off' , \n\t\tselectable = 0\n\t\t)\n\n\t##### RGB color setup\n\tif _thisG\['snap_type'].getValue() and _thisG\['rgb_color'].getValue() :\n\t\tcolorRes = nuke.nodes.Reformat(\n\t\t\t\t\ttype = 1 ,\n\t\t\t\t\tbox_fixed = True ,\n\t\t\t\t\tbox_width = 32 , box_height = 32\n\t\t\t\t\t)\n\t\tcolorBasic = nuke.nodes.Expression(\n\t\t\t\t\tchannel0 = 'red' , channel1 = 'green' , channel2 = 'blue' , channel3 = 'alpha' , \n\t\t\t\t\texpr0 = '1' , expr1 = '1' , expr2 = '1' , expr3 = '1' , \n\t\t\t\t\tinputs = \[colorRes]\n\t\t\t\t\t)\n\n\t##### mass generate\n\tfor key in range (0, len(_data)) :\n\t\trandTexEX = 'trunc( ( random(tex_seed, \{0\}) * (range_end-range_start) ) + range_start )'.format( key ) \n\t\tif _thisG\['var_type'].getValue() == 0 :\n\t\t\trandomVar = nuke.nodes.FrameHold()\n\t\t\trandomVar\['first_frame'].setExpression( randTexEX )\n\t\telse :\n\t\t\trandomVar = nuke.nodes.TimeOffset()\n\t\t\trandomVar\['time_offset'].setExpression( randTexEX )\n\t\trandomVar.setInput(0, geoDot)\n\n\t\tscatterAX = nuke.nodes.Axis(\n\t\t\tname = 'ax_' + _data\[key] , \n\t\t\tgl_color = glColor , \n\t\t\tinputs = \[worldTrans]\n\t\t\t)\n\n\t\t##### axis setting\n\t\tscatterAX\['display'].setExpression( 'parent.display_axis' )\n\t\tscatterAX\['scaling'].setExpression( 'random( \{2\}, \{0\} ) * parent.\{1\} + (1-parent.\{1\})'.format( key , 'scaleX_range' , 'scaleX_seed' ) , 0 )\n\t\tscatterAX\['scaling'].setExpression( 'random( \{2\}, \{0\} ) * parent.\{1\} + (1-parent.\{1\})'.format( key , 'scaleY_range' , 'scaleY_seed' ) , 1 )\n\t\tscatterAX\['scaling'].setExpression( 'random( \{2\}, \{0\} ) * parent.\{1\} + (1-parent.\{1\})'.format( key , 'scaleZ_range' , 'scaleZ_seed' ) , 2 )\n\t\tscatterAX\['uniform_scale'].setExpression( '( random(\{2\},\{0\}) * parent.\{1\} + (1-parent.\{1\}) ) * parent.\{3\}'.format( key , 'uniform_scale_range' , 'uniform_scale_seed', 'display_size' ) )\n\n\t\tscatterAX.addKnob( nuke.Array_Knob( 'axid' , 'axid' ) )\n\t\tscatterAX\['axid'].setValue( key )\n\t\tscatterAX.addKnob( nuke.XYZ_Knob( 'orig_rot' , 'orig_rot' ) )\n\t\tscatterAX\['rotate'].setExpression( 'random( \{2\}, \{0\} ) * 360 * \{1\} + \{3\}'.format( 'axid' , 'rotateX_range' , 'rotateX_seed' , 'orig_rot' ) , 0 )\n\t\tscatterAX\['rotate'].setExpression( 'random( \{2\}, \{0\} ) * 360 * \{1\} + \{3\}'.format( 'axid' , 'rotateY_range' , 'rotateY_seed' , 'orig_rot' ) , 1 )\n\t\tscatterAX\['rotate'].setExpression( 'random( \{2\}, \{0\} ) * 360 * \{1\} + \{3\}'.format( 'axid' , 'rotateZ_range' , 'rotateZ_seed' , 'orig_rot' ) , 2 )\n\n\t\tgenTransGeo = nuke.nodes.TransformGeo()\n\t\tgenTransGeo\['uniform_scale'].setExpression( '1 / \{0\}'.format( 'display_size' ) )\n\t\tgenTransGeo.setInput(0, randomVar)\n\t\tgenTransGeo.setInput(1, scatterAX)\n\n\t\tif _thisG\['rotation_type'].getValue() == 0 :\n\t\t\tgenTransGeo.setInput(2, camInput)\n\n\t\t##### RGB color setup\n\t\tif _thisG\['snap_type'].getValue() and _thisG\['rgb_color'].getValue() :\n\t\t\tappColor = nuke.nodes.Multiply(\n\t\t\t\t\t\t\tname = 'cc_' + _data\[key] , \n\t\t\t\t\t\t\tinputs = \[colorBasic]\n\t\t\t\t\t\t\t)\n\t\t\tappColor\['value'].setSingleValue(False)\n\t\t\tappMat = nuke.nodes.ApplyMaterial(\n\t\t\t\t\t\tinputs = \[genTransGeo , appColor]\n\t\t\t\t\t\t)\n\t\t\tsceneAll.setInput( key, appMat )\n\t\telse :\n\t\t\tsceneAll.setInput( key, genTransGeo )\n\n\tnuke.thisGroup()\['info_inst'].setValue( str(len(_data)) )\n\n##########\n\ndef selID() :\n\tchkid = \[]\n\tselobj = \[]\n\tselidx = \[]\n\tselpos = \[]\n\trm = \[]\n\tcount = 0\n\n\tfor vtx in nukescripts.snap3d.selectedVertexInfos() :\n\t\ttemp = str( vtx.objnum ) + '_' + str( vtx.index )\n\t\tif not chkid.count( temp ) :\n\t\t\tchkid.append( temp )\n\n\t\t\tif selidx.count( vtx.index ) :\n\t\t\t\tplace = selidx.index( vtx.index )\n\t\t\t\tif selpos\[place] == vtx.position :\n\t\t\t\t\tif selobj\[place] < vtx.objnum :\n\t\t\t\t\t\trm.append( place )\n\t\t\t\t\telse :\n\t\t\t\t\t\trm.append( count )\n\n\t\t\tselobj.append( vtx.objnum )\n\t\t\tselidx.append( vtx.index )\n\t\t\tselpos.append( vtx.position )\n\t\t\tcount += 1\n\n\tselPts = \[]\n\n\tfor i in range( len(selpos) ) :\n\t\tif i not in rm :\n\t\t\tselPts.append( str(selobj\[i]) + '_' + str(selidx\[i]) )\n\n\tdel chkid, selobj, selidx, selpos, rm, count\n\n\treturn selPts\n\n##########\n\ndef randSelID( _slist , _thisG ) :\n\trandMax = round( max( 0 , min( 1 , _thisG\['random_percentage'].getValue()/100 ) ) * len( _slist ) )\n\trandID = \[]\n\trandom.seed( int( _thisG\['random_seed'].getValue() ) )\n\twhile len( randID ) < randMax :\n\t\tchoosenOne = _slist\[ random.randint( 0, len( _slist )-1 ) ]\n\t\tif not choosenOne in randID :\n\t\t\trandID.append( choosenOne )\n\n\treturn randID\n\n##########\n\ndef primaryGeo( _mainstream , _filterPrimitives ) :\n\tfor sub in _mainstream :\n\t\tfor node in sub :\n\t\t\tif node.Class() in _filterPrimitives :\n\t\t\t\treturn node\n\n##########\n\ndef geoPrims( _mainGeo ) :\n\tgonType = len( nuke.toNode('PythonGeo')\['geo'].getGeometry()\[0].primitives() )\n\tif gonType > 1 :\n\t\t##### tris\n\t\tgPrims = list( nuke.toNode('PythonGeo')\['geo'].getGeometry()\[0].primitives() )\n\telse :\n\t\tif _mainGeo.Class() == 'ReadGeo' or _mainGeo.Class() == 'ReadGeo2' :\n\t\t\t##### custom geo\n\t\t\tgPrims = \[]\n\t\t\tprims = nuke.toNode('PythonGeo')\['geo'].getGeometry()\[0].primitives()\n\t\t\tfor prim in grouper( 4, prims\[0] ) :\n\t\t\t\tgPrims.append( prim )\n\t\telse :\n\t\t\t##### quads\n\t\t\tgPrims = \[]\n\t\t\tfor prim in _mainGeo\['geo_select'].getGeometry().__getitem__(0).primitives() :\n\t\t\t\tfor face in range(0, prim.faces()):\n\t\t\t\t\tgPrims.append( prim.faceVertices( face ) )\n\n\treturn gPrims\n\n##########\n\ndef norToRot3D( _gData , _vid ) :\n\t##### rotate x\n\trx = -math.asin( _gData\[ _vid ]\[1]\[1] )\n\n\t##### rotate y\n\ttry :\n\t\tif _gData\[ _vid ]\[1]\[2] < 0 and _gData\[ _vid ]\[1]\[0] < 0 :\n\t\t\try = -( math.pi + math.asin( _gData\[ _vid ]\[1]\[0] / math.cos( -math.asin( _gData\[ _vid ]\[1]\[1] ) ) ) )\n\t\telif _gData\[ _vid ]\[1]\[2] < 0 and _gData\[ _vid ]\[1]\[0] > 0 :\n\t\t\try = math.pi - math.asin( _gData\[ _vid ]\[1]\[0] / math.cos( -math.asin( _gData\[ _vid ]\[1]\[1] ) ) )\n\t\telse :\n\t\t\try = math.asin( _gData\[ _vid ]\[1]\[0] / math.cos( -math.asin( _gData\[ _vid ]\[1]\[1] ) ) )\n\texcept ValueError :\n\t\tif _gData\[ _vid ]\[1]\[0] > 0 :\n\t\t\try = 90\n\t\telse :\n\t\t\try = -90\n\n\tdel _gData , _vid\n\n\trot3 = \[ math.degrees( rx )%360+90 , math.degrees( ry )%360 , 0]\n\treturn rot3\n\n##########\n\ndef norToRotMap( _nor ) :\n\t##### rotate x\n\trx = -math.asin( _nor\[1] )\n\n\t##### rotate y\n\ttry :\n\t\tif _nor\[2] < 0 and _nor\[0] < 0 :\n\t\t\try = -( math.pi + math.asin( _nor\[0] / math.cos( -math.asin( _nor\[1] ) ) ) )\n\t\telif _nor\[2] < 0 and _nor\[0] > 0 :\n\t\t\try = math.pi - math.asin( _nor\[0] / math.cos( -math.asin( _nor\[1] ) ) )\n\t\telse :\n\t\t\try = math.asin( _nor\[0] / math.cos( -math.asin( _nor\[1] ) ) )\n\texcept ValueError :\n\t\tif _nor\[0] > 0 :\n\t\t\try = 90\n\t\telse :\n\t\t\try = -90\n\n\tdel _nor\n\n\trot3 = \[ math.degrees( rx )%360+90 , math.degrees( ry )%360 , 0]\n\treturn rot3\n\n##########\n\ndef scanTile( _thisG , _startNode , _ctNode, _res ) :\n\t##### setup curveTool node\n\tscanCropSize = 32\n\t_ctNode\['operation'].setValue( 'Auto Crop')\n\t_ctNode\['channels'].setValue( 'alpha')\n\t_ctNode\['ROI'].setValue( \[ 0 , 0 , scanCropSize , scanCropSize ] )\n\n\tsNodes = \[]\n\tuvShift = nuke.nodes.Transform( inputs = \[_startNode] )\n\tcrop32 = nuke.nodes.Crop( inputs = \[uvShift] )\n\tcrop32\['box'].setValue( \[ 0 , 0 , _res , _res ] )\n\tscan32 = nuke.nodes.Reformat(\n\t\t\t\t\t\ttype = 1 , box_fixed = True , box_width = scanCropSize , box_height = scanCropSize ,\n\t\t\t\t\t\tinputs = \[crop32]\n\t\t\t\t\t\t)\n\n\tif _thisG\['uv_type'].getValue() == 0 :\n\t\t_ctNode.setInput( 0, scan32 )\n\t\tnuke.execute( _ctNode, nuke.frame(), nuke.frame() )\n\t\tcropResult = _ctNode\['autocropdata'].getValue()\n\t\tif ( cropResult\[2] - cropResult\[0] ) > 0 or ( cropResult\[3] - cropResult\[1] ) > 0 :\n\t\t\tuvCrop = nuke.nodes.Crop( \n\t\t\t\t\t\tname = 'crop_00' ,\n\t\t\t\t\t\treformat = True , \n\t\t\t\t\t\tinputs = \[uvShift] \n\t\t\t\t\t\t)\n\t\t\tfor i in range(4) :\n\t\t\t\tuvCrop\['box'].setValue( cropResult\[i] * _res/scanCropSize , i )\n\t\t\tsNodes.append( uvCrop )\n\t\telse :\n\t\t\tnuke.delete( uvShift )\n\telse :\n\t\tfor y in range(10) :\n\t\t\tfor x in range(10) :\n\t\t\t\tuvShift\['translate'].setValue( -(_res*x) , 0 )\n\t\t\t\tuvShift\['translate'].setValue( -(_res*y) , 1 )\n\t\t\t\t#uvShift\['label'].setValue( 'tile : \{0\} | \{1\}' .format( str(x), str(y) ) )\n\t\t\t\t\n\t\t\t\t_ctNode.setInput( 0, scan32 )\n\t\t\t\tnuke.execute( _ctNode, nuke.frame(), nuke.frame() )\n\t\t\t\tcropResult = _ctNode\['autocropdata'].getValue()\n\n\t\t\t\tif ( cropResult\[2] - cropResult\[0] ) > 0 or ( cropResult\[3] - cropResult\[1] ) > 0 :\n\t\t\t\t\tnuke.delete( crop32 )\n\t\t\t\t\tnuke.delete( scan32 )\n\t\t\t\t\tuvCrop = nuke.nodes.Crop( \n\t\t\t\t\t\t\t\tname = 'crop_\{0\}\{1\}'.format( str(y) , str(x) ) ,\n\t\t\t\t\t\t\t\treformat = True , \n\t\t\t\t\t\t\t\tinputs = \[uvShift] \n\t\t\t\t\t\t\t\t)\n\t\t\t\t\tfor i in range(4) :\n\t\t\t\t\t\tuvCrop\['box'].setValue( cropResult\[i] * _res/scanCropSize , i )\n\t\t\t\t\tsNodes.append( uvCrop )\n\t\t\t\t\tuvShift = nuke.nodes.Transform( inputs = \[_startNode] )\n\t\t\t\t\tcrop32 = nuke.nodes.Crop( inputs = \[uvShift] )\n\t\t\t\t\tcrop32\['box'].setValue( \[0,0,512,512] )\n\t\t\t\t\tscan32 = nuke.nodes.Reformat(\n\t\t\t\t\t\t\ttype = 1 , box_fixed = True , box_width = scanCropSize , box_height = scanCropSize ,\n\t\t\t\t\t\t\tinputs = \[crop32]\n\t\t\t\t\t\t\t)\n\t\t\t\telif x == 9 and y == 9 :\n\t\t\t\t\tnuke.delete( uvShift )\n\n\tnuke.delete( crop32 )\n\tnuke.delete( scan32 )\n\t_ctNode\['autocropdata'].clearAnimated()\n\t_ctNode.setInput( 0, None )\n\n\treturn sNodes\n\n##########\n\ndef rmNodes( _uvST ) :\n\tfollowNodes = _uvST.dependent()\n\tfor node in followNodes :\n\t\tcheck = 0\n\t\tcNodes = \[node]\n\t\twhile check < 1 :\n\t\t\tif len(cNodes\[-1:]\[0].dependent()) != 0 :\n\t\t\t\tcNodes.append( cNodes\[-1:]\[0].dependent()\[0] )\n\t\t\telse :\n\t\t\t\tcheck = 1\n\t\tfor rm in cNodes :\n\t\t\tnuke.delete( rm )\n\n##########\n\ndef genDMap( _thisG , _svlist , _sNodes , _fRNG=\[0,0] ) :\n\t##### find available name and create global group\n\twith getLevel() :\n\t\tsnapGRP = makePackage( 'mSnap', _thisG )\n\n\t##### prep\n\twith snapGRP :\n\t\tgrpBasic( _svlist, _thisG )\n\n\t\t##### RGB color\n\t\tif _thisG\['rgb_color'].value() :\n\t\t\tfor node in nuke.allNodes( 'Multiply' ) :\n\t\t\t\tkname = node.name().split('_')\[1:]\n\n\t\t\t\tfor cropNode in _sNodes :\n\t\t\t\t\tif cropNode.name() == 'crop_\{0\}'.format(kname\[0]) :\n\t\t\t\t\t\trgb = \[ cropNode.sample('red', int(kname\[1]), int(kname\[2])) , cropNode.sample('green', int(kname\[1]), int(kname\[2])) , cropNode.sample('blue', int(kname\[1]), int(kname\[2])) ]\n\t\t\t\t\t\tfor i in range(3) :\n\t\t\t\t\t\t\tnuke.toNode( 'cc_\{0\}'.format( '_'.join(kname) ) )\['value'].setValue( rgb\[i], i )\n\n\t\t##### snap\n\t\tif _thisG\['with_animation'].value() :\n\t\t\tnuke.toNode('store')\['aniRNG'].setValue( '-'.join(\[str(i) for i in _fRNG]) )\n\t\t\tnuke.thisGroup()\['info_aniRange'].setValue( '-'.join(\[str(i) for i in _fRNG]) )\n\n\t\t\tct_hack = nuke.nodes.CurveTool()\n\t\t\tprogBar = nuke.ProgressTask('Sampling Position')\n\t\t\tjobCount = 0\n\t\t\tjobTotal = ( _fRNG\[1] + 1 )- _fRNG\[0]\n\t\t\tfor ctime in range( _fRNG\[0] , _fRNG\[1] + 1 , 1 ) :\n\t\t\t\tnuke.execute(ct_hack, ctime, ctime)\n\t\t\t\t### progress bar\n\t\t\t\tjobCount += 1\n\t\t\t\tprogShow = int(jobCount/jobTotal * 100)\n\t\t\t\tif progBar.isCancelled() :\n\t\t\t\t\tbreak;\n\t\t\t\tprogBar.setProgress(progShow)\n\t\t\t\t#################\n\t\t\t\tfor node in nuke.allNodes( 'Axis' ) :\n\t\t\t\t\tif node.name() != 'worldTransform' :\n\t\t\t\t\t\tkname = node.name().split('_')\[1:]\n\n\t\t\t\t\t\tif ctime == _fRNG\[0] :\n\t\t\t\t\t\t\tnode\['translate'].setAnimated()\n\t\t\t\t\t\t\tif _thisG\['rotation_type'].getValue() :\n\t\t\t\t\t\t\t\tnode\['orig_rot'].setAnimated()\n\n\t\t\t\t\t\tfor cropNode in _sNodes :\n\t\t\t\t\t\t\tif cropNode.name() == 'crop_\{0\}'.format(kname\[0]) :\n\t\t\t\t\t\t\t\tpos = \[ cropNode.sample('pos.red', int(kname\[1]), int(kname\[2])) , cropNode.sample('pos.green', int(kname\[1]), int(kname\[2])) , cropNode.sample('pos.blue', int(kname\[1]), int(kname\[2])) ]\n\t\t\t\t\t\t\t\tfor i in range(3) :\n\t\t\t\t\t\t\t\t\tnode\['translate'].setValueAt( pos\[i], ctime, i )\n\n\t\t\t\t\t\t\t\t##### snap rotation\n\t\t\t\t\t\t\t\tif _thisG\['rotation_type'].getValue() :\n\t\t\t\t\t\t\t\t\tnor = \[ cropNode.sample('nor.red', int(kname\[1]), int(kname\[2])) , cropNode.sample('nor.green', int(kname\[1]), int(kname\[2])) , cropNode.sample('nor.blue', int(kname\[1]), int(kname\[2])) ]\n\t\t\t\t\t\t\t\t\tfor i in range(3) :\n\t\t\t\t\t\t\t\t\t\tnode\['orig_rot'].setValueAt( norToRotMap( nor )\[i], ctime, i )\n\t\t\t\n\t\t\tnuke.delete( ct_hack )\n\t\t\tdel progBar, jobCount, jobTotal, progShow\n\n\t\telse :\n\t\t\tfor node in nuke.allNodes( 'Axis' ) :\n\t\t\t\tif node.name() != 'worldTransform' :\n\t\t\t\t\tkname = node.name().split('_')\[1:]\n\t\t\t\t\t\n\t\t\t\t\tfor cropNode in _sNodes :\n\t\t\t\t\t\tif cropNode.name() == 'crop_\{0\}'.format(kname\[0]) :\n\t\t\t\t\t\t\tpos = \[ cropNode.sample('pos.red', int(kname\[1]), int(kname\[2])) , cropNode.sample('pos.green', int(kname\[1]), int(kname\[2])) , cropNode.sample('pos.blue', int(kname\[1]), int(kname\[2])) ]\n\t\t\t\t\t\t\tnode\['translate'].setValue( pos )\n\n\t\t\t\t\t\t\t##### snap rotation\n\t\t\t\t\t\t\tif _thisG\['rotation_type'].getValue() :\n\t\t\t\t\t\t\t\tnor = \[ cropNode.sample('nor.red', int(kname\[1]), int(kname\[2])) , cropNode.sample('nor.green', int(kname\[1]), int(kname\[2])) , cropNode.sample('nor.blue', int(kname\[1]), int(kname\[2])) ]\n\t\t\t\t\t\t\t\tfor i in range(3) :\n\t\t\t\t\t\t\t\t\tnode\['orig_rot'].setValue( norToRotMap( nor )\[i], i )\n\n##########\n\ndef samID( _thisG , _tileData ) :\n\t#print (_tileData)\n\tpos2D = \[]\n\trandom.seed( int( _thisG\['dmap_seed'].getValue() ) )\n\tfor key, value in _tileData.items() :\n\t\tcount = 0\n\t\tsubCount = 0\n\t\tp2Data = \[]\n\t\twhile count < value\[1] :\n\t\t\tsamXY = \[ random.randint( 0 , value\[0].width() ) , random.randint( 0 , value\[0].height() ) ]\n\t\t\talpha = value\[0].sample('alpha', samXY\[0], samXY\[1])\n\t\t\tpos = \[ value\[0].sample('pos.red', samXY\[0], samXY\[1]) , value\[0].sample('pos.green', samXY\[0], samXY\[1]) , value\[0].sample('pos.blue', samXY\[0], samXY\[1]) ]\n\t\t\tif alpha > 0 and samXY not in p2Data and pos != \[0,0,0] :\n\t\t\t\tcoRNG = int( ( 1 - max( min ( value\[0].sample('alpha', samXY\[0], samXY\[1]) , 1.0 ) , 0.01 ) ) * 50 )\n\t\t\t\txRNG = \[ samXY\[0]-int(coRNG/2)+i for i in range( int(coRNG/2) ) ]\n\t\t\t\tyRNG = \[ samXY\[1]-int(coRNG/2)+i for i in range( int(coRNG/2) ) ]\n\t\t\t\tif not len( list( set( \[ i\[0] for i in p2Data ] ).intersection( xRNG ) ) ) :\n\t\t\t\t\tif not len( list( set( \[ i\[1] for i in p2Data ] ).intersection( yRNG ) ) ) :\n\t\t\t\t\t\tp2Data.append( samXY )\n\t\t\t\t\t\tcount += 1\n\t\t\t\t\telse :\n\t\t\t\t\t\tif subCount > _thisG\['fail_attempts'].getValue() :\n\t\t\t\t\t\t\tcount = value\[1]\n\t\t\t\t\t\tsubCount += 1\n\t\t\t\t\t#print (count)\n\n\t\tp2Data = \[ str( key.split('_')\[1] ) + '_' + str( p\[0] ) + '_' + str( p\[1] ) for p in p2Data ]\n\t\tpos2D += p2Data\n\n\tdel p2Data , coRNG , xRNG , yRNG , _thisG , _tileData\n\n\treturn pos2D" +STARTLINE} addUserKnob {22 fn02 -STARTLINE T "import math\n\ndef getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\tggLevel = nuke.root()\n\telse :\n\t\tnodePath = nuke.thisNode().fullName().split('.')\n\t\tnodePath.pop()\n\t\tggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\n##########\n\ndef upstreamNodes( _startNode , _filterClass ) :\n\tmainStream = \[]\n\tcurNode = _startNode\n\twhile curNode :\n\t\tif curNode.knob('matrix') :\n\t\t\tif curNode.Class() in _filterClass :\n\t\t\t\tsubStream = \[curNode]\n\n\t\t\t\tfor x in range ( 1 , curNode.inputs() ) :\n\t\t\t\t\tsubNode = curNode.input(x)\n\t\t\t\t\tif subNode.knob('matrix') :\n\t\t\t\t\t\tsubStream.append( subNode )\n\n\t\t\t\t\twhile subNode :\n\t\t\t\t\t\tfor y in range ( 0 , subNode.inputs() ) :\n\t\t\t\t\t\t\tif subNode.input(y).knob('matrix') :\n\t\t\t\t\t\t\t\tsubStream.append( subNode.input(y) )\n\t\t\t\t\t\tsubNode = subNode.input( 0 )\n\n\t\t\t\tmainStream.append( subStream )\n\t\tcurNode = curNode.input( 0 )\n\n\tdel subStream , curNode, _startNode , _filterClass\n\n\treturn mainStream\n\n##########\n\ndef unify( _mainstream , _vtime ) :\n\n\t# check input node type ##########################################\n\tif _mainstream\[ len(_mainstream) - 1 ]\[0] in filterCheck :\n\t\t_mainstream.reverse()\n\n\toutMTX = nuke.math.Matrix4()\n\tfor a in range (0, len( _mainstream )) :\n\t\tfor b in range (0, len( _mainstream\[a] )) :\n\n\t\t\tgetMTX = nuke.math.Matrix4()\n\t\t\tfocusNode = _mainstream\[a]\[b]\n\n\t\t\tfor q in range (0,16) :\n\t\t\t\tgetMTX\[q] = focusNode.knob('matrix').getValueAt( _vtime )\[q]\n\n\t\t\tif a != 0 :\n\t\t\t\toutMTX = outMTX * getMTX\n\t\t\telse :\n\t\t\t\toutMTX = getMTX\n\n\treturn outMTX\n\n##########\n\ndef autoBackdrop_mod( _name , _tileC) : \n\tselNodes = nuke.selectedNodes() \n\t\n\t# Calculate bounds for the backdrop node. \n\tbdX = min(\[node.xpos() for node in selNodes]) \n\tbdY = min(\[node.ypos() for node in selNodes]) \n\tbdW = max(\[node.xpos() + node.screenWidth() for node in selNodes]) - bdX \n\tbdH = max(\[node.ypos() + node.screenHeight() for node in selNodes]) - bdY \n\n\t# Expand the bounds to leave a little border. Elements are offsets for left, top, right and bottom edges respectively \n\tleft, top, right, bottom = (-10, -80, 10, 10) \n\tbdX += left \n\tbdY += top \n\tbdW += (right - left) \n\tbdH += (bottom - top) \n\t\n\tn = nuke.nodes.BackdropNode(\n\t\t\tlabel = _name ,\n\t\t\txpos = bdX , \n\t\t\tbdwidth = bdW , \n\t\t\typos = bdY , \n\t\t\tbdheight = bdH , \n\t\t\ttile_color = _tileC , \n\t\t\tnote_font_size=42 , \n\t\t\t) \n\t\n\t# revert to previous selection \n\tn\['selected'].setValue(False) \n\t\n\treturn n\n\n##########\n\ndef mtx2value( _uMTX ) :\n\t_uMTX.transpose()\n\n\tmTranslate = nuke.math.Matrix4( _uMTX )\n\tmTranslate.translationOnly()\n\ttranslate = (mTranslate\[12], mTranslate\[13], mTranslate\[14])\n\n\tmRotate = nuke.math.Matrix4( _uMTX )\n\tmRotate.rotationOnly()\n\trotateRad = mRotate.rotationsZXY()\n\trotate = (math.degrees(rotateRad\[0]), math.degrees(rotateRad\[1]), math.degrees(rotateRad\[2]))\n\n\tmScale = nuke.math.Matrix4( _uMTX )\n\tmScale.scaleOnly()\n\tscale = (mScale.xAxis().x, mScale.yAxis().y, mScale.zAxis().z)\n\n\treturn ( translate, rotate, scale )"} addUserKnob {22 cpCode01 T "for node in nuke.allNodes() :\n if node.name()\[0:3] == 'ax_' :\n node\['gl_color'].setValue( int( nuke.thisGroup()\['display_color'].getValue() ) )" +STARTLINE} addUserKnob {22 cpCode02 -STARTLINE T "import math\n\nthisGRP = nuke.thisGroup()\n\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\nif thisGRP\['exTranslate'].value() or thisGRP\['exRotate'].value() or thisGRP\['exScale'].value() :\n\n\t##### get selected axis\n\tselAX = \[]\n\twith thisGRP :\n\t\tfor node in nuke.allNodes() :\n\t\t\tif node.name()\[0:3] == 'ax_' and node\['selected'].getValue() == 1 :\n\t\t\t\tselAX.append( node )\n\n\tif len(selAX) :\n\t\tspace = \[ int(nuke.toNode('preferences')\['GridWidth'].getValue()) , int(nuke.toNode('preferences')\['GridHeight'].getValue()) ]\n\n\t\tfilterCheck = goStore\['filterNonReverse'].getValue().split(',')\n\t\tfilter3DNodes = goStore\['filter3DNodes'].value().split(',')\n\t\texNodes = \[]\n\n\t\txportSC = nuke.nodes.Scene()\n\t\texNodes.append( xportSC )\n\n\t\tprogBar = nuke.ProgressTask('Extracting instances...')\n\t\tjobCount = 0\n\t\tjobTotal = len( selAX )\n\n\t\tcount = 0\n\t\tfor node in selAX :\n\t\t\t### progress bar\n\t\t\tjobCount += 1\n\t\t\tprogShow = int(jobCount/jobTotal * 100)\n\t\t\tif progBar.isCancelled() :\n\t\t\t\tbreak;\n\t\t\tprogBar.setProgress(progShow)\n\t\t\t#################\n\n\t\t\ttry :\n\t\t\t\texColor = thisGRP\['exColor'].value()\n\t\t\texcept :\n\t\t\t\texColor = False\n\n\t\t\tif exColor :\n\t\t\t\txportAX = nuke.nodes.Axis(\n\t\t\t\t\t\t\t\txpos = int( thisGRP.xpos() + space\[0] * ( count + 1 ) ) , \n\t\t\t\t\t\t\t\typos = int( thisGRP.ypos() + space\[1] )\n\t\t\t\t\t\t\t\t)\n\t\t\t\txportMULT = nuke.nodes.Multiply(\n\t\t\t\t\t\t\t\tchannels = 'rgb' ,\n\t\t\t\t\t\t\t\txpos = int( thisGRP.xpos() + space\[0] * ( count + 1 ) ) , \n\t\t\t\t\t\t\t\typos = int( thisGRP.ypos() )\n\t\t\t\t\t\t\t\t)\n\t\t\t\txportMULT\['value'].setSingleValue(False)\n\t\t\t\twith thisGRP :\n\t\t\t\t\txportMULT\['value'].setValue( nuke.toNode( 'cc_\{0\}'.format(node.name()\[3:]) )\['value'].getValue() )\n\t\t\t\texNodes.append( xportAX )\n\t\t\t\texNodes.append( xportMULT )\n\t\t\telse :\n\t\t\t\txportAX = nuke.nodes.Axis(\n\t\t\t\t\txpos = int( thisGRP.xpos() + space\[0] * ( count + 1 ) ) , \n\t\t\t\t\typos = int( thisGRP.ypos() )\n\t\t\t\t\t)\n\t\t\t\texNodes.append( xportAX )\n\n\t\t\txportSC.setInput( count, xportAX )\n\t\t\tcount += 1\n\n\t\t\ttry :\n\t\t\t\twith thisGRP :\n\t\t\t\t\tAnimRange = \[int(i) for i in goStore\['aniRNG'].value().split('-')]\n\n\t\t\t\tif thisGRP\['exTranslate'].value() :\n\t\t\t\t\txportAX\['translate'].setAnimated()\n\t\t\t\tif thisGRP\['exRotate'].value() :\n\t\t\t\t\txportAX\['rotate'].setAnimated()\n\t\t\t\tif thisGRP\['exScale'].value() :\n\t\t\t\t\txportAX\['scaling'].setAnimated()\n\n\t\t\t\tfor ctime in range( int(AnimRange\[0]) , int(AnimRange\[1]+1) , 1 ) :\n\t\t\t\t\tmainstream = upstreamNodes( node , filter3DNodes )\n\t\t\t\t\tmMTX = unify( mainstream , ctime )\n\t\t\t\t\tform = mtx2value( mMTX )\n\n\t\t\t\t\tif thisGRP\['exTranslate'].value() :\n\t\t\t\t\t\tfor i in range( 3 ) :\n\t\t\t\t\t\t\txportAX\['translate'].setValueAt( form\[0]\[i] , ctime, i )\n\t\t\t\t\tif thisGRP\['exRotate'].value() :\n\t\t\t\t\t\tfor i in range( 3 ) :\n\t\t\t\t\t\t\txportAX\['rotate'].setValueAt( form\[1]\[i] , ctime, i )\n\t\t\t\t\tif thisGRP\['exScale'].value() :\n\t\t\t\t\t\tfor i in range( 3 ) :\n\t\t\t\t\t\t\txportAX\['scaling'].setValueAt( form\[2]\[i] , ctime, i )\n\t\t\texcept :\n\t\t\t\tmainstream = upstreamNodes( node , filter3DNodes )\n\t\t\t\tmMTX = unify( mainstream , nuke.frame() )\n\t\t\t\tform = mtx2value( mMTX )\n\n\t\t\t\tif thisGRP\['exTranslate'].value() :\n\t\t\t\t\txportAX\['translate'].setValue( form\[0] )\n\t\t\t\tif thisGRP\['exRotate'].value() :\n\t\t\t\t\txportAX\['rotate'].setValue( form\[1] )\n\t\t\t\tif thisGRP\['exScale'].value() :\n\t\t\t\t\txportAX\['scaling'].setValue( form\[2] )\n\n\t\t##### deselect all Nodes\n\t\twith getLevel() :\n\t\t\tsavedSelected = \[]\n\t\t\tfor node in nuke.allNodes() :\n\t\t\t\tif node\['selected'].value()\t:\n\t\t\t\t\tsavedSelected.append( node )\n\t\t\t\tnode.setSelected( False )\n\n\t\t##### set backdrop\n\t\tfor node in exNodes :\n\t\t\tnode.setSelected( True )\n\n\t\tautoBackdrop_mod( thisGRP.name() , int( thisGRP\['tile_color'].getValue() ) )\n\n\t\tfor node in exNodes :\n\t\t\tnode.setSelected( False )\n\n\t\t##### restore selected node\n\t\tfor node in savedSelected :\n\t\t\tnode.setSelected( True )\n\n\t\tdel progBar, jobCount, jobTotal, progShow\n\t\t\n\telse :\n\t\tnuke.message('No selected axis found.

    Process denied...')\n\nelse :\n\tnuke.message('No translate, rotate and scale checked, no axis will be extract.

    Process denied...')"} addUserKnob {22 cpCode03 T "selAX = \[]\nfor node in nuke.allNodes('Axis') :\n\tif node.name()\[:3] == 'ax_' and node\['selected'].getValue() :\n\t\tfor link in node.dependent()\[0].dependencies() :\n\t\t\tif link.Class() != 'Input' :\n\t\t\t\tselAX.append( link )\n\t\tif node.dependent()\[0].dependent()\[0].Class() == 'ApplyMaterial' :\n\t\t\tfor link in node.dependent()\[0].dependent()\[0].dependencies() :\n\t\t\t\tselAX.append( link )\n\t\t\tselAX.append( node.dependent()\[0].dependent()\[0] )\n\t\telse :\n\t\t\tselAX.append( node.dependent()\[0] )\n\nif len( selAX ) :\n\tprogBar = nuke.ProgressTask('Removing instances...')\n\tjobCount = 0\n\tjobTotal = len( selAX )\n\n\tfor rmNode in selAX :\n\t\t### progress bar\n\t\tjobCount += 1\n\t\tprogShow = int(jobCount/jobTotal * 100)\n\t\tif progBar.isCancelled() :\n\t\t\tbreak;\n\t\tprogBar.setProgress(progShow)\n\t\t#################\n\n\t\tfor i in range( rmNode.inputs() ) :\n\t\t\trmNode.setInput( i, None )\n\t\tif rmNode.Class() == 'Axis' :\n\t\t\tnuke.thisGroup()\['info_inst'].setValue( str( int( nuke.thisGroup()\['info_inst'].value() ) -1 ) )\n\t\tnuke.delete( rmNode )\n\n\tdel progBar, jobCount, jobTotal, progShow\nelse :\n\tnuke.message('No instance selected. Nothing deleted.')" +STARTLINE} addUserKnob {43 filterNonReverse +DISABLED} filterNonReverse Camera,Camera2,Light,Light2,DirectLight,Environment,Axis,Axis2 addUserKnob {43 filter3DNodes +DISABLED} filter3DNodes Axis,Axis2,Card,Card2,Cube,Cylinder,Sphere,ReadGeo,ReadGeo2,Light,Light2,DirectLight,Spotlight,Environment,TransformGeo,EditGeo,Camera,Camera2 addUserKnob {43 filterPrimitives +DISABLED} filterPrimitives Card,Card2,Cube,Cylinder,Sphere,ReadGeo,ReadGeo2 } NoOp { inputs 0 name menu02 knobChanged "\nthisGRP = nuke.thisGroup()\ndmapknobs = \['title_dmap_setting','uv_type','sample_res','max_instance','dmap_seed','rgb_color','fail_attempts']\nvtxknobs = \['title_vf_setting','random_percentage','random_seed']\nif thisGRP\['snap_type'].getValue() :\n for knob in dmapknobs :\n thisGRP\[knob].setEnabled( True )\n for knob in vtxknobs :\n thisGRP\[knob].setEnabled( False )\n thisGRP\['selected_vertex_info'].setEnabled( False )\nelse :\n for knob in dmapknobs :\n thisGRP\[knob].setEnabled( False )\n for knob in vtxknobs :\n thisGRP\[knob].setEnabled( True )\n thisGRP\['selected_vertex_info'].setEnabled( True )\n" xpos -447 ypos 127 addUserKnob {20 User} addUserKnob {4 snap_type l "snap type" M {"selected vertices/faces" "density map (alpha)"}} } push $N1e37b800 GeoSelect { selectable false geo { } name GeoSelect xpos 138 ypos 215 } Output { name Output1 xpos 138 ypos 724 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_origami.gizmo ================================================ Group { inputs 2 name Origami onCreate "\nnuke.toNode('store')\['fn'].execute()\n" tile_color 0xd2d794ff addUserKnob {20 tab_general l General} addUserKnob {41 frame_range l "frame range" t "The frame range setting will applied on 'create target set' and 'Deform with animation'\n\nproject setting : frame range will be set to project setting of the script.\n\ncustom : will enable custom range knobs." T menu01.frame_range} addUserKnob {3 firstFR l "custom range" t "First frame of the custom frame range." +DISABLED} firstFR 1001 addUserKnob {3 lastFR l "" t "Last frame of the custom frame range." -STARTLINE +DISABLED} lastFR 1100 addUserKnob {20 origamiTabStart l "" +STARTLINE n -2} addUserKnob {20 tab_set l Set} addUserKnob {26 title_target l "Target Geo Setup"} addUserKnob {41 tgt_gl_color l "Target Display Color" T targetView3d.tgt_gl_color} addUserKnob {7 tgt_scale l scale t "Scale of the target set in 3D view. Update in real-time." R 0.001 4} tgt_scale 0.5 addUserKnob {22 create_tgt_set l "Create Target Set" t "Create target set from selected vertex. Required geo connected to target input. This is the first step of the using the this tool." T "thisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\ntemp = \[]\nselv =\[]\nfor i in nukescripts.snap3d.selectedVertexInfos () :\n\ttemp = \[i.index, i.position]\n\tif selv.count(temp) == 0 :\n\t\tselv.append(temp)\ndel temp\n\nif len(selv) < 1 or thisGRP.input(0) == None :\n\tnuke.message('Please connect the target geo to this node and select vertex first.')\nelse :\n\tthisGRP\['reset_tgt'].execute()\n\n\tFRsetting = thisGRP\['frame_range'].getValue()\n\n\tif FRsetting == 1 :\n\t\tframeST = int(thisGRP\['firstFR'].getValue())\n\t\tframeED = int(thisGRP\['lastFR'].getValue())\n\telse :\n\t\tframeST = nuke.root().firstFrame()\n\t\tframeED = nuke.root().lastFrame()\n\n\tgetColor = thisGRP\['tgt_gl_color'].getValue()\n\n\toSC = nuke.toNode('oScene')\n\n\ttgtGRP = nuke.nodes.Group(name='t')\n\n\ttgtGRP.begin()\n\ttgtSC = nuke.nodes.Scene()\n\ttgtOUT = nuke.nodes.Output()\n\ttgtOUT.setInput(0, tgtSC)\n\n\tfor i in range (0, len(selv)) :\n\t\ttgtAX = nuke.nodes.Axis(name='x' + str(i))\n\t\ttgtAX.addKnob(nuke.XYZ_Knob('origin'))\n\t\ttgtAX\['origin'].setAnimated()\n\t\ttgtAX\['translate'].setAnimated()\n\t\ttgtAX\['gl_color'].fromScript('0x%02x%02x%02x%02x' % ( int(getColor\[0]*255) , int(getColor\[1]*255), int(getColor\[2]*255), int(255) ) )\n\t\ttgtAX\['scaling'].setExpression('parent.parent.tgt_scale')\n\t\ttgtSC.setInput(i, tgtAX)\n\n\thack_ct = nuke.nodes.CurveTool()\n\n\tprogBar = nuke.ProgressTask('Sampling vertex')\n\tjobCount = 0\n\tjobTotal = (frameED+1)-frameST\n\n\tfor time in range (int(frameST), int(frameED+1), 1) :\n\t\tnuke.execute(hack_ct, time, time)\n\t\t### progress bar\n\t\tjobCount += 1\n\t\tprogShow = int(jobCount/jobTotal * 100)\n\t\tif progBar.isCancelled() :\n\t\t\tbreak;\n\t\tprogBar.setProgress(progShow)\n\t\t#################\n\n\t\tselv = \[]\n\t\tg = 0\n\t\tfor i in nukescripts.snap3d.selectedVertexInfos () :\n\t\t\ttemp = \[i.index, i.position]\n\t\t\tif selv.count(temp) == 0 :\n\t\t\t\tselv.append(temp)\n\n\t\t\t\tfocusNODE = nuke.toNode('x' + str(g))\n\t\t\t\tfocusNODE\['origin'].setValue(i.position)\n\t\t\t\tfocusNODE\['translate'].setValue(i.position)\n\t\t\t\tif time == int(frameED) :\n\t\t\t\t\tfocusNODE\['knobChanged'].setValue('axLock(nuke.thisNode(), 1)')\n\t\t\t\tg += 1\n\n\tdel progBar\n\tdel temp\n\tnuke.delete(hack_ct)\n\ttgtGRP.end()\n\toSC.setInput(3, tgtGRP)\ndel selv" +STARTLINE} addUserKnob {22 add_ex_tgt l "Add Extra Target" t "User can add extra target set after the set created. The extra target can be any 3D nodes or vertex selected in viewer.\n\nnode : select all the 3D nodes you want to add and click this button. It will import the animated nodes into the target set.\n\nvertex : select vertex in viewer and click this button. It will scan through the frame range and import the vertex into the target set." T "if nuke.toNode('t') == None :\n\tnuke.message('No Target Selection found. Please create target selection first before add extra target.')\nelse :\n\n\tthisGRP = nuke.thisGroup()\n\texfr = thisGRP\['extra_from'].getValue()\n\n\tgoStore = nuke.toNode('store')\n\tfilter3DNodes = goStore\['filter3DNodes'].getValue()\n\troot = getLevel()\n\n\tselEx = \[]\n\n\troot.begin()\n\tif exfr == 0 :\n\t\tfor node in nuke.selectedNodes() :\n\t\t\tif filter3DNodes.count(node.Class()) != 0 :\n\t\t\t\tselEx.append(node)\n\t\tif len(selEx) == 0 :\n\t\t\tnuke.message('No available node selected. Only 3D nodes supported.')\n\telse :\n\t\tfor i in nukescripts.snap3d.selectedVertexInfos () :\n\t\t\ttemp = \[i.index, i.position]\n\t\t\tif selEx.count(temp) == 0 :\n\t\t\t\tselEx.append(temp)\n\t\tif len(selEx) == 0 :\n\t\t\tnuke.message('No vertex selected.')\n\troot.end()\n\n\tthisGRP.begin()\n\tif len(selEx) != 0 :\n\t\ttgtGRP = nuke.toNode('t')\n\t\tgetColor = thisGRP\['tgt_gl_color'].getValue()\n\n\t\tFRsetting = thisGRP\['frame_range'].getValue()\n\n\t\tif FRsetting == 1 :\n\t\t\tframeST = int(thisGRP\['firstFR'].getValue())\n\t\t\tframeED = int(thisGRP\['lastFR'].getValue())\n\t\telse :\n\t\t\tframeST = nuke.root().firstFrame()\n\t\t\tframeED = nuke.root().lastFrame()\n\n\t\t##########################################\n\n\t\tnumName = \[]\n\n\t\ttgtGRP.begin()\n\t\tfor node in nuke.allNodes() :\n\t\t\tif node.Class()\[0:4] == 'Axis' :\n\t\t\t\tnumName.append(int(node.name()\[1:]))\n\t\t\tif node.Class()\[0:5] == 'Scene' :\n\t\t\t\tscNode = node\n\n\t\t##########################################\n\n\t\tcountCheck = 0\n\t\ttempKeep = 0\n\t\tnumNameNew = \[]\n\n\t\twhile countCheck < len(selEx) :\n\t\t\twhile numName.count(tempKeep) != 0 :\n\t\t\t\ttempKeep += 1\n\t\t\tnumName.append(tempKeep)\n\t\t\tnumNameNew.append(tempKeep)\n\t\t\tcountCheck += 1\n\n\t\tdel tempKeep\n\t\tdel numName\n\n\t\t##########################################\n\n\t\tfor i in range (0, len(selEx)) :\n\t\t\tnewAX = nuke.nodes.Axis(name='x' + str(numNameNew\[i]))\n\t\t\tnewAX.addKnob(nuke.XYZ_Knob('origin'))\n\t\t\tnewAX\['origin'].setAnimated()\n\t\t\tnewAX\['translate'].setAnimated()\n\t\t\tnewAX\['gl_color'].fromScript('0x%02x%02x%02x%02x' % ( int(getColor\[0]*255) , int(getColor\[1]*255) , int(getColor\[2]*255) , int(255) ) )\n\t\t\tnewAX\['scaling'].setExpression('parent.parent.tgt_scale')\n\t\t\tscNode.setInput(scNode.inputs()+1+i, newAX)\n\n\t\tif exfr == 0 :\n\t\t\tfor time in range (int(frameST), int(frameED+1), 1) :\n\n\t\t\t\tfor i in range (0, len(numNameNew)) :\n\t\t\t\t\tfocusNODE = nuke.toNode('x' + str(numNameNew\[i]))\n\t\t\t\t\tfocusNODE\['origin'].setValueAt(selEx\[i]\['translate'].getValueAt(time)\[0], time, 0)\n\t\t\t\t\tfocusNODE\['origin'].setValueAt(selEx\[i]\['translate'].getValueAt(time)\[1], time, 1)\n\t\t\t\t\tfocusNODE\['origin'].setValueAt(selEx\[i]\['translate'].getValueAt(time)\[2], time, 2)\n\t\t\t\t\tfocusNODE\['translate'].setValueAt(selEx\[i]\['translate'].getValueAt(time)\[0], time, 0)\n\t\t\t\t\tfocusNODE\['translate'].setValueAt(selEx\[i]\['translate'].getValueAt(time)\[1], time, 1)\n\t\t\t\t\tfocusNODE\['translate'].setValueAt(selEx\[i]\['translate'].getValueAt(time)\[2], time, 2)\n\t\t\t\t\tif time == int(frameED) :\n\t\t\t\t\t\tfocusNODE\['knobChanged'].setValue('axLock(nuke.thisNode(), 1)')\n\t\telse :\n\t\t\thack_ct = nuke.nodes.CurveTool()\n\n\t\t\tprogBar = nuke.ProgressTask('Sampling vertex')\n\t\t\tjobCount = 0\n\t\t\tjobTotal = (frameED+1)-frameST\n\n\t\t\tfor time in range (int(frameST), int(frameED+1), 1) :\n\t\t\t\tnuke.execute(hack_ct, time, time)\n\t\t\t\t### progress bar\n\t\t\t\tjobCount += 1\n\t\t\t\tprogShow = int(jobCount/jobTotal * 100)\n\t\t\t\tif progBar.isCancelled() :\n\t\t\t\t\tbreak;\n\t\t\t\tprogBar.setProgress(progShow)\n\t\t\t\t#################\n\n\t\t\t\tselv = \[]\n\t\t\t\tg = 0\n\t\t\t\tfor i in nukescripts.snap3d.selectedVertexInfos () :\n\t\t\t\t\ttemp = \[i.index, i.position]\n\t\t\t\t\tif selv.count(temp) == 0 :\n\t\t\t\t\t\tselv.append(temp)\n\n\t\t\t\t\t\tfocusNODE = nuke.toNode('x' + str(numNameNew\[g]))\n\t\t\t\t\t\tfocusNODE\['origin'].setValue(i.position)\n\t\t\t\t\t\tfocusNODE\['translate'].setValue(i.position)\n\t\t\t\t\t\tif time == int(frameED) :\n\t\t\t\t\t\t\tfocusNODE\['knobChanged'].setValue('axLock(nuke.thisNode(), 1)')\n\t\t\t\t\t\tg += 1\n\n\t\t\tdel progBar, temp\n\t\t\tnuke.delete(hack_ct)\n\n\t\ttgtGRP.end()\n\n\tdel selEx" +STARTLINE} addUserKnob {4 extra_from l "Extra from" -STARTLINE M {nodes vertex "" "" "" ""}} addUserKnob {22 reset_tgt l Remove t "Remove any exisiting target set." T "try :\n\tnuke.delete(nuke.toNode('t'))\n\tnuke.thisGroup()\['metadata'].fromScript('')\n\tthisGRP\['reset_deform'].execute()\nexcept :\n\tpass" +STARTLINE} addUserKnob {26 title_source l "Source Geo Setup"} addUserKnob {41 src_gl_color l "Source Display Color" T sourceView3d.src_gl_color} addUserKnob {7 src_scale l scale t "Scale of the source set in 3D view. Update in real-time." R 0.001 4} src_scale 1 addUserKnob {6 use_card_deform l "use card deform" t "Use card deform function. Source input MUST be 'Card2' node (nuke default card node).\n\nDuring create source set, will confirm with user of the control points detected from the source input. Required at least 3x3 size.\n\nAfter source set created, this knob will be locked and not changable unless remove the source set again. The tool will take over the setting of the card. If change any setting of the source geo, the function will not work properly." +STARTLINE} addUserKnob {22 create_src_set l "Create Source Set" t "If 'use card deform' is uncheck, the tool will create source set base on the vertex of the source geo.\n\nIf 'use card deform' is checked, the tool will confirm the amount of control points with user. And create the source set base on control point had been set." T "thisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\nif thisGRP.input(1) == None :\n nuke.message('Please connect the source geo to this node first.')\nelse :\n inMTX = thisGRP.input(1)\['matrix'].getValue()\n\n vertexT = \{\}\n\n srcGeo = thisGRP.input(1)\n\n if thisGRP\['use_card_deform'].getValue() != 1 :\n thisGRP\['reset_src'].execute()\n\n nuke.toNode('EditGeo_deform')\['disable'].setValue(0)\n if thisGRP.input(1).Class() == 'Card2' :\n srcGeo\['type'].setValue('none')\n\n pgeoSGet = nuke.toNode('pgeoSGet')\n vertexT = pgVertexPack(pgeoSGet)\n\n ##############################################\n\n createSRCset(vertexT, inMTX, thisGRP)\n thisGRP\['use_card_deform'].setEnabled(False)\n else :\n if srcGeo.Class() == 'Card2' :\n thisGRP\['reset_src'].execute()\n\n thisGRP\['export'].setEnabled(False)\n nuke.toNode('EditGeo_deform')\['disable'].setValue(1)\n \n srcGeo\['type'].setValue('bicubic')\n srcGeo\['break_tangent'].setValue(True)\n rawData = srcGeo\['control_points'].toScript()\n\n wSub = int(rawData.split(' ')\[2])\n hSub = int(rawData.split(' ')\[1])\n\n p = nuke.Panel('Control Points Confirm')\n p.addSingleLineInput('x points', str(wSub))\n p.addSingleLineInput('y points', str(hSub))\n\n if p.show() == 1 :\n xInput = int(p.value('x points'))\n yInput = int(p.value('y points'))\n if xInput == wSub and yInput == hSub :\n nuke.toNode('dataset')\['raw_cdd'].setValue( rawData )\n\n import re\n originData = re.split( '\{|\}', rawData )\n if originData.count('curve') != 0 :\n srcGeo\['del_anim_shape'].execute()\n\n ctrlpts = getCTRLPTS(rawData)\n\n for i in range (0, len(ctrlpts)) :\n vertexT\[i] = ctrlpts\[i]\n\n ##############################################\n\n createSRCset(vertexT, inMTX, thisGRP)\n else :\n srcGeo\['x_points'].setValue( xInput )\n srcGeo\['y_points'].setValue( yInput )\n srcGeo.showControlPanel()\n srcGeo\['new_shape'].execute()\n srcGeo.hideControlPanel()\n\n rawData = srcGeo\['control_points'].toScript()\n nuke.toNode('dataset')\['raw_cdd'].setValue( rawData )\n\n import re\n originData = re.split( '\{|\}', rawData )\n if originData.count('curve') != 0 :\n srcGeo\['del_anim_shape'].execute()\n\n ctrlpts = getCTRLPTS(rawData)\n\n for i in range (0, len(ctrlpts)) :\n vertexT\[i] = ctrlpts\[i]\n\n ##############################################\n\n createSRCset(vertexT, inMTX, thisGRP)\n\n thisGRP\['use_card_deform'].setEnabled(False)\n thisGRP\['rows'].setValue( srcGeo\['rows'].value() )\n thisGRP\['columns'].setValue( srcGeo\['columns'].value() )\n else :\n nuke.message('Source input no Card2 found.')" +STARTLINE} addUserKnob {22 reset_src l Remove t "Remove any exisiting source set, reset all the deform value and release 'use card deform' knob." T "try :\n\tthisGRP = nuke.thisGroup()\n\tnuke.delete(nuke.toNode('s'))\n\tthisGRP\['metadata'].fromScript('')\n\tthisGRP\['use_card_deform'].setEnabled(True)\n\tthisGRP\['reset_deform'].execute()\n\tnuke.toNode('dataset')\['raw_cdd'].setValue('')\n\tthisGRP\['export'].setEnabled(True)\nexcept :\n\tpass" +STARTLINE} addUserKnob {26 title_p2p l "Point-to-Point Setup"} addUserKnob {22 snap l "Snap Source to Target" t "Required select one target and one source under view and snap them together. All data will store into 'Point-to-Point data' (metadata)." T "if nuke.toNode('t') == None :\n\tnuke.message('Missing Target selection. Please process \"Create Target Selection\" first.')\nelse :\n\tif nuke.toNode('s') == None :\n\t\tnuke.message('Missing Source UI. Please process \"Create Source UI\" first.')\n\telse :\n\t\ttry :\n\t\t\tthisGRP = nuke.thisGroup()\n\t\t\tgoStore = nuke.toNode('store')\n\t\t\tgoStore\['fn'].execute()\n\n\t\t\ttgtGRP = nuke.toNode('t')\n\t\t\tsrcGRP = nuke.toNode('s')\n\n\t\t\ttgtGRP.begin()\n\t\t\tfor node in nuke.allNodes() :\n\t\t\t\tif node\['selected'].getValue() == 1 :\n\t\t\t\t\ttgtSel = node\n\t\t\ttgtGRP.end()\n\n\t\t\tsrcGRP.begin()\n\t\t\tfor node in nuke.allNodes() :\n\t\t\t\tif node\['selected'].getValue() == 1 :\n\t\t\t\t\tsrcSel = node\n\t\t\tsrcGRP.end()\n\n\t\t\tsrcSel\['translate'].setValue(tgtSel\['translate'].getValue())\n\n\t\t\t#######################################################\n\n\t\t\tpathLength = len(srcSel.fullName().split('.'))\n\t\t\tsrcName = '.'.join(srcSel.fullName().split('.')\[pathLength-2:pathLength])\n\t\t\ttgtName = '.'.join(tgtSel.fullName().split('.')\[pathLength-2:pathLength])\n\n\t\t\texistDataset = getData(thisGRP)\n\n\t\t\texistDataset\[srcName] = tgtName\n\n\t\t\tnewData = \[]\n\t\t\tfor key in existDataset :\n\t\t\t\tnewData.append('\{set ' + str(key) + ' ' + str(existDataset\[key]) + '\}')\n\n\t\t\tthisGRP\['metadata'].fromScript('\\n'.join(newData))\n\t\t\tdel existDataset\n\t\texcept :\n\t\t\tnuke.message('Process fail. Please select 1 target and 1 source first.')" +STARTLINE} addUserKnob {22 deselect_all l "De-select All" t "This tool designed to only able select one target and one source only. User cannot de-select under viewer. Use this button to de-select any target or source." -STARTLINE T "try :\n\taxGRP = nuke.toNode('t')\n\taxGRP.begin()\n\tfor node in nuke.allNodes() :\n\t\tnode\['selected'].setValue(0)\n\taxGRP.end()\n\taxGRP = nuke.toNode('s')\n\taxGRP.begin()\n\tfor node in nuke.allNodes() :\n\t\tnode\['selected'].setValue(0)\n\taxGRP.end()\nexcept :\n\tpass"} addUserKnob {20 pts2pts l "Point-to-Point data" n 1} pts2pts 0 addUserKnob {41 metadata l "" t "*If not sure how this work, don't change it manually. Let the tool handle this.*\nThis store the point-to-point data after trigger snap function. It store the full path of the target set and the source set. User can find those full path name under viewer.\n\nFor example :\norigami.s.y.1 - for the source\norigami.t.x.1 - for the target\n\nIf these appear in the same line, which means s.y.1 linked to t.x.1 . Once triggered deform, the deformation will base on this point-to-point data to deform the point.\n\nSorting order will not affect anyting on the result. If add the data manually, need to be sure the full path name is existing in the set. Otherwise that will break the function." -STARTLINE T dataset.metadata} addUserKnob {20 endGroup n -1} addUserKnob {20 tab_cardDeform l "Card Deform"} addUserKnob {26 title_subd l Subdivision} addUserKnob {41 rows l rows/columns T menu04.rows} addUserKnob {41 columns l "" -STARTLINE T menu04.columns} addUserKnob {26 title_tangent l Tangent} addUserKnob {41 live_update l "live update" T menu02.live_update} addUserKnob {41 t1angle l "tangent +x" T menu03.t1angle} addUserKnob {41 t1scale l scale -STARTLINE T menu03.t1scale} addUserKnob {41 t2angle l "tangent -x" T menu03.t2angle} addUserKnob {41 t2scale l scale -STARTLINE T menu03.t2scale} addUserKnob {41 t3angle l "tangent +y" T menu03.t3angle} addUserKnob {41 t3scale l scale -STARTLINE T menu03.t3scale} addUserKnob {41 t4angle l "tangent -y" T menu03.t4angle} addUserKnob {41 t4scale l scale -STARTLINE T menu03.t4scale} addUserKnob {41 edge_tangent l "edge tangent" T menu03.edge_tangent} addUserKnob {26 title_animT l "Animate Tangent"} addUserKnob {41 anim_type_tangent l "anim type" t "Anim type of tangent will ONLY apply on deform with animation .\n\ndynamic\nCalculate every tangent angle and length on every frame.\n\nstatic\nOnly apply the tangent angle and length from the reference frame set in this tool.\n\nWhen the type set to static, reference frame knob will be enable.\n\nThis knob will not trigger 'live update' due to static option require within frame range." T menu05.anim_type_tangent} addUserKnob {3 ref_frame l "reference frame" t "This knob will be enable when tangent anim type set to static. And the tangle calculation will only apply from reference frame. The value has to be inside the frame range. " +DISABLED} ref_frame 1001 addUserKnob {20 origamiTabEnd l "" +STARTLINE n -3} addUserKnob {26 ""} addUserKnob {6 deform_anim l "with Animation" t "Deform with animation." +STARTLINE} addUserKnob {22 deform l " Deform " t "Deform the source geo. It can be use as preview during process and also final deform." T "thisGRP = nuke.thisGroup()\nwAnim = thisGRP\['deform_anim'].getValue()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\nthisGRP\['deform_status'].setValue(1)\n\nif thisGRP\['use_card_deform'].getValue() != 1 :\n\tegDeform = nuke.toNode('EditGeo_deform')\n\n\tmd = getData(thisGRP)\n\n\tdkeys = \[]\n\tdvalues = \[]\n\n\tif wAnim == 0 :\n\t\tfor key in md :\n\t\t\tdkeys.append(str(key\[3:]))\n\t\t\tfor i in range (0, 3) :\n\t\t\t\tdiff = nuke.toNode(md\[key])\['translate'].getValue()\[i] - nuke.toNode(key)\['origin'].getValue()\[i]\n\t\t\t\tdvalues.append(str(diff))\n\n\t\tegDeform\['keys'].fromScript('\{ ' + ' '.join(dkeys) + ' \}')\n\t\tegDeform\['values'].fromScript('\{ ' + ' '.join(dvalues) + ' \}')\n\n\telse :\n\t\tFRsetting = thisGRP\['frame_range'].getValue()\n\n\t\tif FRsetting == 1 :\n\t\t\tframeST = int(thisGRP\['firstFR'].getValue())\n\t\t\tframeED = int(thisGRP\['lastFR'].getValue())\n\t\telse :\n\t\t\tframeST = nuke.root().firstFrame()\n\t\t\tframeED = nuke.root().lastFrame()\n\n\t\t##########################################\n\n\t\ttempKeys01 = \[]\n\t\tfor key in md :\n\t\t\ttempKeys01.append(str(key\[3:]))\n\n\t\ttempKeys02 = \[]\n\t\tfor i in range (0, len(tempKeys01)) :\n\t\t\ttempKeep = \[]\n\t\t\tfor time in range (int(frameST), int(frameED+1), 1) :\n\t\t\t\ttempKeep.append('x' + str(time) + ' ' + tempKeys01\[i])\n\t\t\ttempKeys02.append(tempKeep)\n\t\t\tdel tempKeep\n\t\tdel tempKeys01\n\t\ttempKeys01 = \[]\n\t\tfor i in range (0, len(tempKeys02)) :\n\t\t\ttempKeys01.append('\{curve ' + ' '.join(tempKeys02\[i]) + '\}')\n\t\tdel tempKeys02\n\n\t\tdkeys = '\{' + ' '.join(tempKeys01) + '\}'\n\n\t\t##########################################\n\n\t\ttempValue01 = \[]\n\t\tfor key in md :\n\t\t\ttempValue03 = \[]\n\t\t\tfor time in range (int(frameST), int(frameED+1), 1) :\n\t\t\t\ttempValue02 = \[]\n\t\t\t\tfor i in range (0, 3) :\n\t\t\t\t\tdiff = nuke.toNode(md\[key])\['translate'].getValueAt(time)\[i] - nuke.toNode(key)\['origin'].getValue()\[i]\n\t\t\t\t\ttempValue02.append('x' + str(time) + ' ' + str(diff))\n\t\t\t\ttempValue03.append(tempValue02)\n\t\t\ttempValue01.append(tempValue03)\n\t\ttempValue02 = \[]\n\t\tfor i in range (0, len(tempValue01)) :\n\t\t\ttempX = \[]\n\t\t\ttempY = \[]\n\t\t\ttempZ = \[]\n\t\t\tfor t in range (0, len(tempValue01\[i])) :\n\t\t\t\ttempX.append(tempValue01\[i]\[t]\[0])\n\t\t\t\ttempY.append(tempValue01\[i]\[t]\[1])\n\t\t\t\ttempZ.append(tempValue01\[i]\[t]\[2])\n\t\t\ttempValue02.append('\{curve ' + ' '.join(tempX) + '\} \{curve ' + ' '.join(tempY) + '\} \{curve ' + ' '.join(tempZ) + '\}')\n\n\t\tdvalues = '\{' + ' '.join(tempValue02) + '\}'\n\n\t\tegDeform\['keys'].fromScript(dkeys)\n\t\tegDeform\['values'].fromScript(dvalues)\nelse :\n\tcardCenter(thisGRP, thisGRP.input(1))" +STARTLINE} addUserKnob {22 export l " Export EditGeo " t "Deformation can be export to EditGeo node but not for card deform." T "thisGRP = nuke.thisGroup()\negDeform = nuke.toNode('EditGeo_deform')\nroot = getLevel()\n\nroot.begin()\nexEG = nuke.nodes.EditGeo()\nexEG\['xpos'].setValue(thisGRP.xpos()+120)\nexEG\['ypos'].setValue(thisGRP.ypos())\nexEG\['label'].setValue('Export by Origami')\nexEG\['keys'].fromScript(egDeform\['keys'].toScript())\nexEG\['values'].fromScript(egDeform\['values'].toScript())\nexEG\['tile_color'].fromScript(thisGRP\['tile_color'].toScript())\nroot.end()" +STARTLINE} addUserKnob {22 reset_deform l " Reset Deform " t "Remove all the applied deformation data." -STARTLINE T "thisGRP = nuke.thisGroup()\nnuke.toNode('EditGeo_deform')\['keys'].fromScript('')\nnuke.toNode('EditGeo_deform')\['values'].fromScript('')\ntry :\n\tif thisGRP\['use_card_deform'].getValue() == 1 :\n\t\tthisGRP.input(1)\['useMatrix'].setValue(0)\n\t\tthisGRP.input(1)\['control_points'].fromScript(nuke.toNode('dataset')\['raw_cdd'].getValue())\n\t\tthisGRP.input(1)\['label'].setValue('')\n\t\tthisGRP.input(1)\['tile_color'].fromScript('0')\n\t\tthisGRP\['deform_status'].setValue(0)\nexcept :\n\tpass"} addUserKnob {3 deform_status l "" t "not for user" +STARTLINE +INVISIBLE} addUserKnob {20 tab_menu l Feature} addUserKnob {22 create_origami_menu l "Create Menu" t "Create a temporary tool menu. Support hotkey. It's not a permanent tool menu. The main purpose is get all the functions with hotkey support." T "p = nuke.Panel('Alert')\np.addNotepad('', 'This menu is temporary and will not override any of personal setting.\\n\\nWhen you \\'Create Menu\\', it might temporary override current hotkey. Please double check \\'Define Hotkey\\' section.\\n\\nUser always able revert hotkey after \\'Remove Menu\\' or restart nuke again.\\n\\nAre you sure to process?')\n\nif p.show() == 1 :\n\toriNAME = nuke.thisGroup()\n\thkCrTgt = oriNAME\['hk_cr_tgt'].getValue()\n\thkRmTgt = oriNAME\['hk_rm_tgt'].getValue()\n\thkCrSrcUI = oriNAME\['hk_cr_srcUI'].getValue()\n\thkRmSrcUI = oriNAME\['hk_rm_srcUI'].getValue()\n\thkSnap = oriNAME\['hk_snap'].getValue()\n\thkDesel = oriNAME\['hk_deselect_all'].getValue()\n\thkDeform = oriNAME\['hk_deform'].getValue()\n\thkResetD = oriNAME\['hk_reset_d'].getValue()\n\n\tmenubar = nuke.menu('Nuke')\n\tori = menubar.addMenu(oriNAME.name())\n\n\tori.addCommand('Target/Create Target Selection', 'crTgt(oriNAME)', hkCrTgt)\n\tori.addCommand('Target/Remove Target Selection', 'rmTgt(oriNAME)', hkRmTgt)\n\tori.addCommand('Source/Create Source UI', 'crSrcUI(oriNAME)', hkCrSrcUI)\n\tori.addCommand('Source/Remove Source UI', 'rmSrcUI(oriNAME)', hkRmSrcUI)\n\tori.addCommand('Snap Source to Target', 'snap(oriNAME)', hkSnap)\n\tori.addCommand('Deselect All', 'desel(oriNAME)', hkDesel)\n\tori.addCommand('Deform/Deform', 'orideform(oriNAME)', hkDeform)\n\tori.addCommand('Deform/Reset Deform', 'resetD(oriNAME)', hkResetD)\n\n\tdef crTgt(origami) :\n\t\torigami\['create_tgt_set'].execute()\n\n\tdef rmTgt(origami) :\n\t\torigami\['reset_tgt'].execute()\n\n\tdef crSrcUI(origami) :\n\t\torigami\['create_src_set'].execute()\n\n\tdef rmSrcUI(origami) :\n\t\torigami\['reset_src'].execute()\n\n\tdef snap(origami) :\n\t\torigami\['snap'].execute()\n\n\tdef desel(origami) :\n\t\torigami\['deselect_all'].execute()\n\n\tdef orideform(origami) :\n\t\torigami\['deform'].execute()\n\n\tdef resetD(origami) :\n\t\torigami\['reset_deform'].execute()" +STARTLINE} addUserKnob {22 remove_origami_menu l "Remove Menu" t "Remove the tool menu" -STARTLINE T "thisNAME = nuke.thisGroup().name()\nnuke.menu('Nuke').removeItem(thisNAME)"} addUserKnob {26 title_hotkey l "Define Hotkey"} addUserKnob {1 hk_cr_tgt l "Create Target Set"} hk_cr_tgt ";" addUserKnob {1 hk_rm_tgt l "Remove Target Set"} hk_rm_tgt "shift+;" addUserKnob {1 hk_cr_srcUI l "Create Source Set"} hk_cr_srcUI ' addUserKnob {1 hk_rm_srcUI l "Remove Source Set"} hk_rm_srcUI shift+' addUserKnob {1 hk_snap l "Snap Source to Target"} hk_snap alt+n addUserKnob {1 hk_deselect_all l "Deselect All"} hk_deselect_all "\\" addUserKnob {1 hk_deform l Deform} hk_deform "\[" addUserKnob {1 hk_reset_d l "Reset Deform"} hk_reset_d "]" addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.5} addUserKnob {26 l_DATE l "Date Modified" T 2021-03-26} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.5
    - compatible python3
    - fix broken function by missing knob on 'live_update'
    - default Snap hotkeys set to 'alt+n'
    - minor fix
    - 'use card deform' uncheck by default

    1.4
    - fix the error message on 
      first time run 'Create Target Set'
      when there has no target input.
    - update warning message
      for 'Create Menu'

    1.3
    - added the function onCreate,
      when open a script already deform
      live update will still function.

    1.2
    - added card deform option,
      can get smooth shape of
      deform with tangent.
    - optimize the tool.
    - added tooltips.
    - layout of panel change.
    - bug fix.

    1.1
    - rework entire tool workflow
      to have better ui and ux\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -2060 ypos -208 bdwidth 1011 bdheight 247 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x4c4c4cff label bin note_font_size 42 xpos -2055 ypos 108 bdwidth 281 bdheight 213 } Input { inputs 0 name target xpos -370 ypos -96 } Dot { name Dot2 xpos -336 ypos 103 } Input { inputs 0 name source xpos -526 ypos -94 number 1 } Dot { name Dot1 xpos -492 } set N5c8f2c00 [stack 0] EditGeo { translate {1.379999995 0.7799999714 1.700000167} name EditGeo_deform xpos -526 ypos 74 disable true } Scene { inputs 2 name oScene xpos -516 ypos 182 } Output { name Output1 xpos -526 ypos 345 } push $N5c8f2c00 PythonGeo { name pgeoSGet xpos -654 ypos -3 } NoOp { inputs 0 name targetView3d onCreate "\nfor knob in nuke.thisNode().knobs() :\n try :\n if knob.split('_')\[3] == 'panelDropped' :\n nuke.thisNode().removeKnob(nuke.thisNode()\[knob])\n except :\n pass\n" knobChanged "\nthisGRP = nuke.thisGroup()\ngetColor = thisGRP\['tgt_gl_color'].getValue()\ncolorConvert = '0x%02x%02x%02x%02x' % (getColor\[0]*255 , getColor\[1]*255, getColor\[2]*255, 255)\ntry :\n axGRP = nuke.toNode('t')\n axGRP.begin()\n for node in nuke.allNodes() :\n if node.Class()\[0:4] == 'Axis' :\n node\['gl_color'].fromScript(colorConvert)\n axGRP.end()\nexcept :\n pass\nfor knob in nuke.thisNode().knobs() :\n try :\n if knob.split('_')\[3] == 'panelDropped' :\n nuke.thisNode().removeKnob(nuke.thisNode()\[knob])\n except :\n pass\n" xpos -1870 ypos -86 addUserKnob {20 User} addUserKnob {18 tgt_gl_color l "Target Display Color" t "Display color of the target set in 3D view. Update in real-time."} tgt_gl_color {0.1999998093 0 1} } NoOp { inputs 0 name menu04 knobChanged "\nif nuke.thisGroup().input(1).Class() == 'Card2' and nuke.thisGroup()\['deform_status'].getValue() == 1 :\n subdUpdate(nuke.thisGroup(), nuke.thisGroup().input(1))\n" xpos -1445 ypos -86 addUserKnob {20 User} addUserKnob {3 rows l rows/columns t "Increase subdivsion will smooth the geo with curvature shape. The value is applied between each control point. For example, if control points is 3x3, row set to 10. The entire geo subdivision in row will be 30 in total.\n\nThis value will update in real-time after deformed. It will take the control of the source geo, but not adding any custom function."} rows 10 addUserKnob {3 columns l "" t "Increase subdivsion will smooth the geo with curvature shape. The value is applied between each control point. For example, if control points is 3x3, columns set to 10. The entire geo subdivision in columns will be 30 in total.\n\nThis value will update in real-time after deformed. It will take the control of the source geo, but not adding any custom function." -STARTLINE} columns 10 } NoOp { inputs 0 name menu05 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['anim_type_tangent'].getValue() == 0 :\n thisGRP\['ref_frame'].setEnabled(False)\nelse :\n thisGRP\['ref_frame'].setEnabled(True)\n" xpos -1339 ypos -88 addUserKnob {20 User} addUserKnob {4 anim_type_tangent l "anim type" t "Anim type of tangent will ONLY apply on deform with animation .\n\ndynamic\nCalculate every tangent angle and length on every frame.\n\nstatic\nOnly apply the tangent angle and length from the reference frame set in this tool.\n\nWhen the type set to static, reference frame knob will be enable.\n\nThis knob will not trigger 'live update' due to static option require within frame range." M {dynamic static "" "" "" "" "" ""}} } NoOp { inputs 0 name sourceView3d onCreate "\nfor knob in nuke.thisNode().knobs() :\n try :\n if knob.split('_')\[3] == 'panelDropped' :\n nuke.thisNode().removeKnob(nuke.thisNode()\[knob])\n except :\n pass\n" knobChanged "\nthisGRP = nuke.thisGroup()\ngetColor = thisGRP\['src_gl_color'].getValue()\ncolorConvert = '0x%02x%02x%02x%02x' % (getColor\[0]*255 , getColor\[1]*255, getColor\[2]*255, 255)\ntry :\n axGRP = nuke.toNode('s')\n axGRP.begin()\n for node in nuke.allNodes() :\n if node.Class()\[0:4] == 'Axis' :\n node\['gl_color'].fromScript(colorConvert)\n axGRP.end()\nexcept :\n pass\nfor knob in nuke.thisNode().knobs() :\n try :\n if knob.split('_')\[3] == 'panelDropped' :\n nuke.thisNode().removeKnob(nuke.thisNode()\[knob])\n except :\n pass\n" xpos -1981 ypos -86 addUserKnob {20 User} addUserKnob {18 src_gl_color l "Source Display Color" t "Display color of the source set in 3D view. Update in real-time."} src_gl_color {1 0.6000000238 0} } NoOp { inputs 0 name menu01 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['frame_range'].getValue() == 0 :\n thisGRP\['firstFR'].setEnabled(False)\n thisGRP\['lastFR'].setEnabled(False)\nelse :\n thisGRP\['firstFR'].setEnabled(True)\n thisGRP\['lastFR'].setEnabled(True)\n" xpos -1760 ypos -86 addUserKnob {20 User} addUserKnob {4 frame_range l "frame range" M {"project setting" custom}} } NoOp { inputs 0 name menu03 knobChanged "\nif nuke.thisGroup().input(1).Class() == 'Card2' and nuke.thisGroup()\['deform_status'].getValue(1) and nuke.thisGroup()\['live_update'].getValue() == 1 :\n cardCenter( nuke.thisGroup(), nuke.thisGroup().input(1))\n" xpos -1554 ypos -86 addUserKnob {20 User} addUserKnob {7 t1angle l "tangent +x" t "When place the card at origin (0,0,0) , this tangent is control the angle of +x vector direction.\n\n0 is no any tangent angle\n1 is the smoothness angle\n\nValue can be negative or any above 1."} t1angle 1 addUserKnob {7 t1scale l scale t "When place the card at origin (0,0,0) , this tangent is control the scale of +x vector direction.\n\n1 is the normal length of the tangent." -STARTLINE} t1scale 1 addUserKnob {7 t2angle l "tangent -x" t "When place the card at origin (0,0,0) , this tangent is control the angle of -x vector direction.\n\n0 is no any tangent angle\n1 is the smoothness angle\n\nValue can be negative or any above 1."} t2angle 1 addUserKnob {7 t2scale l scale t "When place the card at origin (0,0,0) , this tangent is control the scale of -x vector direction.\n\n1 is the normal length of the tangent." -STARTLINE} t2scale 1 addUserKnob {7 t3angle l "tangent +y" t "When place the card at origin (0,0,0) , this tangent is control the angle of +y vector direction.\n\n0 is no any tangent angle\n1 is the smoothness angle\n\nValue can be negative or any above 1."} t3angle 1 addUserKnob {7 t3scale l scale t "When place the card at origin (0,0,0) , this tangent is control the scale of +y vector direction.\n\n1 is the normal length of the tangent." -STARTLINE} t3scale 1 addUserKnob {7 t4angle l "tangent -y" t "When place the card at origin (0,0,0) , this tangent is control the angle of -y vector direction.\n\n0 is no any tangent angle\n1 is the smoothness angle\n\nValue can be negative or any above 1."} t4angle 1 addUserKnob {7 t4scale l scale t "When place the card at origin (0,0,0) , this tangent is control the scale of -y vector direction.\n\n1 is the normal length of the tangent." -STARTLINE} t4scale 1 addUserKnob {7 edge_tangent l "edge tangent" t "Tangent on the edge can be have a separate value.\n\nIf value = 0 :\nTangent on the edge will not separate than the other. It will take the control from tangent +x/-x/+y/-y\n\nif the value above 0 :\nTangent on the edge will take the value from this knob.\n\nIf want to separate the tangent on the edge but don't want to smooth the geo. User can put 0.01 value to get this work."} edge_tangent 0.01 } NoOp { inputs 0 name menu02 xpos -1660 ypos -87 addUserKnob {20 User} addUserKnob {6 live_update l "live update" t "If this knob checked, the tangent value change will update in real-time. Please note that the function works great with static deform. For animated deform, it might take some time to re-calculate every changes.\n\nRecommend :\nTurn this on when looking at reference frame with animation off. Once the deform shape is good, turn this off and deform with animation on again to speed up the process." +STARTLINE} } ModifyMetaData { inputs 0 name dataset xpos -2020 ypos 230 addUserKnob {20 User} addUserKnob {43 raw_cdd l "raw CDD"} } NoOp { inputs 0 name store xpos -1905 ypos 231 addUserKnob {20 User} addUserKnob {1 filter3DNodes} filter3DNodes Axis,Axis2,Axis3,Card,Card2,Cube,Cylinder,Sphere,ReadGeo,ReadGeo2,Light,Light2,Light3,DirectLight,Spotlight,Environment,TransformGeo,EditGeo,Camera,Camera2 addUserKnob {22 fn T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t\tggLevel = nuke.root()\n\telse :\n\t\t\tnodePath = nuke.thisNode().fullName().split('.')\n\t\t\tnodePath.pop()\n\t\t\tggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\n#######################################################\n\ndef pgVertexPack(pgNode) :\n\tpygeoNODE = pgNode\n\tvertexKeys = \[]\n\tvertexValues = \[]\n\n\tfor i in pygeoNODE\['geo'].getGeometry()\[0].primitives() :\n\t\tfor h in range (0, len(i)) :\n\t\t\tif vertexKeys.count(i\[h]) == 0 :\n\t\t\t\tvertexKeys.append(i\[h])\n\n\tfor i in range\t(0, int(len(pygeoNODE\['geo'].getGeometry()\[0].points())/3)) :\n\t\tvertexValues.append(pygeoNODE\['geo'].getGeometry()\[0].points()\[3*i:3*(i+1)])\n\n\treturn dict(zip(vertexKeys, vertexValues))\n\n#######################################################\n\ndef getData(metaNODE) :\n\timport re\n\ttempKeep = re.split('\{set|\}| |\\n',metaNODE\['metadata'].toScript())\n\ttempKeep2 = \[]\n\tfor i in range (0, len(tempKeep), 1) :\n\t\tif len(tempKeep\[i]) != 0 :\n\t\t\ttempKeep2.append(tempKeep\[i])\n\n\tdataset = \{\}\n\tfor i in range (0, int(len(tempKeep2)/2)) :\n\t\tdataset\[tempKeep2\[2*i]] = tempKeep2\[(2*i)+1]\n\treturn dataset\n\n#######################################################\n\ndef getCTRLPTS(cdd) :\n\timport re\n\ttempData01 = re.split('\{|\}|\\\\n| ', cdd)\[6:]\n\ttempData02 = \[]\n\tfor i in tempData01 :\n\t\t\tif len(i) != 0 :\n\t\t\t\t\ttempData02.append(float(i))\n\tdel tempData01\n\n\ttempData01 = \[]\n\tfor i in range (0, len(tempData02)) :\n\t\tif i%24 > 0 and i%24 < 4 :\n\t\t\ttempData01.append(tempData02\[i])\n\n\tdel tempData02\n\n\tcpt = \[]\n\tfor i in range (0, int(len(tempData01)/3) ) :\n\t\tcpt.append(tempData01\[i*3:(i*3)+3])\n\n\treturn cpt\n\n#######################################################\n\ndef axLock(tgtNODE, mode) :\n\t#thisNODE = nuke.thisNode()\n\tthisNAME = tgtNODE.fullName()\n\tgrpPath = '.'.join(thisNAME.split('.')\[:-1])\n\tif mode :\n\t\tpos = tgtNODE\['origin'].getValue()\n\tgrpNODE = nuke.toNode(grpPath)\n\tgrpNODE.begin()\n\tfor node in nuke.allNodes() :\n\t\tif node.fullName() != thisNAME :\n\t\t\tnode\['selected'].setValue(0)\n\t\t\tif mode :\n\t\t\t\ttgtNODE\['translate'].setValue(pos)\n\tgrpNODE.end()\n\n#######################################################\n\ndef createSRCset(vdata, mtx, getColorNode) :\n\tsrcGRP = nuke.nodes.Group(name='s')\n\tgetColor = getColorNode\['src_gl_color'].getValue()\n\n\tdeform = nuke.toNode('EditGeo_deform')\n\toScene = nuke.toNode('oScene')\n\n\tsrcGRP.begin()\n\tsrcSC = nuke.nodes.Scene()\n\tsrcOUT = nuke.nodes.Output()\n\tsrcOUT.setInput(0, srcSC)\n\n\tfor key in vdata :\n\t\tsrcAX = nuke.nodes.Axis(name='y' + str(key))\n\t\tsrcAX.addKnob(nuke.XYZ_Knob('origin'))\n\t\tsrcAX\['translate'].setValue((vdata\[key]\[0]*mtx\[0]+vdata\[key]\[1]*mtx\[1]+vdata\[key]\[2]*mtx\[2])+mtx\[3], 0)\n\t\tsrcAX\['translate'].setValue((vdata\[key]\[0]*mtx\[4]+vdata\[key]\[1]*mtx\[5]+vdata\[key]\[2]*mtx\[6])+mtx\[7], 1)\n\t\tsrcAX\['translate'].setValue((vdata\[key]\[0]*mtx\[8]+vdata\[key]\[1]*mtx\[9]+vdata\[key]\[2]*mtx\[10])+mtx\[11], 2)\n\t\tsrcAX\['origin'].setValue((vdata\[key]\[0]*mtx\[0]+vdata\[key]\[1]*mtx\[1]+vdata\[key]\[2]*mtx\[2])+mtx\[3], 0)\n\t\tsrcAX\['origin'].setValue((vdata\[key]\[0]*mtx\[4]+vdata\[key]\[1]*mtx\[5]+vdata\[key]\[2]*mtx\[6])+mtx\[7], 1)\n\t\tsrcAX\['origin'].setValue((vdata\[key]\[0]*mtx\[8]+vdata\[key]\[1]*mtx\[9]+vdata\[key]\[2]*mtx\[10])+mtx\[11], 2)\n\t\tsrcAX\['scaling'].setExpression('parent.parent.src_scale')\n\t\tsrcAX\['gl_color'].fromScript('0x%02x%02x%02x%02x' % ( int(getColor\[0]*255) , int(getColor\[1]*255) , int(getColor\[2]*255) , int(255) ) )\n\t\tsrcAX\['knobChanged'].setValue('axLock(nuke.thisNode(), 0)')\n\t\tsrcSC.setInput(key, srcAX)\n\tsrcGRP.end()\n\n\tdel mtx\n\n\toScene.setInput(2, srcGRP)\n\n\tdkeys = \[]\n\tdvalues = \[] \n\n\tfor key in vdata :\n\t\tdkeys.append(str(key))\n\t\tfor i in range (0, 3) :\n\t\t\tdvalues.append(str(0.0))\n\n\tdeform\['keys'].fromScript('\{' + ' '.join(dkeys) + '\}')\n\tdeform\['values'].fromScript('\{' + ' '.join(dvalues) + '\}')\n\n#######################################################\n\ndef sssAngle(vec1, vec2, vec3) :\n\timport math\n\t### get 3 sides length ###\n\tlA = math.sqrt( math.pow(vec3\[0] - vec1\[0], 2) + math.pow(vec3\[1] - vec1\[1], 2) + math.pow(vec3\[2] - vec1\[2], 2) )\n\tlB = math.sqrt( math.pow(vec2\[0] - vec1\[0], 2) + math.pow(vec2\[1] - vec1\[1], 2) + math.pow(vec2\[2] - vec1\[2], 2) )\n\tlC = math.sqrt( math.pow(vec2\[0] - vec3\[0], 2) + math.pow(vec2\[1] - vec3\[1], 2) + math.pow(vec2\[2] - vec3\[2], 2) )\n\n\ttry :\n\t\toutput = math.degrees( math.acos( ( math.pow(lA,2) + math.pow(lB,2) - math.pow(lC,2) ) / (2 * lA * lB) ) )\n\texcept ValueError :\n\t\toutput = 0\n\n\treturn output\n\n#######################################################\n\ndef modPRot(tri) :\n\timport math\n\ta = tri\[1] - tri\[0] \n\tb = tri\[2] - tri\[0] \n\t\n\tu = nuke.math.Vector3(a) \n\tu.normalize() \n\tw = a.cross(b) \n\tw.normalize() \n\tv = w.cross(u)\n\n\tbias = 0.01\n\n\tm = ( (u\[0], v\[0], w\[0]), (u\[1], v\[1], w\[1]), (u\[2], v\[2], w\[2]) ) \n\tif abs(m\[1]\[2]) > 1-bias and abs(m\[1]\[2]) < 1+bias :\n\t\try = 0.0 \n\t\trx = (math.pi / 2.0) * -m\[1]\[2] \n\t\trz = math.atan2(-m\[0]\[1], m\[0]\[0])\t\t\t\n\telse: \n\t\tcosx = math.sqrt(m\[0]\[2] ** 2 + m\[2]\[2] ** 2) \n\t\tif cosx == 0: \n\t\t\tcosx = 1.0 \n\t\trx = math.atan2(-m\[1]\[2], cosx) \n\t\trz = math.atan2(m\[1]\[0] / cosx, m\[1]\[1] / cosx) \n\t\try = math.atan2(m\[0]\[2] / cosx, m\[2]\[2] / cosx)\n\n\treturn nuke.math.Vector3(rx, ry, rz) \n\n#######################################################\n\ndef tvar(vec1, vec2, vec3, calangle, tangle, tscale) :\n\timport math\n\ttangentLength = vec1.distanceBetween(vec2)/3 * tscale\n\trot = \[ math.degrees(modPRot((vec1, vec2, vec3))\[0]), math.degrees(modPRot((vec1, vec2, vec3))\[1]), math.degrees(modPRot((vec1, vec2, vec3))\[2]) + (calangle*-tangle) ]\n\n\treturn \[ tangentLength * ( math.cos(math.radians(rot\[1])) * math.cos(math.radians(rot\[2])) + math.sin(math.radians(rot\[1])) * math.sin(math.radians(rot\[0])) * math.sin(math.radians(rot\[2])) ), tangentLength * ( math.cos(math.radians(rot\[0])) * math.sin(math.radians(rot\[2])) ), tangentLength * ( -math.sin(math.radians(rot\[1])) * math.cos(math.radians(rot\[2])) + math.cos(math.radians(rot\[1])) * math.sin(math.radians(rot\[0])) * math.sin(math.radians(rot\[2])) ) ]\n\n#######################################################\n\ndef cardCenter(getNode, srcNode) :\n\ttry :\n\t\tdatasetNODE = nuke.toNode('dataset')\n\n\t\twSub = int(datasetNODE\['raw_cdd'].getValue().split(' ')\[2])\n\t\thSub = int(datasetNODE\['raw_cdd'].getValue().split(' ')\[1])\n\t\ttotalcpts = wSub*hSub\n\n\t\tif wSub <= 2 or hSub <= 2 :\n\t\t\tnuke.message('Please set deform points at least 3x3.')\n\t\telse :\n\t\t\tsrcNode\['useMatrix'].setValue(0)\n\t\t\tsrcMTX = srcNode\['matrix'].getValue()\n\t\t\tsrcNode\['useMatrix'].setValue(1)\n\t\t\tsrcNode\['matrix'].setValue(\[1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0])\n\t\t\t\n\t\t\timport re\n\t\t\traw_cdd = re.split( '\{|\}', datasetNODE\['raw_cdd'].toScript() )\n\n\t\t\tFRsetting = getNode\['frame_range'].getValue()\n\n\t\t\tif FRsetting == 1 :\n\t\t\t\tframeST = int(getNode\['firstFR'].getValue())\n\t\t\t\tframeED = int(getNode\['lastFR'].getValue())\n\t\t\telse :\n\t\t\t\tframeST = nuke.root().firstFrame()\n\t\t\t\tframeED = nuke.root().lastFrame()\n\n\t\t\twAnim = getNode\['deform_anim'].getValue()\n\n\t\t\tmd = getData(getNode)\n\t\t\tmetaNum = \[]\n\t\t\tfor key in md :\n\t\t\t\tmetaNum.append( int(key\[3:]) )\n\n\t\t\t##########################################\n\n\t\t\tcptsData = \{\n\t\t\t\t'newPosX': \[], \n\t\t\t\t'newPosY': \[], \n\t\t\t\t'newPosZ': \[], \n\t\t\t\t't1X': \[], \n\t\t\t\t't1Y': \[], \n\t\t\t\t't1Z': \[], \n\t\t\t\t't2X': \[], \n\t\t\t\t't2Y': \[], \n\t\t\t\t't2Z': \[], \n\t\t\t\t't3X': \[], \n\t\t\t\t't3Y': \[], \n\t\t\t\t't3Z': \[], \n\t\t\t\t't4X': \[], \n\t\t\t\t't4Y': \[], \n\t\t\t\t't4Z': \[], \n\t\t\t\t'uvX': \[], \n\t\t\t\t'uvY': \[], \n\t\t\t\t'uvZ': \[],\n\t\t\t\t\}\n\n\t\t\tif wAnim == 0 :\n\t\t\t\tfor i in range(totalcpts) :\n\t\t\t\t\tif metaNum.count(i) == 1 :\n\t\t\t\t\t\tcptsData\['newPosX'].append(str(nuke.toNode(md\['s.y'+str(i)])\['translate'].getValue()\[0]))\n\t\t\t\t\t\tcptsData\['newPosY'].append(str(nuke.toNode(md\['s.y'+str(i)])\['translate'].getValue()\[1]))\n\t\t\t\t\t\tcptsData\['newPosZ'].append(str(nuke.toNode(md\['s.y'+str(i)])\['translate'].getValue()\[2]))\n\t\t\t\t\telse :\n\t\t\t\t\t\tcptsData\['newPosX'].append(str((float(raw_cdd\[1::12]\[i].split(' ')\[0])*srcMTX\[0] + float(raw_cdd\[1::12]\[i].split(' ')\[1])*srcMTX\[1] + float(raw_cdd\[1::12]\[i].split(' ')\[2])*srcMTX\[2])+srcMTX\[3]))\n\t\t\t\t\t\tcptsData\['newPosY'].append(str((float(raw_cdd\[1::12]\[i].split(' ')\[0])*srcMTX\[4] + float(raw_cdd\[1::12]\[i].split(' ')\[1])*srcMTX\[5] + float(raw_cdd\[1::12]\[i].split(' ')\[2])*srcMTX\[6])+srcMTX\[7]))\n\t\t\t\t\t\tcptsData\['newPosZ'].append(str((float(raw_cdd\[1::12]\[i].split(' ')\[0])*srcMTX\[8] + float(raw_cdd\[1::12]\[i].split(' ')\[1])*srcMTX\[9] + float(raw_cdd\[1::12]\[i].split(' ')\[2])*srcMTX\[10])+srcMTX\[11]))\n\t\t\n\t\t\t\tfor i in range(totalcpts) :\n\t\t\t\t\tvec1 = nuke.math.Vector3()\n\t\t\t\t\tvec2 = nuke.math.Vector3()\n\t\t\t\t\tvec3 = nuke.math.Vector3()\n\n\t\t\t\t### t1 ###\n\n\t\t\t\t\tvec1.set( float(cptsData\['newPosX']\[i]), float(cptsData\['newPosY']\[i]), float(cptsData\['newPosZ']\[i]) )\n\n\t\t\t\t\tif i%wSub != wSub-1 :\n\t\t\t\t\t\tvec2.set( float(cptsData\['newPosX']\[i+1]), float(cptsData\['newPosY']\[i+1]), float(cptsData\['newPosZ']\[i+1]) )\n\t\t\t\t\t\t\n\t\t\t\t\t\tif i%wSub == 0 :\n\t\t\t\t\t\t\tvec3.set( float(cptsData\['newPosX']\[i+2]), float(cptsData\['newPosY']\[i+2]), float(cptsData\['newPosZ']\[i+2]) )\n\t\t\t\t\t\t\tif getNode\['edge_tangent'].getValue() == 0 :\n\t\t\t\t\t\t\t\tangle = 45\n\t\t\t\t\t\t\telse :\n\t\t\t\t\t\t\t\tangle = 45 * getNode\['edge_tangent'].getValue()\n\t\t\t\t\t\telse :\n\t\t\t\t\t\t\tvec3.set( float(cptsData\['newPosX']\[i-1]), float(cptsData\['newPosY']\[i-1]), float(cptsData\['newPosZ']\[i-1]) )\n\t\t\t\t\t\t\tangle = sssAngle(vec2, vec3, vec1)\n\n\t\t\t\t\t\tcptsData\['t1X'].append( str( tvar(vec1, vec2, vec3, angle, getNode\['t1angle'].getValue(), getNode\['t1scale'].getValue())\[0] ) )\n\t\t\t\t\t\tcptsData\['t1Y'].append( str( tvar(vec1, vec2, vec3, angle, getNode\['t1angle'].getValue(), getNode\['t1scale'].getValue())\[1] ) )\n\t\t\t\t\t\tcptsData\['t1Z'].append( str( tvar(vec1, vec2, vec3, angle, getNode\['t1angle'].getValue(), getNode\['t1scale'].getValue())\[2] ) )\n\t\t\t\t\telse :\n\t\t\t\t\t\tcptsData\['t1X'].append('0')\n\t\t\t\t\t\tcptsData\['t1Y'].append('0')\n\t\t\t\t\t\tcptsData\['t1Z'].append('0')\n\n\t\t\t\t### t2 ###\n\n\t\t\t\t\tif i%wSub != 0 :\n\t\t\t\t\t\tvec2.set( float(cptsData\['newPosX']\[i-1]), float(cptsData\['newPosY']\[i-1]), float(cptsData\['newPosZ']\[i-1]) )\n\t\t\t\t\t\t\n\t\t\t\t\t\tif i%wSub == wSub-1 :\n\t\t\t\t\t\t\tvec3.set( float(cptsData\['newPosX']\[i-2]), float(cptsData\['newPosY']\[i-2]), float(cptsData\['newPosZ']\[i-2]) )\n\t\t\t\t\t\t\tif getNode\['edge_tangent'].getValue() == 0 :\n\t\t\t\t\t\t\t\tangle = 45\n\t\t\t\t\t\t\telse :\n\t\t\t\t\t\t\t\tangle = 45 * getNode\['edge_tangent'].getValue()\n\t\t\t\t\t\telse :\n\t\t\t\t\t\t\tvec3.set( float(cptsData\['newPosX']\[i+1]), float(cptsData\['newPosY']\[i+1]), float(cptsData\['newPosZ']\[i+1]) )\n\t\t\t\t\t\t\tangle = sssAngle(vec2, vec3, vec1)\n\n\t\t\t\t\t\tcptsData\['t2X'].append( str( tvar(vec1, vec2, vec3, angle, getNode\['t2angle'].getValue(), getNode\['t2scale'].getValue())\[0] ) )\n\t\t\t\t\t\tcptsData\['t2Y'].append( str( tvar(vec1, vec2, vec3, angle, getNode\['t2angle'].getValue(), getNode\['t2scale'].getValue())\[1] ) )\n\t\t\t\t\t\tcptsData\['t2Z'].append( str( tvar(vec1, vec2, vec3, angle, getNode\['t2angle'].getValue(), getNode\['t2scale'].getValue())\[2] ) )\n\t\t\t\t\telse :\n\t\t\t\t\t\tcptsData\['t2X'].append('0')\n\t\t\t\t\t\tcptsData\['t2Y'].append('0')\n\t\t\t\t\t\tcptsData\['t2Z'].append('0')\n\n\t\t\t\t### t3 ###\n\n\t\t\t\t\tif i < totalcpts-wSub :\n\t\t\t\t\t\tvec2.set( float(cptsData\['newPosX']\[i+wSub]), float(cptsData\['newPosY']\[i+wSub]), float(cptsData\['newPosZ']\[i+wSub]) )\n\t\t\t\t\t\t\n\t\t\t\t\t\tif i < wSub :\n\t\t\t\t\t\t\tvec3.set( float(cptsData\['newPosX']\[i+wSub*2]), float(cptsData\['newPosY']\[i+wSub*2]), float(cptsData\['newPosZ']\[i+wSub*2]) )\n\t\t\t\t\t\t\tif getNode\['edge_tangent'].getValue() == 0 :\n\t\t\t\t\t\t\t\tangle = 45\n\t\t\t\t\t\t\telse :\n\t\t\t\t\t\t\t\tangle = 45 * getNode\['edge_tangent'].getValue()\n\t\t\t\t\t\telse :\n\t\t\t\t\t\t\tvec3.set( float(cptsData\['newPosX']\[i-wSub]), float(cptsData\['newPosY']\[i-wSub]), float(cptsData\['newPosZ']\[i-wSub]) )\n\t\t\t\t\t\t\tangle = sssAngle(vec2, vec3, vec1)\n\n\t\t\t\t\t\tcptsData\['t3X'].append( str( tvar(vec1, vec2, vec3, angle, getNode\['t3angle'].getValue(), getNode\['t3scale'].getValue())\[0] ) )\n\t\t\t\t\t\tcptsData\['t3Y'].append( str( tvar(vec1, vec2, vec3, angle, getNode\['t3angle'].getValue(), getNode\['t3scale'].getValue())\[1] ) )\n\t\t\t\t\t\tcptsData\['t3Z'].append( str( tvar(vec1, vec2, vec3, angle, getNode\['t3angle'].getValue(), getNode\['t3scale'].getValue())\[2] ) )\n\t\t\t\t\telse :\n\t\t\t\t\t\tcptsData\['t3X'].append('0')\n\t\t\t\t\t\tcptsData\['t3Y'].append('0')\n\t\t\t\t\t\tcptsData\['t3Z'].append('0')\n\n\t\t\t\t### t4 ###\n\n\t\t\t\t\tif i >= wSub :\n\t\t\t\t\t\tvec2.set( float(cptsData\['newPosX']\[i-wSub]), float(cptsData\['newPosY']\[i-wSub]), float(cptsData\['newPosZ']\[i-wSub]) )\n\t\t\t\t\t\t\n\t\t\t\t\t\tif i >= totalcpts-wSub :\n\t\t\t\t\t\t\tvec3.set( float(cptsData\['newPosX']\[i-wSub*2]), float(cptsData\['newPosY']\[i-wSub*2]), float(cptsData\['newPosZ']\[i-wSub*2]) )\n\t\t\t\t\t\t\tif getNode\['edge_tangent'].getValue() == 0 :\n\t\t\t\t\t\t\t\tangle = 45\n\t\t\t\t\t\t\telse :\n\t\t\t\t\t\t\t\tangle = 45 * getNode\['edge_tangent'].getValue()\n\t\t\t\t\t\telse :\n\t\t\t\t\t\t\tvec3.set( float(cptsData\['newPosX']\[i+wSub]), float(cptsData\['newPosY']\[i+wSub]), float(cptsData\['newPosZ']\[i+wSub]) )\n\t\t\t\t\t\t\tangle = sssAngle(vec2, vec3, vec1)\n\n\t\t\t\t\t\tcptsData\['t4X'].append( str( tvar(vec1, vec2, vec3, angle, getNode\['t4angle'].getValue(), getNode\['t4scale'].getValue())\[0] ) )\n\t\t\t\t\t\tcptsData\['t4Y'].append( str( tvar(vec1, vec2, vec3, angle, getNode\['t4angle'].getValue(), getNode\['t4scale'].getValue())\[1] ) )\n\t\t\t\t\t\tcptsData\['t4Z'].append( str( tvar(vec1, vec2, vec3, angle, getNode\['t4angle'].getValue(), getNode\['t4scale'].getValue())\[2] ) )\n\t\t\t\t\telse :\n\t\t\t\t\t\tcptsData\['t4X'].append('0')\n\t\t\t\t\t\tcptsData\['t4Y'].append('0')\n\t\t\t\t\t\tcptsData\['t4Z'].append('0')\n\n\t\t\t\t### UV ###\t\n\n\t\t\t\tfor i in range (0, int(len(raw_cdd)/12) ) :\n\t\t\t\t\tcptsData\['uvX'].append(str(raw_cdd\[(i*12)+11].split(' ')\[0]) )\n\t\t\t\t\tcptsData\['uvY'].append(str(raw_cdd\[(i*12)+11].split(' ')\[1]) )\n\t\t\t\t\tcptsData\['uvZ'].append(str(raw_cdd\[(i*12)+11].split(' ')\[2]) )\n\n\t\t\t\t##########################################\n\t\t\n\t\t\t\tposData = \['1 \{' + cptsData\['newPosX']\[i] + ' ' + cptsData\['newPosY']\[i] + ' ' + cptsData\['newPosZ']\[i] + '\} 1 \{' + cptsData\['t1X']\[i] + ' ' + cptsData\['t1Y']\[i] + ' ' + cptsData\['t1Z']\[i] + '\} 1 \{' + cptsData\['t2X']\[i] + ' ' + cptsData\['t2Y']\[i] + ' ' + cptsData\['t2Z']\[i] + '\} 1 \{' + cptsData\['t3X']\[i] + ' ' + cptsData\['t3Y']\[i] + ' ' + cptsData\['t3Z']\[i] + '\} 1 \{' + cptsData\['t4X']\[i] + ' ' + cptsData\['t4Y']\[i] + ' ' + cptsData\['t4Z']\[i] + '\} 0 \{' + cptsData\['uvX']\[i] + ' ' + cptsData\['uvY']\[i] + ' ' + cptsData\['uvZ']\[i] + '\}' for i in range(totalcpts)]\n\t\t\t\tposData.insert(0, str(datasetNODE\['raw_cdd'].getValue().split(' ')\[0]) + ' ' + str(datasetNODE\['raw_cdd'].getValue().split(' ')\[1]) + ' ' + str(datasetNODE\['raw_cdd'].getValue().split(' ')\[2]) + ' ' +str(datasetNODE\['raw_cdd'].getValue().split(' ')\[3]) + '\\n')\n\n\t\t\t\tsrcNode\['control_points'].fromScript( '\\n'.join(posData) )\n\t\t\t\tsrcNode\['label'].setValue('Deform by Origami')\n\t\t\t\tsrcNode\['tile_color'].fromScript(getNode\['tile_color'].toScript())\n\n\t\t\t\tdel cptsData, vec1, vec2, vec3, angle, posData\n\n\t\t\telse :\n\n\t\t\t\tprogBar = nuke.ProgressTask('Calculating')\n\t\t\t\tjobCount = 0\n\t\t\t\tjobTotal = (frameED-frameST) + 1\n\n\t\t\t\tfor time in range (int(frameST), int(frameED+1), 1) :\n\n\t\t\t\t\t### progress bar\n\t\t\t\t\tjobCount += 1\n\t\t\t\t\tprogShow = int(jobCount/jobTotal * 100)\n\t\t\t\t\tif progBar.isCancelled() :\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tprogBar.setProgress(progShow)\n\t\t\t\t\t#################\n\n\t\t\t\t\ttRange = (totalcpts*(time-frameST))\n\n\t\t\t\t\tfor i in range(totalcpts) :\n\t\t\t\t\t\tif metaNum.count(i) == 1 : \n\t\t\t\t\t\t\tcptsData\['newPosX'].append('x' + str(time) + ' ' + str(nuke.toNode(md\['s.y'+str(i)])\['translate'].getValueAt(time)\[0]))\n\t\t\t\t\t\t\tcptsData\['newPosY'].append('x' + str(time) + ' ' + str(nuke.toNode(md\['s.y'+str(i)])\['translate'].getValueAt(time)\[1]))\n\t\t\t\t\t\t\tcptsData\['newPosZ'].append('x' + str(time) + ' ' + str(nuke.toNode(md\['s.y'+str(i)])\['translate'].getValueAt(time)\[2]))\n\t\t\t\t\t\telse :\n\t\t\t\t\t\t\tcptsData\['newPosX'].append('x' + str(time) + ' ' + str((float(raw_cdd\[1::12]\[i].split(' ')\[0])*srcMTX\[0] + float(raw_cdd\[1::12]\[i].split(' ')\[1])*srcMTX\[1] + float(raw_cdd\[1::12]\[i].split(' ')\[2])*srcMTX\[2])+srcMTX\[3]))\n\t\t\t\t\t\t\tcptsData\['newPosY'].append('x' + str(time) + ' ' + str((float(raw_cdd\[1::12]\[i].split(' ')\[0])*srcMTX\[4] + float(raw_cdd\[1::12]\[i].split(' ')\[1])*srcMTX\[5] + float(raw_cdd\[1::12]\[i].split(' ')\[2])*srcMTX\[6])+srcMTX\[7]))\n\t\t\t\t\t\t\tcptsData\['newPosZ'].append('x' + str(time) + ' ' + str((float(raw_cdd\[1::12]\[i].split(' ')\[0])*srcMTX\[8] + float(raw_cdd\[1::12]\[i].split(' ')\[1])*srcMTX\[9] + float(raw_cdd\[1::12]\[i].split(' ')\[2])*srcMTX\[10])+srcMTX\[11]))\n\n\t\t\t\t\tfor i in range(totalcpts) :\n\t\t\t\t\t\tvec1 = nuke.math.Vector3()\n\t\t\t\t\t\tvec2 = nuke.math.Vector3()\n\t\t\t\t\t\tvec3 = nuke.math.Vector3()\n\n\t\t\t\t\t### t1 ###\n\n\t\t\t\t\t\tvec1.set( float(cptsData\['newPosX']\[i+tRange].split(' ')\[1]), float(cptsData\['newPosY']\[i+tRange].split(' ')\[1]), float(cptsData\['newPosZ']\[i+tRange].split(' ')\[1]) )\n\n\t\t\t\t\t\tif i%wSub != wSub-1 :\n\t\t\t\t\t\t\tvec2.set( float(cptsData\['newPosX']\[i+tRange+1].split(' ')\[1]), float(cptsData\['newPosY']\[i+tRange+1].split(' ')\[1]), float(cptsData\['newPosZ']\[i+tRange+1].split(' ')\[1]) )\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif i%wSub == 0 :\n\t\t\t\t\t\t\t\tvec3.set( float(cptsData\['newPosX']\[i+tRange+2].split(' ')\[1]), float(cptsData\['newPosY']\[i+tRange+2].split(' ')\[1]), float(cptsData\['newPosZ']\[i+tRange+2].split(' ')\[1]) )\n\t\t\t\t\t\t\t\tif getNode\['edge_tangent'].getValueAt(time) == 0 :\n\t\t\t\t\t\t\t\t\tangle = 45\n\t\t\t\t\t\t\t\telse :\n\t\t\t\t\t\t\t\t\tangle = 45 * getNode\['edge_tangent'].getValueAt(time)\n\t\t\t\t\t\t\telse :\n\t\t\t\t\t\t\t\tvec3.set( float(cptsData\['newPosX']\[i+tRange-1].split(' ')\[1]), float(cptsData\['newPosY']\[i+tRange-1].split(' ')\[1]), float(cptsData\['newPosZ']\[i+tRange-1].split(' ')\[1]) )\n\t\t\t\t\t\t\t\tangle = sssAngle(vec2, vec3, vec1)\n\n\t\t\t\t\t\t\tcptsData\['t1X'].append('x' + str(time) + ' ' + str( tvar(vec1, vec2, vec3, angle, getNode\['t1angle'].getValueAt(time), getNode\['t1scale'].getValueAt(time))\[0] ))\n\t\t\t\t\t\t\tcptsData\['t1Y'].append('x' + str(time) + ' ' + str( tvar(vec1, vec2, vec3, angle, getNode\['t1angle'].getValueAt(time), getNode\['t1scale'].getValueAt(time))\[1] ))\n\t\t\t\t\t\t\tcptsData\['t1Z'].append('x' + str(time) + ' ' + str( tvar(vec1, vec2, vec3, angle, getNode\['t1angle'].getValueAt(time), getNode\['t1scale'].getValueAt(time))\[2] ))\n\t\t\t\t\t\telse :\n\t\t\t\t\t\t\tcptsData\['t1X'].append('x' + str(time) + ' 0')\n\t\t\t\t\t\t\tcptsData\['t1Y'].append('x' + str(time) + ' 0')\n\t\t\t\t\t\t\tcptsData\['t1Z'].append('x' + str(time) + ' 0')\n\n\t\t\t\t\t### t2 ###\n\n\t\t\t\t\t\tif i%wSub != 0 :\n\t\t\t\t\t\t\tvec2.set( float(cptsData\['newPosX']\[i+tRange-1].split(' ')\[1]), float(cptsData\['newPosY']\[i+tRange-1].split(' ')\[1]), float(cptsData\['newPosZ']\[i+tRange-1].split(' ')\[1]) )\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif i%wSub == wSub-1 :\n\t\t\t\t\t\t\t\tvec3.set( float(cptsData\['newPosX']\[i+tRange-2].split(' ')\[1]), float(cptsData\['newPosY']\[i+tRange-2].split(' ')\[1]), float(cptsData\['newPosZ']\[i+tRange-2].split(' ')\[1]) )\n\t\t\t\t\t\t\t\tif getNode\['edge_tangent'].getValueAt(time) == 0 :\n\t\t\t\t\t\t\t\t\tangle = 45\n\t\t\t\t\t\t\t\telse :\n\t\t\t\t\t\t\t\t\tangle = 45 * getNode\['edge_tangent'].getValueAt(time)\n\t\t\t\t\t\t\telse :\n\t\t\t\t\t\t\t\tvec3.set( float(cptsData\['newPosX']\[i+tRange+1].split(' ')\[1]), float(cptsData\['newPosY']\[i+tRange+1].split(' ')\[1]), float(cptsData\['newPosZ']\[i+tRange+1].split(' ')\[1]) )\n\t\t\t\t\t\t\t\tangle = sssAngle(vec2, vec3, vec1)\n\n\t\t\t\t\t\t\tcptsData\['t2X'].append('x' + str(time) + ' ' + str( tvar(vec1, vec2, vec3, angle, getNode\['t2angle'].getValueAt(time), getNode\['t2scale'].getValueAt(time))\[0] ))\n\t\t\t\t\t\t\tcptsData\['t2Y'].append('x' + str(time) + ' ' + str( tvar(vec1, vec2, vec3, angle, getNode\['t2angle'].getValueAt(time), getNode\['t2scale'].getValueAt(time))\[1] ))\n\t\t\t\t\t\t\tcptsData\['t2Z'].append('x' + str(time) + ' ' + str( tvar(vec1, vec2, vec3, angle, getNode\['t2angle'].getValueAt(time), getNode\['t2scale'].getValueAt(time))\[2] ))\n\t\t\t\t\t\telse :\n\t\t\t\t\t\t\tcptsData\['t2X'].append('x' + str(time) + ' 0')\n\t\t\t\t\t\t\tcptsData\['t2Y'].append('x' + str(time) + ' 0')\n\t\t\t\t\t\t\tcptsData\['t2Z'].append('x' + str(time) + ' 0')\n\n\t\t\t\t\t### t3 ###\n\t\t\t\n\t\t\t\t\t\tif i < totalcpts-wSub :\n\t\t\t\t\t\t\tvec2.set( float(cptsData\['newPosX']\[i+tRange+wSub].split(' ')\[1]), float(cptsData\['newPosY']\[i+tRange+wSub].split(' ')\[1]), float(cptsData\['newPosZ']\[i+tRange+wSub].split(' ')\[1]) )\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif i < wSub :\n\t\t\t\t\t\t\t\tvec3.set( float(cptsData\['newPosX']\[i+tRange+wSub*2].split(' ')\[1]), float(cptsData\['newPosY']\[i+tRange+wSub*2].split(' ')\[1]), float(cptsData\['newPosZ']\[i+tRange+wSub*2].split(' ')\[1]) )\n\t\t\t\t\t\t\t\tif getNode\['edge_tangent'].getValueAt(time) == 0 :\n\t\t\t\t\t\t\t\t\tangle = 45\n\t\t\t\t\t\t\t\telse :\n\t\t\t\t\t\t\t\t\tangle = 45 * getNode\['edge_tangent'].getValueAt(time)\n\t\t\t\t\t\t\telse :\n\t\t\t\t\t\t\t\tvec3.set( float(cptsData\['newPosX']\[i+tRange-wSub].split(' ')\[1]), float(cptsData\['newPosY']\[i+tRange-wSub].split(' ')\[1]), float(cptsData\['newPosZ']\[i+tRange-wSub].split(' ')\[1]) )\n\t\t\t\t\t\t\t\tangle = sssAngle(vec2, vec3, vec1)\n\n\t\t\t\t\t\t\tcptsData\['t3X'].append('x' + str(time) + ' ' + str( tvar(vec1, vec2, vec3, angle, getNode\['t3angle'].getValueAt(time), getNode\['t3scale'].getValueAt(time))\[0] ))\n\t\t\t\t\t\t\tcptsData\['t3Y'].append('x' + str(time) + ' ' + str( tvar(vec1, vec2, vec3, angle, getNode\['t3angle'].getValueAt(time), getNode\['t3scale'].getValueAt(time))\[1] ))\n\t\t\t\t\t\t\tcptsData\['t3Z'].append('x' + str(time) + ' ' + str( tvar(vec1, vec2, vec3, angle, getNode\['t3angle'].getValueAt(time), getNode\['t3scale'].getValueAt(time))\[2] ))\n\t\t\t\t\t\telse :\n\t\t\t\t\t\t\tcptsData\['t3X'].append('x' + str(time) + ' 0')\n\t\t\t\t\t\t\tcptsData\['t3Y'].append('x' + str(time) + ' 0')\n\t\t\t\t\t\t\tcptsData\['t3Z'].append('x' + str(time) + ' 0')\n\n\t\t\t\t\t### t4 ###\n\n\t\t\t\t\t\tif i >= wSub :\n\t\t\t\t\t\t\tvec2.set( float(cptsData\['newPosX']\[i+tRange-wSub].split(' ')\[1]), float(cptsData\['newPosY']\[i+tRange-wSub].split(' ')\[1]), float(cptsData\['newPosZ']\[i+tRange-wSub].split(' ')\[1]) )\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif i >= totalcpts-wSub :\n\t\t\t\t\t\t\t\tvec3.set( float(cptsData\['newPosX']\[i+tRange-wSub*2].split(' ')\[1]), float(cptsData\['newPosY']\[i+tRange-wSub*2].split(' ')\[1]), float(cptsData\['newPosZ']\[i+tRange-wSub*2].split(' ')\[1]) )\n\t\t\t\t\t\t\t\tif getNode\['edge_tangent'].getValueAt(time) == 0 :\n\t\t\t\t\t\t\t\t\tangle = 45\n\t\t\t\t\t\t\t\telse :\n\t\t\t\t\t\t\t\t\tangle = 45 * getNode\['edge_tangent'].getValueAt(time)\n\t\t\t\t\t\t\telse :\n\t\t\t\t\t\t\t\tvec3.set( float(cptsData\['newPosX']\[i+tRange+wSub].split(' ')\[1]), float(cptsData\['newPosY']\[i+tRange+wSub].split(' ')\[1]), float(cptsData\['newPosZ']\[i+tRange+wSub].split(' ')\[1]) )\n\t\t\t\t\t\t\t\tangle = sssAngle(vec2, vec3, vec1)\n\n\t\t\t\t\t\t\tcptsData\['t4X'].append('x' + str(time) + ' ' + str( tvar(vec1, vec2, vec3, angle, getNode\['t4angle'].getValueAt(time), getNode\['t4scale'].getValueAt(time))\[0] ))\n\t\t\t\t\t\t\tcptsData\['t4Y'].append('x' + str(time) + ' ' + str( tvar(vec1, vec2, vec3, angle, getNode\['t4angle'].getValueAt(time), getNode\['t4scale'].getValueAt(time))\[1] ))\n\t\t\t\t\t\t\tcptsData\['t4Z'].append('x' + str(time) + ' ' + str( tvar(vec1, vec2, vec3, angle, getNode\['t4angle'].getValueAt(time), getNode\['t4scale'].getValueAt(time))\[2] ))\n\t\t\t\t\t\telse :\n\t\t\t\t\t\t\tcptsData\['t4X'].append('x' + str(time) + ' 0')\n\t\t\t\t\t\t\tcptsData\['t4Y'].append('x' + str(time) + ' 0')\n\t\t\t\t\t\t\tcptsData\['t4Z'].append('x' + str(time) + ' 0')\n\n\t\t\t\t\t### UV ###\t\n\n\t\t\t\t\tif time == frameST :\n\t\t\t\t\t\tfor i in range (0, int(len(raw_cdd)/12) ) :\n\t\t\t\t\t\t\tcptsData\['uvX'].append( 'x' + str(time) + ' ' + str(raw_cdd\[(i*12)+11].split(' ')\[0]) )\n\t\t\t\t\t\t\tcptsData\['uvY'].append( 'x' + str(time) + ' ' + str(raw_cdd\[(i*12)+11].split(' ')\[1]) )\n\t\t\t\t\t\t\tcptsData\['uvZ'].append( 'x' + str(time) + ' ' + str(raw_cdd\[(i*12)+11].split(' ')\[2]) )\n\n\t\t\t\t##########################################\n\n\t\t\t\tif getNode\['anim_type_tangent'].getValue() == 0 :\n\t\t\t\t\tposData = \['1 \{\{curve ' + ' '.join(cptsData\['newPosX']\[i::totalcpts]) + '\} \{curve ' + ' '.join(cptsData\['newPosY']\[i::totalcpts]) + '\} \{curve ' + ' '.join(cptsData\['newPosZ']\[i::totalcpts]) + '\}\} 1 \{\{curve ' + ' '.join(cptsData\['t1X']\[i::totalcpts]) + '\} \{curve ' + ' '.join(cptsData\['t1Y']\[i::totalcpts]) + '\} \{curve ' + ' '.join(cptsData\['t1Z']\[i::totalcpts]) + '\}\} 1 \{\{curve ' + ' '.join(cptsData\['t2X']\[i::totalcpts]) + '\} \{curve ' + ' '.join(cptsData\['t2Y']\[i::totalcpts]) + '\} \{curve ' + ' '.join(cptsData\['t2Z']\[i::totalcpts]) + '\}\} 1 \{\{curve ' + ' '.join(cptsData\['t3X']\[i::totalcpts]) + '\} \{curve ' + ' '.join(cptsData\['t3Y']\[i::totalcpts]) + '\} \{curve ' + ' '.join(cptsData\['t3Z']\[i::totalcpts]) + '\}\} 1 \{\{curve ' + ' '.join(cptsData\['t4X']\[i::totalcpts]) + '\} \{curve ' + ' '.join(cptsData\['t4Y']\[i::totalcpts]) + '\} \{curve ' + ' '.join(cptsData\['t4Z']\[i::totalcpts]) + '\}\} 0 \{\{curve ' + cptsData\['uvX']\[i] + '\} \{curve ' + cptsData\['uvY']\[i] + '\} \{curve ' + cptsData\['uvZ']\[i] + '\}\}' for i in range(totalcpts)]\n\t\t\t\telse :\n\t\t\t\t\tselFR = totalcpts*(int(getNode\['ref_frame'].getValue()-frameST))\n\t\t\t\t\tposData = \['1 \{\{curve ' + ' '.join(cptsData\['newPosX']\[i::totalcpts]) + '\} \{curve ' + ' '.join(cptsData\['newPosY']\[i::totalcpts]) + '\} \{curve ' + ' '.join(cptsData\['newPosZ']\[i::totalcpts]) + '\}\} 1 \{\{curve ' + cptsData\['t1X']\[i+selFR] + '\} \{curve ' + cptsData\['t1Y']\[i+selFR] + '\} \{curve ' + cptsData\['t1Z']\[i+selFR] + '\}\} 1 \{\{curve ' + cptsData\['t2X']\[i+selFR] + '\} \{curve ' + cptsData\['t2Y']\[i+selFR] + '\} \{curve ' + cptsData\['t2Z']\[i+selFR] + '\}\} 1 \{\{curve ' + cptsData\['t3X']\[i+selFR] + '\} \{curve ' + cptsData\['t3Y']\[i+selFR] + '\} \{curve ' + cptsData\['t3Z']\[i+selFR] + '\}\} 1 \{\{curve ' + cptsData\['t4X']\[i+selFR] + '\} \{curve ' + cptsData\['t4Y']\[i+selFR] + '\} \{curve ' + cptsData\['t4Z']\[i+selFR] + '\}\} 0 \{\{curve ' + cptsData\['uvX']\[i] + '\} \{curve ' + cptsData\['uvY']\[i] + '\} \{curve ' + cptsData\['uvZ']\[i] + '\}\}' for i in range(totalcpts)]\n\t\t\t\t\tdel selFR\n\t\t\t\t\n\t\t\t\tposData.insert(0, str(datasetNODE\['raw_cdd'].getValue().split(' ')\[0]) + ' ' + str(datasetNODE\['raw_cdd'].getValue().split(' ')\[1]) + ' ' + str(datasetNODE\['raw_cdd'].getValue().split(' ')\[2]) + ' ' +str(datasetNODE\['raw_cdd'].getValue().split(' ')\[3]) + '\\n')\n\n\t\t\t\tsrcNode\['control_points'].fromScript( '\\n'.join(posData) )\n\t\t\t\tsrcNode\['label'].setValue('Deform by Origami')\n\t\t\t\tsrcNode\['tile_color'].fromScript(getNode\['tile_color'].toScript())\n\n\t\t\t\tdel progBar\n\t\t\t\tdel cptsData, vec1, vec2, vec3, angle, #posData\n\texcept IndexError :\n\t\tnuke.message('Cannot process. The reference frame of static tangent animation is not within the frame range.\\n\\nSuggestion:\\n- fix the reference frame within frame range.\\n- change anim type of tangent to dynamic.')\n\n#######################################################\n\ndef subdUpdate(getNode, srcNode) :\n\ttry :\n\t\tsrcNode\['rows'].setValue(getNode\['rows'].getValue())\n\t\tsrcNode\['columns'].setValue(getNode\['columns'].getValue())\n\texcept TypeError :\n\t\tnuke.message('Missing source input.')\n\n#######################################################\n\ndef cardTest(id, mainPts, roX, roY, roZ) :\n\troot = nuke.root()\n\n\troot.begin()\n\tca = nuke.nodes.Card(name='x' + str(id))\n\tca\['translate'].setValue(mainPts)\n\tca\['rotate'].setValue( roX, 0)\n\tca\['rotate'].setValue( roY, 1)\n\tca\['rotate'].setValue( roZ, 2)\n\tca\['uniform_scale'].setValue(2)\n\troot.end()" +STARTLINE} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_renameChannels.gizmo ================================================ Group { name renameChannels tile_color 0x9e3c6300 addUserKnob {20 Rename} addUserKnob {26 message01 l "" +STARTLINE T "1. Select old Layer and enter a new one"} addUserKnob {41 oldLayer l "old Layer" T Copy1.channels} addUserKnob {1 newLayer l "new Layer"} addUserKnob {22 clear -STARTLINE T "nuke.thisNode()\['newLayer'].setValue('')"} addUserKnob {26 ""} addUserKnob {26 message02 l "" +STARTLINE T "2. Select channels and populate list"} addUserKnob {22 rgba l "rgba" T "newLayer = nuke.thisNode()\[\"newLayer\"].value()\n#nuke.Layer(newLayer, \['red', 'green', 'blue', 'alpha'] )\n\noldLayer = nuke.thisNode()\[\"oldLayer\"].value()\n\nnewRed = str(newLayer) + \".red\"\nnewGreen = str(newLayer) + \".green\"\nnewBlue = str(newLayer) + \".blue\"\nnewAlpha = str(newLayer) + \".alpha\"\n\noldRed = str(oldLayer) + \".red\"\noldGreen = str(oldLayer) + \".green\"\noldBlue = str(oldLayer) + \".blue\"\noldAlpha = str(oldLayer) + \".alpha\"\n\nif (newLayer != \"\"):\n nuke.thisNode()\[\"from_channel01\"].setValue(oldRed)\n nuke.thisNode()\[\"from_channel02\"].setValue(oldGreen)\n nuke.thisNode()\[\"from_channel03\"].setValue(oldBlue)\n nuke.thisNode()\[\"from_channel04\"].setValue(oldAlpha)\n \n nuke.thisNode()\[\"to_channel01\"].setValue(newRed)\n nuke.thisNode()\[\"to_channel02\"].setValue(newGreen)\n nuke.thisNode()\[\"to_channel03\"].setValue(newBlue)\n nuke.thisNode()\[\"to_channel04\"].setValue(newAlpha)\nelse:\n nuke.message(\"Insert the name of new Layer\")" +STARTLINE} addUserKnob {22 rgb l "rgb" -STARTLINE T "newLayer = nuke.thisNode()\[\"newLayer\"].value()\n#nuke.Layer(newLayer, \['red', 'green', 'blue'] )\n\noldLayer = nuke.thisNode()\[\"oldLayer\"].value()\n\nnewRed = str(newLayer) + \".red\"\nnewGreen = str(newLayer) + \".green\"\nnewBlue = str(newLayer) + \".blue\"\n\noldRed = str(oldLayer) + \".red\"\noldGreen = str(oldLayer) + \".green\"\noldBlue = str(oldLayer) + \".blue\"\n\nif (newLayer != \"\"):\n nuke.thisNode()\[\"from_channel01\"].setValue(oldRed)\n nuke.thisNode()\[\"from_channel02\"].setValue(oldGreen)\n nuke.thisNode()\[\"from_channel03\"].setValue(oldBlue)\n nuke.thisNode()\[\"from_channel04\"].setValue(\"\")\n \n nuke.thisNode()\[\"to_channel01\"].setValue(newRed)\n nuke.thisNode()\[\"to_channel02\"].setValue(newGreen)\n nuke.thisNode()\[\"to_channel03\"].setValue(newBlue)\n nuke.thisNode()\[\"to_channel04\"].setValue(\"\")\nelse:\n nuke.message(\"Insert the name of new Layer\")"} addUserKnob {22 a l "a" -STARTLINE T "newLayer = nuke.thisNode()\[\"newLayer\"].value()\n#nuke.Layer(newLayer, \['alpha'] )\n\noldLayer = nuke.thisNode()\[\"oldLayer\"].value()\n\nnewAlpha = str(newLayer) + \".a\"\n\noldAlpha = str(oldLayer) + \".a\"\n\nif (newLayer != \"\"):\n nuke.thisNode()\[\"from_channel01\"].setValue(\"\")\n nuke.thisNode()\[\"from_channel02\"].setValue(\"\")\n nuke.thisNode()\[\"from_channel03\"].setValue(\"\")\n nuke.thisNode()\[\"from_channel04\"].setValue(oldAlpha)\n \n nuke.thisNode()\[\"to_channel01\"].setValue(\"\")\n nuke.thisNode()\[\"to_channel02\"].setValue(\"\")\n nuke.thisNode()\[\"to_channel03\"].setValue(\"\")\n nuke.thisNode()\[\"to_channel04\"].setValue(newAlpha)\nelse:\n nuke.message(\"Insert the name of new Layer\")"} addUserKnob {22 uv l "u v" -STARTLINE T "newLayer = nuke.thisNode()\[\"newLayer\"].value()\n#nuke.Layer(newLayer, \['u', 'v'] )\n\noldLayer = nuke.thisNode()\[\"oldLayer\"].value()\n\nnewRed = str(newLayer) + \".u\"\nnewGreen = str(newLayer) + \".v\"\n\noldRed = str(oldLayer) + \".u\"\noldGreen = str(oldLayer) + \".v\"\n\nif (newLayer != \"\"):\n nuke.thisNode()\[\"from_channel01\"].setValue(oldRed)\n nuke.thisNode()\[\"from_channel02\"].setValue(oldGreen)\n nuke.thisNode()\[\"from_channel03\"].setValue(\"\")\n nuke.thisNode()\[\"from_channel04\"].setValue(\"\")\n \n nuke.thisNode()\[\"to_channel01\"].setValue(newRed)\n nuke.thisNode()\[\"to_channel02\"].setValue(newGreen)\n nuke.thisNode()\[\"to_channel03\"].setValue(\"\")\n nuke.thisNode()\[\"to_channel04\"].setValue(\"\")\nelse:\n nuke.message(\"Insert the name of new Layer\")"} addUserKnob {22 N l "nx ny nz" -STARTLINE T "newLayer = nuke.thisNode()\[\"newLayer\"].value()\n#nuke.Layer(newLayer, \['NX', 'NY', 'NZ'] )\n\noldLayer = nuke.thisNode()\[\"oldLayer\"].value()\n\nnewRed = str(newLayer) + \".NX\"\nnewGreen = str(newLayer) + \".NY\"\nnewBlue = str(newLayer) + \".NZ\"\n\noldRed = str(oldLayer) + \".NX\"\noldGreen = str(oldLayer) + \".NY\"\noldBlue = str(oldLayer) + \".NZ\"\n\nif (newLayer != \"\"):\n nuke.thisNode()\[\"from_channel01\"].setValue(oldRed)\n nuke.thisNode()\[\"from_channel02\"].setValue(oldGreen)\n nuke.thisNode()\[\"from_channel03\"].setValue(oldBlue)\n nuke.thisNode()\[\"from_channel04\"].setValue(\"\")\n \n nuke.thisNode()\[\"to_channel01\"].setValue(newRed)\n nuke.thisNode()\[\"to_channel02\"].setValue(newGreen)\n nuke.thisNode()\[\"to_channel03\"].setValue(newBlue)\n nuke.thisNode()\[\"to_channel04\"].setValue(\"\")\nelse:\n nuke.message(\"Insert the name of new Layer\")"} addUserKnob {22 front l "front back" -STARTLINE T "newLayer = nuke.thisNode()\[\"newLayer\"].value()\n#nuke.Layer(newLayer, \['red', 'green', 'blue', 'alpha'] )\n\noldLayer = nuke.thisNode()\[\"oldLayer\"].value()\n\nnewRed = str(newLayer) + \".front\"\nnewGreen = str(newLayer) + \".back\"\n\noldRed = str(oldLayer) + \".front\"\noldGreen = str(oldLayer) + \".back\"\n\nif (newLayer != \"\"):\n nuke.thisNode()\[\"from_channel01\"].setValue(oldRed)\n nuke.thisNode()\[\"from_channel02\"].setValue(oldGreen)\n nuke.thisNode()\[\"from_channel03\"].setValue(\"\")\n nuke.thisNode()\[\"from_channel04\"].setValue(\"\")\n \n nuke.thisNode()\[\"to_channel01\"].setValue(newRed)\n nuke.thisNode()\[\"to_channel02\"].setValue(newGreen)\n nuke.thisNode()\[\"to_channel03\"].setValue(\"\")\n nuke.thisNode()\[\"to_channel04\"].setValue(\"\")\nelse:\n nuke.message(\"Insert the name of new Layer\")"} addUserKnob {22 z l "Z" -STARTLINE T "newLayer = nuke.thisNode()\[\"newLayer\"].value()\n#nuke.Layer(newLayer, \['red', 'green', 'blue', 'alpha'] )\n\noldLayer = nuke.thisNode()\[\"oldLayer\"].value()\n\nnewZ = str(newLayer) + \".Z\"\n\noldZ = str(oldLayer) + \".Z\"\n\nif (newLayer != \"\"):\n nuke.thisNode()\[\"from_channel01\"].setValue(oldZ)\n nuke.thisNode()\[\"from_channel02\"].setValue(\"\")\n nuke.thisNode()\[\"from_channel03\"].setValue(\"\")\n nuke.thisNode()\[\"from_channel04\"].setValue(\"\")\n \n nuke.thisNode()\[\"to_channel01\"].setValue(newZ)\n nuke.thisNode()\[\"to_channel02\"].setValue(\"\")\n nuke.thisNode()\[\"to_channel03\"].setValue(\"\")\n nuke.thisNode()\[\"to_channel04\"].setValue(\"\")\nelse:\n nuke.message(\"Insert the name of new Layer\")"} addUserKnob {22 clearAll l "Clear All" T "nuke.thisNode()\[\"from_channel01\"].setValue(\"\")\nnuke.thisNode()\[\"from_channel02\"].setValue(\"\")\nnuke.thisNode()\[\"from_channel03\"].setValue(\"\")\nnuke.thisNode()\[\"from_channel04\"].setValue(\"\") \nnuke.thisNode()\[\"to_channel01\"].setValue(\"\")\nnuke.thisNode()\[\"to_channel02\"].setValue(\"\")\nnuke.thisNode()\[\"to_channel03\"].setValue(\"\")\nnuke.thisNode()\[\"to_channel04\"].setValue(\"\")" +STARTLINE} addUserKnob {26 ""} addUserKnob {26 message03 l "" +STARTLINE T "3. Create Copy and Remove nodes"} addUserKnob {1 from_channel01 l "Channel 1"} addUserKnob {1 to_channel01 l --> -STARTLINE} addUserKnob {1 from_channel02 l "Channel 2"} addUserKnob {1 to_channel02 l --> -STARTLINE} addUserKnob {1 from_channel03 l "Channel 3"} addUserKnob {1 to_channel03 l --> -STARTLINE} addUserKnob {1 from_channel04 l "Channel 4"} addUserKnob {1 to_channel04 l --> -STARTLINE} addUserKnob {22 createNodes l "Create Copy and Remove Nodes" T "def generate():\n toList = \['to0', 'to1', 'to2', 'to3'] ## List of Copy Node to variables\n fromList = \[ 'from0', 'from1', 'from2', 'from3'] ## List of Copy Node knobs\n \n fromKnob = \['from_channel01', 'from_channel02', 'from_channel03', 'from_channel04']\n toKnob = \['to_channel01', 'to_channel02', 'to_channel03', 'to_channel04']\n \n\n\t## Grab group node name\t\n group = nuke.thisNode()\n group.end()\n \n #read position\n x_pos = group\['xpos'].value()\n y_pos = group\['ypos'].value()\n\t\n\t## Deselect all nodes\n nuke.selectAll()\n nuke.invertSelection()\n \n listChannels = \[]\n newLayer = group\['newLayer'].value()\n oldLayer = group\['oldLayer'].value()\n\n #layers = list( set(\[c.split('.')\[0] for c in channels]) )\n for name_knob in toKnob:\n value_knob = group\[name_knob].value()\n value_knob = value_knob.replace( ' ', '_')\n #value_knob = value_knob.lower()\n if value_knob != \"\":\n value_knob = value_knob.split('.')\[1]\n listChannels.append(newLayer + '.' + value_knob)\n \n if newLayer != \"\":\n nuke.Layer( newLayer, listChannels)\n \n \n ##Create Dots\n dot01 = nuke.createNode('Dot')\n dot01.setYpos( int(y_pos) + 80 )\n \n \n \n\t ## Create Copy Node\n copyNode = nuke.createNode('Copy')\n #copyNode.setYpos( int(y_pos) + 160 )\n \n copyNode.connectInput(0, dot01)\n \n for i in range(4):\n copyNode\[fromList\[i]].setValue(group\[fromKnob\[i]].value())\n \n for i in range(4):\n copyNode\[toList\[i]].setValue(group\[toKnob\[i]].value())\n \n #Create Remove Node\n removeNode = nuke.createNode('Remove')\n removeNode\['channels'].setValue(oldLayer)\n \n \n\n\ngenerate()" +STARTLINE} addUserKnob {20 help_1 l ?} addUserKnob {26 message02_1 l "" +STARTLINE T "HELP:"} addUserKnob {26 message l "" +STARTLINE T "1. Connect renameChannels node to your script.\n2. Select the oldLayer and insert the name of the newLayer. Basically you want to rename the old name with the new one. \n3. Select the Channels you want to create. They depend from the oldLayer \n4. Click on button \"Create Copy and Remove Nodes\" \n5. Connect the nodes created to your script."} addUserKnob {26 "" +STARTLINE} addUserKnob {22 info l Info T "nuke.tcl('start', 'http://www.andreageremia.it/tutorial.html')" +STARTLINE} addUserKnob {26 gizmo l "" +STARTLINE T "Gizmo created by Andrea Geremia\n\nwww.andreageremia.it\nandrea.geremia89@gmail.com"} } Input { inputs 0 name Input1 xpos 170 ypos -176 } Shuffle { in forward name Shuffle1 xpos 170 ypos -136 disable true } Dot { name Dot1 xpos 204 ypos -112 } set N22951c40 [stack 0] push $N22951c40 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha channels rgba name Copy1 xpos 170 ypos -77 } Output { name Output1 xpos 170 ypos -36 } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_streamCart.gizmo ================================================ Group { name streamCart tile_color 0xd1ffff addUserKnob {20 tab_general l General} addUserKnob {22 get_items l "get channels / geo" t "Run get items first, it will check the input type (e.g. Deep, 2D, or Geo) and what items/channels available from upstream." T "import re\n\nthisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\n### cleanup ###\n\ncleanKnobs(thisGRP)\n\n### init ###\n\ncount = 0\nchans_ls = \[]\nchans_dict = \{\}\ninType = \['Deep','2D','Geo','Unsupport','No Input']\n\n### input check ###\n\nif thisGRP.inputs() :\n inDetect = nuke.toNode('inDetect')\n tempD = nuke.nodes.DeepSample( inputs=\[inDetect] )\n if tempD.inputs() > 0 :\n temp2D = nuke.nodes.Blur( inputs=\[inDetect] )\n if temp2D.inputs() > 0 :\n p = nuke.Panel('select input type :')\n p.addEnumerationPulldown( '' , '2D Deep' )\n if p.show() :\n if p.value('') == 'Deep' :\n status = 0\n else :\n status = 1\n else :\n status = 0\n nuke.delete( tempD )\n nuke.delete( temp2D )\n else :\n nuke.delete( tempD )\n tempD = nuke.nodes.Blur( inputs=\[inDetect] )\n if tempD.inputs() > 0 :\n status = 1\n nuke.delete( tempD )\n else :\n nuke.delete( tempD )\n tempD = nuke.nodes.Scene( inputs=\[inDetect] )\n if tempD.inputs() > 0 :\n status = 2\n nuke.delete( tempD )\n else :\n status = 3\n nuke.delete( tempD )\nelse :\n status = 4\n\n### panel setting ###\n\nif inType\[status] == '2D' :\n thisGRP\['shuffle_method'].setVisible(True)\nelse :\n thisGRP\['shuffle_method'].setVisible(False)\n\nif inType\[status] == 'Deep' or inType\[status] == '2D' :\n thisGRP\['alpha_type'].setVisible(True)\nelse :\n thisGRP\['alpha_type'].setVisible(False)\n\nif inType\[status] == 'Geo' :\n thisGRP\['import_method'].setVisible(True)\nelse :\n thisGRP\['import_method'].setVisible(False)\n\n### proc ###\n\nif inType\[status] == 'Deep' :\n thisGRP\['input_type'].setValue( '' + inType\[status] + '' )\n d2img = nuke.nodes.DeepToImage( inputs=\[nuke.toNode('inDetect')] )\n for i in d2img.channels() :\n try :\n chans_dict\[ i.split('.')\[0] ].append( i.split('.')\[1] )\n except :\n chans_dict\[ i.split('.')\[0] ] = \[ i.split('.')\[1] ]\n chans_ls.append( i.split('.')\[0] )\n nuke.delete( d2img )\n\n for key,value in enumerate( chans_ls ) :\n nknob = nuke.PyScript_Knob( 'cs_\{0\}'.format( value ) , '\{0\}'.format( value ) , 'thisGRP = nuke.thisGroup()\\ngoSTORE = nuke.toNode(\\'store\\')\\ngoSTORE\[\\'fn\\'].execute()\\nwith getLevel() :\\n\\tgen = extract(\\'\{0\}\\',\{1\},\{2\},\{3\},\{4\},\{5\})\\n\\tgen.setInput(0, thisGRP)'.format(value, chans_dict\[value] , 'int( thisGRP\[\\'shuffle_method\\'].getValue() )', 'int( thisGRP\[\\'alpha_type\\'].getValue() )', '\[thisGRP\[\\'tile_color\\'].getValue()]', status))\n thisGRP.addKnob( nknob )\n if count%3 == 0 :\n thisGRP\['cs_' + value].setFlag(0x00001000)\n count += 1\n\nif inType\[status] == '2D' :\n thisGRP\['input_type'].setValue( '' + inType\[status] + '' )\n for i in thisGRP.channels() :\n try :\n chans_dict\[ i.split('.')\[0] ].append( i.split('.')\[1] )\n except :\n chans_dict\[ i.split('.')\[0] ] = \[ i.split('.')\[1] ]\n chans_ls.append( i.split('.')\[0] )\n\n for key,value in enumerate( chans_ls ) :\n nknob = nuke.PyScript_Knob( 'cs_\{0\}'.format( value ) , '\{0\}'.format( value ) , 'thisGRP = nuke.thisGroup()\\ngoSTORE = nuke.toNode(\\'store\\')\\ngoSTORE\[\\'fn\\'].execute()\\nwith getLevel() :\\n\\tgen = extract(\\'\{0\}\\',\{1\},\{2\},\{3\},\{4\},\{5\})\\n\\tgen.setInput(0, thisGRP)'.format(value, chans_dict\[value] , 'int( thisGRP\[\\'shuffle_method\\'].getValue() )', 'int( thisGRP\[\\'alpha_type\\'].getValue() )', '\[thisGRP\[\\'tile_color\\'].getValue()]', status))\n thisGRP.addKnob( nknob )\n if count%3 == 0 :\n thisGRP\['cs_' + value].setFlag(0x00001000)\n count += 1\n\nif inType\[status] == 'Geo' :\n readg = thisGRP.dependencies()\[0]\n if readg.Class() != 'ReadGeo2' :\n thisGRP\['import_method'].setVisible(False)\n nuke.message(\"This function only support 'ReadGeo2' class node direct from input.\")\n else :\n thisGRP\['import_method'].setVisible(True)\n thisGRP\['input_type'].setValue( '' + inType\[status] + '' )\n allshapes = readg\['scene_view'].getAllItems()\n for i in allshapes :\n nknob = nuke.Boolean_Knob( 'cs_\{0\}'.format( '_'.join( re.split('/|\\.', i)\[2:] ) ) , '\{0\}'.format( '/'.join( i.split('/')\[2:] ) ) )\n thisGRP.addKnob( nknob )\n thisGRP\['cs_' + '_'.join( re.split('/|\\.', i)\[2:] )].setFlag(0x00001000)\n nknob = nuke.Text_Knob( 'cs_spacer' , ' ' )\n thisGRP.addKnob( nknob )\n nknob = nuke.PyScript_Knob( 'cs_invert_selection' , '\[---invert selection---]' , 'thisGRP = nuke.thisGroup()\\ngoSTORE = nuke.toNode(\\'store\\')\\ngoSTORE\[\\'fn\\'].execute()\\ninvSelGeo( \{0\} )'.format( 'thisGRP' ) )\n thisGRP.addKnob( nknob )\n thisGRP\['cs_invert_selection'].setFlag(0x00001000)\n nknob = nuke.PyScript_Knob( 'cs_checkout' , '\[---READGEO CHECKOUT---]' , 'thisGRP = nuke.thisGroup()\\ngoSTORE = nuke.toNode(\\'store\\')\\ngoSTORE\[\\'fn\\'].execute()\\nwith getLevel() :\\n\\tgeoCheckout( \\'\{0\}\\' , \{1\} , \{2\} , \{3\} )'.format( readg\['file'].value() , int(readg\['range_first'].getValue()) , int(readg\['range_last'].getValue()) , 'thisGRP' ) )\n thisGRP.addKnob( nknob )\n thisGRP\['cs_checkout'].setFlag(0x00001000)\n\nif inType\[status] == 'Unsupport' :\n thisGRP\['input_type'].setValue( \"connect your input and run 'get channels / geo' first.\" )\n nuke.message(\"Input type does not support. Only work with 2D, Deep and Geo from upstream.\")\n\nif inType\[status] == 'No Input' :\n thisGRP\['input_type'].setValue( \"connect your input and run 'get channels / geo' first.\" )\n nuke.message(\"connect your input and run 'get channels / geo' first.\")" +STARTLINE} addUserKnob {22 reset -STARTLINE T "thisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\n### cleanup ###\n\ncleanKnobs(thisGRP)\nthisGRP\['input_type'].setValue( \"connect your input and run 'get channels / geo' first.\" )\nthisGRP\['shuffle_method'].setVisible(False)\nthisGRP\['alpha_type'].setVisible(False)\nthisGRP\['import_method'].setVisible(False)"} addUserKnob {20 shuffle_define l "shuffle define setting" n 1} shuffle_define 0 addUserKnob {1 r_clist l red t "name in this text field will shuffle to red channel.\n\nrules :\n- Split the item with \" , \"\n- no space\n- not a matter of upper/lower cases"} r_clist red,r,front,z,u,x addUserKnob {1 g_clist l green t "name in this text field will shuffle to red channel.\n\nrules :\n- Split the item with \" , \"\n- no space\n- not a matter of upper/lower cases"} g_clist green,g,back,v,y addUserKnob {1 b_clist l blue t "name in this text field will shuffle to red channel.\n\nrules :\n- Split the item with \" , \"\n- no space\n- not a matter of upper/lower cases"} b_clist blue,b addUserKnob {1 a_clist l alpha t "name in this text field will shuffle to red channel.\n\nrules :\n- Split the item with \" , \"\n- no space\n- not a matter of upper/lower cases"} a_clist alpha,a addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {26 input_type l "input type" T "connect your input and run 'get channels / geo' first."} addUserKnob {4 shuffle_method l "shuffle method" +HIDDEN M {"shuffle node" "expression node"}} addUserKnob {4 alpha_type l alpha +HIDDEN M {rgba.alpha self.alpha "alpha = 0" "alpha = 1" "" "" "" ""}} addUserKnob {4 import_method l "import method" +HIDDEN M {"import & activate only selected geo" "import all, activate only selected geo"}} addUserKnob {26 title_extract l "extraction items"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "Dont touch" note_font_size 42 xpos -385 ypos 7 bdwidth 512 bdheight 186 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x575757ff label bin note_font_size 42 xpos -386 ypos 220 bdwidth 220 bdheight 167 } Input { inputs 0 name input xpos 0 ypos -95 } Dot { name inDetect xpos 34 ypos 91 } Output { name Output1 xpos 0 ypos 300 } NoOp { inputs 0 name menu01 knobChanged "\nstatus = nuke.thisGroup()\['view_LayerContactSheet'].getValue()\nstDot = nuke.toNode('start_dot')\nedDot = nuke.toNode('end_dot')\n\nfor node in nuke.allNodes() :\n if node.Class() == 'LayerContactSheet' :\n nuke.delete( node )\n\nif status :\n LCS = nuke.nodes.LayerContactSheet( roworder=0 , colorder=0 , showLayerNames=1 , inputs=\[stDot] )\n edDot.setInput( 0 , LCS )\nelse :\n edDot.setInput( 0 , stDot )\n" xpos -311 ypos 131 addUserKnob {20 User} addUserKnob {6 view_LayerContactSheet l "view LayerContactSheet" +STARTLINE} } NoOp { inputs 0 name store xpos -313 ypos 301 addUserKnob {20 User} addUserKnob {22 fn T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\n#########\n\ndef cleanKnobs(node) :\n\tfor knob in node.knobs() :\n\t\tif knob\[0:3] == 'cs_' :\n\t\t\tnode.removeKnob( node\[knob] )\n\n#########\n\ndef invSelGeo( thisG ) :\n\tfor i in thisG.knobs() :\n\t\tif thisG\[i].Class() == 'Boolean_Knob' and i\[:3] == 'cs_' :\n\t\t\tif thisG\[i].getValue() == 0 :\n\t\t\t\tthisG\[i].setValue(1)\n\t\t\telse :\n\t\t\t\tthisG\[i].setValue(0)\n\n#########\n\ndef extract(chans, color, shuffle_method, alpha_mode, mainSet, code) :\n\twhitelist = \{\n\t\t\t'cr' : thisGRP\['r_clist'].value().split(',') ,\n\t\t\t'cg' : thisGRP\['g_clist'].value().split(',') ,\n\t\t\t'cb' : thisGRP\['b_clist'].value().split(','),\n\t\t\t'ca' : thisGRP\['a_clist'].value().split(',')\n\t\t\}\n\n\taset = ''\n\n\tif code == 0 :\n\t\tnewnode = nuke.nodes.DeepExpression( chans0='rgba', tile_color=mainSet\[0] )\n\t\tnewnode\['rgba.red'].setValue( '0' )\n\t\tnewnode\['rgba.green'].setValue( '0' )\n\t\tnewnode\['rgba.blue'].setValue( '0' )\n\t\tnewnode\['rgba.alpha'].setValue( '0' )\n\n\t\tfor i in color :\n\t\t\tif i.lower() in whitelist\['cr'] :\n\t\t\t\tnewnode\['rgba.red'].setValue( '\{0\}.\{1\}'.format( chans , i ) )\n\n\t\t\tif i.lower() in whitelist\['cg'] :\n\t\t\t\tnewnode\['rgba.green'].setValue( '\{0\}.\{1\}'.format( chans , i ) )\n\n\t\t\tif i.lower() in whitelist\['cb'] :\n\t\t\t\tnewnode\['rgba.blue'].setValue( '\{0\}.\{1\}'.format( chans , i ) )\n\n\t\t\tif alpha_mode == 0 :\n\t\t\t\tnewnode\['rgba.alpha'].setValue( 'rgba.alpha' )\n\t\t\t\taset = 'rgba.alpha'\n\t\t\telif alpha_mode == 1 :\n\t\t\t\tif i.lower() in whitelist\['ca'] :\n\t\t\t\t\tnewnode\['rgba.alpha'].setValue( '\{0\}.\{1\}'.format(chans , i ) )\n\t\t\t\t\taset = chans + '.alpha'\n\t\t\t\telse :\n\t\t\t\t\taset = chans + ' no alpha found'\n\t\t\telif alpha_mode == 2 :\n\t\t\t\tnewnode\['rgba.alpha'].setValue( '0' )\n\t\t\t\taset = '0'\n\t\t\telif alpha_mode == 3 :\n\t\t\t\tnewnode\['rgba.alpha'].setValue( '1' )\n\t\t\t\taset = '1'\n\n\tif code == 1 :\n\t\tif shuffle_method == 0 :\n\t\t\tnewnode = nuke.nodes.Shuffle( red='black', green='black', blue='black', alpha='black', tile_color=mainSet\[0] )\n\t\t\tnewnode\['in'].setValue( chans )\n\t\t\tfor i in color :\n\t\t\t\tif i.lower() in whitelist\['cr'] :\n\t\t\t\t\tnewnode\['red'].setValue( 'red' )\n\n\t\t\t\tif i.lower() in whitelist\['cg'] :\n\t\t\t\t\tnewnode\['green'].setValue( 'green' )\n\n\t\t\t\tif i.lower() in whitelist\['cb'] :\n\t\t\t\t\tnewnode\['blue'].setValue( 'blue' )\n\n\t\t\t\tif alpha_mode == 0 :\n\t\t\t\t\tnewnode\['in2'].setValue( 'alpha' )\n\t\t\t\t\tnewnode\['alpha'].setValue( 7 )\n\t\t\t\t\taset = 'rgba.alpha'\n\t\t\t\telif alpha_mode == 1 :\n\t\t\t\t\tif i.lower() in whitelist\['ca'] :\n\t\t\t\t\t\tnewnode\['alpha'].setValue( '\{0\}'.format( i ) )\n\t\t\t\t\t\taset = chans + '.alpha'\n\t\t\t\t\telse :\n\t\t\t\t\t\taset = chans + ' no alpha found'\n\t\t\t\telif alpha_mode == 2 :\n\t\t\t\t\tnewnode\['alpha'].setValue( 'black' )\n\t\t\t\t\taset = '0'\n\t\t\t\telif alpha_mode == 3 :\n\t\t\t\t\tnewnode\['alpha'].setValue( 'white' )\n\t\t\t\t\taset = '1'\n\t\telse :\n\t\t\tnewnode = nuke.nodes.Expression( channel0='red' , channel1='green' , channel2='blue' , channel3='alpha' , expr0='0' , expr1='0', expr2='0' , expr3='0' , tile_color=mainSet\[0] )\n\t\t\tfor i in color :\n\t\t\t\tif i.lower() in whitelist\['cr'] :\n\t\t\t\t\tnewnode\['expr0'].setValue( '\{0\}.\{1\}'.format( chans , i ) )\n\n\t\t\t\tif i.lower() in whitelist\['cg'] :\n\t\t\t\t\tnewnode\['expr1'].setValue( '\{0\}.\{1\}'.format( chans , i ) )\n\n\t\t\t\tif i.lower() in whitelist\['cb'] :\n\t\t\t\t\tnewnode\['expr2'].setValue( '\{0\}.\{1\}'.format( chans , i ) )\n\n\t\t\t\tif alpha_mode == 0 :\n\t\t\t\t\tnewnode\['expr3'].setValue( 'rgba.alpha' )\n\t\t\t\t\taset = 'rgba.alpha'\n\t\t\t\telif alpha_mode == 1 :\n\t\t\t\t\tif i.lower() in whitelist\['ca'] :\n\t\t\t\t\t\tnewnode\['expr3'].setValue( '\{0\}.\{1\}'.format(chans , i ) )\n\t\t\t\t\t\taset = chans + '.alpha'\n\t\t\t\t\telse :\n\t\t\t\t\t\taset = chans + ' no alpha found'\n\t\t\t\telif alpha_mode == 2 :\n\t\t\t\t\tnewnode\['expr3'].setValue( '0' )\n\t\t\t\t\taset = '0'\n\t\t\t\telif alpha_mode == 3 :\n\t\t\t\t\tnewnode\['expr3'].setValue( '1' )\n\t\t\t\t\taset = '1'\n\n\tnewnode\['label'].setValue( '' + chans + '
    alpha : ' + aset)\n\t\n\treturn newnode\n\n#########\n\ndef geoCheckout( filepath, frameST, frameED, thisG ) :\n\timport random\n\txspace = nuke.toNode('preferences')\['GridWidth'].getValue() + random.randint(0,nuke.toNode('preferences')\['GridWidth'].getValue()*3)\n\n\titem_ls = \[]\n\tfor i in thisG.knobs() :\n\t\tif thisG\[i].Class() == 'Boolean_Knob' and i\[:3] == 'cs_' :\n\t\t\tif thisG\[i].getValue() == 1 :\n\t\t\t\titem_ls.append( '/root/' + thisG\[i].label() )\n\n\tnewRG = nuke.nodes.ReadGeo2( file=filepath , range_first=frameST , range_last=frameED , tile_color=int(thisG\['tile_color'].getValue()) , xpos=int(thisG.xpos()+xspace) , ypos=int(thisG.ypos()) )\n\tnewRG.showControlPanel()\n\tif thisG\['import_method'].getValue() == 0 :\n\t\tnewRG\['scene_view'].setImportedItems( item_ls )\n\telse :\n\t\tnewRG\['scene_view'].setImportedItems( newRG\['scene_view'].getAllItems() )\n\tnewRG\['scene_view'].setSelectedItems( item_ls )\n\tnewRG.hideControlPanel()" +STARTLINE} } NoOp { inputs 0 name version_tag tile_color 0xffb700ff xpos -546 ypos 127 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2020-01-07} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.1
    - when input support 2D or Deep, it will prompt up selection for user
      (e.g. input from scanlineRender)
    - input type - Geo
      changed knobs to checkbox instead of button
    - exposed r,g,b,a define setting,
      so user can setup their own rgba naming list.
    - unblock deep & depth channel when input is deep,
      so user can shuffle these 2 channels out if input is deep.

    1.0
    - quickly create shuffle nodes
    - quickly generate ReadGeo with selection
    - input support 2D data, deep data and ReadGeo data.\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_vector3DMathExpression.gizmo ================================================ NoOp { name vector3DMathExpression help "Can be used to calculate a vector between 2 points in 3D space.\nAlso the distance between these points.\nCan be used along reconcile3d nodes." selected true addUserKnob {20 User} addUserKnob {13 v1 l "Vector 1" t Point1} addUserKnob {13 v2 l "Vector 2" t Point2} addUserKnob {26 ""} addUserKnob {13 v4 l "v4 = v1 - v2"} v4 {{v1-v2} {v1-v2} {v1-v2}} addUserKnob {7 mag_v4 l Magnitude_v4 R 0 100} mag_v4 {{sqrt(pow(v4.x,2)+pow(v4.y,2)+pow(v4.z,2))}} } ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_viewer_render.gizmo ================================================ Group { name viewer_render inputs 0 tile_color 0xb7a939ff addUserKnob {20 User} addUserKnob {1 viewer_node l "viewer node"} viewer_node Viewer1 addUserKnob {2 filepath l "file path"} addUserKnob {26 remarks l "" -STARTLINE T "- only support *.jpg"} addUserKnob {41 set_type l "set type" T menu1.set_type} addUserKnob {3 select_frame l "select frame" +DISABLED} select_frame 1001 addUserKnob {3 frameST l "frame range" +DISABLED} frameST 1001 addUserKnob {3 frameED l "" -STARTLINE +DISABLED} frameED 1010 addUserKnob {26 ""} addUserKnob {22 render T "thisGRP = nuke.thisGroup()\nnode = thisGRP\['viewer_node'].getValue()\npath = thisGRP\['filepath'].value()\ngetType = thisGRP\['set_type'].getValue()\ncheck = 0\n\nerror = \['Invalid file extension, only *.jpg support.','Invalid frame padding.','file path is empty']\n\nif len(path) != 0 :\n if getType < 2 :\n if getType == 0 :\n frameSet = int(nuke.frame())\n if getType == 1 :\n frameSet = int(thisGRP\['select_frame'].getValue())\n\n if path\[len(path)-4:-3] == '.' :\n if path\[len(path)-3:].lower() != 'jpg' :\n nuke.message(error\[0])\n else :\n newPath = path\n check += 1\n else :\n newPath = path + '.jpg'\n check += 1\n\n if check == 1 :\n nuke.toNode(node)\['file'].setValue(newPath)\n nuke.render(node, frameSet, frameSet)\n nuke.toNode(node)\['file'].setValue('')\n else :\n if getType == 2 :\n frameST = int(nuke.root().firstFrame())\n frameED = int(nuke.root().lastFrame())\n else :\n frameST = int(thisGRP\['frameST'].getValue())\n frameED = int(thisGRP\['frameED'].getValue())\n\n if path\[len(path)-4:-3] == '.' :\n if path\[len(path)-3:].lower() != 'jpg' :\n nuke.message('Invalid file extension, only *.jpg support.')\n else :\n newPath = path\n check += 1\n else :\n newPath = path + '.jpg'\n check += 1\n\n if check == 1 :\n if newPath\[-5:].lower() == 'd.jpg' :\n if newPath\[-8:-7] == '%' :\n if len(newPath\[newPath.find('%')+1:newPath.find('d.jpg')]) == 2 :\n if newPath\[newPath.find('%')+1:newPath.find('d.jpg')]\[:-1] == 0 :\n padding = int(newPath\[newPath.find('%')+1:newPath.find('d.jpg')]\[1:])\n else :\n padding = int(newPath\[newPath.find('%')+1:newPath.find('d.jpg')])\n\n for time in range (frameST, frameED+1, 1) :\n filePadding = list(str(time))\n while len(filePadding) < padding :\n filePadding.insert(0, '0')\n \n frameFilepath = newPath\[:newPath.find('%')] + ''.join(filePadding) + newPath\[newPath.find('.jpg'):]\n nuke.toNode(node)\['file'].setValue(frameFilepath)\n nuke.render(node, time, time)\n nuke.toNode(node)\['file'].setValue('')\n else :\n nuke.message(error\[1])\n else :\n nuke.message(error\[1])\n else :\n nuke.message(error\[1])\nelse :\n nuke.message(error\[2])" +STARTLINE} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2018/06/23} addUserKnob {26 l_CHANGELOG l Changelog T "1.0\n- render viewer with all UI\n like playblast in maya"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } NoOp { inputs 0 name menu1 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['set_type'].getValue() == 0 or thisGRP\['set_type'].getValue() == 2 :\n thisGRP\['select_frame'].setEnabled(False)\n thisGRP\['frameST'].setEnabled(False)\n thisGRP\['frameED'].setEnabled(False)\nif thisGRP\['set_type'].getValue() == 1 :\n thisGRP\['select_frame'].setEnabled(True)\n thisGRP\['frameST'].setEnabled(False)\n thisGRP\['frameED'].setEnabled(False)\nif thisGRP\['set_type'].getValue() == 3 :\n thisGRP\['select_frame'].setEnabled(False)\n thisGRP\['frameST'].setEnabled(True)\n thisGRP\['frameED'].setEnabled(True)\n" selected true xpos -47 ypos 2 addUserKnob {20 User} addUserKnob {4 set_type l "set type" M {"current still frame" "another still frame" "frame sequence (project setting range)" "frame sequence (custom range)" "" "" ""}} set_type "frame sequence (project setting range)" } end_group ================================================ FILE: NukeSurvivalToolkit/gizmos/NST_waterSchmutz.gizmo ================================================ Group { name waterSchmutz tile_color 0x421010ff selected true addUserKnob {20 User l waterSchmutz} addUserKnob {41 cube l boundaries T Cube1.cube} addUserKnob {26 ""} addUserKnob {41 translate T Cube1.translate} addUserKnob {41 rotate T Cube1.rotate} addUserKnob {26 ""} addUserKnob {6 spriteView +STARTLINE} addUserKnob {6 customSpriteSwitch l "custom sprite" -STARTLINE} addUserKnob {41 start_frame l "start at" T ParticleEmitter3.start_frame} addUserKnob {7 particleDensity l "particle density"} particleDensity 1 addUserKnob {41 size T ParticleEmitter3.size} addUserKnob {41 size_variation l "size range" T ParticleEmitter3.size_variation} addUserKnob {22 update l "Refresh Particles" T "import random\nnuke.thisNode().knob('seed').setValue( random.randint(1,16384) )" +STARTLINE} addUserKnob {3 seed -STARTLINE} seed 4191 addUserKnob {41 to l "wind direction" T ParticleWind1.to} addUserKnob {6 wrapPart l "wrap particles" +STARTLINE} wrapPart true addUserKnob {7 edgefade l "edge fade"} edgefade 0.4 addUserKnob {26 ""} addUserKnob {7 tScale l "turbulence scale" R 0 10} tScale 8 addUserKnob {7 tStrength l "turbulence stregth"} tStrength 1 addUserKnob {26 ""} addUserKnob {26 lbl l "" +STARTLINE T "waterSchmutz v1.5"} addUserKnob {22 btn l DerekVFX.ca T "import os\nimport sys\n\ntry:\n import subprocess\n def _run(cmd, shell, wait):\n opener = subprocess.Popen(cmd, shell=shell)\n if wait:\n opener.wait()\n return opener.pid\nexcept ImportError:\n import popen2\n def _run(cmd, shell, wait):\n opener = popen2.Popen3(cmd)\n if wait:\n opener.wait()\n return opener.pid\n\ndef _open(url, wait=0):\n if sys.platform == \"darwin\":\n cmd = \[\"open\", url]\n elif hasattr(os, \"startfile\"):\n return os.startfile(url)\n elif os.environ.has_key(\"KDE_FULL_SESSION\") or os.environ.has_key(\"KDE_MULTIHEAD\") or \\\n os.environ.has_key(\"GNOME_DESKTOP_SESSION_ID\") or os.environ.has_key(\"GNOME_KEYRING_SOCKET\"):\n cmd = \[\"xdg-open\", url]\n else:\n raise OSError, \"Desktop not supported.\"\n\n return _run(cmd, 0, wait)\n\n_open('http://www.derekvfx.ca/')" +STARTLINE} addUserKnob {20 render l renderSettings} addUserKnob {41 format l "output format" T Reformat3.format} addUserKnob {41 antialiasing T ScanlineRender1.antialiasing} addUserKnob {41 overscan T ScanlineRender1.overscan} addUserKnob {6 proxyRender l "proxy mode" +STARTLINE} proxyRender true addUserKnob {6 guiDisable l "GUI Disable" +STARTLINE} addUserKnob {26 ""} addUserKnob {41 samples T ScanlineRender1.samples} addUserKnob {41 shutter T ScanlineRender1.shutter} addUserKnob {41 stochastic_samples l "stochastic samples" T ScanlineRender1.stochastic_samples} addUserKnob {20 particleSettings} addUserKnob {41 format_1 l format T Constant1.format} addUserKnob {41 first l "frame range" T Constant1.first} addUserKnob {41 last l "" -STARTLINE T Constant1.last} addUserKnob {41 start_frame_animation l "start at" T ParticleEmitter3.start_frame_animation} addUserKnob {41 start_wrap l "limit to range" -STARTLINE T ParticleEmitter3.start_wrap} addUserKnob {41 frame_advance l advance T ParticleEmitter3.frame_advance} addUserKnob {41 max_clip_length l "max clip length" -STARTLINE T ParticleEmitter3.max_clip_length} addUserKnob {26 div l "" +STARTLINE T " "} addUserKnob {20 spriteSettings n 1} addUserKnob {41 type T Noise1.type} addUserKnob {41 size_1 l x/ysize T Noise1.size} addUserKnob {41 zoffset l z T Noise1.zoffset} addUserKnob {41 gain T Noise1.gain} addUserKnob {20 endGroup n -1} } Cube { inputs 0 display wireframe render_mode wireframe rows 1 columns 1 cube {-500 0 -500 500 500 500} pivot {{"abs(cube.x-cube.r)/2+((cube.x 0 & frame-start_frame < 2 ? ((Cube1.volume/1000000)*particleDensity) : 0"}} lifetime inf velocity 0 size 1 size_variation 4 start_wrap true seed {{parent.seed}} name ParticleEmitter3 knobChanged 5 xpos -714 ypos 461 disable {{"guiDisable ? \$gui : 0"}} } ParticleExpression { temp_name1 c temp_expr1 "v(\[value Cube1.cube.x],\[value Cube1.cube.y],\[value Cube1.cube.n])" temp_name2 b temp_expr2 "v(\[value Cube1.cube.r],\[value Cube1.cube.t],\[value Cube1.cube.f])" posexpr v(random*abs(x(c)-x(b))+x(c),random*abs(y(c)-y(b))+y(c),random*abs(z(c)-z(b))+z(c)) posexpr_onlynew true name spread xpos -714 ypos 487 disable {{"guiDisable ? \$gui : 0"}} } ParticleTurbulence { strength {{waterSchmutz.tStrength} {strength.x} {strength.x}} scale {{waterSchmutz.tScale} {scale.x} {scale.x}} name ParticleTurbulence1 xpos -714 ypos 525 disable {{"guiDisable ? \$gui : 0"}} } ParticleWind { to {5 0 0} name ParticleWind1 xpos -714 ypos 563 disable {{"guiDisable ? \$gui : 0"}} } ParticleExpression { temp_name1 f temp_expr1 "v(\[value Cube1.cube.x],\[value Cube1.cube.y],\[value Cube1.cube.n])" temp_name2 b temp_expr2 "v(\[value Cube1.cube.r],\[value Cube1.cube.t],\[value Cube1.cube.f])" temp_name3 poz temp_expr3 pos posexpr v(x(poz)>x(b)?x(f):(x(poz)y(b)?y(f):(y(poz)z(b)?z(f):(z(poz)= lastFrameOut ? \{\} : tmp2\".format(modeBefore, modeAfter)\n k_output.setExpression(expression)\nknobChanged()" tile_color 0xb09549ff note_font Verdana addUserKnob {20 User} addUserKnob {41 inp1 +INVISIBLE T upstreamValue5.output} addUserKnob {3 firstFrame l "input range" t "First frame of input to use"} firstFrame 1001 addUserKnob {3 lastFrame l "" t "Last frame of input to use" -STARTLINE} lastFrame 1101 addUserKnob {22 getInputFromParentRange l "From Input" -STARTLINE T "#========================================\n# getInputFromParentRange\n#========================================\nimport nuke\ndef getAnimationRange(knob):\n frameRange = \[0, 0]\n anims = knob.animations()\[0:]\n if anims:\n anim = knob.animation(0)\n keys = anim.keys()\n frameRange\[0] = int(keys\[0].x)\n frameRange\[1] = int(keys\[-1].x)\n return frameRange\n\ndef main():\n node = nuke.thisNode()\n frameRange = \[]\n if node.inputs():\n pNode = node.input(0)\n knob = pNode.knob(\"custom\")\n if knob:\n # 1) waveCustom : Get first and last keyframe\n frameRange = getAnimationRange(knob)\n if not knob:\n knob = pNode.knob(\"waveLength\")\n if knob:\n rootFirst = nuke.root().knob(\"first_frame\").value()\n frameRange = \[int(rootFirst), int(knob.value()-1+rootFirst)]\n if not knob:\n knob = pNode.knob(\"firstFrameOut\")\n if knob:\n knob2 = pNode.knob(\"lastFrameOut\")\n frameRange = \[int(knob.value()), int(knob2.value())]\n if frameRange:\n node.knob(\"firstFrame\").setValue(frameRange\[0])\n node.knob(\"lastFrame\").setValue(frameRange\[1])\n else:\n nuke.alert(\"Can't get input range\\n\\nNeeds a waveRetime waveCustom or waveMaker node as input to be able to fetch range\")\nmain()"} addUserKnob {3 firstFrameOut l "output range" t "First frame of output"} firstFrameOut 1001 addUserKnob {3 lastFrameOut l "" t "Last frame of output" -STARTLINE} lastFrameOut 1101 addUserKnob {22 setOutputFromInputRange l "From Input" -STARTLINE T "import nuke\n\ndef main():\n node = nuke.thisNode()\n firstFrame = node.knob(\"firstFrame\").value()\n lastFrame = node.knob(\"lastFrame\").value()\n node.knob(\"firstFrameOut\").setValue(firstFrame)\n node.knob(\"lastFrameOut\").setValue(lastFrame)\nmain()"} addUserKnob {22 getOutputFromProjectRange l "From Project" -STARTLINE T "import nuke\n\ndef main():\n node = nuke.thisNode()\n root = nuke.root()\n firstFrame = root.knob(\"first_frame\").value()\n lastFrame = root.knob(\"last_frame\").value()\n node.knob(\"firstFrameOut\").setValue(firstFrame)\n node.knob(\"lastFrameOut\").setValue(lastFrame)\nmain()"} addUserKnob {7 speed R 0.1 10} speed 1 addUserKnob {4 before M {loop hold}} before hold addUserKnob {4 after M {loop hold}} after hold addUserKnob {7 loopCount +INVISIBLE} loopCount {{floor((frame-firstFrame)/(lastFrame-firstFrame))}} addUserKnob {7 frm t "Which frame of the original frame to show" +INVISIBLE} frm {{frame-((lastFrame-firstFrame+1)*loopCount)}} addUserKnob {7 tmp t "inpValue at frm" +INVISIBLE} tmp {{"loopCount < 0 ? (before == 1 ? inp1(firstFrame) : inp1(frm)) : loopCount > 0 ? (after == 1 ? inp1(lastFrame) : inp1(frm)) : inp1(frm)"}} addUserKnob {7 tmp2 t "show tmp at frame+(firstFrameOut-firstFrame)" +INVISIBLE} tmp2 {{tmp((frame+(firstFrame-firstFrameOut)-firstFrameOut)*speed+firstFrameOut)}} addUserKnob {7 output} output {{"disable ? inp1 : frame <= firstFrameOut ? tmp2(firstFrameOut) : frame >= lastFrameOut ? tmp2(lastFrameOut) : tmp2"}} addUserKnob {26 ""} addUserKnob {26 credits l "" +STARTLINE T "WaveRetime v1.0 | Fynn Laue 2020"} } Input { inputs 0 name Input1 xpos -40 ypos 39 } Group { name upstreamValue5 onCreate "n = nuke.thisNode()\n# Hide these knobs from the curve editor\nn.knob(\"output\").setFlag(0x20000000)" label v005 xpos -40 ypos 150 addUserKnob {20 User} addUserKnob {43 pNode t "this script finds the upstream value. Or rather the name of the node and appends a .\nThis is then used in an expression appended by a knob name to get that knob's value." +INVISIBLE} pNode "\[\n # This throws error 'Nothing is named \"Nothing\"' when node has no input0\n # set x \[node this.input0]\n set starting_point \"this.input0\"\n set default \"this.d_\"\n\n # Set x to input if it exists, otherwise return default\n if \{\[exists \$starting_point]\} \{\n set x \[node \$starting_point]\n \} \{\n return \$default\n \}\n\n set finished 0\n while \{\$finished != 1\} \{\n # First look for a specific node type\n set skip_node 1\n while \{\$skip_node == 1\} \{\n # TODO: Make better grouping to reduce nested if statements\n if \{(\[class \$x] != \"Group\" && \[class \$x] != \"Input\" && \$x != \[topnode \$x])\} \{\n set x \[node \$x.input0]\n \} \{\n # Stop at first enabled Group node\n if \{(\[class \$x] == \"Group\") || (\[class \$x] == \"Input\")\} \{\n set skip_node 0\n \} \{\n if \{\$x == \[topnode \$x]\} \{\n return \$default\n \} \{\n set x \[node \$x.input0]\n \}\n \}\n \}\n \}\n # Return Group node if it has an output knob\n if \{\[class \$x] == \"Group\" && \[exists \$x.output]\} \{\n set x \[append x \".\"]\n return \$x\n \} \{\n # If node is an Input node (of a Group node), return its parent\n if \{\[class \$x]==\"Input\"\} \{\n set inp \"\$x.parent.input\"\n set inputNum \[value \$x.number]\n set inp \[append inp \$inputNum]\n if \{\[exists \$inp]\} \{\n set x \[node \$inp]\n \} \{\n set finished 1\n \}\n \} \{\n set finished 1\n \}\n \}\n \}\n return \$default\n]" addUserKnob {7 d_output t "if no upstream value is found, default to this value"} addUserKnob {7 output} output {{"\[value knob.pNode]output"}} addUserKnob {26 ""} addUserKnob {26 credit l "" +STARTLINE T "upstreamValue v1.0 | Fynn Laue 2020"} } Input { inputs 0 name Input1 xpos 0 } Output { name Output1 xpos 0 ypos 300 } end_group Output { name Output1 xpos -40 ypos 303 } end_group ================================================ FILE: NukeSurvivalToolkit/init.py ================================================ ''' @author: Tony Lyons (creativelyons@gmail.com) # init.py ''' # import os # import nuke ================================================ FILE: NukeSurvivalToolkit/menu.py ================================================ #***************************************************************** #***************************************************************** # This file will setup the NukeSurvivalToolkit Menu on your Toolbar # Written by Tony Lyons 09/2020 | www.CreativeLyons.com | www.CompositingMentor.com #***************************************************************** #***************************************************************** # Imports import nuke import sys import os from pathlib import Path ############################################################################################################ # Add PluginPaths to tools and icons nuke.pluginAddPath('./gizmos') nuke.pluginAddPath('./python') nuke.pluginAddPath('./icons') nuke.pluginAddPath('./images') nuke.pluginAddPath('./nk_files') # Import some helpful functions for the NST import NST_helper # This is the prefix being used to customize the gizmo's in this toolkit global prefixNST prefixNST = "NST_" # Store the location of this menu.py to help with nuke.nodePaste() which requires a filepath to paste # Use Path.as_posix() to ensure forward slashes on all platforms (fixes Windows path issues) NST_FolderPath = Path(__file__).parent.as_posix() NST_helper.NST_FolderPath = NST_FolderPath ############################################################################################################ # Helpers to keep code readable def nk_path(filename, prefix=False): """Return full path to an .nk file in nk_files folder.""" name = f"{prefixNST}{filename}" if prefix else filename return f"{NST_FolderPath}/nk_files/{name}" def icon_path(filename): """Return full path to an icon file.""" return f"{NST_FolderPath}/icons/{filename}" ############################################################################################################ # User Configuration Variables ############################################################################################################ # Documentation behavior/config (kept in menu.py for explicit user editing) NST_helper.NST_DOCS_ONLINE_URL = "https://creativelyons.github.io/NukeSurvivalToolkit_Wiki/" NST_helper.NST_DOCS_ONLINE_TIMEOUT_SECONDS = 1.5 NST_helper.NST_DOCS_PDF_NAME = "NukeSurvivalToolkit_Documentation_Release_v2.2.0.pdf" NST_helper.NST_DOCS_OFFLINE_INDEX = Path("NST_Documentation/index.html") # Set to True to load the Expression Nodes AG submenu under Draw; set to False to skip it LOAD_EXPRESSION_MENU = False ############################################################################################################ # End of User Configuration Variables ############################################################################################################ ############################################################################################################ # Start of Menu Creation ############################################################################################################ # Create NukeSurivalToolkit Menu toolbar = nuke.menu('Nodes') NST_menu = toolbar.addMenu('NukeSurvivalToolkit', icon = "SurvivalToolkit.png") ############################################################################################################ ############################################################################################################ # Create Documentation Submenu documentationMenu = NST_menu.addMenu("Documentation", icon="info_icon.png", index=00) documentationMenu.addCommand("Wiki\\/Docs (Auto)", "NST_helper.openNSTDocumentationDefault()", icon="wiki_default.png") documentationMenu.addCommand("Wiki (Online)", "NST_helper.openNSTDocumentationOnline()", icon="wiki_online.png") documentationMenu.addCommand("Wiki (Offline)", "NST_helper.openNSTDocumentationOffline()", icon="wiki_offline.png") documentationMenu.addCommand("Docs (PDF)", "NST_helper.openNSTDocumentationPDF()", icon="StickyNote.png") ############################################################################################################ ############################################################################################################ # Create Image Menu imageMenu = NST_menu.addMenu('Image', icon = 'ToolbarImage.png', index = 10) imageMenu.addCommand('LabelFromRead TL', f"nuke.createNode('{prefixNST}LabelFromRead')", icon="LabelFromRead.png") ############################################################################################################ ############################################################################################################ # Create Draw Menu drawMenu = NST_menu.addMenu('Draw', icon = 'ToolbarDraw.png', index = 20) if LOAD_EXPRESSION_MENU: expressionMenu = drawMenu.addMenu("Expression Nodes AG", icon=icon_path("expr.png"), index=000) expressionMenu.addMenu('Creations', icon=icon_path("expr_01.png")) expressionMenu.addMenu('Alpha', icon=icon_path("expr_02.png")) expressionMenu.addMenu('Pixel', icon=icon_path("expr_03.png")) expressionMenu.addMenu('Keying and Despill', icon=icon_path("expr_04.png")) expressionMenu.addMenu('Transform', icon=icon_path("expr_05.png")) expressionMenu.addMenu('3D and Deep', icon=icon_path("expr_06.png")) #CREATIONS expressionMenu.addCommand('Creations/Random/Random Colors', f'nuke.nodePaste("{nk_path("Random_colors.nk")}")') expressionMenu.addCommand('Creations/Random/Random every Frame', f'nuke.nodePaste("{nk_path("Random_every_frame.nk")}")') expressionMenu.addCommand('Creations/Random/Random every Pixel', f'nuke.nodePaste("{nk_path("Random_every_pixel.nk")}")') #expressionMenu.addCommand('Creations/Noise/Noise', f'nuke.nodePaste("{nk_path("Noise.nk")}")') #expressionMenu.addCommand('Creations/Noise/fBm', f'nuke.nodePaste("{nk_path("fBm.nk")}")') #expressionMenu.addCommand('Creations/Noise/Turbulence', f'nuke.nodePaste("{nk_path("turbulence.nk")}")') expressionMenu.addCommand('Creations/lines vertical', f'nuke.nodePaste("{nk_path("Lines_Vertical.nk")}")') expressionMenu.addCommand('Creations/lines horizontal', f'nuke.nodePaste("{nk_path("Lines_Horizontal.nk")}")') expressionMenu.addCommand('Creations/lines vertical animated', f'nuke.nodePaste("{nk_path("Lines_Vertical_Animated.nk")}")') expressionMenu.addCommand('Creations/lines horizontal animated', f'nuke.nodePaste("{nk_path("Lines_Horizontal_Animated.nk")}")') expressionMenu.addCommand('Creations/circles', f'nuke.nodePaste("{nk_path("circles.nk")}")') expressionMenu.addCommand('Creations/circles user', f'nuke.nodePaste("{nk_path("circles_user.nk")}")') expressionMenu.addCommand('Creations/points', f'nuke.nodePaste("{nk_path("points.nk")}")') expressionMenu.addCommand('Creations/points advanced', f'nuke.nodePaste("{nk_path("points_advanced.nk")}")') expressionMenu.addCommand('Creations/bricks', f'nuke.nodePaste("{nk_path("bricks.nk")}")') expressionMenu.addCommand('Creations/gradient horizontal', f'nuke.nodePaste("{nk_path("gradient_horizontal.nk")}")') expressionMenu.addCommand('Creations/gradient horizontal invert', f'nuke.nodePaste("{nk_path("gradient_horizontal_invert.nk")}")') expressionMenu.addCommand('Creations/gradient vertical', f'nuke.nodePaste("{nk_path("gradient_vertical.nk")}")') expressionMenu.addCommand('Creations/gradient vertical invert', f'nuke.nodePaste("{nk_path("gradient_vertical_invert.nk")}")') expressionMenu.addCommand('Creations/gradient 4 corners', f'nuke.nodePaste("{nk_path("GradientCorner.nk")}")') expressionMenu.addCommand('Creations/radial', f'nuke.nodePaste("{nk_path("radial.nk")}")') expressionMenu.addCommand('Creations/radial gradient', f'nuke.nodePaste("{nk_path("radial_gradient.nk")}")') expressionMenu.addCommand('Creations/radial rays', f'nuke.nodePaste("{nk_path("radial_rays.nk")}")') expressionMenu.addCommand('Creations/Trunc', f'nuke.nodePaste("{nk_path("Trunc.nk")}")') #ALPHA expressionMenu.addCommand('Alpha/alpha binary', f'nuke.nodePaste("{nk_path("alpha_binary.nk")}")') expressionMenu.addCommand('Alpha/alpha comparison', f'nuke.nodePaste("{nk_path("alpha_comparison.nk")}")') expressionMenu.addCommand('Alpha/alpha exists?', f'nuke.nodePaste("{nk_path("alpha_exists.nk")}")') expressionMenu.addCommand('Alpha/alpha sum', f'nuke.nodePaste("{nk_path("alpha_sum.nk")}")') #PIXEL expressionMenu.addCommand('Pixel/absolute value', f'nuke.nodePaste("{nk_path("abs.nk")}")') expressionMenu.addCommand('Pixel/check negative', f'nuke.nodePaste("{nk_path("check_negative.nk")}")') expressionMenu.addCommand('Pixel/check nan inf pixels', f'nuke.nodePaste("{nk_path("check_nan_inf.nk")}")') expressionMenu.addCommand('Pixel/create nan pixel', f'nuke.nodePaste("{nk_path("create_nan.nk")}")') expressionMenu.addCommand('Pixel/kill nan pixel', f'nuke.nodePaste("{nk_path("kill_nan.nk")}")') expressionMenu.addCommand('Pixel/create inf pixel', f'nuke.nodePaste("{nk_path("create_inf.nk")}")') expressionMenu.addCommand('Pixel/kill inf pixel', f'nuke.nodePaste("{nk_path("kill_inf.nk")}")') #TRANSFORM expressionMenu.addCommand('Transform/Coordinates', f'nuke.nodePaste("{nk_path("coordinates.nk")}")') expressionMenu.addCommand('Transform/UV to Vector', f'nuke.nodePaste("{nk_path("UV_to_Vector.nk")}")') expressionMenu.addCommand('Transform/Vector to UV', f'nuke.nodePaste("{nk_path("Vector_to_UV.nk")}")') expressionMenu.addCommand('Transform/transform', f'nuke.nodePaste("{nk_path("transform.nk")}")') expressionMenu.addCommand('Transform/transform advanced', f'nuke.nodePaste("{nk_path("transform_advanced.nk")}")') expressionMenu.addCommand('Transform/twist', f'nuke.nodePaste("{nk_path("twist.nk")}")') expressionMenu.addCommand('Transform/STMap_invert', f'nuke.nodePaste("{nk_path("STMap_invert.nk")}")') #3D and DEEP expressionMenu.addCommand('3D and Deep/Normal Pass - Relight', f'nuke.nodePaste("{nk_path("normalPass_relight.nk")}")') expressionMenu.addCommand('3D and Deep/C4x4', f'nuke.nodePaste("{nk_path("C4x4.nk")}")') expressionMenu.addCommand('3D and Deep/Deep to Depth', f'nuke.nodePaste("{nk_path("deepToDepth.nk")}")') expressionMenu.addCommand('3D and Deep/Depth normalize', f'nuke.nodePaste("{nk_path("depth_normalize.nk")}")') #KEYING and DESPILL expressionMenu.addCommand('Keying and Despill/despill green', f'nuke.nodePaste("{nk_path("despill_green.nk")}")') expressionMenu.addCommand('Keying and Despill/despill green list', f'nuke.nodePaste("{nk_path("despill_green_list.nk")}")') expressionMenu.addCommand('Keying and Despill/despill blue', f'nuke.nodePaste("{nk_path("despill_blue.nk")}")') expressionMenu.addCommand('Keying and Despill/despill blue list', f'nuke.nodePaste("{nk_path("despill_blue_list.nk")}")') expressionMenu.addCommand('Keying and Despill/keying', f'nuke.nodePaste("{nk_path("keying.nk")}")') expressionMenu.addCommand('Keying and Despill/differenceKey', f'nuke.nodePaste("{nk_path("differenceKey.nk")}")') expressionMenu.addCommand('Keying and Despill/IBKGizmo_Expression', f'nuke.nodePaste("{nk_path("IBKGizmo_Expression.nk")}")') expressionMenu.addSeparator() #INFO expressionMenu.addCommand('Info e Tutorial', "nuke.tcl('start', 'http://www.andreageremia.it/tutorial_expression_node.html')", icon=icon_path("question_mark.png")) drawMenu.addSeparator() drawMenu.addCommand('ConstantPro TL', f"nuke.createNode('{prefixNST}ConstantPro')", icon="Constant.png") drawMenu.addCommand('HexColor NW', f"nuke.createNode('{prefixNST}HexColor')", icon="Constant.png") drawMenu.addCommand('GradMagic TL', f"nuke.createNode('{prefixNST}GradMagic')", icon="GradMagic.png") drawMenu.addCommand('NoiseAdvanced TL', f"nuke.createNode('{prefixNST}NoiseAdvanced')", icon="Noise.png") drawMenu.addCommand('RadialAdvanced TL', f"nuke.createNode('{prefixNST}RadialAdvanced')", icon="Radial.png") drawMenu.addCommand('UV Map AG', f"nuke.createNode('{prefixNST}UV_Map')", icon="AG_UVMap.png") drawMenu.addCommand("SpotLight TL", f"nuke.createNode('{prefixNST}SpotLight')", icon="Radial.png") drawMenu.addCommand("Rings of Power TL", f"nuke.createNode('{prefixNST}Rings_of_Power')", icon="MergeIn.png") drawMenu.addSeparator() drawMenu.addCommand('WaterLens MJT', f"nuke.createNode('{prefixNST}WaterLens')", icon="WaterLens.png") drawMenu.addCommand("Silk MHD", f"nuke.createNode('{prefixNST}h_silk')", icon="h_silk.png") # Try to add GradientEditor try: import ColorGradientUi drawMenu.addCommand("GradientEditor MHD", f"nuke.createNode('{prefixNST}h_gradienteditor')", icon="h_gradienteditor.png") except ImportError as e: print(f"Could not load ColorGradientUi from HagbarthTools folder: {e}") pass drawMenu.addSeparator() drawMenu.addCommand('VoronoiGradient NW', f"nuke.createNode('{prefixNST}VoronoiGradient')", icon="GradMagic.png") drawMenu.addCommand('CellNoise NKPD', f"nuke.createNode('{prefixNST}CellNoise')", icon="Noise.png") drawMenu.addCommand('LineTool NKPD', f"nuke.createNode('{prefixNST}LineTool')", icon="nukepedia_icon.png") drawMenu.addCommand('PlotScanline NKPD', f"nuke.createNode('{prefixNST}PlotScanline')", icon="nukepedia_icon.png") drawMenu.addCommand('SliceTool FR', f"nuke.createNode('{prefixNST}SliceTool')", icon="Histogram.png") drawMenu.addCommand('PerspectiveGuide NKPD', f"nuke.createNode('{prefixNST}PerspectiveGuide')", icon="nukepedia_icon.png") drawMenu.addSeparator() drawMenu.addCommand('DasGrain FH', f"nuke.createNode('{prefixNST}DasGrain')", icon="Grain.png") drawMenu.addCommand('LumaGrain LUMA', f"nuke.createNode('{prefixNST}LumaGrain')", icon="nukepedia_icon.png") drawMenu.addCommand('Grain_Advanced SPIN', f"nuke.createNode('{prefixNST}Grain_Advanced')", icon="spin_tools.png") drawMenu.addSeparator() drawMenu.addCommand("X_Tesla XM", f"nuke.createNode('{prefixNST}X_Tesla')", icon="X_Tesla.png") drawMenu.addCommand('SpotFlare MHD', f"nuke.createNode('{prefixNST}SpotFlare')", icon="Flare.png") drawMenu.addCommand('FlareSuperStar NKPD', f"nuke.createNode('{prefixNST}FlareSuperStar')", icon="nukepedia_icon.png") drawMenu.addCommand('AutoFlare NKPD', f"NST_helper.filepathCreateNode('{prefixNST}AutoFlare2')", icon="Flare.png") drawMenu.addCommand("BokehBuilder KB", f"nuke.createNode('{prefixNST}BokehBuilder')", icon="K_BokehBuilder.png") drawMenu.addCommand("LensEngine KB", f"nuke.createNode('{prefixNST}LensEngine')", icon="K_LensEngine.png") ############################################################################################################ ############################################################################################################ # Create Time Menu timeMenu = NST_menu.addMenu('Time', icon = 'ToolbarTime.png', index = 30) timeMenu.addCommand('apLoop AP', f'nuke.createNode("{prefixNST}apLoop")', icon='apLoop.png') timeMenu.addSeparator() timeMenu.addCommand('FrameHold Special AG', f"nuke.createNode('{prefixNST}FrameHoldSpecial')", icon="FrameHold.png") timeMenu.addCommand('Looper DB', f"nuke.createNode('{prefixNST}Looper')", icon="nukepedia_icon.png") timeMenu.addCommand('FrameMedian MHD', f"nuke.createNode('{prefixNST}FrameMedian')", icon="FrameBlend.png") timeMenu.addCommand('TimeMachine NKPD', f"nuke.createNode('{prefixNST}TimeMachine')", icon="nukepedia_icon.png") timeMenu.addCommand('FrameFiller MJT', f"nuke.createNode('{prefixNST}FrameFiller')", icon="FrameFiller.png") ############################################################################################################ ############################################################################################################ # Create Channel Menu channelMenu = NST_menu.addMenu('Channel', icon = 'ToolbarChannel.png', index = 40) channelMenu.addCommand('BinaryAlpha TL', f"nuke.createNode('{prefixNST}BinaryAlpha')", icon="BumpBoss.png") channelMenu.addCommand('ChannelCombiner TL', f"nuke.createNode('{prefixNST}ChannelCombiner')", icon="ChannelMerge.png") channelMenu.addCommand('ChannelControl TL', f"nuke.createNode('{prefixNST}ChannelControl')", icon="LayerChannel.png") channelMenu.addCommand('ChannelCreator TL', f"nuke.createNode('{prefixNST}ChannelCreator')", icon="Add.png") channelMenu.addCommand('InjectMatteChannel TL', f"nuke.createNode('{prefixNST}InjectMatteChannel')", icon="ChannelMerge.png") channelMenu.addCommand('ID_Extractor TL', f"nuke.createNode('{prefixNST}ID_Extractor')", icon="Shuffle.png") channelMenu.addSeparator() channelMenu.addCommand('streamCart MJT', f"nuke.createNode('{prefixNST}streamCart')", icon="streamCart.png") channelMenu.addCommand('renameChannels AG', f"nuke.createNode('{prefixNST}renameChannels')", icon="nukepedia_icon.png") ############################################################################################################ ############################################################################################################ # Create Color Menu colorMenu = NST_menu.addMenu('Color', icon = 'ToolbarColor.png', index = 50) colorMenu.addCommand('BlacksMatch TL', f"nuke.createNode('{prefixNST}BlacksMatch')", icon="BlacksMatch.png") colorMenu.addCommand('ColorCopy TL', f"nuke.createNode('{prefixNST}ColorCopy')", icon="Crosstalk.png") colorMenu.addCommand('Contrast TL', f"nuke.createNode('{prefixNST}Contrast')", icon="ColorCorrect.png") colorMenu.addCommand('GradeLayerPass TL', f"nuke.createNode('{prefixNST}GradeLayerPass')", icon="Grade.png") colorMenu.addCommand('HighlightSuppress TL', f"nuke.createNode('{prefixNST}HighlightSuppress')", icon="ColorLookup.png") colorMenu.addCommand('ShadowMult TL', f"nuke.createNode('{prefixNST}ShadowMult')", icon="SpotLight.png") colorMenu.addCommand('WhiteSoftClip TL', f"nuke.createNode('{prefixNST}WhiteSoftClip')", icon="SoftClip.png") colorMenu.addCommand('WhiteBalance TL', f"nuke.createNode('{prefixNST}WhiteBalance')", icon="HueShift.png") colorMenu.addSeparator() colorMenu.addCommand('apColorSampler AP', f'nuke.createNode("{prefixNST}ColorSampler")', icon='ColorSampler.png') colorMenu.addCommand('apVignette AP', f'nuke.createNode("{prefixNST}apVignette")', icon='apeVignette.png') colorMenu.addCommand('GammaPlus MJT', f"nuke.createNode('{prefixNST}GammaPlus')", icon="GammaPlus.png") colorMenu.addCommand('MonochromePlus CF', f"nuke.createNode('{prefixNST}MonochromePlus')", icon="Saturation.png") colorMenu.addCommand('aeRelight2D AE', f"nuke.createNode('{prefixNST}aeRelight2D')", icon="ReLight.png") colorMenu.addSeparator() colorMenu.addCommand('Suppress_RGBCMY SPIN', f'nuke.createNode("{prefixNST}Suppress_RGBCMY")', icon='spin_tools.png') colorMenu.addCommand('BiasedSaturation NKPD', f"nuke.createNode('{prefixNST}BiasedSaturation')", icon="Saturation.png") colorMenu.addCommand('HSL_Tool NKPD', f"nuke.createNode('{prefixNST}HSL_Tool')", icon="HSVTool.png") ############################################################################################################ ############################################################################################################ # Create Filter Menu filterMenu = NST_menu.addMenu('Filter', icon = 'ToolbarFilter.png', index = 60) glowMenu = filterMenu.addMenu("Glows", icon="Glow.png") glowMenu.addCommand('apGlow AP', f'nuke.createNode("{prefixNST}apeGlow")', icon='apGlow.png') glowMenu.addCommand('ExponGlow TL', f'nuke.createNode("{prefixNST}ExponGlow")', icon='Glow.png') glowMenu.addCommand('Glow_Exponential SPIN', f'nuke.createNode("{prefixNST}Glow_Exponential")', icon="spin_tools.png") glowMenu.addCommand('bm_OpticalGlow BM', f"nuke.createNode('{prefixNST}bm_OpticalGlow')", icon='bm_OpticalGlow_icon.png') filterMenu.addSeparator() BlurMenu = filterMenu.addMenu("Blurs", icon="Median.png") BlurMenu.addCommand('ExponBlurSimple TL', f"nuke.createNode('{prefixNST}ExponBlurSimple')", icon="Glow.png") BlurMenu.addCommand('DirectionalBlur TL', f"nuke.createNode('{prefixNST}DirectionalBlur')", icon="DirBlur.png") BlurMenu.addCommand('MotionBlurPaint AG', f"nuke.createNode('{prefixNST}MotionBlurPaint')", icon="MotionBlur2D.png") BlurMenu.addCommand('iBlur NKPD', f"nuke.createNode('{prefixNST}iBlurU')", icon="Blur.png") BlurMenu.addCommand("WaveletBlur MHD", f"nuke.createNode('{prefixNST}WaveletBlur')", icon="h_tools.png") filterMenu.addSeparator() EdgesMenu = filterMenu.addMenu("Edges", icon="FilterErode.png") EdgesMenu.addCommand('apEdgePush AP', f'nuke.createNode("{prefixNST}apEdgePush")', icon='apEdgePush.png') EdgesMenu.addCommand('apEdgeCrush AP', f'nuke.createNode("{prefixNST}apEdgeCrush")', icon='Dither.png') EdgesMenu.addCommand('EdgeDetectAlias TL', f"nuke.createNode('{prefixNST}EdgeDetectAlias')", icon="EdgeDetect.png") EdgesMenu.addCommand('AntiAliasingFilter AG', f"nuke.createNode('{prefixNST}AntiAliasingFilter')", icon="nukepedia_icon.png") EdgesMenu.addCommand('ErodeSmooth TL', f"nuke.createNode('{prefixNST}ErodeSmooth')", icon="FilterErode.png") EdgesMenu.addCommand('iErode PP', f"nuke.createNode('{prefixNST}iErode')", icon="FilterErode.png") EdgesMenu.addCommand('Edge_RimLight AG', f"nuke.createNode('{prefixNST}Edge_RimLight')", icon="nukepedia_icon.png") EdgesMenu.addCommand('EdgeDetectPRO AG', f"nuke.createNode('{prefixNST}EdgeDetectPRO')", icon="nukepedia_icon.png") EdgesMenu.addCommand('Erode_Fine SPIN', f"nuke.createNode('{prefixNST}Erode_Fine')", icon="spin_tools.png") EdgesMenu.addCommand('Edge_Expand SPIN', f"nuke.createNode('{prefixNST}Edge_Expand')", icon="spin_tools.png") EdgesMenu.addCommand('Edge RB', f"nuke.createNode('{prefixNST}Edge')", icon="nukepedia_icon.png") EdgesMenu.addCommand('KillOutline NKPD', f"nuke.createNode('{prefixNST}KillOutline')", icon="nukepedia_icon.png") EdgesMenu.addCommand('ColorSmear NKPD', f"nuke.createNode('{prefixNST}ColorSmear')", icon="nukepedia_icon.png") EdgesMenu.addCommand('EdgeFromAlpha FR', f"nuke.createNode('{prefixNST}EdgeFromAlpha')", icon="nukepedia_icon.png") EdgesMenu.addCommand('VectorExtendEdge NKPD', f"nuke.createNode('{prefixNST}VectorExtendEdge')", icon="nukepedia_icon.png") EdgesMenu.addCommand('GuidedBlur RP', f"nuke.createNode('{prefixNST}GuidedBlur')", icon="EdgeBlur.png") EdgesMenu.addSeparator() EdgesMenu.addCommand('FractalBlur NKPD', f"nuke.createNode('{prefixNST}FractalBlur')", icon="nukepedia_icon.png") filterMenu.addSeparator() distortMenu = filterMenu.addMenu("Distortions", icon="IDistort.png") distortMenu.addCommand('Glass FR', f"nuke.createNode('{prefixNST}Glass')", icon="nukepedia_icon.png") distortMenu.addCommand('HeatWave DB', f"nuke.createNode('{prefixNST}HeatWave')", icon="HeatWave_Icon.png") distortMenu.addCommand("X_Distort XM", f"nuke.createNode('{prefixNST}X_Distort')", icon="X_Distort.png") distortMenu.addCommand('FastComplexityDistort MHD', f"nuke.createNode('{prefixNST}FastComplexityDistort')", icon="IDistort.png") filterMenu.addSeparator() X_ToolsMenu = filterMenu.addMenu("X_Tools XM", icon="X_Tools.png") X_ToolsMenu.addCommand("X_Aton_Volumetrics XM", f"nuke.createNode('{prefixNST}X_Aton_Volumetrics')", icon="X_Aton.png") X_ToolsMenu.addCommand("X_Denoise XM", f"nuke.createNode('{prefixNST}X_Denoise')", icon="X_Denoise.png") X_ToolsMenu.addCommand("X_Sharpen XM", f"nuke.createNode('{prefixNST}X_Sharpen')", icon="X_Sharpen.png") X_ToolsMenu.addCommand("X_Soften XM", f"nuke.createNode('{prefixNST}X_Soften')", icon="X_Soften.png") filterMenu.addSeparator() filterMenu.addCommand('BeautifulSkin TL', f"nuke.createNode('{prefixNST}BeautifulSkin')", icon="Median.png") filterMenu.addCommand('BlacksExpon TL', f"nuke.createNode('{prefixNST}BlacksExpon')", icon="Toe.png") filterMenu.addCommand('aeShadows AE', f"nuke.createNode('{prefixNST}aeShadows')", icon="aeShadows_icon.png") filterMenu.addCommand('Halation TL', f"nuke.createNode('{prefixNST}Halation')", icon="EdgeBlur.png") filterMenu.addCommand('HighPass TL', f"nuke.createNode('{prefixNST}HighPass')", icon="Invert.png") filterMenu.addCommand('Diffusion TL', f"nuke.createNode('{prefixNST}Diffusion')", icon="Spark.png") filterMenu.addSeparator() filterMenu.addCommand('LightWrapPro TL', f"nuke.createNode('{prefixNST}LightWrapPro')", icon="LightWrap.png") filterMenu.addCommand('bm_OpticalLightwrap BM', f"nuke.createNode('{prefixNST}bm_OpticalLightwrap')", icon="bm_OpticalLightwrap_icon.png") filterMenu.addSeparator() filterMenu.addCommand('iConvolve AP', f'nuke.createNode("{prefixNST}iConvolve")', icon='ap_tools.png') filterMenu.addCommand('ConvolutionMatrix AG', f'nuke.createNode("{prefixNST}ConvolutionMatrix")', icon="ColorMatrix.png") #Add apChroma submenu apChromaMenu = filterMenu.addMenu("apChroma Tools AP", icon="apChroma.png") apChromaMenu.addCommand('apChroma AP', f'nuke.createNode("{prefixNST}apChroma")', icon='apChroma.png') apChromaMenu.addCommand('apChromaMerge AP', f'nuke.createNode("{prefixNST}apChromaMergeNew")', icon='apChroma.png') apChromaMenu.addCommand('apChromaBlur AP', f'nuke.createNode("{prefixNST}apChromaBlurNew")', icon='apChroma.png') apChromaMenu.addCommand('apChromaTransform AP', f'nuke.createNode("{prefixNST}apChromaTransformNew")', icon='apChroma.png') apChromaMenu.addCommand('apChromaUnpremult AP', f'nuke.createNode("{prefixNST}apChromaUnpremult")', icon='apChroma.png') apChromaMenu.addCommand('apChromaPremult AP', f'nuke.createNode("{prefixNST}apChromaPremult")', icon='apChroma.png') filterMenu.addSeparator() filterMenu.addCommand('Chromatik SPIN', f"nuke.createNode('{prefixNST}Chromatik')", icon='spin_tools.png') filterMenu.addCommand('ChromaticAberration fxT', f"nuke.createNode('{prefixNST}fxT_ChromaticAberration')", icon='ColorLookup.png') filterMenu.addCommand("ChromaSmear LJ", f"nuke.createNode('{prefixNST}ChromaSmear')", icon="ColorLookup.png") filterMenu.addSeparator() filterMenu.addCommand('CatsEyeDefocus NKPD', f"nuke.createNode('{prefixNST}CatsEyeDefocus')", icon="nukepedia_icon.png") filterMenu.addCommand('DefocusSwirlyBokeh NKPD', f"nuke.createNode('{prefixNST}DefocusSwirlyBokeh')", icon="nukepedia_icon.png") filterMenu.addCommand('deHaze NKPD', f"nuke.createNode('{prefixNST}deHaze')", icon="nukepedia_icon.png") filterMenu.addCommand('RankFilter JP', f"nuke.createNode('{prefixNST}RankFilter')", icon="Median.png") filterMenu.addCommand('RadialDilate CF', f"nuke.createNode('{prefixNST}RadialDilate')", icon="ErodeFast.png") filterMenu.addCommand('DeflickerVelocity NKPD', f"nuke.createNode('{prefixNST}DeflickerVelocity')", icon="nukepedia_icon.png") filterMenu.addCommand('FillSampler NKPD', f"nuke.createNode('{prefixNST}FillSampler')", icon="nukepedia_icon.png") filterMenu.addCommand('MECfiller NKPD', f"nuke.createNode('{prefixNST}MECfiller')", icon="nukepedia_icon.png") ############################################################################################################ ############################################################################################################ # Create Keyer Menu keyerMenu = NST_menu.addMenu('Keyer', icon = 'ToolbarKeyer.png', index = 70) keyerMenu.addCommand('apDespill AP', f'nuke.createNode("{prefixNST}apDespill")', icon='apDespill.png') keyerMenu.addCommand('SpillCorrect SPIN', f"nuke.createNode('{prefixNST}Spill_Correct')", icon='spin_tools.png') keyerMenu.addCommand('DespillToColor NKPD', f"nuke.createNode('{prefixNST}DespillToColor')", icon="nukepedia_icon.png") keyerMenu.addSeparator() keyerMenu.addCommand('AdditiveKeyerPro TL', f"nuke.createNode('{prefixNST}AdditiveKeyerPro')", icon="Bilateral.png") keyerMenu.addCommand('apScreenClean AP', f'nuke.createNode("{prefixNST}apeScreenClean")', icon='apScreenClean.png') keyerMenu.addCommand('apScreenGrow AP', f'nuke.createNode("{prefixNST}apeScreenGrow")', icon='apScreenGrow.png') keyerMenu.addSeparator() keyerMenu.addCommand('KeyChew NKPD', f"nuke.createNode('{prefixNST}KeyChew')", icon="Keyer.png") keyerMenu.addCommand('LumaKeyer DR', f"nuke.createNode('{prefixNST}LumaKeyer')", icon="Keyer.png") keyerMenu.addCommand('PointCloudKeyer IS', f"nuke.createNode('{prefixNST}PointCloudKeyer')", icon="PointCloudGenerator.png") keyerMenu.addCommand('SkyMatte CF', f"nuke.createNode('{prefixNST}SkyMatte')", icon="nukepedia_icon.png") ############################################################################################################ ############################################################################################################ # Create Merge Menu mergeMenu = NST_menu.addMenu('Merge', icon = 'ToolbarMerge.png', index = 80) mergeMenu.addCommand('ContactSheetAuto TL', f"nuke.createNode('{prefixNST}ContactSheetAuto')", icon="ContactSheet.png") mergeMenu.addCommand('KeymixBBox TL', f"nuke.createNode('{prefixNST}KeymixBBox')", icon="Keymix.png") mergeMenu.addCommand('MergeAtmos TL', f"nuke.createNode('{prefixNST}MergeAtmos')", icon="PointCloudMesh.png") mergeMenu.addCommand('MergeBlend TL', f"nuke.createNode('{prefixNST}MergeBlend')", icon="Dissolve.png") mergeMenu.addSeparator() mergeMenu.addCommand('MergeAll AP', f"nuke.createNode('{prefixNST}MergeAll')", icon="Merge.png") ############################################################################################################ ############################################################################################################ # Create Transform Menu transformMenu = NST_menu.addMenu('Transform', icon = 'ToolbarTransform.png', index = 90) # Add Vector Tools SubMenu VMTmenu = transformMenu.addMenu('Vector Math Tools VM', icon = 'Math.png') VMT_mathMenu = VMTmenu.addMenu('Math', icon = 'Math.png') VMT_mathAxisMenu = VMT_mathMenu.addMenu('Axis', icon = 'Axis.png') VMT_mathMatrixFourMenu = VMT_mathMenu.addMenu('Matrix4', icon = 'Matrix4.png') VMT_mathVectorTwoMenu = VMT_mathMenu.addMenu('Vector2', icon = 'Vector2.png') VMT_mathVectorThreeMenu = VMT_mathMenu.addMenu('Vector3', icon = 'Vector3.png') VMT_mathAxisMenu.addCommand('Invert Axis', f"nuke.createNode('{prefixNST}InvertAxis')", icon = 'Axis.png') VMT_mathAxisMenu.addCommand('Zero Axis', f"nuke.createNode('{prefixNST}ZeroAxis')", icon = 'Axis.png') VMT_mathMatrixFourMenu.addCommand('Invert Matrix4', f"nuke.createNode('{prefixNST}InvertMatrix4')", icon = 'InvertMatrix4.png') VMT_mathMatrixFourMenu.addCommand('Product Matrix4', f"nuke.createNode('{prefixNST}ProductMatrix4')", icon = 'ProductMatrix4.png') VMT_mathMatrixFourMenu.addCommand('Rotate Matrix4', f"nuke.createNode('{prefixNST}RotateMatrix4')", icon = 'RotateMatrix4.png') VMT_mathMatrixFourMenu.addCommand('Scale Matrix4', f"nuke.createNode('{prefixNST}ScaleMatrix4')", icon = 'ScaleMatrix4.png') VMT_mathMatrixFourMenu.addCommand('Transform Matrix4', f"nuke.createNode('{prefixNST}TransformMatrix4')", icon = 'TransformMatrix4.png') VMT_mathMatrixFourMenu.addCommand('Translate Matrix4', f"nuke.createNode('{prefixNST}TranslateMatrix4')", icon = 'TranslateMatrix4.png') VMT_mathMatrixFourMenu.addCommand('Transpose Matrix4', f"nuke.createNode('{prefixNST}TransposeMatrix4')", icon = 'TransposeMatrix4.png') VMT_mathVectorTwoMenu.addCommand('Cross Product Vector2', f"nuke.createNode('{prefixNST}CrossProductVector2')", icon = 'CrossProductVector3.png') VMT_mathVectorTwoMenu.addCommand('Dot Product Vector2', f"nuke.createNode('{prefixNST}DotProductVector2')", icon = 'DotProductVector3.png') VMT_mathVectorTwoMenu.addCommand('Magnitude Vector2', f"nuke.createNode('{prefixNST}MagnitudeVector2')", icon = 'MagnitudeVector3.png') VMT_mathVectorTwoMenu.addCommand('Normalize Vector2', f"nuke.createNode('{prefixNST}NormalizeVector2')", icon = 'NormalizeVector3.png') VMT_mathVectorTwoMenu.addCommand('Rotate Vector2', f"nuke.createNode('{prefixNST}RotateVector2')", icon = 'RotateVector3.png') VMT_mathVectorTwoMenu.addCommand('Transform Vector2', f"nuke.createNode('{prefixNST}TransformVector2')", icon = 'TransformVector3.png') VMT_mathVectorThreeMenu.addCommand('Cross Product Vector3', f"nuke.createNode('{prefixNST}CrossProductVector3')", icon = 'CrossProductVector3.png') VMT_mathVectorThreeMenu.addCommand('Dot Product Vector3', f"nuke.createNode('{prefixNST}DotProductVector3')", icon = 'DotProductVector3.png') VMT_mathVectorThreeMenu.addCommand('Magnitude Vector3', f"nuke.createNode('{prefixNST}MagnitudeVector3')", icon = 'MagnitudeVector3.png') VMT_mathVectorThreeMenu.addCommand('Multiply Vector3 Matrix3', f"nuke.createNode('{prefixNST}MultiplyVector3Matrix3')", icon = 'ProductVector3.png') VMT_mathVectorThreeMenu.addCommand('Normalize Vector3', f"nuke.createNode('{prefixNST}NormalizeVector3')", icon = 'NormalizeVector3.png') VMT_mathVectorThreeMenu.addCommand('Rotate Vector3', f"nuke.createNode('{prefixNST}RotateVector3')", icon = 'RotateVector3.png') VMT_mathVectorThreeMenu.addCommand('Transform Vector3', f"nuke.createNode('{prefixNST}TransformVector3')", icon = 'TransformVector3.png') VMT_generateMenu = VMTmenu.addMenu('Generate', icon = 'IdentityMatrix4.png') VMT_generateMenu.addCommand('Generate Matrix4', f"nuke.createNode('{prefixNST}GenerateMatrix4')", icon = 'IdentityMatrix4.png') VMT_generateMenu.addCommand('Generate STMap', f"nuke.createNode('{prefixNST}GenerateSTMap')", icon = 'AG_UVMap.png') VMT_convertMenu = VMTmenu.addMenu('Convert', icon = 'ProductVector3.png') VMT_convertMenu.addCommand('Luma To Vector3', f"nuke.createNode('{prefixNST}LumaToVector3')", icon = 'vectorToolsBW.png') VMT_convertMenu.addCommand('STMap To Vector2', f"nuke.createNode('{prefixNST}STMapToVector2')", icon = 'Vector2.png') VMT_convertMenu.addCommand('Vector2 To STMap', f"nuke.createNode('{prefixNST}Vector2ToSTMap')", icon = 'AG_UVMap.png') VMT_convertMenu.addCommand('Vector3 To Matrix4', f"nuke.createNode('{prefixNST}Vector3ToMatrix4')", icon = 'ProductVector3.png') transformMenu.addCommand('vector3DMathExpression EL', f"nuke.createNode('{prefixNST}vector3DMathExpression')", icon = 'vectorTools.png') transformMenu.addCommand('Vectors_Direction EL', f"nuke.createNode('{prefixNST}Vectors_Direction')", icon = 'vectorTools.png') transformMenu.addCommand('Vectors_to_Degrees EL', f"nuke.createNode('{prefixNST}Vectors_to_Degrees')", icon = 'vectorTools.png') # Add VectorTracker python file try: nuke.load(f'{prefixNST}VectorTracker.py') transformMenu.addCommand('VectorTracker NKPD', f"nuke.createNode('{prefixNST}VectorTracker.gizmo')", icon = 'vectorTools.png') except RuntimeError as e: print(f"Could not load VectorTracker.py: {e}") pass transformMenu.addSeparator() transformMenu.addCommand('AutoCropTool TL', f"nuke.createNode('{prefixNST}AutoCropTool')", icon="AutoCrop.png") transformMenu.addCommand('BBoxToFormat TL', f"nuke.createNode('{prefixNST}BBoxToFormat')", icon="Rectangle.png") transformMenu.addCommand('ImagePlane3D TL', f"nuke.createNode('{prefixNST}ImagePlane3D')", icon="Card.png") transformMenu.addCommand('Matrix_Inverse TL', f"nuke.createNode('{prefixNST}Matrix4x4_Inverse')", icon="ColorMatrix.png") transformMenu.addCommand('Matrix4x4Math TL', f"nuke.createNode('{prefixNST}Matrix4x4Math')", icon="ColorMath.png") transformMenu.addCommand('MirrorBorder TL', f"nuke.createNode('{prefixNST}MirrorBorder')", icon="AdjBBox.png") transformMenu.addCommand('TransformCutOut TL', f"nuke.createNode('{prefixNST}TransformCutOut')", icon="MergeOut.png") transformMenu.addCommand('iMorph AP', f"nuke.createNode('{prefixNST}iMorph')", icon="VectorDistort.png") transformMenu.addCommand('Symmetry TL', f"nuke.createNode('{prefixNST}Symmetry')", icon="Convolve.png") transformMenu.addSeparator() transformMenu.addCommand('RP_Reformat MJT', f"nuke.createNode('{prefixNST}RP_Reformat')", icon='RP_Reformat.png') transformMenu.addCommand('InverseMatrix3x3 MJT', f"nuke.createNode('{prefixNST}InverseMatrix33')", icon='iMatrix33.png') transformMenu.addCommand('InverseMatrix4x4 MJT', f"nuke.createNode('{prefixNST}InverseMatrix44')", icon='iMatrix44.png') transformMenu.addSeparator() try: import NST_cardToTrack transformMenu.addCommand('CardToTrack_v7 AK', f"nuke.createNode('{prefixNST}CardToTrack')", icon='Card.png') except ImportError as e: print(f"Could not load NST_cardToTrack.py: {e}") pass try: import NST_cardToTrack_v9 transformMenu.addCommand('CardToTrack_v9 AK', f"nuke.createNode('{prefixNST}CardToTrack2')", icon='Card.png') except ImportError as e: print(f"Could not load NST_cardToTrack_v9.py: {e}") pass transformMenu.addCommand('CProject AK', f"nuke.createNode('{prefixNST}CProject')", icon='CornerPin.png') transformMenu.addCommand('CProject2 AK', f"nuke.createNode('{prefixNST}CProject2')", icon='CornerPin.png') transformMenu.addCommand('TProject AK', f"nuke.createNode('{prefixNST}TProject')", icon='Transform.png') transformMenu.addCommand('TProject2 AK', f"nuke.createNode('{prefixNST}TProject2')", icon='Transform.png') transformMenu.addCommand("StickIt MHD", f"nuke.createNode('{prefixNST}h_stickit')", icon="h_stickit.png") transformMenu.addSeparator() transformMenu.addCommand('TransformMatrix AG', f"nuke.createNode('{prefixNST}TransformMatrix')", icon="Transform.png") transformMenu.addCommand('CornerPin2D_Matrix AG', f"nuke.createNode('{prefixNST}CornerPin2D_Matrix')", icon="CornerPin.png") transformMenu.addCommand('RotoPaintTransform AG', f"nuke.createNode('{prefixNST}RotoPaintTransform')", icon="RotoPaint.png") transformMenu.addSeparator() transformMenu.addCommand('IIDistort EL', f"nuke.createNode('{prefixNST}IIDistort')", icon="nukepedia_icon.png") transformMenu.addCommand('bm_CameraShake BM', f"nuke.createNode('{prefixNST}bm_CameraShake')", icon="bm_CameraShake_icon.png") transformMenu.addCommand('ITransform AE', f"nuke.createNode('{prefixNST}iTransform_ae')", icon="STMap.png") transformMenu.addCommand('MorphDissolve SPIN', f"nuke.createNode('{prefixNST}MorphDissolve')", icon="spin_tools.png") transformMenu.addCommand('RotoCentroid NKPD', f"nuke.createNode('{prefixNST}RotoCentroid')", icon="nukepedia_icon.png") transformMenu.addCommand('STmapInverse NKPD', f"nuke.createNode('{prefixNST}STmapInverse')", icon="nukepedia_icon.png") transformMenu.addCommand('TransformMix NKPD', f"nuke.createNode('{prefixNST}TransformMix')", icon="Transform.png") transformMenu.addCommand('PlanarProjection NKPD', f"nuke.createNode('{prefixNST}PlanarProjection')", icon="nukepedia_icon.png") transformMenu.addCommand('Reconcile3DFast DR', f"nuke.createNode('{prefixNST}Reconcile3DFast')", icon="Reconcile3D.png") ############################################################################################################ ############################################################################################################ # Create 3D Menu ThreeDMenu = NST_menu.addMenu('3D', icon = 'Toolbar3D.png', index = 100) ThreeDMenu.addCommand('aPCard AP', f'nuke.createNode("{prefixNST}aPCard")', icon='ap_tools.png') ThreeDMenu.addCommand('DummyCam', f'nuke.createNode("{prefixNST}DummyCam")', icon='DummyCam.png') ThreeDMenu.addSeparator() ThreeDMenu.addCommand('mScatterGeo MJT', f'nuke.createNode("{prefixNST}mScatterGeo")', icon='mScatterGeo.png') ThreeDMenu.addCommand('GeoToPoints MHD', f"nuke.createNode('{prefixNST}GeoToPoints')", icon="nukepedia_icon.png") ThreeDMenu.addCommand('origami MJT', f'nuke.createNode("{prefixNST}origami")', icon='origami.png') ThreeDMenu.addCommand('RayDeepAO MJT', f'nuke.createNode("{prefixNST}RayDeepAO")', icon='RayDeepAO.png') ThreeDMenu.addCommand('SceneDepthCalculator MJT', f'nuke.createNode("{prefixNST}SceneDepthCalculator")', icon='SceneDepthCalculator.png') ThreeDMenu.addCommand('SSMesh MJT', f'nuke.createNode("{prefixNST}SSMesh")', icon='SSMesh.png') ThreeDMenu.addCommand('Unify3DCoordinate MJT', f'nuke.createNode("{prefixNST}Unify3DCoordinate")', icon='Unify3DCoordinate.png') ThreeDMenu.addCommand('UVEditor MJT', f'nuke.createNode("{prefixNST}UVEditor")', icon='UVEditor.png') ThreeDMenu.addSeparator() ThreeDMenu.addCommand('Distance3D NKPD', f"nuke.createNode('{prefixNST}Distance3D')", icon="nukepedia_icon.png") ThreeDMenu.addCommand('DistanceBetween_CS NKPD', f"nuke.createNode('{prefixNST}DistanceBetween_CS')", icon="nukepedia_icon.png") ThreeDMenu.addCommand('Lightning3D EL', f"nuke.createNode('{prefixNST}Lightning3D')", icon="nukepedia_icon.png") ThreeDMenu.addCommand('Noise3DTexture NKPD', f"nuke.createNode('{prefixNST}Noise3DTexture')", icon="noise3dicon.png") ThreeDMenu.addCommand('GodRaysProjector CF', f"nuke.createNode('{prefixNST}GodRaysProjector')", icon="VolumeRays.png") ThreeDMenu.addCommand('MirrorDimension TL', f"nuke.createNode('{prefixNST}MirrorDimension')", icon="Mirror.png") ############################################################################################################ ############################################################################################################ # Create Paricles Menu particlesMenu = NST_menu.addMenu('Particles', icon = 'ToolbarParticles.png', index = 110) particlesMenu.addCommand('waterSchmutz DR', f"nuke.createNode('{prefixNST}waterSchmutz')", icon="WaterLens.png") particlesMenu.addCommand('RainMaker MR', f"nuke.createNode('{prefixNST}RainMaker')", icon="ParticleDrag.png") particlesMenu.addCommand('Sparky DB', f"nuke.createNode('{prefixNST}Sparky')", icon="Sparky.png") particlesMenu.addCommand('ParticleLights MHD', f"nuke.createNode('{prefixNST}ParticleLights')", icon="ToolbarParticles.png") particlesMenu.addCommand('ParticleKiller NKPD', f"nuke.createNode('{prefixNST}ParticleKiller')", icon="ToolbarParticles.png") ############################################################################################################ ############################################################################################################ # Create Deep Menu deepMenu = NST_menu.addMenu('Deep', icon = 'ToolbarDeep.png', index = 120) deep2VP_suite = deepMenu.addMenu("Deep2VP Suite MJT", icon='Deep2VP.png') deep2VP_suite.addCommand('Deep2VP MJT', f"nuke.createNode('{prefixNST}Deep2VP')", icon="Deep2VP.png") deep2VP_suite.addCommand('Deep2VPosition MJT', f"nuke.createNode('{prefixNST}Deep2VPosition')", icon="Deep2VP.png") deep2VP_suite.addCommand('DVPColorCorrect MJT', f"nuke.createNode('{prefixNST}DVPColorCorrect')", icon="DVPColorCorrect.png") deep2VP_suite.addCommand('DVPortal MJT', f"nuke.createNode('{prefixNST}DVPortal')", icon="DVPortal.png") deep2VP_suite.addCommand('DVPToImage MJT', f"nuke.createNode('{prefixNST}DVPToImage')", icon="DVPToImage.png") deep2VP_suite.addSeparator() deep2VP_suite.addCommand('DVPfresnel MJT', f"nuke.createNode('{prefixNST}DVPfresnel')", icon="DVPfresnel.png") deep2VP_suite.addCommand('DVPrelight MJT', f"nuke.createNode('{prefixNST}DVPrelight')", icon="DVPrelight.png") deep2VP_suite.addCommand('DVPrelightPT MJT', f"nuke.createNode('{prefixNST}DVPrelightPT')", icon="DVPrelightPT.png") deep2VP_suite.addCommand('DVPscene MJT', f"nuke.createNode('{prefixNST}DVPscene')", icon="DVPscene.png") deep2VP_suite.addCommand('DVPsetLight MJT', f"nuke.createNode('{prefixNST}DVPsetLight')", icon="DVPsetLight.png") deep2VP_suite.addSeparator() deep2VP_suite.addCommand('DVPattern MJT', f"nuke.createNode('{prefixNST}DVPattern')", icon="DVPattern.png") deep2VP_suite.addCommand('DVPmatte MJT', f"nuke.createNode('{prefixNST}DVPmatte')", icon="DVPmatte.png") deep2VP_suite.addCommand('DVProjection MJT', f"nuke.createNode('{prefixNST}DVProjection')", icon="DVProjection.png") deep2VP_suite.addSeparator() deep2VP_suite.addCommand('DVP_ToonShader MJT', f"nuke.createNode('{prefixNST}DVP_ToonShader')", icon="DVP_ToonShader.png") deep2VP_suite.addCommand('DVP_Shader MJT', f"nuke.createNode('{prefixNST}DVP_Shader')", icon="DVP_Shader.png") deepMenu.addSeparator() deepMenu.addCommand('DeepBoolean MJT', f"nuke.createNode('{prefixNST}DeepBoolean')", icon="DeepBoolean.png") deepMenu.addCommand('DeepFromPosition MJT', f"nuke.createNode('{prefixNST}DeepFromPosition')", icon="DeepFromPosition.png") deepMenu.addCommand('DeepSampleCount MJT', f"nuke.createNode('{prefixNST}DeepSampleCount')", icon="DeepSampleCount.png") deepMenu.addCommand('DeepSer MJT', f"nuke.createNode('{prefixNST}DeepSer')", icon="DeepSer.png") deepMenu.addSeparator() deepMenu.addCommand('DeepFromDepth AG', f"nuke.createNode('{prefixNST}DeepFromDepth')", icon="DeepRecolor.png") deepMenu.addCommand('DeepRecolorMatte TL', f"nuke.createNode('{prefixNST}DeepRecolorMatte')", icon="DeepRecolor.png") deepMenu.addSeparator() deepMenu.addCommand('Deep Thickness AG', f'nuke.nodePaste("{nk_path("deepThickness.nk")}")') deepMenu.addCommand('DeepMerge_Advanced BM', f"nuke.createNode('{prefixNST}DeepMerge_Advanced')", icon="DeepMerge.png") deepMenu.addCommand('DeepCropSoft NKPD', f"nuke.createNode('{prefixNST}DeepCropSoft')", icon="DeepCrop.png") deepMenu.addCommand('DeepKeyMix NKPD', f"nuke.createNode('{prefixNST}DeepKeyMix')", icon="DeepMerge.png") deepMenu.addCommand('DeepHoldoutSmoother NKPD', f"nuke.createNode('{prefixNST}DeepHoldoutSmoother')", icon="DeepHoldout.png") deepMenu.addCommand('DeepCopyBBox NKPD', f"nuke.createNode('{prefixNST}DeepCopyBBox')", icon="DeepMerge.png") ############################################################################################################ ############################################################################################################ # Create CG Menu cgMenu = NST_menu.addMenu('CG', icon = 'RenderManShader.png', index = 130) cgMenu.addCommand('UV Mapper TL', f"nuke.createNode('{prefixNST}UV_Mapper')", icon="Tile.png") cgMenu.addSeparator() PNZsuite = cgMenu.addMenu('PNZsuite MJT', icon = 'ConvertPNZ.png') PNZsuite.addCommand('ConvertPNZ MJT', f'nuke.createNode("{prefixNST}ConvertPNZ")', icon='ConvertPNZ.png') PNZsuite.addCommand('P2N MJT', f'nuke.createNode("{prefixNST}P2N")', icon='P2N.png') PNZsuite.addCommand('P2Z MJT', f'nuke.createNode("{prefixNST}P2Z")', icon='P2Z.png') PNZsuite.addCommand('Z2N MJT', f'nuke.createNode("{prefixNST}Z2N")', icon='Z2N.png') PNZsuite.addCommand('Z2P MJT', f'nuke.createNode("{prefixNST}Z2P")', icon='Z2P.png') PosToolkit = cgMenu.addMenu('PosToolkit MJT', icon = 'PosMatte_MJ.png') PosToolkit.addCommand('PosMatte MJT', f'nuke.createNode("{prefixNST}PosMatte_MJ")', icon='PosMatte_MJ.png') PosToolkit.addCommand('PosPattern MJT', f'nuke.createNode("{prefixNST}PosPattern_MJ")', icon='PosPattern_MJ.png') PosToolkit.addCommand('PosProjection MJT', f'nuke.createNode("{prefixNST}PosProjection_MJ")', icon='PosProjection_MJ.png') cgMenu.addSeparator() cgMenu.addCommand('Noise_3D SPIN', f'nuke.createNode("{prefixNST}Noise3D_spin")', icon='spin_tools.png') cgMenu.addCommand('Noise4D MHD', f'nuke.nodePaste("{nk_path("Noise4D.nk", prefix=True)}")', icon='Noise.png') cgMenu.addCommand('Relight_Simple SPIN', f'nuke.createNode("{prefixNST}Relight_Simple")', icon='spin_tools.png') cgMenu.addCommand('ReProject_3D SPIN', f'nuke.createNode("{prefixNST}ReProject_3D")', icon='spin_tools.png') cgMenu.addSeparator() cgMenu.addCommand('C44Kernel AP', f'nuke.createNode("{prefixNST}C44Kernel")', icon='C44Kernel.png') cgMenu.addCommand('apDirLight AP', f'nuke.createNode("{prefixNST}apDirLight")', icon='apDirLight.png') cgMenu.addCommand('apFresnel AP', f'nuke.createNode("{prefixNST}apFresnel")', icon='ap_tools.png') cgMenu.addCommand('CameraNormals NKPD', f"nuke.createNode('{prefixNST}CameraNormals')", icon="Camera.png") cgMenu.addCommand('NormalsRotate NKPD', f"nuke.createNode('{prefixNST}NormalsRotate')", icon="SpotLight.png") cgMenu.addCommand('Relight_bb NKPD', f"nuke.createNode('{prefixNST}Relight_bb')", icon="SpotLight.png") cgMenu.addCommand('EnvReflect_bb NKPD', f"nuke.createNode('{prefixNST}EnvReflect_BB')", icon="Sphere.png") cgMenu.addCommand('N_Reflection NKPD', f"nuke.createNode('{prefixNST}N_Reflection')", icon="Sphere.png") cgMenu.addCommand('aeRefracTHOR AE', f"nuke.createNode('{prefixNST}aeRefracTHOR')", icon="aeRefracTHOR_icon.png") cgMenu.addCommand('Emission NW', f"nuke.createNode('{prefixNST}Emission')", icon="Light.png") cgMenu.addCommand('SimpleSSS MHD', f"nuke.createNode('{prefixNST}SimpleSSS')", icon="Toolbar3D.png") cgMenu.addSeparator() cgMenu.addCommand('aPmatte AP', f'nuke.createNode("{prefixNST}aPMatte_v2")', icon='aPmatte.png') cgMenu.addCommand('P_Ramp NKPD', f"nuke.createNode('{prefixNST}F_P_Ramp')", icon="F_pramp.png") cgMenu.addCommand('P_Project NKPD', f"nuke.createNode('{prefixNST}F_P_Project')", icon="F_pproject.png") cgMenu.addCommand('Glue_P LS', f"nuke.createNode('{prefixNST}GlueP')", icon="PosProjection_MJ.png") cgMenu.addCommand('P_Noise_Advanced NKPD', f"nuke.createNode('{prefixNST}P_Noise_Advanced')", icon="Noise.png") cgMenu.addSeparator() cgMenu.addCommand('LightSwitch TL', f"nuke.createNode('{prefixNST}LightSwitch')", icon="Switch.png") cgMenu.addCommand('LightSwitchPuppet TL', f'nuke.nodePaste("{nk_path("LightSwitchPuppet.nk", prefix=True)}")', icon="Switch.png") ############################################################################################################ ############################################################################################################ # Create Curves Menu curvesMenu = NST_menu.addMenu('Curves', icon = 'ParticleCurve.png', index = 140) waveMachineMenu = curvesMenu.addMenu("Wave Machine FL", icon='waveMachine.png') waveMachineMenu.addCommand('WaveMaker FL', f"nuke.createNode('{prefixNST}waveMaker')", icon="waveMaker.png") waveMachineMenu.addCommand('WaveCustom FL', f"nuke.createNode('{prefixNST}waveCustom')", icon="waveCustom.png") waveMachineMenu.addCommand('WaveGrade FL', f"nuke.createNode('{prefixNST}waveGrade')", icon="waveGrade.png") waveMachineMenu.addCommand('WaveRetime FL', f"nuke.createNode('{prefixNST}waveRetime')", icon="waveRetime.png") waveMachineMenu.addCommand('WaveMerge FL', f"nuke.createNode('{prefixNST}waveMerge')", icon="waveMerge.png") curvesMenu.addSeparator() curvesMenu.addCommand('Randomizer TL', f"nuke.createNode('{prefixNST}Randomizer')", icon="RenderMan.png") curvesMenu.addCommand('AnimationCurve AG', f"nuke.createNode('{prefixNST}AnimationCurve')", icon="nukepedia_icon.png") curvesMenu.addCommand('bm_CurveRemapper BM', f"nuke.createNode('{prefixNST}bm_CurveRemapper')", icon="bm_CurveRemapper_icon.png") curvesMenu.addCommand('bm_NoiseGen BM', f"nuke.createNode('{prefixNST}bm_NoiseGen')", icon="bm_NoiseGen_icon.png") ############################################################################################################ ############################################################################################################ # Create Utilities Menu utilitiesMenu = NST_menu.addMenu('Utilities', icon = 'Modify.png', index = 150) utilitiesMenu.addCommand('GUI Switch TL', f"nuke.createNode('{prefixNST}GUI_Switch')", icon="Switch.png") utilitiesMenu.addCommand('NAN INF Killer TL', f"nuke.createNode('{prefixNST}NAN_INF_Killer')", icon="Assert.png") utilitiesMenu.addSeparator() utilitiesMenu.addCommand('apViewerBlocker AP', f'nuke.createNode("{prefixNST}apViewerBlocker")', icon='ap_tools.png') utilitiesMenu.addCommand('Python_and_TCL AG', f'nuke.createNode("{prefixNST}Python_and_TCL")', icon="nukepedia_icon.png") utilitiesMenu.addCommand('RotoQC NKPD', f"nuke.createNode('{prefixNST}RotoQC')", icon="Roto.png") utilitiesMenu.addCommand('bm_MatteCheck BM', f"nuke.createNode('{prefixNST}bm_MatteCheck')", icon="bm_MatteCheck_icon.png") utilitiesMenu.addSeparator() utilitiesMenu.addCommand('viewer_render MJT', f'nuke.createNode("{prefixNST}viewer_render")', icon='viewer_render.png') utilitiesMenu.addCommand('NukeZ MJT', f'nuke.createNode("{prefixNST}NukeZ")', icon='NukeZ.png') utilitiesMenu.addCommand('Pyclopedia MJT', f'nuke.createNode("{prefixNST}Pyclopedia")', icon='Pyclopedia.png') ############################################################################################################ ############################################################################################################ # Create Templates Menu templatesMenu = NST_menu.addMenu('Templates', icon = 'PointsTo3D.png', index = 200) templatesMenu.addCommand('Advanced Keying Template Stamps TL', f'nuke.nodePaste("{nk_path("AdvancedKeyingTemplate_Stamps.nk", prefix=True)}")', icon="Keyer.png") templatesMenu.addCommand('Advanced Keying Template TL', f'nuke.nodePaste("{nk_path("AdvancedKeyingTemplate.nk", prefix=True)}")', icon="Keyer.png") templatesMenu.addCommand('STMap Keyer Setup EL', f'nuke.nodePaste("{nk_path("STMap_Keying_Setup.nk", prefix=True)}")', icon="HueKeyer.png") templatesMenu.addSeparator() gizmoDemoMenu = templatesMenu.addMenu("Gizmo Demo Scripts", icon='Group.png') gizmoDemoMenu.addCommand('WaterLens Demo MJT', f'NST_helper.filepathCreateNode("{nk_path("WaterLens_sampleScript.nk", prefix=True)}")', icon="WaterLens.png") gizmoDemoMenu.addCommand('SSMesh Demo MJT', f'nuke.nodePaste("{nk_path("SSMesh_demo.nk", prefix=True)}")', icon="SSMesh.png") gizmoDemoMenu.addCommand('UVEditor Demo MJT', f'nuke.nodePaste("{nk_path("UVEditor_demo_clean.nk", prefix=True)}")', icon="UVEditor.png") gizmoDemoMenu.addCommand('Sparky Demo DB', f'nuke.nodePaste("{nk_path("SparkyExampleScene.nk", prefix=True)}")', icon="Sparky.png") gizmoDemoMenu.addCommand('ParticleLights Demo MHD', f'nuke.nodePaste("{nk_path("ParticleLights_ExampleScript.nk", prefix=True)}")', icon="ToolbarParticles.png") gizmoDemoMenu.addCommand("X_Aton Volumetric Demo XM", f'nuke.nodePaste("{nk_path("X_Aton_Examples.nk", prefix=True)}")', icon="X_Aton.png") ================================================ FILE: NukeSurvivalToolkit/nk_files/C4x4.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 BackdropNode { inputs 0 name BackdropNode7 tile_color 0xaaaaaa00 label C4x4 note_font_size 42 selected true xpos 2847 ypos -267 bdwidth 427 bdheight 322 } push $cut_paste_input Sphere { translate {0 0 -4} name Sphere2 selected true xpos 2942 ypos -177 } push 0 ScanlineRender { inputs 2 conservative_shader_sampling false motion_vectors_type distance output_shader_vectors true P_channel rgb name ScanlineRender2 selected true xpos 2942 ypos -113 } Expression { expr0 "r * Axis1.world_matrix.0 + g * Axis1.world_matrix.1 + b * Axis1.world_matrix.2 + Axis1.world_matrix.3" expr1 "r * Axis1.world_matrix.4 + g * Axis1.world_matrix.5 + b * Axis1.world_matrix.6 + Axis1.world_matrix.7" expr2 "r * Axis1.world_matrix.8 + g * Axis1.world_matrix.9 + b * Axis1.world_matrix.10+ Axis1.world_matrix.11" name Expression3 selected true xpos 2942 ypos -54 } PositionToPoints2 { display textured render_mode textured P_channel rgb name PositionToPoints1 selected true xpos 2942 ypos -4 } Axis2 { inputs 0 rotate {0 32 0} name Axis1 selected true xpos 3102 ypos -95 } ================================================ FILE: NukeSurvivalToolkit/nk_files/GradientCorner.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 Constant { inputs 0 channels rgb name Constant1 selected true xpos 327 ypos -56 } Expression { temp_name0 DownLeftCorner temp_expr0 (1-x/width)*(1-y/height) temp_name1 DownRightCorner temp_expr1 (x/width)*(1-y/height) temp_name2 UpRightCorner temp_expr2 (x/width)*(y/height) temp_name3 UpLeftCorner temp_expr3 (1-x/width)*(y/height) expr0 DownLeftColor.r*DownLeftCorner+DownRightColor.r*DownRightCorner+UpRightColor.r*UpRightCorner+UpLeftColor.r*UpLeftCorner expr1 DownLeftColor.g*DownLeftCorner+DownRightColor.g*DownRightCorner+UpRightColor.g*UpRightCorner+UpLeftColor.g*UpLeftCorner expr2 DownLeftColor.b*DownLeftCorner+DownRightColor.b*DownRightCorner+UpRightColor.b*UpRightCorner+UpLeftColor.b*UpLeftCorner name GradientCorner selected true xpos 327 ypos 16 addUserKnob {20 User} addUserKnob {18 UpLeftColor} UpLeftColor {1 0 1} addUserKnob {6 UpLeftColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 UpRightColor} UpRightColor {0 0 1} addUserKnob {6 UpRightColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 "" +STARTLINE} addUserKnob {18 DownLeftColor} DownLeftColor {1 0 0} addUserKnob {6 DownLeftColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 DownRightColor} DownRightColor {0 1 0} addUserKnob {6 DownRightColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } ================================================ FILE: NukeSurvivalToolkit/nk_files/IBKGizmo_Expression.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input MergeExpression { expr3 (Ab-Ar*rw-Ag*gbw)>=0?1:clamp(1-(Ab-Ar*rw-Ag*gbw)/(Bb-Br*rw-Bg*gbw)) name MergeExpression5 tile_color 0xff01 label "IBKGizmo\nBLUE" selected true xpos 2219 ypos 427 addUserKnob {20 IBKGizmo} addUserKnob {26 message l "Connect B to clean plate, A to fg"} addUserKnob {7 rw l "red weight"} rw 0.5 addUserKnob {7 gbw l "green/blue weight"} gbw 0.5 } MergeExpression { inputs 0 expr3 (Ag-Ar*rw-Ab*gbw)>=0?1:clamp(1-(Ag-Ar*rw-Ab*gbw)/(Bg-Br*rw-Bb*gbw)) name MergeExpression4 tile_color 0x990000 label "IBKGizmo\nGREEN" selected true xpos 2114 ypos 428 addUserKnob {20 IBKGizmo} addUserKnob {26 message l "Connect B to clean plate, A to fg"} addUserKnob {7 rw l "red weight"} rw 0.5 addUserKnob {7 gbw l "green/blue weight"} gbw 0.5 } MergeExpression { inputs 0 expr3 "screen_Type==0 ? (Ag-Ar*rw-Ab*gbw)>=0?1:clamp(1-(Ag-Ar*rw-Ab*gbw)/(Bg-Br*rw-Bb*gbw)) : (Ab-Ar*rw-Ag*gbw)>=0?1:clamp(1-(Ab-Ar*rw-Ag*gbw)/(Bb-Br*rw-Bg*gbw))" name MergeExpression6 tile_color 0x990000 label IBKGizmo selected true xpos 2163 ypos 510 addUserKnob {20 IBKGizmo} addUserKnob {4 screen_Type l "screen type" M {Green Blue}} addUserKnob {26 message l "Connect B to clean plate, A to fg"} addUserKnob {7 rw l "red weight"} rw 0.5 addUserKnob {7 gbw l "green/blue weight"} gbw 0.5 } ================================================ FILE: NukeSurvivalToolkit/nk_files/Lines_Horizontal.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { temp_name0 thickness temp_expr0 1 temp_name1 wide temp_expr1 3 expr0 "( cos(y / wide ) + thickness ) / 2" expr1 "( cos(y / wide ) + thickness ) / 2" expr2 "( cos(y / wide ) + thickness ) / 2" expr3 "( cos(y / wide ) + thickness ) / 2" name Lines_Horizontal selected true xpos 117 ypos 34 } ================================================ FILE: NukeSurvivalToolkit/nk_files/Lines_Horizontal_Animated.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { expr0 cos((y-height)*((y+height)/(size*1000))+(frame*speed)) expr1 cos((y-height)*((y+height)/(size*1000))+(frame*speed)) expr2 cos((y-height)*((y+height)/(size*1000))+(frame*speed)) expr3 cos((y-height)*((y+height)/(size*1000))+(frame*speed)) name Lines_Horizontal_Animated selected true xpos 254 ypos -33 addUserKnob {20 User} addUserKnob {7 size R 0 10} size 30 addUserKnob {7 speed R 0 10} speed 1 } ================================================ FILE: NukeSurvivalToolkit/nk_files/Lines_Vertical.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { temp_name0 thickness temp_expr0 1 temp_name1 wide temp_expr1 3 expr0 "( sin(x / wide ) + thickness ) / 2" expr1 "( sin(x / wide ) + thickness ) / 2" expr2 "( sin(x / wide ) + thickness ) / 2" expr3 "( sin(x / wide ) + thickness ) / 2" name Lines_Vertical selected true xpos 140 ypos 34 } ================================================ FILE: NukeSurvivalToolkit/nk_files/Lines_Vertical_Animated.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { expr0 sin((x-width)*((x+width)/(size*1000))+(frame*speed)) expr1 sin((x-width)*((x+width)/(size*1000))+(frame*speed)) expr2 sin((x-width)*((x+width)/(size*1000))+(frame*speed)) expr3 sin((x-width)*((x+width)/(size*1000))+(frame*speed)) name Lines_Vertical_Animated selected true xpos 224 ypos 26 addUserKnob {20 User} addUserKnob {7 size R 0 10} size 30 addUserKnob {7 speed R 0 10} speed 1 } ================================================ FILE: NukeSurvivalToolkit/nk_files/NST_AdvancedKeyingTemplate.nk ================================================ set cut_paste_input [stack 0] BackdropNode { inputs 0 name BackdropNode4 tile_color 0x3b4245ff label "Advanced Keying Template" note_font_size 200 note_font_color 0xffffffff selected true xpos -6592 ypos -5899 bdwidth 8480 bdheight 9896 z_order -2 } BackdropNode { inputs 0 name BackdropNode18 tile_color 0x41354dff label "Util\nChannels" note_font_size 60 note_font_color 0xffffffff selected true xpos -5843 ypos -4182 bdwidth 595 bdheight 3417 z_order -1 } BackdropNode { inputs 0 name BackdropNode100 tile_color 0x667c7c00 label "BG Element" note_font_size 60 note_font_color 0xffffffff selected true xpos 3975 ypos -4951 bdwidth 507 bdheight 401 } BackdropNode { inputs 0 name BackdropNode101 tile_color 0x374935ff label "Green\nScreen Footage" note_font_size 112 selected true xpos -3513 ypos -5551 bdwidth 1252 bdheight 795 } BackdropNode { inputs 0 name BackdropNode102 tile_color 0x5c5539ff label "Edge Matte" note_font_size 60 note_font_color 0xffffffff selected true xpos -713 ypos -3799 bdwidth 1346 bdheight 1554 } BackdropNode { inputs 0 name BackdropNode103 tile_color 0x61454f00 label Cleanplate note_font_size 60 note_font_color 0xffffffff selected true xpos 756 ypos -3796 bdwidth 864 bdheight 1018 } BackdropNode { inputs 0 name BackdropNode105 tile_color 0x6b506800 label "inject alpha" note_font_size 60 note_font_color 0xffffffff selected true xpos -3075 ypos -833 bdwidth 514 bdheight 240 } BackdropNode { inputs 0 name BackdropNode106 tile_color 0x5a3f6200 label "inject cleanplate" note_font_size 60 note_font_color 0xffffffff selected true xpos -3077 ypos -537 bdwidth 511 bdheight 299 } BackdropNode { inputs 0 name BackdropNode107 tile_color 0x5b7179ff label "optional,\ngenerally \nuseful" note_font_size 42 selected true xpos -2119 ypos -1931 bdwidth 310 bdheight 295 } BackdropNode { inputs 0 name BackdropNode109 tile_color 0x60485e00 label CC note_font_size 60 note_font_color 0xffffffff selected true xpos -3141 ypos 320 bdwidth 433 bdheight 480 } BackdropNode { inputs 0 name BackdropNode110 tile_color 0x666d6500 label LightWrap note_font_size 60 note_font_color 0xffffffff selected true xpos -3120 ypos 2648 bdwidth 541 bdheight 312 } BackdropNode { inputs 0 name BackdropNode111 tile_color 0x47633eff label "Additive Keyer" note_font_size 60 note_font_color 0xffffffff selected true xpos 3740 ypos 2726 bdwidth 770 bdheight 433 } BackdropNode { inputs 0 name BackdropNode112 tile_color 0x6a5353ff label "Keep Util Channels" note_font_size 60 note_font_color 0xffffffff selected true xpos -3508 ypos -1133 bdwidth 666 bdheight 245 } BackdropNode { inputs 0 name BackdropNode113 tile_color 0x535a6bff label "Comine Despill" note_font_size 60 note_font_color 0xffffffff selected true xpos -3461 ypos -1964 bdwidth 998 bdheight 509 } BackdropNode { inputs 0 name BackdropNode114 tile_color 0x454e4d00 label premult note_font_size 60 note_font_color 0xffffffff selected true xpos -3041 ypos 2353 bdwidth 160 bdheight 160 } BackdropNode { inputs 0 name BackdropNode94 tile_color 0x645c38ff label "BG despill edge blending" note_font_size 62 note_font_color 0xffffffff selected true xpos -3278 ypos 1545 bdwidth 1211 bdheight 711 } BackdropNode { inputs 0 name BackdropNode95 tile_color 0x39525cff label "Core Despill" note_font_size 60 note_font_color 0xffffffff selected true xpos -4834 ypos -3722 bdwidth 1205 bdheight 1295 } BackdropNode { inputs 0 name BackdropNode96 tile_color 0x4b6648ff label "creating GS channel\nfor review at bottom of key" note_font_size 42 note_font_color 0xffffffff selected true xpos -3188 ypos -4626 bdwidth 566 bdheight 331 } BackdropNode { inputs 0 name BackdropNode97 tile_color 0x472e5500 label Transforms note_font_size 60 note_font_color 0xffffffff selected true xpos -3190 ypos 919 bdwidth 478 bdheight 481 } BackdropNode { inputs 0 name BackdropNode98 tile_color 0x39525cff label "Core Matte" note_font_size 60 note_font_color 0xffffffff selected true xpos -1886 ypos -3783 bdwidth 1097 bdheight 1475 } BackdropNode { inputs 0 name BackdropNode99 tile_color 0x5c5539ff label "Edge Despill" note_font_size 60 note_font_color 0xffffffff selected true xpos -3475 ypos -3743 bdwidth 1482 bdheight 1258 } push $cut_paste_input Dot { name Dot1 label BG_ELEMENT note_font_size 41 selected true xpos 4243 ypos -4663 } Dot { name Dot4 label BG note_font_size 71 selected true xpos 4243 ypos 1765 } set N95f7f190 [stack 0] Dot { name Dot6 note_font_size 41 selected true xpos -2237 ypos 1765 } set N9680d780 [stack 0] Dot { name Dot7 label BG note_font_size 101 selected true xpos -2237 ypos 2160 } Dot { name Dot8 label BG note_font_size 101 selected true xpos -2237 ypos 2799 } Dot { name Dot9 label "BG input\n for lightwrap" note_font_size 60 selected true xpos -2790 ypos 2799 } Dot { inputs 0 name Dot2 label GS_DenoisePlate note_font_size 41 selected true xpos -2967 ypos -5155 } AddChannels { channels rgba name AddChannels3 selected true xpos -3001 ypos -5086 } Dot { name Dot26 selected true xpos -2967 ypos -4509 } add_layer {GS GS.red GS.green GS.blue GS.alpha} Shuffle { black red white green red2 blue green2 black out2 GS name Shuffle33 label "\[value in] --> \[value out2]" selected true xpos -3001 ypos -4416 } Dot { name Dot34 selected true xpos -2967 ypos -4004 } set N96837240 [stack 0] Dot { name Dot38 selected true xpos -1379 ypos -4004 } set N9683b040 [stack 0] Dot { name Dot46 selected true xpos -115 ypos -4004 } set N95cb1e90 [stack 0] Remove { operation keep channels rgb name Remove30 selected true xpos -149 ypos -3883 } Dot { name Dot47 note_font_size 41 selected true xpos -115 ypos -3598 } set N95cbd2d0 [stack 0] IBKColourV3 { name IBKColourV3_1 selected true xpos 11 ypos -3601 } Dot { name Dot48 note_font_size 41 selected true xpos 45 ypos -3463 } set N95d95140 [stack 0] Dot { name Dot49 label Cleanplate note_font_size 60 selected true xpos 1263 ypos -3463 } Dot { name Dot51 label Cleanplate note_font_size 60 selected true xpos 1263 ypos -1809 } Dot { name Dot53 label Cleanplate note_font_size 60 selected true xpos 1263 ypos -330 } add_layer {cleanplate cleanplate.red cleanplate.green cleanplate.blue cleanplate.alpha} Shuffle { black red white green red2 blue green2 black out2 cleanplate name Shuffle34 label "\[value in] → \[value out2]" selected true xpos -2765 ypos -340 } push $N9683b040 Remove { operation keep channels rgb name Remove31 selected true xpos -1413 ypos -3883 } Primatte3 { data { 5 0 0 0 65552 0 5 30234 30234 30234 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 999999 999999 -1 -1 -1 -1 0.05 1.732 1.732 0.05 1.732 1.732 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 } primEdgedata { 5 0 0 0 65552 0 5 30234 30234 30234 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 999999 999999 -1 -1 -1 -1 0.05 1.732 1.732 0.05 1.732 1.732 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 } primBodydata { 5 0 0 0 65552 0 5 30234 30234 30234 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 999999 999999 -1 -1 -1 -1 0.05 1.732 1.732 0.05 1.732 1.732 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 } bg_color_selected false crop {0 0 {input.width} {input.height}} "Adjust Lighting" 0 "Hybrid Matte" 0 "Fine Tuning" 0 name Primatte4 selected true xpos -1413 ypos -3445 } Shuffle { red alpha green alpha blue alpha name Shuffle35 tile_color 0xffffffff selected true xpos -1413 ypos -3194 } Dot { name Dot54 label "Core\nMatte" note_font_size 60 selected true xpos -1379 ypos -2075 } Dot { name Dot57 selected true xpos -1379 ypos -1982 } set N94e1af50 [stack 0] Dot { name Dot58 note_font_size 41 selected true xpos -1379 ypos -1522 } push $N95d95140 push $N95cbd2d0 IBKGizmoV3 { inputs 2 name IBKGizmoV3_1 xpos -149 ypos -3466 } Shuffle { red alpha green alpha blue alpha name Shuffle36 tile_color 0xffffffff selected true xpos -149 ypos -3201 } Dot { name Dot59 label "Edge\nMatte" note_font_size 60 selected true xpos -115 ypos -1755 } Merge2 { inputs 2 operation screen bbox B name Merge2 selected true xpos -149 ypos -1526 disable true } Dot { name Dot60 label "Combined\nMatte" note_font_size 60 selected true xpos -115 ypos -692 } Dot { name Dot61 label "Combined\nMatte" note_font_size 60 selected true xpos -2667 ypos -692 } push $N96837240 Dot { name Dot67 selected true xpos -4615 ypos -4004 } set N9780eca0 [stack 0] Dot { name Dot123 note_font_size 41 selected true xpos -5664 ypos -4005 } Dot { name Dot283 label "Keep \nChannels" note_font_size 60 selected true xpos -5664 ypos -3697 } Dot { name Dot284 note_font_size 41 selected true xpos -5664 ypos -1004 } Dot { name Dot285 label "Keep \nChannels" note_font_size 60 selected true xpos -5426 ypos -1004 } Remove { channels rgba name Remove32 selected true xpos -3361 ypos -1007 } Dot { name Dot286 note_font_size 41 selected true xpos -3136 ypos -1003 } set N97873570 [stack 0] Dot { name Dot287 note_font_size 41 selected true xpos -3136 ypos -946 } push $N97873570 push $N94e1af50 Dot { name Dot288 note_font_size 41 selected true xpos -1929 ypos -1982 } Group { name ExponBlurSimple onCreate "n = nuke.thisNode()\nn.knob('size').setRange(-100, 100)\nn.knob('adjustBBoxPixels').setRange(0, 400)\nn.knob('adjustBBoxPercent').setRange(1, 2)\nn.knob('safeBBoxPixels').setRange(0, 400)\nn.knob('safeBBoxPercent').setRange(1, 2)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"includeOriginal\":\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n \n else:\n merge.setInput(steps+1, None)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps)\n \nelif k.name() == \"steps\":\n \n s = int(k.value())\n if s<1:\n k.setValue(1)\n else:\n start = nuke.toNode(\"Start\")\n end = nuke.toNode(\"End\")\n b1 = nuke.toNode(\"Blur1\")\n merge = nuke.toNode(\"Merge1\")\n AvgMult = nuke.toNode(\"AverageMult\")\n \n b1x = b1.xpos()\n b1y = b1.ypos()\n b1n = b1.name()\n \n steps = int(n.knob('steps').getValue())\n size = n.knob('size').getValue()\n mult = n.knob('mult').getValue()\n \n #b1.setInput(0, start)\n for i in range(1,merge.inputs()):\n merge.setInput(i,None)\n merge.setInput(0, b1)\n \[nuke.delete(i) for i in nuke.allNodes() if i.xpos()>start.xpos()]\n for i in range(1,steps):\n # Blur\n b = nuke.nodes.Blur()\n b.setXYpos(b1x+i*100,b1y)\n b.setInput(0,start)\n b\[\"channels\"].setValue(\"all\")\n b\[\"crop\"].setValue(0)\n b\[\"size\"].setValue(0, 1)\n b\[\"size\"].setExpression(\"(Blur1.size)*(mult)**%s\"%(i))\n b\[\"label\"].setValue(\"\[value size]\")\n merge.setInput(i if i<2 else i+1, b)\n AvgMult\['whitepoint'].setValue(i if i<2 else i+1)\n \n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n \nelif k.name() == \"output2\":\n if n.knob(\"output2\").getValue() == 4:\n n.knob('AvgMaxOriginal').setVisible(True)\n else:\n n.knob('AvgMaxOriginal').setVisible(False)\n \nelif k.name() == \"safeBBox\":\n if n.knob(\"safeBBox\").getValue() == 0:\n n.knob('safeBBoxText').setVisible(False)\n n.knob('safetyBBoxMethod').setVisible(False)\n n.knob('safeBBoxPixels').setVisible(False)\n n.knob('safeBBoxPercent').setVisible(False)\n \n elif n.knob(\"safeBBox\").getValue() == 1:\n n.knob('safetyBBoxMethod').setVisible(True)\n n.knob('safeBBoxText').setVisible(True)\n if n.knob('safetyBBoxMethod').value() == \"pixels\":\n n.knob('safeBBoxPixels').setVisible(True)\n n.knob('safeBBoxPercent').setVisible(False)\n elif n.knob('safetyBBoxMethod').value() == \"percent\":\n n.knob('safeBBoxPixels').setVisible(False)\n n.knob('safeBBoxPercent').setVisible(True)\n \nelif k.name() == \"safetyBBoxMethod\":\n if n.knob(\"safetyBBoxMethod\").value() == \"pixels\":\n n.knob('safeBBoxPixels').setVisible(True)\n n.knob('safeBBoxPercent').setVisible(False)\n elif n.knob(\"safetyBBoxMethod\").value() == \"percent\":\n n.knob('safeBBoxPixels').setVisible(False)\n n.knob('safeBBoxPercent').setVisible(True)\n \nelif k.name() == \"adjustBBoxExtra\":\n if n.knob(\"adjustBBoxExtra\").value() == \"pixels\":\n n.knob('adjustBBoxPixels').setVisible(True)\n n.knob('adjustBBoxPercent').setVisible(False)\n elif n.knob(\"adjustBBoxExtra\").value() == \"percent\":\n n.knob('adjustBBoxPixels').setVisible(False)\n n.knob('adjustBBoxPercent').setVisible(True)\n" tile_color 0xcc804eff label "(\[value output2])" note_font "Verdana Bold Bold Bold Bold" note_font_color 0xffffffff selected true xpos -1963 ypos -1731 addUserKnob {20 ExponBlurSimple} addUserKnob {41 channels T Remove1.channels} addUserKnob {41 maskChannelMask_1 l area T Multiply1.maskChannelMask} addUserKnob {41 inject_1 l inject -STARTLINE T Multiply1.inject} addUserKnob {41 invert_mask_1 l invert -STARTLINE T Multiply1.invert_mask} addUserKnob {41 fringe_1 l fringe -STARTLINE T Multiply1.fringe} addUserKnob {26 ""} addUserKnob {4 output2 l Operation: M {Screen Plus Over Hypot Average Max Min "" "" "" "" ""}} addUserKnob {3 steps l " Steps" -STARTLINE} steps 4 addUserKnob {26 text l " " -STARTLINE T " "} addUserKnob {6 includeOriginal l "Include Original?" -STARTLINE} includeOriginal true addUserKnob {6 AvgMaxOriginal l "Use Max of Average and Original" +HIDDEN +STARTLINE} addUserKnob {14 size l Size R -100 100} size -3 addUserKnob {7 mult l Multiplier R 1 5} mult -3 addUserKnob {6 clamp +STARTLINE} addUserKnob {14 postBlur l "Post Blur" R 0 100} addUserKnob {26 ""} addUserKnob {20 bboxControl l "BBox Control" n 1} bboxControl 0 addUserKnob {26 text_2 l " " T " "} addUserKnob {4 bbox l "BBox: " -STARTLINE M {union intersectionMask A B "input format" "" "" "" "" "" "" "" "" "" "" "" ""}} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {6 safeBBox l "Safe BBox" t "If the output BBox is larger than the input format and the input box combined. the result will be max of the input/format bbox plus a safety \"buffer\" in pixels or percent \n\nTurning off might make your BBox grow exponentially with high blur values" -STARTLINE} safeBBox true addUserKnob {26 safeBBoxText l "" +STARTLINE T " "} addUserKnob {4 safetyBBoxMethod l "Safe BBox Buffer " -STARTLINE M {pixels percent "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""}} safetyBBoxMethod percent addUserKnob {14 safeBBoxPixels l "" -STARTLINE +HIDDEN R 0 400} safeBBoxPixels 100 addUserKnob {14 safeBBoxPercent l "" -STARTLINE R 1 2} safeBBoxPercent 1.1 addUserKnob {26 text_3 l "" +STARTLINE T " "} addUserKnob {4 adjustBBoxExtra l "Extra BBox Adjust" -STARTLINE M {pixels percent "" "" "" "" "" "" "" "" "" "" "" "" ""}} addUserKnob {14 adjustBBoxPercent l "" -STARTLINE +HIDDEN R 1 2} adjustBBoxPercent 1 addUserKnob {14 adjustBBoxPixels l "" -STARTLINE R 0 400} addUserKnob {26 ""} addUserKnob {20 endGroup n -1} addUserKnob {41 maskChannelMask l mask T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: T ExponBlurSimple} addUserKnob {26 ver l Version: T v03} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x535e5a00 label "BBox Management" note_font_size 30 note_font_color 0xffffffff xpos -529 ypos 492 bdwidth 341 bdheight 525 } Input { inputs 0 name Inputimg xpos 0 ypos -969 } Dot { name Dot16 note_font_size 41 xpos 34 ypos -802 } set N95cd3be0 [stack 0] Dot { name Dot2 note_font_size 41 xpos -367 ypos -802 } Dot { name Dot18 label B note_font_size 41 xpos -367 ypos 434 } Dot { name Dot11 note_font_size 41 xpos -367 ypos 623 } set N95cdf8d0 [stack 0] Dot { name Dot3 note_font_size 41 xpos -367 ypos 675 } set N95ce37d0 [stack 0] Dot { name Dot8 note_font_size 41 xpos -463 ypos 675 } Dot { name Dot15 note_font_size 41 xpos -463 ypos 831 } push $N95cd3be0 Dot { name Dot1 note_font_size 41 xpos 461 ypos -802 } Remove { operation keep channels rgba name Remove1 xpos 427 ypos -718 } Dot { name Dot21 note_font_size 41 xpos 461 ypos -597 } set N94866cb0 [stack 0] Invert { name Invert1 xpos 695 ypos -604 disable {{"parent.size < 0 ? 0 : 1"}} } set N94f5db20 [stack 0] Dot { name Dot4 note_font_size 41 xpos 540 ypos -543 } NoOp { name Original xpos 506 ypos -327 } set N94f37740 [stack 0] Dot { name Dot5 note_font_size 41 xpos 540 ypos 14 } Crop { inputs 0 box {{"!\[exists parent.input0] ? 0 : input.format.x"} {"!\[exists parent.input0] ? 0 : input.format.y"} {"!\[exists parent.input0] ? 0 : input.format.r"} {"!\[exists parent.input0] ? 0 : input.format.t"}} reformat true crop false name Crop1 xpos 210 ypos -750 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } AddChannels { channels rgba name AddChannels2 xpos 210 ypos -724 } push $N95cd3be0 Merge2 { inputs 2 name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 83 ypos -671 } NoOp { name BBoxInput xpos 83 ypos -628 addUserKnob {20 User} addUserKnob {15 bbox} bbox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} } push $N94f37740 Input { inputs 0 name Inputarea xpos 289 ypos -638 number 2 } AddChannels { channels alpha color 1 name AddChannels1 xpos 289 ypos -580 } Invert { channels rgba name Invert3 xpos 289 ypos -503 } push $N94f5db20 Multiply { inputs 1+1 value 0 name Multiply1 label "\[value value]" xpos 695 ypos -512 } NoOp { name Start xpos 695 ypos -450 } set N94fce200 [stack 0] Blur { size {{(Blur1.size)*(mult)**3} {(Blur1.size)*(mult)**3}} crop false name Blur4 label "\[value size]" xpos 995 ypos -370 } push $N94fce200 Blur { size {{(Blur1.size)*(mult)**2} {(Blur1.size)*(mult)**2}} crop false name Blur3 label "\[value size]" xpos 895 ypos -370 } push 0 push $N94fce200 Blur { size {{(Blur1.size)*(mult)**1} {(Blur1.size)*(mult)**1}} crop false name Blur2 label "\[value size]" xpos 795 ypos -370 } push $N94fce200 Blur { size {{parent.size.w} {parent.size.h}} name Blur1 label "\[value size]" xpos 695 ypos -370 } Merge2 { inputs 5+1 operation {{mergeNumber.mergeNumber}} also_merge all name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 695 ypos -273 } NoOp { name End xpos 695 ypos -230 } set N949d9830 [stack 0] CopyBBox { inputs 2 name CopyBBox1 xpos 585 ypos -175 } Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" tile_color 0xa57aaaff note_font "Verdana Bold Bold Bold Bold Bold" note_font_color 0xffffffff xpos 585 ypos -151 addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} overscanType {{parent.safetyBBoxMethod}} addUserKnob {14 overscan l Overscan R 0 400} overscan {{parent.safeBBoxPixels} {parent.safeBBoxPixels}} addUserKnob {14 overscanPercent l "Overscan Percent" R 1 4} overscanPercent {{parent.safeBBoxPercent} {parent.safeBBoxPercent}} addUserKnob {20 inputBbox l "BBox Data" n 1} addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set N949f3560 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set N949f7480 [stack 0] push $N949f3560 Crop { box {{parent.inputBBox} {parent.inputBBox} {parent.inputBBox} {parent.inputBBox}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N949fb360 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set N959300f0 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{((input.bbox.r-input.bbox.x)/2)+input.bbox.x} {((input.bbox.t-input.bbox.y)/2)+input.bbox.y}} shutteroffset centred name Transform1 selected true xpos 120 ypos 553 } push $N959300f0 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $N949f7480 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $N949fb360 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N95f93ca0 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $N95f93ca0 NoOp { name OutputBBox1 xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group push $N949d9830 Merge2 { inputs 2 bbox intersection also_merge all name Merge4 xpos 585 ypos -127 } push $N949d9830 CopyBBox { inputs 2 name CopyBBox2 xpos 585 ypos -101 } push $N949d9830 Switch { inputs 2 which {{"parent.safeBBox && ((BBoxResult.bbox.x < BBoxInput.bbox.x || BBoxResult.bbox.y < BBoxInput.bbox.y || BBoxResult.bbox.r > BBoxInput.bbox.r || BBoxResult.bbox.t > BBoxInput.bbox.t))"}} name Switch2 label "\[value which]" xpos 695 ypos -106 } Grade { channels all whitepoint 5 black_clamp false name AverageMult xpos 695 ypos -37 disable {{"output2 == 4 ? 0 : 1"}} } Merge2 { inputs 2 operation max also_merge all name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 695 ypos 10 disable {{"output2 == 4 && includeOriginal == 1 && AvgMaxOriginal == 1 ? 0 : 1"}} } Clamp { name Clamp1 selected true xpos 695 ypos 50 disable {{!parent.clamp}} } Blur { size {{postBlur} {postBlur}} name BlurOriginal label "\[value size]" xpos 695 ypos 102 } Invert { name Invert2 xpos 695 ypos 144 disable {{"parent.size < 0 ? 0 : 1"}} } push $N94866cb0 Switch { inputs 2 which {{"parent.size == 0 ? 0 : 1"}} name Switch1 label "\[value which]" xpos 427 ypos 190 } Dot { name Dot17 label A note_font_size 41 xpos 34 ypos 455 } Dot { name Dot7 note_font_size 41 xpos 34 ypos 579 } set N94e557a0 [stack 0] Dot { name Dot12 note_font_size 41 xpos -260 ypos 579 } Dot { name Dot13 note_font_size 41 xpos -260 ypos 799 } push $N95cdf8d0 Input { inputs 0 name Inputmask xpos 512 ypos 322 number 1 } Dot { name Dot19 label Mask note_font_size 41 xpos 546 ypos 435 } set N94e652a0 [stack 0] Dot { name Dot20 note_font_size 41 xpos 436 ypos 435 } push $N94e557a0 Merge2 { inputs 2 bbox intersection Achannels {rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue rgba.alpha} output {rgba.red -rgba.green -rgba.blue rgba.alpha} name MergeIntersection xpos 402 ypos 572 disable {{"!\[exists parent.input1]"}} } Merge2 { inputs 2 Achannels {rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue rgba.alpha} output {rgba.red -rgba.green -rgba.blue rgba.alpha} name MergeUnion xpos 402 ypos 610 disable {{"!\[exists parent.input1]"}} } Dot { name Dot6 label "intersection\nof (Mask and A) + B" note_font_size 14 note_font_color 0xffffffff xpos 436 ypos 770 } push $N94e652a0 Dot { name Dot10 note_font_size 41 xpos 546 ypos 672 } push $N94e557a0 push $N95ce37d0 Merge2 { inputs 2+1 operation copy Achannels none Bchannels none output none also_merge {{{parent.Remove1.channels}}} name MergeKeymix xpos 0 ypos 665 } Dot { name Dot14 note_font_size 41 xpos 34 ypos 747 } set N95d27470 [stack 0] push $N95ce37d0 CopyBBox { inputs 2 name CopyBBoxUnion xpos -401 ypos 743 disable {{parent.bbox==0?0:1}} } CopyBBox { inputs 2 name CopyBBoxIntersection xpos -401 ypos 769 disable {{"parent.bbox==1 ? 0 : 1"}} } CopyBBox { inputs 2 name CopyBBoxA xpos -401 ypos 795 disable {{"parent.bbox==2 ? 0 : 1"}} } CopyBBox { inputs 2 name CopyBBoxB xpos -401 ypos 827 disable {{"parent.bbox==3 ? 0 : 1"}} } Crop { box {0 0 {parent.width} {parent.height}} crop false name CopyBBoxFormat xpos -401 ypos 853 disable {{"parent.bbox==4 ? 0 : 1"}} addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N96b1c1d0 [stack 0] Transform { scale {{parent.adjustBBoxPercent} {parent.adjustBBoxPercent}} center {{((input.bbox.r-input.bbox.x)/2)+input.bbox.x} {((input.bbox.t-input.bbox.y)/2)+input.bbox.y}} black_outside false shutteroffset centred name TransformBBoxAdjustPercent xpos -516 ypos 898 } push $N96b1c1d0 AdjBBox { numpixels {{parent.adjustBBoxPixels} {parent.adjustBBoxPixels}} name AdjBBoxPixels xpos -401 ypos 901 } Switch { inputs 2 which {{adjustBBoxExtra}} name Switch3 xpos -401 ypos 940 } Dot { name Dot9 note_font_size 41 xpos -367 ypos 993 } push $N95d27470 CopyBBox { inputs 2 name CopyBBox xpos 0 ypos 989 } BlackOutside { name BlackOutside1 xpos 0 ypos 1015 disable {{!parent.blackOutside}} } Output { name Output1 xpos 0 ypos 1155 } NoOp { inputs 0 name mergeNumber xpos 229 ypos -862 addUserKnob {20 User} addUserKnob {3 mergeNumber} mergeNumber {{"output2 == 0 ? 25 : output2 == 1 ? 24 : output2 == 2 ? 22 : output2 == 3 ? 13 : output2 == 4 ? 24 : output2 == 5 ? 17 : 18"}} } push $N949d9830 NoOp { name BBoxResult xpos 585 ypos -230 addUserKnob {20 User} addUserKnob {15 bbox} bbox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} } end_group Dot { name Dot289 note_font_size 41 selected true xpos -1929 ypos -1575 } Dot { name Dot290 label "Core\nMatte" note_font_size 60 selected true xpos -2627 ypos -1575 } Dot { name Dot291 note_font_size 41 selected true xpos -2737 ypos -1575 } set N95af3ff0 [stack 0] push $N9780eca0 Remove { operation keep channels rgb name Remove33 selected true xpos -4649 ypos -3883 } Dot { name Dot292 selected true xpos -4615 ypos -3571 } set N95b033b0 [stack 0] Dot { name Dot293 selected true xpos -4033 ypos -3571 } push $N95b033b0 OFXuk.co.thefoundry.keylight.keylight_v201 { show "Final Result" unPreMultiply false screenColour {0 1 0} screenGain 1 screenBalance 0.5 alphaBias {0.5 0.5 0.5} despillBias {0.5 0.5 0.5} gangBiases true preBlur 0 "Screen Matte" 0 screenClipMin 0 screenClipMax 1 screenClipRollback 0 screenGrowShrink 0 screenSoftness 0 screenDespotBlack 0 screenDespotWhite 0 screenReplaceMethod "Soft Colour" screenReplaceColour {0.5 0.5 0.5} Tuning 0 midPoint 0.5 lowGain 1 midGain 1 highGain 1 "Inside Mask" 0 sourceAlphaHandling Ignore insideReplaceMethod "Soft Colour" insideReplaceColour {0.5 0.5 0.5} Crops 0 SourceXMethod Colour SourceYMethod Colour SourceEdgeColour 0 SourceCropL 0 SourceCropR 1 SourceCropB 0 SourceCropT 1 balanceSet false insideComponent None outsideComponent None cacheBreaker true name Keylight4 selected true xpos -4649 ypos -3444 } Dot { name Dot294 selected true xpos -4615 ypos -3053 } set N96ca65b0 [stack 0] Merge2 { inputs 2 operation minus name Merge3 selected true xpos -4067 ypos -3057 } Saturation { saturation 0 name Saturation1 selected true xpos -4067 ypos -3015 } Dot { name Dot295 selected true xpos -4033 ypos -2952 } Dot { name Dot296 label "Restore Lum" note_font_size 41 selected true xpos -4488 ypos -2952 } push $N96ca65b0 Merge2 { inputs 2 operation plus output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge5 selected true xpos -4649 ypos -2956 } Dot { name Dot297 label "core \ndespill" note_font_size 60 selected true xpos -4615 ypos -2596 } Dot { name Dot298 selected true xpos -4615 ypos -1575 } Dot { name Dot299 label "core \ndespill" note_font_size 60 selected true xpos -3266 ypos -1575 } push $N95af3ff0 Dot { name Dot300 note_font_size 41 selected true xpos -2737 ypos -1698 } push $N96837240 Remove { operation keep channels rgb name Remove34 selected true xpos -3001 ypos -3883 } Dot { name Dot301 selected true xpos -2967 ypos -3618 } set N96cee310 [stack 0] Dot { name Dot302 selected true xpos -2210 ypos -3618 } push $N96cee310 OFXuk.co.thefoundry.keylight.keylight_v201 { show "Final Result" unPreMultiply false screenColour {0 1 0} screenGain 1 screenBalance 0.5 alphaBias {0.5 0.5 0.5} despillBias {0.5 0.5 0.5} gangBiases true preBlur 0 "Screen Matte" 0 screenClipMin 0 screenClipMax 1 screenClipRollback 0 screenGrowShrink 0 screenSoftness 0 screenDespotBlack 0 screenDespotWhite 0 screenReplaceMethod "Soft Colour" screenReplaceColour {0.5 0.5 0.5} Tuning 0 midPoint 0.5 lowGain 1 midGain 1 highGain 1 "Inside Mask" 0 sourceAlphaHandling Ignore insideReplaceMethod "Soft Colour" insideReplaceColour {0.5 0.5 0.5} Crops 0 SourceXMethod Colour SourceYMethod Colour SourceEdgeColour 0 SourceCropL 0 SourceCropR 1 SourceCropB 0 SourceCropT 1 balanceSet false insideComponent None outsideComponent None cacheBreaker true name Keylight5 selected true xpos -3001 ypos -3450 } Dot { name Dot303 selected true xpos -2967 ypos -3004 } set N96be3cd0 [stack 0] Merge2 { inputs 2 operation minus name Merge10 selected true xpos -2244 ypos -3008 } Saturation { saturation 0 name Saturation2 selected true xpos -2244 ypos -2959 } Clamp { channels rgba maximum_enable false name Clamp3 selected true xpos -2244 ypos -2933 } Dot { name Dot304 label "despill\nmatte" note_font_size 60 selected true xpos -2210 ypos -2841 } set N94dc52f0 [stack 0] Dot { name Dot305 label "despill\nMatte" note_font_size 60 selected true xpos -2210 ypos -2644 } push $N96be3cd0 Dot { name Dot306 selected true xpos -2967 ypos -2841 } set N94d07a10 [stack 0] add_layer {despill despill.red} Copy { inputs 2 from0 rgba.red to0 despill.red name Copy7 selected true xpos -3001 ypos -2654 } Dot { name Dot307 label "edge\ndespill" note_font_size 60 selected true xpos -2967 ypos -1852 } Multiply { inputs 1+1 channels despill value 0 name Multiply2 label "\[value value]" selected true xpos -3001 ypos -1710 } Keymix { inputs 3 channels rgb name Keymix3 selected true xpos -3001 ypos -1579 } Copy { inputs 2 channels all bbox A name Copy12 selected true xpos -3001 ypos -1015 } CopyBBox { inputs 2 name CopyBBox3 selected true xpos -3001 ypos -950 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha bbox B name Copy14 selected true xpos -3001 ypos -699 } Copy { inputs 2 channels cleanplate bbox B name Copy15 selected true xpos -3001 ypos -344 } Dot { name Dot313 note_font_size 41 selected true xpos -2967 ypos 403 } Dot { name Dot314 note_font_size 41 selected true xpos -2967 ypos 864 } Dot { name Dot315 note_font_size 41 selected true xpos -2967 ypos 1138 } Dot { name Dot316 note_font_size 41 selected true xpos -2967 ypos 1439 } Dot { name Dot317 selected true xpos -2967 ypos 1685 } set N968f6be0 [stack 0] Shuffle { in despill name Shuffle39 label "\[value in]" selected true xpos -2689 ypos 1676 } Remove { operation keep channels rgba name Remove35 selected true xpos -2689 ypos 1726 } Grade { channels rgba black_clamp false name Grade4 selected true xpos -2689 ypos 1766 } set N9499f520 [stack 0] Dot { name Dot318 label "despill\nmatte" note_font_size 41 selected true xpos -2655 ypos 1902 } set N949ab640 [stack 0] Dot { name Dot319 note_font_size 41 selected true xpos -2822 ypos 1902 } Dot { name Dot320 note_font_size 41 selected true xpos -2822 ypos 2144 } push $N9680d780 Dot { name Dot321 label BG note_font_size 101 selected true xpos -2441 ypos 1765 } Grade { black_clamp false name Grade6 label "BG Prep" selected true xpos -2475 ypos 1835 } Dot { name Dot322 selected true xpos -2441 ypos 1989 } push $N949ab640 Merge2 { inputs 2 operation multiply name Merge36 selected true xpos -2689 ypos 1985 } Shuffle { alpha black name Shuffle40 label "\[value in]" selected true xpos -2689 ypos 2030 } push $N9499f520 Shuffle { green red blue red alpha red name Shuffle41 label "\[value in]" selected true xpos -2832 ypos 1762 } Grade { channels rgba whitepoint 0.5 black_clamp false name Grade7 selected true xpos -2832 ypos 1816 } push $N968f6be0 Saturation { inputs 1+1 name Saturation3 label "change if necessary" selected true xpos -3001 ypos 1812 } Merge2 { inputs 2 operation plus bbox B output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge49 selected true xpos -3001 ypos 2036 } Group { inputs 2 name BlacksMatch help "Choose a black point color or plug an image /constant you wish to be your blackpoint into BlackColor input.\n\nUse Mult Range to control how far above the blackpoint color to affect the lows\n\nUse the RollOff gamma to add fall off to the bottom of the curve\n\nTurn on the preview Plotscan and move the sampler over a region to see what your settings are doing to a linear 0-1 ramp. This will help you see if you have weird curves, clamping or other funky problems as you adjust settings" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"inputChange\":\n nsd = nuke.toNode(\"SwitchDefault\")\n n\[\"defaultBlack\"].setEnabled(nsd\[\"which\"].getValue()==1)\n\nif k.name() == \"previewPlotScan\":\n p = n.knob(\"previewPlotScan\").value()\n if p == True:\n n.knob(\"plotscanSampler\").setVisible(True)\n else:\n n.knob(\"plotscanSampler\").setVisible(False)" tile_color 0x1c1c1cff note_font "Helvetica Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" selected true xpos -3001 ypos 2141 addUserKnob {20 BlacksMatch} addUserKnob {6 default_black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 premultInput l "Premultiplied Input" +STARTLINE} addUserKnob {4 mergeOp l Operation: t "Plus and Screen do the same thing with our operation, so I only included a hypot between plus/screen and hypot. Hypot raises the mult by x2 because I thought that gave more pleasising results. It will probably be a harsher curve (more towards clamp) than the plus/screen result)." M {Plus/Screen Hypot "" ""}} addUserKnob {18 defaultBlack l "Default Black" +DISABLED} defaultBlack {0.05 0.05 0.05} addUserKnob {6 defaultBlack_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 defaultBlack_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 defaultBlack_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 defaultBlack_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {7 multBase l "Mult Low Range" t "This is the Multiplier for the top of the \"toe\" curve. It is multiplying the BlackPoint color by this number and setting it as the highest point weird the curve will influence the midtones and the highlights" R 1.5 10} multBase 4 addUserKnob {7 rolloffGamma l "Rolloff Gamma" t "This controls the bottom of the curve, the falloff to where it is bending toward the \"cut off point\" which is out black color. A lower value will act more like a clamp and a higher value will act more like a plus." R 0.1 1} rolloffGamma 0.35 addUserKnob {4 minVal l "Min Value is:" M {"Toe Result" "Clamp Result" "" ""}} addUserKnob {6 previewPlotScan l "Preview PlotScan" t "Click to overlay a plotscan graph to show you how your black color is influenced by your settings." +STARTLINE} addUserKnob {12 plotscanSampler l "PlotScan Sampler" +HIDDEN} plotscanSampler {200 200} addUserKnob {6 color_rgb_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask -STARTLINE T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Name: T BlacksMatch} addUserKnob {26 ver l Version: T v10} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x556a5000 label "This Creates a \nPer Channel Key\nBased on the Blackpoint" note_font_size 30 note_font_color 0xffffffff xpos 991 ypos -77 bdwidth 314 bdheight 421 } StickyNote { inputs 0 name StickyNote2 tile_color 0xff label green note_font_size 41 note_font_color 0xffffffff xpos 177 ypos 466 } StickyNote { inputs 0 name StickyNote1 tile_color 0xff label red note_font_size 41 note_font_color 0xffffffff xpos 188 ypos 350 } StickyNote { inputs 0 name StickyNote3 tile_color 0xff label blue note_font_size 41 note_font_color 0xffffffff xpos 186 ypos 570 } StickyNote { inputs 0 name StickyNote4 tile_color 0xff label "min will be \nblack color" note_font_size 31 note_font_color 0xffffffff xpos 143 ypos 733 } Input { inputs 0 name Inputimg xpos 322 ypos -550 } Dot { name Dot17 xpos 356 ypos -418 } set N948771b0 [stack 0] AddChannels { channels rgba color 1 name AddChannels1 xpos 322 ypos -365 } Dot { name Dot5 note_font_size 41 xpos 356 ypos -288 } set N948826b0 [stack 0] Grade { channels rgba white 0 multiply 0 add {{defaultBlack.r} {defaultBlack.g} {defaultBlack.b} 0} black_clamp false name Grade1 label color xpos 922 ypos -295 } Input { inputs 0 name InputBlackColor xpos 1138 ypos -569 number 1 } Switch { inputs 2 which {{"!\[exists parent.input1]"}} name SwitchDefault xpos 1138 ypos -291 } Dot { name Dot26 label "Black Color" note_font_size 41 xpos 1172 ypos -212 } Dot { name Dot4 note_font_size 41 xpos 1172 ypos -151 } set N948a1640 [stack 0] Dot { name Dot36 note_font_size 41 xpos 1631 ypos -151 } set N948a5520 [stack 0] Dot { name Dot16 note_font_size 41 xpos 2140 ypos -151 } set N95f75ad0 [stack 0] Crop { box {{plotscanSampler.x-2} {plotscanSampler.y-2} {plotscanSampler.x+2} {plotscanSampler.x+2}} reformat true crop false name Crop1 xpos 2432 ypos -154 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_1 l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Blur { channels rgb size 16 name Blur1 label "\[value size]" xpos 2432 ypos -130 } Reformat { format "512 512 0 0 512 512 1 square_512" name Reformat4 xpos 2432 ypos -92 } Dot { name Dot12 note_font_size 41 xpos 2466 ypos -43 } set N95c0a4d0 [stack 0] Dot { name Dot47 note_font_size 41 xpos 2917 ypos -43 } set N95c0e260 [stack 0] Dot { name Dot42 label "Black Color" note_font_size 41 xpos 2917 ypos 286 } Dot { name Dot43 note_font_size 41 xpos 2917 ypos 366 } set N95c16020 [stack 0] Dot { name Dot44 note_font_size 41 xpos 2917 ypos 480 } set N95c19f00 [stack 0] Dot { name Dot45 note_font_size 41 xpos 2917 ypos 588 } set N95c1df60 [stack 0] Dot { name Dot31 note_font_size 41 xpos 2917 ypos 656 } set N95c21d80 [stack 0] push $N95c21d80 push $N95c0e260 Dot { name Dot11 label "Black Color" note_font_size 41 xpos 3426 ypos -43 } Multiply { channels rgb value 2 name Multiply6 label "mult black color" xpos 3392 ypos 77 } Reformat { inputs 0 format "512 512 0 0 512 512 1 square_512" pbb true name Reformat1 xpos 2711 ypos 61 } Ramp { p0 {0 0} p1 {512 0} name Ramp1 xpos 2711 ypos 93 } Dot { name Dot1 note_font_size 41 xpos 2745 ypos 154 } set N95c4b280 [stack 0] Dot { name Dot7 note_font_size 41 xpos 3138 ypos 154 } set N95c4f010 [stack 0] MergeExpression { inputs 2 expr0 Br/Ar expr1 Bg/Ag expr2 Bb/Ab name MergeDivide2 xpos 3392 ypos 151 } Invert { channels rgb name Invert5 xpos 3392 ypos 175 } Clamp { channels rgb name Clamp4 xpos 3392 ypos 199 } Gamma { channels rgb value 0.5 name Gamma4 xpos 3392 ypos 223 } Dot { name Dot39 xpos 3426 ypos 366 } set N95c7daa0 [stack 0] Dot { name Dot40 xpos 3426 ypos 480 } set N95c81830 [stack 0] Dot { name Dot41 xpos 3426 ypos 588 } Shuffle { red blue green blue alpha blue name Shuffle11 tile_color 0x3fbfff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 3277 ypos 581 } push $N95c1df60 push $N95c81830 Shuffle { red green blue green alpha green name Shuffle12 tile_color 0xbf00ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 3276 ypos 473 } push $N95c19f00 push $N95c7daa0 Shuffle { green red blue red alpha red name Shuffle13 tile_color 0xbf0000ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 3270 ypos 359 } push $N95c16020 push $N95c4f010 Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} output {rgba.red -rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge14 label red xpos 3104 ypos 359 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} Bchannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} output {-rgba.red rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge15 label green xpos 3104 ypos 473 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} Bchannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} output {-rgba.red -rgba.green rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge16 label blue xpos 3104 ypos 581 } Merge2 { inputs 2 operation max bbox B Achannels rgb Bchannels rgb output rgb name Merge18 label "Set Min Color\nto Blackpoint" xpos 3104 ypos 644 } Dot { name Dot46 note_font_size 41 xpos 3138 ypos 742 } Switch { inputs 2 which {{minVal}} name SwitchMinColor1 xpos 2883 ypos 739 } push $N95c0a4d0 Multiply { channels rgb value {{multBase}} name Multiply3 label "mult black color" xpos 2432 ypos 63 } Multiply { channels rgb value 2 name Multiply4 label "hypot Extra Mult\n" xpos 2432 ypos 95 disable {{"mergeOp == 1 ? 0 : 1"}} } push $N95c4b280 MergeExpression { inputs 2 expr0 Br/Ar expr1 Bg/Ag expr2 Bb/Ab name MergeDivide1 xpos 2432 ypos 151 } Invert { channels rgb name Invert2 xpos 2432 ypos 175 } Clamp { channels rgb name Clamp2 xpos 2432 ypos 199 } Gamma { channels rgb value {{rolloffGamma}} name Gamma2 xpos 2432 ypos 223 } Dot { name Dot6 xpos 2466 ypos 366 } set N96e4f6c0 [stack 0] Dot { name Dot9 xpos 2466 ypos 480 } set N96e53630 [stack 0] Dot { name Dot10 xpos 2466 ypos 588 } Shuffle { red blue green blue alpha blue name Shuffle4 tile_color 0x3fbfff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 2511 ypos 581 } push $N95c1df60 push $N96e53630 Shuffle { red green blue green alpha green name Shuffle5 tile_color 0xbf00ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 2511 ypos 473 } push $N95c19f00 push $N96e4f6c0 Shuffle { green red blue red alpha red name Shuffle6 tile_color 0xbf0000ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 2517 ypos 359 } push $N95c16020 push $N95c4b280 Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} output {rgba.red -rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge2 label red xpos 2711 ypos 359 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} Bchannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} output {-rgba.red rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge6 label green xpos 2711 ypos 473 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} Bchannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} output {-rgba.red -rgba.green rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge7 label blue xpos 2711 ypos 581 } Merge2 { inputs 2 operation max bbox B Achannels rgb Bchannels rgb output rgb name Merge8 label "Set Min Color\nto Blackpoint" xpos 2711 ypos 730 } Group { name PlotScanline tile_color 0x9c0000ff xpos 2711 ypos 805 addUserKnob {20 Controls} addUserKnob {4 mode l "Sampling method" M {"Slice Per Pixel (faster)" "Slice Area (slower)" "Full Scanline" "" "" ""}} mode "Full Scanline" addUserKnob {6 add2image l "Add to original" +STARTLINE} addUserKnob {6 Normalize -STARTLINE} addUserKnob {6 tonemap l "Tone Map (HDRI)" -STARTLINE} addUserKnob {6 curve l "Plot as curve" +STARTLINE} curve true addUserKnob {3 curveFat l "Curve Thickness" -STARTLINE} addUserKnob {3 sa l "Sample Area" t "Disabled when using pr pixel method."} sa 1 addUserKnob {7 lift l Lift R -1 1} addUserKnob {7 scale l Scale R 0 5} scale 1 addUserKnob {26 ""} addUserKnob {12 p1 l "Start Point"} p1 {376 418} addUserKnob {12 p2 l "End Point" -STARTLINE} p2 {428.5 425.5} addUserKnob {26 ""} addUserKnob {26 "" l "About " T "Plot Scanline v0.4 | theo@euqahuba.com\nUse P1 to select your scanline and/or you start slice."} } Input { inputs 0 name Input1 xpos -480 ypos 62 } set N95990dc0 [stack 0] Expression { temp_name0 length temp_expr0 sqrt(r*r+g*g+b*b) expr0 r/length expr1 g/length expr2 b/length name Normalize xpos -480 ypos 108 disable {{1-parent.Normalize i}} } Expression { expr0 r/(r+1) expr1 g/(g+1) expr2 b/(b+1) name tonamap xpos -480 ypos 134 disable {{1-parent.tonemap i}} } set N959a1140 [stack 0] Expression { temp_name0 rExpr temp_expr0 "min(max(0,\r\nceil(r(x,parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" temp_name1 gExpr temp_expr1 "min(max(0,\r\nceil(g(x,parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" temp_name2 bExpr temp_expr2 "min(max(0,\r\nceil(b(x,parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" expr0 rExpr expr1 gExpr expr2 bExpr expr3 0 name scanline xpos -302 ypos 193 addUserKnob {20 User} } push $N959a1140 Expression { temp_name0 rExpr temp_expr0 "min(max(0,\r\nceil(r((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y,parent.sa,parent.sa)-((y/height+parent.lift)*parent.scale))),1)" temp_name1 gExpr temp_expr1 "min(max(0,\r\nceil(g((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y,parent.sa,parent.sa)-((y/height+parent.lift)*parent.scale))),1)" temp_name2 bExpr temp_expr2 "min(max(0,\r\nceil(b((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y,parent.sa,parent.sa)-((y/height+parent.lift)*parent.scale))),1)" expr0 rExpr expr1 gExpr expr2 bExpr expr3 0 name Expression_highQuality xpos -515 ypos 197 addUserKnob {20 User} } push $N959a1140 Expression { temp_name0 rExpr temp_expr0 "min(max(0,\r\nceil(r((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" temp_name1 gExpr temp_expr1 "min(max(0,\r\nceil(g((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" temp_name2 bExpr temp_expr2 "min(max(0,\r\nceil(b((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" expr0 rExpr expr1 gExpr expr2 bExpr expr3 0 name perPixel xpos -419 ypos 201 addUserKnob {20 User} } Switch { inputs 3 which {{parent.mode i}} name Switch2 xpos -480 ypos 253 } Matrix { matrix { {0 1 0} {1 -4 1} {0 1 0} } name Matrix2 xpos -480 ypos 284 disable {{-1+parent.curve i x70 1}} } Dilate { size {{parent.curveFat}} name Dilate1 xpos -480 ypos 326 disable {{-1+parent.curve.main}} } Clamp { name Clamp1 xpos -480 ypos 383 } set N96e9e8d0 [stack 0] push $N95990dc0 Dot { name Dot1 xpos -556 ypos 66 } Clamp { maximum 331 name Clamp2 xpos -590 ypos 352 } Merge2 { inputs 2 operation plus bbox intersection name Merge1 xpos -590 ypos 394 } Dot { name Dot2 xpos -556 ypos 433 } push $N96e9e8d0 Switch { inputs 2 which {{parent.add2image i}} name Switch1 xpos -480 ypos 430 } Output { name Output1 xpos -480 ypos 470 } end_group Dot { name Dot15 note_font_size 41 xpos 2745 ypos 857 } set N96ed5110 [stack 0] Shuffle { red white green white blue white alpha white name Shuffle7 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 2821 ypos 850 } BlackOutside { name BlackOutside1 xpos 2821 ypos 882 } Dilate { channels rgba size -2 name Dilate1 xpos 2821 ypos 910 } Invert { name Invert3 xpos 2821 ypos 934 } push $N96ed5110 Merge2 { inputs 2 name Merge9 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 2711 ypos 938 } Group { name BinaryAlpha tile_color 0x2a2a2aff label "(\[value an] --> \[value output1])" note_font Verdana note_font_color 0xfffff9ff xpos 2711 ypos 983 addUserKnob {20 BinaryAlpha} addUserKnob {4 an l Analyze: M {rgb rgba alpha "" "" ""}} addUserKnob {4 output1 l Output: M {rgba alpha "" "" "" ""}} output1 alpha addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Analyzes channel input and creates a binary result 0 or 1 and outputs it into output channel" T BinaryAlpha} addUserKnob {26 ver l Version: T v03} } Input { inputs 0 name Input xpos -398 ypos 275 } Expression { temp_name0 rgb_an temp_expr0 "r !=0 || g!=0 || b!=0?1:0" temp_name1 rgba_an temp_expr1 "r!=0 || g!=0 || b!=0 || a!=0?1:0" temp_name2 alpha_an temp_expr2 a!=0?1:0 expr3 "parent.an == 0 ? rgb_an : parent.an == 1 ? rgba_an : alpha_an" name Expression xpos -398 ypos 341 } Shuffle { red alpha green alpha blue alpha name Shuffle label "\[value in]" xpos -398 ypos 367 disable {{parent.output1}} } Output { name Output1 xpos -398 ypos 456 } end_group Reformat { type "to box" box_height {{"\[exists parent.input0] ? parent.input.height : root.format.height"}} resize height filter Impulse pbb true name Reformat2 xpos 2711 ypos 1041 } Reformat { type "to box" box_width {{"\[exists parent.input0] ? parent.input.width : root.format.width"}} box_height {{input.height}} resize none filter Impulse black_outside true pbb true name Reformat3 xpos 2711 ypos 1081 } Dilate { channels rgba size 1 name Dilate2 xpos 2711 ypos 1121 } Dot { name Dot14 note_font_size 41 xpos 2745 ypos 1192 } Input { inputs 0 name Inputmask xpos 864 ypos 878 number 2 } Dot { name Dot29 xpos 898 ypos 1015 } push $N948a5520 Dot { name Dot33 label "Black Color" note_font_size 41 xpos 1631 ypos 295 } Dot { name Dot37 note_font_size 41 xpos 1631 ypos 360 } set N947a4230 [stack 0] Dot { name Dot34 note_font_size 41 xpos 1631 ypos 474 } set N947a8110 [stack 0] Dot { name Dot35 note_font_size 41 xpos 1631 ypos 582 } set N947abff0 [stack 0] Dot { name Dot13 note_font_size 41 xpos 1631 ypos 674 } set N9470b670 [stack 0] push $N9470b670 push $N95f75ad0 Multiply { channels rgb value 2 name Multiply7 label "mult black color" xpos 2106 ypos 87 } push $N948826b0 Unpremult { name Unpremult1 xpos 322 ypos -16 disable {{"! premultInput"}} } Dot { name Dot18 xpos 356 ypos 145 } set N94d7beb0 [stack 0] Dot { name Dot22 note_font_size 41 xpos 1028 ypos 145 } set N94da7bc0 [stack 0] Dot { name Dot32 note_font_size 41 xpos 1852 ypos 145 } set N94d840c0 [stack 0] MergeExpression { inputs 2 expr0 Br/Ar expr1 Bg/Ag expr2 Bb/Ab name MergeDivide3 xpos 2106 ypos 142 } Invert { channels rgb name Invert4 xpos 2106 ypos 166 } Clamp { channels rgb name Clamp3 xpos 2106 ypos 190 } Gamma { channels rgb value 0.51 name Gamma3 xpos 2106 ypos 214 } Dot { name Dot24 xpos 2140 ypos 360 } set N94d6c980 [stack 0] Dot { name Dot25 xpos 2140 ypos 474 } set N94d70710 [stack 0] Dot { name Dot27 xpos 2140 ypos 582 } Shuffle { red blue green blue alpha blue name Shuffle8 tile_color 0x3fbfff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 1990 ypos 575 } push $N947abff0 push $N94d70710 Shuffle { red green blue green alpha green name Shuffle9 tile_color 0xbf00ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 1990 ypos 467 } push $N947a8110 push $N94d6c980 Shuffle { green red blue red alpha red name Shuffle10 tile_color 0xbf0000ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 1984 ypos 353 } push $N947a4230 push $N94d840c0 Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} output {rgba.red -rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge11 label red xpos 1818 ypos 353 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} Bchannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} output {-rgba.red rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge12 label green xpos 1818 ypos 467 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} Bchannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} output {-rgba.red -rgba.green rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge13 label blue xpos 1818 ypos 575 } Merge2 { inputs 2 operation max bbox B Achannels rgb Bchannels rgb output rgb name Merge17 label "Set Min Color\nto Blackpoint" xpos 1818 ypos 662 } Dot { name Dot38 note_font_size 41 xpos 1852 ypos 760 } Switch { inputs 2 which {{minVal}} name SwitchMinColor xpos 1597 ypos 757 } push $N948a1640 Multiply { channels rgb value {{multBase}} name Multiply1 label "mult black color" xpos 1138 ypos 52 } Multiply { channels rgb value 2 name Multiply2 label "hypot Extra Mult\n" xpos 1138 ypos 84 disable {{"mergeOp == 1 ? 0 : 1"}} } push $N94da7bc0 MergeExpression { inputs 2 expr0 Br/Ar expr1 Bg/Ag expr2 Bb/Ab name MergeDivide xpos 1138 ypos 194 } Invert { channels rgb name Invert1 xpos 1138 ypos 239 } Clamp { channels rgb name Clamp1 xpos 1138 ypos 263 } Gamma { channels rgb value {{rolloffGamma}} name Gamma1 xpos 1138 ypos 287 } Dot { name Dot19 xpos 1172 ypos 364 } set N95a08d60 [stack 0] Dot { name Dot20 xpos 1172 ypos 478 } set N95a0ccd0 [stack 0] Dot { name Dot21 xpos 1172 ypos 586 } Shuffle { red blue green blue alpha blue name Shuffle3 tile_color 0x3fbfff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 1022 ypos 579 } push $N948a1640 Dot { name Dot23 xpos 706 ypos -151 } Dot { name Dot8 label "Black Color" note_font_size 41 xpos 706 ypos 293 } set N95a25fa0 [stack 0] Dot { name Dot2 note_font_size 41 xpos 706 ypos 404 } set N95a29e80 [stack 0] Dot { name Dot3 note_font_size 41 xpos 706 ypos 523 } push $N95a0ccd0 Shuffle { red green blue green alpha green name Shuffle2 tile_color 0xbf00ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 1022 ypos 471 } push $N95a29e80 push $N95a08d60 Shuffle { green red blue red alpha red name Shuffle1 tile_color 0xbf0000ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 1016 ypos 357 } push $N95a25fa0 push $N94d7beb0 Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} output {rgba.red -rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge3 label red xpos 322 ypos 357 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} Bchannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} output {-rgba.red rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge4 label green xpos 322 ypos 471 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} Bchannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} output {-rgba.red -rgba.green rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge5 label blue xpos 322 ypos 579 } Merge2 { inputs 2 operation max bbox B Achannels rgb Bchannels rgb output rgb name Merge1 label "Set Min Color\nto Blackpoint" xpos 322 ypos 748 } Premult { name Premult4 xpos 322 ypos 881 disable {{"! premultInput"}} } push $N948771b0 Dot { name Dot28 xpos -146 ypos -418 } Dot { name Dot30 xpos -146 ypos 1015 } Merge2 { inputs 2+1 operation copy bbox B Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} output {rgba.red rgba.green rgba.blue -rgba.alpha} mix 0.8 name MergeKeymix label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 322 ypos 1012 } Merge2 { inputs 2 name Merge10 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 322 ypos 1189 disable {{!previewPlotScan}} } Output { name Output1 xpos 322 ypos 1395 } NoOp { inputs 0 name Settings note_font_size 51 xpos 2494 ypos -414 addUserKnob {20 User} addUserKnob {7 mergeOpNum l "Merge Op Num"} mergeOpNum {{"mergeOp == 0 ? 24 : 13"}} } end_group Premult { name Premult2 selected true xpos -3001 ypos 2453 } Group { inputs 2 name LightWrapPro help "Adds exponentially blurred lightwrap\n\nAdds a bright highlight wrap and an overall wrap" tile_color 0x1e252eff label "(\[value outputView])" note_font "DejaVu Sans Bold Bold Bold" note_font_color 0xb7e6ffff selected true xpos -3001 ypos 2790 disable true mapsize {0.15 0.15} addUserKnob {20 LightWrapPro} addUserKnob {4 outputView l "Output View" t "Chose one to view while adjusting" M {"Final Output" "Highlight Key" "Highlight Wrap" "OverAll Wrap" "Effect Only" "" "" "" "" "" "" "" "" ""}} addUserKnob {6 premultiplied l "FG premultiplied" -STARTLINE} premultiplied true addUserKnob {26 highlightKeyTitle l "HighLight Key"} addUserKnob {7 blackPt l Black R 0 4} blackPt 1 addUserKnob {7 whitePt l White R 0 4} whitePt 2 addUserKnob {26 wrapHighlightsTitle l "HighLight Wrap"} addUserKnob {6 Mult_Flare_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {41 steps l " Steps" T ExponGlowWrapHighlight.steps} addUserKnob {41 falloffType l Falloff -STARTLINE T ExponGlowWrapHighlight.falloffType} addUserKnob {41 size l Size T ExponGlowWrapHighlight.size} addUserKnob {7 wrapHighlightAmount l Amount R 0 4} wrapHighlightAmount 1 addUserKnob {26 WrapAllTitle l "Overall Wrap "} addUserKnob {6 WrapAllMult_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {41 steps_1 l " Steps" T ExponGlowWrapAll.steps} addUserKnob {41 falloffType_1 l Falloff -STARTLINE T ExponGlowWrapAll.falloffType} addUserKnob {41 size_1 l Size T ExponGlowWrapAll.size} addUserKnob {7 wrapAllAmount l Amount R 0 4} wrapAllAmount 1 addUserKnob {6 removeHighlights l "Dim Highlights" +STARTLINE} removeHighlights true addUserKnob {7 dimHighlightsAmount l "" -STARTLINE R 0 3} dimHighlightsAmount 1 addUserKnob {26 blendEdgesTitle l "Blend Edges"} addUserKnob {7 blendEdgesAmount l Amount} addUserKnob {6 ColorBleedMult_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {26 bleedColorTitle l "Bleed Color"} addUserKnob {7 bleedColorAmount l Amount} addUserKnob {7 bleedColorSize l Size R 0.1 4} bleedColorSize 1 addUserKnob {7 bleedColorFalloff_2 l Falloff R 0.2 2} bleedColorFalloff_2 0.5 addUserKnob {26 ""} addUserKnob {7 globalAmount l "Global Amount"} globalAmount 1 addUserKnob {26 _1 l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T MergeCopyLightWrapPro.maskChannelInput} addUserKnob {41 inject -STARTLINE T MergeCopyLightWrapPro.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeCopyLightWrapPro.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeCopyLightWrapPro.fringe} addUserKnob {41 mix T MergeCopyLightWrapPro.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "\n\n" T LightWrapPro} addUserKnob {26 ver l Version: T v06} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x402f27ff label "Bleed Color" note_font_size 60 note_font_color 0xffffffff xpos -683 ypos 2273 bdwidth 1316 bdheight 787 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x39464200 label "highlight key" note_font_size 40 note_font_color 0xffffffff xpos 1630 ypos 113 bdwidth 272 bdheight 393 } Input { inputs 0 name Inputmask xpos 1887 ypos 3580 number 2 } Input { inputs 0 name FG xpos -413 ypos -318 } AddChannels { channels rgba name AddChannels1 xpos -413 ypos -150 } Dot { name Dot1 xpos -379 ypos 375 } set N96a494d0 [stack 0] Dot { name Dot7 xpos -825 ypos 375 } Dot { name Dot46 xpos -825 ypos 3104 } set N96a51190 [stack 0] Dot { name Dot15 xpos 915 ypos 3107 } set N96a55070 [stack 0] Dot { name Dot26 note_font_size 41 xpos 915 ypos 3224 } set N96a58f50 [stack 0] Dot { name Dot32 note_font_size 41 xpos 915 ypos 3277 } push $N96a494d0 Dot { name Dot8 note_font_size 41 xpos 717 ypos 378 } set N96a60d50 [stack 0] Dot { name Dot11 note_font_size 41 xpos 717 ypos 550 } Input { inputs 0 name BG label "\n" xpos 1702 ypos -276 number 1 } AddChannels { channels rgba name AddChannels2 xpos 1702 ypos -145 } Remove { operation keep channels rgba name Remove2 xpos 1702 ypos -68 } Dot { name Dot3 xpos 1736 ypos 177 } set N96a7b320 [stack 0] Keyer { operation "luminance key" range {{parent.blackPt} {parent.whitePt} {range.B} {range.B}} name Keyer2 xpos 1702 ypos 303 } Dot { name Dot4 note_font_size 41 xpos 1736 ypos 397 } set N96a88230 [stack 0] Premult { name Premult1 xpos 1702 ypos 452 } Multiply { inputs 1+1 channels rgba value 0 name Multiply1 label "\[value value]" xpos 1702 ypos 543 } Dot { name Dot30 note_font_size 41 xpos 1734 ypos 746 } Group { name ExponGlowWrapHighlight onCreate "n = nuke.thisNode()\nn.knob('size').setRange(0, 50)\n#n.knob('exp').setRange(1, 4)\nnuke.thisNode().knob('steps').setFlag(0x02000000)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"includeOriginal\":\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n\n else:\n merge.setInput(steps+1, None)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps)\n\nelif k.name() == \"steps\":\n\n s = int(k.value())\n if s<1:\n k.setValue(1)\n else:\n start = nuke.toNode(\"Start\")\n end = nuke.toNode(\"End\")\n b1 = nuke.toNode(\"Blur1\")\n m1 = nuke.toNode(\"Multiply1\")\n merge = nuke.toNode(\"Merge1\")\n AvgMult = nuke.toNode(\"AverageMult\")\n\n b1x = b1.xpos()\n b1y = b1.ypos()\n b1n = b1.name()\n\n m1x = m1.xpos()\n m1y = m1.ypos()\n m1n = m1.name()\n\n steps = int(n.knob('steps').getValue())\n size = n.knob('size').getValue()\n mult = n.knob('exp').getValue()\n\n #b1.setInput(0, start)\n for i in range(1,merge.inputs()):\n merge.setInput(i,None)\n merge.setInput(0, m1)\n \[nuke.delete(i) for i in nuke.allNodes() if i.xpos()>start.xpos()]\n for i in range(1,steps):\n # Blur\n b = nuke.nodes.Blur()\n m = nuke.nodes.Multiply()\n b.setXYpos(b1x+i*100,b1y)\n b.setInput(0,start)\n b\[\"channels\"].setValue(\"all\")\n b\[\"crop\"].setValue(0)\n b\[\"size\"].setValue(0, 1)\n b\[\"size\"].setExpression( \"((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(\{\}**2))\".format(str(i+1)), 0 )\n b\[\"size\"].setExpression( \"((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(\{\}**2))\".format(str(i+1)), 1 )\n b\[\"label\"].setValue('')\n blurAbove = b.name()\n\n m.setXYpos(m1x+i*100,m1y)\n m.setInput(0, nuke.toNode(blurAbove))\n m\[\"channels\"].setValue(\"all\")\n m\[\"value\"].setValue(1,1,1,1)\n j = 1-(i/steps)\n m\[\"value\"].setExpression('falloffType == 0 ? \{\} :falloffType == 1 ? pow(\{\}, 3) : falloffType == 2 ? \{\}*\{\}*(3-2*\{\}) : falloffType == 3 ? \{\}*\{\}*(2 - \{\}) : falloffType == 4 ? \{\}*(1 + \{\}*(1 - \{\})) : 0'.format(j,j,j,j,j,j,j,j,j,j,j))\n m\[\"mix\"].setExpression(\"falloff\")\n m\[\"label\"].setValue('')\n\n merge.setInput(i if i<2 else i+1, m)\n AvgMult\['whitepoint'].setValue(i if i<2 else i+1)\n\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n\nelif k.name() == \"output2\":\n if n.knob(\"output2\").getValue() == 4:\n n.knob('AvgMaxOriginal').setVisible(True)\n else:\n n.knob('AvgMaxOriginal').setVisible(False)\n\n" tile_color 0xcc804eff label "(\[value output2])" note_font "Verdana Bold Bold Bold Bold" note_font_color 0xffffffff xpos 1700 ypos 1012 addUserKnob {20 ExponBlurSimple} addUserKnob {41 channels T Remove1.channels} addUserKnob {26 ""} addUserKnob {4 output2 l Operation: M {Screen Plus Over Hypot Average Max Min "" "" "" "" ""}} output2 Over addUserKnob {3 steps l " Steps" -STARTLINE} steps 6 addUserKnob {26 text l " " T " "} addUserKnob {6 includeOriginal l "Include Original?" -STARTLINE} addUserKnob {6 AvgMaxOriginal l "Use Max of Average and Original" +HIDDEN +STARTLINE} AvgMaxOriginal true addUserKnob {14 size l Size R 0 50} size 4 addUserKnob {14 exp l Exponent +INVISIBLE R 1 4} exp 3 addUserKnob {6 color_rgba_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {7 falloff l Falloff} falloff 1 addUserKnob {4 falloffType l "Falloff Type" M {Linear pLinear smooth smooth0 smooth1 ""}} falloffType smooth1 addUserKnob {14 postBlur l "Post Blur" R 0 100} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {14 safeBBoxPixels l "" +STARTLINE +HIDDEN R 0 400} safeBBoxPixels 100 addUserKnob {14 adjustBBoxPercent l "" -STARTLINE +HIDDEN R 1 2} adjustBBoxPercent 1 addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Add description and tooltip for gizmo" T ExponBlurSimple} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Inputmask xpos 346 ypos 596 number 1 } Dot { name Dot19 label Mask note_font_size 41 xpos 380 ypos 662 } Dot { name Dot10 note_font_size 41 xpos 380 ypos 899 } Input { inputs 0 name Inputimg xpos -221 ypos -1229 } Dot { name Dot16 note_font_size 41 xpos -187 ypos -1062 } set N969da970 [stack 0] Dot { name Dot1 note_font_size 41 xpos 461 ypos -1058 } Remove { operation keep channels rgba name Remove1 xpos 427 ypos -980 } NoOp { name aspectCalc xpos 427 ypos -939 addUserKnob {20 User} addUserKnob {14 aspect R 0 100} aspect {{parent.size.w} {parent.size.h/format.pixel_aspect/height*width}} } Dot { name Dot21 note_font_size 41 xpos 461 ypos -853 } set N969ee270 [stack 0] Invert { name Invert1 xpos 864 ypos -860 disable {{"parent.size < 0 ? 0 : 1"}} } set N969f21e0 [stack 0] Dot { name Dot4 note_font_size 41 xpos 540 ypos -604 } NoOp { name Original xpos 506 ypos -327 } Dot { name Dot5 note_font_size 41 xpos 540 ypos 100 } push $N969f21e0 NoOp { name Start xpos 864 ypos -706 } set N97a614d0 [stack 0] Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(6**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(6**2))}} crop false name Blur6 xpos 1364 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.166666666667 :falloffType == 1 ? pow(0.166666666667, 3) : falloffType == 2 ? 0.166666666667*0.166666666667*(3-2*0.166666666667) : falloffType == 3 ? 0.166666666667*0.166666666667*(2 - 0.166666666667) : falloffType == 4 ? 0.166666666667*(1 + 0.166666666667*(1 - 0.166666666667)) : 0"} {"falloffType == 0 ? 0.166666666667 :falloffType == 1 ? pow(0.166666666667, 3) : falloffType == 2 ? 0.166666666667*0.166666666667*(3-2*0.166666666667) : falloffType == 3 ? 0.166666666667*0.166666666667*(2 - 0.166666666667) : falloffType == 4 ? 0.166666666667*(1 + 0.166666666667*(1 - 0.166666666667)) : 0"} {"falloffType == 0 ? 0.166666666667 :falloffType == 1 ? pow(0.166666666667, 3) : falloffType == 2 ? 0.166666666667*0.166666666667*(3-2*0.166666666667) : falloffType == 3 ? 0.166666666667*0.166666666667*(2 - 0.166666666667) : falloffType == 4 ? 0.166666666667*(1 + 0.166666666667*(1 - 0.166666666667)) : 0"} {"falloffType == 0 ? 0.166666666667 :falloffType == 1 ? pow(0.166666666667, 3) : falloffType == 2 ? 0.166666666667*0.166666666667*(3-2*0.166666666667) : falloffType == 3 ? 0.166666666667*0.166666666667*(2 - 0.166666666667) : falloffType == 4 ? 0.166666666667*(1 + 0.166666666667*(1 - 0.166666666667)) : 0"}} mix {{falloff}} name Multiply6 xpos 1364 ypos -477 } push $N97a614d0 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(5**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(5**2))}} crop false name Blur5 xpos 1264 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.333333333333 :falloffType == 1 ? pow(0.333333333333, 3) : falloffType == 2 ? 0.333333333333*0.333333333333*(3-2*0.333333333333) : falloffType == 3 ? 0.333333333333*0.333333333333*(2 - 0.333333333333) : falloffType == 4 ? 0.333333333333*(1 + 0.333333333333*(1 - 0.333333333333)) : 0"} {"falloffType == 0 ? 0.333333333333 :falloffType == 1 ? pow(0.333333333333, 3) : falloffType == 2 ? 0.333333333333*0.333333333333*(3-2*0.333333333333) : falloffType == 3 ? 0.333333333333*0.333333333333*(2 - 0.333333333333) : falloffType == 4 ? 0.333333333333*(1 + 0.333333333333*(1 - 0.333333333333)) : 0"} {"falloffType == 0 ? 0.333333333333 :falloffType == 1 ? pow(0.333333333333, 3) : falloffType == 2 ? 0.333333333333*0.333333333333*(3-2*0.333333333333) : falloffType == 3 ? 0.333333333333*0.333333333333*(2 - 0.333333333333) : falloffType == 4 ? 0.333333333333*(1 + 0.333333333333*(1 - 0.333333333333)) : 0"} {"falloffType == 0 ? 0.333333333333 :falloffType == 1 ? pow(0.333333333333, 3) : falloffType == 2 ? 0.333333333333*0.333333333333*(3-2*0.333333333333) : falloffType == 3 ? 0.333333333333*0.333333333333*(2 - 0.333333333333) : falloffType == 4 ? 0.333333333333*(1 + 0.333333333333*(1 - 0.333333333333)) : 0"}} mix {{falloff}} name Multiply5 xpos 1264 ypos -477 } push $N97a614d0 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(4**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(4**2))}} crop false name Blur4 xpos 1164 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"}} mix {{falloff}} name Multiply4 xpos 1164 ypos -477 } push $N97a614d0 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(3**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(3**2))}} crop false name Blur3 xpos 1064 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.666666666667 :falloffType == 1 ? pow(0.666666666667, 3) : falloffType == 2 ? 0.666666666667*0.666666666667*(3-2*0.666666666667) : falloffType == 3 ? 0.666666666667*0.666666666667*(2 - 0.666666666667) : falloffType == 4 ? 0.666666666667*(1 + 0.666666666667*(1 - 0.666666666667)) : 0"} {"falloffType == 0 ? 0.666666666667 :falloffType == 1 ? pow(0.666666666667, 3) : falloffType == 2 ? 0.666666666667*0.666666666667*(3-2*0.666666666667) : falloffType == 3 ? 0.666666666667*0.666666666667*(2 - 0.666666666667) : falloffType == 4 ? 0.666666666667*(1 + 0.666666666667*(1 - 0.666666666667)) : 0"} {"falloffType == 0 ? 0.666666666667 :falloffType == 1 ? pow(0.666666666667, 3) : falloffType == 2 ? 0.666666666667*0.666666666667*(3-2*0.666666666667) : falloffType == 3 ? 0.666666666667*0.666666666667*(2 - 0.666666666667) : falloffType == 4 ? 0.666666666667*(1 + 0.666666666667*(1 - 0.666666666667)) : 0"} {"falloffType == 0 ? 0.666666666667 :falloffType == 1 ? pow(0.666666666667, 3) : falloffType == 2 ? 0.666666666667*0.666666666667*(3-2*0.666666666667) : falloffType == 3 ? 0.666666666667*0.666666666667*(2 - 0.666666666667) : falloffType == 4 ? 0.666666666667*(1 + 0.666666666667*(1 - 0.666666666667)) : 0"}} mix {{falloff}} name Multiply3 xpos 1064 ypos -477 } push 0 push $N97a614d0 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(2**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(2**2))}} crop false name Blur2 xpos 964 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.833333333333 :falloffType == 1 ? pow(0.833333333333, 3) : falloffType == 2 ? 0.833333333333*0.833333333333*(3-2*0.833333333333) : falloffType == 3 ? 0.833333333333*0.833333333333*(2 - 0.833333333333) : falloffType == 4 ? 0.833333333333*(1 + 0.833333333333*(1 - 0.833333333333)) : 0"} {"falloffType == 0 ? 0.833333333333 :falloffType == 1 ? pow(0.833333333333, 3) : falloffType == 2 ? 0.833333333333*0.833333333333*(3-2*0.833333333333) : falloffType == 3 ? 0.833333333333*0.833333333333*(2 - 0.833333333333) : falloffType == 4 ? 0.833333333333*(1 + 0.833333333333*(1 - 0.833333333333)) : 0"} {"falloffType == 0 ? 0.833333333333 :falloffType == 1 ? pow(0.833333333333, 3) : falloffType == 2 ? 0.833333333333*0.833333333333*(3-2*0.833333333333) : falloffType == 3 ? 0.833333333333*0.833333333333*(2 - 0.833333333333) : falloffType == 4 ? 0.833333333333*(1 + 0.833333333333*(1 - 0.833333333333)) : 0"} {"falloffType == 0 ? 0.833333333333 :falloffType == 1 ? pow(0.833333333333, 3) : falloffType == 2 ? 0.833333333333*0.833333333333*(3-2*0.833333333333) : falloffType == 3 ? 0.833333333333*0.833333333333*(2 - 0.833333333333) : falloffType == 4 ? 0.833333333333*(1 + 0.833333333333*(1 - 0.833333333333)) : 0"}} mix {{falloff}} name Multiply2 xpos 964 ypos -477 } push $N97a614d0 Blur { size {{(width/100*parent.size*(aspectCalc.aspect.w/100))} {(height/100*parent.size*(aspectCalc.aspect.h/100))}} crop false name Blur1 selected true xpos 864 ypos -554 } Multiply { value {1 1 1 1} mix {{falloff}} name Multiply1 xpos 864 ypos -477 } Merge2 { inputs 6+1 operation {{MergeNumber.mergeNumber}} also_merge all name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 864 ypos -327 } NoOp { name End xpos 864 ypos -279 } Grade { channels all whitepoint 6 black_clamp false name AverageMult xpos 864 ypos 49 disable {{"output2 == 4 ? 0 : 1"}} } Merge2 { inputs 2 operation max also_merge all name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 864 ypos 96 disable {{"output2 == 4 && includeOriginal == 1 && AvgMaxOriginal == 1 ? 0 : 1"}} } Blur { size {{postBlur} {postBlur}} name BlurOriginal xpos 864 ypos 155 } Invert { name Invert2 xpos 864 ypos 283 disable {{"parent.size < 0 ? 0 : 1"}} } push $N969ee270 Switch { inputs 2 which {{"parent.size == 0 ? 0 : 1"}} name Switch1 label "\[value which]" xpos 427 ypos 283 } Crop { inputs 0 box {{input.format.x} {input.format.y} {input.format.r} {input.format.t}} reformat true crop false name Crop1 xpos 96 ypos -931 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } AddChannels { channels rgba name AddChannels2 xpos 96 ypos -891 } push $N969da970 Merge2 { inputs 2 name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -60 ypos -891 } set N95a55810 [stack 0] Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"overscanType\":\n if n.knob(\"overscanType\").getValue() == 1:\n n.knob(\"overscanPercent\").setVisible(True)\n n.knob(\"overscan\").setVisible(False)\n else:\n n.knob(\"overscanPercent\").setVisible(False)\n n.knob(\"overscan\").setVisible(True)" tile_color 0xa57aaaff note_font "Verdana Bold Bold Bold Bold" note_font_color 0xffffffff xpos 29 ypos -812 addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} overscanType Percentage addUserKnob {14 overscan l Overscan +HIDDEN R 0 400} addUserKnob {14 overscanPercent l "Overscan Percent" R 1 4} overscanPercent 1.2 addUserKnob {20 inputBbox l "BBox Data" n 1} addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set N95a71c40 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set N95a75b60 [stack 0] push $N95a71c40 Crop { box {{curve} {curve} {input.width} {input.height}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N95a79a40 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set N95a83370 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{input.bbox.r/2} {input.bbox.t/2}} shutteroffset centred name Transform1 xpos 120 ypos 555 } push $N95a83370 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $N95a75b60 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $N95a79a40 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N96c17af0 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $N96c17af0 NoOp { name OutputBBox1 selected true xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group push $N95a55810 Merge2 { inputs 2 name Merge4 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -60 ypos -748 } push $N969da970 CopyBBox { inputs 2 name CopyBBox1 xpos -221 ypos -748 } Dot { name Dot22 note_font_size 41 xpos -187 ypos 198 } Merge2 { inputs 2 operation copy bbox B Achannels none Bchannels none output none also_merge {{{parent.Remove1.channels}}} name Merge5 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -221 ypos 283 } Dot { name Dot17 label A note_font_size 41 xpos -187 ypos 675 } Dot { name Dot7 note_font_size 41 xpos -187 ypos 805 } push $N969da970 Dot { name Dot2 note_font_size 41 xpos -588 ypos -1062 } Dot { name Dot18 label B note_font_size 41 xpos -588 ypos 654 } Dot { name Dot3 note_font_size 41 xpos -588 ypos 895 } Merge2 { inputs 2+1 operation copy Achannels none Bchannels none output none also_merge all name MergeKeymix xpos -221 ypos 888 } Output { name Output1 xpos -221 ypos 1202 } NoOp { inputs 0 name MergeNumber xpos 202 ypos -1145 addUserKnob {20 User} addUserKnob {3 mergeNumber} mergeNumber {{"output2 == 0 ? 25 : output2 == 1 ? 24 : output2 == 2 ? 22 : output2 == 3 ? 13 : output2 == 4 ? 24 : output2 == 5 ? 17 : 18"}} } end_group Grade { channels all white {{wrapHighlightAmount/10}} name FlareAmount xpos 1702 ypos 1393 } Multiply { channels rgba value {{globalAmount}} name MultiplyGlobal3 label "\[value value]" xpos 1702 ypos 1577 } Dot { name Dot25 label "LIGHT FLARE" note_font_size 61 xpos 1736 ypos 1801 } set N94ec7d30 [stack 0] Dot { name Dot31 note_font_size 41 xpos 1738 ypos 2915 } set N94ecbca0 [stack 0] push $N96a60d50 push $N96a7b320 Dot { name Dot20 xpos 1059 ypos 179 } Shuffle { alpha white name Shuffle1 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat -> \[value out2]] \}]" note_font_size 21 note_font_color 0xffffffff xpos 1025 ypos 238 } Multiply { inputs 1+1 channels rgba value 0 name Multiply2 label "\[value value]" xpos 1025 ypos 366 } Dot { name Dot9 xpos 1059 ypos 725 } set N94eeae20 [stack 0] Dot { name Dot28 note_font_size 41 xpos 1343 ypos 725 } Keyer { operation "luminance key" name Keyer1 xpos 1309 ypos 823 } push $N94eeae20 Colorspace { colorspace_out CIE-Yxy name Colorspace4 xpos 1188 ypos 786 } Expression { inputs 1+1 expr0 "(r*(1+(r/((parent.dimHighlightsAmount+1)**2))) ) / (1+r)" channel1 {-rgba.red -rgba.green -rgba.blue none} expr1 "(g*(1+(g/((parent.dimHighlightsAmount+1)**2))) ) / (1+g)" channel2 {-rgba.red -rgba.green -rgba.blue none} expr2 "(b*(1+(b/((parent.dimHighlightsAmount+1)**2))) ) / (1+b)" expr3 a name Tonemap_whitepoint xpos 1188 ypos 827 } Colorspace { colorspace_in CIE-Yxy name Colorspace3 xpos 1188 ypos 867 } push $N94eeae20 Switch { inputs 2 which {{removeHighlights}} name Switch4 xpos 1025 ypos 867 } Group { name ExponGlowWrapAll onCreate "n = nuke.thisNode()\nn.knob('size').setRange(0, 50)\n#n.knob('exp').setRange(1, 4)\nnuke.thisNode().knob('steps').setFlag(0x02000000)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"includeOriginal\":\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n\n else:\n merge.setInput(steps+1, None)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps)\n\nelif k.name() == \"steps\":\n\n s = int(k.value())\n if s<1:\n k.setValue(1)\n else:\n start = nuke.toNode(\"Start\")\n end = nuke.toNode(\"End\")\n b1 = nuke.toNode(\"Blur1\")\n m1 = nuke.toNode(\"Multiply1\")\n merge = nuke.toNode(\"Merge1\")\n AvgMult = nuke.toNode(\"AverageMult\")\n\n b1x = b1.xpos()\n b1y = b1.ypos()\n b1n = b1.name()\n\n m1x = m1.xpos()\n m1y = m1.ypos()\n m1n = m1.name()\n\n steps = int(n.knob('steps').getValue())\n size = n.knob('size').getValue()\n mult = n.knob('exp').getValue()\n\n #b1.setInput(0, start)\n for i in range(1,merge.inputs()):\n merge.setInput(i,None)\n merge.setInput(0, m1)\n \[nuke.delete(i) for i in nuke.allNodes() if i.xpos()>start.xpos()]\n for i in range(1,steps):\n # Blur\n b = nuke.nodes.Blur()\n m = nuke.nodes.Multiply()\n b.setXYpos(b1x+i*100,b1y)\n b.setInput(0,start)\n b\[\"channels\"].setValue(\"all\")\n b\[\"crop\"].setValue(0)\n b\[\"size\"].setValue(0, 1)\n b\[\"size\"].setExpression( \"((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(\{\}**2))\".format(str(i+1)), 0 )\n b\[\"size\"].setExpression( \"((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(\{\}**2))\".format(str(i+1)), 1 )\n b\[\"label\"].setValue('')\n blurAbove = b.name()\n\n m.setXYpos(m1x+i*100,m1y)\n m.setInput(0, nuke.toNode(blurAbove))\n m\[\"channels\"].setValue(\"all\")\n m\[\"value\"].setValue(1,1,1,1)\n j = 1-(i/steps)\n m\[\"value\"].setExpression('falloffType == 0 ? \{\} :falloffType == 1 ? pow(\{\}, 3) : falloffType == 2 ? \{\}*\{\}*(3-2*\{\}) : falloffType == 3 ? \{\}*\{\}*(2 - \{\}) : falloffType == 4 ? \{\}*(1 + \{\}*(1 - \{\})) : 0'.format(j,j,j,j,j,j,j,j,j,j,j))\n m\[\"mix\"].setExpression(\"falloff\")\n m\[\"label\"].setValue('')\n\n merge.setInput(i if i<2 else i+1, m)\n AvgMult\['whitepoint'].setValue(i if i<2 else i+1)\n\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n\nelif k.name() == \"output2\":\n if n.knob(\"output2\").getValue() == 4:\n n.knob('AvgMaxOriginal').setVisible(True)\n else:\n n.knob('AvgMaxOriginal').setVisible(False)\n\n" tile_color 0xcc804eff label "(\[value output2])" note_font "Verdana Bold Bold Bold Bold" note_font_color 0xffffffff xpos 1025 ypos 995 addUserKnob {20 ExponBlurSimple} addUserKnob {41 channels T Remove1.channels} addUserKnob {26 ""} addUserKnob {4 output2 l Operation: M {Screen Plus Over Hypot Average Max Min "" "" "" "" ""}} output2 Over addUserKnob {3 steps l " Steps" -STARTLINE} steps 8 addUserKnob {26 text l " " T " "} addUserKnob {6 includeOriginal l "Include Original?" -STARTLINE} addUserKnob {6 AvgMaxOriginal l "Use Max of Average and Original" +HIDDEN +STARTLINE} AvgMaxOriginal true addUserKnob {14 size l Size R 0 50} size 10 addUserKnob {14 exp l Exponent +INVISIBLE R 1 4} exp 3 addUserKnob {6 color_rgba_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {7 falloff l Falloff} falloff 1 addUserKnob {4 falloffType l "Falloff Type" M {Linear pLinear smooth smooth0 smooth1 ""}} falloffType pLinear addUserKnob {14 postBlur l "Post Blur" R 0 100} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {14 safeBBoxPixels l "" +STARTLINE +HIDDEN R 0 400} safeBBoxPixels 100 addUserKnob {14 adjustBBoxPercent l "" -STARTLINE +HIDDEN R 1 2} adjustBBoxPercent 1 addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Add description and tooltip for gizmo" T ExponBlurSimple} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Inputmask xpos 346 ypos 596 number 1 } Dot { name Dot19 label Mask note_font_size 41 xpos 380 ypos 662 } Dot { name Dot10 note_font_size 41 xpos 380 ypos 899 } Input { inputs 0 name Inputimg xpos -221 ypos -1229 } Dot { name Dot16 note_font_size 41 xpos -187 ypos -1062 } set N95b59000 [stack 0] Dot { name Dot1 note_font_size 41 xpos 461 ypos -1058 } Remove { operation keep channels rgba name Remove1 xpos 427 ypos -980 } NoOp { name aspectCalc xpos 427 ypos -939 addUserKnob {20 User} addUserKnob {14 aspect R 0 100} aspect {{parent.size.w} {parent.size.h/format.pixel_aspect/height*width}} } Dot { name Dot21 note_font_size 41 xpos 461 ypos -853 } set N95b6c900 [stack 0] Invert { name Invert1 xpos 864 ypos -860 disable {{"parent.size < 0 ? 0 : 1"}} } set N95b70870 [stack 0] Dot { name Dot4 note_font_size 41 xpos 540 ypos -604 } NoOp { name Original xpos 506 ypos -327 } Dot { name Dot5 note_font_size 41 xpos 540 ypos 100 } push $N95b70870 NoOp { name Start xpos 864 ypos -706 } set N95b865f0 [stack 0] Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(8**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(8**2))}} crop false name Blur8 xpos 1564 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.125 :falloffType == 1 ? pow(0.125, 3) : falloffType == 2 ? 0.125*0.125*(3-2*0.125) : falloffType == 3 ? 0.125*0.125*(2 - 0.125) : falloffType == 4 ? 0.125*(1 + 0.125*(1 - 0.125)) : 0"} {"falloffType == 0 ? 0.125 :falloffType == 1 ? pow(0.125, 3) : falloffType == 2 ? 0.125*0.125*(3-2*0.125) : falloffType == 3 ? 0.125*0.125*(2 - 0.125) : falloffType == 4 ? 0.125*(1 + 0.125*(1 - 0.125)) : 0"} {"falloffType == 0 ? 0.125 :falloffType == 1 ? pow(0.125, 3) : falloffType == 2 ? 0.125*0.125*(3-2*0.125) : falloffType == 3 ? 0.125*0.125*(2 - 0.125) : falloffType == 4 ? 0.125*(1 + 0.125*(1 - 0.125)) : 0"} {"falloffType == 0 ? 0.125 :falloffType == 1 ? pow(0.125, 3) : falloffType == 2 ? 0.125*0.125*(3-2*0.125) : falloffType == 3 ? 0.125*0.125*(2 - 0.125) : falloffType == 4 ? 0.125*(1 + 0.125*(1 - 0.125)) : 0"}} mix {{falloff}} name Multiply8 xpos 1564 ypos -477 } push $N95b865f0 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(7**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(7**2))}} crop false name Blur7 xpos 1464 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.25 :falloffType == 1 ? pow(0.25, 3) : falloffType == 2 ? 0.25*0.25*(3-2*0.25) : falloffType == 3 ? 0.25*0.25*(2 - 0.25) : falloffType == 4 ? 0.25*(1 + 0.25*(1 - 0.25)) : 0"} {"falloffType == 0 ? 0.25 :falloffType == 1 ? pow(0.25, 3) : falloffType == 2 ? 0.25*0.25*(3-2*0.25) : falloffType == 3 ? 0.25*0.25*(2 - 0.25) : falloffType == 4 ? 0.25*(1 + 0.25*(1 - 0.25)) : 0"} {"falloffType == 0 ? 0.25 :falloffType == 1 ? pow(0.25, 3) : falloffType == 2 ? 0.25*0.25*(3-2*0.25) : falloffType == 3 ? 0.25*0.25*(2 - 0.25) : falloffType == 4 ? 0.25*(1 + 0.25*(1 - 0.25)) : 0"} {"falloffType == 0 ? 0.25 :falloffType == 1 ? pow(0.25, 3) : falloffType == 2 ? 0.25*0.25*(3-2*0.25) : falloffType == 3 ? 0.25*0.25*(2 - 0.25) : falloffType == 4 ? 0.25*(1 + 0.25*(1 - 0.25)) : 0"}} mix {{falloff}} name Multiply7 xpos 1464 ypos -477 } push $N95b865f0 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(6**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(6**2))}} crop false name Blur6 xpos 1364 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.375 :falloffType == 1 ? pow(0.375, 3) : falloffType == 2 ? 0.375*0.375*(3-2*0.375) : falloffType == 3 ? 0.375*0.375*(2 - 0.375) : falloffType == 4 ? 0.375*(1 + 0.375*(1 - 0.375)) : 0"} {"falloffType == 0 ? 0.375 :falloffType == 1 ? pow(0.375, 3) : falloffType == 2 ? 0.375*0.375*(3-2*0.375) : falloffType == 3 ? 0.375*0.375*(2 - 0.375) : falloffType == 4 ? 0.375*(1 + 0.375*(1 - 0.375)) : 0"} {"falloffType == 0 ? 0.375 :falloffType == 1 ? pow(0.375, 3) : falloffType == 2 ? 0.375*0.375*(3-2*0.375) : falloffType == 3 ? 0.375*0.375*(2 - 0.375) : falloffType == 4 ? 0.375*(1 + 0.375*(1 - 0.375)) : 0"} {"falloffType == 0 ? 0.375 :falloffType == 1 ? pow(0.375, 3) : falloffType == 2 ? 0.375*0.375*(3-2*0.375) : falloffType == 3 ? 0.375*0.375*(2 - 0.375) : falloffType == 4 ? 0.375*(1 + 0.375*(1 - 0.375)) : 0"}} mix {{falloff}} name Multiply6 xpos 1364 ypos -477 } push $N95b865f0 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(5**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(5**2))}} crop false name Blur5 xpos 1264 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"}} mix {{falloff}} name Multiply5 xpos 1264 ypos -477 } push $N95b865f0 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(4**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(4**2))}} crop false name Blur4 xpos 1164 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.625 :falloffType == 1 ? pow(0.625, 3) : falloffType == 2 ? 0.625*0.625*(3-2*0.625) : falloffType == 3 ? 0.625*0.625*(2 - 0.625) : falloffType == 4 ? 0.625*(1 + 0.625*(1 - 0.625)) : 0"} {"falloffType == 0 ? 0.625 :falloffType == 1 ? pow(0.625, 3) : falloffType == 2 ? 0.625*0.625*(3-2*0.625) : falloffType == 3 ? 0.625*0.625*(2 - 0.625) : falloffType == 4 ? 0.625*(1 + 0.625*(1 - 0.625)) : 0"} {"falloffType == 0 ? 0.625 :falloffType == 1 ? pow(0.625, 3) : falloffType == 2 ? 0.625*0.625*(3-2*0.625) : falloffType == 3 ? 0.625*0.625*(2 - 0.625) : falloffType == 4 ? 0.625*(1 + 0.625*(1 - 0.625)) : 0"} {"falloffType == 0 ? 0.625 :falloffType == 1 ? pow(0.625, 3) : falloffType == 2 ? 0.625*0.625*(3-2*0.625) : falloffType == 3 ? 0.625*0.625*(2 - 0.625) : falloffType == 4 ? 0.625*(1 + 0.625*(1 - 0.625)) : 0"}} mix {{falloff}} name Multiply4 xpos 1164 ypos -477 } push $N95b865f0 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(3**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(3**2))}} crop false name Blur3 xpos 1064 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.75 :falloffType == 1 ? pow(0.75, 3) : falloffType == 2 ? 0.75*0.75*(3-2*0.75) : falloffType == 3 ? 0.75*0.75*(2 - 0.75) : falloffType == 4 ? 0.75*(1 + 0.75*(1 - 0.75)) : 0"} {"falloffType == 0 ? 0.75 :falloffType == 1 ? pow(0.75, 3) : falloffType == 2 ? 0.75*0.75*(3-2*0.75) : falloffType == 3 ? 0.75*0.75*(2 - 0.75) : falloffType == 4 ? 0.75*(1 + 0.75*(1 - 0.75)) : 0"} {"falloffType == 0 ? 0.75 :falloffType == 1 ? pow(0.75, 3) : falloffType == 2 ? 0.75*0.75*(3-2*0.75) : falloffType == 3 ? 0.75*0.75*(2 - 0.75) : falloffType == 4 ? 0.75*(1 + 0.75*(1 - 0.75)) : 0"} {"falloffType == 0 ? 0.75 :falloffType == 1 ? pow(0.75, 3) : falloffType == 2 ? 0.75*0.75*(3-2*0.75) : falloffType == 3 ? 0.75*0.75*(2 - 0.75) : falloffType == 4 ? 0.75*(1 + 0.75*(1 - 0.75)) : 0"}} mix {{falloff}} name Multiply3 xpos 1064 ypos -477 } push 0 push $N95b865f0 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(2**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(2**2))}} crop false name Blur2 xpos 964 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.875 :falloffType == 1 ? pow(0.875, 3) : falloffType == 2 ? 0.875*0.875*(3-2*0.875) : falloffType == 3 ? 0.875*0.875*(2 - 0.875) : falloffType == 4 ? 0.875*(1 + 0.875*(1 - 0.875)) : 0"} {"falloffType == 0 ? 0.875 :falloffType == 1 ? pow(0.875, 3) : falloffType == 2 ? 0.875*0.875*(3-2*0.875) : falloffType == 3 ? 0.875*0.875*(2 - 0.875) : falloffType == 4 ? 0.875*(1 + 0.875*(1 - 0.875)) : 0"} {"falloffType == 0 ? 0.875 :falloffType == 1 ? pow(0.875, 3) : falloffType == 2 ? 0.875*0.875*(3-2*0.875) : falloffType == 3 ? 0.875*0.875*(2 - 0.875) : falloffType == 4 ? 0.875*(1 + 0.875*(1 - 0.875)) : 0"} {"falloffType == 0 ? 0.875 :falloffType == 1 ? pow(0.875, 3) : falloffType == 2 ? 0.875*0.875*(3-2*0.875) : falloffType == 3 ? 0.875*0.875*(2 - 0.875) : falloffType == 4 ? 0.875*(1 + 0.875*(1 - 0.875)) : 0"}} mix {{falloff}} name Multiply2 xpos 964 ypos -477 } push $N95b865f0 Blur { size {{(width/100*parent.size*(aspectCalc.aspect.w/100))} {(height/100*parent.size*(aspectCalc.aspect.h/100))}} crop false name Blur1 xpos 864 ypos -554 } Multiply { value {1 1 1 1} mix {{falloff}} name Multiply1 xpos 864 ypos -477 } Merge2 { inputs 8+1 operation {{MergeNumber.mergeNumber}} also_merge all name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 864 ypos -327 } NoOp { name End xpos 864 ypos -279 } Grade { channels all whitepoint 8 black_clamp false name AverageMult xpos 864 ypos 49 disable {{"output2 == 4 ? 0 : 1"}} } Merge2 { inputs 2 operation max also_merge all name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 864 ypos 96 disable {{"output2 == 4 && includeOriginal == 1 && AvgMaxOriginal == 1 ? 0 : 1"}} } Blur { size {{postBlur} {postBlur}} name BlurOriginal xpos 864 ypos 155 } Invert { name Invert2 xpos 864 ypos 283 disable {{"parent.size < 0 ? 0 : 1"}} } push $N95b6c900 Switch { inputs 2 which {{"parent.size == 0 ? 0 : 1"}} name Switch1 label "\[value which]" xpos 427 ypos 283 } Crop { inputs 0 box {{input.format.x} {input.format.y} {input.format.r} {input.format.t}} reformat true crop false name Crop1 xpos 96 ypos -931 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } AddChannels { channels rgba name AddChannels2 xpos 96 ypos -891 } push $N95b59000 Merge2 { inputs 2 name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -60 ypos -891 } set N96fda100 [stack 0] Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"overscanType\":\n if n.knob(\"overscanType\").getValue() == 1:\n n.knob(\"overscanPercent\").setVisible(True)\n n.knob(\"overscan\").setVisible(False)\n else:\n n.knob(\"overscanPercent\").setVisible(False)\n n.knob(\"overscan\").setVisible(True)" tile_color 0xa57aaaff note_font "Verdana Bold Bold Bold Bold" note_font_color 0xffffffff xpos 29 ypos -812 addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} overscanType Percentage addUserKnob {14 overscan l Overscan +HIDDEN R 0 400} addUserKnob {14 overscanPercent l "Overscan Percent" R 1 4} overscanPercent 1.2 addUserKnob {20 inputBbox l "BBox Data" n 1} addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set N96ff6530 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set N96ffa450 [stack 0] push $N96ff6530 Crop { box {{curve} {curve} {input.width} {input.height}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N979022b0 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set N9790baa0 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{input.bbox.r/2} {input.bbox.t/2}} shutteroffset centred name Transform1 xpos 120 ypos 555 } push $N9790baa0 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $N96ffa450 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $N979022b0 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N97949ca0 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $N97949ca0 NoOp { name OutputBBox1 selected true xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group push $N96fda100 Merge2 { inputs 2 name Merge4 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -60 ypos -748 } push $N95b59000 CopyBBox { inputs 2 name CopyBBox1 xpos -221 ypos -748 } Dot { name Dot22 note_font_size 41 xpos -187 ypos 198 } Merge2 { inputs 2 operation copy bbox B Achannels none Bchannels none output none also_merge {{{parent.Remove1.channels}}} name Merge5 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -221 ypos 283 } Dot { name Dot17 label A note_font_size 41 xpos -187 ypos 675 } Dot { name Dot7 note_font_size 41 xpos -187 ypos 805 } push $N95b59000 Dot { name Dot2 note_font_size 41 xpos -588 ypos -1062 } Dot { name Dot18 label B note_font_size 41 xpos -588 ypos 654 } Dot { name Dot3 note_font_size 41 xpos -588 ypos 895 } Merge2 { inputs 2+1 operation copy Achannels none Bchannels none output none also_merge all name MergeKeymix xpos -221 ypos 888 } Output { name Output1 xpos -221 ypos 1202 } NoOp { inputs 0 name MergeNumber xpos 202 ypos -1145 addUserKnob {20 User} addUserKnob {3 mergeNumber} mergeNumber {{"output2 == 0 ? 25 : output2 == 1 ? 24 : output2 == 2 ? 22 : output2 == 3 ? 13 : output2 == 4 ? 24 : output2 == 5 ? 17 : 18"}} } end_group Dot { name Dot40 note_font_size 41 xpos 1059 ypos 1277 } set N979a7e40 [stack 0] Grade { channels all white {{wrapAllAmount/10}} name GradeBgWrapAmount xpos 1025 ypos 1399 } Multiply { channels rgba value {{globalAmount}} name MultiplyGlobal1 label "\[value value]" xpos 1025 ypos 1566 } Dot { name Dot37 label "WRAP ALL" note_font_size 61 xpos 1059 ypos 1692 } set N979c1ed0 [stack 0] Dot { name Dot27 note_font_size 41 xpos 1059 ypos 3062 } set N979c5d80 [stack 0] Merge2 { inputs 2 name Merge1 xpos 1530 ypos 3168 } Shuffle { alpha white name Shuffle5 tile_color 0xffffffff note_font_color 0xffffffff xpos 1530 ypos 3216 } Merge2 { inputs 2 operation mask name Merge14 xpos 1530 ypos 3274 } push $N96a58f50 push $N979c5d80 Shuffle { alpha white name Shuffle2 tile_color 0xffffffff note_font_color 0xffffffff xpos 1025 ypos 3158 } Merge2 { inputs 2 operation mask name Merge7 xpos 1025 ypos 3221 } push $N96a55070 push $N94ecbca0 Shuffle { alpha white name Shuffle4 tile_color 0xffffffff note_font_color 0xffffffff xpos 1708 ypos 3020 } Merge2 { inputs 2 operation mask name Merge13 xpos 1708 ypos 3104 } push $N96a88230 Dot { name Dot21 xpos 2349 ypos 397 } Shuffle { red alpha green alpha blue alpha name Shuffle3 tile_color 0xffffffff label alpha note_font_size 21 note_font_color 0xffffffff xpos 2315 ypos 496 } Dot { name Dot23 xpos 2349 ypos 3399 } push $N979a7e40 Dot { name Dot29 note_font_size 41 xpos 757 ypos 1277 } set N969baf30 [stack 0] Grade { channels rgba gamma {{parent.bleedColorFalloff_2}} name Grade1 selected true xpos 724 ypos 2638 } Dot { name Dot33 note_font_size 41 xpos 758 ypos 2835 } Multiply { channels rgba value {{globalAmount}} name MultiplyGlobal2 label "\[value value]" xpos 297 ypos 2828 } push $N94eeae20 Dot { name Dot38 note_font_size 41 xpos 438 ypos 725 } set N9692b6d0 [stack 0] Dot { name Dot2 note_font_size 41 xpos 439 ypos 802 } set N9692f600 [stack 0] Dot { name Dot17 note_font_size 41 xpos 334 ypos 802 } Dot { name Dot16 note_font_size 41 xpos 334 ypos 1201 } push $N9692f600 Blur { size {{(width/13*parent.bleedColorSize*16*(ExponGlowWrapAll.aspectCalc.aspect.w/100))} {(height/13*parent.bleedColorSize*16*(ExponGlowWrapAll.aspectCalc.aspect.h/100))}} crop false name Blur6 xpos 856 ypos 874 } push $N9692f600 Blur { size {{(width/13*parent.bleedColorSize*8*(ExponGlowWrapAll.aspectCalc.aspect.w/100))} {(height/13*parent.bleedColorSize*8*(ExponGlowWrapAll.aspectCalc.aspect.h/100))}} crop false name Blur4 xpos 743 ypos 873 } push $N9692f600 Blur { size {{(width/15*parent.bleedColorSize*4*(ExponGlowWrapAll.aspectCalc.aspect.w/100))} {(height/15*parent.bleedColorSize*4*(ExponGlowWrapAll.aspectCalc.aspect.h/100))}} crop false name Blur3 xpos 627 ypos 874 } push $N9692f600 Blur { size {{(width/20*parent.bleedColorSize*2*(ExponGlowWrapAll.aspectCalc.aspect.w/100))} {(height/20*parent.bleedColorSize*2*(ExponGlowWrapAll.aspectCalc.aspect.h/100))}} crop false name Blur2 xpos 515 ypos 872 } push $N9692f600 Blur { size {{(width/25*parent.bleedColorSize*(ExponGlowWrapAll.aspectCalc.aspect.w/100))} {(height/25*parent.bleedColorSize*(ExponGlowWrapAll.aspectCalc.aspect.h/100))}} crop false name Blur1 xpos 404 ypos 871 } Merge2 { inputs 2 operation under bbox B name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 404 ypos 941 } Merge2 { inputs 2 operation under bbox B name Merge4 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 404 ypos 999 } Merge2 { inputs 2 operation under bbox B name Merge8 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 404 ypos 1049 } Merge2 { inputs 2 operation under bbox B name Merge12 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 404 ypos 1087 } Unpremult { name Unpremult2 xpos 404 ypos 1111 } Blur { size {{(width/50*parent.bleedColorSize*10*(ExponGlowWrapAll.aspectCalc.aspect.w/100))} {(height/50*parent.bleedColorSize*10*(ExponGlowWrapAll.aspectCalc.aspect.h/100))}} crop false name Blur5 xpos 404 ypos 1151 } CopyBBox { inputs 2 name CopyBBox1 xpos 404 ypos 1198 } Unpremult { name Unpremult5 xpos 404 ypos 2385 } Colorspace { channels all colorspace_out HSV name Colorspace1 xpos 404 ypos 2456 } Multiply { value {1 1 0 1} name Multiply5 label "\[value value]" xpos 404 ypos 2532 } push $N94ec7d30 push $N979c1ed0 push $N9692b6d0 Dot { name Dot10 xpos 201 ypos 725 } Clamp { minimum 0.001 maximum 100 name Clamp1 xpos 167 ypos 996 } Dot { name Dot24 xpos 201 ypos 1517 } Multiply { channels rgba value {{globalAmount}} name MultiplyGlobal label "\[value value]" xpos 19 ypos 1507 } push $N969baf30 Colorspace { channels all colorspace_out HSV name Colorspace6 xpos -13 ypos 1267 } Multiply { value {1 1 0 1} name Multiply4 label "\[value value]" xpos -123 ypos 1262 } push $N96a494d0 Remove { operation keep channels rgba name Remove1 xpos -413 ypos 594 } Unpremult { channels all name Unpremult1 xpos -407 ypos 1094 disable {{premultiplied*-1+1 x1 1}} } set N97c7e910 [stack 0] Dot { name Dot12 xpos -226 ypos 1101 } Colorspace { channels all colorspace_out HSV name Colorspace5 xpos -260 ypos 1140 } Multiply { value {0 0 1 1} name Multiply3 label "\[value value]" xpos -260 ypos 1188 } Merge2 { inputs 2 operation plus Achannels none Bchannels none output none also_merge all name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -260 ypos 1267 } Colorspace { channels all colorspace_in HSV name Colorspace7 xpos -260 ypos 1327 } Dot { name Dot36 label "BLEND EDGES" note_font_size 45 xpos -226 ypos 1408 } push $N97c7e910 Dot { name Dot18 note_font_size 41 xpos -373 ypos 1514 } set N97cc7ba0 [stack 0] Merge2 { inputs 2+1 operation copy bbox B Achannels none Bchannels none output none also_merge all mix {{blendEdgesAmount}} name Merge10 xpos -260 ypos 1507 } Dot { name Dot22 note_font_size 41 xpos -226 ypos 1588 } push $N97cc7ba0 Switch { inputs 2 which {{"blendEdgesAmount == 0 ? 0 : 1"}} name Switch3 xpos -407 ypos 1585 } Merge2 { inputs 2 bbox B Achannels none Bchannels none output none also_merge all name Merge5 xpos -407 ypos 1685 } Merge2 { inputs 2 bbox B Achannels none Bchannels none output none also_merge all name Merge6 xpos -407 ypos 1791 } Dot { name Dot34 note_font_size 41 xpos -373 ypos 2417 } set N97d02370 [stack 0] Colorspace { channels all colorspace_out HSV name Colorspace2 xpos -81 ypos 2410 } Multiply { value {0 0 1 1} name Multiply6 label "\[value value]" xpos -81 ypos 2458 } Merge2 { inputs 2 operation plus Achannels none Bchannels none output none also_merge all name Merge11 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -81 ypos 2537 } Colorspace { channels all colorspace_in HSV name Colorspace8 xpos -81 ypos 2606 } push $N97c7e910 Dot { name Dot13 xpos -579 ypos 1101 } Dot { name Dot14 xpos -579 ypos 2559 } push $N97d02370 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos -407 ypos 2552 } Dot { name Dot6 note_font_size 41 xpos -373 ypos 2649 } set N97d543a0 [stack 0] Merge2 { inputs 2+1 operation copy output {rgba.red rgba.green rgba.blue -rgba.alpha} mix {{bleedColorAmount}} name Merge9 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -81 ypos 2828 } push $N97d543a0 Switch { inputs 2 which {{"parent.bleedColorAmount== 0 ? 0 : 1"}} name Switch2 xpos -407 ypos 2832 } Premult { name Premult3 xpos -407 ypos 2983 disable {{premultiplied*-1+1 i}} } Dot { name Dot19 xpos -373 ypos 3396 } Switch { inputs 5 which {{"\[value ls parent.outputView]"}} name Switch1 xpos 1708 ypos 3395 } push $N96a51190 Dot { name Dot5 note_font_size 41 xpos -825 ypos 3581 } Merge2 { inputs 2+1 operation copy also_merge all name MergeCopyLightWrapPro label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 1708 ypos 3580 } Output { name Output1 xpos 1708 ypos 3898 } end_group Dot { name Dot323 selected true xpos -2967 ypos 3339 } Dot { name Dot324 note_font_size 41 selected true xpos 3822 ypos 3339 } set N97d9eaf0 [stack 0] Remove { operation keep channels rgba name Remove37 selected true xpos 3932 ypos 3336 } push $N97d9eaf0 Dot { name Dot326 note_font_size 41 selected true xpos 3822 ypos 2826 } Dot { name Dot327 note_font_size 41 selected true xpos 3992 ypos 2826 } set N97dadd10 [stack 0] Shuffle { in cleanplate name Shuffle42 label "\[value in]" selected true xpos 3958 ypos 2885 } Dot { name Dot328 note_font_size 41 selected true xpos 3992 ypos 3022 } push $N97dadd10 Dot { name Dot329 note_font_size 41 selected true xpos 4122 ypos 2826 } Shuffle { in GS name Shuffle43 label "\[value in]" selected true xpos 4088 ypos 2886 } push $N95f7f190 Dot { name Dot330 selected true xpos 4243 ypos 2469 } Dot { name Dot331 note_font_size 41 selected true xpos 4243 ypos 2848 } Group { inputs 3 name AdditiveKeyerPro tile_color 0x5200ff note_font "Verdana Bold Bold" note_font_color 0xffffffff selected true xpos 4209 ypos 3019 disable true addUserKnob {20 AdditiveKeyer} addUserKnob {6 useSC l "Use Screen Color as CleanPlate" +STARTLINE} addUserKnob {41 screenColor l "Screen Color" T Keylight1.screenColour} addUserKnob {6 despillSat l "Despill Screen Color from Saturation?" +STARTLINE} despillSat true addUserKnob {26 ""} addUserKnob {7 DarkValue l "Dark Value" R 0 5} DarkValue 1 addUserKnob {7 satDarks l "Saturate Darks"} satDarks 0.2 addUserKnob {18 darkTint l "Dark Tint"} darkTint 1 addUserKnob {6 darkTint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 darkTint_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {6 lightTint_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {7 ExtraLightValue l "Light Value Plus" R 0 2} ExtraLightValue 1 addUserKnob {7 satLights l "Saturate Lights"} satLights 0.2 addUserKnob {18 lightTint l "Light Tint"} lightTint 1 addUserKnob {6 lightTint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lightTint_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 LightValue l "Light Value BG Mult" R 0 5} LightValue 0.25 addUserKnob {26 ""} addUserKnob {6 darkTint_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {6 lightTint_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {6 compositeSwitch l "Output Difference to RGB" +STARTLINE} addUserKnob {6 outputDiffAlpha l "Output Difference Matte to Alpha" +STARTLINE} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l "Modified By:" T "Tony Lyons"} addUserKnob {26 desc l Description: t "adds the difference between cleanplate and key plate to the BG\n\nGood for hair details and shadows and sensitive edge treatment" T AdditiveKeyer} addUserKnob {26 ver l Version: T v04} } Input { inputs 0 name Inputmask xpos 685 ypos 1141 number 3 } Dot { name Dot10 label Mask note_font_size 41 xpos 719 ypos 1883 } Dot { name Dot11 note_font_size 41 xpos 719 ypos 1983 } Input { inputs 0 name fg label "\[value number]" xpos -500 ypos -221 number 1 } Remove { channels alpha name Remove2 xpos -500 ypos -147 } AddChannels { channels rgba name AddChannels2 xpos -500 ypos -109 } Dot { name Dot26 note_font_size 41 xpos -466 ypos 5 } set N98653ff0 [stack 0] OFXuk.co.thefoundry.keylight.keylight_v201 { show "Final Result" unPreMultiply false screenColour {0 0 0} screenGain 1 screenBalance 0.5 alphaBias {0.5 0.5 0.5} despillBias {0.5 0.5 0.5} gangBiases true preBlur 0 "Screen Matte" 0 screenClipMin 0 screenClipMax 1 screenClipRollback 0 screenGrowShrink 0 screenSoftness 0 screenDespotBlack 0 screenDespotWhite 0 screenReplaceMethod "Soft Colour" screenReplaceColour {0.5 0.5 0.5} Tuning 0 midPoint 0.5 lowGain 1 midGain 1 highGain 1 "Inside Mask" 0 sourceAlphaHandling Ignore insideReplaceMethod "Soft Colour" insideReplaceColour {0.5 0.5 0.5} Crops 0 SourceXMethod Colour SourceYMethod Colour SourceEdgeColour 0 SourceCropL 0 SourceCropR 1 SourceCropB 0 SourceCropT 1 balanceSet false insideComponent None outsideComponent None cacheBreaker true name Keylight1 xpos -500 ypos 73 } set N98657da0 [stack 0] push $N98653ff0 Dot { name Dot27 note_font_size 41 xpos -356 ypos 5 } Merge2 { inputs 2 operation from name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -390 ypos 73 } Clamp { channels rgba name Clamp1 xpos -390 ypos 99 } Saturation { saturation 0 name Saturation4 xpos -390 ypos 125 } push $N98657da0 Merge2 { inputs 2 operation plus name Merge7 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -500 ypos 125 } push $N98653ff0 Dot { name Dot30 note_font_size 41 xpos -598 ypos 5 } Dot { name Dot31 note_font_size 41 xpos -598 ypos 218 } Switch { inputs 2 which {{parent.despillSat}} name DespillSwitch1 label "\[value which]" xpos -500 ypos 208 } Dot { name Dot8 xpos -466 ypos 373 } set N986f71d0 [stack 0] Input { inputs 0 name clean label "\[value number]" xpos 126 ypos -175 number 2 } Remove { channels alpha name Remove3 xpos 126 ypos -101 } AddChannels { channels rgba name AddChannels1 xpos 126 ypos -63 } Grade { multiply 0 add {{parent.Keylight1.screenColour} {parent.Keylight1.screenColour} {parent.Keylight1.screenColour} {parent.Keylight1.screenColour}} name ScreenColor xpos 126 ypos -14 disable {{!parent.useSC}} } Dot { name Dot28 note_font_size 41 xpos 160 ypos 50 } set N98b170d0 [stack 0] OFXuk.co.thefoundry.keylight.keylight_v201 { show "Final Result" unPreMultiply false screenColour {{parent.Keylight1.screenColour x1 0} {parent.Keylight1.screenColour x1 0} {parent.Keylight1.screenColour x1 0}} screenGain 1 screenBalance 0.5 alphaBias {0.5 0.5 0.5} despillBias {0.5 0.5 0.5} gangBiases true preBlur 0 "Screen Matte" 0 screenClipMin 0 screenClipMax 1 screenClipRollback 0 screenGrowShrink 0 screenSoftness 0 screenDespotBlack 0 screenDespotWhite 0 screenReplaceMethod "Soft Colour" screenReplaceColour {0.5 0.5 0.5} Tuning 0 midPoint 0.5 lowGain 1 midGain 1 highGain 1 "Inside Mask" 0 sourceAlphaHandling Ignore insideReplaceMethod "Soft Colour" insideReplaceColour {0.5 0.5 0.5} Crops 0 SourceXMethod Colour SourceYMethod Colour SourceEdgeColour 0 SourceCropL 0 SourceCropR 1 SourceCropB 0 SourceCropT 1 balanceSet false insideComponent None outsideComponent None cacheBreaker true name Keylight2 xpos 126 ypos 118 } set N98b1afc0 [stack 0] push $N98b170d0 Dot { name Dot29 note_font_size 41 xpos 270 ypos 50 } Merge2 { inputs 2 operation from name Merge8 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 236 ypos 118 } Clamp { channels rgba name Clamp2 xpos 236 ypos 144 } Saturation { saturation 0 name Saturation5 xpos 236 ypos 170 } push $N98b1afc0 Merge2 { inputs 2 operation plus name Merge9 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 126 ypos 170 } push $N98b170d0 Dot { name Dot33 note_font_size 41 xpos 28 ypos 50 } Dot { name Dot34 note_font_size 41 xpos 28 ypos 230 } Switch { inputs 2 which {{parent.despillSat}} name DespillSwitch2 label "\[value which]" xpos 126 ypos 223 } Dot { name Dot35 note_font_size 41 xpos 160 ypos 320 } set N98be4950 [stack 0] Dot { name Dot6 xpos 412 ypos 320 } Merge2 { inputs 2 operation difference Achannels rgb Bchannels rgb name Merge6 xpos 378 ypos 370 } Group { name ChannelControl_v3 label "\[value channel_selector.in]" note_font "Bitstream Vera Sans" xpos 378 ypos 440 mapsize {0.15 0.15} addUserKnob {20 channelControl} addUserKnob {41 Channel_Selection T channel_selector.in} addUserKnob {26 Description l "" +STARTLINE T ":Channel Control:\n\nChannel math with choice of merge operation"} addUserKnob {26 ""} addUserKnob {7 redGain} redGain 0.3 addUserKnob {7 greenGain} greenGain 0.59 addUserKnob {7 blueGain} blueGain 0.11 addUserKnob {7 alphaGain} addUserKnob {41 operation T Merge1.operation} } Input { inputs 0 name Input1 xpos 558 ypos -694 } Shuffle { name channel_selector label "\[value in]" xpos 558 ypos -668 } set N98c089b0 [stack 0] Shuffle { green red blue red alpha red name Shuffle1 xpos 386 ypos -536 } Grade { channels rgba white {{parent.redGain i}} name Grade12 xpos 386 ypos -492 } push $N98c089b0 Shuffle { red green blue green alpha green name Shuffle2 xpos 499 ypos -534 } Grade { channels rgba white {{parent.greenGain i}} name Grade13 xpos 499 ypos -493 } Merge2 { inputs 2 operation plus name Merge1 xpos 411 ypos -428 } set C98c493b0 [stack 0] push $N98c089b0 Shuffle { red blue green blue alpha blue name Shuffle3 xpos 610 ypos -538 } Grade { channels rgba white {{parent.blueGain i}} name Grade14 xpos 610 ypos -494 } clone $C98c493b0 { inputs 2 xpos 486 ypos -369 selected false } push $N98c089b0 Shuffle { red alpha green alpha blue alpha name Shuffle4 selected true xpos 725 ypos -535 } Grade { channels rgba white {{parent.alphaGain i}} name Grade15 xpos 725 ypos -494 } clone $C98c493b0 { inputs 2 xpos 580 ypos -307 selected false } Output { name Output1 xpos 600 ypos -210 } end_group Dot { name Dot14 note_font_size 41 xpos 412 ypos 1768 } Input { inputs 0 name bg label "\[value number]" xpos -845 ypos -242 } AddChannels { channels rgba name AddChannels3 xpos -845 ypos -151 } Dot { name Dot9 note_font_size 41 xpos -811 ypos -78 } Dot { name Dot4 xpos -811 ypos 1449 } set N98cbb5f0 [stack 0] Dot { name Dot13 note_font_size 41 xpos -811 ypos 1688 } set N98cbf4d0 [stack 0] push $N986f71d0 Dot { name Dot2 note_font_size 41 xpos -466 ypos 421 } set N98cc33a0 [stack 0] Saturation { saturation {{parent.satDarks}} name Saturation9 xpos -378 ypos 418 } push $N98be4950 Saturation { saturation {{parent.satDarks}} name Saturation8 xpos -215 ypos 317 } Merge2 { inputs 2 operation divide name Merge5 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -215 ypos 418 } Dot { name Dot38 note_font_size 41 xpos -181 ypos 674 } Clamp { channels rgba minimum 1 minimum_enable false name Clamp4 xpos -215 ypos 786 } Add { channels rgba value -1 name Add3 xpos -215 ypos 840 } Multiply { channels rgb value {{parent.DarkValue} {parent.DarkValue} {parent.DarkValue} 0} name DARK_VALUE xpos -215 ypos 892 } Grade { multiply {{parent.darkTint} {parent.darkTint} {parent.darkTint} {parent.darkTint}} reverse true black_clamp false name DARK_TINT xpos -215 ypos 931 } Add { channels rgba value 1 name Add4 xpos -215 ypos 988 } Clamp { channels rgb name Clamp5 xpos -215 ypos 1065 } Dot { name Dot39 note_font_size 41 xpos -181 ypos 1257 } push $N98cc33a0 Dot { name Dot36 note_font_size 41 xpos -466 ypos 577 } Saturation { saturation {{parent.satLights}} name Saturation1 xpos -101 ypos 574 } set N9856b6f0 [stack 0] push $N98be4950 Saturation { saturation {{parent.satLights}} name Saturation6 xpos 126 ypos 500 } set N98575c80 [stack 0] Merge2 { inputs 2 operation divide also_merge all name Merge10 label all xpos 126 ypos 568 } Clamp { channels rgba minimum 1 maximum_enable false name Clamp3 xpos 126 ypos 780 } Add { channels rgba value -1 name Add1 xpos 126 ypos 838 } Multiply { channels rgb value {{parent.LightValue} {parent.LightValue} {parent.LightValue} 0} name LIGHT_VALUE xpos 126 ypos 961 } Multiply { channels rgb value {{parent.lightTint.r} {parent.lightTint.g} {parent.lightTint.b} 0} name LIGHT_TINT xpos 126 ypos 1039 } Add { channels rgba value 1 name Add2 xpos 126 ypos 1120 } Merge2 { inputs 2 operation multiply Achannels rgb Bchannels rgb output rgb name __CONSTRAIN_DARKS__ xpos 128 ypos 1253 } Dot { name Dot19 note_font_size 41 xpos 162 ypos 1354 } set N985d4310 [stack 0] Dot { name Dot3 xpos -8 ypos 1354 } Dot { name Dot16 note_font_size 41 xpos -8 ypos 1611 } push $N98575c80 Dot { name Dot7 note_font_size 41 xpos 310 ypos 503 } push $N9856b6f0 Dot { name Dot5 note_font_size 41 xpos -67 ypos 691 } Merge2 { inputs 2 operation from name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 276 ypos 688 } Clamp { channels rgba maximum_enable false name Clamp6 xpos 276 ypos 781 } Multiply { channels rgba value {{parent.ExtraLightValue}} name Multiply1 label "\[value value]" xpos 276 ypos 899 } Multiply { channels rgb value {{parent.lightTint.r} {parent.lightTint.g} {parent.lightTint.b} 0} name LIGHT_TINT1 xpos 276 ypos 1036 } Dot { name Dot15 note_font_size 41 xpos 310 ypos 1513 } push $N985d4310 Dot { name Dot1 note_font_size 41 xpos 162 ypos 1449 } push $N98cbb5f0 Merge2 { inputs 2 operation multiply Achannels rgb Bchannels rgb output rgb name CONSTRAIN_LIGHTS xpos 128 ypos 1446 } Merge2 { inputs 2 operation plus output rgb name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 128 ypos 1510 } Switch { inputs 2 which {{parent.compositeSwitch}} name Switch1 label "\[value which]" xpos 128 ypos 1604 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 128 ypos 1678 disable {{parent.outputDiffAlpha}} } Copy { inputs 2 from0 rgba.blue to0 rgba.alpha name __LUMA_INTO_ALPHA__ xpos 128 ypos 1758 disable {{!parent.outputDiffAlpha}} } Dot { name Dot17 label A note_font_size 41 xpos 162 ypos 1910 } push $N98cbf4d0 Dot { name Dot18 label B note_font_size 41 xpos -811 ypos 1895 } Dot { name Dot12 note_font_size 41 xpos -811 ypos 1986 } Merge2 { inputs 2+1 operation copy bbox B Achannels none Bchannels none output none also_merge rgba name MergeKeymix xpos 128 ypos 1973 } Output { name Output1 xpos 128 ypos 2235 } end_group Merge2 { inputs 2 bbox B name Merge51 selected true xpos 4209 ypos 3336 } Dot { name Dot332 selected true xpos 4243 ypos 3859 } push $N97d9eaf0 Shuffle { in GS name Shuffle44 label "\[value in]" selected true xpos 3788 ypos 3552 } Dot { name Dot333 label "Key\nQC " note_font_size 100 selected true xpos 3822 ypos 3697 } push $N95cb1e90 Dot { name Dot334 selected true xpos 1263 ypos -4004 } Remove { operation keep channels rgb name Remove38 selected true xpos 1229 ypos -3876 } Dot { name Dot335 note_font_size 41 selected true xpos 1263 ypos -3659 } push $N94dc52f0 push $N94d07a10 Merge2 { inputs 2 operation plus name Merge52 label "test lunimance match" selected true xpos -2646 ypos -2848 } Dot { name Dot336 label test note_font_size 41 selected true xpos -2612 ypos -2766 } ================================================ FILE: NukeSurvivalToolkit/nk_files/NST_AdvancedKeyingTemplate_Stamps.nk ================================================ set cut_paste_input [stack 0] BackdropNode { inputs 0 name BackdropNode4 tile_color 0x3b4245ff label "Advanced Keying Template" note_font_size 200 note_font_color 0xffffffff selected true xpos -3788 ypos -5888 bdwidth 8480 bdheight 9896 z_order -2 } BackdropNode { inputs 0 name BackdropNode100 tile_color 0x667c7c00 label "BG Element" note_font_size 60 note_font_color 0xffffffff selected true xpos 5942 ypos -4884 bdwidth 610 bdheight 387 } BackdropNode { inputs 0 name BackdropNode101 tile_color 0x374935ff label "Green\nScreen Footage" note_font_size 112 selected true xpos -1416 ypos -5551 bdwidth 1208 bdheight 847 } BackdropNode { inputs 0 name BackdropNode102 tile_color 0x5c5539ff label "Edge Matte" note_font_size 140 note_font_color 0xffffffff selected true xpos 1460 ypos -3732 bdwidth 1411 bdheight 2103 } BackdropNode { inputs 0 name BackdropNode103 tile_color 0x61454f00 label Cleanplate note_font_size 140 note_font_color 0xffffffff selected true xpos 3043 ypos -3729 bdwidth 1026 bdheight 1464 } BackdropNode { inputs 0 name BackdropNode105 tile_color 0x6b506800 label "inject alpha" note_font_size 60 note_font_color 0xffffffff selected true xpos -1108 ypos -766 bdwidth 514 bdheight 240 } BackdropNode { inputs 0 name BackdropNode106 tile_color 0x5a3f6200 label "inject cleanplate" note_font_size 60 note_font_color 0xffffffff selected true xpos -1110 ypos -470 bdwidth 511 bdheight 299 } BackdropNode { inputs 0 name BackdropNode107 tile_color 0x5b7179ff label "exponentially blurring inwards\nfor blending the core/edge despills" note_font_size 26 note_font_color 0xffffffff selected true xpos 205 ypos -1827 bdwidth 420 bdheight 275 } BackdropNode { inputs 0 name BackdropNode109 tile_color 0x4e6689ff label "Color Corrections" note_font_size 50 note_font_color 0xffffffff selected true xpos -1202 ypos 32 bdwidth 433 bdheight 480 } BackdropNode { inputs 0 name BackdropNode110 tile_color 0x666d6500 label LightWrap note_font_size 60 note_font_color 0xffffffff selected true xpos -1153 ypos 3233 bdwidth 719 bdheight 391 } BackdropNode { inputs 0 name BackdropNode111 tile_color 0x47633eff label "Additive Keyer" note_font_size 60 note_font_color 0xffffffff selected true xpos 5841 ypos 3655 bdwidth 665 bdheight 399 } BackdropNode { inputs 0 name BackdropNode112 tile_color 0x6a5353ff label "Keep Util Channels" note_font_size 60 note_font_color 0xffffffff selected true xpos -1512 ypos -1163 bdwidth 634 bdheight 344 } BackdropNode { inputs 0 name BackdropNode113 tile_color 0x535a6bff label "Comine Despill" note_font_size 60 note_font_color 0xffffffff selected true xpos -1494 ypos -1897 bdwidth 1009 bdheight 557 } BackdropNode { inputs 0 name BackdropNode114 tile_color 0x687675ff label premult note_font_size 60 note_font_color 0xffffffff selected true xpos -1074 ypos 2911 bdwidth 160 bdheight 160 } BackdropNode { inputs 0 name BackdropNode18 tile_color 0x4c5e5bff label "Making BG Stamp\nfor BG Blend and Lightwrap" note_font_size 60 note_font_color 0xffffffff selected true xpos 5874 ypos 3257 bdwidth 736 bdheight 282 } BackdropNode { inputs 0 name BackdropNode49 tile_color 0x808080ff label "Output Stamps" note_font_size 60 note_font_color 0xffffffff selected true xpos -1071 ypos 1334 bdwidth 922 bdheight 305 } BackdropNode { inputs 0 name BackdropNode63 tile_color 0x503d4600 label "test BG" note_font_size 60 note_font_color 0xffffffff selected true xpos 5779 ypos -5945 bdwidth 643 bdheight 492 } BackdropNode { inputs 0 name BackdropNode72 tile_color 0x4e3f6800 label "GS Plate (transformed)\nfor QC comparison" note_font_size 30 note_font_color 0xffffffff selected true xpos 5719 ypos 4324 bdwidth 350 bdheight 243 } BackdropNode { inputs 0 name BackdropNode94 tile_color 0x645c38ff label "BG despill edge blending" note_font_size 62 note_font_color 0xffffffff selected true xpos -1311 ypos 1815 bdwidth 1601 bdheight 854 } BackdropNode { inputs 0 name BackdropNode95 tile_color 0x39525cff label "Core Despill" note_font_size 140 note_font_color 0xffffffff selected true xpos -2867 ypos -3655 bdwidth 1205 bdheight 1295 } BackdropNode { inputs 0 name BackdropNode96 tile_color 0x4b6648ff label "creating GS channel\nfor review at bottom of key" note_font_size 42 note_font_color 0xffffffff selected true xpos -1221 ypos -4584 bdwidth 554 bdheight 462 } BackdropNode { inputs 0 name BackdropNode97 tile_color 0x472e5500 label Transforms note_font_size 60 note_font_color 0xffffffff selected true xpos -1223 ypos 641 bdwidth 478 bdheight 481 } BackdropNode { inputs 0 name BackdropNode98 tile_color 0x39525cff label "Core Matte" note_font_size 140 note_font_color 0xffffffff selected true xpos 289 ypos -3716 bdwidth 1097 bdheight 1475 } BackdropNode { inputs 0 name BackdropNode99 tile_color 0x5c5539ff label "Edge Despill" note_font_size 140 note_font_color 0xffffffff selected true xpos -1508 ypos -3680 bdwidth 1485 bdheight 1364 } push $cut_paste_input Roto { output alpha cliptype none curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44800000 x44070000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Ellipse1 512 bezier {{cc {f 8192} {px x447ec000 {xc227e500 0} {x44750000 x44500000} {x4227e500 0} {0 xc2a379f0} {x44840000 x44750000} {0 x42a379f0} {x4227e500 0} {x44750000 x448d0000} {xc227e500 0} {0 x42a379f0} {x44620000 x44750000} {0 xc2a379f0}}} {cc {f 8192} {p {{{x447ec000 xc227e500}} {{x447ec000 0}}} {{{x447ec000 0}} {{x447ec000 0}}} {{{x447ec000 x4227e500}} {{x447ec000 0}}} {{{x447ec000 0}} {{x447ec000 xc2a379f0}}} {{{x447ec000 0}} {{x447ec000 0}}} {{{x447ec000 0}} {{x447ec000 x42a379f0}}} {{{x447ec000 x4227e500}} {{x447ec000 0}}} {{{x447ec000 0}} {{x447ec000 0}}} {{{x447ec000 xc227e500}} {{x447ec000 0}}} {{{x447ec000 0}} {{x447ec000 x42a379f0}}} {{{x447ec000 0}} {{x447ec000 0}}} {{{x447ec000 0}} {{x447ec000 xc2a379f0}}}}}} {tx x447ec000 x44750000 x44750000} {a osw x41200000 osf 0 str 1 spx x44800000 spy x44070000 sb 1 ltn x447ec000 ltm x447ec000 tt x40e00000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 tt 7 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {1024 540} colorOverlay {0 0 0 0} lifetime_type "all frames" lifetime_start 1019 lifetime_end 1019 motionblur_shutter_offset_type centred source_black_outside true name Roto14 selected true xpos 5999 ypos -5713 } Blur { size 100 name Blur2 label "\[value size]" selected true xpos 5999 ypos -5653 } Constant { inputs 0 channels rgb color {2.960000038 2.999999762 3.039999962 12} name Constant1 selected true xpos 5855 ypos -5603 } CheckerBoard2 { inputs 0 name CheckerBoard1 selected true xpos 6176 ypos -5879 } Grade { multiply 0.105 name Grade1 selected true xpos 6176 ypos -5767 } Keymix { inputs 3 channels rgba name Keymix1 selected true xpos 6176 ypos -5579 disable true } Dot { name Dot5 label BG_ELEMENT note_font_size 51 selected true xpos 6210 ypos -4622 } Dot { name Dot6 label BG note_font_size 71 selected true xpos 6210 ypos 3444 } set N607a5d00 [stack 0] NoOp { name Anchor_3cad2b60ea help "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019" onCreate "if nuke.GUI:\n try:\n import stamps; stamps.anchorOnCreate()\n except:\n pass" knobChanged stamps.anchorKnobChanged() autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0xffffff01 note_font_size 20 selected true xpos 6004 ypos 3436 addUserKnob {20 anchor_tab l "Anchor Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T anchor} addUserKnob {1 title l Title: t "Displayed name on the Node Graph for this Stamp and its Anchor.\nIMPORTANT: This is only for display purposes, and is different from the real/internal name of the Stamps."} title "BG Before Key" addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T "BG Before Key"} addUserKnob {26 prev_name l "" +STARTLINE +HIDDEN T Anchor_3cad2b60ea} addUserKnob {3 showing l "" +STARTLINE +HIDDEN} addUserKnob {1 tags l Tags t "Comma-separated tags you can define for each Anchor, that will help you find it when invoking the Stamp Selector by pressing the Stamps shortkey with nothing selected."} tags 2D, addUserKnob {26 line1 l "" +STARTLINE} addUserKnob {26 stamps_label l Stamps: T " "} addUserKnob {22 createStamp l new t "Create a new Stamp for this Anchor." -STARTLINE T stamps.stampCreateWired(nuke.thisNode())} addUserKnob {22 selectStamps l select t "Reconnect all of this Anchor's Stamps." -STARTLINE T stamps.wiredSelectSimilar(nuke.thisNode().name())} addUserKnob {22 reconnectStamps l reconnect -STARTLINE T stamps.anchorReconnectWired()} addUserKnob {22 zoomNext l "zoom next" t "Navigate to this Anchor's next Stamp on the Node Graph." -STARTLINE T stamps.wiredZoomNext(nuke.thisNode().name())} addUserKnob {26 line2 l "" +STARTLINE} addUserKnob {22 buttonHelp l Help -STARTLINE T stamps.showHelp()} addUserKnob {26 version l " " t "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019." -STARTLINE T " Stamps v1.0"} } set N607a5600 [stack 0] NoOp { name Stamp43 help "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019" onCreate "if nuke.GUI:\n try:\n import stamps; stamps.wiredOnCreate()\n except:\n pass\n" knobChanged "import stamps; stamps.wiredKnobChanged()" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 selected true xpos -730 ypos 3331 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {3 lockCallbacks l "" +STARTLINE +HIDDEN} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} addUserKnob {1 title l Title: t "Displayed name on the Node Graph for this Stamp and its Anchor.\nIMPORTANT: This is only for display purposes, and is different from the real/internal name of the Stamps."} title "BG Before Key" addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T "BG Before Key"} addUserKnob {26 tags l Tags: t "Tags of this stamp's Anchor, for information purpose only.\nClick \"show anchor\" to change them." T 2D} addUserKnob {26 backdrops l Backdrops: t "Labels of backdrop nodes which contain this stamp's Anchor." +HIDDEN T " "} addUserKnob {26 line1 l "" +STARTLINE} addUserKnob {26 anchor_label l Anchor: T " "} addUserKnob {22 show_anchor l " show anchor " t "Show the properties panel for this Stamp's Anchor." -STARTLINE T stamps.wiredShowAnchor()} addUserKnob {22 zoom_anchor l "zoom anchor" t "Navigate to this Stamp's Anchor on the Node Graph." -STARTLINE T stamps.wiredZoomAnchor()} addUserKnob {26 stamps_label l Stamps: T " "} addUserKnob {22 zoomNext l " zoom next " t "Navigate to this Stamp's next sibling on the Node Graph." -STARTLINE T stamps.wiredZoomNext()} addUserKnob {22 selectSimilar l " select similar " t "Select all similar Stamps to this one on the Node Graph." -STARTLINE T stamps.wiredSelectSimilar()} addUserKnob {26 space_1 l "" +STARTLINE T " "} addUserKnob {26 reconnect_label l Reconnect: t "Reconnect by the stored Anchor name." T " "} addUserKnob {22 reconnect_this l this t "Reconnect this Stamp to its Anchor, by its stored Anchor name." -STARTLINE T "n = nuke.thisNode()\ntry:\n n.setInput(0,nuke.toNode(n.knob(\"anchor\").value()))\nexcept:\n nuke.message(\"Unable to reconnect.\")\ntry:\n import stamps\n stamps.wiredGetStyle(n)\nexcept:\n pass\n"} addUserKnob {22 reconnect_similar l similar t "Reconnect this Stamp and similar ones to their Anchor, by their stored anchor name." -STARTLINE T stamps.wiredReconnectSimilar()} addUserKnob {22 reconnect_all l all t "Reconnect all the Stamps to their Anchors, by their stored anchor names." -STARTLINE T stamps.wiredReconnectAll()} addUserKnob {26 space_2 l "" +STARTLINE T " "} addUserKnob {20 advanced_reconnection l "Advanced Reconnection" n 2} addUserKnob {26 reconnect_by_title_label l "By Title:" t "Reconnect by searching for a matching title." T " "} addUserKnob {22 reconnect_by_title_this l this t "Look for an Anchor that shares this Stamp's title, and connect this Stamp to it.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectByTitle()} addUserKnob {22 reconnect_by_title_similar l similar t "Look for an Anchor that shares this Stamp's title, and connect this Stamp and similar ones to it.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectByTitleSimilar()} addUserKnob {22 reconnect_by_title_selected l selected t "For each Stamp selected, look for an Anchor that shares its title, and connect to it.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectByTitleSelected()} addUserKnob {26 reconnect_by_selection_label l "By Selection:" t "Force reconnect to a selected Anchor." T " "} addUserKnob {22 reconnect_by_selection_this l this t "Force reconnect this Stamp to a selected Anchor, whatever its name or title.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectBySelection()} addUserKnob {22 reconnect_by_selection_similar l similar t "Force reconnect this Stamp and similar ones to a selected Anchor, whatever its name or title.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectBySelectionSimilar()} addUserKnob {22 reconnect_by_selection_selected l selected t "Force reconnect all selected Stamps to an also selected Anchor, whatever its name or title.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectBySelectionSelected()} addUserKnob {1 anchor l Anchor} anchor Anchor_3cad2b60ea addUserKnob {6 auto_reconnect_by_title l "  auto-reconnect by title" t "When creating this stamp again (like on copy-paste), auto-reconnect it by title instead of doing it by the saved anchor's name, and auto-turn this off immediately.\nIMPORTANT: Should be off by default. Only use this for setting up templates." +STARTLINE} addUserKnob {20 advanced_reconnection_1 l "Advanced Reconnection" +INVISIBLE n -1} addUserKnob {26 line2 l "" +STARTLINE} addUserKnob {22 buttonHelp l Help -STARTLINE T stamps.showHelp()} addUserKnob {26 version l " " t "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019." -STARTLINE T " Stamps v1.0"} } Dot { name Dot9 label BG note_font_size 101 selected true xpos -696 ypos 3472 } Dot { inputs 0 name Dot1 label GreenScreenPlate note_font_size 41 selected true xpos -1000 ypos -5150 } AddChannels { channels rgba name AddChannels3 selected true xpos -1034 ypos -5080 } Dot { name Dot26 selected true xpos -1000 ypos -4467 } add_layer {GS_Plate GS_Plate.red GS_Plate.green GS_Plate.blue GS_Plate.alpha} Shuffle { black red white green red2 blue green2 black out2 GS_Plate name Shuffle33 label "\[value in] -> \[value out2]" selected true xpos -1034 ypos -4404 } Dot { name Dot8 note_font_size 41 selected true xpos -1000 ypos -4267 } set N60779d00 [stack 0] Dot { name Dot34 selected true xpos -1000 ypos -3937 } set N60779600 [stack 0] Dot { name Dot38 selected true xpos 796 ypos -3937 } set N60778f00 [stack 0] Dot { name Dot46 selected true xpos 2060 ypos -3937 } set N60778800 [stack 0] Dot { name Dot334 selected true xpos 3550 ypos -3937 } Remove { operation keep channels rgb name Remove38 selected true xpos 3516 ypos -3809 } Dot { name Dot335 note_font_size 41 selected true xpos 3550 ypos -3559 } IBKColourV3 { name IBKColourV3_10 selected true xpos 3516 ypos -3470 Size 18 } Inpaint2 { fillRegion "Source Inverted Alpha" center {1203 568} name Inpaint1 selected true xpos 3516 ypos -3281 } Dot { name Dot19 note_font_size 41 selected true xpos 3550 ypos -2977 } set N2f6bd600 [stack 0] Dot { name Dot16 label Cleanplate note_font_size 60 selected true xpos 3550 ypos -2377 } Dot { name Dot49 label Cleanplate note_font_size 60 selected true xpos 3550 ypos -1660 } Dot { name Dot53 label Cleanplate note_font_size 60 selected true xpos 3550 ypos -263 } add_layer {cleanplate cleanplate.red cleanplate.green cleanplate.blue cleanplate.alpha} Shuffle { black red white green red2 blue green2 black out2 cleanplate name Shuffle34 label "\[value in] -> \[value out2]" selected true xpos -874 ypos -273 } push $N60778f00 Remove { operation keep channels rgb name Remove31 selected true xpos 762 ypos -3816 } Dot { name Dot13 note_font_size 41 selected true xpos 796 ypos -3515 } Primatte3 { data { 5 11757 12586 28017 65552 0 5 30234 30234 30234 0 131.703 115.29 2282.26 72.2175 59.1462 2129.06 939.83 259.302 51.8183 549.229 904.755 276.263 92.3108 578.039 120.609 234.956 234.82 146.119 237.546 743.532 100.669 573.049 43.009 63.2739 116.749 6215.42 168.03 1762.74 3864.11 55.7825 120.53 782.613 3846.16 137.667 121.352 101.794 8606.14 147.362 77.5146 198.503 573.917 81.358 1101.7 522.226 871.183 109.573 110.87 144.688 126.765 33.3146 34.0749 5144.71 4299.28 18477.9 96.8055 90.0376 231.86 11773.6 405.26 440.61 169.247 274.68 242.589 111.212 102.975 105.83 130560 130560 130560 130560 130560 15703.5 22545.4 21185 130560 130560 26795.2 130560 130560 130560 130560 81679.3 130560 130560 111296 64686.9 112021 18414.1 130560 130560 130560 130560 60434.8 12591.6 24709.3 130560 130560 130560 130560 130560 130560 130560 16795 130560 130560 130560 130560 130560 12274.2 18220.6 15075.8 130560 130560 27876.9 130560 130560 130560 58272.4 87806.9 130560 78064.5 130560 28962.9 23001.1 130560 130560 130560 130560 130560 130560 130560 130560 130560 130560 130560 130560 130560 15703.5 22545.4 21185 130560 130560 26795.2 130560 130560 130560 130560 81679.3 130560 130560 111296 64686.9 112021 18414.1 130560 130560 130560 130560 60434.8 12591.6 24709.3 130560 130560 130560 130560 130560 130560 130560 16795 130560 130560 130560 130560 130560 12274.2 18220.6 15075.8 130560 130560 27876.9 130560 130560 130560 58272.4 87806.9 130560 78064.5 130560 28962.9 23001.1 130560 130560 130560 130560 130560 130560 130560 130560 -173008 -2.22551e+14 -2.22551e+14 -1.75797e+08 3.24562e+13 3.24562e+13 -88728 -2.22551e+14 -2.22551e+14 -3.33563e+07 2.59518e+13 2.59518e+13 -49917.5 -1.9095e+14 -1.9095e+14 2.99695e+07 1.24769e+13 1.24769e+13 -275696 -1.62776e+14 -1.62776e+14 5.27411e+07 -2.14449e+12 -2.14449e+12 -95526 -2.22551e+14 -2.22551e+14 1.29744e+07 1.69562e+13 1.69562e+13 -48985 -2.22551e+14 -2.22551e+14 3.80106e+07 1.04518e+13 1.04518e+13 -57891.4 -2.22551e+14 -2.22551e+14 2.42861e+07 -2.59518e+13 -2.59518e+13 -319741 -1.89714e+14 -1.89714e+14 3.3319e+06 -3.70182e+13 -3.70182e+13 -1.46426e+06 -4.06321e+14 -4.06321e+14 -6.42384e+08 6.71983e+13 6.71983e+13 -8.55972e+07 -7.25395e+12 -7.25395e+12 -4.66618e+09 1.27042e+13 1.27042e+13 -3.9253e+06 -1.98547e+12 -1.98547e+12 2.63799e+08 1.83081e+12 1.83081e+12 -1.11147e+08 -4.01415e+12 -4.01415e+12 -2.18771e+09 8.80462e+12 8.80462e+12 -3.71416e+06 -4.06321e+14 -4.06321e+14 8.76061e+08 -4.9151e+13 -4.9151e+13 -282796 -4.06321e+14 -4.06321e+14 -4.12997e+07 -2.48811e+13 -2.48811e+13 -20396 -4.06321e+14 -4.06321e+14 -2.03765e+07 -3.23759e+12 -3.23759e+12 -1.15164e+10 -4.06321e+14 -4.06321e+14 1.17853e+09 -1.03268e+14 -1.03268e+14 -4.34651e+09 -5.76078e+12 -5.76078e+12 -1.28057e+10 9.10482e+12 9.10482e+12 -258688 -2.42948e+14 -2.42948e+14 3.95126e+07 8.78112e+13 8.78112e+13 -65592 -4.06321e+14 -4.06321e+14 -3.43375e+07 2.48811e+13 2.48811e+13 -2.98885e+07 -8.74202e+11 -8.74202e+11 -8.66012e+08 3.03045e+11 3.03045e+11 -562448 -4.06321e+14 -4.06321e+14 1.75345e+08 3.90796e+13 3.90796e+13 -1.70271e+06 -4.06321e+14 -4.06321e+14 6.26216e+07 -6.09506e+13 -6.09506e+13 -7.9007e+07 -4.06321e+14 -4.06321e+14 1.52156e+10 -9.14682e+13 -9.14682e+13 -6.56372e+08 -1.55159e+13 -1.55159e+13 3.2503e+10 -6.35202e+12 -6.35202e+12 -3.37791e+08 -9.2413e+13 -9.2413e+13 -6.93039e+08 1.39767e+14 1.39767e+14 -4.78643e+06 -1.42796e+13 -1.42796e+13 -4.03005e+08 1.74249e+13 1.74249e+13 -1.03233e+06 -1.12003e+14 -1.12003e+14 -9.588e+07 3.48023e+13 3.48023e+13 -2.04677e+08 -1.16868e+12 -1.16868e+12 -2.39029e+08 -1.34758e+11 -1.34758e+11 -893296 -5.24559e+14 -5.24559e+14 -1.53781e+08 -2.95997e+13 -2.95997e+13 -1.60356e+06 -5.24559e+14 -5.24559e+14 3.18342e+08 -9.64026e+13 -9.64026e+13 -93988 -5.24559e+14 -5.24559e+14 5.9775e+07 -6.27891e+13 -6.27891e+13 -1.29519e+10 -2.34124e+14 -2.34124e+14 -4.53767e+10 -4.78306e+13 -4.78306e+13 -3.44886e+06 -4.06321e+14 -4.06321e+14 -2.18227e+08 6.80597e+13 6.80597e+13 -569166 -2.54198e+14 -2.54198e+14 -6.19316e+07 1.15759e+14 1.15759e+14 -528400 -5.65689e+13 -5.65689e+13 -1.74988e+08 1.30936e+14 1.30936e+14 -2.1286e+07 -8.34717e+12 -8.34717e+12 -2.10171e+09 1.4745e+13 1.4745e+13 -596176 -4.06321e+14 -4.06321e+14 8.40006e+07 -6.96482e+12 -6.96482e+12 -230817 -4.06321e+14 -4.06321e+14 7.04665e+06 4.11041e+11 4.11041e+11 -13557 -4.06321e+14 -4.06321e+14 -1.20581e+07 -2.85297e+13 -2.85297e+13 -5.03316e+07 -2.73268e+14 -2.73268e+14 1.43263e+10 -8.80179e+13 -8.80179e+13 -31228 -2.22551e+14 -2.22551e+14 1.80443e+07 3.12724e+13 3.12724e+13 -3.22987e+09 -3.32092e+11 -3.32092e+11 -1.44559e+10 3.46322e+11 3.46322e+11 -4.71444e+08 -7.14508e+11 -7.14508e+11 -2.14529e+10 9.18671e+11 9.18671e+11 -1.64549e+06 -5.10403e+13 -5.10403e+13 5.42704e+07 2.07275e+13 2.07275e+13 -1.02509e+08 -2.22551e+14 -2.22551e+14 7.44013e+09 -4.10238e+13 -4.10238e+13 -220020 -2.22551e+14 -2.22551e+14 -1.17411e+07 -2.43094e+13 -2.43094e+13 -55078 -2.22551e+14 -2.22551e+14 2.67342e+07 8.80939e+12 8.80939e+12 -5.45586e+09 -2.22551e+14 -2.22551e+14 1.99278e+10 -5.44912e+13 -5.44912e+13 -2.29466e+09 -1.35475e+13 -1.35475e+13 -2.18582e+10 2.0952e+13 2.0952e+13 -2.68691e+06 -2.30801e+13 -2.30801e+13 -2.93389e+08 2.81856e+13 2.81856e+13 -308272 -4.06321e+14 -4.06321e+14 -5.18663e+07 7.27645e+13 7.27645e+13 -3.20791e+08 -7.56085e+11 -7.56085e+11 -6.62225e+09 2.06047e+12 2.06047e+12 -343800 -4.06321e+14 -4.06321e+14 -1.00216e+08 -8.80379e+12 -8.80379e+12 -4.51419e+07 -4.06321e+14 -4.06321e+14 1.08829e+10 -8.96585e+13 -8.96585e+13 -1.672e+06 -4.06321e+14 -4.06321e+14 4.73304e+08 -6.27603e+13 -6.27603e+13 -7.47418e+07 -1.81352e+14 -1.81352e+14 1.88562e+10 -9.12369e+13 -9.12369e+13 -2.64224e+08 -5.78142e+13 -5.78142e+13 2.05357e+09 8.43729e+13 8.43729e+13 -247784 -3.13644e+14 -3.13644e+14 6.70985e+07 3.07649e+13 3.07649e+13 -148368 -5.24559e+14 -5.24559e+14 -7.90006e+07 3.45854e+13 3.45854e+13 -3.51635e+07 -1.11673e+12 -1.11673e+12 1.67142e+09 1.17381e+12 1.17381e+12 -2.57304e+06 -5.24559e+14 -5.24559e+14 -9.17211e+06 3.22175e+13 3.22175e+13 -394416 -5.24559e+14 -5.24559e+14 -5.42436e+07 -5.93409e+13 -5.93409e+13 -546688 -5.24559e+14 -5.24559e+14 4.73626e+08 -9.98509e+13 -9.98509e+13 -4.89972e+09 -2.71902e+13 -2.71902e+13 1.48134e+11 2.4441e+13 2.4441e+13 -2.5618e+06 -2.54198e+14 -2.54198e+14 -1.04936e+08 1.03768e+14 1.03768e+14 -201818 -4.06321e+14 -4.06321e+14 5.25342e+07 2.85297e+13 2.85297e+13 -45108 -4.06322e+14 -4.06322e+14 -4.66993e+07 -4.1103e+11 -4.1103e+11 -2.48883e+06 -7.8946e+12 -7.8946e+12 -5.29195e+08 1.28701e+13 1.28701e+13 -2.3376e+06 -4.06321e+14 -4.06321e+14 3.09963e+08 3.99409e+13 3.99409e+13 -223498 -4.06321e+14 -4.06321e+14 7.31205e+07 -1.87645e+13 -1.87645e+13 -390016 -4.06321e+14 -4.06321e+14 3.14765e+08 -7.54355e+13 -7.54355e+13 -1.75239e+08 -4.02259e+13 -4.02259e+13 2.96184e+10 -9.17516e+12 -9.17516e+12 -1.23968e+06 -4.06321e+14 -4.06321e+14 -7.37413e+08 8.53962e+13 8.53962e+13 -6.75126e+07 -1.7841e+12 -1.7841e+12 6.61983e+09 4.41779e+12 4.41779e+12 -2.81985e+07 -1.64193e+13 -1.64193e+13 -4.24373e+09 1.39135e+13 1.39135e+13 -2.41807e+07 -4.45722e+12 -4.45722e+12 -4.99349e+09 4.6435e+11 4.6435e+11 -3.19968e+06 -4.06321e+14 -4.06321e+14 1.31085e+09 -5.01286e+13 -5.01286e+13 -1.53757e+06 -4.06321e+14 -4.06321e+14 3.53143e+08 -7.27645e+13 -7.27645e+13 -69220 -4.06321e+14 -4.06321e+14 -5.92075e+07 -2.14355e+13 -2.14355e+13 -7.50032e+09 -4.06321e+14 -4.06321e+14 2.5079e+10 -1.0229e+14 -1.0229e+14 -7.0802e+09 -6.51685e+11 -6.51685e+11 -4.88213e+10 6.56937e+11 6.56937e+11 -268558 -1.03017e+14 -1.03017e+14 -4.2673e+07 7.70381e+13 7.70381e+13 -25490 -2.22551e+14 -2.22551e+14 1.22614e+07 2.43094e+13 2.43094e+13 -2.15065e+08 -3.64106e+11 -3.64106e+11 -9.26604e+09 4.80813e+11 4.80813e+11 -67472 -2.22551e+14 -2.22551e+14 3.92834e+07 1.57724e+13 1.57724e+13 -5.0378e+08 -2.22551e+14 -2.22551e+14 2.33334e+10 -4.75282e+13 -4.75282e+13 -1.11016e+09 -2.22551e+14 -2.22551e+14 3.32117e+10 -4.79868e+13 -4.79868e+13 -1.34809e+06 -1.10265e+14 -1.10265e+14 1.86729e+08 -4.9724e+13 -4.9724e+13 -9.88307e+06 -5.24559e+14 -5.24559e+14 -1.68476e+08 1.06099e+14 1.06099e+14 -1.15611e+06 -7.27994e+13 -7.27994e+13 -1.41131e+08 4.05615e+13 4.05615e+13 -980442 -1.81738e+13 -1.81738e+13 6.90831e+07 2.48541e+13 2.48541e+13 -1.00781e+08 -1.4597e+12 -1.4597e+12 2.29401e+09 1.12587e+12 1.12587e+12 -2.29498e+06 -5.24559e+14 -5.24559e+14 -3.61518e+08 -2.83376e+13 -2.83376e+13 -309804 -5.24559e+14 -5.24559e+14 -4.70927e+07 -3.45854e+13 -3.45854e+13 -13865 -5.24559e+14 -5.24559e+14 -1.27731e+07 -3.92958e+13 -3.92958e+13 -1.0284e+10 -3.52787e+14 -3.52787e+14 -7.83663e+10 -8.20847e+13 -8.20847e+13 -1.93585e+06 -3.63425e+14 -3.63425e+14 -9.27423e+07 6.22805e+13 6.22805e+13 -220555 -3.63425e+14 -3.63425e+14 1.51874e+06 4.55258e+13 4.55258e+13 -78392 -3.1182e+14 -3.1182e+14 -7.74062e+07 -1.10039e+13 -1.10039e+13 -2.03932e+06 -3.70959e+13 -3.70959e+13 2.23079e+08 6.12195e+13 6.12195e+13 -724400 -3.63425e+14 -3.63425e+14 -1.4328e+08 2.23541e+13 2.23541e+13 -139264 -3.63425e+14 -3.63425e+14 9.41002e+06 5.59947e+12 5.59947e+12 -27318 -3.63425e+14 -3.63425e+14 9.57975e+06 -4.55258e+13 -4.55258e+13 -1.94705e+07 -2.08354e+14 -2.08354e+14 2.87003e+09 -7.34549e+13 -7.34549e+13 -311128 -3.63425e+14 -3.63425e+14 -1.32985e+08 6.06356e+13 6.06356e+13 -5.74384e+08 -1.0002e+12 -1.0002e+12 -4.02646e+10 1.6823e+12 1.6823e+12 -5.23187e+07 -2.07128e+12 -2.07128e+12 -7.35669e+09 1.98585e+12 1.98585e+12 -1.77738e+07 -9.62428e+12 -9.62428e+12 3.19403e+09 1.67449e+13 1.67449e+13 -1.77928e+07 -3.63425e+14 -3.63425e+14 2.32491e+09 -5.82066e+13 -5.82066e+13 -288718 -3.63425e+14 -3.63425e+14 -2.6594e+07 -4.26996e+13 -4.26996e+13 -42434 -3.63425e+14 -3.63425e+14 -5.17523e+07 2.77326e+12 2.77326e+12 -7.2133e+10 -3.63425e+14 -3.63425e+14 -1.86415e+11 -9.28972e+13 -9.28972e+13 -6.39369e+10 -1.55874e+12 -1.55874e+12 2.07376e+11 2.35973e+12 2.35973e+12 -322348 -1.00585e+14 -1.00585e+14 6.49868e+07 2.64138e+13 2.64138e+13 -63157 -3.63425e+14 -3.63425e+14 1.4609e+07 4.26996e+13 4.26996e+13 -1.81731e+08 -4.64739e+11 -4.64739e+11 6.90731e+09 2.44935e+11 2.44935e+11 -258224 -3.63425e+14 -3.63425e+14 1.39737e+08 2.07093e+13 2.07093e+13 -4.00876e+07 -3.63425e+14 -3.63425e+14 7.19011e+09 -7.49612e+13 -7.49612e+13 -1.00694e+08 -3.63425e+14 -3.63425e+14 1.36334e+10 -7.61426e+13 -7.61426e+13 -8.5995e+07 -8.03662e+13 -8.03662e+13 3.33733e+09 -3.52808e+13 -3.52808e+13 -5.72174e+08 -1.06709e+14 -1.06709e+14 -4.20627e+09 1.65952e+14 1.65952e+14 -550016 -8.03413e+13 -8.03413e+13 -6.2677e+07 1.01651e+14 1.01651e+14 -478394 -1.2933e+14 -1.2933e+14 2.00402e+07 2.06147e+14 2.06147e+14 -1.36416e+08 -9.17634e+11 -9.17634e+11 -5.28366e+09 1.40665e+12 1.40665e+12 -3.06936e+06 -6.05708e+14 -6.05708e+14 9.28682e+07 -1.04378e+13 -1.04378e+13 -329860 -6.05708e+14 -6.05708e+14 -3.99497e+07 -7.72407e+13 -7.72407e+13 -39166 -6.05708e+14 -6.05708e+14 2.21804e+07 -8.19511e+13 -8.19511e+13 -1.11235e+11 -1.81817e+14 -1.81817e+14 -1.17571e+11 -3.81741e+13 -3.81741e+13 -1 -1 -1 -1 -1 -1 999999 999999 -1 -1 -1 -1 0.05 1.732 1.732 0.05 1.732 1.732 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 } primEdgedata { 5 11757 12586 28017 65552 0 5 30234 30234 30234 0 131.703 115.29 2282.26 72.2175 59.1462 2129.06 939.83 259.302 51.8183 549.229 904.755 276.263 92.3108 578.039 120.609 234.956 234.82 146.119 237.546 743.532 100.669 573.049 43.009 63.2739 116.749 6215.42 168.03 1762.74 3864.11 55.7825 120.53 782.613 3846.16 137.667 121.352 101.794 8606.14 147.362 77.5146 198.503 573.917 81.358 1101.7 522.226 871.183 109.573 110.87 144.688 126.765 33.3146 34.0749 5144.71 4299.28 18477.9 96.8055 90.0376 231.86 11773.6 405.26 440.61 169.247 274.68 242.589 111.212 102.975 105.83 130560 130560 130560 130560 130560 15703.5 22545.4 21185 130560 130560 26795.2 130560 130560 130560 130560 81679.3 130560 130560 111296 64686.9 112021 18414.1 130560 130560 130560 130560 60434.8 12591.6 24709.3 130560 130560 130560 130560 130560 130560 130560 18167.2 130560 130560 130560 130560 130560 12274.2 18220.6 15075.8 130560 130560 27876.9 130560 130560 130560 58272.4 87806.9 130560 78064.5 130560 28962.9 31419.7 130560 130560 130560 130560 130560 130560 130560 130560 130560 130560 130560 130560 130560 15703.5 22545.4 21185 130560 130560 26795.2 130560 130560 130560 130560 81679.3 130560 130560 111296 64686.9 112021 18414.1 130560 130560 130560 130560 60434.8 12591.6 24709.3 130560 130560 130560 130560 130560 130560 130560 18167.2 130560 130560 130560 130560 130560 12274.2 18220.6 15075.8 130560 130560 27876.9 130560 130560 130560 58272.4 87806.9 130560 78064.5 130560 28962.9 31419.7 130560 130560 130560 130560 130560 130560 130560 130560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 999999 999999 -1 -1 -1 -1 0.05 1.732 1.732 0.05 1.732 1.732 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 } primBodydata { 5 11757 12586 28017 65552 0 5 30234 30234 30234 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 130560 130560 130560 130560 130560 15703.5 22545.4 21185 130560 130560 26795.2 130560 130560 130560 130560 81679.3 130560 130560 111296 64686.9 112021 18414.1 130560 130560 130560 130560 60434.8 12591.6 24709.3 130560 130560 130560 130560 130560 130560 130560 16795 130560 130560 130560 130560 130560 12274.2 18220.6 15075.8 130560 130560 27876.9 130560 130560 130560 58272.4 87806.9 130560 78064.5 130560 28962.9 23001.1 130560 130560 130560 130560 130560 130560 130560 130560 130560 130560 130560 130560 130560 15703.5 22545.4 21185 130560 130560 26795.2 130560 130560 130560 130560 81679.3 130560 130560 111296 64686.9 112021 18414.1 130560 130560 130560 130560 60434.8 12591.6 24709.3 130560 130560 130560 130560 130560 130560 130560 16795 130560 130560 130560 130560 130560 12274.2 18220.6 15075.8 130560 130560 27876.9 130560 130560 130560 58272.4 87806.9 130560 78064.5 130560 28962.9 23001.1 130560 130560 130560 130560 130560 130560 130560 130560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 999999 999999 -1 -1 -1 -1 0.05 1.732 1.732 0.05 1.732 1.732 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 0.05 0.866 0.866 } crop {0 0 2440 1802} "Adjust Lighting" 0 "Hybrid Matte" 0 "Fine Tuning" 0 name Primatte2 selected true xpos 762 ypos -3388 } Shuffle { red alpha green alpha blue alpha name Shuffle35 tile_color 0xffffffff selected true xpos 762 ypos -3333 } Dot { name Dot54 label "Core\nMatte" note_font_size 60 selected true xpos 796 ypos -2008 } Dot { name Dot57 selected true xpos 796 ypos -1915 } set N2f6a4100 [stack 0] Dot { name Dot58 note_font_size 41 selected true xpos 796 ypos -1215 } push $N2f6bd600 push $N60778800 Remove { operation keep channels rgb name Remove30 selected true xpos 2026 ypos -3816 } Dot { name Dot17 note_font_size 41 selected true xpos 2060 ypos -3473 } IBKGizmoV3 { inputs 2 name IBKGizmoV3_3 xpos 2026 ypos -2980 } Shuffle { red alpha green alpha blue alpha name Shuffle36 tile_color 0xffffffff selected true xpos 2026 ypos -2929 } Dot { name Dot59 label "Edge\nMatte" note_font_size 60 selected true xpos 2060 ypos -1448 } Merge2 { inputs 2 operation screen bbox B name Merge4 selected true xpos 2026 ypos -1219 } Dot { name Dot60 label "Combined\nMatte" note_font_size 60 selected true xpos 2060 ypos -625 } Dot { name Dot61 label "Combined\nMatte" note_font_size 60 selected true xpos -881 ypos -625 } push $N60779d00 Remove { channels rgba name Remove32 selected true xpos -1172 ypos -4270 } NoOp { name Anchor_217ff93ec8 help "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019" onCreate "if nuke.GUI:\n try:\n import stamps; stamps.anchorOnCreate()\n except:\n pass" knobChanged stamps.anchorKnobChanged() autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0xffffff01 note_font_size 20 selected true xpos -1172 ypos -4221 addUserKnob {20 anchor_tab l "Anchor Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T anchor} addUserKnob {1 title l Title: t "Displayed name on the Node Graph for this Stamp and its Anchor.\nIMPORTANT: This is only for display purposes, and is different from the real/internal name of the Stamps."} title "GS Utils" addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T "GS Utils"} addUserKnob {26 prev_name l "" +STARTLINE +HIDDEN T Anchor_217ff93ec8} addUserKnob {3 showing l "" +STARTLINE +HIDDEN} addUserKnob {1 tags l Tags t "Comma-separated tags you can define for each Anchor, that will help you find it when invoking the Stamp Selector by pressing the Stamps shortkey with nothing selected."} tags 2D, addUserKnob {26 line1 l "" +STARTLINE} addUserKnob {26 stamps_label l Stamps: T " "} addUserKnob {22 createStamp l new t "Create a new Stamp for this Anchor." -STARTLINE T stamps.stampCreateWired(nuke.thisNode())} addUserKnob {22 selectStamps l select t "Reconnect all of this Anchor's Stamps." -STARTLINE T stamps.wiredSelectSimilar(nuke.thisNode().name())} addUserKnob {22 reconnectStamps l reconnect -STARTLINE T stamps.anchorReconnectWired()} addUserKnob {22 zoomNext l "zoom next" t "Navigate to this Anchor's next Stamp on the Node Graph." -STARTLINE T stamps.wiredZoomNext(nuke.thisNode().name())} addUserKnob {26 line2 l "" +STARTLINE} addUserKnob {22 buttonHelp l Help -STARTLINE T stamps.showHelp()} addUserKnob {26 version l " " t "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019." -STARTLINE T " Stamps v1.0"} } NoOp { name Stamp44 help "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019" onCreate "if nuke.GUI:\n try:\n import stamps; stamps.wiredOnCreate()\n except:\n pass\n" knobChanged "import stamps; stamps.wiredKnobChanged()" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 selected true xpos -1271 ypos -1014 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {3 lockCallbacks l "" +STARTLINE +HIDDEN} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} addUserKnob {1 title l Title: t "Displayed name on the Node Graph for this Stamp and its Anchor.\nIMPORTANT: This is only for display purposes, and is different from the real/internal name of the Stamps."} title "GS Utils" addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T "GS Utils"} addUserKnob {26 tags l Tags: t "Tags of this stamp's Anchor, for information purpose only.\nClick \"show anchor\" to change them." T 2D} addUserKnob {26 backdrops l Backdrops: t "Labels of backdrop nodes which contain this stamp's Anchor." T "creating GS channel,Advanced Keying Template"} addUserKnob {26 line1 l "" +STARTLINE} addUserKnob {26 anchor_label l Anchor: T " "} addUserKnob {22 show_anchor l " show anchor " t "Show the properties panel for this Stamp's Anchor." -STARTLINE T stamps.wiredShowAnchor()} addUserKnob {22 zoom_anchor l "zoom anchor" t "Navigate to this Stamp's Anchor on the Node Graph." -STARTLINE T stamps.wiredZoomAnchor()} addUserKnob {26 stamps_label l Stamps: T " "} addUserKnob {22 zoomNext l " zoom next " t "Navigate to this Stamp's next sibling on the Node Graph." -STARTLINE T stamps.wiredZoomNext()} addUserKnob {22 selectSimilar l " select similar " t "Select all similar Stamps to this one on the Node Graph." -STARTLINE T stamps.wiredSelectSimilar()} addUserKnob {26 space_1 l "" +STARTLINE T " "} addUserKnob {26 reconnect_label l Reconnect: t "Reconnect by the stored Anchor name." T " "} addUserKnob {22 reconnect_this l this t "Reconnect this Stamp to its Anchor, by its stored Anchor name." -STARTLINE T "n = nuke.thisNode()\ntry:\n n.setInput(0,nuke.toNode(n.knob(\"anchor\").value()))\nexcept:\n nuke.message(\"Unable to reconnect.\")\ntry:\n import stamps\n stamps.wiredGetStyle(n)\nexcept:\n pass\n"} addUserKnob {22 reconnect_similar l similar t "Reconnect this Stamp and similar ones to their Anchor, by their stored anchor name." -STARTLINE T stamps.wiredReconnectSimilar()} addUserKnob {22 reconnect_all l all t "Reconnect all the Stamps to their Anchors, by their stored anchor names." -STARTLINE T stamps.wiredReconnectAll()} addUserKnob {26 space_2 l "" +STARTLINE T " "} addUserKnob {20 advanced_reconnection l "Advanced Reconnection" n 2} addUserKnob {26 reconnect_by_title_label l "By Title:" t "Reconnect by searching for a matching title." T " "} addUserKnob {22 reconnect_by_title_this l this t "Look for an Anchor that shares this Stamp's title, and connect this Stamp to it.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectByTitle()} addUserKnob {22 reconnect_by_title_similar l similar t "Look for an Anchor that shares this Stamp's title, and connect this Stamp and similar ones to it.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectByTitleSimilar()} addUserKnob {22 reconnect_by_title_selected l selected t "For each Stamp selected, look for an Anchor that shares its title, and connect to it.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectByTitleSelected()} addUserKnob {26 reconnect_by_selection_label l "By Selection:" t "Force reconnect to a selected Anchor." T " "} addUserKnob {22 reconnect_by_selection_this l this t "Force reconnect this Stamp to a selected Anchor, whatever its name or title.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectBySelection()} addUserKnob {22 reconnect_by_selection_similar l similar t "Force reconnect this Stamp and similar ones to a selected Anchor, whatever its name or title.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectBySelectionSimilar()} addUserKnob {22 reconnect_by_selection_selected l selected t "Force reconnect all selected Stamps to an also selected Anchor, whatever its name or title.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectBySelectionSelected()} addUserKnob {1 anchor l Anchor} anchor Anchor_217ff93ec8 addUserKnob {6 auto_reconnect_by_title l "  auto-reconnect by title" t "When creating this stamp again (like on copy-paste), auto-reconnect it by title instead of doing it by the saved anchor's name, and auto-turn this off immediately.\nIMPORTANT: Should be off by default. Only use this for setting up templates." +STARTLINE} addUserKnob {20 advanced_reconnection_1 l "Advanced Reconnection" +INVISIBLE n -1} addUserKnob {26 line2 l "" +STARTLINE} addUserKnob {22 buttonHelp l Help -STARTLINE T stamps.showHelp()} addUserKnob {26 version l " " t "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019." -STARTLINE T " Stamps v1.0"} } Dot { name Dot10 note_font_size 41 selected true xpos -1237 ypos -936 } Dot { name Dot286 note_font_size 41 selected true xpos -1104 ypos -936 } set N2f61f200 [stack 0] Dot { name Dot287 note_font_size 41 selected true xpos -1104 ypos -886 } push $N2f61f200 push $N2f6a4100 Dot { name Dot288 note_font_size 41 selected true xpos 411 ypos -1915 } Group { name ExponBlurSimple4 onCreate "n = nuke.thisNode()\nn.knob('size').setRange(-100, 100)\nn.knob('adjustBBoxPixels').setRange(0, 400)\nn.knob('adjustBBoxPercent').setRange(1, 2)\nn.knob('safeBBoxPixels').setRange(0, 400)\nn.knob('safeBBoxPercent').setRange(1, 2)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"includeOriginal\":\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n \n else:\n merge.setInput(steps+1, None)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps)\n \nelif k.name() == \"steps\":\n \n s = int(k.value())\n if s<1:\n k.setValue(1)\n else:\n start = nuke.toNode(\"Start\")\n end = nuke.toNode(\"End\")\n b1 = nuke.toNode(\"Blur1\")\n merge = nuke.toNode(\"Merge1\")\n AvgMult = nuke.toNode(\"AverageMult\")\n \n b1x = b1.xpos()\n b1y = b1.ypos()\n b1n = b1.name()\n \n steps = int(n.knob('steps').getValue())\n size = n.knob('size').getValue()\n mult = n.knob('mult').getValue()\n \n #b1.setInput(0, start)\n for i in range(1,merge.inputs()):\n merge.setInput(i,None)\n merge.setInput(0, b1)\n \[nuke.delete(i) for i in nuke.allNodes() if i.xpos()>start.xpos()]\n for i in range(1,steps):\n # Blur\n b = nuke.nodes.Blur()\n b.setXYpos(b1x+i*100,b1y)\n b.setInput(0,start)\n b\[\"channels\"].setValue(\"all\")\n b\[\"crop\"].setValue(0)\n b\[\"size\"].setValue(0, 1)\n b\[\"size\"].setExpression(\"(Blur1.size)*(mult)**%s\"%(i))\n b\[\"label\"].setValue(\"\[value size]\")\n merge.setInput(i if i<2 else i+1, b)\n AvgMult\['whitepoint'].setValue(i if i<2 else i+1)\n \n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n \nelif k.name() == \"output2\":\n if n.knob(\"output2\").getValue() == 4:\n n.knob('AvgMaxOriginal').setVisible(True)\n else:\n n.knob('AvgMaxOriginal').setVisible(False)\n \nelif k.name() == \"safeBBox\":\n if n.knob(\"safeBBox\").getValue() == 0:\n n.knob('safeBBoxText').setVisible(False)\n n.knob('safetyBBoxMethod').setVisible(False)\n n.knob('safeBBoxPixels').setVisible(False)\n n.knob('safeBBoxPercent').setVisible(False)\n \n elif n.knob(\"safeBBox\").getValue() == 1:\n n.knob('safetyBBoxMethod').setVisible(True)\n n.knob('safeBBoxText').setVisible(True)\n if n.knob('safetyBBoxMethod').value() == \"pixels\":\n n.knob('safeBBoxPixels').setVisible(True)\n n.knob('safeBBoxPercent').setVisible(False)\n elif n.knob('safetyBBoxMethod').value() == \"percent\":\n n.knob('safeBBoxPixels').setVisible(False)\n n.knob('safeBBoxPercent').setVisible(True)\n \nelif k.name() == \"safetyBBoxMethod\":\n if n.knob(\"safetyBBoxMethod\").value() == \"pixels\":\n n.knob('safeBBoxPixels').setVisible(True)\n n.knob('safeBBoxPercent').setVisible(False)\n elif n.knob(\"safetyBBoxMethod\").value() == \"percent\":\n n.knob('safeBBoxPixels').setVisible(False)\n n.knob('safeBBoxPercent').setVisible(True)\n \nelif k.name() == \"adjustBBoxExtra\":\n if n.knob(\"adjustBBoxExtra\").value() == \"pixels\":\n n.knob('adjustBBoxPixels').setVisible(True)\n n.knob('adjustBBoxPercent').setVisible(False)\n elif n.knob(\"adjustBBoxExtra\").value() == \"percent\":\n n.knob('adjustBBoxPixels').setVisible(False)\n n.knob('adjustBBoxPercent').setVisible(True)\n" tile_color 0xcc804eff label "(\[value output2])" note_font "Verdana Bold" note_font_color 0xffffffff selected true xpos 377 ypos -1675 addUserKnob {20 ExponBlurSimple} addUserKnob {41 channels T Remove1.channels} addUserKnob {41 maskChannelMask_1 l area T Multiply1.maskChannelMask} addUserKnob {41 inject_1 l inject -STARTLINE T Multiply1.inject} addUserKnob {41 invert_mask_1 l invert -STARTLINE T Multiply1.invert_mask} addUserKnob {41 fringe_1 l fringe -STARTLINE T Multiply1.fringe} addUserKnob {26 ""} addUserKnob {4 output2 l Operation: M {Screen Plus Over Hypot Average Max Min "" "" "" "" ""}} addUserKnob {3 steps l " Steps" -STARTLINE} steps 4 addUserKnob {26 text l " " -STARTLINE T " "} addUserKnob {6 includeOriginal l "Include Original?" -STARTLINE} includeOriginal true addUserKnob {6 AvgMaxOriginal l "Use Max of Average and Original" +HIDDEN +STARTLINE} addUserKnob {14 size l Size R -100 100} size -3 addUserKnob {7 mult l Multiplier R 1 5} mult 3 addUserKnob {6 clamp +STARTLINE} addUserKnob {14 postBlur l "Post Blur" R 0 100} addUserKnob {26 ""} addUserKnob {20 bboxControl l "BBox Control" n 1} bboxControl 0 addUserKnob {26 text_2 l " " T " "} addUserKnob {4 bbox l "BBox: " -STARTLINE M {union intersectionMask A B "input format" "" "" "" "" "" "" "" "" "" "" "" ""}} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {6 safeBBox l "Safe BBox" t "If the output BBox is larger than the input format and the input box combined. the result will be max of the input/format bbox plus a safety \"buffer\" in pixels or percent \n\nTurning off might make your BBox grow exponentially with high blur values" -STARTLINE} safeBBox true addUserKnob {26 safeBBoxText l "" +STARTLINE T " "} addUserKnob {4 safetyBBoxMethod l "Safe BBox Buffer " -STARTLINE M {pixels percent "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""}} safetyBBoxMethod percent addUserKnob {14 safeBBoxPixels l "" -STARTLINE +HIDDEN R 0 400} safeBBoxPixels 100 addUserKnob {14 safeBBoxPercent l "" -STARTLINE R 1 2} safeBBoxPercent 1.1 addUserKnob {26 text_3 l "" +STARTLINE T " "} addUserKnob {4 adjustBBoxExtra l "Extra BBox Adjust" -STARTLINE M {pixels percent "" "" "" "" "" "" "" "" "" "" "" "" ""}} addUserKnob {14 adjustBBoxPercent l "" -STARTLINE +HIDDEN R 1 2} adjustBBoxPercent 1 addUserKnob {14 adjustBBoxPixels l "" -STARTLINE R 0 400} addUserKnob {26 ""} addUserKnob {20 endGroup n -1} addUserKnob {41 maskChannelMask l mask T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: T ExponBlurSimple} addUserKnob {26 ver l Version: T v03} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x535e5a00 label "BBox Management" note_font_size 30 note_font_color 0xffffffff xpos -529 ypos 492 bdwidth 341 bdheight 525 } Input { inputs 0 name Inputimg xpos 0 ypos -969 } Dot { name Dot16 note_font_size 41 xpos 34 ypos -802 } set N2f61c800 [stack 0] Dot { name Dot2 note_font_size 41 xpos -367 ypos -802 } Dot { name Dot18 label B note_font_size 41 xpos -367 ypos 434 } Dot { name Dot11 note_font_size 41 xpos -367 ypos 623 } set N2f5f3200 [stack 0] Dot { name Dot3 note_font_size 41 xpos -367 ypos 675 } set N2f5f2b00 [stack 0] Dot { name Dot8 note_font_size 41 xpos -463 ypos 675 } Dot { name Dot15 note_font_size 41 xpos -463 ypos 831 } push $N2f61c800 Dot { name Dot1 note_font_size 41 xpos 461 ypos -802 } Remove { operation keep channels rgba name Remove1 xpos 427 ypos -718 } Dot { name Dot21 note_font_size 41 xpos 461 ypos -597 } set N2f5f0800 [stack 0] Invert { name Invert1 xpos 695 ypos -604 disable {{"parent.size < 0 ? 0 : 1"}} } set N2f5f0100 [stack 0] Dot { name Dot4 note_font_size 41 xpos 540 ypos -543 } NoOp { name Original xpos 506 ypos -327 } set N2f3cf200 [stack 0] Dot { name Dot5 note_font_size 41 xpos 540 ypos 14 } Crop { inputs 0 box {{"!\[exists parent.input0] ? 0 : input.format.x"} {"!\[exists parent.input0] ? 0 : input.format.y"} {"!\[exists parent.input0] ? 0 : input.format.r"} {"!\[exists parent.input0] ? 0 : input.format.t"}} reformat true crop false name Crop1 xpos 210 ypos -750 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } AddChannels { channels rgba name AddChannels2 xpos 210 ypos -724 } push $N2f61c800 Merge2 { inputs 2 name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 83 ypos -671 } NoOp { name BBoxInput xpos 83 ypos -628 addUserKnob {20 User} addUserKnob {15 bbox} bbox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} } push $N2f3cf200 Input { inputs 0 name Inputarea xpos 289 ypos -638 number 2 } AddChannels { channels alpha color 1 name AddChannels1 xpos 289 ypos -580 } Invert { channels rgba name Invert3 xpos 289 ypos -503 } push $N2f5f0100 Multiply { inputs 1+1 value 0 name Multiply1 label "\[value value]" xpos 695 ypos -512 } NoOp { name Start xpos 695 ypos -450 } set N2f3ad600 [stack 0] Blur { size {{(Blur1.size)*(mult)**3} {(Blur1.size)*(mult)**3}} crop false name Blur4 label "\[value size]" xpos 995 ypos -370 } push $N2f3ad600 Blur { size {{(Blur1.size)*(mult)**2} {(Blur1.size)*(mult)**2}} crop false name Blur3 label "\[value size]" xpos 895 ypos -370 } push 0 push $N2f3ad600 Blur { size {{(Blur1.size)*(mult)**1} {(Blur1.size)*(mult)**1}} crop false name Blur2 label "\[value size]" xpos 795 ypos -370 } push $N2f3ad600 Blur { size {{parent.size.w} {parent.size.h}} name Blur1 label "\[value size]" xpos 695 ypos -370 } Merge2 { inputs 5+1 operation {{mergeNumber.mergeNumber}} also_merge all name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 695 ypos -273 } NoOp { name End xpos 695 ypos -230 } set N2f386b00 [stack 0] CopyBBox { inputs 2 name CopyBBox1 xpos 585 ypos -175 } Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" tile_color 0xa57aaaff note_font "Verdana Bold" note_font_color 0xffffffff xpos 585 ypos -151 addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} overscanType {{parent.safetyBBoxMethod}} addUserKnob {14 overscan l Overscan R 0 400} overscan {{parent.safeBBoxPixels} {parent.safeBBoxPixels}} addUserKnob {14 overscanPercent l "Overscan Percent" R 1 4} overscanPercent {{parent.safeBBoxPercent} {parent.safeBBoxPercent}} addUserKnob {20 inputBbox l "BBox Data" n 1} addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set N2f384f00 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set N2f384800 [stack 0] push $N2f384f00 Crop { box {{parent.inputBBox} {parent.inputBBox} {parent.inputBBox} {parent.inputBBox}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N2f384100 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set N2f357900 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{((input.bbox.r-input.bbox.x)/2)+input.bbox.x} {((input.bbox.t-input.bbox.y)/2)+input.bbox.y}} shutteroffset centred name Transform1 selected true xpos 120 ypos 553 } push $N2f357900 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $N2f384800 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $N2f384100 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N2f354100 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $N2f354100 NoOp { name OutputBBox1 xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group push $N2f386b00 Merge2 { inputs 2 bbox intersection also_merge all name Merge4 xpos 585 ypos -127 } push $N2f386b00 CopyBBox { inputs 2 name CopyBBox2 xpos 585 ypos -101 } push $N2f386b00 Switch { inputs 2 which {{"parent.safeBBox && ((BBoxResult.bbox.x < BBoxInput.bbox.x || BBoxResult.bbox.y < BBoxInput.bbox.y || BBoxResult.bbox.r > BBoxInput.bbox.r || BBoxResult.bbox.t > BBoxInput.bbox.t))"}} name Switch2 label "\[value which]" xpos 695 ypos -106 } Grade { channels all whitepoint 5 black_clamp false name AverageMult xpos 695 ypos -37 disable {{"output2 == 4 ? 0 : 1"}} } Merge2 { inputs 2 operation max also_merge all name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 695 ypos 10 disable {{"output2 == 4 && includeOriginal == 1 && AvgMaxOriginal == 1 ? 0 : 1"}} } Clamp { name Clamp1 selected true xpos 695 ypos 50 disable {{!parent.clamp}} } Blur { size {{postBlur} {postBlur}} name BlurOriginal label "\[value size]" xpos 695 ypos 102 } Invert { name Invert2 xpos 695 ypos 144 disable {{"parent.size < 0 ? 0 : 1"}} } push $N2f5f0800 Switch { inputs 2 which {{"parent.size == 0 ? 0 : 1"}} name Switch1 label "\[value which]" xpos 427 ypos 190 } Dot { name Dot17 label A note_font_size 41 xpos 34 ypos 455 } Dot { name Dot7 note_font_size 41 xpos 34 ypos 579 } set N2f305600 [stack 0] Dot { name Dot12 note_font_size 41 xpos -260 ypos 579 } Dot { name Dot13 note_font_size 41 xpos -260 ypos 799 } push $N2f5f3200 Input { inputs 0 name Inputmask xpos 512 ypos 322 number 1 } Dot { name Dot19 label Mask note_font_size 41 xpos 546 ypos 435 } set N2f4cf900 [stack 0] Dot { name Dot20 note_font_size 41 xpos 436 ypos 435 } push $N2f305600 Merge2 { inputs 2 bbox intersection Achannels {rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue rgba.alpha} output {rgba.red -rgba.green -rgba.blue rgba.alpha} name MergeIntersection xpos 402 ypos 572 disable {{"!\[exists parent.input1]"}} } Merge2 { inputs 2 Achannels {rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue rgba.alpha} output {rgba.red -rgba.green -rgba.blue rgba.alpha} name MergeUnion xpos 402 ypos 610 disable {{"!\[exists parent.input1]"}} } Dot { name Dot6 label "intersection\nof (Mask and A) + B" note_font_size 14 note_font_color 0xffffffff xpos 436 ypos 770 } push $N2f4cf900 Dot { name Dot10 note_font_size 41 xpos 546 ypos 672 } push $N2f305600 push $N2f5f2b00 Merge2 { inputs 2+1 operation copy Achannels none Bchannels none output none also_merge {{{parent.Remove1.channels}}} name MergeKeymix xpos 0 ypos 665 } Dot { name Dot14 note_font_size 41 xpos 34 ypos 747 } set N2f4cc800 [stack 0] push $N2f5f2b00 CopyBBox { inputs 2 name CopyBBoxUnion xpos -401 ypos 743 disable {{parent.bbox==0?0:1}} } CopyBBox { inputs 2 name CopyBBoxIntersection xpos -401 ypos 769 disable {{"parent.bbox==1 ? 0 : 1"}} } CopyBBox { inputs 2 name CopyBBoxA xpos -401 ypos 795 disable {{"parent.bbox==2 ? 0 : 1"}} } CopyBBox { inputs 2 name CopyBBoxB xpos -401 ypos 827 disable {{"parent.bbox==3 ? 0 : 1"}} } Crop { box {0 0 {parent.width} {parent.height}} crop false name CopyBBoxFormat xpos -401 ypos 853 disable {{"parent.bbox==4 ? 0 : 1"}} addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N2f4a2400 [stack 0] Transform { scale {{parent.adjustBBoxPercent} {parent.adjustBBoxPercent}} center {{((input.bbox.r-input.bbox.x)/2)+input.bbox.x} {((input.bbox.t-input.bbox.y)/2)+input.bbox.y}} black_outside false shutteroffset centred name TransformBBoxAdjustPercent xpos -516 ypos 898 } push $N2f4a2400 AdjBBox { numpixels {{parent.adjustBBoxPixels} {parent.adjustBBoxPixels}} name AdjBBoxPixels xpos -401 ypos 901 } Switch { inputs 2 which {{adjustBBoxExtra}} name Switch3 xpos -401 ypos 940 } Dot { name Dot9 note_font_size 41 xpos -367 ypos 993 } push $N2f4cc800 CopyBBox { inputs 2 name CopyBBox xpos 0 ypos 989 } BlackOutside { name BlackOutside1 xpos 0 ypos 1015 disable {{!parent.blackOutside}} } Output { name Output1 xpos 0 ypos 1155 } NoOp { inputs 0 name mergeNumber xpos 229 ypos -862 addUserKnob {20 User} addUserKnob {3 mergeNumber} mergeNumber {{"output2 == 0 ? 25 : output2 == 1 ? 24 : output2 == 2 ? 22 : output2 == 3 ? 13 : output2 == 4 ? 24 : output2 == 5 ? 17 : 18"}} } push $N2f386b00 NoOp { name BBoxResult xpos 585 ypos -230 addUserKnob {20 User} addUserKnob {15 bbox} bbox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} } end_group Dot { name Dot289 note_font_size 41 selected true xpos 411 ypos -1508 } Dot { name Dot290 label "Core\nMatte" note_font_size 60 selected true xpos -660 ypos -1508 } Dot { name Dot291 note_font_size 41 selected true xpos -770 ypos -1508 } set N2f47cf00 [stack 0] push $N60779600 Dot { name Dot67 selected true xpos -2648 ypos -3937 } Remove { operation keep channels rgb name Remove33 selected true xpos -2682 ypos -3816 } Dot { name Dot292 selected true xpos -2648 ypos -3454 } set N2f45b900 [stack 0] Group { name apDespill1 help "apDespill v2.0 by Adrian Pueyo\n\nGizmo to despill an image, with options to despill any hue (and not only the primaries), select different algorithms for de/respilling, and protect tones from the despill.\n\nIf you just want a basic despill, its default values should already be enough and the tool will avoid any extra calculations.\n\nv2 includes a new \"absolute\" mode which lets you basically perform a key, or do a \"despill to color\" operation. Also, the despill color, respill color and limit can now be plugged as image inputs if you wish, letting you perform a fully image-based despill or key, sort of iKeylight. Additionally, it allows you to perform the despill under a colorspace sandwich, for the artists who prefer to loop through different colorspaces in order to find one that works. Thanks to Tony Lyons the best feedback!\n\nadrianpueyo.com, 2014-2021" onCreate "n = nuke.thisNode()\nn\['tolerance'].setRange(0,2)\nn\['prot1_tolerance'].setFlag(0x00000004)\nn\['prot1_effect'].setFlag(0x00000004)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nkn = k.name()\nif kn == \"color\":\n kv = k.getValue()\n custom_weight_labels = \[\"green - blue\", \"red - blue\", \"red - green\", \" \"]\n n\[\"custom_weight\"].setLabel(custom_weight_labels\[int(kv)])\n n\[\"pick\"].setVisible(k.getValue() == 3)\nelif kn == \"mode\":\n n\[\"custom_weight\"].setVisible(n\[\"mode\"].getValue()==3)\nelif kn in \[\"out\",\"output_alpha\"]:\n n\[\"respill_math\"].setEnabled(n\[\"out\"].getValue()==0 or n\[\"output_alpha\"].getValue()==1)\n n\[\"respill_color\"].setEnabled(n\[\"out\"].getValue()==0)\n n\[\"inverted_spill_matte\"].setEnabled(n\[\"output_alpha\"].value())\nelif kn == \"prot1_activate\":\n protA = n\[\"prot1_activate\"].value()\n n\[\"prot1_preview\"].setEnabled(protA)\n for i in \[\"prot1\", \"prot1_tolerance\", \"prot1_falloff\",\"prot1_effect\"]:\n n\[i].setVisible(protA)\nelif kn == \"inputChange\":\n n.knobs()\[\"limit_channel\"].setVisible(n.input(3) is not None)\n n.knobs()\[\"invert_limit_channel\"].setVisible(n.input(3) is not None)\n color_enabled = nuke.toNode(\"apDespillKernel\")\[\"apDespillKernel_use_color_input\"].getValue()==0\n n\[\"color\"].setEnabled(color_enabled)\n n.knobs()\[\"pick\"].setEnabled(color_enabled)\n n\[\"info_using_input_color\"].setVisible(not color_enabled)\nelif kn == \"colorspace_shift\":\n kv = k.value()\n for i in \[\"colorspace_out\", \"illuminant_out\", \"primary_out\"]:\n n.knobs()\[i].setEnabled(kv)\n for i in \[\"colorspace_in\", \"illuminant_in\", \"primary_in\"]:\n n.knobs()\[i].setEnabled(kv and n\[\"input_colorspace\"].value())\n n\[\"input_colorspace\"].setEnabled(kv)\nelif kn == \"input_colorspace\":\n kv = k.value()\n for i in \[\"colorspace_in\", \"illuminant_in\", \"primary_in\"]:\n n.knobs()\[i].setVisible(kv)\n n.knobs()\[i].setEnabled(kv)\nelif kn == \"imagebased\":\n kv = k.value()\n input_names = \[\"color\",\"limit\",\"respill\"]\n if kv:\n for i_name in input_names:\n i_fullname = \"Input\"+i_name\n if not nuke.exists(i_fullname):\n i_node = nuke.nodes.Input()\n i_node\[\"name\"].setValue(i_fullname)\n else:\n i_node = nuke.toNode(i_fullname)\n dot = nuke.toNode(\"Dot\"+i_name)\n i_node.setXYpos(dot.xpos(),dot.ypos()-40)\n dot.setInput(0,i_node)\n else:\n # If something connected, do nothing\n if not any(\[n.input(i) for i in \[2,3,4]]):\n for i_name in input_names:\n if nuke.exists(\"Input\"+i_name):\n nuke.delete(nuke.toNode(\"Input\"+i_name))\n else:\n k.setValue(True)" tile_color 0x8b8b8bff selected true xpos -2682 ypos -3265 addUserKnob {20 apDespill} addUserKnob {6 pick_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 imagebased l image-based t "Show or hide image-based inputs.\n\nThis doesn't change anything internally except hiding inputs, just to avoid intimidating arrows on the node graph.\n\nNote: While any image-based input is connected, this won't let you hide them." +STARTLINE} addUserKnob {6 absolute_mode l "absolute mode" t "Absolute mode performs a keying algorithm instead of a regular despill, so that you can do a \"spill to colour\" or even use this node as an image-based Keylight." -STARTLINE} addUserKnob {26 ""} addUserKnob {4 color t "Select a primary as a starting point, or custom to show RGB controls to select any color.\n\nNote: If an image is plugged on the color input, this will get overwritten by the input." M {red green blue custom "" "" ""}} color custom addUserKnob {26 info_using_input_color l " " -STARTLINE +HIDDEN T " (Using color from input)"} addUserKnob {18 pick t "Pick the color you'd like to use for the despill. \n\nPlease use ctrl/cmd+alt+click for picking.\n\nNOTE: If a despill color image input is plugged, this value will be ignored."} pick {0 0 1} addUserKnob {6 pick_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 pick_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 dfg_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {4 out l output t "Quick switch to output the despilled image or the substracted one." M {despill spill}} addUserKnob {6 output_alpha l "output spill matte in alpha" t "Output the spill luminance in the alpha channel." +STARTLINE} output_alpha true addUserKnob {6 inverted_spill_matte l inverted t "Invert the output spill matte (in the alpha channel), especially useful when the despill is set to Absolute mode, in which case this will output a keying-like alpha." -STARTLINE} inverted_spill_matte true addUserKnob {4 mode l "despill math" t "average = avg of other two channels\nmaximum = max of other two channels\nminimum = min of other two channels\ncustom = select custom weights" M {average maximum minimum custom ""}} addUserKnob {7 custom_weight l " " t "-1 = only capped by the first channel\n0 = capped by avg of both\n1 = only capped by the second channel" -STARTLINE +HIDDEN R -1 1} addUserKnob {26 ""} addUserKnob {6 colorspace_shift l "alt colorspace" t "This allows for the popular artistic approach to refining the despill where you browse through colorspace conversions (mainly white point and primaries) and choose one that matches your desired despill bias.\n\nTip: Double click on a dropdown and use the Page Up and Page Down keys on your keyboard to browse quickly through the items.\n\nNote: There's no need at all for the values of these dropdowns to match your working colorspace, so you can leave it as-is or tweak it if you prefer, regardless of the colorspace you're comping at (e.g. ACEScg). It is literally an artistic conversion prior to the despill algorithm that then gets reverted." +STARTLINE} colorspace_shift true addUserKnob {6 input_colorspace l "input colorspace" t "Also tweak the input colorspace for the back and forth colorspace conversion. This is generally not needed however, as this colorspace conversion is generally only used for artistic purposes." -STARTLINE} addUserKnob {6 log_space l log t "Perform Lin2Log -> Despill -> Log2Lin." -STARTLINE} addUserKnob {41 colorspace_in l "in colorspace" +DISABLED +HIDDEN T Colorspace1.colorspace_in} addUserKnob {41 illuminant_in l "" -STARTLINE +DISABLED +HIDDEN T Colorspace1.illuminant_in} addUserKnob {41 primary_in l "" -STARTLINE +DISABLED +HIDDEN T Colorspace1.primary_in} addUserKnob {41 colorspace_out l "despill space" T Colorspace1.colorspace_out} addUserKnob {41 illuminant_out l "" -STARTLINE T Colorspace1.illuminant_out} addUserKnob {41 primary_out l "" -STARTLINE T Colorspace1.primary_out} addUserKnob {26 ""} addUserKnob {7 hue_offset l "hue offset" t "Rotate the despill vectors to despill an arbitrary tone other than the primaries or the picked color.\nNote: A rotation of +-120 degrees is the same as selecting a different color channel." R -30 30} addUserKnob {7 tolerance l limit t "Use this to multiply the hue tolerance (the limiter value). You can move it all the way down to 0 to completely remove a hue from your image.\n\nNOTE: If an image is plugged into the limit input, this will act as a multiplier." R 0 2} tolerance 1 addUserKnob {41 limit_channel l "limit channel" +HIDDEN T CopyLimit.from0} addUserKnob {6 invert_limit_channel l invert t "The recommended workflow for the image-based limit is keeping this invert turned on, so that the higher the value of the limit channel, the lower the limit gets." -STARTLINE +HIDDEN} invert_limit_channel true addUserKnob {6 prot1_activate l "protect tones" t "Enable controls to select tones to protect from despilling." +STARTLINE} addUserKnob {6 prot1_preview l preview t "Output the protected tones." -STARTLINE +DISABLED} addUserKnob {18 prot1 l protect t "Pick the central hue to protect.\n(ctrl/cmd+alt+click)" +HIDDEN} prot1 {0 0 0} addUserKnob {6 prot1_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 prot1_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 prot1_tolerance l tolerance t "Amount of hues to include in the selection." +HIDDEN} prot1_tolerance 0.2 addUserKnob {7 prot1_falloff l falloff t "Falloff for the hue selection. A higher falloff will make hues apart from the picked one lose weight more quickly." +HIDDEN R 0 4} prot1_falloff 2 addUserKnob {7 prot1_effect l effect t "Multiplier for the hue protection, and for the spill limit value." +HIDDEN R 0 10} prot1_effect 1 addUserKnob {26 respill_divider l "" +STARTLINE} addUserKnob {4 respill_math l "spill math" t "Settings for the math for desaturating the the spill before adding it back." M {"Rec 709" "Ccir 601" "Rec 2020" Average Maximum "" "" "" "" ""}} addUserKnob {18 respill_color l "respill color" t "RGB multiplier for the desaturated spill when adding it back.\n\nIf used on non-degrained plates (which should be avoided anyway), any value other than 1 here will most likely produce grain artifacts.\n\nNOTE: If a respill image input is plugged, this value will act as a multiplier." R 0 4} respill_color 1 addUserKnob {6 respill_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 respill_color_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask T Merge.maskChannelMask} addUserKnob {41 inject -STARTLINE T Merge.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge.fringe} addUserKnob {41 mix T Merge.mix} addUserKnob {26 version_author l "" t "apDespill v2.0\n13 April, 2021" +STARTLINE T "
    apDespill v2.0 - adrianpueyo.com, 2014-2021
    "} } Input { inputs 0 name Inputmask xpos 273 ypos -370 number 1 } Dot { name Dot1 note_font_size 41 xpos 307 ypos -267 } set N54f5e400 [stack 0] Dot { name Dot5 note_font_size 41 xpos 307 ypos -237 } Dot { inputs 0 name Dotrespill label Dotrespill note_font "Verdana Bold" xpos 1190 ypos -525 } AddChannels { channels rgba format_size true name AddRGBA_spill xpos 1156 ypos -442 } Dot { inputs 0 name Dotcolor label Dotcolor note_font "Verdana Bold" xpos 1080 ypos -593 } AddChannels { channels rgba format_size true name AddRGBA_color xpos 1046 ypos -499 } Dot { inputs 0 name Dotlimit label Dotlimit note_font "Verdana Bold" xpos 936 ypos -732 } Shuffle { red black green black blue black alpha black name Shuffle_limit label "\[value in]" xpos 902 ypos -670 } Input { inputs 0 name Inputimage xpos 449 ypos -761 } set N54f59d00 [stack 0] Dot { name Dot2 note_font_size 41 xpos 788 ypos -758 } Shuffle { alpha black name Shuffle xpos 754 ypos -694 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name CopyLimit xpos 754 ypos -670 } Invert { channels alpha name InvertLimit xpos 754 ypos -611 disable {{!invert_limit_channel}} } Colorspace { name Colorspace1 label "\[value colorspace_in] >> \[value colorspace_out]" xpos 754 ypos -544 disable {{!parent.colorspace_shift}} } Log2Lin { operation lin2log name Log2Lin1 xpos 754 ypos -508 disable {{!log_space}} } BlinkScript { inputs 3 recompileCount 94 ProgramGroup 1 KernelDescription "2 \"apDespillKernel\" iterate pixelWise 857ee5211c9dc340b8743026c9778403c1424a4ec1afa5c7990e55b71f93720c 4 \"src\" Read Point \"color_src\" Read Point \"spill_src\" Read Point \"dst\" Write Point 21 \"limit\" Float 1 AACAPw== \"shift\" Float 1 AAAAAA== \"weights\" Float 1 AAAAAA== \"outmode\" Int 1 AAAAAA== \"output_alpha\" Int 1 AAAAAA== \"output_alpha_inverted\" Int 1 AAAAAA== \"clr\" Int 1 AAAAAA== \"mode\" Int 1 AAAAAA== \"respill_math\" Int 1 AAAAAA== \"respill_color\" Float 4 AAAAAAAAAAAAAAAAAAAAAA== \"prot1_on\" Int 1 AAAAAA== \"prot1_preview\" Int 1 AAAAAA== \"prot1\" Float 3 AAAAAAAAAAAAAAAAAAAAAA== \"prot1_tolerance\" Float 1 AAAAAA== \"prot1_mult\" Float 1 AAAAAA== \"prot1_falloff\" Float 1 AAAAAA== \"pickSpill\" Float 3 AAAAAAAAAAAAAAAAAAAAAA== \"despill_method\" Int 1 AAAAAA== \"use_color_input\" Int 1 AAAAAA== \"use_spill_input\" Int 1 AAAAAA== \"use_limit_input\" Int 1 AAAAAA== 21 \"limit\" 1 1 \"shift\" 1 1 \"weights\" 1 1 \"outmode\" 1 1 \"output_alpha\" 1 1 \"output_alpha_inverted\" 1 1 \"clr\" 1 1 \"mode\" 1 1 \"respill_math\" 1 1 \"respill_color\" 4 1 \"prot1_on\" 1 1 \"prot1_preview\" 1 1 \"prot1\" 3 1 \"prot1_tolerance\" 1 1 \"prot1_mult\" 1 1 \"prot1_falloff\" 1 1 \"pickSpill\" 3 1 \"despill_method\" 1 1 \"use_color_input\" 1 1 \"use_spill_input\" 1 1 \"use_limit_input\" 1 1 7 \"_usePicked\" Int 1 1 AAAAAA== \"_clr\" Int 1 1 AAAAAA== \"_ret\" Int 1 1 AAAAAA== \"_hueShift\" Float 1 1 AAAAAA== \"_autoShift\" Float 1 1 AAAAAA== \"despillColor\" Float 3 1 AAAAAAAAAAAAAAAAAAAAAA== \"vNorm\" Float 3 1 AAAAAAAAAAAAAAAAAAAAAA==" kernelSource "//---------------------------------------------------------\n// apDespillKernel - apDespill v1.0 by Adrian Pueyo\n//\n// Despill an image, with options to despill any hue (and\n// not only the primaries), select different algorithms for\n// des/respilling, and protect tones from the despill.\n//\n// v2.0: Ability to plug image inputs for the controls,\n// and to perform a full key and respill.\n//\n// adrianpueyo.com, 2014-2017\n// ---------------------------------------------------------\n\ninline float y_convert_ccir601(const float4 in)\{\n return in.x * 0.299f + in.y * 0.587f + in.z * 0.114f;\n\}\n\ninline float y_convert_rec709(const float4 in)\{\n return in.x * 0.2125f + in.y * 0.7154f + in.z * 0.0721f;\n\}\n\ninline float y_convert_rec2020(const float4 in)\{\n return in.x * 0.2627f + in.y * 0.678f + in.z * 0.0593f;\n\}\n\ninline float4 hueRotate(const float4 in, const float H)\{\n if(H==0.0f)\{\n return in;\n \}else\{\n float cosH = cos(H*PI/180);\n float sinH = sin(H*PI/180);\n float3 ret;\n ret.x = (in.x+in.y+in.z)*(1-cosH)/3 + in.x*cosH + (-in.y/sqrt(3.0f)+in.z/sqrt(3.0f))*sinH;\n ret.y = (in.x+in.y+in.z)*(1-cosH)/3 + in.y*cosH + (in.x/sqrt(3.0f)-in.z/sqrt(3.0f))*sinH;\n ret.z = (in.x+in.y+in.z)*(1-cosH)/3 + in.z*cosH + (-in.x/sqrt(3.0f)+in.y/sqrt(3.0f))*sinH;\n return float4(ret.x,ret.y,ret.z,in\[3]);\n \}\n\}\n\nfloat3 vecToPlane(float3 v1, float3 v2 = float3(1.0f,1.0f,1.0f))\{\n float3 v1onv2;\n v1onv2 = v2 * float((float(dot(v2,v1))/float(dot(v2,v2)))); //Projection of vector on another (plane's normal)\n return v1-v1onv2; //Projection of vector on plane\n\}\n\ninline float3 myCross(float3 a, float3 b)\{\n return float3(float(a.y*b.z-a.z*b.y),float(a.z*b.x-a.x*b.z),float(a.x*b.y-a.y*b.x));\n\}\n\ninline float colorAngle(const float3 v1, const float3 v2)\{\n const float3 vN=float3(1.0f,1.0f,1.0f);\n float ang = acos(float(dot(v1,v2))/float(sqrt(dot(v1,v1)*dot(v2,v2))));\n float3 crs = myCross(v1,v2);\n if (dot(vN, crs) > 0) \{\n ang = -ang;\n \}\n return ang;\n\}\n\n//Main function to calculate the despill for a float4 colour. If prot1_preview is True, returns the prot1 result instead.\ninline float4 apDespillMain(float4 src_color, float hueShift, int clr, int mode, float limit, float weights, int prot1_preview, int prot1_on, float3 prot1, float prot1_tolerance, float prot1_mult, float prot1_falloff)\{\n //1. HueRotate IN\n float4 despilled = hueRotate(src_color, hueShift);\n\n //2. Calculate the limit\n float resultLimit = 0.0f;\n int2 others;\n if(clr==0)\{//If red (and if _usePicked, also set red)\n others = int2(1,2);\n \}else if(clr==1)\{\n others=int2(0,2);\n \}else if(clr==2)\{\n others=int2(0,1);\n \}\n\n if(mode==0)\{//average\n resultLimit = (despilled\[others\[0]]+despilled\[others\[1]])/2;\n \}else if(mode==1)\{//max\n resultLimit = max(despilled\[others\[0]],despilled\[others\[1]]);\n \}else if(mode==2)\{//min\n resultLimit = min(despilled\[others\[0]],despilled\[others\[1]]);\n \}else\{//custom\n resultLimit = despilled\[others\[0]]*weights+despilled\[others\[1]]*(1-weights);\n \}\n\n //3. Protect tones\n float prot1_result;\n if(prot1_on==1&&(prot1\[0]!=prot1\[1]||prot1\[0]!=prot1\[2]||prot1\[1]!=prot1\[2]))\{\n float cos_prot1_angle;\n cos_prot1_angle = (src_color\[0]*prot1\[0]+src_color\[1]*prot1\[1]+src_color\[2]*prot1\[2]) / (sqrt(prot1\[0]*prot1\[0]+prot1\[1]*prot1\[1]+prot1\[2]*prot1\[2]) * sqrt(src_color\[0]*src_color\[0]+src_color\[1]*src_color\[1]+src_color\[2]*src_color\[2]));\n prot1_result = pow(clamp(cos_prot1_angle,0.0f,1.0f),1/pow(prot1_tolerance,prot1_falloff));\n resultLimit = resultLimit*(1+prot1_result*prot1_mult);\n \}\n\n //4. Calculate the despill and HueRotate OUT\n for (int component = 0; component < 3; component++)\{\n despilled\[component] = component==clr?min(despilled\[component],resultLimit*limit):despilled\[component];\n \}\n despilled = hueRotate(despilled,-hueShift);\n despilled\[3] = prot1_result;\n return despilled;\n\}\n\ninline float getLuma(float4 src_color, int luma_math)\{\n float luma;\n if(luma_math==0)\{\n luma = y_convert_rec709(src_color);\n \}else if(luma_math==1)\{\n luma = y_convert_ccir601(src_color);\n \}else if(luma_math==2)\{\n luma = y_convert_rec2020(src_color); \n \}else if(luma_math==3)\{\n luma = (src_color\[0]+src_color\[1]+src_color\[2])/3;\n \}else\{\n luma = max(max(src_color\[0],src_color\[1]),src_color\[2]);\n \}\n return luma;\n\}\n\nkernel apDespillKernel : ImageComputationKernel\n\{\n Image src;\n Image color_src;\n Image spill_src; //Acts as a multiplier for the respill color\n Image dst;\n\n param:\n float limit;\n float shift;\n float weights;\n int outmode;//0=despill,1=spill\n int output_alpha;\n int output_alpha_inverted;\n int clr; //0=red,1=green,2=blue\n int mode; //0=average,1=maximum,2=minimum,3=custom\n int respill_math; //0=Rec709,1=Ccir601,2=Avg,3=Max\n float4 respill_color;\n int prot1_on;\n int prot1_preview;\n float3 prot1;\n float prot1_tolerance;\n float prot1_mult;\n float prot1_falloff;\n float3 pickSpill;\n int despill_method; //0=despill,1=key/\"absolute\"\n\n int use_color_input;\n int use_spill_input;\n int use_limit_input; //Should be shuffled in the src's alpha\n\n local:\n int _usePicked;\n int _clr;\n int _ret;\n float _hueShift;\n float _autoShift;\n float3 despillColor;\n float3 vNorm;\n\n void define() \{\n defineParam(limit, \"limit\", 1.0f);\n defineParam(shift, \"shift\", 0.0f);\n \}\n\n void init() \{\n //1. Calculate which color to affect\n _ret = 0;\n if(use_color_input==1)\{\n _clr = 0;\n _usePicked = 1;\n \}else if(clr!=3)\{//red green or blue\n _usePicked = 0;\n _clr = clr;\n \}else if(pickSpill.x==pickSpill.y && pickSpill.x==pickSpill.z)\{\n _ret = 1;//if \"custom\" selected but has a gray value, avoid any calculations\n \}else\{\n _usePicked = 1;\n _clr = 0;\n \}\n vNorm = float3(1.0f,1.0f,1.0f);\n if(use_color_input==0)\{\n //2. Calculate the necessary hue shift\n _autoShift = 0.0f;\n if(_usePicked==1)\{\n _autoShift = colorAngle(vecToPlane(pickSpill,vNorm),vecToPlane(float3(1.0f,0.0f,0.0f),vNorm));\n _autoShift = _autoShift*180/PI;//to deg\n \}\n _hueShift = shift-_autoShift;\n \}\n \}\n\n void process()\{\n if(_ret == 1)\{ dst()=src(); return; \} //Avoid any calculations if no despill selected\n\n //0. If color from input, calculate the necessary hue shift\n float hueShift = 0.0f, autoShift = 0.0f;\n float3 despillColor;\n if(use_color_input==1)\{\n despillColor = float3(color_src(0),color_src(1),color_src(2));\n autoShift = colorAngle(vecToPlane(despillColor,vNorm),vecToPlane(float3(1.0f,0.0f,0.0f),vNorm));\n autoShift = autoShift*180/PI;//to deg\n hueShift = shift-autoShift;\n \}else\{\n if(_usePicked == 1)\{\n despillColor = pickSpill;\n \}else\{\n despillColor = float3(_clr==0?1.0f:0.0f,_clr==1?1.0f:0.0f,_clr==2?1.0f:0.0f);\n \}\n \n hueShift = _hueShift;\n \}\n\n float limit_result = use_limit_input==1?limit*src(3):limit;\n\n //1. Despill the source image\n float4 despilled = apDespillMain(src(), hueShift, _clr, mode, limit_result, weights, prot1_preview, prot1_on, prot1, prot1_tolerance, prot1_mult, prot1_falloff);\n if(prot1_preview==1 && prot1_on==1)\{\n dst() = src()*clamp(despilled\[3]*prot1_mult,0.0f,1.0f);\n return;\n \}\n float4 spill = src()-despilled;\n float spill_luma = getLuma(spill, respill_math);\n\n //2. Process the key if key method selected\n float4 result;\n float4 despilled_full, spill_full; //Will account for the key if method selected is key\n float spill_luma_full;\n if(despill_method==0)\{\n //Despill Method = Despill\n despilled_full = despilled;\n spill_full = spill;\n spill_luma_full = spill_luma;\n \}else\{\n //Despill Method = Key\n float4 despillColor4 = float4(despillColor.x,despillColor.y,despillColor.z,1.0f); //For simplicity\n\n //2.1. Despill the picked despill colour itself, for normalizing the spill\n float4 pickSpill_despilled = apDespillMain(despillColor4, hueShift, _clr, mode, limit_result, weights, prot1_preview, prot1_on, prot1, prot1_tolerance, prot1_mult, prot1_falloff);\n float4 pickSpill_spill = despillColor4-pickSpill_despilled;\n float pickSpill_spill_luma = getLuma(pickSpill_spill, respill_math);\n\n spill_luma_full = pickSpill_spill_luma == 0? 0:spill_luma/pickSpill_spill_luma;\n spill_full = despillColor4*spill_luma_full;\n despilled_full = src()-spill_full;\n \}\n\n\n float4 respill_color_result = use_spill_input==1?spill_src()*respill_color:respill_color;\n //3. Output\n if(outmode==0)\{ //Despill\n result = despilled_full+spill_luma_full*respill_color_result;\n \}else\{ //Spill\n result = spill_full;\n \}\n\n if(output_alpha==0)\{\n result\[3]=src(3);\n \}else\{\n if(output_alpha_inverted == 0)\{\n result\[3]=spill_luma_full;\n \}else\{\n result\[3]=1-spill_luma_full;\n \}\n \}\n\n dst() = result;\n\n \}\n\};" useGPUIfAvailable false vectorize false rebuild "" apDespillKernel_limit {{parent.tolerance}} apDespillKernel_shift {{parent.hue_offset}} apDespillKernel_weights {{(parent.custom_weight+1)/2}} apDespillKernel_outmode {{parent.out}} apDespillKernel_output_alpha {{parent.output_alpha}} apDespillKernel_output_alpha_inverted {{parent.inverted_spill_matte}} apDespillKernel_clr {{parent.color}} apDespillKernel_mode {{parent.mode}} apDespillKernel_respill_math {{parent.respill_math}} apDespillKernel_respill_color {{parent.respill_color.r} {parent.respill_color.g} {parent.respill_color.b} 1} apDespillKernel_prot1_on {{parent.prot1_activate}} apDespillKernel_prot1_preview {{parent.prot1_preview}} apDespillKernel_prot1 {{parent.prot1} {parent.prot1} {parent.prot1}} apDespillKernel_prot1_tolerance {{parent.prot1_tolerance}} apDespillKernel_prot1_mult {{parent.prot1_effect}} apDespillKernel_prot1_falloff {{parent.prot1_falloff}} apDespillKernel_pickSpill {{parent.pick} {parent.pick} {parent.pick}} apDespillKernel_despill_method {{parent.absolute_mode}} apDespillKernel_use_color_input {{"\[\nif \{ \[lsearch -exact \[channels \[input this 1].input] rgba.red] >= 0\} \{\n return 1\n\} else \{\n return 0\n\}\n]"}} apDespillKernel_use_spill_input {{"\[\nif \{ \[lsearch -exact \[channels \[input this 2].input] rgba.red] >= 0\} \{\n return 1\n\} else \{\n return 0\n\}\n]"}} apDespillKernel_use_limit_input {{"\[exists parent.input3]"}} rebuild_finalise "" name apDespillKernel xpos 754 ypos -448 } Log2Lin { name Log2Lin2 xpos 754 ypos -378 disable {{!log_space}} } Colorspace { channels {{{parent.Colorspace5.channels}}} colorspace_in {{parent.Colorspace1.colorspace_out}} illuminant_in {{parent.Colorspace1.illuminant_out}} primary_in {{parent.Colorspace1.primary_out}} colorspace_out {{parent.Colorspace1.colorspace_in}} illuminant_out {{parent.Colorspace1.illuminant_in}} primary_out {{parent.Colorspace1.primary_in}} name Colorspace2 label "\[value colorspace_in] >> \[value colorspace_out]" xpos 754 ypos -354 disable {{!parent.colorspace_shift}} } Dot { name Dot3 note_font_size 41 xpos 788 ypos -267 } set N16345d00 [stack 0] Dot { name Dot4 note_font_size 41 xpos 788 ypos -237 } push $N54f5e400 push $N16345d00 push $N54f59d00 Merge2 { inputs 2+1 operation copy bbox B Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge xpos 449 ypos -270 } Copy { inputs 2+1 from0 rgba.alpha to0 rgba.alpha bbox B maskChannelMask {{{parent.Merge.maskChannelMask}}} maskChannelInput {{{parent.Merge.maskChannelInput}}} inject {{parent.Merge.inject}} invert_mask {{parent.Merge.invert_mask}} fringe {{parent.Merge.fringe}} name CopyAlpha xpos 449 ypos -246 disable {{!parent.output_alpha}} } Output { name Output xpos 449 ypos -166 } end_group Dot { name Dot294 selected true xpos -2648 ypos -3023 } set N2f425600 [stack 0] push $N2f45b900 Dot { name Dot293 selected true xpos -2066 ypos -3454 } Merge2 { inputs 2 operation from name Merge13 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos -2100 ypos -3027 } Saturation { saturation 0 name Saturation1 selected true xpos -2100 ypos -2976 } Dot { name Dot295 selected true xpos -2066 ypos -2885 } Dot { name Dot296 label "Restore Lum" note_font_size 41 selected true xpos -2521 ypos -2885 } push $N2f425600 Merge2 { inputs 2 operation plus output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge6 selected true xpos -2682 ypos -2889 } Dot { name Dot297 label "core \ndespill" note_font_size 60 selected true xpos -2648 ypos -2529 } Dot { name Dot298 selected true xpos -2648 ypos -1508 } Dot { name Dot299 label "core \ndespill" note_font_size 60 selected true xpos -1299 ypos -1508 } push $N2f47cf00 Dot { name Dot300 note_font_size 41 selected true xpos -770 ypos -1627 } push $N60779600 Remove { operation keep channels rgb name Remove34 selected true xpos -1034 ypos -3816 } Dot { name Dot301 selected true xpos -1000 ypos -3467 } set N2f3f4100 [stack 0] Group { name apDespill help "apDespill v2.0 by Adrian Pueyo\n\nGizmo to despill an image, with options to despill any hue (and not only the primaries), select different algorithms for de/respilling, and protect tones from the despill.\n\nIf you just want a basic despill, its default values should already be enough and the tool will avoid any extra calculations.\n\nv2 includes a new \"absolute\" mode which lets you basically perform a key, or do a \"despill to color\" operation. Also, the despill color, respill color and limit can now be plugged as image inputs if you wish, letting you perform a fully image-based despill or key, sort of iKeylight. Additionally, it allows you to perform the despill under a colorspace sandwich, for the artists who prefer to loop through different colorspaces in order to find one that works. Thanks to Tony Lyons the best feedback!\n\nadrianpueyo.com, 2014-2021" onCreate "n = nuke.thisNode()\nn\['tolerance'].setRange(0,2)\nn\['prot1_tolerance'].setFlag(0x00000004)\nn\['prot1_effect'].setFlag(0x00000004)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nkn = k.name()\nif kn == \"color\":\n kv = k.getValue()\n custom_weight_labels = \[\"green - blue\", \"red - blue\", \"red - green\", \" \"]\n n\[\"custom_weight\"].setLabel(custom_weight_labels\[int(kv)])\n n\[\"pick\"].setVisible(k.getValue() == 3)\nelif kn == \"mode\":\n n\[\"custom_weight\"].setVisible(n\[\"mode\"].getValue()==3)\nelif kn in \[\"out\",\"output_alpha\"]:\n n\[\"respill_math\"].setEnabled(n\[\"out\"].getValue()==0 or n\[\"output_alpha\"].getValue()==1)\n n\[\"respill_color\"].setEnabled(n\[\"out\"].getValue()==0)\n n\[\"inverted_spill_matte\"].setEnabled(n\[\"output_alpha\"].value())\nelif kn == \"prot1_activate\":\n protA = n\[\"prot1_activate\"].value()\n n\[\"prot1_preview\"].setEnabled(protA)\n for i in \[\"prot1\", \"prot1_tolerance\", \"prot1_falloff\",\"prot1_effect\"]:\n n\[i].setVisible(protA)\nelif kn == \"inputChange\":\n n.knobs()\[\"limit_channel\"].setVisible(n.input(3) is not None)\n n.knobs()\[\"invert_limit_channel\"].setVisible(n.input(3) is not None)\n color_enabled = nuke.toNode(\"apDespillKernel\")\[\"apDespillKernel_use_color_input\"].getValue()==0\n n\[\"color\"].setEnabled(color_enabled)\n n.knobs()\[\"pick\"].setEnabled(color_enabled)\n n\[\"info_using_input_color\"].setVisible(not color_enabled)\nelif kn == \"colorspace_shift\":\n kv = k.value()\n for i in \[\"colorspace_out\", \"illuminant_out\", \"primary_out\"]:\n n.knobs()\[i].setEnabled(kv)\n for i in \[\"colorspace_in\", \"illuminant_in\", \"primary_in\"]:\n n.knobs()\[i].setEnabled(kv and n\[\"input_colorspace\"].value())\n n\[\"input_colorspace\"].setEnabled(kv)\nelif kn == \"input_colorspace\":\n kv = k.value()\n for i in \[\"colorspace_in\", \"illuminant_in\", \"primary_in\"]:\n n.knobs()\[i].setVisible(kv)\n n.knobs()\[i].setEnabled(kv)\nelif kn == \"imagebased\":\n kv = k.value()\n input_names = \[\"color\",\"limit\",\"respill\"]\n if kv:\n for i_name in input_names:\n i_fullname = \"Input\"+i_name\n if not nuke.exists(i_fullname):\n i_node = nuke.nodes.Input()\n i_node\[\"name\"].setValue(i_fullname)\n else:\n i_node = nuke.toNode(i_fullname)\n dot = nuke.toNode(\"Dot\"+i_name)\n i_node.setXYpos(dot.xpos(),dot.ypos()-40)\n dot.setInput(0,i_node)\n else:\n # If something connected, do nothing\n if not any(\[n.input(i) for i in \[2,3,4]]):\n for i_name in input_names:\n if nuke.exists(\"Input\"+i_name):\n nuke.delete(nuke.toNode(\"Input\"+i_name))\n else:\n k.setValue(True)" tile_color 0x8b8b8bff selected true xpos -1034 ypos -3272 addUserKnob {20 apDespill} addUserKnob {6 pick_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 imagebased l image-based t "Show or hide image-based inputs.\n\nThis doesn't change anything internally except hiding inputs, just to avoid intimidating arrows on the node graph.\n\nNote: While any image-based input is connected, this won't let you hide them." +STARTLINE} addUserKnob {6 absolute_mode l "absolute mode" t "Absolute mode performs a keying algorithm instead of a regular despill, so that you can do a \"spill to colour\" or even use this node as an image-based Keylight." -STARTLINE} addUserKnob {26 ""} addUserKnob {4 color t "Select a primary as a starting point, or custom to show RGB controls to select any color.\n\nNote: If an image is plugged on the color input, this will get overwritten by the input." M {red green blue custom "" "" ""}} color custom addUserKnob {26 info_using_input_color l " " -STARTLINE +HIDDEN T " (Using color from input)"} addUserKnob {18 pick t "Pick the color you'd like to use for the despill. \n\nPlease use ctrl/cmd+alt+click for picking.\n\nNOTE: If a despill color image input is plugged, this value will be ignored."} pick {0 0 1} addUserKnob {6 pick_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 pick_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 dfg_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {4 out l output t "Quick switch to output the despilled image or the substracted one." M {despill spill}} addUserKnob {6 output_alpha l "output spill matte in alpha" t "Output the spill luminance in the alpha channel." +STARTLINE} output_alpha true addUserKnob {6 inverted_spill_matte l inverted t "Invert the output spill matte (in the alpha channel), especially useful when the despill is set to Absolute mode, in which case this will output a keying-like alpha." -STARTLINE} inverted_spill_matte true addUserKnob {4 mode l "despill math" t "average = avg of other two channels\nmaximum = max of other two channels\nminimum = min of other two channels\ncustom = select custom weights" M {average maximum minimum custom ""}} addUserKnob {7 custom_weight l " " t "-1 = only capped by the first channel\n0 = capped by avg of both\n1 = only capped by the second channel" -STARTLINE +HIDDEN R -1 1} addUserKnob {26 ""} addUserKnob {6 colorspace_shift l "alt colorspace" t "This allows for the popular artistic approach to refining the despill where you browse through colorspace conversions (mainly white point and primaries) and choose one that matches your desired despill bias.\n\nTip: Double click on a dropdown and use the Page Up and Page Down keys on your keyboard to browse quickly through the items.\n\nNote: There's no need at all for the values of these dropdowns to match your working colorspace, so you can leave it as-is or tweak it if you prefer, regardless of the colorspace you're comping at (e.g. ACEScg). It is literally an artistic conversion prior to the despill algorithm that then gets reverted." +STARTLINE} colorspace_shift true addUserKnob {6 input_colorspace l "input colorspace" t "Also tweak the input colorspace for the back and forth colorspace conversion. This is generally not needed however, as this colorspace conversion is generally only used for artistic purposes." -STARTLINE} addUserKnob {6 log_space l log t "Perform Lin2Log -> Despill -> Log2Lin." -STARTLINE} addUserKnob {41 colorspace_in l "in colorspace" +DISABLED +HIDDEN T Colorspace1.colorspace_in} addUserKnob {41 illuminant_in l "" -STARTLINE +DISABLED +HIDDEN T Colorspace1.illuminant_in} addUserKnob {41 primary_in l "" -STARTLINE +DISABLED +HIDDEN T Colorspace1.primary_in} addUserKnob {41 colorspace_out l "despill space" T Colorspace1.colorspace_out} addUserKnob {41 illuminant_out l "" -STARTLINE T Colorspace1.illuminant_out} addUserKnob {41 primary_out l "" -STARTLINE T Colorspace1.primary_out} addUserKnob {26 ""} addUserKnob {7 hue_offset l "hue offset" t "Rotate the despill vectors to despill an arbitrary tone other than the primaries or the picked color.\nNote: A rotation of +-120 degrees is the same as selecting a different color channel." R -30 30} addUserKnob {7 tolerance l limit t "Use this to multiply the hue tolerance (the limiter value). You can move it all the way down to 0 to completely remove a hue from your image.\n\nNOTE: If an image is plugged into the limit input, this will act as a multiplier." R 0 2} tolerance 1 addUserKnob {41 limit_channel l "limit channel" +HIDDEN T CopyLimit.from0} addUserKnob {6 invert_limit_channel l invert t "The recommended workflow for the image-based limit is keeping this invert turned on, so that the higher the value of the limit channel, the lower the limit gets." -STARTLINE +HIDDEN} invert_limit_channel true addUserKnob {6 prot1_activate l "protect tones" t "Enable controls to select tones to protect from despilling." +STARTLINE} addUserKnob {6 prot1_preview l preview t "Output the protected tones." -STARTLINE +DISABLED} addUserKnob {18 prot1 l protect t "Pick the central hue to protect.\n(ctrl/cmd+alt+click)" +HIDDEN} prot1 {0 0 0} addUserKnob {6 prot1_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 prot1_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 prot1_tolerance l tolerance t "Amount of hues to include in the selection." +HIDDEN} prot1_tolerance 0.2 addUserKnob {7 prot1_falloff l falloff t "Falloff for the hue selection. A higher falloff will make hues apart from the picked one lose weight more quickly." +HIDDEN R 0 4} prot1_falloff 2 addUserKnob {7 prot1_effect l effect t "Multiplier for the hue protection, and for the spill limit value." +HIDDEN R 0 10} prot1_effect 1 addUserKnob {26 respill_divider l "" +STARTLINE} addUserKnob {4 respill_math l "spill math" t "Settings for the math for desaturating the the spill before adding it back." M {"Rec 709" "Ccir 601" "Rec 2020" Average Maximum "" "" "" "" ""}} addUserKnob {18 respill_color l "respill color" t "RGB multiplier for the desaturated spill when adding it back.\n\nIf used on non-degrained plates (which should be avoided anyway), any value other than 1 here will most likely produce grain artifacts.\n\nNOTE: If a respill image input is plugged, this value will act as a multiplier." R 0 4} respill_color 1 addUserKnob {6 respill_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 respill_color_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask T Merge.maskChannelMask} addUserKnob {41 inject -STARTLINE T Merge.inject} addUserKnob {41 invert_mask l invert -STARTLINE T Merge.invert_mask} addUserKnob {41 fringe -STARTLINE T Merge.fringe} addUserKnob {41 mix T Merge.mix} addUserKnob {26 version_author l "" t "apDespill v2.0\n13 April, 2021" +STARTLINE T "
    apDespill v2.0 - adrianpueyo.com, 2014-2021
    "} } Input { inputs 0 name Inputmask xpos 273 ypos -370 number 1 } Dot { name Dot1 note_font_size 41 xpos 307 ypos -267 } set N54fef200 [stack 0] Dot { name Dot5 note_font_size 41 xpos 307 ypos -237 } Dot { inputs 0 name Dotrespill label Dotrespill note_font "Verdana Bold" xpos 1190 ypos -525 } AddChannels { channels rgba format_size true name AddRGBA_spill xpos 1156 ypos -442 } Dot { inputs 0 name Dotcolor label Dotcolor note_font "Verdana Bold" xpos 1080 ypos -593 } AddChannels { channels rgba format_size true name AddRGBA_color xpos 1046 ypos -499 } Dot { inputs 0 name Dotlimit label Dotlimit note_font "Verdana Bold" xpos 936 ypos -732 } Shuffle { red black green black blue black alpha black name Shuffle_limit label "\[value in]" xpos 902 ypos -670 } Input { inputs 0 name Inputimage xpos 449 ypos -761 } set N54fceb00 [stack 0] Dot { name Dot2 note_font_size 41 xpos 788 ypos -758 } Shuffle { alpha black name Shuffle xpos 754 ypos -694 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name CopyLimit xpos 754 ypos -670 } Invert { channels alpha name InvertLimit xpos 754 ypos -611 disable {{!invert_limit_channel}} } Colorspace { name Colorspace1 label "\[value colorspace_in] >> \[value colorspace_out]" xpos 754 ypos -544 disable {{!parent.colorspace_shift}} } Log2Lin { operation lin2log name Log2Lin1 xpos 754 ypos -508 disable {{!log_space}} } BlinkScript { inputs 3 recompileCount 94 ProgramGroup 1 KernelDescription "2 \"apDespillKernel\" iterate pixelWise 857ee5211c9dc340b8743026c9778403c1424a4ec1afa5c7990e55b71f93720c 4 \"src\" Read Point \"color_src\" Read Point \"spill_src\" Read Point \"dst\" Write Point 21 \"limit\" Float 1 AACAPw== \"shift\" Float 1 AAAAAA== \"weights\" Float 1 AAAAAA== \"outmode\" Int 1 AAAAAA== \"output_alpha\" Int 1 AAAAAA== \"output_alpha_inverted\" Int 1 AAAAAA== \"clr\" Int 1 AAAAAA== \"mode\" Int 1 AAAAAA== \"respill_math\" Int 1 AAAAAA== \"respill_color\" Float 4 AAAAAAAAAAAAAAAAAAAAAA== \"prot1_on\" Int 1 AAAAAA== \"prot1_preview\" Int 1 AAAAAA== \"prot1\" Float 3 AAAAAAAAAAAAAAAAAAAAAA== \"prot1_tolerance\" Float 1 AAAAAA== \"prot1_mult\" Float 1 AAAAAA== \"prot1_falloff\" Float 1 AAAAAA== \"pickSpill\" Float 3 AAAAAAAAAAAAAAAAAAAAAA== \"despill_method\" Int 1 AAAAAA== \"use_color_input\" Int 1 AAAAAA== \"use_spill_input\" Int 1 AAAAAA== \"use_limit_input\" Int 1 AAAAAA== 21 \"limit\" 1 1 \"shift\" 1 1 \"weights\" 1 1 \"outmode\" 1 1 \"output_alpha\" 1 1 \"output_alpha_inverted\" 1 1 \"clr\" 1 1 \"mode\" 1 1 \"respill_math\" 1 1 \"respill_color\" 4 1 \"prot1_on\" 1 1 \"prot1_preview\" 1 1 \"prot1\" 3 1 \"prot1_tolerance\" 1 1 \"prot1_mult\" 1 1 \"prot1_falloff\" 1 1 \"pickSpill\" 3 1 \"despill_method\" 1 1 \"use_color_input\" 1 1 \"use_spill_input\" 1 1 \"use_limit_input\" 1 1 7 \"_usePicked\" Int 1 1 AAAAAA== \"_clr\" Int 1 1 AAAAAA== \"_ret\" Int 1 1 AAAAAA== \"_hueShift\" Float 1 1 AAAAAA== \"_autoShift\" Float 1 1 AAAAAA== \"despillColor\" Float 3 1 AAAAAAAAAAAAAAAAAAAAAA== \"vNorm\" Float 3 1 AAAAAAAAAAAAAAAAAAAAAA==" kernelSource "//---------------------------------------------------------\n// apDespillKernel - apDespill v1.0 by Adrian Pueyo\n//\n// Despill an image, with options to despill any hue (and\n// not only the primaries), select different algorithms for\n// des/respilling, and protect tones from the despill.\n//\n// v2.0: Ability to plug image inputs for the controls,\n// and to perform a full key and respill.\n//\n// adrianpueyo.com, 2014-2017\n// ---------------------------------------------------------\n\ninline float y_convert_ccir601(const float4 in)\{\n return in.x * 0.299f + in.y * 0.587f + in.z * 0.114f;\n\}\n\ninline float y_convert_rec709(const float4 in)\{\n return in.x * 0.2125f + in.y * 0.7154f + in.z * 0.0721f;\n\}\n\ninline float y_convert_rec2020(const float4 in)\{\n return in.x * 0.2627f + in.y * 0.678f + in.z * 0.0593f;\n\}\n\ninline float4 hueRotate(const float4 in, const float H)\{\n if(H==0.0f)\{\n return in;\n \}else\{\n float cosH = cos(H*PI/180);\n float sinH = sin(H*PI/180);\n float3 ret;\n ret.x = (in.x+in.y+in.z)*(1-cosH)/3 + in.x*cosH + (-in.y/sqrt(3.0f)+in.z/sqrt(3.0f))*sinH;\n ret.y = (in.x+in.y+in.z)*(1-cosH)/3 + in.y*cosH + (in.x/sqrt(3.0f)-in.z/sqrt(3.0f))*sinH;\n ret.z = (in.x+in.y+in.z)*(1-cosH)/3 + in.z*cosH + (-in.x/sqrt(3.0f)+in.y/sqrt(3.0f))*sinH;\n return float4(ret.x,ret.y,ret.z,in\[3]);\n \}\n\}\n\nfloat3 vecToPlane(float3 v1, float3 v2 = float3(1.0f,1.0f,1.0f))\{\n float3 v1onv2;\n v1onv2 = v2 * float((float(dot(v2,v1))/float(dot(v2,v2)))); //Projection of vector on another (plane's normal)\n return v1-v1onv2; //Projection of vector on plane\n\}\n\ninline float3 myCross(float3 a, float3 b)\{\n return float3(float(a.y*b.z-a.z*b.y),float(a.z*b.x-a.x*b.z),float(a.x*b.y-a.y*b.x));\n\}\n\ninline float colorAngle(const float3 v1, const float3 v2)\{\n const float3 vN=float3(1.0f,1.0f,1.0f);\n float ang = acos(float(dot(v1,v2))/float(sqrt(dot(v1,v1)*dot(v2,v2))));\n float3 crs = myCross(v1,v2);\n if (dot(vN, crs) > 0) \{\n ang = -ang;\n \}\n return ang;\n\}\n\n//Main function to calculate the despill for a float4 colour. If prot1_preview is True, returns the prot1 result instead.\ninline float4 apDespillMain(float4 src_color, float hueShift, int clr, int mode, float limit, float weights, int prot1_preview, int prot1_on, float3 prot1, float prot1_tolerance, float prot1_mult, float prot1_falloff)\{\n //1. HueRotate IN\n float4 despilled = hueRotate(src_color, hueShift);\n\n //2. Calculate the limit\n float resultLimit = 0.0f;\n int2 others;\n if(clr==0)\{//If red (and if _usePicked, also set red)\n others = int2(1,2);\n \}else if(clr==1)\{\n others=int2(0,2);\n \}else if(clr==2)\{\n others=int2(0,1);\n \}\n\n if(mode==0)\{//average\n resultLimit = (despilled\[others\[0]]+despilled\[others\[1]])/2;\n \}else if(mode==1)\{//max\n resultLimit = max(despilled\[others\[0]],despilled\[others\[1]]);\n \}else if(mode==2)\{//min\n resultLimit = min(despilled\[others\[0]],despilled\[others\[1]]);\n \}else\{//custom\n resultLimit = despilled\[others\[0]]*weights+despilled\[others\[1]]*(1-weights);\n \}\n\n //3. Protect tones\n float prot1_result;\n if(prot1_on==1&&(prot1\[0]!=prot1\[1]||prot1\[0]!=prot1\[2]||prot1\[1]!=prot1\[2]))\{\n float cos_prot1_angle;\n cos_prot1_angle = (src_color\[0]*prot1\[0]+src_color\[1]*prot1\[1]+src_color\[2]*prot1\[2]) / (sqrt(prot1\[0]*prot1\[0]+prot1\[1]*prot1\[1]+prot1\[2]*prot1\[2]) * sqrt(src_color\[0]*src_color\[0]+src_color\[1]*src_color\[1]+src_color\[2]*src_color\[2]));\n prot1_result = pow(clamp(cos_prot1_angle,0.0f,1.0f),1/pow(prot1_tolerance,prot1_falloff));\n resultLimit = resultLimit*(1+prot1_result*prot1_mult);\n \}\n\n //4. Calculate the despill and HueRotate OUT\n for (int component = 0; component < 3; component++)\{\n despilled\[component] = component==clr?min(despilled\[component],resultLimit*limit):despilled\[component];\n \}\n despilled = hueRotate(despilled,-hueShift);\n despilled\[3] = prot1_result;\n return despilled;\n\}\n\ninline float getLuma(float4 src_color, int luma_math)\{\n float luma;\n if(luma_math==0)\{\n luma = y_convert_rec709(src_color);\n \}else if(luma_math==1)\{\n luma = y_convert_ccir601(src_color);\n \}else if(luma_math==2)\{\n luma = y_convert_rec2020(src_color); \n \}else if(luma_math==3)\{\n luma = (src_color\[0]+src_color\[1]+src_color\[2])/3;\n \}else\{\n luma = max(max(src_color\[0],src_color\[1]),src_color\[2]);\n \}\n return luma;\n\}\n\nkernel apDespillKernel : ImageComputationKernel\n\{\n Image src;\n Image color_src;\n Image spill_src; //Acts as a multiplier for the respill color\n Image dst;\n\n param:\n float limit;\n float shift;\n float weights;\n int outmode;//0=despill,1=spill\n int output_alpha;\n int output_alpha_inverted;\n int clr; //0=red,1=green,2=blue\n int mode; //0=average,1=maximum,2=minimum,3=custom\n int respill_math; //0=Rec709,1=Ccir601,2=Avg,3=Max\n float4 respill_color;\n int prot1_on;\n int prot1_preview;\n float3 prot1;\n float prot1_tolerance;\n float prot1_mult;\n float prot1_falloff;\n float3 pickSpill;\n int despill_method; //0=despill,1=key/\"absolute\"\n\n int use_color_input;\n int use_spill_input;\n int use_limit_input; //Should be shuffled in the src's alpha\n\n local:\n int _usePicked;\n int _clr;\n int _ret;\n float _hueShift;\n float _autoShift;\n float3 despillColor;\n float3 vNorm;\n\n void define() \{\n defineParam(limit, \"limit\", 1.0f);\n defineParam(shift, \"shift\", 0.0f);\n \}\n\n void init() \{\n //1. Calculate which color to affect\n _ret = 0;\n if(use_color_input==1)\{\n _clr = 0;\n _usePicked = 1;\n \}else if(clr!=3)\{//red green or blue\n _usePicked = 0;\n _clr = clr;\n \}else if(pickSpill.x==pickSpill.y && pickSpill.x==pickSpill.z)\{\n _ret = 1;//if \"custom\" selected but has a gray value, avoid any calculations\n \}else\{\n _usePicked = 1;\n _clr = 0;\n \}\n vNorm = float3(1.0f,1.0f,1.0f);\n if(use_color_input==0)\{\n //2. Calculate the necessary hue shift\n _autoShift = 0.0f;\n if(_usePicked==1)\{\n _autoShift = colorAngle(vecToPlane(pickSpill,vNorm),vecToPlane(float3(1.0f,0.0f,0.0f),vNorm));\n _autoShift = _autoShift*180/PI;//to deg\n \}\n _hueShift = shift-_autoShift;\n \}\n \}\n\n void process()\{\n if(_ret == 1)\{ dst()=src(); return; \} //Avoid any calculations if no despill selected\n\n //0. If color from input, calculate the necessary hue shift\n float hueShift = 0.0f, autoShift = 0.0f;\n float3 despillColor;\n if(use_color_input==1)\{\n despillColor = float3(color_src(0),color_src(1),color_src(2));\n autoShift = colorAngle(vecToPlane(despillColor,vNorm),vecToPlane(float3(1.0f,0.0f,0.0f),vNorm));\n autoShift = autoShift*180/PI;//to deg\n hueShift = shift-autoShift;\n \}else\{\n if(_usePicked == 1)\{\n despillColor = pickSpill;\n \}else\{\n despillColor = float3(_clr==0?1.0f:0.0f,_clr==1?1.0f:0.0f,_clr==2?1.0f:0.0f);\n \}\n \n hueShift = _hueShift;\n \}\n\n float limit_result = use_limit_input==1?limit*src(3):limit;\n\n //1. Despill the source image\n float4 despilled = apDespillMain(src(), hueShift, _clr, mode, limit_result, weights, prot1_preview, prot1_on, prot1, prot1_tolerance, prot1_mult, prot1_falloff);\n if(prot1_preview==1 && prot1_on==1)\{\n dst() = src()*clamp(despilled\[3]*prot1_mult,0.0f,1.0f);\n return;\n \}\n float4 spill = src()-despilled;\n float spill_luma = getLuma(spill, respill_math);\n\n //2. Process the key if key method selected\n float4 result;\n float4 despilled_full, spill_full; //Will account for the key if method selected is key\n float spill_luma_full;\n if(despill_method==0)\{\n //Despill Method = Despill\n despilled_full = despilled;\n spill_full = spill;\n spill_luma_full = spill_luma;\n \}else\{\n //Despill Method = Key\n float4 despillColor4 = float4(despillColor.x,despillColor.y,despillColor.z,1.0f); //For simplicity\n\n //2.1. Despill the picked despill colour itself, for normalizing the spill\n float4 pickSpill_despilled = apDespillMain(despillColor4, hueShift, _clr, mode, limit_result, weights, prot1_preview, prot1_on, prot1, prot1_tolerance, prot1_mult, prot1_falloff);\n float4 pickSpill_spill = despillColor4-pickSpill_despilled;\n float pickSpill_spill_luma = getLuma(pickSpill_spill, respill_math);\n\n spill_luma_full = pickSpill_spill_luma == 0? 0:spill_luma/pickSpill_spill_luma;\n spill_full = despillColor4*spill_luma_full;\n despilled_full = src()-spill_full;\n \}\n\n\n float4 respill_color_result = use_spill_input==1?spill_src()*respill_color:respill_color;\n //3. Output\n if(outmode==0)\{ //Despill\n result = despilled_full+spill_luma_full*respill_color_result;\n \}else\{ //Spill\n result = spill_full;\n \}\n\n if(output_alpha==0)\{\n result\[3]=src(3);\n \}else\{\n if(output_alpha_inverted == 0)\{\n result\[3]=spill_luma_full;\n \}else\{\n result\[3]=1-spill_luma_full;\n \}\n \}\n\n dst() = result;\n\n \}\n\};" useGPUIfAvailable false vectorize false rebuild "" apDespillKernel_limit {{parent.tolerance}} apDespillKernel_shift {{parent.hue_offset}} apDespillKernel_weights {{(parent.custom_weight+1)/2}} apDespillKernel_outmode {{parent.out}} apDespillKernel_output_alpha {{parent.output_alpha}} apDespillKernel_output_alpha_inverted {{parent.inverted_spill_matte}} apDespillKernel_clr {{parent.color}} apDespillKernel_mode {{parent.mode}} apDespillKernel_respill_math {{parent.respill_math}} apDespillKernel_respill_color {{parent.respill_color.r} {parent.respill_color.g} {parent.respill_color.b} 1} apDespillKernel_prot1_on {{parent.prot1_activate}} apDespillKernel_prot1_preview {{parent.prot1_preview}} apDespillKernel_prot1 {{parent.prot1} {parent.prot1} {parent.prot1}} apDespillKernel_prot1_tolerance {{parent.prot1_tolerance}} apDespillKernel_prot1_mult {{parent.prot1_effect}} apDespillKernel_prot1_falloff {{parent.prot1_falloff}} apDespillKernel_pickSpill {{parent.pick} {parent.pick} {parent.pick}} apDespillKernel_despill_method {{parent.absolute_mode}} apDespillKernel_use_color_input {{"\[\nif \{ \[lsearch -exact \[channels \[input this 1].input] rgba.red] >= 0\} \{\n return 1\n\} else \{\n return 0\n\}\n]"}} apDespillKernel_use_spill_input {{"\[\nif \{ \[lsearch -exact \[channels \[input this 2].input] rgba.red] >= 0\} \{\n return 1\n\} else \{\n return 0\n\}\n]"}} apDespillKernel_use_limit_input {{"\[exists parent.input3]"}} rebuild_finalise "" name apDespillKernel xpos 754 ypos -448 } Log2Lin { name Log2Lin2 xpos 754 ypos -378 disable {{!log_space}} } Colorspace { channels {{{parent.Colorspace5.channels}}} colorspace_in {{parent.Colorspace1.colorspace_out}} illuminant_in {{parent.Colorspace1.illuminant_out}} primary_in {{parent.Colorspace1.primary_out}} colorspace_out {{parent.Colorspace1.colorspace_in}} illuminant_out {{parent.Colorspace1.illuminant_in}} primary_out {{parent.Colorspace1.primary_in}} name Colorspace2 label "\[value colorspace_in] >> \[value colorspace_out]" xpos 754 ypos -354 disable {{!parent.colorspace_shift}} } Dot { name Dot3 note_font_size 41 xpos 788 ypos -267 } set N54f8eb00 [stack 0] Dot { name Dot4 note_font_size 41 xpos 788 ypos -237 } push $N54fef200 push $N54f8eb00 push $N54fceb00 Merge2 { inputs 2+1 operation copy bbox B Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge xpos 449 ypos -270 } Copy { inputs 2+1 from0 rgba.alpha to0 rgba.alpha bbox B maskChannelMask {{{parent.Merge.maskChannelMask}}} maskChannelInput {{{parent.Merge.maskChannelInput}}} inject {{parent.Merge.inject}} invert_mask {{parent.Merge.invert_mask}} fringe {{parent.Merge.fringe}} name CopyAlpha xpos 449 ypos -246 disable {{!parent.output_alpha}} } Output { name Output xpos 449 ypos -166 } end_group Dot { name Dot303 selected true xpos -1000 ypos -2911 } set N2f571600 [stack 0] push $N2f3f4100 Dot { name Dot302 selected true xpos -386 ypos -3467 } Merge2 { inputs 2 operation from name Merge5 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" selected true xpos -420 ypos -2915 } Clamp { channels rgba maximum_enable false name Clamp1 selected true xpos -420 ypos -2889 } Saturation { saturation 0 name Saturation2 selected true xpos -420 ypos -2863 } Clamp { channels rgba maximum_enable false name Clamp3 selected true xpos -420 ypos -2837 } Shuffle { green red blue red alpha red name Shuffle11 tile_color 0x93000000 selected true xpos -420 ypos -2811 } Dot { name Dot304 label "despill\nmatte" note_font_size 60 selected true xpos -386 ypos -2734 } set N2f542b00 [stack 0] Dot { name Dot305 label "despill\nMatte" note_font_size 60 selected true xpos -386 ypos -2537 } push $N2f571600 Dot { name Dot306 selected true xpos -1000 ypos -2735 } set N2f541d00 [stack 0] add_layer {despill despill.red} Copy { inputs 2 from0 rgba.red to0 despill.red name Copy7 selected true xpos -1034 ypos -2547 } Dot { name Dot307 label "edge\ndespill" note_font_size 60 selected true xpos -1000 ypos -1785 } Multiply { inputs 1+1 channels despill value 0 name Multiply2 label "\[value value]" selected true xpos -1034 ypos -1643 } Keymix { inputs 3 channels rgb name Keymix3 selected true xpos -1034 ypos -1512 } add_layer {despill_RGB despill_RGB.red despill_RGB.green despill_RGB.blue despill_RGB.alpha} Shuffle { black red white green red2 blue green2 black out2 despill_RGB name Shuffle26 label "\[value in] -> \[value out2]" selected true xpos -1034 ypos -1440 } Copy { inputs 2 channels all name Copy12 selected true xpos -1034 ypos -952 } CopyBBox { inputs 2 name CopyBBox3 selected true xpos -1034 ypos -890 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha bbox B name Copy14 selected true xpos -1034 ypos -635 } Copy { inputs 2 channels cleanplate bbox B name Copy15 selected true xpos -1034 ypos -279 } Dot { name Dot313 note_font_size 41 selected true xpos -1000 ypos 125 } Dot { name Dot314 note_font_size 41 selected true xpos -1000 ypos 586 } Dot { name Dot315 note_font_size 41 selected true xpos -1000 ypos 912 } Dot { name Dot15 note_font_size 41 selected true xpos -1000 ypos 1434 } set N2f4eb900 [stack 0] Dot { name Dot7 note_font_size 41 selected true xpos -736 ypos 1434 } set N2f4eb200 [stack 0] Dot { name Dot108 note_font_size 41 selected true xpos -545 ypos 1434 } set N2f4eab00 [stack 0] Shuffle { in despill name Shuffle23 label "\[value in]" selected true xpos -579 ypos 1478 } Remove { operation keep channels rgba name Remove2 selected true xpos -579 ypos 1516 } NoOp { name Anchor_30be3b7c88 help "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019" onCreate "if nuke.GUI:\n try:\n import stamps; stamps.anchorOnCreate()\n except:\n pass" knobChanged stamps.anchorKnobChanged() autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0xffffff01 note_font_size 20 selected true xpos -579 ypos 1573 addUserKnob {20 anchor_tab l "Anchor Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T anchor} addUserKnob {1 title l Title: t "Displayed name on the Node Graph for this Stamp and its Anchor.\nIMPORTANT: This is only for display purposes, and is different from the real/internal name of the Stamps."} title "despill Mask" addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T Despill} addUserKnob {26 prev_name l "" +STARTLINE +HIDDEN T Anchor_30be3b7c88} addUserKnob {3 showing l "" +STARTLINE +HIDDEN} addUserKnob {1 tags l Tags t "Comma-separated tags you can define for each Anchor, that will help you find it when invoking the Stamp Selector by pressing the Stamps shortkey with nothing selected."} tags 2D, addUserKnob {26 line1 l "" +STARTLINE} addUserKnob {26 stamps_label l Stamps: T " "} addUserKnob {22 createStamp l new t "Create a new Stamp for this Anchor." -STARTLINE T stamps.stampCreateWired(nuke.thisNode())} addUserKnob {22 selectStamps l select t "Reconnect all of this Anchor's Stamps." -STARTLINE T stamps.wiredSelectSimilar(nuke.thisNode().name())} addUserKnob {22 reconnectStamps l reconnect -STARTLINE T stamps.anchorReconnectWired()} addUserKnob {22 zoomNext l "zoom next" t "Navigate to this Anchor's next Stamp on the Node Graph." -STARTLINE T stamps.wiredZoomNext(nuke.thisNode().name())} addUserKnob {26 line2 l "" +STARTLINE} addUserKnob {22 buttonHelp l Help -STARTLINE T stamps.showHelp()} addUserKnob {26 version l " " t "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019." -STARTLINE T " Stamps v1.0
    "} } NoOp { name Stamp40 help "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019" onCreate "if nuke.GUI:\n try:\n import stamps; stamps.wiredOnCreate()\n except:\n pass\n" knobChanged "import stamps; stamps.wiredKnobChanged()" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 selected true xpos -656 ypos 1961 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {3 lockCallbacks l "" +STARTLINE +HIDDEN} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} addUserKnob {1 title l Title: t "Displayed name on the Node Graph for this Stamp and its Anchor.\nIMPORTANT: This is only for display purposes, and is different from the real/internal name of the Stamps."} title "despill Mask" addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T "despill Mask"} addUserKnob {26 tags l Tags: t "Tags of this stamp's Anchor, for information purpose only.\nClick \"show anchor\" to change them." T 2D} addUserKnob {26 backdrops l Backdrops: t "Labels of backdrop nodes which contain this stamp's Anchor." T "Advanced Keying Template"} addUserKnob {26 line1 l "" +STARTLINE} addUserKnob {26 anchor_label l Anchor: T " "} addUserKnob {22 show_anchor l " show anchor " t "Show the properties panel for this Stamp's Anchor." -STARTLINE T stamps.wiredShowAnchor()} addUserKnob {22 zoom_anchor l "zoom anchor" t "Navigate to this Stamp's Anchor on the Node Graph." -STARTLINE T stamps.wiredZoomAnchor()} addUserKnob {26 stamps_label l Stamps: T " "} addUserKnob {22 zoomNext l " zoom next " t "Navigate to this Stamp's next sibling on the Node Graph." -STARTLINE T stamps.wiredZoomNext()} addUserKnob {22 selectSimilar l " select similar " t "Select all similar Stamps to this one on the Node Graph." -STARTLINE T stamps.wiredSelectSimilar()} addUserKnob {26 space_1 l "" +STARTLINE T " "} addUserKnob {26 reconnect_label l Reconnect: t "Reconnect by the stored Anchor name." T " "} addUserKnob {22 reconnect_this l this t "Reconnect this Stamp to its Anchor, by its stored Anchor name." -STARTLINE T "n = nuke.thisNode()\ntry:\n n.setInput(0,nuke.toNode(n.knob(\"anchor\").value()))\nexcept:\n nuke.message(\"Unable to reconnect.\")\ntry:\n import stamps\n stamps.wiredGetStyle(n)\nexcept:\n pass\n"} addUserKnob {22 reconnect_similar l similar t "Reconnect this Stamp and similar ones to their Anchor, by their stored anchor name." -STARTLINE T stamps.wiredReconnectSimilar()} addUserKnob {22 reconnect_all l all t "Reconnect all the Stamps to their Anchors, by their stored anchor names." -STARTLINE T stamps.wiredReconnectAll()} addUserKnob {26 space_2 l "" +STARTLINE T " "} addUserKnob {20 advanced_reconnection l "Advanced Reconnection" n 2} addUserKnob {26 reconnect_by_title_label l "By Title:" t "Reconnect by searching for a matching title." T " "} addUserKnob {22 reconnect_by_title_this l this t "Look for an Anchor that shares this Stamp's title, and connect this Stamp to it.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectByTitle()} addUserKnob {22 reconnect_by_title_similar l similar t "Look for an Anchor that shares this Stamp's title, and connect this Stamp and similar ones to it.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectByTitleSimilar()} addUserKnob {22 reconnect_by_title_selected l selected t "For each Stamp selected, look for an Anchor that shares its title, and connect to it.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectByTitleSelected()} addUserKnob {26 reconnect_by_selection_label l "By Selection:" t "Force reconnect to a selected Anchor." T " "} addUserKnob {22 reconnect_by_selection_this l this t "Force reconnect this Stamp to a selected Anchor, whatever its name or title.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectBySelection()} addUserKnob {22 reconnect_by_selection_similar l similar t "Force reconnect this Stamp and similar ones to a selected Anchor, whatever its name or title.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectBySelectionSimilar()} addUserKnob {22 reconnect_by_selection_selected l selected t "Force reconnect all selected Stamps to an also selected Anchor, whatever its name or title.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectBySelectionSelected()} addUserKnob {1 anchor l Anchor} anchor Anchor_30be3b7c88 addUserKnob {6 auto_reconnect_by_title l "  auto-reconnect by title" t "When creating this stamp again (like on copy-paste), auto-reconnect it by title instead of doing it by the saved anchor's name, and auto-turn this off immediately.\nIMPORTANT: Should be off by default. Only use this for setting up templates." +STARTLINE} addUserKnob {20 advanced_reconnection_1 l "Advanced Reconnection" +INVISIBLE n -1} addUserKnob {26 line2 l "" +STARTLINE} addUserKnob {22 buttonHelp l Help -STARTLINE T stamps.showHelp()} addUserKnob {26 version l " " t "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019." -STARTLINE T " Stamps v1.0"} } Grade { channels rgba multiply 4 black_clamp false name Grade4 selected true xpos -656 ypos 2038 } set N2f4e8800 [stack 0] Dot { name Dot318 label "despill\nmatte" note_font_size 41 selected true xpos -622 ypos 2174 } set N2d0b8f00 [stack 0] Dot { name Dot319 note_font_size 41 selected true xpos -855 ypos 2172 } Dot { name Dot320 note_font_size 41 selected true xpos -855 ypos 2482 } push $N607a5600 NoOp { name Stamp41 help "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019" onCreate "if nuke.GUI:\n try:\n import stamps; stamps.wiredOnCreate()\n except:\n pass\n" knobChanged "import stamps; stamps.wiredKnobChanged()" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 selected true xpos 48 ypos 1928 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {3 lockCallbacks l "" +STARTLINE +HIDDEN} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} addUserKnob {1 title l Title: t "Displayed name on the Node Graph for this Stamp and its Anchor.\nIMPORTANT: This is only for display purposes, and is different from the real/internal name of the Stamps."} title "BG Before Key" addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T "BG Before Key"} addUserKnob {26 tags l Tags: t "Tags of this stamp's Anchor, for information purpose only.\nClick \"show anchor\" to change them." T 2D} addUserKnob {26 backdrops l Backdrops: t "Labels of backdrop nodes which contain this stamp's Anchor." +HIDDEN T " "} addUserKnob {26 line1 l "" +STARTLINE} addUserKnob {26 anchor_label l Anchor: T " "} addUserKnob {22 show_anchor l " show anchor " t "Show the properties panel for this Stamp's Anchor." -STARTLINE T stamps.wiredShowAnchor()} addUserKnob {22 zoom_anchor l "zoom anchor" t "Navigate to this Stamp's Anchor on the Node Graph." -STARTLINE T stamps.wiredZoomAnchor()} addUserKnob {26 stamps_label l Stamps: T " "} addUserKnob {22 zoomNext l " zoom next " t "Navigate to this Stamp's next sibling on the Node Graph." -STARTLINE T stamps.wiredZoomNext()} addUserKnob {22 selectSimilar l " select similar " t "Select all similar Stamps to this one on the Node Graph." -STARTLINE T stamps.wiredSelectSimilar()} addUserKnob {26 space_1 l "" +STARTLINE T " "} addUserKnob {26 reconnect_label l Reconnect: t "Reconnect by the stored Anchor name." T " "} addUserKnob {22 reconnect_this l this t "Reconnect this Stamp to its Anchor, by its stored Anchor name." -STARTLINE T "n = nuke.thisNode()\ntry:\n n.setInput(0,nuke.toNode(n.knob(\"anchor\").value()))\nexcept:\n nuke.message(\"Unable to reconnect.\")\ntry:\n import stamps\n stamps.wiredGetStyle(n)\nexcept:\n pass\n"} addUserKnob {22 reconnect_similar l similar t "Reconnect this Stamp and similar ones to their Anchor, by their stored anchor name." -STARTLINE T stamps.wiredReconnectSimilar()} addUserKnob {22 reconnect_all l all t "Reconnect all the Stamps to their Anchors, by their stored anchor names." -STARTLINE T stamps.wiredReconnectAll()} addUserKnob {26 space_2 l "" +STARTLINE T " "} addUserKnob {20 advanced_reconnection l "Advanced Reconnection" n 2} addUserKnob {26 reconnect_by_title_label l "By Title:" t "Reconnect by searching for a matching title." T " "} addUserKnob {22 reconnect_by_title_this l this t "Look for an Anchor that shares this Stamp's title, and connect this Stamp to it.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectByTitle()} addUserKnob {22 reconnect_by_title_similar l similar t "Look for an Anchor that shares this Stamp's title, and connect this Stamp and similar ones to it.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectByTitleSimilar()} addUserKnob {22 reconnect_by_title_selected l selected t "For each Stamp selected, look for an Anchor that shares its title, and connect to it.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectByTitleSelected()} addUserKnob {26 reconnect_by_selection_label l "By Selection:" t "Force reconnect to a selected Anchor." T " "} addUserKnob {22 reconnect_by_selection_this l this t "Force reconnect this Stamp to a selected Anchor, whatever its name or title.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectBySelection()} addUserKnob {22 reconnect_by_selection_similar l similar t "Force reconnect this Stamp and similar ones to a selected Anchor, whatever its name or title.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectBySelectionSimilar()} addUserKnob {22 reconnect_by_selection_selected l selected t "Force reconnect all selected Stamps to an also selected Anchor, whatever its name or title.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectBySelectionSelected()} addUserKnob {1 anchor l Anchor} anchor Anchor_3cad2b60ea addUserKnob {6 auto_reconnect_by_title l "  auto-reconnect by title" t "When creating this stamp again (like on copy-paste), auto-reconnect it by title instead of doing it by the saved anchor's name, and auto-turn this off immediately.\nIMPORTANT: Should be off by default. Only use this for setting up templates." +STARTLINE} addUserKnob {20 advanced_reconnection_1 l "Advanced Reconnection" +INVISIBLE n -1} addUserKnob {26 line2 l "" +STARTLINE} addUserKnob {22 buttonHelp l Help -STARTLINE T stamps.showHelp()} addUserKnob {26 version l " " t "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019." -STARTLINE T " Stamps v1.0"} } Dot { name Dot3 note_font_size 41 selected true xpos 82 ypos 2003 } set N2d0ab200 [stack 0] Dot { name Dot4 note_font_size 41 selected true xpos 82 ypos 2570 } Dot { name Dot20 label BG note_font_size 101 selected true xpos -523 ypos 2570 } push $N2d0ab200 Dot { name Dot2 note_font_size 41 selected true xpos -316 ypos 2003 } Dot { name Dot321 label BG note_font_size 101 selected true xpos -316 ypos 2091 } Grade { blackpoint 0.008 whitepoint 0.225 black_clamp false name Grade6 label "BG Prep" selected true xpos -350 ypos 2170 } Dot { name Dot322 selected true xpos -316 ypos 2259 } push $N2d0b8f00 Merge2 { inputs 2 operation multiply name Merge36 selected true xpos -656 ypos 2257 } Shuffle { alpha black name Shuffle40 label "\[value in]" selected true xpos -656 ypos 2330 } push $N2f4e8800 Shuffle { green red blue red alpha red name Shuffle41 label "\[value in]" selected true xpos -865 ypos 2034 } Grade { channels rgba whitepoint 0.5 black_clamp false white_clamp true name Grade7 selected true xpos -865 ypos 2088 } push $N2f4eb900 Remove { operation keep channels rgba channels2 GS_Plate name Remove6 selected true xpos -1034 ypos 1525 } Saturation { inputs 1+1 saturation 0.5 name Saturation3 label "change if necessary" selected true xpos -1034 ypos 2082 } Merge2 { inputs 2 operation plus bbox B output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge49 selected true xpos -1034 ypos 2334 } Group { inputs 3 name BlacksMatch help "Choose a black point color or plug an image /constant you wish to be your blackpoint into BlackColor input.\n\nUse Mult Range to control how far above the blackpoint color to affect the lows\n\nUse the RollOff gamma to add fall off to the bottom of the curve\n\nTurn on the preview Plotscan and move the sampler over a region to see what your settings are doing to a linear 0-1 ramp. This will help you see if you have weird curves, clamping or other funky problems as you adjust settings" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"inputChange\":\n nsd = nuke.toNode(\"SwitchDefault\")\n n\[\"defaultBlack\"].setEnabled(nsd\[\"which\"].getValue()==1)\n\nif k.name() == \"previewPlotScan\":\n p = n.knob(\"previewPlotScan\").value()\n if p == True:\n n.knob(\"plotscanSampler\").setVisible(True)\n else:\n n.knob(\"plotscanSampler\").setVisible(False)" tile_color 0x1c1c1cff note_font "Helvetica Bold" selected true xpos -1034 ypos 2567 addUserKnob {20 BlacksMatch} addUserKnob {6 default_black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 premultInput l "Premultiplied Input" +STARTLINE} addUserKnob {4 mergeOp l Operation: t "Plus and Screen do the same thing with our operation, so I only included a hypot between plus/screen and hypot. Hypot raises the mult by x2 because I thought that gave more pleasising results. It will probably be a harsher curve (more towards clamp) than the plus/screen result)." M {Plus/Screen Hypot "" ""}} addUserKnob {18 defaultBlack l "Default Black" +DISABLED} defaultBlack {0.05 0.05 0.05} addUserKnob {6 defaultBlack_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 defaultBlack_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 defaultBlack_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 defaultBlack_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 defaultBlack_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 defaultBlack_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 defaultBlack_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 defaultBlack_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 defaultBlack_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 defaultBlack_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 defaultBlack_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 defaultBlack_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 defaultBlack_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {7 multBase l "Mult Low Range" t "This is the Multiplier for the top of the \"toe\" curve. It is multiplying the BlackPoint color by this number and setting it as the highest point weird the curve will influence the midtones and the highlights" R 1.5 10} multBase 4 addUserKnob {7 rolloffGamma l "Rolloff Gamma" t "This controls the bottom of the curve, the falloff to where it is bending toward the \"cut off point\" which is out black color. A lower value will act more like a clamp and a higher value will act more like a plus." R 0.1 1} rolloffGamma 0.35 addUserKnob {4 minVal l "Min Value is:" M {"Toe Result" "Clamp Result" "" ""}} addUserKnob {6 previewPlotScan l "Preview PlotScan" t "Click to overlay a plotscan graph to show you how your black color is influenced by your settings." +STARTLINE} addUserKnob {12 plotscanSampler l "PlotScan Sampler" +HIDDEN} plotscanSampler {200 200} addUserKnob {6 color_rgb_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask -STARTLINE T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Name: T BlacksMatch} addUserKnob {26 ver l Version: T v10} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x556a5000 label "This Creates a \nPer Channel Key\nBased on the Blackpoint" note_font_size 30 note_font_color 0xffffffff xpos 991 ypos -77 bdwidth 314 bdheight 421 } StickyNote { inputs 0 name StickyNote2 tile_color 0xff label green note_font_size 41 note_font_color 0xffffffff xpos 177 ypos 466 } StickyNote { inputs 0 name StickyNote1 tile_color 0xff label red note_font_size 41 note_font_color 0xffffffff xpos 188 ypos 350 } StickyNote { inputs 0 name StickyNote3 tile_color 0xff label blue note_font_size 41 note_font_color 0xffffffff xpos 186 ypos 570 } StickyNote { inputs 0 name StickyNote4 tile_color 0xff label "min will be \nblack color" note_font_size 31 note_font_color 0xffffffff xpos 143 ypos 733 } Input { inputs 0 name Inputimg xpos 322 ypos -550 } Dot { name Dot17 xpos 356 ypos -418 } set N2d043200 [stack 0] AddChannels { channels rgba color 1 name AddChannels1 xpos 322 ypos -365 } Dot { name Dot5 note_font_size 41 xpos 356 ypos -288 } set N2d041d00 [stack 0] Grade { channels rgba white 0 multiply 0 add {{defaultBlack.r} {defaultBlack.g} {defaultBlack.b} 0} black_clamp false name Grade1 label color xpos 922 ypos -295 } Input { inputs 0 name InputBlackColor xpos 1138 ypos -569 number 1 } Switch { inputs 2 which {{"!\[exists parent.input1]"}} name SwitchDefault xpos 1138 ypos -291 } Dot { name Dot26 label "Black Color" note_font_size 41 xpos 1172 ypos -212 } Dot { name Dot4 note_font_size 41 xpos 1172 ypos -151 } set N2d028800 [stack 0] Dot { name Dot36 note_font_size 41 xpos 1631 ypos -151 } set N2d028100 [stack 0] Dot { name Dot16 note_font_size 41 xpos 2140 ypos -151 } set N2d00f900 [stack 0] Crop { box {{plotscanSampler.x-2} {plotscanSampler.y-2} {plotscanSampler.x+2} {plotscanSampler.x+2}} reformat true crop false name Crop1 xpos 2432 ypos -154 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} addUserKnob {22 cropToBbox_1 l "Crop to Bounding Box" -STARTLINE T codeBBox()} } Blur { channels rgb size 16 name Blur1 label "\[value size]" xpos 2432 ypos -130 } Reformat { format "512 512 0 0 512 512 1 square_512" name Reformat4 xpos 2432 ypos -92 } Dot { name Dot12 note_font_size 41 xpos 2466 ypos -43 } set N2d00dd00 [stack 0] Dot { name Dot47 note_font_size 41 xpos 2917 ypos -43 } set N2d00d600 [stack 0] Dot { name Dot42 label "Black Color" note_font_size 41 xpos 2917 ypos 286 } Dot { name Dot43 note_font_size 41 xpos 2917 ypos 366 } set N2d00c800 [stack 0] Dot { name Dot44 note_font_size 41 xpos 2917 ypos 480 } set N2d00c100 [stack 0] Dot { name Dot45 note_font_size 41 xpos 2917 ypos 588 } set N2cfdf900 [stack 0] Dot { name Dot31 note_font_size 41 xpos 2917 ypos 656 } set N2cfdf200 [stack 0] push $N2cfdf200 push $N2d00d600 Dot { name Dot11 label "Black Color" note_font_size 41 xpos 3426 ypos -43 } Multiply { channels rgb value 2 name Multiply6 label "mult black color" xpos 3392 ypos 77 } Reformat { inputs 0 format "512 512 0 0 512 512 1 square_512" pbb true name Reformat1 xpos 2711 ypos 61 } Ramp { p0 {0 0} p1 {512 0} name Ramp1 xpos 2711 ypos 93 } Dot { name Dot1 note_font_size 41 xpos 2745 ypos 154 } set N2cfdc100 [stack 0] Dot { name Dot7 note_font_size 41 xpos 3138 ypos 154 } set N2cdbb900 [stack 0] MergeExpression { inputs 2 expr0 Br/Ar expr1 Bg/Ag expr2 Bb/Ab name MergeDivide2 xpos 3392 ypos 151 } Invert { channels rgb name Invert5 xpos 3392 ypos 175 } Clamp { channels rgb name Clamp4 xpos 3392 ypos 199 } Gamma { channels rgb value 0.5 name Gamma4 xpos 3392 ypos 223 } Dot { name Dot39 xpos 3426 ypos 366 } set N2cdab200 [stack 0] Dot { name Dot40 xpos 3426 ypos 480 } set N2cdaab00 [stack 0] Dot { name Dot41 xpos 3426 ypos 588 } Shuffle { red blue green blue alpha blue name Shuffle11 tile_color 0x3fbfff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 3277 ypos 581 } push $N2cfdf900 push $N2cdaab00 Shuffle { red green blue green alpha green name Shuffle12 tile_color 0xbf00ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 3276 ypos 473 } push $N2d00c100 push $N2cdab200 Shuffle { green red blue red alpha red name Shuffle13 tile_color 0xbf0000ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 3270 ypos 359 } push $N2d00c800 push $N2cdbb900 Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} output {rgba.red -rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge14 label red xpos 3104 ypos 359 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} Bchannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} output {-rgba.red rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge15 label green xpos 3104 ypos 473 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} Bchannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} output {-rgba.red -rgba.green rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge16 label blue xpos 3104 ypos 581 } Merge2 { inputs 2 operation max bbox B Achannels rgb Bchannels rgb output rgb name Merge18 label "Set Min Color\nto Blackpoint" xpos 3104 ypos 644 } Dot { name Dot46 note_font_size 41 xpos 3138 ypos 742 } Switch { inputs 2 which {{minVal}} name SwitchMinColor1 xpos 2883 ypos 739 } push $N2d00dd00 Multiply { channels rgb value {{multBase}} name Multiply3 label "mult black color" xpos 2432 ypos 63 } Multiply { channels rgb value 2 name Multiply4 label "hypot Extra Mult\n" xpos 2432 ypos 95 disable {{"mergeOp == 1 ? 0 : 1"}} } push $N2cfdc100 MergeExpression { inputs 2 expr0 Br/Ar expr1 Bg/Ag expr2 Bb/Ab name MergeDivide1 xpos 2432 ypos 151 } Invert { channels rgb name Invert2 xpos 2432 ypos 175 } Clamp { channels rgb name Clamp2 xpos 2432 ypos 199 } Gamma { channels rgb value {{rolloffGamma}} name Gamma2 xpos 2432 ypos 223 } Dot { name Dot6 xpos 2466 ypos 366 } set N2cd48100 [stack 0] Dot { name Dot9 xpos 2466 ypos 480 } set N2cd33900 [stack 0] Dot { name Dot10 xpos 2466 ypos 588 } Shuffle { red blue green blue alpha blue name Shuffle4 tile_color 0x3fbfff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 2511 ypos 581 } push $N2cfdf900 push $N2cd33900 Shuffle { red green blue green alpha green name Shuffle5 tile_color 0xbf00ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 2511 ypos 473 } push $N2d00c100 push $N2cd48100 Shuffle { green red blue red alpha red name Shuffle6 tile_color 0xbf0000ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 2517 ypos 359 } push $N2d00c800 push $N2cfdc100 Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} output {rgba.red -rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge2 label red xpos 2711 ypos 359 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} Bchannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} output {-rgba.red rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge6 label green xpos 2711 ypos 473 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} Bchannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} output {-rgba.red -rgba.green rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge7 label blue xpos 2711 ypos 581 } Merge2 { inputs 2 operation max bbox B Achannels rgb Bchannels rgb output rgb name Merge8 label "Set Min Color\nto Blackpoint" xpos 2711 ypos 730 } Group { name PlotScanline tile_color 0x9c0000ff xpos 2711 ypos 805 addUserKnob {20 Controls} addUserKnob {4 mode l "Sampling method" M {"Slice Per Pixel (faster)" "Slice Area (slower)" "Full Scanline" "" "" ""}} mode "Full Scanline" addUserKnob {6 add2image l "Add to original" +STARTLINE} addUserKnob {6 Normalize -STARTLINE} addUserKnob {6 tonemap l "Tone Map (HDRI)" -STARTLINE} addUserKnob {6 curve l "Plot as curve" +STARTLINE} curve true addUserKnob {3 curveFat l "Curve Thickness" -STARTLINE} addUserKnob {3 sa l "Sample Area" t "Disabled when using pr pixel method."} sa 1 addUserKnob {7 lift l Lift R -1 1} addUserKnob {7 scale l Scale R 0 5} scale 1 addUserKnob {26 ""} addUserKnob {12 p1 l "Start Point"} p1 {376 418} addUserKnob {12 p2 l "End Point" -STARTLINE} p2 {428.5 425.5} addUserKnob {26 ""} addUserKnob {26 "" l "About " T "Plot Scanline v0.4 | theo@euqahuba.com\nUse P1 to select your scanline and/or you start slice."} } Input { inputs 0 name Input1 xpos -480 ypos 62 } set N2ccfb200 [stack 0] Expression { temp_name0 length temp_expr0 sqrt(r*r+g*g+b*b) expr0 r/length expr1 g/length expr2 b/length name Normalize xpos -480 ypos 108 disable {{1-parent.Normalize i}} } Expression { expr0 r/(r+1) expr1 g/(g+1) expr2 b/(b+1) name tonamap xpos -480 ypos 134 disable {{1-parent.tonemap i}} } set N2ccfa400 [stack 0] Expression { temp_name0 rExpr temp_expr0 "min(max(0,\r\nceil(r(x,parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" temp_name1 gExpr temp_expr1 "min(max(0,\r\nceil(g(x,parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" temp_name2 bExpr temp_expr2 "min(max(0,\r\nceil(b(x,parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" expr0 rExpr expr1 gExpr expr2 bExpr expr3 0 name scanline xpos -302 ypos 193 addUserKnob {20 User} } push $N2ccfa400 Expression { temp_name0 rExpr temp_expr0 "min(max(0,\r\nceil(r((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y,parent.sa,parent.sa)-((y/height+parent.lift)*parent.scale))),1)" temp_name1 gExpr temp_expr1 "min(max(0,\r\nceil(g((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y,parent.sa,parent.sa)-((y/height+parent.lift)*parent.scale))),1)" temp_name2 bExpr temp_expr2 "min(max(0,\r\nceil(b((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y,parent.sa,parent.sa)-((y/height+parent.lift)*parent.scale))),1)" expr0 rExpr expr1 gExpr expr2 bExpr expr3 0 name Expression_highQuality xpos -515 ypos 197 addUserKnob {20 User} } push $N2ccfa400 Expression { temp_name0 rExpr temp_expr0 "min(max(0,\r\nceil(r((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" temp_name1 gExpr temp_expr1 "min(max(0,\r\nceil(g((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" temp_name2 bExpr temp_expr2 "min(max(0,\r\nceil(b((x/width)*(parent.p2.x-parent.p1.x)+parent.p1.x,(x/width)*(parent.p2.y-parent.p1.y)+parent.p1.y)-((y/height+parent.lift)*parent.scale))),1)" expr0 rExpr expr1 gExpr expr2 bExpr expr3 0 name perPixel xpos -419 ypos 201 addUserKnob {20 User} } Switch { inputs 3 which {{parent.mode i}} name Switch2 xpos -480 ypos 253 } Matrix { matrix { {0 1 0} {1 -4 1} {0 1 0} } name Matrix2 xpos -480 ypos 284 disable {{-1+parent.curve i x70 1}} } Dilate { size {{parent.curveFat}} name Dilate1 xpos -480 ypos 326 disable {{-1+parent.curve.main}} } Clamp { name Clamp1 xpos -480 ypos 383 } set N2ceaf200 [stack 0] push $N2ccfb200 Dot { name Dot1 xpos -556 ypos 66 } Clamp { maximum 331 name Clamp2 xpos -590 ypos 352 } Merge2 { inputs 2 operation plus bbox intersection name Merge1 xpos -590 ypos 394 } Dot { name Dot2 xpos -556 ypos 433 } push $N2ceaf200 Switch { inputs 2 which {{parent.add2image i}} name Switch1 xpos -480 ypos 430 } Output { name Output1 xpos -480 ypos 470 } end_group Dot { name Dot15 note_font_size 41 xpos 2745 ypos 857 } set N2ce9c800 [stack 0] Shuffle { red white green white blue white alpha white name Shuffle7 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 2821 ypos 850 } BlackOutside { name BlackOutside1 xpos 2821 ypos 882 } Dilate { channels rgba size -2 name Dilate1 xpos 2821 ypos 910 } Invert { name Invert3 xpos 2821 ypos 934 } push $N2ce9c800 Merge2 { inputs 2 name Merge9 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 2711 ypos 938 } Group { name BinaryAlpha tile_color 0x2a2a2aff label "(\[value an] --> \[value output1])" note_font Verdana note_font_color 0xfffff9ff xpos 2711 ypos 983 addUserKnob {20 BinaryAlpha} addUserKnob {4 an l Analyze: M {rgb rgba alpha "" "" ""}} addUserKnob {4 output1 l Output: M {rgba alpha "" "" "" ""}} output1 alpha addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Analyzes channel input and creates a binary result 0 or 1 and outputs it into output channel" T BinaryAlpha} addUserKnob {26 ver l Version: T v03} } Input { inputs 0 name Input xpos -398 ypos 275 } Expression { temp_name0 rgb_an temp_expr0 "r !=0 || g!=0 || b!=0?1:0" temp_name1 rgba_an temp_expr1 "r!=0 || g!=0 || b!=0 || a!=0?1:0" temp_name2 alpha_an temp_expr2 a!=0?1:0 expr3 "parent.an == 0 ? rgb_an : parent.an == 1 ? rgba_an : alpha_an" name Expression xpos -398 ypos 341 } Shuffle { red alpha green alpha blue alpha name Shuffle label "\[value in]" xpos -398 ypos 367 disable {{parent.output1}} } Output { name Output1 xpos -398 ypos 456 } end_group Reformat { type "to box" box_height {{"\[exists parent.input0] ? parent.input.height : root.format.height"}} resize height filter impulse pbb true name Reformat2 xpos 2711 ypos 1041 } Reformat { type "to box" box_width {{"\[exists parent.input0] ? parent.input.width : root.format.width"}} box_height {{input.height}} resize none filter impulse black_outside true pbb true name Reformat3 xpos 2711 ypos 1081 } Dilate { channels rgba size 1 name Dilate2 xpos 2711 ypos 1121 } Dot { name Dot14 note_font_size 41 xpos 2745 ypos 1192 } Input { inputs 0 name Inputmask xpos 864 ypos 878 number 2 } Dot { name Dot29 xpos 898 ypos 1015 } push $N2d028100 Dot { name Dot33 label "Black Color" note_font_size 41 xpos 1631 ypos 295 } Dot { name Dot37 note_font_size 41 xpos 1631 ypos 360 } set N2ce4c800 [stack 0] Dot { name Dot34 note_font_size 41 xpos 1631 ypos 474 } set N2ce4c100 [stack 0] Dot { name Dot35 note_font_size 41 xpos 1631 ypos 582 } set N2ce2b900 [stack 0] Dot { name Dot13 note_font_size 41 xpos 1631 ypos 674 } set N2ce2b200 [stack 0] push $N2ce2b200 push $N2d00f900 Multiply { channels rgb value 2 name Multiply7 label "mult black color" xpos 2106 ypos 87 } push $N2d041d00 Unpremult { name Unpremult1 xpos 322 ypos -16 disable {{"! premultInput"}} } Dot { name Dot18 xpos 356 ypos 145 } set N2ce29600 [stack 0] Dot { name Dot22 note_font_size 41 xpos 1028 ypos 145 } set N2ce28f00 [stack 0] Dot { name Dot32 note_font_size 41 xpos 1852 ypos 145 } set N2ce28800 [stack 0] MergeExpression { inputs 2 expr0 Br/Ar expr1 Bg/Ag expr2 Bb/Ab name MergeDivide3 xpos 2106 ypos 142 } Invert { channels rgb name Invert4 xpos 2106 ypos 166 } Clamp { channels rgb name Clamp3 xpos 2106 ypos 190 } Gamma { channels rgb value 0.51 name Gamma3 xpos 2106 ypos 214 } Dot { name Dot24 xpos 2140 ypos 360 } set N2ce00100 [stack 0] Dot { name Dot25 xpos 2140 ypos 474 } set N2cdf3900 [stack 0] Dot { name Dot27 xpos 2140 ypos 582 } Shuffle { red blue green blue alpha blue name Shuffle8 tile_color 0x3fbfff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 1990 ypos 575 } push $N2ce2b900 push $N2cdf3900 Shuffle { red green blue green alpha green name Shuffle9 tile_color 0xbf00ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 1990 ypos 467 } push $N2ce4c100 push $N2ce00100 Shuffle { green red blue red alpha red name Shuffle10 tile_color 0xbf0000ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 1984 ypos 353 } push $N2ce4c800 push $N2ce28800 Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} output {rgba.red -rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge11 label red xpos 1818 ypos 353 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} Bchannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} output {-rgba.red rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge12 label green xpos 1818 ypos 467 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} Bchannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} output {-rgba.red -rgba.green rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge13 label blue xpos 1818 ypos 575 } Merge2 { inputs 2 operation max bbox B Achannels rgb Bchannels rgb output rgb name Merge17 label "Set Min Color\nto Blackpoint" xpos 1818 ypos 662 } Dot { name Dot38 note_font_size 41 xpos 1852 ypos 760 } Switch { inputs 2 which {{minVal}} name SwitchMinColor xpos 1597 ypos 757 } push $N2d028800 Multiply { channels rgb value {{multBase}} name Multiply1 label "mult black color" xpos 1138 ypos 52 } Multiply { channels rgb value 2 name Multiply2 label "hypot Extra Mult\n" xpos 1138 ypos 84 disable {{"mergeOp == 1 ? 0 : 1"}} } push $N2ce28f00 MergeExpression { inputs 2 expr0 Br/Ar expr1 Bg/Ag expr2 Bb/Ab name MergeDivide xpos 1138 ypos 194 } Invert { channels rgb name Invert1 xpos 1138 ypos 239 } Clamp { channels rgb name Clamp1 xpos 1138 ypos 263 } Gamma { channels rgb value {{rolloffGamma}} name Gamma1 xpos 1138 ypos 287 } Dot { name Dot19 xpos 1172 ypos 364 } set N2cf84f00 [stack 0] Dot { name Dot20 xpos 1172 ypos 478 } set N2cf84800 [stack 0] Dot { name Dot21 xpos 1172 ypos 586 } Shuffle { red blue green blue alpha blue name Shuffle3 tile_color 0x3fbfff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 1022 ypos 579 } push $N2d028800 Dot { name Dot23 xpos 706 ypos -151 } Dot { name Dot8 label "Black Color" note_font_size 41 xpos 706 ypos 293 } set N2cf72b00 [stack 0] Dot { name Dot2 note_font_size 41 xpos 706 ypos 404 } set N2cf72400 [stack 0] Dot { name Dot3 note_font_size 41 xpos 706 ypos 523 } push $N2cf84800 Shuffle { red green blue green alpha green name Shuffle2 tile_color 0xbf00ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 1022 ypos 471 } push $N2cf72400 push $N2cf84f00 Shuffle { green red blue red alpha red name Shuffle1 tile_color 0xbf0000ff label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat --> \[value out2]] \}]" xpos 1016 ypos 357 } push $N2cf72b00 push $N2ce29600 Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} Bchannels {rgba.red -rgba.green -rgba.blue -rgba.alpha} output {rgba.red -rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge3 label red xpos 322 ypos 357 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} Bchannels {-rgba.red rgba.green -rgba.blue -rgba.alpha} output {-rgba.red rgba.green -rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge4 label green xpos 322 ypos 471 } Merge2 { inputs 2+1 operation {{parent.Settings.mergeOpNum}} bbox B Achannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} Bchannels {-rgba.red -rgba.green rgba.blue -rgba.alpha} output {-rgba.red -rgba.green rgba.blue -rgba.alpha} maskChannelInput -rgba.red name Merge5 label blue xpos 322 ypos 579 } Merge2 { inputs 2 operation max bbox B Achannels rgb Bchannels rgb output rgb name Merge1 label "Set Min Color\nto Blackpoint" xpos 322 ypos 748 } Premult { name Premult4 xpos 322 ypos 881 disable {{"! premultInput"}} } push $N2d043200 Dot { name Dot28 xpos -146 ypos -418 } Dot { name Dot30 xpos -146 ypos 1015 } Merge2 { inputs 2+1 operation copy bbox B Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} output {rgba.red rgba.green rgba.blue -rgba.alpha} mix 0.8 name MergeKeymix label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 322 ypos 1012 } Merge2 { inputs 2 name Merge10 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 322 ypos 1189 disable {{!previewPlotScan}} } Output { name Output1 xpos 322 ypos 1395 } NoOp { inputs 0 name Settings note_font_size 51 xpos 2494 ypos -414 addUserKnob {20 User} addUserKnob {7 mergeOpNum l "Merge Op Num"} mergeOpNum {{"mergeOp == 0 ? 24 : 13"}} } end_group Premult { name Premult2 selected true xpos -1034 ypos 3011 } Group { inputs 2 name LightWrapPro help "Adds exponentially blurred lightwrap\n\nAdds a bright highlight wrap and an overall wrap" tile_color 0x1e252eff label "(\[value outputView])" note_font "DejaVu Sans Bold" note_font_color 0xb7e6ffff selected true xpos -1034 ypos 3463 disable true mapsize {0.15 0.15} addUserKnob {20 LightWrapPro} addUserKnob {4 outputView l "Output View" t "Chose one to view while adjusting" M {"Final Output" "Highlight Key" "Highlight Wrap" "OverAll Wrap" "Effect Only" "" "" "" "" "" "" "" "" ""}} addUserKnob {6 premultiplied l "FG premultiplied" -STARTLINE} premultiplied true addUserKnob {26 highlightKeyTitle l "HighLight Key"} addUserKnob {7 blackPt l Black R 0 4} blackPt 1 addUserKnob {7 whitePt l White R 0 4} whitePt 2 addUserKnob {26 wrapHighlightsTitle l "HighLight Wrap"} addUserKnob {6 Mult_Flare_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {41 steps l " Steps" T ExponGlowWrapHighlight.steps} addUserKnob {41 falloffType l Falloff -STARTLINE T ExponGlowWrapHighlight.falloffType} addUserKnob {41 size l Size T ExponGlowWrapHighlight.size} addUserKnob {7 wrapHighlightAmount l Amount R 0 4} wrapHighlightAmount 1 addUserKnob {26 WrapAllTitle l "Overall Wrap "} addUserKnob {6 WrapAllMult_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {41 steps_1 l " Steps" T ExponGlowWrapAll.steps} addUserKnob {41 falloffType_1 l Falloff -STARTLINE T ExponGlowWrapAll.falloffType} addUserKnob {41 size_1 l Size T ExponGlowWrapAll.size} addUserKnob {7 wrapAllAmount l Amount R 0 4} wrapAllAmount 1 addUserKnob {6 removeHighlights l "Dim Highlights" +STARTLINE} removeHighlights true addUserKnob {7 dimHighlightsAmount l "" -STARTLINE R 0 3} dimHighlightsAmount 1 addUserKnob {26 blendEdgesTitle l "Blend Edges"} addUserKnob {7 blendEdgesAmount l Amount} addUserKnob {6 ColorBleedMult_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {26 bleedColorTitle l "Bleed Color"} addUserKnob {7 bleedColorAmount l Amount} addUserKnob {7 bleedColorSize l Size R 0.1 4} bleedColorSize 1 addUserKnob {7 bleedColorFalloff_2 l Falloff R 0.2 2} bleedColorFalloff_2 0.5 addUserKnob {26 ""} addUserKnob {7 globalAmount l "Global Amount"} globalAmount 1 addUserKnob {26 _1 l mask T ""} addUserKnob {41 maskChannelInput l "" -STARTLINE T MergeCopyLightWrapPro.maskChannelInput} addUserKnob {41 inject -STARTLINE T MergeCopyLightWrapPro.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeCopyLightWrapPro.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeCopyLightWrapPro.fringe} addUserKnob {41 mix T MergeCopyLightWrapPro.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "\n\n" T LightWrapPro} addUserKnob {26 ver l Version: T v06} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x402f27ff label "Bleed Color" note_font_size 60 note_font_color 0xffffffff xpos -683 ypos 2273 bdwidth 1316 bdheight 787 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x39464200 label "highlight key" note_font_size 40 note_font_color 0xffffffff xpos 1630 ypos 113 bdwidth 272 bdheight 393 } Input { inputs 0 name Inputmask xpos 1887 ypos 3580 number 2 } Input { inputs 0 name FG xpos -413 ypos -318 } AddChannels { channels rgba name AddChannels1 xpos -413 ypos -150 } Dot { name Dot1 xpos -379 ypos 375 } set N2cf0c100 [stack 0] Dot { name Dot7 xpos -825 ypos 375 } Dot { name Dot46 xpos -825 ypos 3104 } set N2cee7200 [stack 0] Dot { name Dot15 xpos 915 ypos 3107 } set N2cee6b00 [stack 0] Dot { name Dot26 note_font_size 41 xpos 915 ypos 3224 } set N2cee6400 [stack 0] Dot { name Dot32 note_font_size 41 xpos 915 ypos 3277 } push $N2cf0c100 Dot { name Dot8 note_font_size 41 xpos 717 ypos 378 } set N2cee5600 [stack 0] Dot { name Dot11 note_font_size 41 xpos 717 ypos 550 } Input { inputs 0 name BG label "\n" xpos 1702 ypos -276 number 1 } AddChannels { channels rgba name AddChannels2 xpos 1702 ypos -145 } Remove { operation keep channels rgba name Remove2 xpos 1702 ypos -68 } Dot { name Dot3 xpos 1736 ypos 177 } set N2cedab00 [stack 0] Keyer { operation "luminance key" range {{parent.blackPt} {parent.whitePt} {range.B} {range.B}} name Keyer2 xpos 1702 ypos 303 } Dot { name Dot4 note_font_size 41 xpos 1736 ypos 397 } set N2ced9d00 [stack 0] Premult { name Premult1 xpos 1702 ypos 452 } Multiply { inputs 1+1 channels rgba value 0 name Multiply1 label "\[value value]" xpos 1702 ypos 543 } Dot { name Dot30 note_font_size 41 xpos 1734 ypos 746 } Group { name ExponGlowWrapHighlight onCreate "n = nuke.thisNode()\nn.knob('size').setRange(0, 50)\n#n.knob('exp').setRange(1, 4)\nnuke.thisNode().knob('steps').setFlag(0x02000000)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"includeOriginal\":\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n\n else:\n merge.setInput(steps+1, None)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps)\n\nelif k.name() == \"steps\":\n\n s = int(k.value())\n if s<1:\n k.setValue(1)\n else:\n start = nuke.toNode(\"Start\")\n end = nuke.toNode(\"End\")\n b1 = nuke.toNode(\"Blur1\")\n m1 = nuke.toNode(\"Multiply1\")\n merge = nuke.toNode(\"Merge1\")\n AvgMult = nuke.toNode(\"AverageMult\")\n\n b1x = b1.xpos()\n b1y = b1.ypos()\n b1n = b1.name()\n\n m1x = m1.xpos()\n m1y = m1.ypos()\n m1n = m1.name()\n\n steps = int(n.knob('steps').getValue())\n size = n.knob('size').getValue()\n mult = n.knob('exp').getValue()\n\n #b1.setInput(0, start)\n for i in range(1,merge.inputs()):\n merge.setInput(i,None)\n merge.setInput(0, m1)\n \[nuke.delete(i) for i in nuke.allNodes() if i.xpos()>start.xpos()]\n for i in range(1,steps):\n # Blur\n b = nuke.nodes.Blur()\n m = nuke.nodes.Multiply()\n b.setXYpos(b1x+i*100,b1y)\n b.setInput(0,start)\n b\[\"channels\"].setValue(\"all\")\n b\[\"crop\"].setValue(0)\n b\[\"size\"].setValue(0, 1)\n b\[\"size\"].setExpression( \"((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(\{\}**2))\".format(str(i+1)), 0 )\n b\[\"size\"].setExpression( \"((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(\{\}**2))\".format(str(i+1)), 1 )\n b\[\"label\"].setValue('')\n blurAbove = b.name()\n\n m.setXYpos(m1x+i*100,m1y)\n m.setInput(0, nuke.toNode(blurAbove))\n m\[\"channels\"].setValue(\"all\")\n m\[\"value\"].setValue(1,1,1,1)\n j = 1-(i/steps)\n m\[\"value\"].setExpression('falloffType == 0 ? \{\} :falloffType == 1 ? pow(\{\}, 3) : falloffType == 2 ? \{\}*\{\}*(3-2*\{\}) : falloffType == 3 ? \{\}*\{\}*(2 - \{\}) : falloffType == 4 ? \{\}*(1 + \{\}*(1 - \{\})) : 0'.format(j,j,j,j,j,j,j,j,j,j,j))\n m\[\"mix\"].setExpression(\"falloff\")\n m\[\"label\"].setValue('')\n\n merge.setInput(i if i<2 else i+1, m)\n AvgMult\['whitepoint'].setValue(i if i<2 else i+1)\n\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n\nelif k.name() == \"output2\":\n if n.knob(\"output2\").getValue() == 4:\n n.knob('AvgMaxOriginal').setVisible(True)\n else:\n n.knob('AvgMaxOriginal').setVisible(False)\n\n" tile_color 0xcc804eff label "(\[value output2])" note_font "Verdana Bold" note_font_color 0xffffffff xpos 1700 ypos 1012 addUserKnob {20 ExponBlurSimple} addUserKnob {41 channels T Remove1.channels} addUserKnob {26 ""} addUserKnob {4 output2 l Operation: M {Screen Plus Over Hypot Average Max Min "" "" "" "" ""}} output2 Over addUserKnob {3 steps l " Steps" -STARTLINE} steps 6 addUserKnob {26 text l " " T " "} addUserKnob {6 includeOriginal l "Include Original?" -STARTLINE} addUserKnob {6 AvgMaxOriginal l "Use Max of Average and Original" +HIDDEN +STARTLINE} AvgMaxOriginal true addUserKnob {14 size l Size R 0 50} size 4 addUserKnob {14 exp l Exponent +INVISIBLE R 1 4} exp 3 addUserKnob {6 color_rgba_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {7 falloff l Falloff} falloff 1 addUserKnob {4 falloffType l "Falloff Type" M {Linear pLinear smooth smooth0 smooth1 ""}} falloffType smooth1 addUserKnob {14 postBlur l "Post Blur" R 0 100} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {14 safeBBoxPixels l "" +STARTLINE +HIDDEN R 0 400} safeBBoxPixels 100 addUserKnob {14 adjustBBoxPercent l "" -STARTLINE +HIDDEN R 1 2} adjustBBoxPercent 1 addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Add description and tooltip for gizmo" T ExponBlurSimple} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Inputmask xpos 346 ypos 596 number 1 } Dot { name Dot19 label Mask note_font_size 41 xpos 380 ypos 662 } Dot { name Dot10 note_font_size 41 xpos 380 ypos 899 } Input { inputs 0 name Inputimg xpos -221 ypos -1229 } Dot { name Dot16 note_font_size 41 xpos -187 ypos -1062 } set N2c489600 [stack 0] Dot { name Dot1 note_font_size 41 xpos 461 ypos -1058 } Remove { operation keep channels rgba name Remove1 xpos 427 ypos -980 } NoOp { name aspectCalc xpos 427 ypos -939 addUserKnob {20 User} addUserKnob {14 aspect R 0 100} aspect {{parent.size.w} {parent.size.h/format.pixel_aspect/height*width}} } Dot { name Dot21 note_font_size 41 xpos 461 ypos -853 } set N2c46b900 [stack 0] Invert { name Invert1 xpos 864 ypos -860 disable {{"parent.size < 0 ? 0 : 1"}} } set N2c46b200 [stack 0] Dot { name Dot4 note_font_size 41 xpos 540 ypos -604 } NoOp { name Original xpos 506 ypos -327 } Dot { name Dot5 note_font_size 41 xpos 540 ypos 100 } push $N2c46b200 NoOp { name Start xpos 864 ypos -706 } set N2c469600 [stack 0] Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(6**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(6**2))}} crop false name Blur6 xpos 1364 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.166666666667 :falloffType == 1 ? pow(0.166666666667, 3) : falloffType == 2 ? 0.166666666667*0.166666666667*(3-2*0.166666666667) : falloffType == 3 ? 0.166666666667*0.166666666667*(2 - 0.166666666667) : falloffType == 4 ? 0.166666666667*(1 + 0.166666666667*(1 - 0.166666666667)) : 0"} {"falloffType == 0 ? 0.166666666667 :falloffType == 1 ? pow(0.166666666667, 3) : falloffType == 2 ? 0.166666666667*0.166666666667*(3-2*0.166666666667) : falloffType == 3 ? 0.166666666667*0.166666666667*(2 - 0.166666666667) : falloffType == 4 ? 0.166666666667*(1 + 0.166666666667*(1 - 0.166666666667)) : 0"} {"falloffType == 0 ? 0.166666666667 :falloffType == 1 ? pow(0.166666666667, 3) : falloffType == 2 ? 0.166666666667*0.166666666667*(3-2*0.166666666667) : falloffType == 3 ? 0.166666666667*0.166666666667*(2 - 0.166666666667) : falloffType == 4 ? 0.166666666667*(1 + 0.166666666667*(1 - 0.166666666667)) : 0"} {"falloffType == 0 ? 0.166666666667 :falloffType == 1 ? pow(0.166666666667, 3) : falloffType == 2 ? 0.166666666667*0.166666666667*(3-2*0.166666666667) : falloffType == 3 ? 0.166666666667*0.166666666667*(2 - 0.166666666667) : falloffType == 4 ? 0.166666666667*(1 + 0.166666666667*(1 - 0.166666666667)) : 0"}} mix {{falloff}} name Multiply6 xpos 1364 ypos -477 } push $N2c469600 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(5**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(5**2))}} crop false name Blur5 xpos 1264 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.333333333333 :falloffType == 1 ? pow(0.333333333333, 3) : falloffType == 2 ? 0.333333333333*0.333333333333*(3-2*0.333333333333) : falloffType == 3 ? 0.333333333333*0.333333333333*(2 - 0.333333333333) : falloffType == 4 ? 0.333333333333*(1 + 0.333333333333*(1 - 0.333333333333)) : 0"} {"falloffType == 0 ? 0.333333333333 :falloffType == 1 ? pow(0.333333333333, 3) : falloffType == 2 ? 0.333333333333*0.333333333333*(3-2*0.333333333333) : falloffType == 3 ? 0.333333333333*0.333333333333*(2 - 0.333333333333) : falloffType == 4 ? 0.333333333333*(1 + 0.333333333333*(1 - 0.333333333333)) : 0"} {"falloffType == 0 ? 0.333333333333 :falloffType == 1 ? pow(0.333333333333, 3) : falloffType == 2 ? 0.333333333333*0.333333333333*(3-2*0.333333333333) : falloffType == 3 ? 0.333333333333*0.333333333333*(2 - 0.333333333333) : falloffType == 4 ? 0.333333333333*(1 + 0.333333333333*(1 - 0.333333333333)) : 0"} {"falloffType == 0 ? 0.333333333333 :falloffType == 1 ? pow(0.333333333333, 3) : falloffType == 2 ? 0.333333333333*0.333333333333*(3-2*0.333333333333) : falloffType == 3 ? 0.333333333333*0.333333333333*(2 - 0.333333333333) : falloffType == 4 ? 0.333333333333*(1 + 0.333333333333*(1 - 0.333333333333)) : 0"}} mix {{falloff}} name Multiply5 xpos 1264 ypos -477 } push $N2c469600 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(4**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(4**2))}} crop false name Blur4 xpos 1164 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"}} mix {{falloff}} name Multiply4 xpos 1164 ypos -477 } push $N2c469600 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(3**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(3**2))}} crop false name Blur3 xpos 1064 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.666666666667 :falloffType == 1 ? pow(0.666666666667, 3) : falloffType == 2 ? 0.666666666667*0.666666666667*(3-2*0.666666666667) : falloffType == 3 ? 0.666666666667*0.666666666667*(2 - 0.666666666667) : falloffType == 4 ? 0.666666666667*(1 + 0.666666666667*(1 - 0.666666666667)) : 0"} {"falloffType == 0 ? 0.666666666667 :falloffType == 1 ? pow(0.666666666667, 3) : falloffType == 2 ? 0.666666666667*0.666666666667*(3-2*0.666666666667) : falloffType == 3 ? 0.666666666667*0.666666666667*(2 - 0.666666666667) : falloffType == 4 ? 0.666666666667*(1 + 0.666666666667*(1 - 0.666666666667)) : 0"} {"falloffType == 0 ? 0.666666666667 :falloffType == 1 ? pow(0.666666666667, 3) : falloffType == 2 ? 0.666666666667*0.666666666667*(3-2*0.666666666667) : falloffType == 3 ? 0.666666666667*0.666666666667*(2 - 0.666666666667) : falloffType == 4 ? 0.666666666667*(1 + 0.666666666667*(1 - 0.666666666667)) : 0"} {"falloffType == 0 ? 0.666666666667 :falloffType == 1 ? pow(0.666666666667, 3) : falloffType == 2 ? 0.666666666667*0.666666666667*(3-2*0.666666666667) : falloffType == 3 ? 0.666666666667*0.666666666667*(2 - 0.666666666667) : falloffType == 4 ? 0.666666666667*(1 + 0.666666666667*(1 - 0.666666666667)) : 0"}} mix {{falloff}} name Multiply3 xpos 1064 ypos -477 } push 0 push $N2c469600 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(2**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(2**2))}} crop false name Blur2 xpos 964 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.833333333333 :falloffType == 1 ? pow(0.833333333333, 3) : falloffType == 2 ? 0.833333333333*0.833333333333*(3-2*0.833333333333) : falloffType == 3 ? 0.833333333333*0.833333333333*(2 - 0.833333333333) : falloffType == 4 ? 0.833333333333*(1 + 0.833333333333*(1 - 0.833333333333)) : 0"} {"falloffType == 0 ? 0.833333333333 :falloffType == 1 ? pow(0.833333333333, 3) : falloffType == 2 ? 0.833333333333*0.833333333333*(3-2*0.833333333333) : falloffType == 3 ? 0.833333333333*0.833333333333*(2 - 0.833333333333) : falloffType == 4 ? 0.833333333333*(1 + 0.833333333333*(1 - 0.833333333333)) : 0"} {"falloffType == 0 ? 0.833333333333 :falloffType == 1 ? pow(0.833333333333, 3) : falloffType == 2 ? 0.833333333333*0.833333333333*(3-2*0.833333333333) : falloffType == 3 ? 0.833333333333*0.833333333333*(2 - 0.833333333333) : falloffType == 4 ? 0.833333333333*(1 + 0.833333333333*(1 - 0.833333333333)) : 0"} {"falloffType == 0 ? 0.833333333333 :falloffType == 1 ? pow(0.833333333333, 3) : falloffType == 2 ? 0.833333333333*0.833333333333*(3-2*0.833333333333) : falloffType == 3 ? 0.833333333333*0.833333333333*(2 - 0.833333333333) : falloffType == 4 ? 0.833333333333*(1 + 0.833333333333*(1 - 0.833333333333)) : 0"}} mix {{falloff}} name Multiply2 xpos 964 ypos -477 } push $N2c469600 Blur { size {{(width/100*parent.size*(aspectCalc.aspect.w/100))} {(height/100*parent.size*(aspectCalc.aspect.h/100))}} crop false name Blur1 selected true xpos 864 ypos -554 } Multiply { value {1 1 1 1} mix {{falloff}} name Multiply1 xpos 864 ypos -477 } Merge2 { inputs 6+1 operation {{MergeNumber.mergeNumber}} also_merge all name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 864 ypos -327 } NoOp { name End xpos 864 ypos -279 } Grade { channels all whitepoint 6 black_clamp false name AverageMult xpos 864 ypos 49 disable {{"output2 == 4 ? 0 : 1"}} } Merge2 { inputs 2 operation max also_merge all name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 864 ypos 96 disable {{"output2 == 4 && includeOriginal == 1 && AvgMaxOriginal == 1 ? 0 : 1"}} } Blur { size {{postBlur} {postBlur}} name BlurOriginal xpos 864 ypos 155 } Invert { name Invert2 xpos 864 ypos 283 disable {{"parent.size < 0 ? 0 : 1"}} } push $N2c46b900 Switch { inputs 2 which {{"parent.size == 0 ? 0 : 1"}} name Switch1 label "\[value which]" xpos 427 ypos 283 } Crop { inputs 0 box {{input.format.x} {input.format.y} {input.format.r} {input.format.t}} reformat true crop false name Crop1 xpos 96 ypos -931 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } AddChannels { channels rgba name AddChannels2 xpos 96 ypos -891 } push $N2c489600 Merge2 { inputs 2 name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -60 ypos -891 } set N2c3d9600 [stack 0] Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"overscanType\":\n if n.knob(\"overscanType\").getValue() == 1:\n n.knob(\"overscanPercent\").setVisible(True)\n n.knob(\"overscan\").setVisible(False)\n else:\n n.knob(\"overscanPercent\").setVisible(False)\n n.knob(\"overscan\").setVisible(True)" tile_color 0xa57aaaff note_font "Verdana Bold" note_font_color 0xffffffff xpos 29 ypos -812 addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} overscanType Percentage addUserKnob {14 overscan l Overscan +HIDDEN R 0 400} addUserKnob {14 overscanPercent l "Overscan Percent" R 1 4} overscanPercent 1.2 addUserKnob {20 inputBbox l "BBox Data" n 1} addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set N2c3d8100 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set N2c19f900 [stack 0] push $N2c3d8100 Crop { box {{curve} {curve} {input.width} {input.height}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N2c19f200 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set N2c19eb00 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{input.bbox.r/2} {input.bbox.t/2}} shutteroffset centred name Transform1 xpos 120 ypos 555 } push $N2c19eb00 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $N2c19f900 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $N2c19f200 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N2c173200 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $N2c173200 NoOp { name OutputBBox1 selected true xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group push $N2c3d9600 Merge2 { inputs 2 name Merge4 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -60 ypos -748 } push $N2c489600 CopyBBox { inputs 2 name CopyBBox1 xpos -221 ypos -748 } Dot { name Dot22 note_font_size 41 xpos -187 ypos 198 } Merge2 { inputs 2 operation copy bbox B Achannels none Bchannels none output none also_merge {{{parent.Remove1.channels}}} name Merge5 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -221 ypos 283 } Dot { name Dot17 label A note_font_size 41 xpos -187 ypos 675 } Dot { name Dot7 note_font_size 41 xpos -187 ypos 805 } push $N2c489600 Dot { name Dot2 note_font_size 41 xpos -588 ypos -1062 } Dot { name Dot18 label B note_font_size 41 xpos -588 ypos 654 } Dot { name Dot3 note_font_size 41 xpos -588 ypos 895 } Merge2 { inputs 2+1 operation copy Achannels none Bchannels none output none also_merge all name MergeKeymix xpos -221 ypos 888 } Output { name Output1 xpos -221 ypos 1202 } NoOp { inputs 0 name MergeNumber xpos 202 ypos -1145 addUserKnob {20 User} addUserKnob {3 mergeNumber} mergeNumber {{"output2 == 0 ? 25 : output2 == 1 ? 24 : output2 == 2 ? 22 : output2 == 3 ? 13 : output2 == 4 ? 24 : output2 == 5 ? 17 : 18"}} } end_group Grade { channels all white {{wrapHighlightAmount/10}} name FlareAmount xpos 1702 ypos 1393 } Multiply { channels rgba value {{globalAmount}} name MultiplyGlobal3 label "\[value value]" xpos 1702 ypos 1577 } Dot { name Dot25 label "LIGHT FLARE" note_font_size 61 xpos 1736 ypos 1801 } set N2c12c100 [stack 0] Dot { name Dot31 note_font_size 41 xpos 1738 ypos 2915 } set N2c123900 [stack 0] push $N2cee5600 push $N2cedab00 Dot { name Dot20 xpos 1059 ypos 179 } Shuffle { alpha white name Shuffle1 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat -> \[value out2]] \}]" note_font_size 21 note_font_color 0xffffffff xpos 1025 ypos 238 } Multiply { inputs 1+1 channels rgba value 0 name Multiply2 label "\[value value]" xpos 1025 ypos 366 } Dot { name Dot9 xpos 1059 ypos 725 } set N2c121600 [stack 0] Dot { name Dot28 note_font_size 41 xpos 1343 ypos 725 } Keyer { operation "luminance key" name Keyer1 xpos 1309 ypos 823 } push $N2c121600 Colorspace { colorspace_out CIE-Yxy name Colorspace4 xpos 1188 ypos 786 } Expression { inputs 1+1 expr0 "(r*(1+(r/((parent.dimHighlightsAmount+1)**2))) ) / (1+r)" channel1 {-rgba.red -rgba.green -rgba.blue none} expr1 "(g*(1+(g/((parent.dimHighlightsAmount+1)**2))) ) / (1+g)" channel2 {-rgba.red -rgba.green -rgba.blue none} expr2 "(b*(1+(b/((parent.dimHighlightsAmount+1)**2))) ) / (1+b)" expr3 a name Tonemap_whitepoint xpos 1188 ypos 827 } Colorspace { colorspace_in CIE-Yxy name Colorspace3 xpos 1188 ypos 867 } push $N2c121600 Switch { inputs 2 which {{removeHighlights}} name Switch4 xpos 1025 ypos 867 } Group { name ExponGlowWrapAll onCreate "n = nuke.thisNode()\nn.knob('size').setRange(0, 50)\n#n.knob('exp').setRange(1, 4)\nnuke.thisNode().knob('steps').setFlag(0x02000000)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"includeOriginal\":\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n\n else:\n merge.setInput(steps+1, None)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps)\n\nelif k.name() == \"steps\":\n\n s = int(k.value())\n if s<1:\n k.setValue(1)\n else:\n start = nuke.toNode(\"Start\")\n end = nuke.toNode(\"End\")\n b1 = nuke.toNode(\"Blur1\")\n m1 = nuke.toNode(\"Multiply1\")\n merge = nuke.toNode(\"Merge1\")\n AvgMult = nuke.toNode(\"AverageMult\")\n\n b1x = b1.xpos()\n b1y = b1.ypos()\n b1n = b1.name()\n\n m1x = m1.xpos()\n m1y = m1.ypos()\n m1n = m1.name()\n\n steps = int(n.knob('steps').getValue())\n size = n.knob('size').getValue()\n mult = n.knob('exp').getValue()\n\n #b1.setInput(0, start)\n for i in range(1,merge.inputs()):\n merge.setInput(i,None)\n merge.setInput(0, m1)\n \[nuke.delete(i) for i in nuke.allNodes() if i.xpos()>start.xpos()]\n for i in range(1,steps):\n # Blur\n b = nuke.nodes.Blur()\n m = nuke.nodes.Multiply()\n b.setXYpos(b1x+i*100,b1y)\n b.setInput(0,start)\n b\[\"channels\"].setValue(\"all\")\n b\[\"crop\"].setValue(0)\n b\[\"size\"].setValue(0, 1)\n b\[\"size\"].setExpression( \"((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(\{\}**2))\".format(str(i+1)), 0 )\n b\[\"size\"].setExpression( \"((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(\{\}**2))\".format(str(i+1)), 1 )\n b\[\"label\"].setValue('')\n blurAbove = b.name()\n\n m.setXYpos(m1x+i*100,m1y)\n m.setInput(0, nuke.toNode(blurAbove))\n m\[\"channels\"].setValue(\"all\")\n m\[\"value\"].setValue(1,1,1,1)\n j = 1-(i/steps)\n m\[\"value\"].setExpression('falloffType == 0 ? \{\} :falloffType == 1 ? pow(\{\}, 3) : falloffType == 2 ? \{\}*\{\}*(3-2*\{\}) : falloffType == 3 ? \{\}*\{\}*(2 - \{\}) : falloffType == 4 ? \{\}*(1 + \{\}*(1 - \{\})) : 0'.format(j,j,j,j,j,j,j,j,j,j,j))\n m\[\"mix\"].setExpression(\"falloff\")\n m\[\"label\"].setValue('')\n\n merge.setInput(i if i<2 else i+1, m)\n AvgMult\['whitepoint'].setValue(i if i<2 else i+1)\n\n if n.knob('includeOriginal').getValue() == 1:\n merge = nuke.toNode(\"Merge1\")\n original = nuke.toNode('Original')\n AvgMult = nuke.toNode(\"AverageMult\")\n steps = int(n.knob('steps').getValue())\n merge.setInput(steps+1, original)\n AvgMult\['whitepoint'].setValue(2 if steps<2 else steps+1)\n\nelif k.name() == \"output2\":\n if n.knob(\"output2\").getValue() == 4:\n n.knob('AvgMaxOriginal').setVisible(True)\n else:\n n.knob('AvgMaxOriginal').setVisible(False)\n\n" tile_color 0xcc804eff label "(\[value output2])" note_font "Verdana Bold" note_font_color 0xffffffff xpos 1025 ypos 995 addUserKnob {20 ExponBlurSimple} addUserKnob {41 channels T Remove1.channels} addUserKnob {26 ""} addUserKnob {4 output2 l Operation: M {Screen Plus Over Hypot Average Max Min "" "" "" "" ""}} output2 Over addUserKnob {3 steps l " Steps" -STARTLINE} steps 8 addUserKnob {26 text l " " T " "} addUserKnob {6 includeOriginal l "Include Original?" -STARTLINE} addUserKnob {6 AvgMaxOriginal l "Use Max of Average and Original" +HIDDEN +STARTLINE} AvgMaxOriginal true addUserKnob {14 size l Size R 0 50} size 10 addUserKnob {14 exp l Exponent +INVISIBLE R 1 4} exp 3 addUserKnob {6 color_rgba_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {7 falloff l Falloff} falloff 1 addUserKnob {4 falloffType l "Falloff Type" M {Linear pLinear smooth smooth0 smooth1 ""}} falloffType pLinear addUserKnob {14 postBlur l "Post Blur" R 0 100} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {14 safeBBoxPixels l "" +STARTLINE +HIDDEN R 0 400} safeBBoxPixels 100 addUserKnob {14 adjustBBoxPercent l "" -STARTLINE +HIDDEN R 1 2} adjustBBoxPercent 1 addUserKnob {20 info l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "Add description and tooltip for gizmo" T ExponBlurSimple} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Inputmask xpos 346 ypos 596 number 1 } Dot { name Dot19 label Mask note_font_size 41 xpos 380 ypos 662 } Dot { name Dot10 note_font_size 41 xpos 380 ypos 899 } Input { inputs 0 name Inputimg xpos -221 ypos -1229 } Dot { name Dot16 note_font_size 41 xpos -187 ypos -1062 } set N2c100100 [stack 0] Dot { name Dot1 note_font_size 41 xpos 461 ypos -1058 } Remove { operation keep channels rgba name Remove1 xpos 427 ypos -980 } NoOp { name aspectCalc xpos 427 ypos -939 addUserKnob {20 User} addUserKnob {14 aspect R 0 100} aspect {{parent.size.w} {parent.size.h/format.pixel_aspect/height*width}} } Dot { name Dot21 note_font_size 41 xpos 461 ypos -853 } set N2c0ca400 [stack 0] Invert { name Invert1 xpos 864 ypos -860 disable {{"parent.size < 0 ? 0 : 1"}} } set N2c0c9d00 [stack 0] Dot { name Dot4 note_font_size 41 xpos 540 ypos -604 } NoOp { name Original xpos 506 ypos -327 } Dot { name Dot5 note_font_size 41 xpos 540 ypos 100 } push $N2c0c9d00 NoOp { name Start xpos 864 ypos -706 } set N2c0c8100 [stack 0] Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(8**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(8**2))}} crop false name Blur8 xpos 1564 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.125 :falloffType == 1 ? pow(0.125, 3) : falloffType == 2 ? 0.125*0.125*(3-2*0.125) : falloffType == 3 ? 0.125*0.125*(2 - 0.125) : falloffType == 4 ? 0.125*(1 + 0.125*(1 - 0.125)) : 0"} {"falloffType == 0 ? 0.125 :falloffType == 1 ? pow(0.125, 3) : falloffType == 2 ? 0.125*0.125*(3-2*0.125) : falloffType == 3 ? 0.125*0.125*(2 - 0.125) : falloffType == 4 ? 0.125*(1 + 0.125*(1 - 0.125)) : 0"} {"falloffType == 0 ? 0.125 :falloffType == 1 ? pow(0.125, 3) : falloffType == 2 ? 0.125*0.125*(3-2*0.125) : falloffType == 3 ? 0.125*0.125*(2 - 0.125) : falloffType == 4 ? 0.125*(1 + 0.125*(1 - 0.125)) : 0"} {"falloffType == 0 ? 0.125 :falloffType == 1 ? pow(0.125, 3) : falloffType == 2 ? 0.125*0.125*(3-2*0.125) : falloffType == 3 ? 0.125*0.125*(2 - 0.125) : falloffType == 4 ? 0.125*(1 + 0.125*(1 - 0.125)) : 0"}} mix {{falloff}} name Multiply8 xpos 1564 ypos -477 } push $N2c0c8100 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(7**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(7**2))}} crop false name Blur7 xpos 1464 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.25 :falloffType == 1 ? pow(0.25, 3) : falloffType == 2 ? 0.25*0.25*(3-2*0.25) : falloffType == 3 ? 0.25*0.25*(2 - 0.25) : falloffType == 4 ? 0.25*(1 + 0.25*(1 - 0.25)) : 0"} {"falloffType == 0 ? 0.25 :falloffType == 1 ? pow(0.25, 3) : falloffType == 2 ? 0.25*0.25*(3-2*0.25) : falloffType == 3 ? 0.25*0.25*(2 - 0.25) : falloffType == 4 ? 0.25*(1 + 0.25*(1 - 0.25)) : 0"} {"falloffType == 0 ? 0.25 :falloffType == 1 ? pow(0.25, 3) : falloffType == 2 ? 0.25*0.25*(3-2*0.25) : falloffType == 3 ? 0.25*0.25*(2 - 0.25) : falloffType == 4 ? 0.25*(1 + 0.25*(1 - 0.25)) : 0"} {"falloffType == 0 ? 0.25 :falloffType == 1 ? pow(0.25, 3) : falloffType == 2 ? 0.25*0.25*(3-2*0.25) : falloffType == 3 ? 0.25*0.25*(2 - 0.25) : falloffType == 4 ? 0.25*(1 + 0.25*(1 - 0.25)) : 0"}} mix {{falloff}} name Multiply7 xpos 1464 ypos -477 } push $N2c0c8100 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(6**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(6**2))}} crop false name Blur6 xpos 1364 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.375 :falloffType == 1 ? pow(0.375, 3) : falloffType == 2 ? 0.375*0.375*(3-2*0.375) : falloffType == 3 ? 0.375*0.375*(2 - 0.375) : falloffType == 4 ? 0.375*(1 + 0.375*(1 - 0.375)) : 0"} {"falloffType == 0 ? 0.375 :falloffType == 1 ? pow(0.375, 3) : falloffType == 2 ? 0.375*0.375*(3-2*0.375) : falloffType == 3 ? 0.375*0.375*(2 - 0.375) : falloffType == 4 ? 0.375*(1 + 0.375*(1 - 0.375)) : 0"} {"falloffType == 0 ? 0.375 :falloffType == 1 ? pow(0.375, 3) : falloffType == 2 ? 0.375*0.375*(3-2*0.375) : falloffType == 3 ? 0.375*0.375*(2 - 0.375) : falloffType == 4 ? 0.375*(1 + 0.375*(1 - 0.375)) : 0"} {"falloffType == 0 ? 0.375 :falloffType == 1 ? pow(0.375, 3) : falloffType == 2 ? 0.375*0.375*(3-2*0.375) : falloffType == 3 ? 0.375*0.375*(2 - 0.375) : falloffType == 4 ? 0.375*(1 + 0.375*(1 - 0.375)) : 0"}} mix {{falloff}} name Multiply6 xpos 1364 ypos -477 } push $N2c0c8100 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(5**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(5**2))}} crop false name Blur5 xpos 1264 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"} {"falloffType == 0 ? 0.5 :falloffType == 1 ? pow(0.5, 3) : falloffType == 2 ? 0.5*0.5*(3-2*0.5) : falloffType == 3 ? 0.5*0.5*(2 - 0.5) : falloffType == 4 ? 0.5*(1 + 0.5*(1 - 0.5)) : 0"}} mix {{falloff}} name Multiply5 xpos 1264 ypos -477 } push $N2c0c8100 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(4**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(4**2))}} crop false name Blur4 xpos 1164 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.625 :falloffType == 1 ? pow(0.625, 3) : falloffType == 2 ? 0.625*0.625*(3-2*0.625) : falloffType == 3 ? 0.625*0.625*(2 - 0.625) : falloffType == 4 ? 0.625*(1 + 0.625*(1 - 0.625)) : 0"} {"falloffType == 0 ? 0.625 :falloffType == 1 ? pow(0.625, 3) : falloffType == 2 ? 0.625*0.625*(3-2*0.625) : falloffType == 3 ? 0.625*0.625*(2 - 0.625) : falloffType == 4 ? 0.625*(1 + 0.625*(1 - 0.625)) : 0"} {"falloffType == 0 ? 0.625 :falloffType == 1 ? pow(0.625, 3) : falloffType == 2 ? 0.625*0.625*(3-2*0.625) : falloffType == 3 ? 0.625*0.625*(2 - 0.625) : falloffType == 4 ? 0.625*(1 + 0.625*(1 - 0.625)) : 0"} {"falloffType == 0 ? 0.625 :falloffType == 1 ? pow(0.625, 3) : falloffType == 2 ? 0.625*0.625*(3-2*0.625) : falloffType == 3 ? 0.625*0.625*(2 - 0.625) : falloffType == 4 ? 0.625*(1 + 0.625*(1 - 0.625)) : 0"}} mix {{falloff}} name Multiply4 xpos 1164 ypos -477 } push $N2c0c8100 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(3**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(3**2))}} crop false name Blur3 xpos 1064 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.75 :falloffType == 1 ? pow(0.75, 3) : falloffType == 2 ? 0.75*0.75*(3-2*0.75) : falloffType == 3 ? 0.75*0.75*(2 - 0.75) : falloffType == 4 ? 0.75*(1 + 0.75*(1 - 0.75)) : 0"} {"falloffType == 0 ? 0.75 :falloffType == 1 ? pow(0.75, 3) : falloffType == 2 ? 0.75*0.75*(3-2*0.75) : falloffType == 3 ? 0.75*0.75*(2 - 0.75) : falloffType == 4 ? 0.75*(1 + 0.75*(1 - 0.75)) : 0"} {"falloffType == 0 ? 0.75 :falloffType == 1 ? pow(0.75, 3) : falloffType == 2 ? 0.75*0.75*(3-2*0.75) : falloffType == 3 ? 0.75*0.75*(2 - 0.75) : falloffType == 4 ? 0.75*(1 + 0.75*(1 - 0.75)) : 0"} {"falloffType == 0 ? 0.75 :falloffType == 1 ? pow(0.75, 3) : falloffType == 2 ? 0.75*0.75*(3-2*0.75) : falloffType == 3 ? 0.75*0.75*(2 - 0.75) : falloffType == 4 ? 0.75*(1 + 0.75*(1 - 0.75)) : 0"}} mix {{falloff}} name Multiply3 xpos 1064 ypos -477 } push 0 push $N2c0c8100 Blur { size {{((width/100*parent.size.w)*(aspectCalc.aspect.w/100)*(2**2))} {((height/100*parent.size.h)*(aspectCalc.aspect.h/100)*(2**2))}} crop false name Blur2 xpos 964 ypos -554 } Multiply { value {{"falloffType == 0 ? 0.875 :falloffType == 1 ? pow(0.875, 3) : falloffType == 2 ? 0.875*0.875*(3-2*0.875) : falloffType == 3 ? 0.875*0.875*(2 - 0.875) : falloffType == 4 ? 0.875*(1 + 0.875*(1 - 0.875)) : 0"} {"falloffType == 0 ? 0.875 :falloffType == 1 ? pow(0.875, 3) : falloffType == 2 ? 0.875*0.875*(3-2*0.875) : falloffType == 3 ? 0.875*0.875*(2 - 0.875) : falloffType == 4 ? 0.875*(1 + 0.875*(1 - 0.875)) : 0"} {"falloffType == 0 ? 0.875 :falloffType == 1 ? pow(0.875, 3) : falloffType == 2 ? 0.875*0.875*(3-2*0.875) : falloffType == 3 ? 0.875*0.875*(2 - 0.875) : falloffType == 4 ? 0.875*(1 + 0.875*(1 - 0.875)) : 0"} {"falloffType == 0 ? 0.875 :falloffType == 1 ? pow(0.875, 3) : falloffType == 2 ? 0.875*0.875*(3-2*0.875) : falloffType == 3 ? 0.875*0.875*(2 - 0.875) : falloffType == 4 ? 0.875*(1 + 0.875*(1 - 0.875)) : 0"}} mix {{falloff}} name Multiply2 xpos 964 ypos -477 } push $N2c0c8100 Blur { size {{(width/100*parent.size*(aspectCalc.aspect.w/100))} {(height/100*parent.size*(aspectCalc.aspect.h/100))}} crop false name Blur1 xpos 864 ypos -554 } Multiply { value {1 1 1 1} mix {{falloff}} name Multiply1 xpos 864 ypos -477 } Merge2 { inputs 8+1 operation {{MergeNumber.mergeNumber}} also_merge all name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 864 ypos -327 } NoOp { name End xpos 864 ypos -279 } Grade { channels all whitepoint 8 black_clamp false name AverageMult xpos 864 ypos 49 disable {{"output2 == 4 ? 0 : 1"}} } Merge2 { inputs 2 operation max also_merge all name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 864 ypos 96 disable {{"output2 == 4 && includeOriginal == 1 && AvgMaxOriginal == 1 ? 0 : 1"}} } Blur { size {{postBlur} {postBlur}} name BlurOriginal xpos 864 ypos 155 } Invert { name Invert2 xpos 864 ypos 283 disable {{"parent.size < 0 ? 0 : 1"}} } push $N2c0ca400 Switch { inputs 2 which {{"parent.size == 0 ? 0 : 1"}} name Switch1 label "\[value which]" xpos 427 ypos 283 } Crop { inputs 0 box {{input.format.x} {input.format.y} {input.format.r} {input.format.t}} reformat true crop false name Crop1 xpos 96 ypos -931 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } AddChannels { channels rgba name AddChannels2 xpos 96 ypos -891 } push $N2c100100 Merge2 { inputs 2 name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -60 ypos -891 } set N2c205600 [stack 0] Group { name BBoxToFormat onCreate "n = nuke.thisNode()\ninputFormat = n.knob(\"inputFormat\")\ninputBBox = n.knob(\"inputBBox\")\ncrop = nuke.toNode(\"Crop6\")\ncropb = crop.knob('box')\noutputBBox = n.knob('outputBBox')\noutputBBoxCenter = n.knob(\"outputBBoxCenter\")\n\ninputFormat.setFlag(0x0000000000008000)\ninputBBox.setFlag(0x0000000000008000)\ncropb.setFlag(0x0000000000008000)\noutputBBox.setFlag(0x0000000000008000)\noutputBBoxCenter.setFlag(0x0000000000008000)\n\nn = nuke.thisNode()\nn.knob(\"overscan\").setRange(0,400)\nn.knob(\"overscanPercent\").setRange(1,4)" knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\nif k.name() == \"overscanType\":\n if n.knob(\"overscanType\").getValue() == 1:\n n.knob(\"overscanPercent\").setVisible(True)\n n.knob(\"overscan\").setVisible(False)\n else:\n n.knob(\"overscanPercent\").setVisible(False)\n n.knob(\"overscan\").setVisible(True)" tile_color 0xa57aaaff note_font "Verdana Bold" note_font_color 0xffffffff xpos 29 ypos -812 addUserKnob {20 CropBBox} addUserKnob {4 type l Type +INVISIBLE M {"To Format" "To BBox"}} addUserKnob {41 intersect T Crop6.intersect} addUserKnob {6 blackOutside l "Black Outside" -STARTLINE} addUserKnob {4 overscanType l "Overscan Type:" M {Pixels Percentage}} overscanType Percentage addUserKnob {14 overscan l Overscan +HIDDEN R 0 400} addUserKnob {14 overscanPercent l "Overscan Percent" R 1 4} overscanPercent 1.2 addUserKnob {20 inputBbox l "BBox Data" n 1} addUserKnob {15 inputFormat l "Input Format"} inputFormat {0 0 {input.width} {input.height}} addUserKnob {15 inputBBox l "Input BBox"} inputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {12 outputBBoxCenter l OutputBBoxCenter} outputBBoxCenter {{OutputBBox1.outputBBoxCenter.w} {OutputBBox1.outputBBoxCenter.h}} addUserKnob {15 outputBBox l "Output BBox"} outputBBox {{OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox} {OutputBBox1.OutputBBox}} addUserKnob {20 endGroup n -1} addUserKnob {20 info_1 l Info} addUserKnob {26 creator l Creator: T "Tony Lyons"} addUserKnob {26 desc l Description: t "crop to inputformat\n\ndisplays values of input bbox" T CropBBox} addUserKnob {26 ver l Version: T v02} } Input { inputs 0 name Input xpos 261 ypos 394 } Dot { name Dot2 note_font_size 41 xpos 295 ypos 462 } set N2c204100 [stack 0] Dot { name Dot1 note_font_size 41 xpos -160 ypos 462 } set N2c1df900 [stack 0] push $N2c204100 Crop { box {{curve} {curve} {input.width} {input.height}} crop {{parent.blackOutside}} name Crop6 xpos 261 ypos 510 addUserKnob {20 User} addUserKnob {22 cropToBbox l "Crop to Bounding Box" -STARTLINE T codeBBox()} } set N2c1df200 [stack 0] Remove { operation keep channels none name Remove1 xpos 120 ypos 504 } set N2c1deb00 [stack 0] Transform { scale {{parent.overscanPercent} {parent.overscanPercent}} center {{input.bbox.r/2} {input.bbox.t/2}} shutteroffset centred name Transform1 xpos 120 ypos 555 } push $N2c1deb00 AdjBBox { numpixels {{parent.overscan} {parent.overscan}} name AdjBBox1 xpos -5 ypos 510 } Switch { inputs 2 which {{overscanType}} name Switch2 label "\[value which]" xpos -5 ypos 549 } Merge2 { inputs 2 bbox intersection Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} output {-rgba.red -rgba.green -rgba.blue rgba.alpha} name Merge1 xpos -5 ypos 647 disable {{!parent.Crop6.intersect}} } push $N2c1df900 CopyBBox { inputs 2 name CopyBBox1 xpos -194 ypos 653 } BlackOutside { name BlackOutside1 xpos -194 ypos 692 disable {{!parent.blackOutside}} } Dot { name Dot4 note_font_size 41 xpos -160 ypos 769 } push $N2c1df200 Switch { inputs 2 which {{"overscanType == 0 ? overscan.w != 0 || overscan.h != 0 : overscanPercent.w != 1 || overscanPercent.h != 1 ? 1 : 0"}} name Switch1 label "\[value which]" xpos 261 ypos 759 } set N2c1af200 [stack 0] Output { name Output1 xpos 261 ypos 921 } push $N2c1af200 NoOp { name OutputBBox1 selected true xpos 378 ypos 821 addUserKnob {20 User} addUserKnob {15 OutputBBox l "Output BBox"} OutputBBox {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}} addUserKnob {14 outputBBoxCenter l "Output BBox Center" R 0 100} outputBBoxCenter {{OutputBBox.x+(OutputBBox.r-OutputBBox.x)/2} {OutputBBox.y+(OutputBBox.t-OutputBBox.y)/2}} } end_group push $N2c205600 Merge2 { inputs 2 name Merge4 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -60 ypos -748 } push $N2c100100 CopyBBox { inputs 2 name CopyBBox1 xpos -221 ypos -748 } Dot { name Dot22 note_font_size 41 xpos -187 ypos 198 } Merge2 { inputs 2 operation copy bbox B Achannels none Bchannels none output none also_merge {{{parent.Remove1.channels}}} name Merge5 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -221 ypos 283 } Dot { name Dot17 label A note_font_size 41 xpos -187 ypos 675 } Dot { name Dot7 note_font_size 41 xpos -187 ypos 805 } push $N2c100100 Dot { name Dot2 note_font_size 41 xpos -588 ypos -1062 } Dot { name Dot18 label B note_font_size 41 xpos -588 ypos 654 } Dot { name Dot3 note_font_size 41 xpos -588 ypos 895 } Merge2 { inputs 2+1 operation copy Achannels none Bchannels none output none also_merge all name MergeKeymix xpos -221 ypos 888 } Output { name Output1 xpos -221 ypos 1202 } NoOp { inputs 0 name MergeNumber xpos 202 ypos -1145 addUserKnob {20 User} addUserKnob {3 mergeNumber} mergeNumber {{"output2 == 0 ? 25 : output2 == 1 ? 24 : output2 == 2 ? 22 : output2 == 3 ? 13 : output2 == 4 ? 24 : output2 == 5 ? 17 : 18"}} } end_group Dot { name Dot40 note_font_size 41 xpos 1059 ypos 1277 } set N2c388800 [stack 0] Grade { channels all white {{wrapAllAmount/10}} name GradeBgWrapAmount xpos 1025 ypos 1399 } Multiply { channels rgba value {{globalAmount}} name MultiplyGlobal1 label "\[value value]" xpos 1025 ypos 1566 } Dot { name Dot37 label "WRAP ALL" note_font_size 61 xpos 1059 ypos 1692 } set N2c35b900 [stack 0] Dot { name Dot27 note_font_size 41 xpos 1059 ypos 3062 } set N2c35b200 [stack 0] Merge2 { inputs 2 name Merge1 xpos 1530 ypos 3168 } Shuffle { alpha white name Shuffle5 tile_color 0xffffffff note_font_color 0xffffffff xpos 1530 ypos 3216 } Merge2 { inputs 2 operation mask name Merge14 xpos 1530 ypos 3274 } push $N2cee6400 push $N2c35b200 Shuffle { alpha white name Shuffle2 tile_color 0xffffffff note_font_color 0xffffffff xpos 1025 ypos 3158 } Merge2 { inputs 2 operation mask name Merge7 xpos 1025 ypos 3221 } push $N2cee6b00 push $N2c123900 Shuffle { alpha white name Shuffle4 tile_color 0xffffffff note_font_color 0xffffffff xpos 1708 ypos 3020 } Merge2 { inputs 2 operation mask name Merge13 xpos 1708 ypos 3104 } push $N2ced9d00 Dot { name Dot21 xpos 2349 ypos 397 } Shuffle { red alpha green alpha blue alpha name Shuffle3 tile_color 0xffffffff label alpha note_font_size 21 note_font_color 0xffffffff xpos 2315 ypos 496 } Dot { name Dot23 xpos 2349 ypos 3399 } push $N2c388800 Dot { name Dot29 note_font_size 41 xpos 757 ypos 1277 } set N2c322400 [stack 0] Grade { channels rgba gamma {{parent.bleedColorFalloff_2}} name Grade1 selected true xpos 724 ypos 2638 } Dot { name Dot33 note_font_size 41 xpos 758 ypos 2835 } Multiply { channels rgba value {{globalAmount}} name MultiplyGlobal2 label "\[value value]" xpos 297 ypos 2828 } push $N2c121600 Dot { name Dot38 note_font_size 41 xpos 438 ypos 725 } set N2c310f00 [stack 0] Dot { name Dot2 note_font_size 41 xpos 439 ypos 802 } set N2c310800 [stack 0] Dot { name Dot17 note_font_size 41 xpos 334 ypos 802 } Dot { name Dot16 note_font_size 41 xpos 334 ypos 1201 } push $N2c310800 Blur { size {{(width/13*parent.bleedColorSize*16*(ExponGlowWrapAll.aspectCalc.aspect.w/100))} {(height/13*parent.bleedColorSize*16*(ExponGlowWrapAll.aspectCalc.aspect.h/100))}} crop false name Blur6 xpos 856 ypos 874 } push $N2c310800 Blur { size {{(width/13*parent.bleedColorSize*8*(ExponGlowWrapAll.aspectCalc.aspect.w/100))} {(height/13*parent.bleedColorSize*8*(ExponGlowWrapAll.aspectCalc.aspect.h/100))}} crop false name Blur4 xpos 743 ypos 873 } push $N2c310800 Blur { size {{(width/15*parent.bleedColorSize*4*(ExponGlowWrapAll.aspectCalc.aspect.w/100))} {(height/15*parent.bleedColorSize*4*(ExponGlowWrapAll.aspectCalc.aspect.h/100))}} crop false name Blur3 xpos 627 ypos 874 } push $N2c310800 Blur { size {{(width/20*parent.bleedColorSize*2*(ExponGlowWrapAll.aspectCalc.aspect.w/100))} {(height/20*parent.bleedColorSize*2*(ExponGlowWrapAll.aspectCalc.aspect.h/100))}} crop false name Blur2 xpos 515 ypos 872 } push $N2c310800 Blur { size {{(width/25*parent.bleedColorSize*(ExponGlowWrapAll.aspectCalc.aspect.w/100))} {(height/25*parent.bleedColorSize*(ExponGlowWrapAll.aspectCalc.aspect.h/100))}} crop false name Blur1 xpos 404 ypos 871 } Merge2 { inputs 2 operation under bbox B name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 404 ypos 941 } Merge2 { inputs 2 operation under bbox B name Merge4 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 404 ypos 999 } Merge2 { inputs 2 operation under bbox B name Merge8 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 404 ypos 1049 } Merge2 { inputs 2 operation under bbox B name Merge12 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 404 ypos 1087 } Unpremult { name Unpremult2 xpos 404 ypos 1111 } Blur { size {{(width/50*parent.bleedColorSize*10*(ExponGlowWrapAll.aspectCalc.aspect.w/100))} {(height/50*parent.bleedColorSize*10*(ExponGlowWrapAll.aspectCalc.aspect.h/100))}} crop false name Blur5 xpos 404 ypos 1151 } CopyBBox { inputs 2 name CopyBBox1 xpos 404 ypos 1198 } Unpremult { name Unpremult5 xpos 404 ypos 2385 } Colorspace { channels all colorspace_out HSV name Colorspace1 xpos 404 ypos 2456 } Multiply { value {1 1 0 1} name Multiply5 label "\[value value]" xpos 404 ypos 2532 } push $N2c12c100 push $N2c35b900 push $N2c310f00 Dot { name Dot10 xpos 201 ypos 725 } Clamp { minimum 0.001 maximum 100 name Clamp1 xpos 167 ypos 996 } Dot { name Dot24 xpos 201 ypos 1517 } Multiply { channels rgba value {{globalAmount}} name MultiplyGlobal label "\[value value]" xpos 19 ypos 1507 } push $N2c322400 Colorspace { channels all colorspace_out HSV name Colorspace6 xpos -13 ypos 1267 } Multiply { value {1 1 0 1} name Multiply4 label "\[value value]" xpos -123 ypos 1262 } push $N2cf0c100 Remove { operation keep channels rgba name Remove1 xpos -413 ypos 594 } Unpremult { channels all name Unpremult1 xpos -407 ypos 1094 disable {{premultiplied*-1+1 x1 1}} } set N17dba400 [stack 0] Dot { name Dot12 xpos -226 ypos 1101 } Colorspace { channels all colorspace_out HSV name Colorspace5 xpos -260 ypos 1140 } Multiply { value {0 0 1 1} name Multiply3 label "\[value value]" xpos -260 ypos 1188 } Merge2 { inputs 2 operation plus Achannels none Bchannels none output none also_merge all name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -260 ypos 1267 } Colorspace { channels all colorspace_in HSV name Colorspace7 xpos -260 ypos 1327 } Dot { name Dot36 label "BLEND EDGES" note_font_size 45 xpos -226 ypos 1408 } push $N17dba400 Dot { name Dot18 note_font_size 41 xpos -373 ypos 1514 } set N17d86b00 [stack 0] Merge2 { inputs 2+1 operation copy bbox B Achannels none Bchannels none output none also_merge all mix {{blendEdgesAmount}} name Merge10 xpos -260 ypos 1507 } Dot { name Dot22 note_font_size 41 xpos -226 ypos 1588 } push $N17d86b00 Switch { inputs 2 which {{"blendEdgesAmount == 0 ? 0 : 1"}} name Switch3 xpos -407 ypos 1585 } Merge2 { inputs 2 bbox B Achannels none Bchannels none output none also_merge all name Merge5 xpos -407 ypos 1685 } Merge2 { inputs 2 bbox B Achannels none Bchannels none output none also_merge all name Merge6 xpos -407 ypos 1791 } Dot { name Dot34 note_font_size 41 xpos -373 ypos 2417 } set N17d84100 [stack 0] Colorspace { channels all colorspace_out HSV name Colorspace2 xpos -81 ypos 2410 } Multiply { value {0 0 1 1} name Multiply6 label "\[value value]" xpos -81 ypos 2458 } Merge2 { inputs 2 operation plus Achannels none Bchannels none output none also_merge all name Merge11 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -81 ypos 2537 } Colorspace { channels all colorspace_in HSV name Colorspace8 xpos -81 ypos 2606 } push $N17dba400 Dot { name Dot13 xpos -579 ypos 1101 } Dot { name Dot14 xpos -579 ypos 2559 } push $N17d84100 Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos -407 ypos 2552 } Dot { name Dot6 note_font_size 41 xpos -373 ypos 2649 } set N17d60100 [stack 0] Merge2 { inputs 2+1 operation copy output {rgba.red rgba.green rgba.blue -rgba.alpha} mix {{bleedColorAmount}} name Merge9 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -81 ypos 2828 } push $N17d60100 Switch { inputs 2 which {{"parent.bleedColorAmount== 0 ? 0 : 1"}} name Switch2 xpos -407 ypos 2832 } Premult { name Premult3 xpos -407 ypos 2983 disable {{premultiplied*-1+1 i}} } Dot { name Dot19 xpos -373 ypos 3396 } Switch { inputs 5 which {{"\[value ls parent.outputView]"}} name Switch1 xpos 1708 ypos 3395 } push $N2cee7200 Dot { name Dot5 note_font_size 41 xpos -825 ypos 3581 } Merge2 { inputs 2+1 operation copy also_merge all name MergeCopyLightWrapPro label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 1708 ypos 3580 } Output { name Output1 xpos 1708 ypos 3898 } end_group Dot { name Dot323 selected true xpos -1000 ypos 4254 } Dot { name Dot324 note_font_size 41 selected true xpos 5884 ypos 4254 } set N17d03900 [stack 0] Remove { operation keep channels rgba name Remove7 selected true xpos 5994 ypos 4250 } push $N2f4eab00 Dot { name Dot121 note_font_size 41 selected true xpos -386 ypos 1434 } set N17d02b00 [stack 0] Shuffle { in cleanplate name Shuffle1 label "\[value in]" selected true xpos -420 ypos 1478 } Remove { operation keep channels rgba name Remove3 selected true xpos -420 ypos 1516 } NoOp { name Anchor_3d5fc4c58e help "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019" onCreate "if nuke.GUI:\n try:\n import stamps; stamps.anchorOnCreate()\n except:\n pass" knobChanged stamps.anchorKnobChanged() autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0xffffff01 note_font_size 20 selected true xpos -420 ypos 1568 addUserKnob {20 anchor_tab l "Anchor Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T anchor} addUserKnob {1 title l Title: t "Displayed name on the Node Graph for this Stamp and its Anchor.\nIMPORTANT: This is only for display purposes, and is different from the real/internal name of the Stamps."} title "GS cleanplate" addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T cleanplate} addUserKnob {26 prev_name l "" +STARTLINE +HIDDEN T Anchor_3d5fc4c58e} addUserKnob {3 showing l "" +STARTLINE +HIDDEN} addUserKnob {1 tags l Tags t "Comma-separated tags you can define for each Anchor, that will help you find it when invoking the Stamp Selector by pressing the Stamps shortkey with nothing selected."} tags 2D, addUserKnob {26 line1 l "" +STARTLINE} addUserKnob {26 stamps_label l Stamps: T " "} addUserKnob {22 createStamp l new t "Create a new Stamp for this Anchor." -STARTLINE T stamps.stampCreateWired(nuke.thisNode())} addUserKnob {22 selectStamps l select t "Reconnect all of this Anchor's Stamps." -STARTLINE T stamps.wiredSelectSimilar(nuke.thisNode().name())} addUserKnob {22 reconnectStamps l reconnect -STARTLINE T stamps.anchorReconnectWired()} addUserKnob {22 zoomNext l "zoom next" t "Navigate to this Anchor's next Stamp on the Node Graph." -STARTLINE T stamps.wiredZoomNext(nuke.thisNode().name())} addUserKnob {26 line2 l "" +STARTLINE} addUserKnob {22 buttonHelp l Help -STARTLINE T stamps.showHelp()} addUserKnob {26 version l " " t "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019." -STARTLINE T " Stamps v1.0"} } NoOp { name Stamp33 help "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019" onCreate "if nuke.GUI:\n try:\n import stamps; stamps.wiredOnCreate()\n except:\n pass\n" knobChanged "import stamps; stamps.wiredKnobChanged()" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 selected true xpos 6062 ypos 3811 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {3 lockCallbacks l "" +STARTLINE +HIDDEN} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} addUserKnob {1 title l Title: t "Displayed name on the Node Graph for this Stamp and its Anchor.\nIMPORTANT: This is only for display purposes, and is different from the real/internal name of the Stamps."} title "GS cleanplate" addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T "GS cleanplate"} addUserKnob {26 tags l Tags: t "Tags of this stamp's Anchor, for information purpose only.\nClick \"show anchor\" to change them." T 2D} addUserKnob {26 backdrops l Backdrops: t "Labels of backdrop nodes which contain this stamp's Anchor." T "Advanced Keying Template"} addUserKnob {26 line1 l "" +STARTLINE} addUserKnob {26 anchor_label l Anchor: T " "} addUserKnob {22 show_anchor l " show anchor " t "Show the properties panel for this Stamp's Anchor." -STARTLINE T stamps.wiredShowAnchor()} addUserKnob {22 zoom_anchor l "zoom anchor" t "Navigate to this Stamp's Anchor on the Node Graph." -STARTLINE T stamps.wiredZoomAnchor()} addUserKnob {26 stamps_label l Stamps: T " "} addUserKnob {22 zoomNext l " zoom next " t "Navigate to this Stamp's next sibling on the Node Graph." -STARTLINE T stamps.wiredZoomNext()} addUserKnob {22 selectSimilar l " select similar " t "Select all similar Stamps to this one on the Node Graph." -STARTLINE T stamps.wiredSelectSimilar()} addUserKnob {26 space_1 l "" +STARTLINE T " "} addUserKnob {26 reconnect_label l Reconnect: t "Reconnect by the stored Anchor name." T " "} addUserKnob {22 reconnect_this l this t "Reconnect this Stamp to its Anchor, by its stored Anchor name." -STARTLINE T "n = nuke.thisNode()\ntry:\n n.setInput(0,nuke.toNode(n.knob(\"anchor\").value()))\nexcept:\n nuke.message(\"Unable to reconnect.\")\ntry:\n import stamps\n stamps.wiredGetStyle(n)\nexcept:\n pass\n"} addUserKnob {22 reconnect_similar l similar t "Reconnect this Stamp and similar ones to their Anchor, by their stored anchor name." -STARTLINE T stamps.wiredReconnectSimilar()} addUserKnob {22 reconnect_all l all t "Reconnect all the Stamps to their Anchors, by their stored anchor names." -STARTLINE T stamps.wiredReconnectAll()} addUserKnob {26 space_2 l "" +STARTLINE T " "} addUserKnob {20 advanced_reconnection l "Advanced Reconnection" n 2} addUserKnob {26 reconnect_by_title_label l "By Title:" t "Reconnect by searching for a matching title." T " "} addUserKnob {22 reconnect_by_title_this l this t "Look for an Anchor that shares this Stamp's title, and connect this Stamp to it.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectByTitle()} addUserKnob {22 reconnect_by_title_similar l similar t "Look for an Anchor that shares this Stamp's title, and connect this Stamp and similar ones to it.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectByTitleSimilar()} addUserKnob {22 reconnect_by_title_selected l selected t "For each Stamp selected, look for an Anchor that shares its title, and connect to it.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectByTitleSelected()} addUserKnob {26 reconnect_by_selection_label l "By Selection:" t "Force reconnect to a selected Anchor." T " "} addUserKnob {22 reconnect_by_selection_this l this t "Force reconnect this Stamp to a selected Anchor, whatever its name or title.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectBySelection()} addUserKnob {22 reconnect_by_selection_similar l similar t "Force reconnect this Stamp and similar ones to a selected Anchor, whatever its name or title.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectBySelectionSimilar()} addUserKnob {22 reconnect_by_selection_selected l selected t "Force reconnect all selected Stamps to an also selected Anchor, whatever its name or title.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectBySelectionSelected()} addUserKnob {1 anchor l Anchor} anchor Anchor_3d5fc4c58e addUserKnob {6 auto_reconnect_by_title l "  auto-reconnect by title" t "When creating this stamp again (like on copy-paste), auto-reconnect it by title instead of doing it by the saved anchor's name, and auto-turn this off immediately.\nIMPORTANT: Should be off by default. Only use this for setting up templates." +STARTLINE} addUserKnob {20 advanced_reconnection_1 l "Advanced Reconnection" +INVISIBLE n -1} addUserKnob {26 line2 l "" +STARTLINE} addUserKnob {22 buttonHelp l Help -STARTLINE T stamps.showHelp()} addUserKnob {26 version l " " t "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019." -STARTLINE T " Stamps v1.0"} } Dot { name Dot325 note_font_size 41 selected true xpos 6096 ypos 3890 } push $N17d02b00 Dot { name Dot124 note_font_size 41 selected true xpos -238 ypos 1434 } Shuffle { in GS_Plate name Shuffle25 label "\[value in]" selected true xpos -272 ypos 1477 } Remove { operation keep channels rgba name Remove4 selected true xpos -272 ypos 1515 } NoOp { name Anchor_2bcb55a0c8 help "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019" onCreate "if nuke.GUI:\n try:\n import stamps; stamps.anchorOnCreate()\n except:\n pass" knobChanged stamps.anchorKnobChanged() autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0xffffff01 note_font_size 20 selected true xpos -272 ypos 1571 addUserKnob {20 anchor_tab l "Anchor Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T anchor} addUserKnob {1 title l Title: t "Displayed name on the Node Graph for this Stamp and its Anchor.\nIMPORTANT: This is only for display purposes, and is different from the real/internal name of the Stamps."} title "GS Plate" addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T "GS Plate"} addUserKnob {26 prev_name l "" +STARTLINE +HIDDEN T Anchor_2bcb55a0c8} addUserKnob {3 showing l "" +STARTLINE +HIDDEN} addUserKnob {1 tags l Tags t "Comma-separated tags you can define for each Anchor, that will help you find it when invoking the Stamp Selector by pressing the Stamps shortkey with nothing selected."} tags 2D, addUserKnob {26 line1 l "" +STARTLINE} addUserKnob {26 stamps_label l Stamps: T " "} addUserKnob {22 createStamp l new t "Create a new Stamp for this Anchor." -STARTLINE T stamps.stampCreateWired(nuke.thisNode())} addUserKnob {22 selectStamps l select t "Reconnect all of this Anchor's Stamps." -STARTLINE T stamps.wiredSelectSimilar(nuke.thisNode().name())} addUserKnob {22 reconnectStamps l reconnect -STARTLINE T stamps.anchorReconnectWired()} addUserKnob {22 zoomNext l "zoom next" t "Navigate to this Anchor's next Stamp on the Node Graph." -STARTLINE T stamps.wiredZoomNext(nuke.thisNode().name())} addUserKnob {26 line2 l "" +STARTLINE} addUserKnob {22 buttonHelp l Help -STARTLINE T stamps.showHelp()} addUserKnob {26 version l " " t "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019." -STARTLINE T " Stamps v1.0"} } NoOp { name Stamp34 help "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019" onCreate "if nuke.GUI:\n try:\n import stamps; stamps.wiredOnCreate()\n except:\n pass\n" knobChanged "import stamps; stamps.wiredKnobChanged()" autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0x1000001 note_font "Bitstream Vera Sans" note_font_size 20 selected true xpos 5936 ypos 3813 hide_input true addUserKnob {20 wired_tab l "Wired Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T wired} addUserKnob {3 lockCallbacks l "" +STARTLINE +HIDDEN} addUserKnob {6 toReconnect -STARTLINE +HIDDEN} addUserKnob {1 title l Title: t "Displayed name on the Node Graph for this Stamp and its Anchor.\nIMPORTANT: This is only for display purposes, and is different from the real/internal name of the Stamps."} title "GS Plate" addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T "GS Plate"} addUserKnob {26 tags l Tags: t "Tags of this stamp's Anchor, for information purpose only.\nClick \"show anchor\" to change them." T 2D} addUserKnob {26 backdrops l Backdrops: t "Labels of backdrop nodes which contain this stamp's Anchor." T "Advanced Keying Template"} addUserKnob {26 line1 l "" +STARTLINE} addUserKnob {26 anchor_label l Anchor: T " "} addUserKnob {22 show_anchor l " show anchor " t "Show the properties panel for this Stamp's Anchor." -STARTLINE T stamps.wiredShowAnchor()} addUserKnob {22 zoom_anchor l "zoom anchor" t "Navigate to this Stamp's Anchor on the Node Graph." -STARTLINE T stamps.wiredZoomAnchor()} addUserKnob {26 stamps_label l Stamps: T " "} addUserKnob {22 zoomNext l " zoom next " t "Navigate to this Stamp's next sibling on the Node Graph." -STARTLINE T stamps.wiredZoomNext()} addUserKnob {22 selectSimilar l " select similar " t "Select all similar Stamps to this one on the Node Graph." -STARTLINE T stamps.wiredSelectSimilar()} addUserKnob {26 space_1 l "" +STARTLINE T " "} addUserKnob {26 reconnect_label l Reconnect: t "Reconnect by the stored Anchor name." T " "} addUserKnob {22 reconnect_this l this t "Reconnect this Stamp to its Anchor, by its stored Anchor name." -STARTLINE T "n = nuke.thisNode()\ntry:\n n.setInput(0,nuke.toNode(n.knob(\"anchor\").value()))\nexcept:\n nuke.message(\"Unable to reconnect.\")\ntry:\n import stamps\n stamps.wiredGetStyle(n)\nexcept:\n pass\n"} addUserKnob {22 reconnect_similar l similar t "Reconnect this Stamp and similar ones to their Anchor, by their stored anchor name." -STARTLINE T stamps.wiredReconnectSimilar()} addUserKnob {22 reconnect_all l all t "Reconnect all the Stamps to their Anchors, by their stored anchor names." -STARTLINE T stamps.wiredReconnectAll()} addUserKnob {26 space_2 l "" +STARTLINE T " "} addUserKnob {20 advanced_reconnection l "Advanced Reconnection" n 2} addUserKnob {26 reconnect_by_title_label l "By Title:" t "Reconnect by searching for a matching title." T " "} addUserKnob {22 reconnect_by_title_this l this t "Look for an Anchor that shares this Stamp's title, and connect this Stamp to it.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectByTitle()} addUserKnob {22 reconnect_by_title_similar l similar t "Look for an Anchor that shares this Stamp's title, and connect this Stamp and similar ones to it.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectByTitleSimilar()} addUserKnob {22 reconnect_by_title_selected l selected t "For each Stamp selected, look for an Anchor that shares its title, and connect to it.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectByTitleSelected()} addUserKnob {26 reconnect_by_selection_label l "By Selection:" t "Force reconnect to a selected Anchor." T " "} addUserKnob {22 reconnect_by_selection_this l this t "Force reconnect this Stamp to a selected Anchor, whatever its name or title.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectBySelection()} addUserKnob {22 reconnect_by_selection_similar l similar t "Force reconnect this Stamp and similar ones to a selected Anchor, whatever its name or title.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectBySelectionSimilar()} addUserKnob {22 reconnect_by_selection_selected l selected t "Force reconnect all selected Stamps to an also selected Anchor, whatever its name or title.\nIMPORTANT: Use this carefully, and only when the normal reconnection doesn't work." -STARTLINE T stamps.wiredReconnectBySelectionSelected()} addUserKnob {1 anchor l Anchor} anchor Anchor_2bcb55a0c8 addUserKnob {6 auto_reconnect_by_title l "  auto-reconnect by title" t "When creating this stamp again (like on copy-paste), auto-reconnect it by title instead of doing it by the saved anchor's name, and auto-turn this off immediately.\nIMPORTANT: Should be off by default. Only use this for setting up templates." +STARTLINE} addUserKnob {20 advanced_reconnection_1 l "Advanced Reconnection" +INVISIBLE n -1} addUserKnob {26 line2 l "" +STARTLINE} addUserKnob {22 buttonHelp l Help -STARTLINE T stamps.showHelp()} addUserKnob {26 version l " " t "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019." -STARTLINE T " Stamps v1.0"} } Dot { name Dot328 note_font_size 41 selected true xpos 5970 ypos 3937 } push $N607a5d00 Dot { name Dot331 note_font_size 41 selected true xpos 6210 ypos 3763 } Group { inputs 3 name AdditiveKeyerPro tile_color 0x5200ff note_font "Verdana Bold" note_font_color 0xffffffff selected true xpos 6176 ypos 3934 disable true addUserKnob {20 AdditiveKeyer} addUserKnob {6 useSC l "Use Screen Color as CleanPlate" +STARTLINE} addUserKnob {41 screenColor l "Screen Color" T Keylight1.screenColour} addUserKnob {6 despillSat l "Despill Screen Color from Saturation?" +STARTLINE} despillSat true addUserKnob {26 ""} addUserKnob {7 DarkValue l "Dark Value" R 0 5} DarkValue 1 addUserKnob {7 satDarks l "Saturate Darks"} satDarks 0.2 addUserKnob {18 darkTint l "Dark Tint"} darkTint 1 addUserKnob {6 darkTint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 darkTint_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {6 lightTint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 ExtraLightValue l "Light Value Plus" R 0 2} ExtraLightValue 1 addUserKnob {7 satLights l "Saturate Lights"} satLights 0.2 addUserKnob {18 lightTint l "Light Tint"} lightTint 1 addUserKnob {6 lightTint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lightTint_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 LightValue l "Light Value BG Mult" R 0 5} LightValue 0.25 addUserKnob {26 ""} addUserKnob {6 darkTint_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {6 lightTint_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {6 compositeSwitch l "Output Difference to RGB" +STARTLINE} addUserKnob {6 outputDiffAlpha l "Output Difference Matte to Alpha" +STARTLINE} addUserKnob {26 ""} addUserKnob {41 maskChannelMask l mask T MergeKeymix.maskChannelMask} addUserKnob {41 inject -STARTLINE T MergeKeymix.inject} addUserKnob {41 invert_mask l invert -STARTLINE T MergeKeymix.invert_mask} addUserKnob {41 fringe -STARTLINE T MergeKeymix.fringe} addUserKnob {41 mix T MergeKeymix.mix} addUserKnob {20 info l Info} addUserKnob {26 creator l "Modified By:" T "Tony Lyons"} addUserKnob {26 desc l Description: t "adds the difference between cleanplate and key plate to the BG\n\nGood for hair details and shadows and sensitive edge treatment" T AdditiveKeyer} addUserKnob {26 ver l Version: T v04} } Input { inputs 0 name Inputmask xpos 685 ypos 1141 number 3 } Dot { name Dot10 label Mask note_font_size 41 xpos 719 ypos 1883 } Dot { name Dot11 note_font_size 41 xpos 719 ypos 1983 } Input { inputs 0 name fg label "\[value number]" xpos -500 ypos -221 number 1 } Remove { channels alpha name Remove2 xpos -500 ypos -147 } AddChannels { channels rgba name AddChannels2 xpos -500 ypos -109 } Dot { name Dot26 note_font_size 41 xpos -466 ypos 5 } set N17ab8800 [stack 0] OFXuk.co.thefoundry.keylight.keylight_v201 { show "Final Result" unPreMultiply false screenColour {0 0 0} screenGain 1 screenBalance 0.5 alphaBias {0.5 0.5 0.5} despillBias {0.5 0.5 0.5} gangBiases true preBlur 0 "Screen Matte" 0 screenClipMin 0 screenClipMax 1 screenClipRollback 0 screenGrowShrink 0 screenSoftness 0 screenDespotBlack 0 screenDespotWhite 0 screenReplaceMethod "Soft Colour" screenReplaceColour {0.5 0.5 0.5} Tuning 0 midPoint 0.5 lowGain 1 midGain 1 highGain 1 "Inside Mask" 0 sourceAlphaHandling Ignore insideReplaceMethod "Soft Colour" insideReplaceColour {0.5 0.5 0.5} Crops 0 SourceXMethod Colour SourceYMethod Colour SourceEdgeColour 0 SourceCropL 0 SourceCropR 1 SourceCropB 0 SourceCropT 1 balanceSet false insideComponent None outsideComponent None cacheBreaker true name Keylight1 xpos -500 ypos 73 } set N17ab8100 [stack 0] push $N17ab8800 Dot { name Dot27 note_font_size 41 xpos -356 ypos 5 } Merge2 { inputs 2 operation from name Merge3 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -390 ypos 73 } Clamp { channels rgba name Clamp1 xpos -390 ypos 99 } Saturation { saturation 0 name Saturation4 xpos -390 ypos 125 } push $N17ab8100 Merge2 { inputs 2 operation plus name Merge7 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -500 ypos 125 } push $N17ab8800 Dot { name Dot30 note_font_size 41 xpos -598 ypos 5 } Dot { name Dot31 note_font_size 41 xpos -598 ypos 218 } Switch { inputs 2 which {{parent.despillSat}} name DespillSwitch1 label "\[value which]" xpos -500 ypos 208 } Dot { name Dot8 xpos -466 ypos 373 } set N17a67200 [stack 0] Input { inputs 0 name clean label "\[value number]" xpos 126 ypos -175 number 2 } Remove { channels alpha name Remove3 xpos 126 ypos -101 } AddChannels { channels rgba name AddChannels1 xpos 126 ypos -63 } Grade { multiply 0 add {{parent.Keylight1.screenColour} {parent.Keylight1.screenColour} {parent.Keylight1.screenColour} {parent.Keylight1.screenColour}} name ScreenColor xpos 126 ypos -14 disable {{!parent.useSC}} } Dot { name Dot28 note_font_size 41 xpos 160 ypos 50 } set N17a55600 [stack 0] OFXuk.co.thefoundry.keylight.keylight_v201 { show "Final Result" unPreMultiply false screenColour {{parent.Keylight1.screenColour x1 0} {parent.Keylight1.screenColour x1 0} {parent.Keylight1.screenColour x1 0}} screenGain 1 screenBalance 0.5 alphaBias {0.5 0.5 0.5} despillBias {0.5 0.5 0.5} gangBiases true preBlur 0 "Screen Matte" 0 screenClipMin 0 screenClipMax 1 screenClipRollback 0 screenGrowShrink 0 screenSoftness 0 screenDespotBlack 0 screenDespotWhite 0 screenReplaceMethod "Soft Colour" screenReplaceColour {0.5 0.5 0.5} Tuning 0 midPoint 0.5 lowGain 1 midGain 1 highGain 1 "Inside Mask" 0 sourceAlphaHandling Ignore insideReplaceMethod "Soft Colour" insideReplaceColour {0.5 0.5 0.5} Crops 0 SourceXMethod Colour SourceYMethod Colour SourceEdgeColour 0 SourceCropL 0 SourceCropR 1 SourceCropB 0 SourceCropT 1 balanceSet false insideComponent None outsideComponent None cacheBreaker true name Keylight2 xpos 126 ypos 118 } set N17a54f00 [stack 0] push $N17a55600 Dot { name Dot29 note_font_size 41 xpos 270 ypos 50 } Merge2 { inputs 2 operation from name Merge8 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 236 ypos 118 } Clamp { channels rgba name Clamp2 xpos 236 ypos 144 } Saturation { saturation 0 name Saturation5 xpos 236 ypos 170 } push $N17a54f00 Merge2 { inputs 2 operation plus name Merge9 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 126 ypos 170 } push $N17a55600 Dot { name Dot33 note_font_size 41 xpos 28 ypos 50 } Dot { name Dot34 note_font_size 41 xpos 28 ypos 230 } Switch { inputs 2 which {{parent.despillSat}} name DespillSwitch2 label "\[value which]" xpos 126 ypos 223 } Dot { name Dot35 note_font_size 41 xpos 160 ypos 320 } set N17a30100 [stack 0] Dot { name Dot6 xpos 412 ypos 320 } Merge2 { inputs 2 operation difference Achannels rgb Bchannels rgb name Merge6 xpos 378 ypos 370 } Group { name ChannelControl_v3 label "\[value channel_selector.in]" note_font "Bitstream Vera Sans" xpos 378 ypos 440 mapsize {0.15 0.15} addUserKnob {20 channelControl} addUserKnob {41 Channel_Selection T channel_selector.in} addUserKnob {26 Description l "" +STARTLINE T ":Channel Control:\n\nChannel math with choice of merge operation"} addUserKnob {26 ""} addUserKnob {7 redGain} redGain 0.3 addUserKnob {7 greenGain} greenGain 0.59 addUserKnob {7 blueGain} blueGain 0.11 addUserKnob {7 alphaGain} addUserKnob {41 operation T Merge1.operation} } Input { inputs 0 name Input1 xpos 558 ypos -694 } Shuffle { name channel_selector label "\[value in]" xpos 558 ypos -668 } set N17a05d00 [stack 0] Shuffle { green red blue red alpha red name Shuffle1 xpos 386 ypos -536 } Grade { channels rgba white {{parent.redGain i}} name Grade12 xpos 386 ypos -492 } push $N17a05d00 Shuffle { red green blue green alpha green name Shuffle2 xpos 499 ypos -534 } Grade { channels rgba white {{parent.greenGain i}} name Grade13 xpos 499 ypos -493 } Merge2 { inputs 2 operation plus name Merge1 xpos 411 ypos -428 } set C17bd9600 [stack 0] push $N17a05d00 Shuffle { red blue green blue alpha blue name Shuffle3 xpos 610 ypos -538 } Grade { channels rgba white {{parent.blueGain i}} name Grade14 xpos 610 ypos -494 } clone $C17bd9600 { inputs 2 xpos 486 ypos -369 selected false } push $N17a05d00 Shuffle { red alpha green alpha blue alpha name Shuffle4 selected true xpos 725 ypos -535 } Grade { channels rgba white {{parent.alphaGain i}} name Grade15 xpos 725 ypos -494 } clone $C17bd9600 { inputs 2 xpos 580 ypos -307 selected false } Output { name Output1 xpos 600 ypos -210 } end_group Dot { name Dot14 note_font_size 41 xpos 412 ypos 1768 } Input { inputs 0 name bg label "\[value number]" xpos -845 ypos -242 } AddChannels { channels rgba name AddChannels3 xpos -845 ypos -151 } Dot { name Dot9 note_font_size 41 xpos -811 ypos -78 } Dot { name Dot4 xpos -811 ypos 1449 } set N17b91600 [stack 0] Dot { name Dot13 note_font_size 41 xpos -811 ypos 1688 } set N17b90f00 [stack 0] push $N17a67200 Dot { name Dot2 note_font_size 41 xpos -466 ypos 421 } set N17b90800 [stack 0] Saturation { saturation {{parent.satDarks}} name Saturation9 xpos -378 ypos 418 } push $N17a30100 Saturation { saturation {{parent.satDarks}} name Saturation8 xpos -215 ypos 317 } Merge2 { inputs 2 operation divide name Merge5 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos -215 ypos 418 } Dot { name Dot38 note_font_size 41 xpos -181 ypos 674 } Clamp { channels rgba minimum 1 minimum_enable false name Clamp4 xpos -215 ypos 786 } Add { channels rgba value -1 name Add3 xpos -215 ypos 840 } Multiply { channels rgb value {{parent.DarkValue} {parent.DarkValue} {parent.DarkValue} 0} name DARK_VALUE xpos -215 ypos 892 } Grade { multiply {{parent.darkTint} {parent.darkTint} {parent.darkTint} {parent.darkTint}} reverse true black_clamp false name DARK_TINT xpos -215 ypos 931 } Add { channels rgba value 1 name Add4 xpos -215 ypos 988 } Clamp { channels rgb name Clamp5 xpos -215 ypos 1065 } Dot { name Dot39 note_font_size 41 xpos -181 ypos 1257 } push $N17b90800 Dot { name Dot36 note_font_size 41 xpos -466 ypos 577 } Saturation { saturation {{parent.satLights}} name Saturation1 xpos -101 ypos 574 } set N17b26b00 [stack 0] push $N17a30100 Saturation { saturation {{parent.satLights}} name Saturation6 xpos 126 ypos 500 } set N17b26400 [stack 0] Merge2 { inputs 2 operation divide also_merge all name Merge10 label all xpos 126 ypos 568 } Clamp { channels rgba minimum 1 maximum_enable false name Clamp3 xpos 126 ypos 780 } Add { channels rgba value -1 name Add1 xpos 126 ypos 838 } Multiply { channels rgb value {{parent.LightValue} {parent.LightValue} {parent.LightValue} 0} name LIGHT_VALUE xpos 126 ypos 961 } Multiply { channels rgb value {{parent.lightTint.r} {parent.lightTint.g} {parent.lightTint.b} 0} name LIGHT_TINT xpos 126 ypos 1039 } Add { channels rgba value 1 name Add2 xpos 126 ypos 1120 } Merge2 { inputs 2 operation multiply Achannels rgb Bchannels rgb output rgb name __CONSTRAIN_DARKS__ xpos 128 ypos 1253 } Dot { name Dot19 note_font_size 41 xpos 162 ypos 1354 } set N17ceb200 [stack 0] Dot { name Dot3 xpos -8 ypos 1354 } Dot { name Dot16 note_font_size 41 xpos -8 ypos 1611 } push $N17b26400 Dot { name Dot7 note_font_size 41 xpos 310 ypos 503 } push $N17b26b00 Dot { name Dot5 note_font_size 41 xpos -67 ypos 691 } Merge2 { inputs 2 operation from name Merge1 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 276 ypos 688 } Clamp { channels rgba maximum_enable false name Clamp6 xpos 276 ypos 781 } Multiply { channels rgba value {{parent.ExtraLightValue}} name Multiply1 label "\[value value]" xpos 276 ypos 899 } Multiply { channels rgb value {{parent.lightTint.r} {parent.lightTint.g} {parent.lightTint.b} 0} name LIGHT_TINT1 xpos 276 ypos 1036 } Dot { name Dot15 note_font_size 41 xpos 310 ypos 1513 } push $N17ceb200 Dot { name Dot1 note_font_size 41 xpos 162 ypos 1449 } push $N17b91600 Merge2 { inputs 2 operation multiply Achannels rgb Bchannels rgb output rgb name CONSTRAIN_LIGHTS xpos 128 ypos 1446 } Merge2 { inputs 2 operation plus output rgb name Merge2 label "\[ expr \{ \[value mix] == 1 ? \" \" : \[concat Mix: \[value mix]] \}]" xpos 128 ypos 1510 } Switch { inputs 2 which {{parent.compositeSwitch}} name Switch1 label "\[value which]" xpos 128 ypos 1604 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 128 ypos 1678 disable {{parent.outputDiffAlpha}} } Copy { inputs 2 from0 rgba.blue to0 rgba.alpha name __LUMA_INTO_ALPHA__ xpos 128 ypos 1758 disable {{!parent.outputDiffAlpha}} } Dot { name Dot17 label A note_font_size 41 xpos 162 ypos 1910 } push $N17b90f00 Dot { name Dot18 label B note_font_size 41 xpos -811 ypos 1895 } Dot { name Dot12 note_font_size 41 xpos -811 ypos 1986 } Merge2 { inputs 2+1 operation copy bbox B Achannels none Bchannels none output none also_merge rgba name MergeKeymix xpos 128 ypos 1973 } Output { name Output1 xpos 128 ypos 2235 } end_group Merge2 { inputs 2 bbox B name Merge51 selected true xpos 6176 ypos 4250 } Dot { name Dot332 selected true xpos 6210 ypos 4774 } push $N2f542b00 push $N2f541d00 Merge2 { inputs 2 operation plus name Merge52 label "test lunimance match" selected true xpos -732 ypos -2744 } Dot { name Dot336 label test note_font_size 31 selected true xpos -698 ypos -2615 } push $N2f4eb200 Shuffle { in despill_RGB name Shuffle27 label "\[value in]" selected true xpos -770 ypos 1478 } Remove { operation keep channels rgba name Remove5 selected true xpos -770 ypos 1516 } NoOp { name Anchor_35df505785 help "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019" onCreate "if nuke.GUI:\n try:\n import stamps; stamps.anchorOnCreate()\n except:\n pass" knobChanged stamps.anchorKnobChanged() autolabel "nuke.thisNode().knob(\"title\").value()" tile_color 0xffffff01 note_font_size 20 selected true xpos -770 ypos 1571 addUserKnob {20 anchor_tab l "Anchor Stamp"} addUserKnob {26 identifier -STARTLINE +HIDDEN T anchor} addUserKnob {1 title l Title: t "Displayed name on the Node Graph for this Stamp and its Anchor.\nIMPORTANT: This is only for display purposes, and is different from the real/internal name of the Stamps."} title "despill RGB" addUserKnob {26 prev_title l "" +STARTLINE +HIDDEN T "despill RGB"} addUserKnob {26 prev_name l "" +STARTLINE +HIDDEN T Anchor_35df505785} addUserKnob {3 showing l "" +STARTLINE +HIDDEN} addUserKnob {1 tags l Tags t "Comma-separated tags you can define for each Anchor, that will help you find it when invoking the Stamp Selector by pressing the Stamps shortkey with nothing selected."} tags 2D, addUserKnob {26 line1 l "" +STARTLINE} addUserKnob {26 stamps_label l Stamps: T " "} addUserKnob {22 createStamp l new t "Create a new Stamp for this Anchor." -STARTLINE T stamps.stampCreateWired(nuke.thisNode())} addUserKnob {22 selectStamps l select t "Reconnect all of this Anchor's Stamps." -STARTLINE T stamps.wiredSelectSimilar(nuke.thisNode().name())} addUserKnob {22 reconnectStamps l reconnect -STARTLINE T stamps.anchorReconnectWired()} addUserKnob {22 zoomNext l "zoom next" t "Navigate to this Anchor's next Stamp on the Node Graph." -STARTLINE T stamps.wiredZoomNext(nuke.thisNode().name())} addUserKnob {26 line2 l "" +STARTLINE} addUserKnob {22 buttonHelp l Help -STARTLINE T stamps.showHelp()} addUserKnob {26 version l " " t "Stamps by Adrian Pueyo and Alexey Kuchinski.\nUpdated Sep 27 2019." -STARTLINE T " Stamps v1.0"} } StickyNote { inputs 0 name StickyNote1 tile_color 0xff label "<-- adjust \nblackpoint/\nwhitepoint" note_font_size 41 note_font_color 0xffffffff selected true xpos -228 ypos 2159 } push $N17d03900 Shuffle { in GS_Plate name Shuffle28 label "\[value in]" selected true xpos 5850 ypos 4459 } StickyNote { inputs 0 name StickyNote21 tile_color 0xff label "Make or Generate\ncleanplate if you can" note_font_size 41 note_font_color 0xffffffff selected true xpos 3659 ypos -3429 } ================================================ FILE: NukeSurvivalToolkit/nk_files/NST_LightSwitchPuppet.nk ================================================ Group { name GradeLG01_ knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"mute2\":\n if k.getValue() == 1:\n n\[\"tile_color\"].setValue(4278190335)\n elif k.getValue() == 0:\n n\[\"tile_color\"].setValue(55312639)" tile_color 0x34c00ff note_font_color 0xffffffff selected true xpos 828 ypos 455 addUserKnob {20 GradeLG01} addUserKnob {6 mute1 l Mute +STARTLINE} mute1 true addUserKnob {41 solo1 l Solo -STARTLINE T LightSwitchPuppet.solo1} addUserKnob {41 bypass1 l Bypass -STARTLINE T LightSwitchPuppet.bypass1} addUserKnob {41 exp1 l Exposure T LightSwitchPuppet.exp1} addUserKnob {41 mult1 l Multiply T LightSwitchPuppet.mult1} } Input { inputs 0 name Input xpos 0 ypos -20 } set N5e096400 [stack 0] EXPTool { mode Stops red {{parent.parent.LightSwitchPuppet.exp1}} green {{parent.parent.LightSwitchPuppet.exp1}} blue {{parent.parent.LightSwitchPuppet.exp1}} name Exposure label "\[value red]" xpos -149 ypos 33 } Multiply { channels rgb value {{parent.parent.LightSwitchPuppet.mult1} {parent.parent.LightSwitchPuppet.mult1} {parent.parent.LightSwitchPuppet.mult1} {parent.parent.LightSwitchPuppet.mult1}} name MultiplyColor label "\[value value]" xpos -149 ypos 83 } push $N5e096400 Switch { inputs 2 which {{!parent.parent.LightSwitchPuppet.bypass1}} name SwitchBypass xpos -149 ypos 195 } Multiply { value 0 name MultiplyMute label "\[value value]" xpos -149 ypos 256 disable {{!parent.mute1}} } Multiply { value 0 name MultiplySolo label "\[value value]" xpos -149 ypos 317 disable {{"LightSwitchPuppet.solo1 + \nLightSwitchPuppet.solo2 + \nLightSwitchPuppet.solo3 + \nLightSwitchPuppet.solo4 + \nLightSwitchPuppet.solo5 + \nLightSwitchPuppet.solo6 + \nLightSwitchPuppet.solo7 + \nLightSwitchPuppet.solo8 + \nLightSwitchPuppet.solo9 \n\n== 0 ? 1 : LightSwitchPuppet.solo1"}} } push $N5e096400 Dissolve { inputs 2 channels rgb which {{parent.parent.LightSwitchPuppet.mix}} name DissolveMix selected true xpos -149 ypos 392 } push $N5e096400 Switch { inputs 2 which {{"LightSwitchPuppet.disable == 1 ? 0 : 1"}} name SwitchDisable xpos 0 ypos 392 } Output { name Output1 xpos 0 ypos 537 } end_group push $cut_paste_input Group { name GradeLG02_ knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"mute2\":\n if k.getValue() == 1:\n n\[\"tile_color\"].setValue(4278190335)\n elif k.getValue() == 0:\n n\[\"tile_color\"].setValue(55312639)" tile_color 0x34c00ff label "\[expr \{\[value mute2] ? \"Mute\" : \[]\}]" note_font_color 0xffffffff selected true xpos 983 ypos 457 addUserKnob {20 GradeLG02} addUserKnob {6 mute2 l Mute +STARTLINE} addUserKnob {41 solo2 l Solo -STARTLINE T LightSwitchPuppet.solo2} addUserKnob {41 bypass2 l Bypass -STARTLINE T LightSwitchPuppet.bypass2} addUserKnob {41 exp2 l Exposure T LightSwitchPuppet.exp2} addUserKnob {41 mult2 l Multiply T LightSwitchPuppet.mult2} } Input { inputs 0 name Input xpos 0 } set N5e023800 [stack 0] EXPTool { mode Stops red {{parent.parent.LightSwitchPuppet.exp2}} green {{parent.parent.LightSwitchPuppet.exp2}} blue {{parent.parent.LightSwitchPuppet.exp2}} name Exposure label "\[value red]" xpos -163 ypos 53 } Multiply { channels rgb value {{parent.parent.LightSwitchPuppet.mult2} {parent.parent.LightSwitchPuppet.mult2} {parent.parent.LightSwitchPuppet.mult2} {parent.parent.LightSwitchPuppet.mult2}} name MultiplyColor label "\[value value]" xpos -163 ypos 85 } push $N5e023800 Switch { inputs 2 which {{!parent.parent.LightSwitchPuppet.bypass2}} name SwitchBypass1 xpos -163 ypos 144 } Multiply { value 0 name MultiplyMute label "\[value value]" xpos -163 ypos 184 disable {{!parent.mute2}} } Multiply { value 0 name MultiplySolo label "\[value value]" xpos -163 ypos 226 disable {{"LightSwitchPuppet.solo1 + \nLightSwitchPuppet.solo2 + \nLightSwitchPuppet.solo3 + \nLightSwitchPuppet.solo4 + \nLightSwitchPuppet.solo5 + \nLightSwitchPuppet.solo6 + \nLightSwitchPuppet.solo7 + \nLightSwitchPuppet.solo8 + \nLightSwitchPuppet.solo9 \n\n== 0 ? 1 : LightSwitchPuppet.solo2"}} } push $N5e023800 Dissolve { inputs 2 channels rgb which {{parent.parent.LightSwitchPuppet.mix}} name DissolveMix xpos -163 ypos 311 } push $N5e023800 Switch { inputs 2 which {{"LightSwitchPuppet.disable == 1 ? 0 : 1"}} name SwitchDisable xpos 0 ypos 311 } Output { name Output1 xpos 0 ypos 370 } end_group push $cut_paste_input Group { name GradeLG03_ knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"mute3\":\n if k.getValue() == 1:\n n\[\"tile_color\"].setValue(4278190335)\n elif k.getValue() == 0:\n n\[\"tile_color\"].setValue(55312639)" tile_color 0x34c00ff label "\[expr \{\[value mute3] ? \"Mute\" : \[]\}]" selected true xpos 1153 ypos 458 addUserKnob {20 GradeLG03} addUserKnob {6 mute3 l Mute +STARTLINE} addUserKnob {41 solo3 l Solo -STARTLINE T LightSwitchPuppet.solo3} addUserKnob {41 bypass3 l Bypass -STARTLINE T LightSwitchPuppet.bypass3} addUserKnob {41 exp3 l Exposure T LightSwitchPuppet.exp3} addUserKnob {41 mult3 l Multiply T LightSwitchPuppet.mult3} } Input { inputs 0 name Input xpos 0 } set N5e021000 [stack 0] EXPTool { mode Stops red {{parent.parent.LightSwitchPuppet.exp3}} green {{parent.parent.LightSwitchPuppet.exp3}} blue {{parent.parent.LightSwitchPuppet.exp3}} name Exposure1 label "\[value red]" xpos -150 ypos 95 } Multiply { channels rgb value {{parent.parent.LightSwitchPuppet.mult3} {parent.parent.LightSwitchPuppet.mult3} {parent.parent.LightSwitchPuppet.mult3} {parent.parent.LightSwitchPuppet.mult3}} name MultiplyColor label "\[value value]" xpos -150 ypos 127 } push $N5e021000 Switch { inputs 2 which {{!parent.parent.LightSwitchPuppet.bypass3}} name SwitchBypass xpos -150 ypos 183 } Multiply { value 0 name MultiplyMute label "\[value value]" xpos -150 ypos 223 disable {{!parent.mute3}} } Multiply { value 0 name MultiplySolo label "\[value value]" xpos -150 ypos 265 disable {{"LightSwitchPuppet.solo1 + \nLightSwitchPuppet.solo2 + \nLightSwitchPuppet.solo3 + \nLightSwitchPuppet.solo4 + \nLightSwitchPuppet.solo5 + \nLightSwitchPuppet.solo6 + \nLightSwitchPuppet.solo7 + \nLightSwitchPuppet.solo8 + \nLightSwitchPuppet.solo9 \n\n== 0 ? 1 : LightSwitchPuppet.solo3"}} } push $N5e021000 Dissolve { inputs 2 channels rgb which {{parent.parent.LightSwitchPuppet.mix}} name DissolveMix selected true xpos -150 ypos 331 } push $N5e021000 Switch { inputs 2 which {{"LightSwitchPuppet.disable == 1 ? 0 : 1"}} name SwitchDisable xpos 0 ypos 331 } Output { name Output1 xpos 0 ypos 438 } end_group push $cut_paste_input Group { name GradeLG04_ knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"mute4\":\n if k.getValue() == 1:\n n\[\"tile_color\"].setValue(4278190335)\n elif k.getValue() == 0:\n n\[\"tile_color\"].setValue(55312639)" tile_color 0x34c00ff label "\[expr \{\[value mute4] ? \"Mute\" : \[]\}]" note_font_color 0xffffffff selected true xpos 1299 ypos 457 addUserKnob {20 GradeLG04} addUserKnob {6 mute4 l Mute +STARTLINE} addUserKnob {41 solo4 l Solo -STARTLINE T LightSwitchPuppet.solo4} addUserKnob {41 bypass4 l Bypass -STARTLINE T LightSwitchPuppet.bypass4} addUserKnob {41 exp4 l Exposure T LightSwitchPuppet.exp4} addUserKnob {41 mult4 l Multiply T LightSwitchPuppet.mult4} } Input { inputs 0 name Input xpos 0 } set N5dfaa400 [stack 0] EXPTool { mode Stops red {{parent.parent.LightSwitchPuppet.exp4}} green {{parent.parent.LightSwitchPuppet.exp4}} blue {{parent.parent.LightSwitchPuppet.exp4}} name Exposure label "\[value red]" xpos -186 ypos 77 } Multiply { channels rgb value {{parent.parent.LightSwitchPuppet.mult4} {parent.parent.LightSwitchPuppet.mult4} {parent.parent.LightSwitchPuppet.mult4} {parent.parent.LightSwitchPuppet.mult4}} name MultiplyColor label "\[value value]" xpos -186 ypos 109 } push $N5dfaa400 Switch { inputs 2 which {{!parent.parent.LightSwitchPuppet.bypass4}} name SwitchBypass xpos -186 ypos 159 } Multiply { value 0 name MultiplyMute label "\[value value]" xpos -186 ypos 209 disable {{!parent.mute4}} } Multiply { value 0 name MultiplySolo label "\[value value]" xpos -186 ypos 251 disable {{"LightSwitchPuppet.solo1 + \nLightSwitchPuppet.solo2 + \nLightSwitchPuppet.solo3 + \nLightSwitchPuppet.solo4 + \nLightSwitchPuppet.solo5 + \nLightSwitchPuppet.solo6 + \nLightSwitchPuppet.solo7 + \nLightSwitchPuppet.solo8 + \nLightSwitchPuppet.solo9 \n\n== 0 ? 1 : LightSwitchPuppet.solo4"}} } push $N5dfaa400 Dissolve { inputs 2 channels rgb which {{parent.parent.LightSwitchPuppet.mix}} name DissolveMix xpos -186 ypos 354 } push $N5dfaa400 Switch { inputs 2 which {{"LightSwitchPuppet.disable == 1 ? 0 : 1"}} name SwitchDisable xpos 0 ypos 354 } Output { name Output1 xpos 0 ypos 422 } end_group push $cut_paste_input Group { name GradeLG05_ knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"mute5\":\n if k.getValue() == 1:\n n\[\"tile_color\"].setValue(4278190335)\n elif k.getValue() == 0:\n n\[\"tile_color\"].setValue(55312639)" tile_color 0x34c00ff label "\[expr \{\[value mute5] ? \"Mute\" : \[]\}]" note_font_color 0xffffffff selected true xpos 1442 ypos 457 addUserKnob {20 GradeLG05} addUserKnob {6 mute5 l Mute +STARTLINE} addUserKnob {41 solo5 l Solo -STARTLINE T LightSwitchPuppet.solo5} addUserKnob {41 bypass5 l Bypass -STARTLINE T LightSwitchPuppet.bypass5} addUserKnob {41 exp5 l Exposure T LightSwitchPuppet.exp5} addUserKnob {41 mult5 l Multiply T LightSwitchPuppet.mult5} } Input { inputs 0 name Input xpos 0 } set N5e33b800 [stack 0] EXPTool { mode Stops red {{parent.parent.LightSwitchPuppet.exp5}} green {{parent.parent.LightSwitchPuppet.exp5}} blue {{parent.parent.LightSwitchPuppet.exp5}} name Exposure label "\[value red]" xpos -139 ypos 84 } Multiply { channels rgb value {{parent.parent.LightSwitchPuppet.mult5} {parent.parent.LightSwitchPuppet.mult5} {parent.parent.LightSwitchPuppet.mult5} {parent.parent.LightSwitchPuppet.mult5}} name MultiplyColor label "\[value value]" xpos -139 ypos 116 } push $N5e33b800 Switch { inputs 2 which {{!parent.parent.LightSwitchPuppet.bypass5}} name SwitchBypass xpos -139 ypos 164 } Multiply { value 0 name MultiplyMute label "\[value value]" xpos -139 ypos 208 disable {{!parent.mute5}} } Multiply { value 0 name MultiplySolo label "\[value value]" xpos -139 ypos 250 disable {{"LightSwitchPuppet.solo1 + \nLightSwitchPuppet.solo2 + \nLightSwitchPuppet.solo3 + \nLightSwitchPuppet.solo4 + \nLightSwitchPuppet.solo5 + \nLightSwitchPuppet.solo6 + \nLightSwitchPuppet.solo7 + \nLightSwitchPuppet.solo8 + \nLightSwitchPuppet.solo9 \n\n== 0 ? 1 : LightSwitchPuppet.solo5"}} } push $N5e33b800 Dissolve { inputs 2 channels rgb which {{parent.parent.LightSwitchPuppet.mix}} name DissolveMix xpos -139 ypos 318 } push $N5e33b800 Switch { inputs 2 which {{"LightSwitchPuppet.disable == 1 ? 0 : 1"}} name SwitchDisable xpos 0 ypos 318 } Output { name Output1 xpos 0 ypos 367 } end_group push $cut_paste_input Group { name GradeLG06_ knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"mute6\":\n if k.getValue() == 1:\n n\[\"tile_color\"].setValue(4278190335)\n elif k.getValue() == 0:\n n\[\"tile_color\"].setValue(55312639)" tile_color 0x34c00ff label "\[expr \{\[value mute6] ? \"Mute\" : \[]\}]" note_font_color 0xffffffff selected true xpos 1582 ypos 457 addUserKnob {20 GradeLG06} addUserKnob {6 mute6 l Mute +STARTLINE} addUserKnob {41 solo6 l Solo -STARTLINE T LightSwitchPuppet.solo6} addUserKnob {41 bypass6 l Bypass -STARTLINE T LightSwitchPuppet.bypass6} addUserKnob {41 exp6 l Exposure T LightSwitchPuppet.exp6} addUserKnob {41 mult6 l Multiply T LightSwitchPuppet.mult6} } Input { inputs 0 name Input xpos 0 } set N5e339000 [stack 0] EXPTool { mode Stops red {{parent.parent.LightSwitchPuppet.exp6}} green {{parent.parent.LightSwitchPuppet.exp6}} blue {{parent.parent.LightSwitchPuppet.exp6}} name Exposure1 label "\[value red]" xpos -130 ypos 80 } Multiply { value {{parent.parent.LightSwitchPuppet.mult6} {parent.parent.LightSwitchPuppet.mult6} {parent.parent.LightSwitchPuppet.mult6} {parent.parent.LightSwitchPuppet.mult6}} name MultiplyColor label "\[value value]" xpos -130 ypos 112 } push $N5e339000 Switch { inputs 2 which {{!parent.parent.LightSwitchPuppet.bypass6}} name SwitchBypass xpos -130 ypos 177 } Multiply { value 0 name MultiplyMute label "\[value value]" xpos -130 ypos 225 disable {{!parent.mute6}} } Multiply { value 0 name MultiplySolo label "\[value value]" xpos -130 ypos 267 disable {{"LightSwitchPuppet.solo1 + \nLightSwitchPuppet.solo2 + \nLightSwitchPuppet.solo3 + \nLightSwitchPuppet.solo4 + \nLightSwitchPuppet.solo5 + \nLightSwitchPuppet.solo6 + \nLightSwitchPuppet.solo7 + \nLightSwitchPuppet.solo8 + \nLightSwitchPuppet.solo9 \n\n== 0 ? 1 : LightSwitchPuppet.solo6"}} } push $N5e339000 Dissolve { inputs 2 channels rgb which {{parent.parent.LightSwitchPuppet.mix}} name DissolveMix selected true xpos -130 ypos 325 } push $N5e339000 Switch { inputs 2 which {{"LightSwitchPuppet.disable == 1 ? 0 : 1"}} name SwitchDisable xpos 0 ypos 325 } Output { name Output1 xpos 0 ypos 419 } end_group push $cut_paste_input Group { name GradeLG07_ knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"mute7\":\n if k.getValue() == 1:\n n\[\"tile_color\"].setValue(4278190335)\n elif k.getValue() == 0:\n n\[\"tile_color\"].setValue(55312639)" tile_color 0x34c00ff label "\[expr \{\[value mute7] ? \"Mute\" : \[]\}]" note_font_color 0xffffffff selected true xpos 1755 ypos 457 addUserKnob {20 GradeLG07} addUserKnob {6 mute7 l Mute +STARTLINE} addUserKnob {41 solo7 l Solo -STARTLINE T LightSwitchPuppet.solo7} addUserKnob {41 bypass7 l Bypass -STARTLINE T LightSwitchPuppet.bypass7} addUserKnob {41 exp7 l Exposure T LightSwitchPuppet.exp7} addUserKnob {41 mult7 l Multiply T LightSwitchPuppet.mult7} } Input { inputs 0 name Input xpos 0 } set N5e2be400 [stack 0] EXPTool { mode Stops red {{parent.parent.LightSwitchPuppet.exp7}} green {{parent.parent.LightSwitchPuppet.exp7}} blue {{parent.parent.LightSwitchPuppet.exp7}} name Exposure label "\[value red]" xpos -151 ypos 88 } Multiply { channels rgb value {{parent.parent.LightSwitchPuppet.mult7} {parent.parent.LightSwitchPuppet.mult7} {parent.parent.LightSwitchPuppet.mult7} {parent.parent.LightSwitchPuppet.mult7}} name Multiply1 label "\[value value]" xpos -151 ypos 120 } push $N5e2be400 Switch { inputs 2 which {{!parent.parent.LightSwitchPuppet.bypass7}} name SwitchBypass xpos -151 ypos 182 } Multiply { value 0 name MultiplyMute label "\[value value]" xpos -151 ypos 219 disable {{!parent.mute7}} } Multiply { value 0 name Multiply3 label "\[value value]" xpos -151 ypos 261 disable {{"LightSwitchPuppet.solo1 + \nLightSwitchPuppet.solo2 + \nLightSwitchPuppet.solo3 + \nLightSwitchPuppet.solo4 + \nLightSwitchPuppet.solo5 + \nLightSwitchPuppet.solo6 + \nLightSwitchPuppet.solo7 + \nLightSwitchPuppet.solo8 + \nLightSwitchPuppet.solo9 \n\n== 0 ? 1 : LightSwitchPuppet.solo7"}} } push $N5e2be400 Dissolve { inputs 2 channels rgb which {{parent.parent.LightSwitchPuppet.mix}} name DissolveMix xpos -151 ypos 327 } push $N5e2be400 Switch { inputs 2 which {{"LightSwitchPuppet.disable == 1 ? 0 : 1"}} name SwitchDisable xpos 0 ypos 327 } Output { name Output1 xpos 0 ypos 378 } end_group push $cut_paste_input Group { name GradeLG08_ knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"mute8\":\n if k.getValue() == 1:\n n\[\"tile_color\"].setValue(4278190335)\n elif k.getValue() == 0:\n n\[\"tile_color\"].setValue(55312639)" tile_color 0x34c00ff label "\[expr \{\[value mute8] ? \"Mute\" : \[]\}]" note_font_color 0xffffffff selected true xpos 1944 ypos 457 addUserKnob {20 GradeLG08} addUserKnob {6 mute8 l Mute +STARTLINE} addUserKnob {41 solo8 l Solo -STARTLINE T LightSwitchPuppet.solo8} addUserKnob {41 bypass8 l Bypass -STARTLINE T LightSwitchPuppet.bypass8} addUserKnob {41 exp8 l Exposure T LightSwitchPuppet.exp8} addUserKnob {41 mult8 l Multiply T LightSwitchPuppet.mult8} } Input { inputs 0 name Input xpos 0 } set N5ebe3400 [stack 0] EXPTool { mode Stops red {{parent.parent.LightSwitchPuppet.exp8}} green {{parent.parent.LightSwitchPuppet.exp8}} blue {{parent.parent.LightSwitchPuppet.exp8}} name Exposure label "\[value red]" xpos -147 ypos 52 } Multiply { channels rgb value {{parent.parent.LightSwitchPuppet.mult8} {parent.parent.LightSwitchPuppet.mult8} {parent.parent.LightSwitchPuppet.mult8} {parent.parent.LightSwitchPuppet.mult8}} name MultiplyColor label "\[value value]" xpos -147 ypos 84 } push $N5ebe3400 Switch { inputs 2 which {{!parent.parent.LightSwitchPuppet.bypass8}} name SwitchBypass xpos -147 ypos 140 } Multiply { value 0 name MultiplyMute label "\[value value]" xpos -147 ypos 186 disable {{!parent.mute8}} } Multiply { value 0 name MultiplySolo label "\[value value]" xpos -147 ypos 228 disable {{"LightSwitchPuppet.solo1 + \nLightSwitchPuppet.solo2 + \nLightSwitchPuppet.solo3 + \nLightSwitchPuppet.solo4 + \nLightSwitchPuppet.solo5 + \nLightSwitchPuppet.solo6 + \nLightSwitchPuppet.solo7 + \nLightSwitchPuppet.solo8 + \nLightSwitchPuppet.solo9 \n\n== 0 ? 1 : LightSwitchPuppet.solo8"}} } push $N5ebe3400 Dissolve { inputs 2 channels rgb which {{parent.parent.LightSwitchPuppet.mix}} name DissolveMix selected true xpos -147 ypos 309 } push $N5ebe3400 Switch { inputs 2 which {{"LightSwitchPuppet.disable == 1 ? 0 : 1"}} name SwitchDisable xpos 0 ypos 309 } Output { name Output1 xpos 0 ypos 360 } end_group push $cut_paste_input Group { name GradeLG09_ knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() == \"mute9\":\n if k.getValue() == 1:\n n\[\"tile_color\"].setValue(4278190335)\n elif k.getValue() == 0:\n n\[\"tile_color\"].setValue(55312639)" tile_color 0x34c00ff label "\[expr \{\[value mute9] ? \"Mute\" : \[]\}]" note_font_color 0xffffffff selected true xpos 2090 ypos 457 addUserKnob {20 GradeLG09} addUserKnob {6 mute9 l Mute +STARTLINE} addUserKnob {41 solo9 l Solo -STARTLINE T LightSwitchPuppet.solo9} addUserKnob {41 bypass9 l Bypass -STARTLINE T LightSwitchPuppet.bypass9} addUserKnob {41 exp9 l Exposure T LightSwitchPuppet.exp9} addUserKnob {41 mult9 l Multiply T LightSwitchPuppet.mult9} } Input { inputs 0 name Input xpos 0 } set N5ebe0800 [stack 0] EXPTool { mode Stops red {{parent.parent.LightSwitchPuppet.exp9}} green {{parent.parent.LightSwitchPuppet.exp9}} blue {{parent.parent.LightSwitchPuppet.exp9}} name Exposure label "\[value red]" xpos -139 ypos 73 } Multiply { channels rgb value {{parent.parent.LightSwitchPuppet.mult9} {parent.parent.LightSwitchPuppet.mult9} {parent.parent.LightSwitchPuppet.mult9} {parent.parent.LightSwitchPuppet.mult9}} name MultiplyColor label "\[value value]" xpos -139 ypos 105 } push $N5ebe0800 Switch { inputs 2 which {{!parent.parent.LightSwitchPuppet.bypass9}} name SwitchBypass xpos -139 ypos 164 } Multiply { value 0 name MultiplyMute label "\[value value]" xpos -139 ypos 213 disable {{!parent.mute9}} } Multiply { value 0 name MultiplySolo label "\[value value]" xpos -139 ypos 255 disable {{"LightSwitchPuppet.solo1 + \nLightSwitchPuppet.solo2 + \nLightSwitchPuppet.solo3 + \nLightSwitchPuppet.solo4 + \nLightSwitchPuppet.solo5 + \nLightSwitchPuppet.solo6 + \nLightSwitchPuppet.solo7 + \nLightSwitchPuppet.solo8 + \nLightSwitchPuppet.solo9 \n\n== 0 ? 1 : LightSwitchPuppet.solo9"}} } push $N5ebe0800 Dissolve { inputs 2 channels rgb which {{parent.parent.LightSwitchPuppet.mix}} name DissolveMix xpos -139 ypos 353 } push $N5ebe0800 Switch { inputs 2 which {{"LightSwitchPuppet.disable == 1 ? 0 : 1"}} name SwitchDisable xpos 0 ypos 353 } Output { name Output1 xpos 0 ypos 420 } end_group push $cut_paste_input Group { name LightSwitchPuppet tile_color 0x34c00ff note_font Verdana selected true xpos 2349 ypos 459 addUserKnob {20 LightSwitchPuppet} addUserKnob {22 createNewLS l "Create New LightSwitch from Values" T "thisNode = nuke.thisNode()\nwith nuke.Root():\n try: \n # Create a new LightSwitch node\n lightSwitch = nuke.createNode(\"NST_LightSwitch\")\n \n # Get the x and y position of the current node\n x = thisNode.xpos()\n y = thisNode.ypos()\n \n # Disconnect all inputs of the new node\n lightSwitch.setInput(0, None)\n \n # Move the new node 100 units to the right of the selected node\n lightSwitch.setXpos(x + 150)\n lightSwitch.setYpos(y + 50)\n \n # Deselect all nodes\n nuke.selectAll()\n nuke.invertSelection()\n \n # Select Original LightSwitch\n thisNode.setSelected(True)\n \n lightSwitch.knob(\"copyValuesFromLS\").execute()\n \n # Deselect all nodes\n nuke.selectAll()\n nuke.invertSelection()\n \n lightSwitch.setSelected(True)\n \n except:\n nuke.message(\"No LightSwitch node installation found. Cannot Create new LightSwitch.\")" +STARTLINE} addUserKnob {22 copyValuesFromLS l "Copy Values from Selected LightSwitch" T "thisNode = nuke.thisNode()\n\nwith nuke.Root():\n selectedNode = nuke.selectedNode()\n\nif selectedNode and selectedNode != thisNode and \"LightSwitch\" in selectedNode.name():\n for knob in thisNode.knobs():\n if knob in selectedNode.knobs() and knob not in \[\"xpos\",\"ypos\",\"name\",\"knobChanged\", \"label\", \"note_font_size\", \"note_font_color\"]:\n thisNode\[knob].fromScript(selectedNode\[knob].toScript())\n \nelse:\n nuke.message(\"Please select another LightSwitch node to copy values from\")" +STARTLINE} addUserKnob {22 reset l "Reset" -STARTLINE T "node = nuke.thisNode()\nexposures = \[]\nmultiplies = \[]\nmutes = \[]\nsolos = \[]\nbypasses = \[]\n\nfor knob in node.knobs():\n if \"panelDropped\" not in knob:\n if \"exp\" in knob:\n exposures.append(knob)\n elif \"mult\" in knob:\n multiplies.append(knob)\n elif \"mute\" in knob:\n mutes.append(knob)\n elif \"solo\" in knob:\n mutes.append(knob)\n elif \"bypass\" in knob:\n mutes.append(knob)\n \nexposures.sort()\nmultiplies.sort()\nmutes.sort()\nsolos.sort()\nbypasses.sort()\n\nfor exp in exposures:\n node.knob(exp).setValue(0)\n\nfor mult in multiplies:\n node.knob(mult).setValue(1, 0)\n node.knob(mult).setValue(1, 1)\n node.knob(mult).setValue(1, 2)\n\nfor mute in mutes:\n node.knob(mute).setValue(0)\n \nfor solo in solos:\n node.knob(solo).setValue(0)\n\nfor bypass in bypasses:\n node.knob(bypass).setValue(0)\n\nnode.knob(\"mix\").setValue(1)"} addUserKnob {26 ""} addUserKnob {26 LG01 l "LightGroup 01" T " "} addUserKnob {41 mute1 l Mute -STARTLINE T GradeLG01_.mute1} addUserKnob {6 solo1 l Solo -STARTLINE} addUserKnob {6 bypass1 l Bypass -STARTLINE} addUserKnob {7 exp1 l Exposure R -5 5} exp1 3.44 addUserKnob {18 mult1 l Multiply} mult1 {1.3 1 1} addUserKnob {6 mult1_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {26 LG02 l "LightGroup 02" T " "} addUserKnob {41 mute2 l Mute -STARTLINE T GradeLG02_.mute2} addUserKnob {6 solo2 l Solo -STARTLINE} solo2 true addUserKnob {6 bypass2 l Bypass -STARTLINE} addUserKnob {7 exp2 l Exposure R -5 5} exp2 -5 addUserKnob {18 mult2 l Multiply} mult2 {1.1 0.8 1.3} addUserKnob {6 mult2_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 color_rgb_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {6 color_rgb_1_panelDropped l "panel dropped state" +HIDDEN +STARTLINE} addUserKnob {26 ""} addUserKnob {26 LG03 l "LightGroup 03" T " "} addUserKnob {41 mute3 l Mute -STARTLINE T GradeLG03_.mute3} addUserKnob {6 solo3 l Solo -STARTLINE} addUserKnob {6 bypass3 l Bypass -STARTLINE} bypass3 true addUserKnob {7 exp3 l Exposure R -5 5} exp3 1.62 addUserKnob {18 mult3 l Multiply} mult3 {1.2 1.2 1.1} addUserKnob {6 mult3_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {26 LG04 l "LightGroup 04" T " "} addUserKnob {41 mute4 l Mute -STARTLINE T GradeLG04_.mute4} addUserKnob {6 solo4 l Solo -STARTLINE} solo4 true addUserKnob {6 bypass4 l Bypass -STARTLINE} addUserKnob {7 exp4 l Exposure R -5 5} addUserKnob {18 mult4 l Multiply} mult4 {1.2 1 1} addUserKnob {6 mult4_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {26 LG05 l "LightGroup 05" T " "} addUserKnob {41 mute5 l Mute -STARTLINE T GradeLG05_.mute5} addUserKnob {6 solo5 l Solo -STARTLINE} addUserKnob {6 bypass5 l Bypass -STARTLINE} bypass5 true addUserKnob {7 exp5 l Exposure R -5 5} exp5 -4.32 addUserKnob {18 mult5 l Multiply} mult5 {1.3 1.2 1} addUserKnob {6 mult5_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {26 LG06 l "LightGroup 06" T " "} addUserKnob {41 mute6 l Mute -STARTLINE T GradeLG06_.mute6} addUserKnob {6 solo6 l Solo -STARTLINE} addUserKnob {6 bypass6 l Bypass -STARTLINE} bypass6 true addUserKnob {7 exp6 l Exposure R -5 5} addUserKnob {18 mult6 l Multiply} mult6 {1 1.4 1.3} addUserKnob {6 mult6_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {26 LG07 l "LightGroup 07" T " "} addUserKnob {41 mute7 l Mute -STARTLINE T GradeLG07_.mute7} addUserKnob {6 solo7 l Solo -STARTLINE} addUserKnob {6 bypass7 l Bypass -STARTLINE} addUserKnob {7 exp7 l Exposure R -5 5} addUserKnob {18 mult7 l Multiply} mult7 {1.3 1 1.2} addUserKnob {6 mult7_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {26 LG08 l "LightGroup 08" T " "} addUserKnob {41 mute8 l Mute -STARTLINE T GradeLG08_.mute8} addUserKnob {6 solo8 l Solo -STARTLINE} addUserKnob {6 bypass8 l Bypass -STARTLINE} addUserKnob {7 exp8 l Exposure R -5 5} exp8 -4.1 addUserKnob {18 mult8 l Multiply} mult8 {1 1.3 1} addUserKnob {6 mult8_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {26 LG09 l "LightGroup 09" T " "} addUserKnob {41 mute9 l Mute -STARTLINE T GradeLG09_.mute9} addUserKnob {6 solo9 l Solo -STARTLINE} solo9 true addUserKnob {6 bypass9 l Bypass -STARTLINE} addUserKnob {7 exp9 l Exposure R -5 5} exp9 -1.28 addUserKnob {18 mult9 l Multiply} mult9 {1 1.3 1.3} addUserKnob {6 mult9_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {7 mix} mix 1 } Input { inputs 0 name Input xpos 0 } Output { name Output1 xpos 0 ypos 300 } end_group ================================================ FILE: NukeSurvivalToolkit/nk_files/NST_Noise4D.nk ================================================ BlinkScript { ProgramGroup 1 KernelDescription "1 \"Noise4D\" iterate pixelWise 6752f1b5993a387ea0d82fec10d191470cbd2c8493ee73ede687c94d9fe52ff5 2 \"src\" Read Point \"dst\" Write Point 3 \"octaves\" Int 1 CAAAAA== \"persistence\" Float 1 AAAAPw== \"scale\" Float 1 bxKDOg==" kernelSource "//Based on https://github.com/Draradech/csworldgen/blob/master/simplexnoise.cpp\n//Ported by Mads Hagbarth Lund 2014\n\n/* Copyright (c) 2007-2012 Eliot Eshelman\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n *\n */\n\n\nint fastfloor( const float x ) \{ return x > 0 ? (int) x : (int) x - 1; \}\ninline float raw_noise_4d( const float x, const float y, const float z, const float w ) \n\{\nint simplex\[64]\[4] = \{\n \{0,1,2,3\},\{0,1,3,2\},\{0,0,0,0\},\{0,2,3,1\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{1,2,3,0\},\n \{0,2,1,3\},\{0,0,0,0\},\{0,3,1,2\},\{0,3,2,1\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{1,3,2,0\},\n \{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\n \{1,2,0,3\},\{0,0,0,0\},\{1,3,0,2\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{2,3,0,1\},\{2,3,1,0\},\n \{1,0,2,3\},\{1,0,3,2\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{2,0,3,1\},\{0,0,0,0\},\{2,1,3,0\},\n \{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\n \{2,0,1,3\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{3,0,1,2\},\{3,0,2,1\},\{0,0,0,0\},\{3,1,2,0\},\n \{2,1,0,3\},\{0,0,0,0\},\{0,0,0,0\},\{0,0,0,0\},\{3,1,0,2\},\{0,0,0,0\},\{3,2,0,1\},\{3,2,1,0\}\n\};\n int perm\[512] = \{\n 151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,\n 8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,\n 35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,\n 134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,\n 55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208, 89,\n 18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,\n 250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,\n 189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,\n 172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,\n 228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,\n 107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,\n 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180,\n\n 151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,\n 8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,\n 35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,\n 134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,\n 55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208, 89,\n 18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,\n 250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,\n 189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,\n 172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,\n 228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,\n 107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,\n 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180\n \};\n int grad4\[32]\[4]= \{\n \{0,1,1,1\}, \{0,1,1,-1\}, \{0,1,-1,1\}, \{0,1,-1,-1\},\n \{0,-1,1,1\}, \{0,-1,1,-1\}, \{0,-1,-1,1\}, \{0,-1,-1,-1\},\n \{1,0,1,1\}, \{1,0,1,-1\}, \{1,0,-1,1\}, \{1,0,-1,-1\},\n \{-1,0,1,1\}, \{-1,0,1,-1\}, \{-1,0,-1,1\}, \{-1,0,-1,-1\},\n \{1,1,0,1\}, \{1,1,0,-1\}, \{1,-1,0,1\}, \{1,-1,0,-1\},\n \{-1,1,0,1\}, \{-1,1,0,-1\}, \{-1,-1,0,1\}, \{-1,-1,0,-1\},\n \{1,1,1,0\}, \{1,1,-1,0\}, \{1,-1,1,0\}, \{1,-1,-1,0\},\n \{-1,1,1,0\}, \{-1,1,-1,0\}, \{-1,-1,1,0\}, \{-1,-1,-1,0\}\n \};\n float F4 = (sqrt(5.0f)-1.0)/4.0;\n float G4 = (5.0-sqrt(5.0f))/20.0;\n float n0, n1, n2, n3, n4;\n float s = (x + y + z + w) * F4;\n int i = fastfloor(x + s);\n int j = fastfloor(y + s);\n int k = fastfloor(z + s);\n int l = fastfloor(w + s);\n float t = (i + j + k + l) * G4;\n float X0 = i - t;\n float Y0 = j - t;\n float Z0 = k - t;\n float W0 = l - t;\n\n float x0 = x - X0;\n float y0 = y - Y0;\n float z0 = z - Z0;\n float w0 = w - W0;\n int c1 = (x0 > y0) ? 32 : 0;\n int c2 = (x0 > z0) ? 16 : 0;\n int c3 = (y0 > z0) ? 8 : 0;\n int c4 = (x0 > w0) ? 4 : 0;\n int c5 = (y0 > w0) ? 2 : 0;\n int c6 = (z0 > w0) ? 1 : 0;\n int c = c1 + c2 + c3 + c4 + c5 + c6;\n\n int i1, j1, k1, l1;\n int i2, j2, k2, l2;\n int i3, j3, k3, l3;\n i1 = simplex\[c]\[0]>=3 ? 1 : 0;\n j1 = simplex\[c]\[1]>=3 ? 1 : 0;\n k1 = simplex\[c]\[2]>=3 ? 1 : 0;\n l1 = simplex\[c]\[3]>=3 ? 1 : 0;\n i2 = simplex\[c]\[0]>=2 ? 1 : 0;\n j2 = simplex\[c]\[1]>=2 ? 1 : 0;\n k2 = simplex\[c]\[2]>=2 ? 1 : 0;\n l2 = simplex\[c]\[3]>=2 ? 1 : 0;\n i3 = simplex\[c]\[0]>=1 ? 1 : 0;\n j3 = simplex\[c]\[1]>=1 ? 1 : 0;\n k3 = simplex\[c]\[2]>=1 ? 1 : 0;\n l3 = simplex\[c]\[3]>=1 ? 1 : 0;\n float x1 = x0 - i1 + G4;\n float y1 = y0 - j1 + G4;\n float z1 = z0 - k1 + G4;\n float w1 = w0 - l1 + G4;\n float x2 = x0 - i2 + 2.0*G4;\n float y2 = y0 - j2 + 2.0*G4;\n float z2 = z0 - k2 + 2.0*G4;\n float w2 = w0 - l2 + 2.0*G4;\n float x3 = x0 - i3 + 3.0*G4;\n float y3 = y0 - j3 + 3.0*G4;\n float z3 = z0 - k3 + 3.0*G4;\n float w3 = w0 - l3 + 3.0*G4;\n float x4 = x0 - 1.0 + 4.0*G4;\n float y4 = y0 - 1.0 + 4.0*G4;\n float z4 = z0 - 1.0 + 4.0*G4;\n float w4 = w0 - 1.0 + 4.0*G4;\n int ii = i & 255;\n int jj = j & 255;\n int kk = k & 255;\n int ll = l & 255;\n int gi0 = perm\[ii+perm\[jj+perm\[kk+perm\[ll]]]] % 32;\n int gi1 = perm\[ii+i1+perm\[jj+j1+perm\[kk+k1+perm\[ll+l1]]]] % 32;\n int gi2 = perm\[ii+i2+perm\[jj+j2+perm\[kk+k2+perm\[ll+l2]]]] % 32;\n int gi3 = perm\[ii+i3+perm\[jj+j3+perm\[kk+k3+perm\[ll+l3]]]] % 32;\n int gi4 = perm\[ii+1+perm\[jj+1+perm\[kk+1+perm\[ll+1]]]] % 32;\n float t0 = 0.6 - x0*x0 - y0*y0 - z0*z0 - w0*w0;\n if(t0<0) n0 = 0.0;\n else \{\n t0 *= t0;\n n0 = t0 * t0 * dot(float4(grad4\[gi0]\[0],grad4\[gi0]\[2],grad4\[gi0]\[3],grad4\[gi0]\[3]), float4(x0, y0, z0, w0));\n \}\n float t1 = 0.6 - x1*x1 - y1*y1 - z1*z1 - w1*w1;\n if(t1<0) n1 = 0.0;\n else \{\n t1 *= t1;\n n1 = t1 * t1 * dot(float4(grad4\[gi1]\[0],grad4\[gi1]\[2],grad4\[gi1]\[3],grad4\[gi1]\[3]), float4(x1, y1, z1, w1));\n \}\n float t2 = 0.6 - x2*x2 - y2*y2 - z2*z2 - w2*w2;\n if(t2<0) n2 = 0.0;\n else \{\n t2 *= t2;\n n2 = t2 * t2 * dot(float4(grad4\[gi2]\[0],grad4\[gi2]\[2],grad4\[gi2]\[3],grad4\[gi2]\[3]), float4(x2, y2, z2, w2));\n \}\n float t3 = 0.6 - x3*x3 - y3*y3 - z3*z3 - w3*w3;\n if(t3<0) n3 = 0.0;\n else \{\n t3 *= t3;\n n3 = t3 * t3 * dot(float4(grad4\[gi3]\[0],grad4\[gi3]\[2],grad4\[gi3]\[3],grad4\[gi3]\[3]), float4(x3, y3, z3, w3));\n \}\n float t4 = 0.6 - x4*x4 - y4*y4 - z4*z4 - w4*w4;\n if(t4<0) n4 = 0.0;\n else \{\n t4 *= t4;\n n4 = t4 * t4 * dot(float4(grad4\[gi4]\[0],grad4\[gi4]\[2],grad4\[gi4]\[3],grad4\[gi4]\[3]), float4(x4, y4, z4, w4));\n \}\n return 27.0 * (n0 + n1 + n2 + n3 + n4);\n\}\ninline float octave_noise_4d( const float octaves, const float persistence, const float scale, const float x, const float y, const float z, const float w ) \n\{\n float total = 0;\n float frequency = scale;\n float amplitude = 1;\n float maxAmplitude = 0;\n for( int i=0; i < octaves; i++ ) \{\n total += (float)raw_noise_4d( x * frequency, y * frequency, z * frequency, w * frequency ) * amplitude;\n\n frequency *= 2;\n maxAmplitude += amplitude;\n amplitude *= persistence;\n \}\n return float(total / maxAmplitude);\n\}\n\nkernel Noise4D : ImageComputationKernel\n\{\n Image src;\n Image dst;\nparam:\n int octaves;\n float persistence;\n float scale;\n void define() \{\n defineParam(octaves, \"octaves\", 8);\n defineParam(persistence, \"persistence\", 0.5f);\n defineParam(scale, \"scale\", 0.001f);\n \}\n void process() \{\n float sample = (float)octave_noise_4d(float(octaves),persistence,scale,src(0),src(1),src(2),src(3));\n dst() = float4(sample,sample,sample,sample);\n\}\n\};" useGPUIfAvailable false vectorize false rebuild "" Noise4D_octaves 7 Noise4D_persistence 0.654 Noise4D_scale 0.002 rebuild_finalise "" name Noise4D selected true } ================================================ FILE: NukeSurvivalToolkit/nk_files/NST_ParticleLights_ExampleScript.nk ================================================ BackdropNode { inputs 0 name BackdropNode1 tile_color 0x388e8e00 label "THE MAIN NODE" note_font "Verdana Bold Bold Bold" note_font_size 100 selected true xpos -2252 ypos 157 bdwidth 869 bdheight 293 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x274427ff label 3d note_font_size 42 selected true xpos -359 ypos 480 bdwidth 275 bdheight 244 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x3d426dff label EXAMPELS note_font "Verdana Bold Bold Bold" note_font_size 100 selected true xpos -1318 ypos 158 bdwidth 2340 bdheight 1258 } StickyNote { inputs 0 name StickyNote1 tile_color 0x59a05dff label " 02: SINGLE LIGHTS " note_font_size 50 selected true xpos 243 ypos 434 } StickyNote { inputs 0 name StickyNote3 tile_color 0x59a05dff label " 01: BASIC PARTICLES " note_font_size 50 selected true xpos -1180 ypos 441 } StickyNote { inputs 0 name StickyNote4 tile_color 0x417544ff label " This is the basic particle light in action. " note_font_size 25 selected true xpos -1189 ypos 513 } StickyNote { inputs 0 name StickyNote2 tile_color 0x417544ff label " In this example we use single particles as \n light sources, just like the regular Light node\n This also shows the half-lambert light \n that makes a softer fake light\n" note_font_size 25 selected true xpos 238 ypos 506 } Axis2 { inputs 0 rotate {0 {-6+(frame/4)} 0} name Axis2 selected true xpos -194 ypos 536 } Camera2 { translate {11.15517521 -5.764003277 24.37641335} rotate {17.72198681 20.00005064 0} focal 36 name Camera1 selected true xpos -194 ypos 602 } Dot { name Dot6 selected true xpos -170 ypos 697 } Dot { name Dot10 selected true xpos -170 ypos 872 } set N4b7ad880 [stack 0] Group { inputs 0 name RandomGeo selected true xpos -339 ypos 698 } Sphere { inputs 0 translate {6.159999847 0 0} name Sphere3 xpos 462 ypos 192 } Cube { inputs 0 rotate {45 45 0} name Cube1 xpos 369 ypos 199 } Sphere { inputs 0 translate {-6.099999905 0 0} name Sphere2 xpos 279 ypos 198 } Scene { inputs 3 name Scene1 xpos 379 ypos 233 } set N4b7dd4b0 [stack 0] push $N4b7dd4b0 TransformGeo { translate {0 5.079999924 0} name TransformGeo1 xpos 369 ypos 334 } Scene { inputs 2 name Scene2 xpos 479 ypos 313 } set N4b7f3f00 [stack 0] TransformGeo { translate {0 0 -7.900000095} name TransformGeo2 xpos 575 ypos 334 } push $N4b7f3f00 Scene { inputs 2 name Scene3 xpos 585 ypos 382 } set N4d20e9a0 [stack 0] push $N4d20e9a0 Scene { inputs 2 name Scene4 xpos 583 ypos 458 } Output { name Output1 xpos 575 ypos 555 } end_group Dot { name Dot8 selected true xpos -229 ypos 701 } Dot { name Dot9 selected true xpos -229 ypos 827 } set N4d10eaf0 [stack 0] Axis2 { inputs 0 translate {0 2 0} rotate {{frame*4} {frame*8} {frame*12}} name Axis3 selected true xpos -1070 ypos 599 } Sphere { inputs 0 translate {4 2 0} uniform_scale 0.4 name Sphere1 selected true xpos -998 ypos 596 } TransformGeo { inputs 2 name TransformGeo1 selected true xpos -998 ypos 620 } push 0 ParticleEmitter { inputs 2 rate 2 lifetime 30 velocity 0.017 size 0.05 size_variation 1 name ParticleEmitter1 selected true xpos -888 ypos 620 } ParticleTurbulence { strength {0.01 {strength.x} {strength.x}} scale {0.5 {scale.x} {scale.x}} name ParticleTurbulence1 selected true xpos -888 ypos 644 } ParticleDrag { drag 0.4 name ParticleDrag1 selected true xpos -888 ypos 680 } ParticleExpression { colexpr sin(pos) name ParticleExpression1 selected true xpos -888 ypos 716 } ParticleCurve { curves {r {} g {} b {} a {} size {curve 0.1251244545 -0.003482580185} mass {}} affect_rgb false affect_alpha false affect_size true name ParticleCurve1 selected true xpos -888 ypos 752 } set N4d2547f0 [stack 0] Scene { inputs 2 name Scene1 selected true xpos -989 ypos 803 } push 0 ScanlineRender { inputs 3 motion_vectors_type distance name ScanlineRender1 selected true xpos -993 ypos 869 } push $N4d10eaf0 Dot { name Dot13 selected true xpos -229 ypos 1047 } set N4d27dea0 [stack 0] push $N4b7ad880 Dot { name Dot12 selected true xpos -170 ypos 1100 } set N4d281db0 [stack 0] push $N4d2547f0 Group { inputs 3 name Particle_Lights3 selected true xpos -888 ypos 1097 addUserKnob {20 User} addUserKnob {26 info1 l "" +STARTLINE T "Particle Lights v1.1"} addUserKnob {26 info2 l "" +STARTLINE T "by Mads Hagbarth Lund"} addUserKnob {26 ""} addUserKnob {41 "blinnShader_Diffuse Multiplier" l "Diffuse Multiplier" T "BlinkScript8.blinnShader_Diffuse Multiplier"} addUserKnob {41 "blinnShader_Specular Power" l "Specular Power" T "BlinkScript8.blinnShader_Specular Power"} addUserKnob {41 "blinnShader_Specular Hardness" l "Specular Hardness" T "BlinkScript8.blinnShader_Specular Hardness"} addUserKnob {41 "blinnShader_Half Lambert" l "Half Lambert" T "BlinkScript8.blinnShader_Half Lambert"} } StickyNote { inputs 0 name StickyNote1 label "A bug in the blink node means that the input size must be atleast 2x2. \nSo we fake this by adding 2 null particles." xpos -847 ypos 354 } Group { inputs 0 name Light2 xpos -679 ypos 487 addUserKnob {20 User} addUserKnob {41 color T Point.color} addUserKnob {41 intensity T Point.intensity} addUserKnob {41 translate T Point.translate} } StickyNote { inputs 0 name StickyNote1 label "Ensure that we can use axis nodes\nto modify the position of the light." xpos -183 ypos -299 } StickyNote { inputs 0 name StickyNote2 label "Dummy object to make it look like a regular light" xpos -188 ypos -235 } StickyNote { inputs 0 name StickyNote4 label "Link positions via the world matrix to get exact position" xpos -300 ypos -55 } StickyNote { inputs 0 name StickyNote3 label "Link RGB to color and Alpha to Intensity" xpos -300 ypos -131 } Constant { inputs 0 color {{parent.Point.color} {parent.Point.color} {parent.Point.color} {parent.Point.intensity/10}} format "1 1 0 0 1 1 1 hg_light" name Constant2 xpos -399 ypos -148 } Sphere { display off render_mode off rows 1 columns 1 translate {{parent.Point.world_matrix.3 x1 11.42000103 x8 -18.5 2.000001907} {parent.Point.world_matrix.7 x1 1.620000005 x8 46.30000305 44.20000076} {parent.Point.world_matrix.11 x1 0.3999999762 x8 -50.79999924 -50.79999924}} uniform_scale 0.022 name Lightx xpos -399 ypos -52 } push 0 ParticleEmitter { inputs 2 display off render_mode off start_frame -5 emit_channels {b} emit_from bbox emit_order uniformly randomize_type "randomize outwards" rate 4 lifetime 1 velocity 0 size 1 size_channel rgba.alpha color_from_texture true name ParticleEmitter1 selected true xpos -399 ypos 46 } Output { name Output1 xpos -399 ypos 150 } Input { inputs 0 name Input1 xpos -276 ypos -296 } Light { color {0 0 0} intensity 0 depthmap_slope_bias 0.01 name Point xpos -266 ypos -216 } end_group Group { inputs 0 name Light1 xpos -684 ypos 428 addUserKnob {20 User} addUserKnob {41 color T Point.color} addUserKnob {41 intensity T Point.intensity} addUserKnob {41 translate T Point.translate} } StickyNote { inputs 0 name StickyNote1 label "Ensure that we can use axis nodes\nto modify the position of the light." xpos -183 ypos -299 } StickyNote { inputs 0 name StickyNote2 label "Dummy object to make it look like a regular light" xpos -188 ypos -235 } StickyNote { inputs 0 name StickyNote4 label "Link positions via the world matrix to get exact position" xpos -300 ypos -55 } StickyNote { inputs 0 name StickyNote3 label "Link RGB to color and Alpha to Intensity" xpos -300 ypos -131 } Constant { inputs 0 color {{parent.Point.color} {parent.Point.color} {parent.Point.color} {parent.Point.intensity/10}} format "1 1 0 0 1 1 1 hg_light" name Constant2 xpos -399 ypos -148 } Sphere { display off render_mode off rows 1 columns 1 translate {{parent.Point.world_matrix.3 x1 11.42000103 x8 -18.5 2.000001907} {parent.Point.world_matrix.7 x1 1.620000005 x8 46.30000305 44.20000076} {parent.Point.world_matrix.11 x1 0.3999999762 x8 -50.79999924 -50.79999924}} uniform_scale 0.022 name Lightx xpos -399 ypos -52 } push 0 ParticleEmitter { inputs 2 display off render_mode off start_frame -5 emit_channels {b} emit_from bbox emit_order uniformly randomize_type "randomize outwards" rate 4 lifetime 1 velocity 0 size 1 size_channel rgba.alpha color_from_texture true name ParticleEmitter1 selected true xpos -399 ypos 46 } Output { name Output1 xpos -399 ypos 150 } Input { inputs 0 name Input1 xpos -276 ypos -296 } Light { color {0 0 0} intensity 0 depthmap_slope_bias 0.01 name Point xpos -266 ypos -216 } end_group push 0 Input { inputs 0 name Particles xpos -452 ypos 324 } ParticleMerge { inputs 4 name ParticleMerge1 xpos -452 ypos 428 } add_layer {hag_pos hag_pos.red hag_pos.green hag_pos.blue hag_pos.alpha} add_layer {hag_active hag_active.a} ParticleToImage { pos hag_pos active hag_active.a name ParticleToImage1 xpos -452 ypos 511 } set N4d456200 [stack 0] Shuffle { in hag_pos name light_pos xpos -329 ypos 511 } Dot { name Dot2 xpos -295 ypos 559 } push $N4d456200 Shuffle { in rgb in2 hag_active alpha red2 name light_color xpos -452 ypos 581 } Input { inputs 0 name Camera xpos -149 ypos 282 number 1 } Camera2 { name Camera1 xpos -136 ypos 320 } Dot { name Dot1 xpos -112 ypos 396 } Input { inputs 0 name Scene3D xpos -275 ypos 323 number 2 } push 0 add_layer {P P.red P.green P.blue P.alpha} add_layer {N N.red N.green N.blue N.alpha} ScanlineRender { inputs 3 max_tessellation 2 motion_vectors_type distance output_shader_vectors true P_channel P N_channel N name ScanlineRender2 xpos -275 ypos 393 } Dot { name Dot10 xpos -241 ypos 421 } set N4d4a9c50 [stack 0] Dot { name Dot3 xpos -152 ypos 421 } Shuffle { in N in2 rgba alpha alpha2 name NormalSplit xpos -186 ypos 472 } push $N4d4a9c50 Shuffle { in P in2 rgba alpha alpha2 name PointPosSplit xpos -275 ypos 472 } BlinkScript { inputs 4 ProgramGroup 1 KernelDescription "1 \"blinnShader\" iterate pixelWise 4b6604ba5b4299095f03f9edf77da6dbf1f946c319dc7f6e6962ca67a375f9f8 5 \"pointPos\" Read Point \"normal\" Read Point \"light_color\" Read Random \"light_pos\" Read Random \"dst\" Write Point 5 \"Camera Position\" Float 3 AACAPwAAgD8AAIA/AAAAAA== \"Diffuse Multiplier\" Float 1 AACAPw== \"Specular Power\" Float 1 AAAgQQ== \"Specular Hardness\" Float 1 AADIQg== \"Half Lambert\" Bool 1 AQ==" kernelSource "kernel blinnShader : ImageComputationKernel\n\{\n Image pointPos; //the input image\n Image normal; //the input image\n Image light_color; //the input image\n Image light_pos; //the input image\n\n Image dst; //the output image\n\n param:\n float3 cameraPosition;\n float diffuseMultiplier;\n float specularPower;\n float specularHardness;\n bool halfLambert;\n\n local:\n float3 lightDir;\n float3 viewDir;\n\n void define() \{\n defineParam(halfLambert,\"Half Lambert\",bool(1));\n defineParam(cameraPosition, \"Camera Position\", float3(1.0f,1.0f,1.0f));\n defineParam(diffuseMultiplier,\"Diffuse Multiplier\",float(1.0f));\n defineParam(specularPower,\"Specular Power\",float(10.0f));\n defineParam(specularHardness,\"Specular Hardness\",float(100.0f));\n \}\n\n void init() \{\n \}\n\n void process() \{\n\n SampleType(dst) sampleBase(0.0f);\n\n float newVal = 0;\n for(int j = 0; j < light_pos.bounds.y2; j++) \{\n for(int i = 0; i < light_pos.bounds.x2; i++) \{\n if (light_color(i,j).w == 1) \{ \n\n lightDir = (float3(light_pos(i,j).x,light_pos(i,j).y,light_pos(i,j).z)-float3(pointPos(0),pointPos(1),pointPos(2)));\n float distance = length(lightDir);\n lightDir = normalize(lightDir);\n distance = distance * distance;\n\n viewDir = (cameraPosition-float3(pointPos(0),pointPos(1),pointPos(2)));\n viewDir = normalize(viewDir);\n\n\n //Calculating Diffuse\n float NdotL = dot(float3(normal(0),normal(1),normal(2)),lightDir);\n if (halfLambert) \{ \n NdotL = NdotL * 0.5 + 0.5; //Added option for half lambert\n \}\n else\n \{\n NdotL = min(1.0f,max(0.0f,NdotL));\n \}\n\n float diffuse = NdotL * (light_pos(i,j).w*diffuseMultiplier) / distance;\n\n\n //Calculating Specular\n float3 H = normalize(lightDir+viewDir);\n float NdotH = dot(float3(normal(0),normal(1),normal(2)),H);\n float intensity = pow(NdotH,specularHardness);\n float specular = intensity * specularPower / distance;\n\n\n SampleType(dst) sample(0.0f);\n sample.x = max(0.0f,(diffuse+specular) * light_color(i,j).x);\n sample.y = max(0.0f,(diffuse+specular) * light_color(i,j).y);\n sample.z = max(0.0f, (diffuse+specular) * light_color(i,j).z);\n sampleBase += sample;\n \}\n \}\n \}\n\n dst() = sampleBase+float4(0,0,0,pointPos(3)); //Reaplying Alpha\n \}\n\};" useGPUIfAvailable false vectorize false rebuild "" "blinnShader_Camera Position" {{parent.Camera1.world_matrix.3} {parent.Camera1.world_matrix.7} {parent.Camera1.world_matrix.11}} "blinnShader_Diffuse Multiplier" 4 "blinnShader_Specular Power" 0.45 "blinnShader_Specular Hardness" 200 "blinnShader_Half Lambert" false rebuild_finalise "" name BlinkScript8 selected true xpos -186 ypos 575 } Premult { name Premult1 xpos -186 ypos 718 } Output { name Output1 xpos -186 ypos 785 } end_group Merge2 { inputs 2 operation plus name Merge1 selected true xpos -985 ypos 1105 } PostageStamp { name PostageStamp2 selected true xpos -993 ypos 1228 postage_stamp true } push $N4d27dea0 push $N4d281db0 push $cut_paste_input Axis2 { translate {0.3803196549 1.175070047 -5.005373955} rotate {{frame} {frame*2} {frame/4}} name Axis1 selected true xpos 523 ypos 786 } set N4d31eae0 [stack 0] Group { name Light1 selected true xpos 421 ypos 904 addUserKnob {20 User} addUserKnob {41 color T Point.color} addUserKnob {41 intensity T Point.intensity} addUserKnob {41 translate T Point.translate} } StickyNote { inputs 0 name StickyNote1 label "Ensure that we can use axis nodes\nto modify the position of the light." xpos -183 ypos -299 } StickyNote { inputs 0 name StickyNote2 label "Dummy object to make it look like a regular light" xpos -188 ypos -235 } StickyNote { inputs 0 name StickyNote4 label "Link positions via the world matrix to get exact position" xpos -300 ypos -55 } StickyNote { inputs 0 name StickyNote3 label "Link RGB to color and Alpha to Intensity" xpos -300 ypos -131 } Input { inputs 0 name Input1 xpos -276 ypos -296 } Light { color {0.24 0.805 0.235} color_panelDropped true intensity 8.8 translate {-8 1 3} depthmap_slope_bias 0.01 name Point xpos -266 ypos -216 } Constant { inputs 0 color {{parent.Point.color} {parent.Point.color} {parent.Point.color} {parent.Point.intensity/10}} format "1 1 0 0 1 1 1 hg_light" name Constant2 selected true xpos -399 ypos -148 } Sphere { display off render_mode off rows 1 columns 1 translate {{parent.Point.world_matrix.3 x1 11.42000103 x8 -18.5 2.000001907} {parent.Point.world_matrix.7 x1 1.620000005 x8 46.30000305 44.20000076} {parent.Point.world_matrix.11 x1 0.3999999762 x8 -50.79999924 -50.79999924}} uniform_scale 0.022 name Lightx xpos -399 ypos -52 } push 0 ParticleEmitter { inputs 2 display off render_mode off emit_channels {b} emit_from bbox emit_order uniformly randomize_type "randomize outwards" rate 1 lifetime 1 velocity 0 size 1 size_channel rgba.alpha color_from_texture true name ParticleEmitter1 xpos -399 ypos 48 } Output { name Output1 xpos -399 ypos 150 } end_group push $N4d31eae0 Group { name Light2 selected true xpos 513 ypos 903 addUserKnob {20 User} addUserKnob {41 color T Point.color} addUserKnob {41 intensity T Point.intensity} addUserKnob {41 translate T Point.translate} } StickyNote { inputs 0 name StickyNote1 label "Ensure that we can use axis nodes\nto modify the position of the light." xpos -183 ypos -299 } StickyNote { inputs 0 name StickyNote2 label "Dummy object to make it look like a regular light" xpos -188 ypos -235 } StickyNote { inputs 0 name StickyNote4 label "Link positions via the world matrix to get exact position" xpos -300 ypos -55 } StickyNote { inputs 0 name StickyNote3 label "Link RGB to color and Alpha to Intensity" xpos -300 ypos -131 } Input { inputs 0 name Input1 xpos -276 ypos -296 } Light { color {0.235 0.235 0.54} color_panelDropped true intensity 10 translate {0 -8 3} depthmap_slope_bias 0.01 name Point xpos -266 ypos -216 } Constant { inputs 0 color {{parent.Point.color} {parent.Point.color} {parent.Point.color} {parent.Point.intensity/10}} format "1 1 0 0 1 1 1 hg_light" name Constant2 selected true xpos -399 ypos -148 } Sphere { display off render_mode off rows 1 columns 1 translate {{parent.Point.world_matrix.3 x1 11.42000103 x8 -18.5 2.000001907} {parent.Point.world_matrix.7 x1 1.620000005 x8 46.30000305 44.20000076} {parent.Point.world_matrix.11 x1 0.3999999762 x8 -50.79999924 -50.79999924}} uniform_scale 0.022 name Lightx xpos -399 ypos -52 } push 0 ParticleEmitter { inputs 2 display off render_mode off emit_channels {b} emit_from bbox emit_order uniformly randomize_type "randomize outwards" rate 1 lifetime 1 velocity 0 size 1 size_channel rgba.alpha color_from_texture true name ParticleEmitter1 xpos -399 ypos 48 } Output { name Output1 xpos -399 ypos 150 } end_group push $N4d31eae0 Group { name Light selected true xpos 607 ypos 903 addUserKnob {20 User} addUserKnob {41 color T Point.color} addUserKnob {41 intensity T Point.intensity} addUserKnob {41 translate T Point.translate} } StickyNote { inputs 0 name StickyNote1 label "Ensure that we can use axis nodes\nto modify the position of the light." xpos -183 ypos -299 } StickyNote { inputs 0 name StickyNote2 label "Dummy object to make it look like a regular light" xpos -188 ypos -235 } StickyNote { inputs 0 name StickyNote4 label "Link positions via the world matrix to get exact position" xpos -300 ypos -55 } StickyNote { inputs 0 name StickyNote3 label "Link RGB to color and Alpha to Intensity" xpos -300 ypos -131 } Constant { inputs 0 color {{parent.Point.color} {parent.Point.color} {parent.Point.color} {parent.Point.intensity/10}} format "1 1 0 0 1 1 1 hg_light" name Constant2 xpos -399 ypos -148 } Sphere { display off render_mode off rows 1 columns 1 translate {{parent.Point.world_matrix.3 x1 11.42000103 x8 -18.5 2.000001907} {parent.Point.world_matrix.7 x1 1.620000005 x8 46.30000305 44.20000076} {parent.Point.world_matrix.11 x1 0.3999999762 x8 -50.79999924 -50.79999924}} uniform_scale 0.022 name Lightx xpos -399 ypos -52 } push 0 ParticleEmitter { inputs 2 display off render_mode off emit_channels {b} emit_from bbox emit_order uniformly randomize_type "randomize outwards" rate 1 lifetime 1 velocity 0 size 1 size_channel rgba.alpha color_from_texture true name ParticleEmitter1 xpos -399 ypos 48 } Output { name Output1 xpos -399 ypos 150 } Input { inputs 0 name Input1 xpos -276 ypos -296 } Light { color {0.85 0.235 0.235} intensity 10 translate {5 2 15} depthmap_slope_bias 0.01 name Point selected true xpos -266 ypos -216 } end_group ParticleMerge { inputs 3 name ParticleMerge1 selected true xpos 513 ypos 1001 } Group { inputs 3 name Particle_Lights1 selected true xpos 513 ypos 1087 addUserKnob {20 User} addUserKnob {26 info1 l "" +STARTLINE T "Particle Lights v1.1"} addUserKnob {26 info2 l "" +STARTLINE T "by Mads Hagbarth Lund"} addUserKnob {26 ""} addUserKnob {41 "blinnShader_Diffuse Multiplier" l "Diffuse Multiplier" T "BlinkScript8.blinnShader_Diffuse Multiplier"} addUserKnob {41 "blinnShader_Specular Power" l "Specular Power" T "BlinkScript8.blinnShader_Specular Power"} addUserKnob {41 "blinnShader_Specular Hardness" l "Specular Hardness" T "BlinkScript8.blinnShader_Specular Hardness"} addUserKnob {41 "blinnShader_Half Lambert" l "Half Lambert" T "BlinkScript8.blinnShader_Half Lambert"} } StickyNote { inputs 0 name StickyNote1 label "A bug in the blink node means that the input size must be atleast 2x2. \nSo we fake this by adding 2 null particles." xpos -847 ypos 354 } Group { inputs 0 name Light2 xpos -679 ypos 487 addUserKnob {20 User} addUserKnob {41 color T Point.color} addUserKnob {41 intensity T Point.intensity} addUserKnob {41 translate T Point.translate} } StickyNote { inputs 0 name StickyNote1 label "Ensure that we can use axis nodes\nto modify the position of the light." xpos -183 ypos -299 } StickyNote { inputs 0 name StickyNote2 label "Dummy object to make it look like a regular light" xpos -188 ypos -235 } StickyNote { inputs 0 name StickyNote4 label "Link positions via the world matrix to get exact position" xpos -300 ypos -55 } StickyNote { inputs 0 name StickyNote3 label "Link RGB to color and Alpha to Intensity" xpos -300 ypos -131 } Constant { inputs 0 color {{parent.Point.color} {parent.Point.color} {parent.Point.color} {parent.Point.intensity/10}} format "1 1 0 0 1 1 1 hg_light" name Constant2 xpos -399 ypos -148 } Sphere { display off render_mode off rows 1 columns 1 translate {{parent.Point.world_matrix.3 x1 11.42000103 x8 -18.5 2.000001907} {parent.Point.world_matrix.7 x1 1.620000005 x8 46.30000305 44.20000076} {parent.Point.world_matrix.11 x1 0.3999999762 x8 -50.79999924 -50.79999924}} uniform_scale 0.022 name Lightx xpos -399 ypos -52 } push 0 ParticleEmitter { inputs 2 display off render_mode off start_frame -5 emit_channels {b} emit_from bbox emit_order uniformly randomize_type "randomize outwards" rate 4 lifetime 1 velocity 0 size 1 size_channel rgba.alpha color_from_texture true name ParticleEmitter1 selected true xpos -399 ypos 46 } Output { name Output1 xpos -399 ypos 150 } Input { inputs 0 name Input1 xpos -276 ypos -296 } Light { color {0 0 0} intensity 0 depthmap_slope_bias 0.01 name Point xpos -266 ypos -216 } end_group Group { inputs 0 name Light1 xpos -684 ypos 428 addUserKnob {20 User} addUserKnob {41 color T Point.color} addUserKnob {41 intensity T Point.intensity} addUserKnob {41 translate T Point.translate} } StickyNote { inputs 0 name StickyNote1 label "Ensure that we can use axis nodes\nto modify the position of the light." xpos -183 ypos -299 } StickyNote { inputs 0 name StickyNote2 label "Dummy object to make it look like a regular light" xpos -188 ypos -235 } StickyNote { inputs 0 name StickyNote4 label "Link positions via the world matrix to get exact position" xpos -300 ypos -55 } StickyNote { inputs 0 name StickyNote3 label "Link RGB to color and Alpha to Intensity" xpos -300 ypos -131 } Constant { inputs 0 color {{parent.Point.color} {parent.Point.color} {parent.Point.color} {parent.Point.intensity/10}} format "1 1 0 0 1 1 1 hg_light" name Constant2 xpos -399 ypos -148 } Sphere { display off render_mode off rows 1 columns 1 translate {{parent.Point.world_matrix.3 x1 11.42000103 x8 -18.5 2.000001907} {parent.Point.world_matrix.7 x1 1.620000005 x8 46.30000305 44.20000076} {parent.Point.world_matrix.11 x1 0.3999999762 x8 -50.79999924 -50.79999924}} uniform_scale 0.022 name Lightx xpos -399 ypos -52 } push 0 ParticleEmitter { inputs 2 display off render_mode off start_frame -5 emit_channels {b} emit_from bbox emit_order uniformly randomize_type "randomize outwards" rate 4 lifetime 1 velocity 0 size 1 size_channel rgba.alpha color_from_texture true name ParticleEmitter1 selected true xpos -399 ypos 46 } Output { name Output1 xpos -399 ypos 150 } Input { inputs 0 name Input1 xpos -276 ypos -296 } Light { color {0 0 0} intensity 0 depthmap_slope_bias 0.01 name Point xpos -266 ypos -216 } end_group push 0 Input { inputs 0 name Particles xpos -452 ypos 324 } ParticleMerge { inputs 4 name ParticleMerge1 xpos -452 ypos 428 } ParticleToImage { pos hag_pos active hag_active.a name ParticleToImage1 xpos -452 ypos 511 } set N4d7955b0 [stack 0] Shuffle { in hag_pos name light_pos xpos -329 ypos 511 } Dot { name Dot2 xpos -295 ypos 559 } push $N4d7955b0 Shuffle { in rgb in2 hag_active alpha red2 name light_color xpos -452 ypos 581 } Input { inputs 0 name Camera xpos -149 ypos 282 number 1 } Camera2 { name Camera1 xpos -136 ypos 320 } Dot { name Dot1 xpos -112 ypos 396 } Input { inputs 0 name Scene3D xpos -275 ypos 323 number 2 } push 0 ScanlineRender { inputs 3 max_tessellation 2 motion_vectors_type distance output_shader_vectors true P_channel point N_channel normal name ScanlineRender2 xpos -275 ypos 393 } Dot { name Dot10 xpos -241 ypos 421 } set N4d7e8eb0 [stack 0] Dot { name Dot3 xpos -152 ypos 421 } Shuffle { in normal in2 rgba alpha alpha2 name NormalSplit xpos -186 ypos 472 } push $N4d7e8eb0 Shuffle { in point in2 rgba alpha alpha2 name PointPosSplit xpos -275 ypos 472 } BlinkScript { inputs 4 ProgramGroup 1 KernelDescription "1 \"blinnShader\" iterate pixelWise 4b6604ba5b4299095f03f9edf77da6dbf1f946c319dc7f6e6962ca67a375f9f8 5 \"pointPos\" Read Point \"normal\" Read Point \"light_color\" Read Random \"light_pos\" Read Random \"dst\" Write Point 5 \"Camera Position\" Float 3 AACAPwAAgD8AAIA/AAAAAA== \"Diffuse Multiplier\" Float 1 AACAPw== \"Specular Power\" Float 1 AAAgQQ== \"Specular Hardness\" Float 1 AADIQg== \"Half Lambert\" Bool 1 AQ==" kernelSource "kernel blinnShader : ImageComputationKernel\n\{\n Image pointPos; //the input image\n Image normal; //the input image\n Image light_color; //the input image\n Image light_pos; //the input image\n\n Image dst; //the output image\n\n param:\n float3 cameraPosition;\n float diffuseMultiplier;\n float specularPower;\n float specularHardness;\n bool halfLambert;\n\n local:\n float3 lightDir;\n float3 viewDir;\n\n void define() \{\n defineParam(halfLambert,\"Half Lambert\",bool(1));\n defineParam(cameraPosition, \"Camera Position\", float3(1.0f,1.0f,1.0f));\n defineParam(diffuseMultiplier,\"Diffuse Multiplier\",float(1.0f));\n defineParam(specularPower,\"Specular Power\",float(10.0f));\n defineParam(specularHardness,\"Specular Hardness\",float(100.0f));\n \}\n\n void init() \{\n \}\n\n void process() \{\n\n SampleType(dst) sampleBase(0.0f);\n\n float newVal = 0;\n for(int j = 0; j < light_pos.bounds.y2; j++) \{\n for(int i = 0; i < light_pos.bounds.x2; i++) \{\n if (light_color(i,j).w == 1) \{ \n\n lightDir = (float3(light_pos(i,j).x,light_pos(i,j).y,light_pos(i,j).z)-float3(pointPos(0),pointPos(1),pointPos(2)));\n float distance = length(lightDir);\n lightDir = normalize(lightDir);\n distance = distance * distance;\n\n viewDir = (cameraPosition-float3(pointPos(0),pointPos(1),pointPos(2)));\n viewDir = normalize(viewDir);\n\n\n //Calculating Diffuse\n float NdotL = dot(float3(normal(0),normal(1),normal(2)),lightDir);\n if (halfLambert) \{ \n NdotL = NdotL * 0.5 + 0.5; //Added option for half lambert\n \}\n else\n \{\n NdotL = min(1.0f,max(0.0f,NdotL));\n \}\n\n float diffuse = NdotL * (light_pos(i,j).w*diffuseMultiplier) / distance;\n\n\n //Calculating Specular\n float3 H = normalize(lightDir+viewDir);\n float NdotH = dot(float3(normal(0),normal(1),normal(2)),H);\n float intensity = pow(NdotH,specularHardness);\n float specular = intensity * specularPower / distance;\n\n\n SampleType(dst) sample(0.0f);\n sample.x = max(0.0f,(diffuse+specular) * light_color(i,j).x);\n sample.y = max(0.0f,(diffuse+specular) * light_color(i,j).y);\n sample.z = max(0.0f, (diffuse+specular) * light_color(i,j).z);\n sampleBase += sample;\n \}\n \}\n \}\n\n dst() = sampleBase+float4(0,0,0,pointPos(3)); //Reaplying Alpha\n \}\n\};" useGPUIfAvailable false vectorize false rebuild "" "blinnShader_Camera Position" {{parent.Camera1.world_matrix.3} {parent.Camera1.world_matrix.7} {parent.Camera1.world_matrix.11}} "blinnShader_Diffuse Multiplier" 1.415 "blinnShader_Specular Power" 15.15 "blinnShader_Specular Hardness" 8.5 rebuild_finalise "" name BlinkScript8 selected true xpos -186 ypos 575 } set N4e00f9b0 [stack 0] Premult { name Premult1 xpos -186 ypos 718 } Output { name Output1 xpos -186 ypos 785 } push $N4e00f9b0 end_group PostageStamp { name PostageStamp1 selected true xpos 513 ypos 1240 postage_stamp true } ================================================ FILE: NukeSurvivalToolkit/nk_files/NST_SSMesh_demo.nk ================================================ Root { inputs 0 mapsize {0.03420523139 0.03513513514} frame 77 format "1280 720 0 0 1280 720 1 HD_720" } BackdropNode { inputs 0 name BackdropNode11 tile_color 0x2a2a4bff label "work with stabilized UV" note_font_size 42 xpos -1279 ypos 1707 bdwidth 2923 bdheight 1592 z_order 9 } BackdropNode { inputs 0 name BackdropNode15 tile_color 0x2a2a4bff label "use focus region" note_font_size 42 xpos -1272 ypos 3537 bdwidth 2905 bdheight 1080 z_order 9 } BackdropNode { inputs 0 name BackdropNode5 tile_color 0x2a2a4bff label "Data type supported" note_font_size 42 xpos -1273 ypos -845 bdwidth 2905 bdheight 1080 z_order 9 } BackdropNode { inputs 0 name BackdropNode8 tile_color 0x2a2a4bff label "distance clip" note_font_size 42 xpos -1272 ypos 388 bdwidth 2905 bdheight 1080 z_order 9 } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x7171c600 label "render with position world space" note_font_size 42 xpos -1112 ypos -552 bdwidth 606 bdheight 615 z_order 10 } BackdropNode { inputs 0 name BackdropNode10 tile_color 0x7171c600 label "work with stabilized UV\n(texturing / painting / mask)" note_font_size 42 xpos 151 ypos 1847 bdwidth 970 bdheight 1257 z_order 10 } BackdropNode { inputs 0 name BackdropNode14 tile_color 0x7171c600 note_font_size 42 xpos -1114 ypos 3717 bdwidth 630 bdheight 753 z_order 10 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x7171c600 label "render with position camera space" note_font_size 42 xpos -445 ypos -549 bdwidth 599 bdheight 609 z_order 10 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x7171c600 label "render with zdepth\n(normalized far=0, scanlineRender)" note_font_size 42 xpos 224 ypos -548 bdwidth 599 bdheight 606 z_order 10 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x7171c600 label "render with deep / depth (direct)" note_font_size 42 xpos 907 ypos -552 bdwidth 599 bdheight 606 z_order 10 } BackdropNode { inputs 0 name BackdropNode6 tile_color 0x7171c600 label "distance clip\n(with color clipped)" note_font_size 42 xpos -1120 ypos 657 bdwidth 606 bdheight 615 z_order 10 } BackdropNode { inputs 0 name BackdropNode7 tile_color 0x7171c600 label "distance clip\n(without color clipped)" note_font_size 42 xpos -415 ypos 658 bdwidth 606 bdheight 615 z_order 10 } BackdropNode { inputs 0 name BackdropNode9 tile_color 0x7171c600 label "work with stabilized UV\n(texturing / painting / mask)" note_font_size 42 xpos -1118 ypos 1839 bdwidth 987 bdheight 1243 z_order 10 } BackdropNode { inputs 0 name BackdropNode12 tile_color 0x373760ff label "Do Texture work here" note_font_size 42 xpos -888 ypos 2362 bdwidth 408 bdheight 311 z_order 11 } BackdropNode { inputs 0 name BackdropNode13 tile_color 0x373760ff label "Do Texture work here" note_font_size 42 xpos 421 ypos 2328 bdwidth 397 bdheight 345 z_order 11 } Group { inputs 0 name render_with_pworld xpos -816 ypos -369 postage_stamp true } Camera2 { inputs 0 translate {{curve x1 -23.73355293 x50 1.828465939 x100 10.79810143} {curve x1 6.752248287 x50 13.82691669 x100 25.23773003} {curve x1 -3.158116341 x50 5.475767136 x100 -12.79232216}} rotate {{curve x1 30.63627052 x50 14.22963619 x100 -23.22279344} {curve x1 -44.94124796 x50 19.70681696 x100 76.6501109} {curve x1 0 x50 27.42004885 x100 13.36756642}} focal 24 name Camera1 xpos 241 ypos -567 } Dot { name Dot2 xpos 351 ypos -543 } set N81983f90 [stack 0] Dot { name Dot3 xpos 351 ypos -428 } push $N81983f90 CheckerBoard2 { inputs 0 name CheckerBoard1 xpos 406 ypos -928 } Dot { name Dot1 xpos 440 ypos -814 } set N8198ce40 [stack 0] Dot { name Dot5 xpos 553 ypos -814 } set N8198f260 [stack 0] Dot { name Dot4 xpos 693 ypos -814 } Multiply { channels rgb value {0 1 1 1} name Multiply3 xpos 659 ypos -756 } Cube { rows 1 columns 1 separate_faces false translate {-7.849998951 18.14999962 -19.00000191} rotate {0 0 45.93192592} uniform_scale 7 name Cube1 xpos 659 ypos -676 } push $N8198f260 Multiply { channels rgb value {1 0 1 1} name Multiply2 xpos 519 ypos -750 } Sphere { translate {-15.00000191 16.45000076 -17.79999924} scaling {3.183291435 1 2.618715286} uniform_scale 2 name Sphere1 xpos 519 ypos -670 } push $N8198ce40 Multiply { channels rgb value {1 1 0 1} name Multiply1 xpos 406 ypos -754 } Cylinder { rows 1 close_top true close_bottom true translate {-3.149999619 19.64999962 -13.89999866} rotate {52.26493538 0 32.53306187} scaling {1 4.216488838 1} uniform_scale 2 name Cylinder1 xpos 406 ypos -673 } Scene { inputs 4 name Scene1 xpos 416 ypos -567 } Reformat { inputs 0 type "to box" box_width 1280 box_height 720 box_fixed true name Reformat1 xpos 530 ypos -431 } add_layer {pworld pworld.red pworld.green pworld.blue pworld.alpha} ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type off MB_channel none output_shader_vectors true P_channel pworld name ScanlineRender1 xpos 406 ypos -431 } Output { name Output1 xpos 406 ypos -331 } end_group Group { name SSMesh8 tile_color 0x5c9e83ff label "Geo Output" xpos -816 ypos -202 addUserKnob {20 tab_general l General} addUserKnob {22 set_link l "link to selected camera" t "Click to link selected camera by expression. This tool will get the focal, haperture and world matrix from selected camera to generate" T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\n\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\ndefaultKnobs = \{\n\t\t\t'world matrix' : 'world_matrix',\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.focal'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.haperture'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.win_translate'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.win_scale'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.winroll'.format(CAMnode))\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']))\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']))\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']))\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']))\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window roll']))\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\n\nfor knob in thisGRP.knobs() :\n\tif mainKnobs.count(knob) != 0 :\n\t\t thisGRP\[knob].clearAnimated()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 cam_focal l "focal length" R 5 100} cam_focal {{Camera2.focal}} addUserKnob {7 cam_haperture l "horiz aperture" R 0.1 50} cam_haperture {{Camera2.haperture}} addUserKnob {30 cam_win_translate l "window translate"} cam_win_translate {{Camera2.win_translate} {Camera2.win_translate}} addUserKnob {30 cam_win_scale l "window scale"} cam_win_scale {{Camera2.win_scale} {Camera2.win_scale}} addUserKnob {7 cam_winroll l "window roll" R -45 45} cam_winroll {{Camera2.winroll}} addUserKnob {41 world_matrix l "world matrix" T cam_data.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 spacer_5 l "" +STARTLINE T
    } addUserKnob {26 title_basic l "BASIC SETTING"} addUserKnob {4 display l "3D display" t "How to draw in 3D preview. The viewer can override this setting." M {off wireframe soild solid+wireframe textured textured+wireframe "" "" ""}} display textured addUserKnob {4 data_type l "data type" t "data type\nUsing one of these data to convert into 3D mesh.\n\nPosition\nSupported world space or camera space position data.\n\nDepth (normalized far=0)\nNormalized depth data, which is same as depth data output by ScanlineRender.\n\nDeep / Depth (direct)\nRaw camera depth data. If using deep, need to convert DeepToImage first, and selected deep channel on 'channels' knob." M {"position (world space)" "position (camera space)" "depth (normalized far=0)" "deep / depth (direct)" "" "" ""}} addUserKnob {41 channels t "Select which channel represented on selected data type." T shuffle_data.in} addUserKnob {6 unpm l unpremult t "3D data pass should be unpremult with alpha before process." -STARTLINE} unpm true addUserKnob {26 spacer_4 l "" +STARTLINE T
    } addUserKnob {7 lod l "mesh LOD" t "Level of Details\n\nIf this value set to 1.0, subdivision of the mesh 1:1 to the data available in the resolution. Which mean 1 face of the mesh equal to 1 pixel.\n\nIf this value set to 1.0, it will slow down the render process.\n\nHighly recommend to use 0.1 - 0.5 if high resolution mesh details is not concern."} lod 0.1 addUserKnob {41 filter_size l "filter size" T DisplaceGeo.filter_size} addUserKnob {41 filter T DisplaceGeo.filter} addUserKnob {26 spacer_2 l "" +STARTLINE T
    } addUserKnob {26 title_drange l "" +STARTLINE T "distance range"} addUserKnob {7 drange_near l near t "clip the mesh in the min value in terms of depth." R 0 10000} addUserKnob {7 drange_far l far t "clip the mesh in the max value in terms of depth." R 0 10000} drange_far 30 addUserKnob {6 clip_color l "distance clip on color" t "Apply the distance clip on colored texture." +STARTLINE} clip_color true addUserKnob {26 spacer_3 l "" +STARTLINE T
    } addUserKnob {26 title_export l EXPORT} addUserKnob {41 file t "only support *.abc file extension (alembric) ." T WriteGeo.file} addUserKnob {22 export_geo l "Export Geo" T "def exportGeo() :\n\twgeo = nuke.toNode('WriteGeo')\n\twgeo\['Execute'].execute()\n\nthisGRP = nuke.thisGroup()\nfilepath = thisGRP\['file'].getValue()\n\nif not len(filepath) :\n\tnuke.message('file path is empty. Process denied.')\nelif not filepath.split('.')\[-1:]\[0].lower() == 'abc' :\n\tif nuke.ask('File extension invalue. Only support render *.abc . Do you want this tool to fix it and process ?') :\n\t\tthisGRP\['file'].setValue( thisGRP\['file'].getValue() + '.abc' )\n\t\texportGeo()\nelse :\n\texportGeo()" +STARTLINE} addUserKnob {22 import_geo l "Import Geo" -STARTLINE T "prefx = nuke.toNode('preferences')\['GridWidth'].value()\nthisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\nroot = getLevel()\n\nwith root :\n\trgeo = nuke.nodes.ReadGeo2( file=thisGRP\['file'].getValue() )\n\trgeo.setXYpos( int( thisGRP\['xpos'].getValue() + prefx ) , int( thisGRP\['ypos'].getValue() ) )"} addUserKnob {20 tab_misc l Miscellaneous} addUserKnob {26 title_focus_region l "FOCUS REGION"} addUserKnob {41 use_focus_region l "use focus region" t "use focus region to generate SSMesh in specific area. Save resources and possible to work with high LOD mesh." T menu2.use_focus_region} addUserKnob {15 focus_region l "focus region" t "Set focus region in screen space. These values are 2D coordinate." +DISABLED} focus_region {0 0 1280 720} addUserKnob {26 spacer_1 l "" +STARTLINE T
    } addUserKnob {3 fregion_ref_frame l "ref frame" t "set reference frame for tracking focus region. 'focus region' & 'define z' will apply on this reference frame and process the tracking." +DISABLED} fregion_ref_frame 1 addUserKnob {22 fregion_set_frame l "set current frame" t "set current frame for focus region reference frame." -STARTLINE +DISABLED T "nuke.thisGroup()\['fregion_ref_frame'].setValue( nuke.frame() )"} addUserKnob {12 sample_point l "sample position" t "Toggle 'sample z' in 2D to enable this 2D sample coordinate." +DISABLED} addUserKnob {22 sample_z_toggle l "sample z in 2D" t "'sample z' is only works for sample value purpose. After sample is done, must turn off sample function." -STARTLINE +DISABLED T "thisGRP = nuke.thisGroup()\nszstatus = thisGRP\['sample_z_status'].value()\n\nstatus = \['\[ OFF ]','\[ ON ]']\n\nif szstatus == status\[0] :\n\tthisGRP\['sample_z_status'].setValue( status\[1] )\n\tthisGRP\['sample_point'].setEnabled(True)\n\tthisGRP\['updateUI'].setValue(\"goStore = nuke.toNode(\\'store\\')\\ngoStore\[\\'fn\\'].execute()\\nsample2d()\")\nelse :\n\tthisGRP\['sample_z_status'].setValue( status\[0] )\n\tthisGRP\['sample_point'].setEnabled(False)\n\tthisGRP\['updateUI'].setValue('')"} addUserKnob {26 sample_z_status l "" -STARTLINE +DISABLED T "\[ OFF ]"} addUserKnob {7 fregion_define_z l "define z" t "Define the z value on reference frame. Can use 'sample z in 2D' to get this value." +DISABLED R 0 10000} addUserKnob {22 track_focus_region l "\[ track focus region ]" t "Use the set focus region on reference frame to track with camera in 3D space.\n\n* project setting need to be same as image resolution to get the correct result." +DISABLED T "rootST = int( nuke.root()\['first_frame'].getValue() )\nrootED = int( nuke.root()\['last_frame'].getValue() )\n\ngetFrame = nuke.getFramesAndViews( 'frame range', str( rootST ) + '-' + str( rootED ) )\n\ntry :\n\tframeST = int( getFrame\[0].replace( ' ' , '' ).split('-')\[0] )\n\tframeED = int( getFrame\[0].replace( ' ' , '' ).split('-')\[1] )\n\n\tthisGRP = nuke.thisGroup()\n\trefframe = int( thisGRP\['fregion_ref_frame'].getValue() )\n\tcam = nuke.toNode('cam_data')\n\tpt1 = nuke.toNode('left_pt')\['translate'].getValue()\n\tpt2 = nuke.toNode('right_pt')\['translate'].getValue()\n\n\tct_hack = nuke.nodes.CurveTool()\n\n\twith nuke.root() :\n\n\t\tif frameED - frameST != 0 :\n\t\t\tthisGRP\['focus_region'].clearAnimated()\n\t\t\ttempbuffer1 = thisGRP\['focus_region'].getValue()\n\t\t\tthisGRP\['focus_region'].setAnimated()\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[0] , refframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[1] , refframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[2] , refframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[3] , refframe , 3 )\n\n\t\tfor trackframe in range( frameST, frameED+1 , 1 ) :\n\t\t\tnuke.execute( ct_hack, trackframe, trackframe )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[0] , trackframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[1] , trackframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[0] , trackframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[1] , trackframe , 3 )\n\n\tnuke.delete( ct_hack )\nexcept :\n pass" +STARTLINE} addUserKnob {26 spacer_6 l "" +STARTLINE T
    } addUserKnob {20 grp_crop_preview l "3D crop preview" +DISABLED n 1} grp_crop_preview 0 addUserKnob {6 show_crop l "show crop point" t "It will show 2 spheres for the crop in 3D space. They set in the place which is where you set the focus region in screen space and defined by z." +DISABLED +STARTLINE} addUserKnob {7 crop_point_scale l scale t "Scale the preview crop points (spheres)." +DISABLED} crop_point_scale 0.3 addUserKnob {18 crop_point_color l color t "change color of the crop points (spheres)." +DISABLED} crop_point_color 1 addUserKnob {6 crop_point_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup n -1} addUserKnob {26 spacer l "" +STARTLINE T
    } addUserKnob {26 title_uv l UV} addUserKnob {41 uv_stabilize l "uv stabilize" t "Turn this on if you need to stabilize in UV space. During UV stabilize on, the geo will not be animated. Set reference frame under 'mesh ref frame'." T menu1.uv_stabilize} addUserKnob {3 uv_ref_frame l "mesh ref frame" t "Select the frame number that will have identity geo shaped for UV texturing." +DISABLED} uv_ref_frame 1001 addUserKnob {22 uv_set_frame l "set current frame" -STARTLINE +DISABLED T "nuke.thisGroup()\['uv_ref_frame'].setValue( nuke.frame() )"} addUserKnob {6 black_outside l "black outside" t "black outside the UV texture." +DISABLED +STARTLINE} black_outside true addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.3} addUserKnob {26 l_DATE l "Date Modified" T 2019-11-08} addUserKnob {26 l_CHANGELOG l Changelog T "1.3\n- camera window supported\n- anamophic project supported\n- fix the conflict of 'force region' and 'UV stabilize'.\n can use both at the same time now.\n\n1.2\n- removed unuse camera link knobs\n- added focus region, so mesh can be\n form in specific area/object to save\n resources for higher LOD\n\n1.1\n- fix the missing line on 'Export Geo' \n button\n\n1.0\n- create mesh/geo in screen space\n using position/depth/deep data"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "don't touch" note_font_size 32 xpos -1142 ypos -169 bdwidth 202 bdheight 478 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x4c4c4cff label bin note_font_size 32 xpos -899 ypos -170 bdwidth 200 bdheight 280 } Input { inputs 0 name img xpos -100 ypos -184 } Dot { name img_dot xpos -66 ypos -83 } set N6a09e790 [stack 0] Dot { name Dot3 xpos 758 ypos -83 } set N5a77e6c0 [stack 0] Shuffle { in pworld in2 alpha alpha red2 name shuffle_data label "\[value in]" xpos 724 ypos -32 } Unpremult { name Unpremult_data xpos 724 ypos 62 disable {{!parent.unpm}} } Dot { name Dot5 xpos 758 ypos 700 } set N5022cf20 [stack 0] Dot { name Dot6 xpos 928 ypos 700 } set N831fb820 [stack 0] Dot { name Dot7 xpos 1106 ypos 700 } set N831832b0 [stack 0] Dot { name Dot8 xpos 1260 ypos 700 } Expression { temp_name0 dvalue temp_expr0 red temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression9 xpos 1226 ypos 774 } Dot { name Dot16 xpos 1260 ypos 889 } push $N831832b0 Expression { temp_name0 dvalue temp_expr0 "1 / red" temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression6 xpos 1072 ypos 774 } Dot { name Dot17 xpos 1106 ypos 863 } push $N831fb820 Expression { expr2 -blue name Expression7 label "fix z" xpos 894 ypos 774 } Dot { name Dot18 xpos 928 ypos 876 } push $N5022cf20 Expression { temp_name0 nx temp_expr0 "red - cam_data.world_matrix.3" temp_name1 ny temp_expr1 "green - cam_data.world_matrix.7" temp_name2 nz temp_expr2 "blue - cam_data.world_matrix.11" expr0 "nx * \[value inverseMatrix.invMatrix.0] + ny * \[value inverseMatrix.invMatrix.1] + nz * \[value inverseMatrix.invMatrix.2]" expr1 "nx * \[value inverseMatrix.invMatrix.3] + ny * \[value inverseMatrix.invMatrix.4] + nz * \[value inverseMatrix.invMatrix.5]" expr2 "nx * \[value inverseMatrix.invMatrix.6] + ny * \[value inverseMatrix.invMatrix.7] + nz * \[value inverseMatrix.invMatrix.8]" name Expression3 label "position invert" xpos 724 ypos 774 } Switch { inputs 4 which {{parent.data_type}} name Switch1 xpos 724 ypos 984 } Dot { name Dot13 xpos 758 ypos 1113 } set N5a492f40 [stack 0] Dot { name sam_dot xpos 551 ypos 1113 } NoOp { inputs 0 name menu1 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['uv_stabilize'].getValue() == 1 :\n thisGRP\['uv_ref_frame'].setEnabled(True)\n thisGRP\['uv_set_frame'].setEnabled(True)\n thisGRP\['black_outside'].setEnabled(True)\nelse :\n thisGRP\['uv_ref_frame'].setEnabled(False)\n thisGRP\['uv_set_frame'].setEnabled(False)\n thisGRP\['black_outside'].setEnabled(False)\n" xpos -1085 ypos -42 addUserKnob {20 User} addUserKnob {6 uv_stabilize l "uv stabilize" +STARTLINE} } NoOp { inputs 0 name menu2 onCreate "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nthisGRP\[fregion_knobs\[4]].setEnabled(True)\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n else :\n thisGRP\[i].setEnabled(False)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" knobChanged "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" xpos -1085 ypos 25 addUserKnob {20 User} addUserKnob {6 use_focus_region l "use focus region" +STARTLINE} } Camera { inputs 0 display off selectable false useMatrix true matrix { {{Camera2.world_matrix} {Camera2.world_matrix} {Camera2.world_matrix} {Camera2.world_matrix}} {{Camera2.world_matrix} {Camera2.world_matrix} {Camera2.world_matrix} {Camera2.world_matrix}} {{Camera2.world_matrix} {Camera2.world_matrix} {Camera2.world_matrix} {Camera2.world_matrix}} {{Camera2.world_matrix} {Camera2.world_matrix} {Camera2.world_matrix} {Camera2.world_matrix}} } focal {{parent.cam_focal}} haperture {{cam_haperture}} name cam_data xpos -335 ypos 2204 } push $N5a492f40 Expression { temp_name0 unpremultA temp_expr0 "alpha * ( 1 / alpha )" temp_name1 max temp_expr1 blue expr3 "abs( max ) < \[value parent.drange_near] || abs( max ) > \[value parent.drange_far] ? 0 : isnan(unpremultA) ? 0 : unpremultA" name Expression1 label "distance crop" xpos 724 ypos 1244 } Premult { name Premult1 xpos 724 ypos 1332 } Dot { name Dot9 xpos 758 ypos 1640 } set N5a4a2a00 [stack 0] push $N6a09e790 Dot { name Dot10 xpos -66 ypos 1552 } set N6a5a4250 [stack 0] Unpremult { name Unpremult1 xpos 48 ypos 1549 } Merge2 { inputs 2 operation mask name Merge2 xpos 48 ypos 1637 } Premult { name Premult3 xpos 48 ypos 1719 } push $N6a5a4250 Switch { inputs 2 which {{parent.clip_color}} name Switch2 xpos -100 ypos 1828 } Project3D2 { inputs 2 crop {{parent.black_outside}} name Project3D2 xpos -100 ypos 2224 } push $N5a77e6c0 Dot { name Dot2 xpos 1576 ypos -84 } Shuffle { red black green black blue black alpha black name Shuffle1 label "\[value in]" xpos 1542 ypos 30 } Remove { name Remove1 xpos 1542 ypos 118 } Reformat { type scale black_outside true name Reformat1 xpos 1542 ypos 212 } Expression { temp_name0 xpos temp_expr0 "( ( x + 0.5 ) / input.width - 0.5) * \[value global_math.hratio] * abs( \[value parent.drange_far] )" temp_name1 ypos temp_expr1 "( ( y + 0.5 ) / input.height -0.5 ) * ( \[value global_math.hratio] * abs( \[value parent.drange_far] ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name2 zpos temp_expr2 "-\[value parent.drange_far]" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression8 xpos 1542 ypos 845 } ColorMatrix { matrix { {{cam_data.world_matrix.0} {cam_data.world_matrix.1} {cam_data.world_matrix.2}} {{cam_data.world_matrix.4} {cam_data.world_matrix.5} {cam_data.world_matrix.6}} {{cam_data.world_matrix.8} {cam_data.world_matrix.9} {cam_data.world_matrix.10}} } name ColorMatrix1 xpos 1542 ypos 970 } Add { channels rgb value {{cam_data.world_matrix.3} {cam_data.world_matrix.7} {cam_data.world_matrix.11} 0} name Add1 xpos 1542 ypos 1052 } Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop1 xpos 1542 ypos 1476 disable {{!parent.use_focus_region}} } Dot { name Dot4 xpos 1576 ypos 2402 } push $N5a4a2a00 Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop4 selected true xpos 724 ypos 1714 disable {{!parent.use_focus_region}} } Unpremult { name Unpremult3 xpos 724 ypos 1851 } Expression { temp_name0 nx temp_expr0 red temp_name1 ny temp_expr1 green temp_name2 nz temp_expr2 blue expr0 "( nx * \[value cam_data.world_matrix.0] + ny * \[value cam_data.world_matrix.1] + nz * \[value cam_data.world_matrix.2] ) + \[value cam_data.world_matrix.3]" expr1 "( nx * \[value cam_data.world_matrix.4] + ny * \[value cam_data.world_matrix.5] + nz * \[value cam_data.world_matrix.6] ) + \[value cam_data.world_matrix.7]" expr2 "( nx * \[value cam_data.world_matrix.8] + ny * \[value cam_data.world_matrix.9] + nz * \[value cam_data.world_matrix.10] ) + \[value cam_data.world_matrix.11]" name Expression4 label "position revert" xpos 724 ypos 1933 } Premult { name Premult2 xpos 724 ypos 2027 } Merge2 { inputs 2 operation under name Merge1 xpos 724 ypos 2398 } Card { inputs 0 image_aspect false rows {{"img_dot.height * parent.lod"}} columns {{"img_dot.width * parent.lod"}} name ssmesh xpos 343 ypos 2317 } DisplaceGeo { inputs 2 source "rgb absolute" scale 1 filter_size 1 name DisplaceGeo xpos 343 ypos 2399 } FrameHold { first_frame {{parent.uv_ref_frame}} name FrameHold xpos 343 ypos 2479 disable {{!parent.uv_stabilize}} } ApplyMaterial { inputs 2 name ApplyMaterial1 xpos -100 ypos 2483 } Scene { display {{parent.display}} name gl_scene xpos -90 ypos 3072 } set N50253b80 [stack 0] WriteGeo { file_type abc name WriteGeo xpos 120 ypos 3093 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt2.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name right_pt xpos -600 ypos 3218 } CheckerBoard2 { inputs 0 format "256 256 0 0 256 256 1 square_256" name CheckerBoard1 xpos -789 ypos 2694 } Multiply { channels rgb value {{parent.crop_point_color.r} {parent.crop_point_color.g} {parent.crop_point_color.b} 1} name Multiply xpos -789 ypos 2822 } Clamp { channels rgba name Clamp1 xpos -789 ypos 2905 } Sphere { selectable false cast_shadow false receive_shadow false rows 10 columns 10 uniform_scale {{parent.crop_point_scale}} name Sphere1 xpos -789 ypos 2987 disable {{!show_crop}} } Dot { name Dot24 xpos -755 ypos 3065 } set N4a72f9f0 [stack 0] Dot { name Dot25 xpos -456 ypos 3065 } TransformGeo { inputs 2 selectable false name TransformGeo2 xpos -490 ypos 3238 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt1.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name left_pt xpos -899 ypos 3220 } push $N4a72f9f0 TransformGeo { inputs 2 selectable false name TransformGeo1 xpos -789 ypos 3240 } Scene { inputs 2 selectable false name Scene1 xpos -480 ypos 3395 } ApplyMaterial { display off selectable false render_mode off name material_switch xpos -490 ypos 3523 } push $N50253b80 Scene { inputs 2 name Scene2 xpos -90 ypos 3502 } Output { name Output1 xpos -100 ypos 4030 } Group { inputs 0 name inverseMatrix tile_color 0x337f4cff xpos 576 ypos 780 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path cam_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2011-11-28} addUserKnob {26 l_CHANGELOG l Changelog T "v1.0\n- reveal the calculate output of \n inverse matrix which is c44matrix\n and colormatrix doesn't show\n "} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group Camera { inputs 0 rotate {0 0 {-parent.cam_winroll}} win_translate {{parent.cam_win_translate} {parent.cam_win_translate}} win_scale {{parent.cam_win_scale} {parent.cam_win_scale}} name fb_data xpos -340 ypos 2087 } NoOp { inputs 0 name store xpos -843 ypos 28 addUserKnob {20 User} addUserKnob {22 fn T "### level define ###\n\ndef getLevel() :\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\tggLevel = nuke.root()\n\telse :\n\t\tnodePath = nuke.thisNode().fullName().split('.')\n\t\tnodePath.pop()\n\t\tggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\n### sample z in 2D ###\n\ndef sample2d() :\n\tthisGRP = nuke.thisGroup()\n\tif thisGRP\['sample_z_status'].value() == '\[ ON ]' :\n\t\tsam_co = thisGRP\['sample_point'].getValue()\n\t\tzdata = nuke.toNode('sam_dot').sample('blue', sam_co\[0], sam_co\[1]) * -1\n\t\tthisGRP\['fregion_define_z'].setValue( zdata )" +STARTLINE} addUserKnob {15 fregion} fregion {{parent.focus_region} {parent.focus_region} {parent.focus_region} {parent.focus_region}} } NoOp { inputs 0 name global_math xpos -842 ypos -43 addUserKnob {20 User} addUserKnob {7 hratio} hratio {{"cam_data.haperture / cam_data.focal"}} addUserKnob {7 maxwidth} maxwidth {{"hratio * parent.fregion_define_z"}} addUserKnob {7 maxheight} maxheight {{"hratio * parent.fregion_define_z * ( img_dot.height / img_dot.width )"}} addUserKnob {13 pt1} pt1 {{"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + \n( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} addUserKnob {13 pt2} pt2 {{"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} } end_group Camera2 { inputs 0 translate {{curve x1 -23.73355293 x50 1.828465939 x100 10.79810143} {curve x1 6.752248287 x50 13.82691669 x100 25.23773003} {curve x1 -3.158116341 x50 5.475767136 x100 -12.79232216}} rotate {{curve x1 30.63627052 x50 14.22963619 x100 -23.22279344} {curve x1 -44.94124796 x50 19.70681696 x100 76.6501109} {curve x1 0 x50 27.42004885 x100 13.36756642}} focal 24 name Camera2 xpos -983 ypos -209 } Scene { inputs 2 name Scene1 xpos -806 ypos -68 } Dot { name Dot1 xpos -782 ypos 119 } Group { inputs 0 name render_with_pcam xpos -157 ypos -375 postage_stamp true } Camera2 { inputs 0 translate {{curve x1 -23.73355293 x50 1.828465939 x100 10.79810143} {curve x1 6.752248287 x50 13.82691669 x100 25.23773003} {curve x1 -3.158116341 x50 5.475767136 x100 -12.79232216}} rotate {{curve x1 30.63627052 x50 14.22963619 x100 -23.22279344} {curve x1 -44.94124796 x50 19.70681696 x100 76.6501109} {curve x1 0 x50 27.42004885 x100 13.36756642}} focal 24 name Camera1 xpos 241 ypos -567 } Dot { name Dot2 xpos 351 ypos -543 } set N818864f0 [stack 0] Dot { name Dot3 xpos 351 ypos -428 } push $N818864f0 CheckerBoard2 { inputs 0 name CheckerBoard1 xpos 406 ypos -928 } Dot { name Dot1 xpos 440 ypos -814 } set N7ed45e80 [stack 0] Dot { name Dot5 xpos 553 ypos -814 } set N7ed48200 [stack 0] Dot { name Dot4 xpos 693 ypos -814 } Multiply { channels rgb value {0 1 1 1} name Multiply3 xpos 659 ypos -756 } Cube { rows 1 columns 1 separate_faces false translate {-7.849998951 18.14999962 -19.00000191} rotate {0 0 45.93192592} uniform_scale 7 name Cube1 xpos 659 ypos -676 } push $N7ed48200 Multiply { channels rgb value {1 0 1 1} name Multiply2 xpos 519 ypos -750 } Sphere { translate {-15.00000191 16.45000076 -17.79999924} scaling {3.183291435 1 2.618715286} uniform_scale 2 name Sphere1 xpos 519 ypos -670 } push $N7ed45e80 Multiply { channels rgb value {1 1 0 1} name Multiply1 xpos 406 ypos -754 } Cylinder { rows 1 close_top true close_bottom true translate {-3.149999619 19.64999962 -13.89999866} rotate {52.26493538 0 32.53306187} scaling {1 4.216488838 1} uniform_scale 2 name Cylinder1 xpos 406 ypos -673 } Scene { inputs 4 name Scene1 xpos 416 ypos -567 } Reformat { inputs 0 type "to box" box_width 1280 box_height 720 box_fixed true name Reformat1 xpos 530 ypos -431 } add_layer {pcam pcam.red pcam.green pcam.blue pcam.alpha} ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type off MB_channel none output_shader_vectors true P_channel pcam name ScanlineRender1 xpos 406 ypos -431 } Add { channels pcam value {{-Camera1.world_matrix.3} {-Camera1.world_matrix.7} {-Camera1.world_matrix.11} {curve}} name Add1 xpos 406 ypos -351 } ColorMatrix { channels pcam matrix { {{Camera1.world_matrix.0} {Camera1.world_matrix.1} {Camera1.world_matrix.2}} {{Camera1.world_matrix.4} {Camera1.world_matrix.5} {Camera1.world_matrix.6}} {{Camera1.world_matrix.8} {Camera1.world_matrix.9} {Camera1.world_matrix.10}} } invert true name ColorMatrix1 xpos 406 ypos -274 } Expression { channel2 {-pcam.red -pcam.green pcam.blue pcam.alpha} expr2 abs(pcam.blue) name Expression1 selected true xpos 406 ypos -186 } Output { name Output1 xpos 406 ypos -65 } end_group Group { name SSMesh9 tile_color 0x5c9e83ff label "Geo Output" xpos -157 ypos -205 addUserKnob {20 tab_general l General} addUserKnob {22 set_link l "link to selected camera" t "Click to link selected camera by expression. This tool will get the focal, haperture and world matrix from selected camera to generate" T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\n\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\ndefaultKnobs = \{\n\t\t\t'world matrix' : 'world_matrix',\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.focal'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.haperture'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.win_translate'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.win_scale'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.winroll'.format(CAMnode))\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']))\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']))\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']))\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']))\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window roll']))\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\n\nfor knob in thisGRP.knobs() :\n\tif mainKnobs.count(knob) != 0 :\n\t\t thisGRP\[knob].clearAnimated()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 cam_focal l "focal length" R 5 100} cam_focal {{Camera1.focal}} addUserKnob {7 cam_haperture l "horiz aperture" R 0.1 50} cam_haperture {{Camera1.haperture}} addUserKnob {30 cam_win_translate l "window translate"} cam_win_translate {{Camera1.win_translate} {Camera1.win_translate}} addUserKnob {30 cam_win_scale l "window scale"} cam_win_scale {{Camera1.win_scale} {Camera1.win_scale}} addUserKnob {7 cam_winroll l "window roll" R -45 45} cam_winroll {{Camera1.winroll}} addUserKnob {41 world_matrix l "world matrix" T cam_data.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 spacer_5 l "" +STARTLINE T
    } addUserKnob {26 title_basic l "BASIC SETTING"} addUserKnob {4 display l "3D display" t "How to draw in 3D preview. The viewer can override this setting." M {off wireframe soild solid+wireframe textured textured+wireframe "" "" ""}} display textured addUserKnob {4 data_type l "data type" t "data type\nUsing one of these data to convert into 3D mesh.\n\nPosition\nSupported world space or camera space position data.\n\nDepth (normalized far=0)\nNormalized depth data, which is same as depth data output by ScanlineRender.\n\nDeep / Depth (direct)\nRaw camera depth data. If using deep, need to convert DeepToImage first, and selected deep channel on 'channels' knob." M {"position (world space)" "position (camera space)" "depth (normalized far=0)" "deep / depth (direct)" "" "" ""}} data_type "position (camera space)" addUserKnob {41 channels t "Select which channel represented on selected data type." T shuffle_data.in} addUserKnob {6 unpm l unpremult t "3D data pass should be unpremult with alpha before process." -STARTLINE} unpm true addUserKnob {26 spacer_4 l "" +STARTLINE T
    } addUserKnob {7 lod l "mesh LOD" t "Level of Details\n\nIf this value set to 1.0, subdivision of the mesh 1:1 to the data available in the resolution. Which mean 1 face of the mesh equal to 1 pixel.\n\nIf this value set to 1.0, it will slow down the render process.\n\nHighly recommend to use 0.1 - 0.5 if high resolution mesh details is not concern."} lod 0.1 addUserKnob {41 filter_size l "filter size" T DisplaceGeo.filter_size} addUserKnob {41 filter T DisplaceGeo.filter} addUserKnob {26 spacer_2 l "" +STARTLINE T
    } addUserKnob {26 title_drange l "" +STARTLINE T "distance range"} addUserKnob {7 drange_near l near t "clip the mesh in the min value in terms of depth." R 0 10000} addUserKnob {7 drange_far l far t "clip the mesh in the max value in terms of depth." R 0 10000} drange_far 30 addUserKnob {6 clip_color l "distance clip on color" t "Apply the distance clip on colored texture." +STARTLINE} clip_color true addUserKnob {26 spacer_3 l "" +STARTLINE T
    } addUserKnob {26 title_export l EXPORT} addUserKnob {41 file t "only support *.abc file extension (alembric) ." T WriteGeo.file} addUserKnob {22 export_geo l "Export Geo" T "def exportGeo() :\n\twgeo = nuke.toNode('WriteGeo')\n\twgeo\['Execute'].execute()\n\nthisGRP = nuke.thisGroup()\nfilepath = thisGRP\['file'].getValue()\n\nif not len(filepath) :\n\tnuke.message('file path is empty. Process denied.')\nelif not filepath.split('.')\[-1:]\[0].lower() == 'abc' :\n\tif nuke.ask('File extension invalue. Only support render *.abc . Do you want this tool to fix it and process ?') :\n\t\tthisGRP\['file'].setValue( thisGRP\['file'].getValue() + '.abc' )\n\t\texportGeo()\nelse :\n\texportGeo()" +STARTLINE} addUserKnob {22 import_geo l "Import Geo" -STARTLINE T "prefx = nuke.toNode('preferences')\['GridWidth'].value()\nthisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\nroot = getLevel()\n\nwith root :\n\trgeo = nuke.nodes.ReadGeo2( file=thisGRP\['file'].getValue() )\n\trgeo.setXYpos( int( thisGRP\['xpos'].getValue() + prefx ) , int( thisGRP\['ypos'].getValue() ) )"} addUserKnob {20 tab_misc l Miscellaneous} addUserKnob {26 title_focus_region l "FOCUS REGION"} addUserKnob {41 use_focus_region l "use focus region" t "use focus region to generate SSMesh in specific area. Save resources and possible to work with high LOD mesh." T menu2.use_focus_region} addUserKnob {15 focus_region l "focus region" t "Set focus region in screen space. These values are 2D coordinate." +DISABLED} focus_region {0 0 1280 720} addUserKnob {26 spacer_1 l "" +STARTLINE T
    } addUserKnob {3 fregion_ref_frame l "ref frame" t "set reference frame for tracking focus region. 'focus region' & 'define z' will apply on this reference frame and process the tracking." +DISABLED} fregion_ref_frame 1 addUserKnob {22 fregion_set_frame l "set current frame" t "set current frame for focus region reference frame." -STARTLINE +DISABLED T "nuke.thisGroup()\['fregion_ref_frame'].setValue( nuke.frame() )"} addUserKnob {12 sample_point l "sample position" t "Toggle 'sample z' in 2D to enable this 2D sample coordinate." +DISABLED} addUserKnob {22 sample_z_toggle l "sample z in 2D" t "'sample z' is only works for sample value purpose. After sample is done, must turn off sample function." -STARTLINE +DISABLED T "thisGRP = nuke.thisGroup()\nszstatus = thisGRP\['sample_z_status'].value()\n\nstatus = \['\[ OFF ]','\[ ON ]']\n\nif szstatus == status\[0] :\n\tthisGRP\['sample_z_status'].setValue( status\[1] )\n\tthisGRP\['sample_point'].setEnabled(True)\n\tthisGRP\['updateUI'].setValue(\"goStore = nuke.toNode(\\'store\\')\\ngoStore\[\\'fn\\'].execute()\\nsample2d()\")\nelse :\n\tthisGRP\['sample_z_status'].setValue( status\[0] )\n\tthisGRP\['sample_point'].setEnabled(False)\n\tthisGRP\['updateUI'].setValue('')"} addUserKnob {26 sample_z_status l "" -STARTLINE +DISABLED T "\[ OFF ]"} addUserKnob {7 fregion_define_z l "define z" t "Define the z value on reference frame. Can use 'sample z in 2D' to get this value." +DISABLED R 0 10000} addUserKnob {22 track_focus_region l "\[ track focus region ]" t "Use the set focus region on reference frame to track with camera in 3D space.\n\n* project setting need to be same as image resolution to get the correct result." +DISABLED T "rootST = int( nuke.root()\['first_frame'].getValue() )\nrootED = int( nuke.root()\['last_frame'].getValue() )\n\ngetFrame = nuke.getFramesAndViews( 'frame range', str( rootST ) + '-' + str( rootED ) )\n\ntry :\n\tframeST = int( getFrame\[0].replace( ' ' , '' ).split('-')\[0] )\n\tframeED = int( getFrame\[0].replace( ' ' , '' ).split('-')\[1] )\n\n\tthisGRP = nuke.thisGroup()\n\trefframe = int( thisGRP\['fregion_ref_frame'].getValue() )\n\tcam = nuke.toNode('cam_data')\n\tpt1 = nuke.toNode('left_pt')\['translate'].getValue()\n\tpt2 = nuke.toNode('right_pt')\['translate'].getValue()\n\n\tct_hack = nuke.nodes.CurveTool()\n\n\twith nuke.root() :\n\n\t\tif frameED - frameST != 0 :\n\t\t\tthisGRP\['focus_region'].clearAnimated()\n\t\t\ttempbuffer1 = thisGRP\['focus_region'].getValue()\n\t\t\tthisGRP\['focus_region'].setAnimated()\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[0] , refframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[1] , refframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[2] , refframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[3] , refframe , 3 )\n\n\t\tfor trackframe in range( frameST, frameED+1 , 1 ) :\n\t\t\tnuke.execute( ct_hack, trackframe, trackframe )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[0] , trackframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[1] , trackframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[0] , trackframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[1] , trackframe , 3 )\n\n\tnuke.delete( ct_hack )\nexcept :\n pass" +STARTLINE} addUserKnob {26 spacer_6 l "" +STARTLINE T
    } addUserKnob {20 grp_crop_preview l "3D crop preview" +DISABLED n 1} grp_crop_preview 0 addUserKnob {6 show_crop l "show crop point" t "It will show 2 spheres for the crop in 3D space. They set in the place which is where you set the focus region in screen space and defined by z." +DISABLED +STARTLINE} addUserKnob {7 crop_point_scale l scale t "Scale the preview crop points (spheres)." +DISABLED} crop_point_scale 0.3 addUserKnob {18 crop_point_color l color t "change color of the crop points (spheres)." +DISABLED} crop_point_color 1 addUserKnob {6 crop_point_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup n -1} addUserKnob {26 spacer l "" +STARTLINE T
    } addUserKnob {26 title_uv l UV} addUserKnob {41 uv_stabilize l "uv stabilize" t "Turn this on if you need to stabilize in UV space. During UV stabilize on, the geo will not be animated. Set reference frame under 'mesh ref frame'." T menu1.uv_stabilize} addUserKnob {3 uv_ref_frame l "mesh ref frame" t "Select the frame number that will have identity geo shaped for UV texturing." +DISABLED} uv_ref_frame 1001 addUserKnob {22 uv_set_frame l "set current frame" -STARTLINE +DISABLED T "nuke.thisGroup()\['uv_ref_frame'].setValue( nuke.frame() )"} addUserKnob {6 black_outside l "black outside" t "black outside the UV texture." +DISABLED +STARTLINE} black_outside true addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.3} addUserKnob {26 l_DATE l "Date Modified" T 2019-11-08} addUserKnob {26 l_CHANGELOG l Changelog T "1.3\n- camera window supported\n- anamophic project supported\n- fix the conflict of 'force region' and 'UV stabilize'.\n can use both at the same time now.\n\n1.2\n- removed unuse camera link knobs\n- added focus region, so mesh can be\n form in specific area/object to save\n resources for higher LOD\n\n1.1\n- fix the missing line on 'Export Geo' \n button\n\n1.0\n- create mesh/geo in screen space\n using position/depth/deep data"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "don't touch" note_font_size 32 xpos -1142 ypos -169 bdwidth 202 bdheight 478 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x4c4c4cff label bin note_font_size 32 xpos -899 ypos -170 bdwidth 200 bdheight 280 } Input { inputs 0 name img xpos -100 ypos -184 } Dot { name img_dot xpos -66 ypos -83 } set N4a7cfcf0 [stack 0] Dot { name Dot3 xpos 758 ypos -83 } set N4a7d21b0 [stack 0] Shuffle { in pcam in2 alpha alpha red2 name shuffle_data label "\[value in]" xpos 724 ypos -32 } Unpremult { name Unpremult_data xpos 724 ypos 62 disable {{!parent.unpm}} } Dot { name Dot5 xpos 758 ypos 700 } set N5a4b8090 [stack 0] Dot { name Dot6 xpos 928 ypos 700 } set N5a476310 [stack 0] Dot { name Dot7 xpos 1106 ypos 700 } set N4a7e0940 [stack 0] Dot { name Dot8 xpos 1260 ypos 700 } Expression { temp_name0 dvalue temp_expr0 red temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression9 xpos 1226 ypos 774 } Dot { name Dot16 xpos 1260 ypos 889 } push $N4a7e0940 Expression { temp_name0 dvalue temp_expr0 "1 / red" temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression6 xpos 1072 ypos 774 } Dot { name Dot17 xpos 1106 ypos 863 } push $N5a476310 Expression { expr2 -blue name Expression7 label "fix z" xpos 894 ypos 774 } Dot { name Dot18 xpos 928 ypos 876 } push $N5a4b8090 Expression { temp_name0 nx temp_expr0 "red - cam_data.world_matrix.3" temp_name1 ny temp_expr1 "green - cam_data.world_matrix.7" temp_name2 nz temp_expr2 "blue - cam_data.world_matrix.11" expr0 "nx * \[value inverseMatrix.invMatrix.0] + ny * \[value inverseMatrix.invMatrix.1] + nz * \[value inverseMatrix.invMatrix.2]" expr1 "nx * \[value inverseMatrix.invMatrix.3] + ny * \[value inverseMatrix.invMatrix.4] + nz * \[value inverseMatrix.invMatrix.5]" expr2 "nx * \[value inverseMatrix.invMatrix.6] + ny * \[value inverseMatrix.invMatrix.7] + nz * \[value inverseMatrix.invMatrix.8]" name Expression3 label "position invert" xpos 724 ypos 774 } Switch { inputs 4 which {{parent.data_type}} name Switch1 xpos 724 ypos 984 } Dot { name Dot13 xpos 758 ypos 1113 } set N4a42c6c0 [stack 0] Dot { name sam_dot xpos 551 ypos 1113 } NoOp { inputs 0 name menu1 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['uv_stabilize'].getValue() == 1 :\n thisGRP\['uv_ref_frame'].setEnabled(True)\n thisGRP\['uv_set_frame'].setEnabled(True)\n thisGRP\['black_outside'].setEnabled(True)\nelse :\n thisGRP\['uv_ref_frame'].setEnabled(False)\n thisGRP\['uv_set_frame'].setEnabled(False)\n thisGRP\['black_outside'].setEnabled(False)\n" xpos -1085 ypos -42 addUserKnob {20 User} addUserKnob {6 uv_stabilize l "uv stabilize" +STARTLINE} } NoOp { inputs 0 name menu2 onCreate "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nthisGRP\[fregion_knobs\[4]].setEnabled(True)\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n else :\n thisGRP\[i].setEnabled(False)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" knobChanged "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" xpos -1085 ypos 25 addUserKnob {20 User} addUserKnob {6 use_focus_region l "use focus region" +STARTLINE} } Camera { inputs 0 display off selectable false useMatrix true matrix { {{Camera1.world_matrix} {Camera1.world_matrix} {Camera1.world_matrix} {Camera1.world_matrix}} {{Camera1.world_matrix} {Camera1.world_matrix} {Camera1.world_matrix} {Camera1.world_matrix}} {{Camera1.world_matrix} {Camera1.world_matrix} {Camera1.world_matrix} {Camera1.world_matrix}} {{Camera1.world_matrix} {Camera1.world_matrix} {Camera1.world_matrix} {Camera1.world_matrix}} } focal {{parent.cam_focal}} haperture {{cam_haperture}} name cam_data xpos -335 ypos 2204 } push $N4a42c6c0 Expression { temp_name0 unpremultA temp_expr0 "alpha * ( 1 / alpha )" temp_name1 max temp_expr1 blue expr3 "abs( max ) < \[value parent.drange_near] || abs( max ) > \[value parent.drange_far] ? 0 : isnan(unpremultA) ? 0 : unpremultA" name Expression1 label "distance crop" xpos 724 ypos 1244 } Premult { name Premult1 xpos 724 ypos 1332 } Dot { name Dot9 xpos 758 ypos 1640 } set N502bb410 [stack 0] push $N4a7cfcf0 Dot { name Dot10 xpos -66 ypos 1552 } set N501416a0 [stack 0] Unpremult { name Unpremult1 xpos 48 ypos 1549 } Merge2 { inputs 2 operation mask name Merge2 xpos 48 ypos 1637 } Premult { name Premult3 xpos 48 ypos 1719 } push $N501416a0 Switch { inputs 2 which {{parent.clip_color}} name Switch2 xpos -100 ypos 1828 } Project3D2 { inputs 2 crop {{parent.black_outside}} name Project3D2 xpos -100 ypos 2224 } push $N4a7d21b0 Dot { name Dot2 xpos 1576 ypos -84 } Shuffle { red black green black blue black alpha black name Shuffle1 label "\[value in]" xpos 1542 ypos 30 } Remove { name Remove1 xpos 1542 ypos 118 } Reformat { type scale black_outside true name Reformat1 xpos 1542 ypos 212 } Expression { temp_name0 xpos temp_expr0 "( ( x + 0.5 ) / input.width - 0.5) * \[value global_math.hratio] * abs( \[value parent.drange_far] )" temp_name1 ypos temp_expr1 "( ( y + 0.5 ) / input.height -0.5 ) * ( \[value global_math.hratio] * abs( \[value parent.drange_far] ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name2 zpos temp_expr2 "-\[value parent.drange_far]" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression8 xpos 1542 ypos 845 } ColorMatrix { matrix { {{cam_data.world_matrix.0} {cam_data.world_matrix.1} {cam_data.world_matrix.2}} {{cam_data.world_matrix.4} {cam_data.world_matrix.5} {cam_data.world_matrix.6}} {{cam_data.world_matrix.8} {cam_data.world_matrix.9} {cam_data.world_matrix.10}} } name ColorMatrix1 xpos 1542 ypos 970 } Add { channels rgb value {{cam_data.world_matrix.3} {cam_data.world_matrix.7} {cam_data.world_matrix.11} 0} name Add1 xpos 1542 ypos 1052 } Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop1 xpos 1542 ypos 1476 disable {{!parent.use_focus_region}} } Dot { name Dot4 xpos 1576 ypos 2402 } push $N502bb410 Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop4 selected true xpos 724 ypos 1714 disable {{!parent.use_focus_region}} } Unpremult { name Unpremult3 xpos 724 ypos 1851 } Expression { temp_name0 nx temp_expr0 red temp_name1 ny temp_expr1 green temp_name2 nz temp_expr2 blue expr0 "( nx * \[value cam_data.world_matrix.0] + ny * \[value cam_data.world_matrix.1] + nz * \[value cam_data.world_matrix.2] ) + \[value cam_data.world_matrix.3]" expr1 "( nx * \[value cam_data.world_matrix.4] + ny * \[value cam_data.world_matrix.5] + nz * \[value cam_data.world_matrix.6] ) + \[value cam_data.world_matrix.7]" expr2 "( nx * \[value cam_data.world_matrix.8] + ny * \[value cam_data.world_matrix.9] + nz * \[value cam_data.world_matrix.10] ) + \[value cam_data.world_matrix.11]" name Expression4 label "position revert" xpos 724 ypos 1933 } Premult { name Premult2 xpos 724 ypos 2027 } Merge2 { inputs 2 operation under name Merge1 xpos 724 ypos 2398 } Card { inputs 0 image_aspect false rows {{"img_dot.height * parent.lod"}} columns {{"img_dot.width * parent.lod"}} name ssmesh xpos 343 ypos 2317 } DisplaceGeo { inputs 2 source "rgb absolute" scale 1 filter_size 1 name DisplaceGeo xpos 343 ypos 2399 } FrameHold { first_frame {{parent.uv_ref_frame}} name FrameHold xpos 343 ypos 2479 disable {{!parent.uv_stabilize}} } ApplyMaterial { inputs 2 name ApplyMaterial1 xpos -100 ypos 2483 } Scene { display {{parent.display}} name gl_scene xpos -90 ypos 3072 } set N3a504b70 [stack 0] WriteGeo { file_type abc name WriteGeo xpos 120 ypos 3093 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt2.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name right_pt xpos -600 ypos 3218 } CheckerBoard2 { inputs 0 format "256 256 0 0 256 256 1 square_256" name CheckerBoard1 xpos -789 ypos 2694 } Multiply { channels rgb value {{parent.crop_point_color.r} {parent.crop_point_color.g} {parent.crop_point_color.b} 1} name Multiply xpos -789 ypos 2822 } Clamp { channels rgba name Clamp1 xpos -789 ypos 2905 } Sphere { selectable false cast_shadow false receive_shadow false rows 10 columns 10 uniform_scale {{parent.crop_point_scale}} name Sphere1 xpos -789 ypos 2987 disable {{!show_crop}} } Dot { name Dot24 xpos -755 ypos 3065 } set N3a52e0e0 [stack 0] Dot { name Dot25 xpos -456 ypos 3065 } TransformGeo { inputs 2 selectable false name TransformGeo2 xpos -490 ypos 3238 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt1.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name left_pt xpos -899 ypos 3220 } push $N3a52e0e0 TransformGeo { inputs 2 selectable false name TransformGeo1 xpos -789 ypos 3240 } Scene { inputs 2 selectable false name Scene1 xpos -480 ypos 3395 } ApplyMaterial { display off selectable false render_mode off name material_switch xpos -490 ypos 3523 } push $N3a504b70 Scene { inputs 2 name Scene2 xpos -90 ypos 3502 } Output { name Output1 xpos -100 ypos 4030 } Group { inputs 0 name inverseMatrix tile_color 0x337f4cff xpos 576 ypos 780 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path cam_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2011-11-28} addUserKnob {26 l_CHANGELOG l Changelog T "v1.0\n- reveal the calculate output of \n inverse matrix which is c44matrix\n and colormatrix doesn't show\n "} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group Camera { inputs 0 rotate {0 0 {-parent.cam_winroll}} win_translate {{parent.cam_win_translate} {parent.cam_win_translate}} win_scale {{parent.cam_win_scale} {parent.cam_win_scale}} name fb_data xpos -340 ypos 2087 } NoOp { inputs 0 name store xpos -843 ypos 28 addUserKnob {20 User} addUserKnob {22 fn T "### level define ###\n\ndef getLevel() :\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\tggLevel = nuke.root()\n\telse :\n\t\tnodePath = nuke.thisNode().fullName().split('.')\n\t\tnodePath.pop()\n\t\tggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\n### sample z in 2D ###\n\ndef sample2d() :\n\tthisGRP = nuke.thisGroup()\n\tif thisGRP\['sample_z_status'].value() == '\[ ON ]' :\n\t\tsam_co = thisGRP\['sample_point'].getValue()\n\t\tzdata = nuke.toNode('sam_dot').sample('blue', sam_co\[0], sam_co\[1]) * -1\n\t\tthisGRP\['fregion_define_z'].setValue( zdata )" +STARTLINE} addUserKnob {15 fregion} fregion {{parent.focus_region} {parent.focus_region} {parent.focus_region} {parent.focus_region}} } NoOp { inputs 0 name global_math xpos -842 ypos -43 addUserKnob {20 User} addUserKnob {7 hratio} hratio {{"cam_data.haperture / cam_data.focal"}} addUserKnob {7 maxwidth} maxwidth {{"hratio * parent.fregion_define_z"}} addUserKnob {7 maxheight} maxheight {{"hratio * parent.fregion_define_z * ( img_dot.height / img_dot.width )"}} addUserKnob {13 pt1} pt1 {{"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + \n( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} addUserKnob {13 pt2} pt2 {{"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} } end_group Camera2 { inputs 0 translate {{curve x1 -23.73355293 x50 1.828465939 x100 10.79810143} {curve x1 6.752248287 x50 13.82691669 x100 25.23773003} {curve x1 -3.158116341 x50 5.475767136 x100 -12.79232216}} rotate {{curve x1 30.63627052 x50 14.22963619 x100 -23.22279344} {curve x1 -44.94124796 x50 19.70681696 x100 76.6501109} {curve x1 0 x50 27.42004885 x100 13.36756642}} focal 24 name Camera1 xpos -326 ypos -217 } Scene { inputs 2 name Scene2 xpos -147 ypos -76 } Dot { name Dot2 xpos -123 ypos 114 } Group { inputs 0 name render_with_zdepth_normalized xpos 512 ypos -374 postage_stamp true } Camera2 { inputs 0 translate {{curve x1 -23.73355293 x50 1.828465939 x100 10.79810143} {curve x1 6.752248287 x50 13.82691669 x100 25.23773003} {curve x1 -3.158116341 x50 5.475767136 x100 -12.79232216}} rotate {{curve x1 30.63627052 x50 14.22963619 x100 -23.22279344} {curve x1 -44.94124796 x50 19.70681696 x100 76.6501109} {curve x1 0 x50 27.42004885 x100 13.36756642}} focal 24 name Camera1 xpos 241 ypos -567 } Dot { name Dot2 xpos 351 ypos -543 } set N81a16c80 [stack 0] Dot { name Dot3 xpos 351 ypos -428 } push $N81a16c80 CheckerBoard2 { inputs 0 name CheckerBoard1 xpos 406 ypos -928 } Dot { name Dot1 xpos 440 ypos -814 } set N81a1fb30 [stack 0] Dot { name Dot5 xpos 553 ypos -814 } set N81a21eb0 [stack 0] Dot { name Dot4 xpos 693 ypos -814 } Multiply { channels rgb value {0 1 1 1} name Multiply3 xpos 659 ypos -756 } Cube { rows 1 columns 1 separate_faces false translate {-7.849998951 18.14999962 -19.00000191} rotate {0 0 45.93192592} uniform_scale 7 name Cube1 xpos 659 ypos -676 } push $N81a21eb0 Multiply { channels rgb value {1 0 1 1} name Multiply2 xpos 519 ypos -750 } Sphere { translate {-15.00000191 16.45000076 -17.79999924} scaling {3.183291435 1 2.618715286} uniform_scale 2 name Sphere1 xpos 519 ypos -670 } push $N81a1fb30 Multiply { channels rgb value {1 1 0 1} name Multiply1 xpos 406 ypos -754 } Cylinder { rows 1 close_top true close_bottom true translate {-3.149999619 19.64999962 -13.89999866} rotate {52.26493538 0 32.53306187} scaling {1 4.216488838 1} uniform_scale 2 name Cylinder1 xpos 406 ypos -673 } Scene { inputs 4 name Scene1 xpos 416 ypos -567 } Reformat { inputs 0 type "to box" box_width 1280 box_height 720 box_fixed true name Reformat1 xpos 530 ypos -431 } ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type off MB_channel none name ScanlineRender1 xpos 406 ypos -431 } Output { name Output1 xpos 406 ypos -296 } end_group Group { name SSMesh2 tile_color 0x5c9e83ff label "Geo Output" xpos 512 ypos -209 addUserKnob {20 tab_general l General} addUserKnob {22 set_link l "link to selected camera" t "Click to link selected camera by expression. This tool will get the focal, haperture and world matrix from selected camera to generate" T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\n\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\ndefaultKnobs = \{\n\t\t\t'world matrix' : 'world_matrix',\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.focal'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.haperture'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.win_translate'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.win_scale'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.winroll'.format(CAMnode))\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']))\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']))\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']))\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']))\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window roll']))\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\n\nfor knob in thisGRP.knobs() :\n\tif mainKnobs.count(knob) != 0 :\n\t\t thisGRP\[knob].clearAnimated()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 cam_focal l "focal length" R 5 100} cam_focal {{Camera3.focal}} addUserKnob {7 cam_haperture l "horiz aperture" R 0.1 50} cam_haperture {{Camera3.haperture}} addUserKnob {30 cam_win_translate l "window translate"} cam_win_translate {{Camera3.win_translate} {Camera3.win_translate}} addUserKnob {30 cam_win_scale l "window scale"} cam_win_scale {{Camera3.win_scale} {Camera3.win_scale}} addUserKnob {7 cam_winroll l "window roll" R -45 45} cam_winroll {{Camera3.winroll}} addUserKnob {41 world_matrix l "world matrix" T cam_data.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 spacer_5 l "" +STARTLINE T
    } addUserKnob {26 title_basic l "BASIC SETTING"} addUserKnob {4 display l "3D display" t "How to draw in 3D preview. The viewer can override this setting." M {off wireframe soild solid+wireframe textured textured+wireframe "" "" ""}} display textured addUserKnob {4 data_type l "data type" t "data type\nUsing one of these data to convert into 3D mesh.\n\nPosition\nSupported world space or camera space position data.\n\nDepth (normalized far=0)\nNormalized depth data, which is same as depth data output by ScanlineRender.\n\nDeep / Depth (direct)\nRaw camera depth data. If using deep, need to convert DeepToImage first, and selected deep channel on 'channels' knob." M {"position (world space)" "position (camera space)" "depth (normalized far=0)" "deep / depth (direct)" "" "" ""}} data_type "depth (normalized far=0)" addUserKnob {41 channels t "Select which channel represented on selected data type." T shuffle_data.in} addUserKnob {6 unpm l unpremult t "3D data pass should be unpremult with alpha before process." -STARTLINE} unpm true addUserKnob {26 spacer_4 l "" +STARTLINE T
    } addUserKnob {7 lod l "mesh LOD" t "Level of Details\n\nIf this value set to 1.0, subdivision of the mesh 1:1 to the data available in the resolution. Which mean 1 face of the mesh equal to 1 pixel.\n\nIf this value set to 1.0, it will slow down the render process.\n\nHighly recommend to use 0.1 - 0.5 if high resolution mesh details is not concern."} lod 0.1 addUserKnob {41 filter_size l "filter size" T DisplaceGeo.filter_size} addUserKnob {41 filter T DisplaceGeo.filter} addUserKnob {26 spacer_2 l "" +STARTLINE T
    } addUserKnob {26 title_drange l "" +STARTLINE T "distance range"} addUserKnob {7 drange_near l near t "clip the mesh in the min value in terms of depth." R 0 10000} addUserKnob {7 drange_far l far t "clip the mesh in the max value in terms of depth." R 0 10000} drange_far 30 addUserKnob {6 clip_color l "distance clip on color" t "Apply the distance clip on colored texture." +STARTLINE} clip_color true addUserKnob {26 spacer_3 l "" +STARTLINE T
    } addUserKnob {26 title_export l EXPORT} addUserKnob {41 file t "only support *.abc file extension (alembric) ." T WriteGeo.file} addUserKnob {22 export_geo l "Export Geo" T "def exportGeo() :\n\twgeo = nuke.toNode('WriteGeo')\n\twgeo\['Execute'].execute()\n\nthisGRP = nuke.thisGroup()\nfilepath = thisGRP\['file'].getValue()\n\nif not len(filepath) :\n\tnuke.message('file path is empty. Process denied.')\nelif not filepath.split('.')\[-1:]\[0].lower() == 'abc' :\n\tif nuke.ask('File extension invalue. Only support render *.abc . Do you want this tool to fix it and process ?') :\n\t\tthisGRP\['file'].setValue( thisGRP\['file'].getValue() + '.abc' )\n\t\texportGeo()\nelse :\n\texportGeo()" +STARTLINE} addUserKnob {22 import_geo l "Import Geo" -STARTLINE T "prefx = nuke.toNode('preferences')\['GridWidth'].value()\nthisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\nroot = getLevel()\n\nwith root :\n\trgeo = nuke.nodes.ReadGeo2( file=thisGRP\['file'].getValue() )\n\trgeo.setXYpos( int( thisGRP\['xpos'].getValue() + prefx ) , int( thisGRP\['ypos'].getValue() ) )"} addUserKnob {20 tab_misc l Miscellaneous} addUserKnob {26 title_focus_region l "FOCUS REGION"} addUserKnob {41 use_focus_region l "use focus region" t "use focus region to generate SSMesh in specific area. Save resources and possible to work with high LOD mesh." T menu2.use_focus_region} addUserKnob {15 focus_region l "focus region" t "Set focus region in screen space. These values are 2D coordinate." +DISABLED} focus_region {0 0 1280 720} addUserKnob {26 spacer_1 l "" +STARTLINE T
    } addUserKnob {3 fregion_ref_frame l "ref frame" t "set reference frame for tracking focus region. 'focus region' & 'define z' will apply on this reference frame and process the tracking." +DISABLED} fregion_ref_frame 1 addUserKnob {22 fregion_set_frame l "set current frame" t "set current frame for focus region reference frame." -STARTLINE +DISABLED T "nuke.thisGroup()\['fregion_ref_frame'].setValue( nuke.frame() )"} addUserKnob {12 sample_point l "sample position" t "Toggle 'sample z' in 2D to enable this 2D sample coordinate." +DISABLED} addUserKnob {22 sample_z_toggle l "sample z in 2D" t "'sample z' is only works for sample value purpose. After sample is done, must turn off sample function." -STARTLINE +DISABLED T "thisGRP = nuke.thisGroup()\nszstatus = thisGRP\['sample_z_status'].value()\n\nstatus = \['\[ OFF ]','\[ ON ]']\n\nif szstatus == status\[0] :\n\tthisGRP\['sample_z_status'].setValue( status\[1] )\n\tthisGRP\['sample_point'].setEnabled(True)\n\tthisGRP\['updateUI'].setValue(\"goStore = nuke.toNode(\\'store\\')\\ngoStore\[\\'fn\\'].execute()\\nsample2d()\")\nelse :\n\tthisGRP\['sample_z_status'].setValue( status\[0] )\n\tthisGRP\['sample_point'].setEnabled(False)\n\tthisGRP\['updateUI'].setValue('')"} addUserKnob {26 sample_z_status l "" -STARTLINE +DISABLED T "\[ OFF ]"} addUserKnob {7 fregion_define_z l "define z" t "Define the z value on reference frame. Can use 'sample z in 2D' to get this value." +DISABLED R 0 10000} addUserKnob {22 track_focus_region l "\[ track focus region ]" t "Use the set focus region on reference frame to track with camera in 3D space.\n\n* project setting need to be same as image resolution to get the correct result." +DISABLED T "rootST = int( nuke.root()\['first_frame'].getValue() )\nrootED = int( nuke.root()\['last_frame'].getValue() )\n\ngetFrame = nuke.getFramesAndViews( 'frame range', str( rootST ) + '-' + str( rootED ) )\n\ntry :\n\tframeST = int( getFrame\[0].replace( ' ' , '' ).split('-')\[0] )\n\tframeED = int( getFrame\[0].replace( ' ' , '' ).split('-')\[1] )\n\n\tthisGRP = nuke.thisGroup()\n\trefframe = int( thisGRP\['fregion_ref_frame'].getValue() )\n\tcam = nuke.toNode('cam_data')\n\tpt1 = nuke.toNode('left_pt')\['translate'].getValue()\n\tpt2 = nuke.toNode('right_pt')\['translate'].getValue()\n\n\tct_hack = nuke.nodes.CurveTool()\n\n\twith nuke.root() :\n\n\t\tif frameED - frameST != 0 :\n\t\t\tthisGRP\['focus_region'].clearAnimated()\n\t\t\ttempbuffer1 = thisGRP\['focus_region'].getValue()\n\t\t\tthisGRP\['focus_region'].setAnimated()\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[0] , refframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[1] , refframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[2] , refframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[3] , refframe , 3 )\n\n\t\tfor trackframe in range( frameST, frameED+1 , 1 ) :\n\t\t\tnuke.execute( ct_hack, trackframe, trackframe )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[0] , trackframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[1] , trackframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[0] , trackframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[1] , trackframe , 3 )\n\n\tnuke.delete( ct_hack )\nexcept :\n pass" +STARTLINE} addUserKnob {26 spacer_6 l "" +STARTLINE T
    } addUserKnob {20 grp_crop_preview l "3D crop preview" +DISABLED n 1} grp_crop_preview 0 addUserKnob {6 show_crop l "show crop point" t "It will show 2 spheres for the crop in 3D space. They set in the place which is where you set the focus region in screen space and defined by z." +DISABLED +STARTLINE} addUserKnob {7 crop_point_scale l scale t "Scale the preview crop points (spheres)." +DISABLED} crop_point_scale 0.3 addUserKnob {18 crop_point_color l color t "change color of the crop points (spheres)." +DISABLED} crop_point_color 1 addUserKnob {6 crop_point_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup n -1} addUserKnob {26 spacer l "" +STARTLINE T
    } addUserKnob {26 title_uv l UV} addUserKnob {41 uv_stabilize l "uv stabilize" t "Turn this on if you need to stabilize in UV space. During UV stabilize on, the geo will not be animated. Set reference frame under 'mesh ref frame'." T menu1.uv_stabilize} addUserKnob {3 uv_ref_frame l "mesh ref frame" t "Select the frame number that will have identity geo shaped for UV texturing." +DISABLED} uv_ref_frame 1001 addUserKnob {22 uv_set_frame l "set current frame" -STARTLINE +DISABLED T "nuke.thisGroup()\['uv_ref_frame'].setValue( nuke.frame() )"} addUserKnob {6 black_outside l "black outside" t "black outside the UV texture." +DISABLED +STARTLINE} black_outside true addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.3} addUserKnob {26 l_DATE l "Date Modified" T 2019-11-08} addUserKnob {26 l_CHANGELOG l Changelog T "1.3\n- camera window supported\n- anamophic project supported\n- fix the conflict of 'force region' and 'UV stabilize'.\n can use both at the same time now.\n\n1.2\n- removed unuse camera link knobs\n- added focus region, so mesh can be\n form in specific area/object to save\n resources for higher LOD\n\n1.1\n- fix the missing line on 'Export Geo' \n button\n\n1.0\n- create mesh/geo in screen space\n using position/depth/deep data"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "don't touch" note_font_size 32 xpos -1142 ypos -169 bdwidth 202 bdheight 478 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x4c4c4cff label bin note_font_size 32 xpos -899 ypos -170 bdwidth 200 bdheight 280 } Input { inputs 0 name img xpos -100 ypos -184 } Dot { name img_dot xpos -66 ypos -83 } set N3a443300 [stack 0] Dot { name Dot3 xpos 758 ypos -83 } set N3a437660 [stack 0] Shuffle { in depth in2 alpha alpha red2 name shuffle_data label "\[value in]" xpos 724 ypos -32 } Unpremult { name Unpremult_data xpos 724 ypos 62 disable {{!parent.unpm}} } Dot { name Dot5 xpos 758 ypos 700 } set N5029f720 [stack 0] Dot { name Dot6 xpos 928 ypos 700 } set N502a1be0 [stack 0] Dot { name Dot7 xpos 1106 ypos 700 } set N502cf910 [stack 0] Dot { name Dot8 xpos 1260 ypos 700 } Expression { temp_name0 dvalue temp_expr0 red temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression9 xpos 1226 ypos 774 } Dot { name Dot16 xpos 1260 ypos 889 } push $N502cf910 Expression { temp_name0 dvalue temp_expr0 "1 / red" temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression6 xpos 1072 ypos 774 } Dot { name Dot17 xpos 1106 ypos 863 } push $N502a1be0 Expression { expr2 -blue name Expression7 label "fix z" xpos 894 ypos 774 } Dot { name Dot18 xpos 928 ypos 876 } push $N5029f720 Expression { temp_name0 nx temp_expr0 "red - cam_data.world_matrix.3" temp_name1 ny temp_expr1 "green - cam_data.world_matrix.7" temp_name2 nz temp_expr2 "blue - cam_data.world_matrix.11" expr0 "nx * \[value inverseMatrix.invMatrix.0] + ny * \[value inverseMatrix.invMatrix.1] + nz * \[value inverseMatrix.invMatrix.2]" expr1 "nx * \[value inverseMatrix.invMatrix.3] + ny * \[value inverseMatrix.invMatrix.4] + nz * \[value inverseMatrix.invMatrix.5]" expr2 "nx * \[value inverseMatrix.invMatrix.6] + ny * \[value inverseMatrix.invMatrix.7] + nz * \[value inverseMatrix.invMatrix.8]" name Expression3 label "position invert" xpos 724 ypos 774 } Switch { inputs 4 which {{parent.data_type}} name Switch1 xpos 724 ypos 984 } Dot { name Dot13 xpos 758 ypos 1113 } set N3a46d740 [stack 0] Dot { name sam_dot xpos 551 ypos 1113 } NoOp { inputs 0 name menu1 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['uv_stabilize'].getValue() == 1 :\n thisGRP\['uv_ref_frame'].setEnabled(True)\n thisGRP\['uv_set_frame'].setEnabled(True)\n thisGRP\['black_outside'].setEnabled(True)\nelse :\n thisGRP\['uv_ref_frame'].setEnabled(False)\n thisGRP\['uv_set_frame'].setEnabled(False)\n thisGRP\['black_outside'].setEnabled(False)\n" xpos -1085 ypos -42 addUserKnob {20 User} addUserKnob {6 uv_stabilize l "uv stabilize" +STARTLINE} } NoOp { inputs 0 name menu2 onCreate "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nthisGRP\[fregion_knobs\[4]].setEnabled(True)\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n else :\n thisGRP\[i].setEnabled(False)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" knobChanged "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" xpos -1085 ypos 25 addUserKnob {20 User} addUserKnob {6 use_focus_region l "use focus region" +STARTLINE} } Camera { inputs 0 display off selectable false useMatrix true matrix { {{Camera3.world_matrix} {Camera3.world_matrix} {Camera3.world_matrix} {Camera3.world_matrix}} {{Camera3.world_matrix} {Camera3.world_matrix} {Camera3.world_matrix} {Camera3.world_matrix}} {{Camera3.world_matrix} {Camera3.world_matrix} {Camera3.world_matrix} {Camera3.world_matrix}} {{Camera3.world_matrix} {Camera3.world_matrix} {Camera3.world_matrix} {Camera3.world_matrix}} } focal {{parent.cam_focal}} haperture {{cam_haperture}} name cam_data xpos -335 ypos 2204 } push $N3a46d740 Expression { temp_name0 unpremultA temp_expr0 "alpha * ( 1 / alpha )" temp_name1 max temp_expr1 blue expr3 "abs( max ) < \[value parent.drange_near] || abs( max ) > \[value parent.drange_far] ? 0 : isnan(unpremultA) ? 0 : unpremultA" name Expression1 label "distance crop" xpos 724 ypos 1244 } Premult { name Premult1 xpos 724 ypos 1332 } Dot { name Dot9 xpos 758 ypos 1640 } set N3a5d9ce0 [stack 0] push $N3a443300 Dot { name Dot10 xpos -66 ypos 1552 } set N5a4d4730 [stack 0] Unpremult { name Unpremult1 xpos 48 ypos 1549 } Merge2 { inputs 2 operation mask name Merge2 xpos 48 ypos 1637 } Premult { name Premult3 xpos 48 ypos 1719 } push $N5a4d4730 Switch { inputs 2 which {{parent.clip_color}} name Switch2 xpos -100 ypos 1828 } Project3D2 { inputs 2 crop {{parent.black_outside}} name Project3D2 xpos -100 ypos 2224 } push $N3a437660 Dot { name Dot2 xpos 1576 ypos -84 } Shuffle { red black green black blue black alpha black name Shuffle1 label "\[value in]" xpos 1542 ypos 30 } Remove { name Remove1 xpos 1542 ypos 118 } Reformat { type scale black_outside true name Reformat1 xpos 1542 ypos 212 } Expression { temp_name0 xpos temp_expr0 "( ( x + 0.5 ) / input.width - 0.5) * \[value global_math.hratio] * abs( \[value parent.drange_far] )" temp_name1 ypos temp_expr1 "( ( y + 0.5 ) / input.height -0.5 ) * ( \[value global_math.hratio] * abs( \[value parent.drange_far] ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name2 zpos temp_expr2 "-\[value parent.drange_far]" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression8 xpos 1542 ypos 845 } ColorMatrix { matrix { {{cam_data.world_matrix.0} {cam_data.world_matrix.1} {cam_data.world_matrix.2}} {{cam_data.world_matrix.4} {cam_data.world_matrix.5} {cam_data.world_matrix.6}} {{cam_data.world_matrix.8} {cam_data.world_matrix.9} {cam_data.world_matrix.10}} } name ColorMatrix1 xpos 1542 ypos 970 } Add { channels rgb value {{cam_data.world_matrix.3} {cam_data.world_matrix.7} {cam_data.world_matrix.11} 0} name Add1 xpos 1542 ypos 1052 } Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop1 xpos 1542 ypos 1476 disable {{!parent.use_focus_region}} } Dot { name Dot4 xpos 1576 ypos 2402 } push $N3a5d9ce0 Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop4 selected true xpos 724 ypos 1714 disable {{!parent.use_focus_region}} } Unpremult { name Unpremult3 xpos 724 ypos 1851 } Expression { temp_name0 nx temp_expr0 red temp_name1 ny temp_expr1 green temp_name2 nz temp_expr2 blue expr0 "( nx * \[value cam_data.world_matrix.0] + ny * \[value cam_data.world_matrix.1] + nz * \[value cam_data.world_matrix.2] ) + \[value cam_data.world_matrix.3]" expr1 "( nx * \[value cam_data.world_matrix.4] + ny * \[value cam_data.world_matrix.5] + nz * \[value cam_data.world_matrix.6] ) + \[value cam_data.world_matrix.7]" expr2 "( nx * \[value cam_data.world_matrix.8] + ny * \[value cam_data.world_matrix.9] + nz * \[value cam_data.world_matrix.10] ) + \[value cam_data.world_matrix.11]" name Expression4 label "position revert" xpos 724 ypos 1933 } Premult { name Premult2 xpos 724 ypos 2027 } Merge2 { inputs 2 operation under name Merge1 xpos 724 ypos 2398 } Card { inputs 0 image_aspect false rows {{"img_dot.height * parent.lod"}} columns {{"img_dot.width * parent.lod"}} name ssmesh xpos 343 ypos 2317 } DisplaceGeo { inputs 2 source "rgb absolute" scale 1 filter_size 1 name DisplaceGeo xpos 343 ypos 2399 } FrameHold { first_frame {{parent.uv_ref_frame}} name FrameHold xpos 343 ypos 2479 disable {{!parent.uv_stabilize}} } ApplyMaterial { inputs 2 name ApplyMaterial1 xpos -100 ypos 2483 } Scene { display {{parent.display}} name gl_scene xpos -90 ypos 3072 } set N3a5b5740 [stack 0] WriteGeo { file_type abc name WriteGeo xpos 120 ypos 3093 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt2.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name right_pt xpos -600 ypos 3218 } CheckerBoard2 { inputs 0 format "256 256 0 0 256 256 1 square_256" name CheckerBoard1 xpos -789 ypos 2694 } Multiply { channels rgb value {{parent.crop_point_color.r} {parent.crop_point_color.g} {parent.crop_point_color.b} 1} name Multiply xpos -789 ypos 2822 } Clamp { channels rgba name Clamp1 xpos -789 ypos 2905 } Sphere { selectable false cast_shadow false receive_shadow false rows 10 columns 10 uniform_scale {{parent.crop_point_scale}} name Sphere1 xpos -789 ypos 2987 disable {{!show_crop}} } Dot { name Dot24 xpos -755 ypos 3065 } set N3a5ed430 [stack 0] Dot { name Dot25 xpos -456 ypos 3065 } TransformGeo { inputs 2 selectable false name TransformGeo2 xpos -490 ypos 3238 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt1.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name left_pt xpos -899 ypos 3220 } push $N3a5ed430 TransformGeo { inputs 2 selectable false name TransformGeo1 xpos -789 ypos 3240 } Scene { inputs 2 selectable false name Scene1 xpos -480 ypos 3395 } ApplyMaterial { display off selectable false render_mode off name material_switch xpos -490 ypos 3523 } push $N3a5b5740 Scene { inputs 2 name Scene2 xpos -90 ypos 3502 } Output { name Output1 xpos -100 ypos 4030 } Group { inputs 0 name inverseMatrix tile_color 0x337f4cff xpos 576 ypos 780 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path cam_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2011-11-28} addUserKnob {26 l_CHANGELOG l Changelog T "v1.0\n- reveal the calculate output of \n inverse matrix which is c44matrix\n and colormatrix doesn't show\n "} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group Camera { inputs 0 rotate {0 0 {-parent.cam_winroll}} win_translate {{parent.cam_win_translate} {parent.cam_win_translate}} win_scale {{parent.cam_win_scale} {parent.cam_win_scale}} name fb_data xpos -340 ypos 2087 } NoOp { inputs 0 name store xpos -843 ypos 28 addUserKnob {20 User} addUserKnob {22 fn T "### level define ###\n\ndef getLevel() :\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\tggLevel = nuke.root()\n\telse :\n\t\tnodePath = nuke.thisNode().fullName().split('.')\n\t\tnodePath.pop()\n\t\tggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\n### sample z in 2D ###\n\ndef sample2d() :\n\tthisGRP = nuke.thisGroup()\n\tif thisGRP\['sample_z_status'].value() == '\[ ON ]' :\n\t\tsam_co = thisGRP\['sample_point'].getValue()\n\t\tzdata = nuke.toNode('sam_dot').sample('blue', sam_co\[0], sam_co\[1]) * -1\n\t\tthisGRP\['fregion_define_z'].setValue( zdata )" +STARTLINE} addUserKnob {15 fregion} fregion {{parent.focus_region} {parent.focus_region} {parent.focus_region} {parent.focus_region}} } NoOp { inputs 0 name global_math xpos -842 ypos -43 addUserKnob {20 User} addUserKnob {7 hratio} hratio {{"cam_data.haperture / cam_data.focal"}} addUserKnob {7 maxwidth} maxwidth {{"hratio * parent.fregion_define_z"}} addUserKnob {7 maxheight} maxheight {{"hratio * parent.fregion_define_z * ( img_dot.height / img_dot.width )"}} addUserKnob {13 pt1} pt1 {{"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + \n( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} addUserKnob {13 pt2} pt2 {{"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} } end_group Camera2 { inputs 0 translate {{curve x1 -23.73355293 x50 1.828465939 x100 10.79810143} {curve x1 6.752248287 x50 13.82691669 x100 25.23773003} {curve x1 -3.158116341 x50 5.475767136 x100 -12.79232216}} rotate {{curve x1 30.63627052 x50 14.22963619 x100 -23.22279344} {curve x1 -44.94124796 x50 19.70681696 x100 76.6501109} {curve x1 0 x50 27.42004885 x100 13.36756642}} focal 24 name Camera3 xpos 342 ypos -217 } Scene { inputs 2 name Scene3 xpos 522 ypos -75 } Dot { name Dot3 xpos 546 ypos 114 } Group { inputs 0 name render_with_deep xpos 1191 ypos -374 postage_stamp true } Camera2 { inputs 0 translate {{curve x1 -23.73355293 x50 1.828465939 x100 10.79810143} {curve x1 6.752248287 x50 13.82691669 x100 25.23773003} {curve x1 -3.158116341 x50 5.475767136 x100 -12.79232216}} rotate {{curve x1 30.63627052 x50 14.22963619 x100 -23.22279344} {curve x1 -44.94124796 x50 19.70681696 x100 76.6501109} {curve x1 0 x50 27.42004885 x100 13.36756642}} focal 24 name Camera1 xpos 241 ypos -567 } Dot { name Dot2 xpos 351 ypos -543 } set N81bc0180 [stack 0] Dot { name Dot3 xpos 351 ypos -428 } push $N81bc0180 CheckerBoard2 { inputs 0 name CheckerBoard1 xpos 406 ypos -928 } Dot { name Dot1 xpos 440 ypos -814 } set N81bc9030 [stack 0] Dot { name Dot5 xpos 553 ypos -814 } set N81bcb3b0 [stack 0] Dot { name Dot4 xpos 693 ypos -814 } Multiply { channels rgb value {0 1 1 1} name Multiply3 xpos 659 ypos -756 } Cube { rows 1 columns 1 separate_faces false translate {-7.849998951 18.14999962 -19.00000191} rotate {0 0 45.93192592} uniform_scale 7 name Cube1 xpos 659 ypos -676 } push $N81bcb3b0 Multiply { channels rgb value {1 0 1 1} name Multiply2 xpos 519 ypos -750 } Sphere { translate {-15.00000191 16.45000076 -17.79999924} scaling {3.183291435 1 2.618715286} uniform_scale 2 name Sphere1 xpos 519 ypos -670 } push $N81bc9030 Multiply { channels rgb value {1 1 0 1} name Multiply1 xpos 406 ypos -754 } Cylinder { rows 1 close_top true close_bottom true translate {-3.149999619 19.64999962 -13.89999866} rotate {52.26493538 0 32.53306187} scaling {1 4.216488838 1} uniform_scale 2 name Cylinder1 xpos 406 ypos -673 } Scene { inputs 4 name Scene1 xpos 416 ypos -567 } Reformat { inputs 0 type "to box" box_width 1280 box_height 720 box_fixed true name Reformat1 xpos 530 ypos -431 } ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type off MB_channel none name ScanlineRender1 xpos 406 ypos -431 } DeepFromImage { name DeepFromImage1 selected true xpos 406 ypos -351 } Output { name Output1 xpos 406 ypos -215 } end_group DeepToImage { name DeepToImage1 xpos 1191 ypos -265 } Group { name SSMesh4 tile_color 0x5c9e83ff label "Geo Output" xpos 1191 ypos -207 addUserKnob {20 tab_general l General} addUserKnob {22 set_link l "link to selected camera" t "Click to link selected camera by expression. This tool will get the focal, haperture and world matrix from selected camera to generate" T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\n\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\ndefaultKnobs = \{\n\t\t\t'world matrix' : 'world_matrix',\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.focal'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.haperture'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.win_translate'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.win_scale'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.winroll'.format(CAMnode))\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']))\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']))\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']))\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']))\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window roll']))\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\n\nfor knob in thisGRP.knobs() :\n\tif mainKnobs.count(knob) != 0 :\n\t\t thisGRP\[knob].clearAnimated()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 cam_focal l "focal length" R 5 100} cam_focal {{Camera4.focal}} addUserKnob {7 cam_haperture l "horiz aperture" R 0.1 50} cam_haperture {{Camera4.haperture}} addUserKnob {30 cam_win_translate l "window translate"} cam_win_translate {{Camera4.win_translate} {Camera4.win_translate}} addUserKnob {30 cam_win_scale l "window scale"} cam_win_scale {{Camera4.win_scale} {Camera4.win_scale}} addUserKnob {7 cam_winroll l "window roll" R -45 45} cam_winroll {{Camera4.winroll}} addUserKnob {41 world_matrix l "world matrix" T cam_data.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 spacer_5 l "" +STARTLINE T
    } addUserKnob {26 title_basic l "BASIC SETTING"} addUserKnob {4 display l "3D display" t "How to draw in 3D preview. The viewer can override this setting." M {off wireframe soild solid+wireframe textured textured+wireframe "" "" ""}} display textured addUserKnob {4 data_type l "data type" t "data type\nUsing one of these data to convert into 3D mesh.\n\nPosition\nSupported world space or camera space position data.\n\nDepth (normalized far=0)\nNormalized depth data, which is same as depth data output by ScanlineRender.\n\nDeep / Depth (direct)\nRaw camera depth data. If using deep, need to convert DeepToImage first, and selected deep channel on 'channels' knob." M {"position (world space)" "position (camera space)" "depth (normalized far=0)" "deep / depth (direct)" "" "" ""}} data_type "deep / depth (direct)" addUserKnob {41 channels t "Select which channel represented on selected data type." T shuffle_data.in} addUserKnob {6 unpm l unpremult t "3D data pass should be unpremult with alpha before process." -STARTLINE} unpm true addUserKnob {26 spacer_4 l "" +STARTLINE T
    } addUserKnob {7 lod l "mesh LOD" t "Level of Details\n\nIf this value set to 1.0, subdivision of the mesh 1:1 to the data available in the resolution. Which mean 1 face of the mesh equal to 1 pixel.\n\nIf this value set to 1.0, it will slow down the render process.\n\nHighly recommend to use 0.1 - 0.5 if high resolution mesh details is not concern."} lod 0.1 addUserKnob {41 filter_size l "filter size" T DisplaceGeo.filter_size} addUserKnob {41 filter T DisplaceGeo.filter} addUserKnob {26 spacer_2 l "" +STARTLINE T
    } addUserKnob {26 title_drange l "" +STARTLINE T "distance range"} addUserKnob {7 drange_near l near t "clip the mesh in the min value in terms of depth." R 0 10000} addUserKnob {7 drange_far l far t "clip the mesh in the max value in terms of depth." R 0 10000} drange_far 30 addUserKnob {6 clip_color l "distance clip on color" t "Apply the distance clip on colored texture." +STARTLINE} clip_color true addUserKnob {26 spacer_3 l "" +STARTLINE T
    } addUserKnob {26 title_export l EXPORT} addUserKnob {41 file t "only support *.abc file extension (alembric) ." T WriteGeo.file} addUserKnob {22 export_geo l "Export Geo" T "def exportGeo() :\n\twgeo = nuke.toNode('WriteGeo')\n\twgeo\['Execute'].execute()\n\nthisGRP = nuke.thisGroup()\nfilepath = thisGRP\['file'].getValue()\n\nif not len(filepath) :\n\tnuke.message('file path is empty. Process denied.')\nelif not filepath.split('.')\[-1:]\[0].lower() == 'abc' :\n\tif nuke.ask('File extension invalue. Only support render *.abc . Do you want this tool to fix it and process ?') :\n\t\tthisGRP\['file'].setValue( thisGRP\['file'].getValue() + '.abc' )\n\t\texportGeo()\nelse :\n\texportGeo()" +STARTLINE} addUserKnob {22 import_geo l "Import Geo" -STARTLINE T "prefx = nuke.toNode('preferences')\['GridWidth'].value()\nthisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\nroot = getLevel()\n\nwith root :\n\trgeo = nuke.nodes.ReadGeo2( file=thisGRP\['file'].getValue() )\n\trgeo.setXYpos( int( thisGRP\['xpos'].getValue() + prefx ) , int( thisGRP\['ypos'].getValue() ) )"} addUserKnob {20 tab_misc l Miscellaneous} addUserKnob {26 title_focus_region l "FOCUS REGION"} addUserKnob {41 use_focus_region l "use focus region" t "use focus region to generate SSMesh in specific area. Save resources and possible to work with high LOD mesh." T menu2.use_focus_region} addUserKnob {15 focus_region l "focus region" t "Set focus region in screen space. These values are 2D coordinate." +DISABLED} focus_region {0 0 1280 720} addUserKnob {26 spacer_1 l "" +STARTLINE T
    } addUserKnob {3 fregion_ref_frame l "ref frame" t "set reference frame for tracking focus region. 'focus region' & 'define z' will apply on this reference frame and process the tracking." +DISABLED} fregion_ref_frame 1 addUserKnob {22 fregion_set_frame l "set current frame" t "set current frame for focus region reference frame." -STARTLINE +DISABLED T "nuke.thisGroup()\['fregion_ref_frame'].setValue( nuke.frame() )"} addUserKnob {12 sample_point l "sample position" t "Toggle 'sample z' in 2D to enable this 2D sample coordinate." +DISABLED} addUserKnob {22 sample_z_toggle l "sample z in 2D" t "'sample z' is only works for sample value purpose. After sample is done, must turn off sample function." -STARTLINE +DISABLED T "thisGRP = nuke.thisGroup()\nszstatus = thisGRP\['sample_z_status'].value()\n\nstatus = \['\[ OFF ]','\[ ON ]']\n\nif szstatus == status\[0] :\n\tthisGRP\['sample_z_status'].setValue( status\[1] )\n\tthisGRP\['sample_point'].setEnabled(True)\n\tthisGRP\['updateUI'].setValue(\"goStore = nuke.toNode(\\'store\\')\\ngoStore\[\\'fn\\'].execute()\\nsample2d()\")\nelse :\n\tthisGRP\['sample_z_status'].setValue( status\[0] )\n\tthisGRP\['sample_point'].setEnabled(False)\n\tthisGRP\['updateUI'].setValue('')"} addUserKnob {26 sample_z_status l "" -STARTLINE +DISABLED T "\[ OFF ]"} addUserKnob {7 fregion_define_z l "define z" t "Define the z value on reference frame. Can use 'sample z in 2D' to get this value." +DISABLED R 0 10000} addUserKnob {22 track_focus_region l "\[ track focus region ]" t "Use the set focus region on reference frame to track with camera in 3D space.\n\n* project setting need to be same as image resolution to get the correct result." +DISABLED T "rootST = int( nuke.root()\['first_frame'].getValue() )\nrootED = int( nuke.root()\['last_frame'].getValue() )\n\ngetFrame = nuke.getFramesAndViews( 'frame range', str( rootST ) + '-' + str( rootED ) )\n\ntry :\n\tframeST = int( getFrame\[0].replace( ' ' , '' ).split('-')\[0] )\n\tframeED = int( getFrame\[0].replace( ' ' , '' ).split('-')\[1] )\n\n\tthisGRP = nuke.thisGroup()\n\trefframe = int( thisGRP\['fregion_ref_frame'].getValue() )\n\tcam = nuke.toNode('cam_data')\n\tpt1 = nuke.toNode('left_pt')\['translate'].getValue()\n\tpt2 = nuke.toNode('right_pt')\['translate'].getValue()\n\n\tct_hack = nuke.nodes.CurveTool()\n\n\twith nuke.root() :\n\n\t\tif frameED - frameST != 0 :\n\t\t\tthisGRP\['focus_region'].clearAnimated()\n\t\t\ttempbuffer1 = thisGRP\['focus_region'].getValue()\n\t\t\tthisGRP\['focus_region'].setAnimated()\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[0] , refframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[1] , refframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[2] , refframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[3] , refframe , 3 )\n\n\t\tfor trackframe in range( frameST, frameED+1 , 1 ) :\n\t\t\tnuke.execute( ct_hack, trackframe, trackframe )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[0] , trackframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[1] , trackframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[0] , trackframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[1] , trackframe , 3 )\n\n\tnuke.delete( ct_hack )\nexcept :\n pass" +STARTLINE} addUserKnob {26 spacer_6 l "" +STARTLINE T
    } addUserKnob {20 grp_crop_preview l "3D crop preview" +DISABLED n 1} grp_crop_preview 0 addUserKnob {6 show_crop l "show crop point" t "It will show 2 spheres for the crop in 3D space. They set in the place which is where you set the focus region in screen space and defined by z." +DISABLED +STARTLINE} addUserKnob {7 crop_point_scale l scale t "Scale the preview crop points (spheres)." +DISABLED} crop_point_scale 0.3 addUserKnob {18 crop_point_color l color t "change color of the crop points (spheres)." +DISABLED} crop_point_color 1 addUserKnob {6 crop_point_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup n -1} addUserKnob {26 spacer l "" +STARTLINE T
    } addUserKnob {26 title_uv l UV} addUserKnob {41 uv_stabilize l "uv stabilize" t "Turn this on if you need to stabilize in UV space. During UV stabilize on, the geo will not be animated. Set reference frame under 'mesh ref frame'." T menu1.uv_stabilize} addUserKnob {3 uv_ref_frame l "mesh ref frame" t "Select the frame number that will have identity geo shaped for UV texturing." +DISABLED} uv_ref_frame 1001 addUserKnob {22 uv_set_frame l "set current frame" -STARTLINE +DISABLED T "nuke.thisGroup()\['uv_ref_frame'].setValue( nuke.frame() )"} addUserKnob {6 black_outside l "black outside" t "black outside the UV texture." +DISABLED +STARTLINE} black_outside true addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.3} addUserKnob {26 l_DATE l "Date Modified" T 2019-11-08} addUserKnob {26 l_CHANGELOG l Changelog T "1.3\n- camera window supported\n- anamophic project supported\n- fix the conflict of 'force region' and 'UV stabilize'.\n can use both at the same time now.\n\n1.2\n- removed unuse camera link knobs\n- added focus region, so mesh can be\n form in specific area/object to save\n resources for higher LOD\n\n1.1\n- fix the missing line on 'Export Geo' \n button\n\n1.0\n- create mesh/geo in screen space\n using position/depth/deep data"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "don't touch" note_font_size 32 xpos -1142 ypos -169 bdwidth 202 bdheight 478 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x4c4c4cff label bin note_font_size 32 xpos -899 ypos -170 bdwidth 200 bdheight 280 } Input { inputs 0 name img xpos -100 ypos -184 } Dot { name img_dot xpos -66 ypos -83 } set N3e819330 [stack 0] Dot { name Dot3 xpos 758 ypos -83 } set N3e81b8f0 [stack 0] Shuffle { in deep in2 alpha alpha red2 name shuffle_data label "\[value in]" xpos 724 ypos -32 } Unpremult { name Unpremult_data xpos 724 ypos 62 disable {{!parent.unpm}} } Dot { name Dot5 xpos 758 ypos 700 } set N3e82a040 [stack 0] Dot { name Dot6 xpos 928 ypos 700 } set N3e82c500 [stack 0] Dot { name Dot7 xpos 1106 ypos 700 } set N3e82e9c0 [stack 0] Dot { name Dot8 xpos 1260 ypos 700 } Expression { temp_name0 dvalue temp_expr0 red temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression9 xpos 1226 ypos 774 } Dot { name Dot16 xpos 1260 ypos 889 } push $N3e82e9c0 Expression { temp_name0 dvalue temp_expr0 "1 / red" temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression6 xpos 1072 ypos 774 } Dot { name Dot17 xpos 1106 ypos 863 } push $N3e82c500 Expression { expr2 -blue name Expression7 label "fix z" xpos 894 ypos 774 } Dot { name Dot18 xpos 928 ypos 876 } push $N3e82a040 Expression { temp_name0 nx temp_expr0 "red - cam_data.world_matrix.3" temp_name1 ny temp_expr1 "green - cam_data.world_matrix.7" temp_name2 nz temp_expr2 "blue - cam_data.world_matrix.11" expr0 "nx * \[value inverseMatrix.invMatrix.0] + ny * \[value inverseMatrix.invMatrix.1] + nz * \[value inverseMatrix.invMatrix.2]" expr1 "nx * \[value inverseMatrix.invMatrix.3] + ny * \[value inverseMatrix.invMatrix.4] + nz * \[value inverseMatrix.invMatrix.5]" expr2 "nx * \[value inverseMatrix.invMatrix.6] + ny * \[value inverseMatrix.invMatrix.7] + nz * \[value inverseMatrix.invMatrix.8]" name Expression3 label "position invert" xpos 724 ypos 774 } Switch { inputs 4 which {{parent.data_type}} name Switch1 xpos 724 ypos 984 } Dot { name Dot13 xpos 758 ypos 1113 } set N3a63aad0 [stack 0] Dot { name sam_dot xpos 551 ypos 1113 } NoOp { inputs 0 name menu1 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['uv_stabilize'].getValue() == 1 :\n thisGRP\['uv_ref_frame'].setEnabled(True)\n thisGRP\['uv_set_frame'].setEnabled(True)\n thisGRP\['black_outside'].setEnabled(True)\nelse :\n thisGRP\['uv_ref_frame'].setEnabled(False)\n thisGRP\['uv_set_frame'].setEnabled(False)\n thisGRP\['black_outside'].setEnabled(False)\n" xpos -1085 ypos -42 addUserKnob {20 User} addUserKnob {6 uv_stabilize l "uv stabilize" +STARTLINE} } NoOp { inputs 0 name menu2 onCreate "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nthisGRP\[fregion_knobs\[4]].setEnabled(True)\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n else :\n thisGRP\[i].setEnabled(False)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" knobChanged "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" xpos -1085 ypos 25 addUserKnob {20 User} addUserKnob {6 use_focus_region l "use focus region" +STARTLINE} } Camera { inputs 0 display off selectable false useMatrix true matrix { {{Camera4.world_matrix} {Camera4.world_matrix} {Camera4.world_matrix} {Camera4.world_matrix}} {{Camera4.world_matrix} {Camera4.world_matrix} {Camera4.world_matrix} {Camera4.world_matrix}} {{Camera4.world_matrix} {Camera4.world_matrix} {Camera4.world_matrix} {Camera4.world_matrix}} {{Camera4.world_matrix} {Camera4.world_matrix} {Camera4.world_matrix} {Camera4.world_matrix}} } focal {{parent.cam_focal}} haperture {{cam_haperture}} name cam_data xpos -335 ypos 2204 } push $N3a63aad0 Expression { temp_name0 unpremultA temp_expr0 "alpha * ( 1 / alpha )" temp_name1 max temp_expr1 blue expr3 "abs( max ) < \[value parent.drange_near] || abs( max ) > \[value parent.drange_far] ? 0 : isnan(unpremultA) ? 0 : unpremultA" name Expression1 label "distance crop" xpos 724 ypos 1244 } Premult { name Premult1 xpos 724 ypos 1332 } Dot { name Dot9 xpos 758 ypos 1640 } set N3a669ca0 [stack 0] push $N3e819330 Dot { name Dot10 xpos -66 ypos 1552 } set N3a66c160 [stack 0] Unpremult { name Unpremult1 xpos 48 ypos 1549 } Merge2 { inputs 2 operation mask name Merge2 xpos 48 ypos 1637 } Premult { name Premult3 xpos 48 ypos 1719 } push $N3a66c160 Switch { inputs 2 which {{parent.clip_color}} name Switch2 xpos -100 ypos 1828 } Project3D2 { inputs 2 crop {{parent.black_outside}} name Project3D2 xpos -100 ypos 2224 } push $N3e81b8f0 Dot { name Dot2 xpos 1576 ypos -84 } Shuffle { red black green black blue black alpha black name Shuffle1 label "\[value in]" xpos 1542 ypos 30 } Remove { name Remove1 xpos 1542 ypos 118 } Reformat { type scale black_outside true name Reformat1 xpos 1542 ypos 212 } Expression { temp_name0 xpos temp_expr0 "( ( x + 0.5 ) / input.width - 0.5) * \[value global_math.hratio] * abs( \[value parent.drange_far] )" temp_name1 ypos temp_expr1 "( ( y + 0.5 ) / input.height -0.5 ) * ( \[value global_math.hratio] * abs( \[value parent.drange_far] ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name2 zpos temp_expr2 "-\[value parent.drange_far]" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression8 xpos 1542 ypos 845 } ColorMatrix { matrix { {{cam_data.world_matrix.0} {cam_data.world_matrix.1} {cam_data.world_matrix.2}} {{cam_data.world_matrix.4} {cam_data.world_matrix.5} {cam_data.world_matrix.6}} {{cam_data.world_matrix.8} {cam_data.world_matrix.9} {cam_data.world_matrix.10}} } name ColorMatrix1 xpos 1542 ypos 970 } Add { channels rgb value {{cam_data.world_matrix.3} {cam_data.world_matrix.7} {cam_data.world_matrix.11} 0} name Add1 xpos 1542 ypos 1052 } Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop1 xpos 1542 ypos 1476 disable {{!parent.use_focus_region}} } Dot { name Dot4 xpos 1576 ypos 2402 } push $N3a669ca0 Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop4 selected true xpos 724 ypos 1714 disable {{!parent.use_focus_region}} } Unpremult { name Unpremult3 xpos 724 ypos 1851 } Expression { temp_name0 nx temp_expr0 red temp_name1 ny temp_expr1 green temp_name2 nz temp_expr2 blue expr0 "( nx * \[value cam_data.world_matrix.0] + ny * \[value cam_data.world_matrix.1] + nz * \[value cam_data.world_matrix.2] ) + \[value cam_data.world_matrix.3]" expr1 "( nx * \[value cam_data.world_matrix.4] + ny * \[value cam_data.world_matrix.5] + nz * \[value cam_data.world_matrix.6] ) + \[value cam_data.world_matrix.7]" expr2 "( nx * \[value cam_data.world_matrix.8] + ny * \[value cam_data.world_matrix.9] + nz * \[value cam_data.world_matrix.10] ) + \[value cam_data.world_matrix.11]" name Expression4 label "position revert" xpos 724 ypos 1933 } Premult { name Premult2 xpos 724 ypos 2027 } Merge2 { inputs 2 operation under name Merge1 xpos 724 ypos 2398 } Card { inputs 0 image_aspect false rows {{"img_dot.height * parent.lod"}} columns {{"img_dot.width * parent.lod"}} name ssmesh xpos 343 ypos 2317 } DisplaceGeo { inputs 2 source "rgb absolute" scale 1 filter_size 1 name DisplaceGeo xpos 343 ypos 2399 } FrameHold { first_frame {{parent.uv_ref_frame}} name FrameHold xpos 343 ypos 2479 disable {{!parent.uv_stabilize}} } ApplyMaterial { inputs 2 name ApplyMaterial1 xpos -100 ypos 2483 } Scene { display {{parent.display}} name gl_scene xpos -90 ypos 3072 } set N3a6ec9e0 [stack 0] WriteGeo { file_type abc name WriteGeo xpos 120 ypos 3093 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt2.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name right_pt xpos -600 ypos 3218 } CheckerBoard2 { inputs 0 format "256 256 0 0 256 256 1 square_256" name CheckerBoard1 xpos -789 ypos 2694 } Multiply { channels rgb value {{parent.crop_point_color.r} {parent.crop_point_color.g} {parent.crop_point_color.b} 1} name Multiply xpos -789 ypos 2822 } Clamp { channels rgba name Clamp1 xpos -789 ypos 2905 } Sphere { selectable false cast_shadow false receive_shadow false rows 10 columns 10 uniform_scale {{parent.crop_point_scale}} name Sphere1 xpos -789 ypos 2987 disable {{!show_crop}} } Dot { name Dot24 xpos -755 ypos 3065 } set N3e919d00 [stack 0] Dot { name Dot25 xpos -456 ypos 3065 } TransformGeo { inputs 2 selectable false name TransformGeo2 xpos -490 ypos 3238 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt1.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name left_pt xpos -899 ypos 3220 } push $N3e919d00 TransformGeo { inputs 2 selectable false name TransformGeo1 xpos -789 ypos 3240 } Scene { inputs 2 selectable false name Scene1 xpos -480 ypos 3395 } ApplyMaterial { display off selectable false render_mode off name material_switch xpos -490 ypos 3523 } push $N3a6ec9e0 Scene { inputs 2 name Scene2 xpos -90 ypos 3502 } Output { name Output1 xpos -100 ypos 4030 } Group { inputs 0 name inverseMatrix tile_color 0x337f4cff xpos 576 ypos 780 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path cam_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2011-11-28} addUserKnob {26 l_CHANGELOG l Changelog T "v1.0\n- reveal the calculate output of \n inverse matrix which is c44matrix\n and colormatrix doesn't show\n "} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group Camera { inputs 0 rotate {0 0 {-parent.cam_winroll}} win_translate {{parent.cam_win_translate} {parent.cam_win_translate}} win_scale {{parent.cam_win_scale} {parent.cam_win_scale}} name fb_data xpos -340 ypos 2087 } NoOp { inputs 0 name store xpos -843 ypos 28 addUserKnob {20 User} addUserKnob {22 fn T "### level define ###\n\ndef getLevel() :\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\tggLevel = nuke.root()\n\telse :\n\t\tnodePath = nuke.thisNode().fullName().split('.')\n\t\tnodePath.pop()\n\t\tggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\n### sample z in 2D ###\n\ndef sample2d() :\n\tthisGRP = nuke.thisGroup()\n\tif thisGRP\['sample_z_status'].value() == '\[ ON ]' :\n\t\tsam_co = thisGRP\['sample_point'].getValue()\n\t\tzdata = nuke.toNode('sam_dot').sample('blue', sam_co\[0], sam_co\[1]) * -1\n\t\tthisGRP\['fregion_define_z'].setValue( zdata )" +STARTLINE} addUserKnob {15 fregion} fregion {{parent.focus_region} {parent.focus_region} {parent.focus_region} {parent.focus_region}} } NoOp { inputs 0 name global_math xpos -842 ypos -43 addUserKnob {20 User} addUserKnob {7 hratio} hratio {{"cam_data.haperture / cam_data.focal"}} addUserKnob {7 maxwidth} maxwidth {{"hratio * parent.fregion_define_z"}} addUserKnob {7 maxheight} maxheight {{"hratio * parent.fregion_define_z * ( img_dot.height / img_dot.width )"}} addUserKnob {13 pt1} pt1 {{"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + \n( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} addUserKnob {13 pt2} pt2 {{"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} } end_group Camera2 { inputs 0 translate {{curve x1 -23.73355293 x50 1.828465939 x100 10.79810143} {curve x1 6.752248287 x50 13.82691669 x100 25.23773003} {curve x1 -3.158116341 x50 5.475767136 x100 -12.79232216}} rotate {{curve x1 30.63627052 x50 14.22963619 x100 -23.22279344} {curve x1 -44.94124796 x50 19.70681696 x100 76.6501109} {curve x1 0 x50 27.42004885 x100 13.36756642}} focal 24 name Camera4 xpos 1021 ypos -217 } Scene { inputs 2 name Scene4 xpos 1201 ypos -75 } Dot { name Dot4 xpos 1225 ypos 114 } Group { inputs 0 name render_with_pworld1 xpos -824 ypos 836 postage_stamp true } Camera2 { inputs 0 translate {{curve x1 -23.73355293 x50 1.828465939 x100 10.79810143} {curve x1 6.752248287 x50 13.82691669 x100 25.23773003} {curve x1 -3.158116341 x50 5.475767136 x100 -12.79232216}} rotate {{curve x1 30.63627052 x50 14.22963619 x100 -23.22279344} {curve x1 -44.94124796 x50 19.70681696 x100 76.6501109} {curve x1 0 x50 27.42004885 x100 13.36756642}} focal 24 name Camera1 xpos 241 ypos -567 } Dot { name Dot2 xpos 351 ypos -543 } set N81f00770 [stack 0] Dot { name Dot3 xpos 351 ypos -428 } push $N81f00770 CheckerBoard2 { inputs 0 name CheckerBoard1 xpos 406 ypos -928 } Dot { name Dot1 xpos 440 ypos -814 } set N81f09620 [stack 0] Dot { name Dot5 xpos 553 ypos -814 } set N81f0b9a0 [stack 0] Dot { name Dot4 xpos 693 ypos -814 } Multiply { channels rgb value {0 1 1 1} name Multiply3 xpos 659 ypos -756 } Cube { rows 1 columns 1 separate_faces false translate {-7.849998951 18.14999962 -19.00000191} rotate {0 0 45.93192592} uniform_scale 7 name Cube1 xpos 659 ypos -676 } push $N81f0b9a0 Multiply { channels rgb value {1 0 1 1} name Multiply2 xpos 519 ypos -750 } Sphere { translate {-15.00000191 16.45000076 -17.79999924} scaling {3.183291435 1 2.618715286} uniform_scale 2 name Sphere1 xpos 519 ypos -670 } push $N81f09620 Multiply { channels rgb value {1 1 0 1} name Multiply1 xpos 406 ypos -754 } Cylinder { rows 1 close_top true close_bottom true translate {-3.149999619 19.64999962 -13.89999866} rotate {52.26493538 0 32.53306187} scaling {1 4.216488838 1} uniform_scale 2 name Cylinder1 xpos 406 ypos -673 } Scene { inputs 4 name Scene1 xpos 416 ypos -567 } Reformat { inputs 0 type "to box" box_width 1280 box_height 720 box_fixed true name Reformat1 xpos 530 ypos -431 } ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type off MB_channel none output_shader_vectors true P_channel pworld name ScanlineRender1 xpos 406 ypos -431 } Output { name Output1 xpos 406 ypos -331 } end_group Group { name SSMesh1 tile_color 0x5c9e83ff label "Geo Output" xpos -824 ypos 1008 addUserKnob {20 tab_general l General} addUserKnob {22 set_link l "link to selected camera" t "Click to link selected camera by expression. This tool will get the focal, haperture and world matrix from selected camera to generate" T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\n\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\ndefaultKnobs = \{\n\t\t\t'world matrix' : 'world_matrix',\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.focal'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.haperture'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.win_translate'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.win_scale'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.winroll'.format(CAMnode))\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']))\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']))\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']))\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']))\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window roll']))\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\n\nfor knob in thisGRP.knobs() :\n\tif mainKnobs.count(knob) != 0 :\n\t\t thisGRP\[knob].clearAnimated()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 cam_focal l "focal length" R 5 100} cam_focal {{Camera5.focal}} addUserKnob {7 cam_haperture l "horiz aperture" R 0.1 50} cam_haperture {{Camera5.haperture}} addUserKnob {30 cam_win_translate l "window translate"} cam_win_translate {{Camera5.win_translate} {Camera5.win_translate}} addUserKnob {30 cam_win_scale l "window scale"} cam_win_scale {{Camera5.win_scale} {Camera5.win_scale}} addUserKnob {7 cam_winroll l "window roll" R -45 45} cam_winroll {{Camera5.winroll}} addUserKnob {41 world_matrix l "world matrix" T cam_data.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 spacer_5 l "" +STARTLINE T
    } addUserKnob {26 title_basic l "BASIC SETTING"} addUserKnob {4 display l "3D display" t "How to draw in 3D preview. The viewer can override this setting." M {off wireframe soild solid+wireframe textured textured+wireframe "" "" ""}} display textured addUserKnob {4 data_type l "data type" t "data type\nUsing one of these data to convert into 3D mesh.\n\nPosition\nSupported world space or camera space position data.\n\nDepth (normalized far=0)\nNormalized depth data, which is same as depth data output by ScanlineRender.\n\nDeep / Depth (direct)\nRaw camera depth data. If using deep, need to convert DeepToImage first, and selected deep channel on 'channels' knob." M {"position (world space)" "position (camera space)" "depth (normalized far=0)" "deep / depth (direct)" "" "" ""}} addUserKnob {41 channels t "Select which channel represented on selected data type." T shuffle_data.in} addUserKnob {6 unpm l unpremult t "3D data pass should be unpremult with alpha before process." -STARTLINE} unpm true addUserKnob {26 spacer_4 l "" +STARTLINE T
    } addUserKnob {7 lod l "mesh LOD" t "Level of Details\n\nIf this value set to 1.0, subdivision of the mesh 1:1 to the data available in the resolution. Which mean 1 face of the mesh equal to 1 pixel.\n\nIf this value set to 1.0, it will slow down the render process.\n\nHighly recommend to use 0.1 - 0.5 if high resolution mesh details is not concern."} lod 0.1 addUserKnob {41 filter_size l "filter size" T DisplaceGeo.filter_size} addUserKnob {41 filter T DisplaceGeo.filter} addUserKnob {26 spacer_2 l "" +STARTLINE T
    } addUserKnob {26 title_drange l "" +STARTLINE T "distance range"} addUserKnob {7 drange_near l near t "clip the mesh in the min value in terms of depth." R 0 10000} drange_near 14 addUserKnob {7 drange_far l far t "clip the mesh in the max value in terms of depth." R 0 10000} drange_far 17 addUserKnob {6 clip_color l "distance clip on color" t "Apply the distance clip on colored texture." +STARTLINE} clip_color true addUserKnob {26 spacer_3 l "" +STARTLINE T
    } addUserKnob {26 title_export l EXPORT} addUserKnob {41 file t "only support *.abc file extension (alembric) ." T WriteGeo.file} addUserKnob {22 export_geo l "Export Geo" T "def exportGeo() :\n\twgeo = nuke.toNode('WriteGeo')\n\twgeo\['Execute'].execute()\n\nthisGRP = nuke.thisGroup()\nfilepath = thisGRP\['file'].getValue()\n\nif not len(filepath) :\n\tnuke.message('file path is empty. Process denied.')\nelif not filepath.split('.')\[-1:]\[0].lower() == 'abc' :\n\tif nuke.ask('File extension invalue. Only support render *.abc . Do you want this tool to fix it and process ?') :\n\t\tthisGRP\['file'].setValue( thisGRP\['file'].getValue() + '.abc' )\n\t\texportGeo()\nelse :\n\texportGeo()" +STARTLINE} addUserKnob {22 import_geo l "Import Geo" -STARTLINE T "prefx = nuke.toNode('preferences')\['GridWidth'].value()\nthisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\nroot = getLevel()\n\nwith root :\n\trgeo = nuke.nodes.ReadGeo2( file=thisGRP\['file'].getValue() )\n\trgeo.setXYpos( int( thisGRP\['xpos'].getValue() + prefx ) , int( thisGRP\['ypos'].getValue() ) )"} addUserKnob {20 tab_misc l Miscellaneous} addUserKnob {26 title_focus_region l "FOCUS REGION"} addUserKnob {41 use_focus_region l "use focus region" t "use focus region to generate SSMesh in specific area. Save resources and possible to work with high LOD mesh." T menu2.use_focus_region} addUserKnob {15 focus_region l "focus region" t "Set focus region in screen space. These values are 2D coordinate." +DISABLED} focus_region {0 0 1280 720} addUserKnob {26 spacer_1 l "" +STARTLINE T
    } addUserKnob {3 fregion_ref_frame l "ref frame" t "set reference frame for tracking focus region. 'focus region' & 'define z' will apply on this reference frame and process the tracking." +DISABLED} fregion_ref_frame 1 addUserKnob {22 fregion_set_frame l "set current frame" t "set current frame for focus region reference frame." -STARTLINE +DISABLED T "nuke.thisGroup()\['fregion_ref_frame'].setValue( nuke.frame() )"} addUserKnob {12 sample_point l "sample position" t "Toggle 'sample z' in 2D to enable this 2D sample coordinate." +DISABLED} addUserKnob {22 sample_z_toggle l "sample z in 2D" t "'sample z' is only works for sample value purpose. After sample is done, must turn off sample function." -STARTLINE +DISABLED T "thisGRP = nuke.thisGroup()\nszstatus = thisGRP\['sample_z_status'].value()\n\nstatus = \['\[ OFF ]','\[ ON ]']\n\nif szstatus == status\[0] :\n\tthisGRP\['sample_z_status'].setValue( status\[1] )\n\tthisGRP\['sample_point'].setEnabled(True)\n\tthisGRP\['updateUI'].setValue(\"goStore = nuke.toNode(\\'store\\')\\ngoStore\[\\'fn\\'].execute()\\nsample2d()\")\nelse :\n\tthisGRP\['sample_z_status'].setValue( status\[0] )\n\tthisGRP\['sample_point'].setEnabled(False)\n\tthisGRP\['updateUI'].setValue('')"} addUserKnob {26 sample_z_status l "" -STARTLINE +DISABLED T "\[ OFF ]"} addUserKnob {7 fregion_define_z l "define z" t "Define the z value on reference frame. Can use 'sample z in 2D' to get this value." +DISABLED R 0 10000} addUserKnob {22 track_focus_region l "\[ track focus region ]" t "Use the set focus region on reference frame to track with camera in 3D space.\n\n* project setting need to be same as image resolution to get the correct result." +DISABLED T "rootST = int( nuke.root()\['first_frame'].getValue() )\nrootED = int( nuke.root()\['last_frame'].getValue() )\n\ngetFrame = nuke.getFramesAndViews( 'frame range', str( rootST ) + '-' + str( rootED ) )\n\ntry :\n\tframeST = int( getFrame\[0].replace( ' ' , '' ).split('-')\[0] )\n\tframeED = int( getFrame\[0].replace( ' ' , '' ).split('-')\[1] )\n\n\tthisGRP = nuke.thisGroup()\n\trefframe = int( thisGRP\['fregion_ref_frame'].getValue() )\n\tcam = nuke.toNode('cam_data')\n\tpt1 = nuke.toNode('left_pt')\['translate'].getValue()\n\tpt2 = nuke.toNode('right_pt')\['translate'].getValue()\n\n\tct_hack = nuke.nodes.CurveTool()\n\n\twith nuke.root() :\n\n\t\tif frameED - frameST != 0 :\n\t\t\tthisGRP\['focus_region'].clearAnimated()\n\t\t\ttempbuffer1 = thisGRP\['focus_region'].getValue()\n\t\t\tthisGRP\['focus_region'].setAnimated()\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[0] , refframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[1] , refframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[2] , refframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[3] , refframe , 3 )\n\n\t\tfor trackframe in range( frameST, frameED+1 , 1 ) :\n\t\t\tnuke.execute( ct_hack, trackframe, trackframe )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[0] , trackframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[1] , trackframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[0] , trackframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[1] , trackframe , 3 )\n\n\tnuke.delete( ct_hack )\nexcept :\n pass" +STARTLINE} addUserKnob {26 spacer_6 l "" +STARTLINE T
    } addUserKnob {20 grp_crop_preview l "3D crop preview" +DISABLED n 1} grp_crop_preview 0 addUserKnob {6 show_crop l "show crop point" t "It will show 2 spheres for the crop in 3D space. They set in the place which is where you set the focus region in screen space and defined by z." +DISABLED +STARTLINE} addUserKnob {7 crop_point_scale l scale t "Scale the preview crop points (spheres)." +DISABLED} crop_point_scale 0.3 addUserKnob {18 crop_point_color l color t "change color of the crop points (spheres)." +DISABLED} crop_point_color 1 addUserKnob {6 crop_point_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup n -1} addUserKnob {26 spacer l "" +STARTLINE T
    } addUserKnob {26 title_uv l UV} addUserKnob {41 uv_stabilize l "uv stabilize" t "Turn this on if you need to stabilize in UV space. During UV stabilize on, the geo will not be animated. Set reference frame under 'mesh ref frame'." T menu1.uv_stabilize} addUserKnob {3 uv_ref_frame l "mesh ref frame" t "Select the frame number that will have identity geo shaped for UV texturing." +DISABLED} uv_ref_frame 1001 addUserKnob {22 uv_set_frame l "set current frame" -STARTLINE +DISABLED T "nuke.thisGroup()\['uv_ref_frame'].setValue( nuke.frame() )"} addUserKnob {6 black_outside l "black outside" t "black outside the UV texture." +DISABLED +STARTLINE} black_outside true addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.3} addUserKnob {26 l_DATE l "Date Modified" T 2019-11-08} addUserKnob {26 l_CHANGELOG l Changelog T "1.3\n- camera window supported\n- anamophic project supported\n- fix the conflict of 'force region' and 'UV stabilize'.\n can use both at the same time now.\n\n1.2\n- removed unuse camera link knobs\n- added focus region, so mesh can be\n form in specific area/object to save\n resources for higher LOD\n\n1.1\n- fix the missing line on 'Export Geo' \n button\n\n1.0\n- create mesh/geo in screen space\n using position/depth/deep data"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "don't touch" note_font_size 32 xpos -1142 ypos -169 bdwidth 202 bdheight 478 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x4c4c4cff label bin note_font_size 32 xpos -899 ypos -170 bdwidth 200 bdheight 280 } Input { inputs 0 name img xpos -100 ypos -184 } Dot { name img_dot xpos -66 ypos -83 } set N5a5ad900 [stack 0] Dot { name Dot3 xpos 758 ypos -83 } set N5a5afdc0 [stack 0] Shuffle { in pworld in2 alpha alpha red2 name shuffle_data label "\[value in]" xpos 724 ypos -32 } Unpremult { name Unpremult_data xpos 724 ypos 62 disable {{!parent.unpm}} } Dot { name Dot5 xpos 758 ypos 700 } set N5a6112f0 [stack 0] Dot { name Dot6 xpos 928 ypos 700 } set N5a613520 [stack 0] Dot { name Dot7 xpos 1106 ypos 700 } set N5a6159e0 [stack 0] Dot { name Dot8 xpos 1260 ypos 700 } Expression { temp_name0 dvalue temp_expr0 red temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression9 xpos 1226 ypos 774 } Dot { name Dot16 xpos 1260 ypos 889 } push $N5a6159e0 Expression { temp_name0 dvalue temp_expr0 "1 / red" temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression6 xpos 1072 ypos 774 } Dot { name Dot17 xpos 1106 ypos 863 } push $N5a613520 Expression { expr2 -blue name Expression7 label "fix z" xpos 894 ypos 774 } Dot { name Dot18 xpos 928 ypos 876 } push $N5a6112f0 Expression { temp_name0 nx temp_expr0 "red - cam_data.world_matrix.3" temp_name1 ny temp_expr1 "green - cam_data.world_matrix.7" temp_name2 nz temp_expr2 "blue - cam_data.world_matrix.11" expr0 "nx * \[value inverseMatrix.invMatrix.0] + ny * \[value inverseMatrix.invMatrix.1] + nz * \[value inverseMatrix.invMatrix.2]" expr1 "nx * \[value inverseMatrix.invMatrix.3] + ny * \[value inverseMatrix.invMatrix.4] + nz * \[value inverseMatrix.invMatrix.5]" expr2 "nx * \[value inverseMatrix.invMatrix.6] + ny * \[value inverseMatrix.invMatrix.7] + nz * \[value inverseMatrix.invMatrix.8]" name Expression3 label "position invert" xpos 724 ypos 774 } Switch { inputs 4 which {{parent.data_type}} name Switch1 xpos 724 ypos 984 } Dot { name Dot13 xpos 758 ypos 1113 } set N6a7cda20 [stack 0] Dot { name sam_dot xpos 551 ypos 1113 } NoOp { inputs 0 name menu1 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['uv_stabilize'].getValue() == 1 :\n thisGRP\['uv_ref_frame'].setEnabled(True)\n thisGRP\['uv_set_frame'].setEnabled(True)\n thisGRP\['black_outside'].setEnabled(True)\nelse :\n thisGRP\['uv_ref_frame'].setEnabled(False)\n thisGRP\['uv_set_frame'].setEnabled(False)\n thisGRP\['black_outside'].setEnabled(False)\n" xpos -1085 ypos -42 addUserKnob {20 User} addUserKnob {6 uv_stabilize l "uv stabilize" +STARTLINE} } NoOp { inputs 0 name menu2 onCreate "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nthisGRP\[fregion_knobs\[4]].setEnabled(True)\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n else :\n thisGRP\[i].setEnabled(False)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" knobChanged "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" xpos -1085 ypos 25 addUserKnob {20 User} addUserKnob {6 use_focus_region l "use focus region" +STARTLINE} } Camera { inputs 0 display off selectable false useMatrix true matrix { {{Camera5.world_matrix} {Camera5.world_matrix} {Camera5.world_matrix} {Camera5.world_matrix}} {{Camera5.world_matrix} {Camera5.world_matrix} {Camera5.world_matrix} {Camera5.world_matrix}} {{Camera5.world_matrix} {Camera5.world_matrix} {Camera5.world_matrix} {Camera5.world_matrix}} {{Camera5.world_matrix} {Camera5.world_matrix} {Camera5.world_matrix} {Camera5.world_matrix}} } focal {{parent.cam_focal}} haperture {{cam_haperture}} name cam_data xpos -335 ypos 2204 } push $N6a7cda20 Expression { temp_name0 unpremultA temp_expr0 "alpha * ( 1 / alpha )" temp_name1 max temp_expr1 blue expr3 "abs( max ) < \[value parent.drange_near] || abs( max ) > \[value parent.drange_far] ? 0 : isnan(unpremultA) ? 0 : unpremultA" name Expression1 label "distance crop" xpos 724 ypos 1244 } Premult { name Premult1 xpos 724 ypos 1332 } Dot { name Dot9 xpos 758 ypos 1640 } set N50059f30 [stack 0] push $N5a5ad900 Dot { name Dot10 xpos -66 ypos 1552 } set N5a5d2510 [stack 0] Unpremult { name Unpremult1 xpos 48 ypos 1549 } Merge2 { inputs 2 operation mask name Merge2 xpos 48 ypos 1637 } Premult { name Premult3 xpos 48 ypos 1719 } push $N5a5d2510 Switch { inputs 2 which {{parent.clip_color}} name Switch2 xpos -100 ypos 1828 } Project3D2 { inputs 2 crop {{parent.black_outside}} name Project3D2 xpos -100 ypos 2224 } push $N5a5afdc0 Dot { name Dot2 xpos 1576 ypos -84 } Shuffle { red black green black blue black alpha black name Shuffle1 label "\[value in]" xpos 1542 ypos 30 } Remove { name Remove1 xpos 1542 ypos 118 } Reformat { type scale black_outside true name Reformat1 xpos 1542 ypos 212 } Expression { temp_name0 xpos temp_expr0 "( ( x + 0.5 ) / input.width - 0.5) * \[value global_math.hratio] * abs( \[value parent.drange_far] )" temp_name1 ypos temp_expr1 "( ( y + 0.5 ) / input.height -0.5 ) * ( \[value global_math.hratio] * abs( \[value parent.drange_far] ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name2 zpos temp_expr2 "-\[value parent.drange_far]" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression8 xpos 1542 ypos 845 } ColorMatrix { matrix { {{cam_data.world_matrix.0} {cam_data.world_matrix.1} {cam_data.world_matrix.2}} {{cam_data.world_matrix.4} {cam_data.world_matrix.5} {cam_data.world_matrix.6}} {{cam_data.world_matrix.8} {cam_data.world_matrix.9} {cam_data.world_matrix.10}} } name ColorMatrix1 xpos 1542 ypos 970 } Add { channels rgb value {{cam_data.world_matrix.3} {cam_data.world_matrix.7} {cam_data.world_matrix.11} 0} name Add1 xpos 1542 ypos 1052 } Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop1 xpos 1542 ypos 1476 disable {{!parent.use_focus_region}} } Dot { name Dot4 xpos 1576 ypos 2402 } push $N50059f30 Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop4 selected true xpos 724 ypos 1714 disable {{!parent.use_focus_region}} } Unpremult { name Unpremult3 xpos 724 ypos 1851 } Expression { temp_name0 nx temp_expr0 red temp_name1 ny temp_expr1 green temp_name2 nz temp_expr2 blue expr0 "( nx * \[value cam_data.world_matrix.0] + ny * \[value cam_data.world_matrix.1] + nz * \[value cam_data.world_matrix.2] ) + \[value cam_data.world_matrix.3]" expr1 "( nx * \[value cam_data.world_matrix.4] + ny * \[value cam_data.world_matrix.5] + nz * \[value cam_data.world_matrix.6] ) + \[value cam_data.world_matrix.7]" expr2 "( nx * \[value cam_data.world_matrix.8] + ny * \[value cam_data.world_matrix.9] + nz * \[value cam_data.world_matrix.10] ) + \[value cam_data.world_matrix.11]" name Expression4 label "position revert" xpos 724 ypos 1933 } Premult { name Premult2 xpos 724 ypos 2027 } Merge2 { inputs 2 operation under name Merge1 xpos 724 ypos 2398 } Card { inputs 0 image_aspect false rows {{"img_dot.height * parent.lod"}} columns {{"img_dot.width * parent.lod"}} name ssmesh xpos 343 ypos 2317 } DisplaceGeo { inputs 2 source "rgb absolute" scale 1 filter_size 1 name DisplaceGeo xpos 343 ypos 2399 } FrameHold { first_frame {{parent.uv_ref_frame}} name FrameHold xpos 343 ypos 2479 disable {{!parent.uv_stabilize}} } ApplyMaterial { inputs 2 name ApplyMaterial1 xpos -100 ypos 2483 } Scene { display {{parent.display}} name gl_scene xpos -90 ypos 3072 } set N5a6c1bb0 [stack 0] WriteGeo { file_type abc name WriteGeo xpos 120 ypos 3093 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt2.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name right_pt xpos -600 ypos 3218 } CheckerBoard2 { inputs 0 format "256 256 0 0 256 256 1 square_256" name CheckerBoard1 xpos -789 ypos 2694 } Multiply { channels rgb value {{parent.crop_point_color.r} {parent.crop_point_color.g} {parent.crop_point_color.b} 1} name Multiply xpos -789 ypos 2822 } Clamp { channels rgba name Clamp1 xpos -789 ypos 2905 } Sphere { selectable false cast_shadow false receive_shadow false rows 10 columns 10 uniform_scale {{parent.crop_point_scale}} name Sphere1 xpos -789 ypos 2987 disable {{!show_crop}} } Dot { name Dot24 xpos -755 ypos 3065 } set N5a6dc200 [stack 0] Dot { name Dot25 xpos -456 ypos 3065 } TransformGeo { inputs 2 selectable false name TransformGeo2 xpos -490 ypos 3238 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt1.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name left_pt xpos -899 ypos 3220 } push $N5a6dc200 TransformGeo { inputs 2 selectable false name TransformGeo1 xpos -789 ypos 3240 } Scene { inputs 2 selectable false name Scene1 xpos -480 ypos 3395 } ApplyMaterial { display off selectable false render_mode off name material_switch xpos -490 ypos 3523 } push $N5a6c1bb0 Scene { inputs 2 name Scene2 xpos -90 ypos 3502 } Output { name Output1 xpos -100 ypos 4030 } Group { inputs 0 name inverseMatrix tile_color 0x337f4cff xpos 576 ypos 780 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path cam_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2011-11-28} addUserKnob {26 l_CHANGELOG l Changelog T "v1.0\n- reveal the calculate output of \n inverse matrix which is c44matrix\n and colormatrix doesn't show\n "} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group Camera { inputs 0 rotate {0 0 {-parent.cam_winroll}} win_translate {{parent.cam_win_translate} {parent.cam_win_translate}} win_scale {{parent.cam_win_scale} {parent.cam_win_scale}} name fb_data xpos -340 ypos 2087 } NoOp { inputs 0 name store xpos -843 ypos 28 addUserKnob {20 User} addUserKnob {22 fn T "### level define ###\n\ndef getLevel() :\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\tggLevel = nuke.root()\n\telse :\n\t\tnodePath = nuke.thisNode().fullName().split('.')\n\t\tnodePath.pop()\n\t\tggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\n### sample z in 2D ###\n\ndef sample2d() :\n\tthisGRP = nuke.thisGroup()\n\tif thisGRP\['sample_z_status'].value() == '\[ ON ]' :\n\t\tsam_co = thisGRP\['sample_point'].getValue()\n\t\tzdata = nuke.toNode('sam_dot').sample('blue', sam_co\[0], sam_co\[1]) * -1\n\t\tthisGRP\['fregion_define_z'].setValue( zdata )" +STARTLINE} addUserKnob {15 fregion} fregion {{parent.focus_region} {parent.focus_region} {parent.focus_region} {parent.focus_region}} } NoOp { inputs 0 name global_math xpos -842 ypos -43 addUserKnob {20 User} addUserKnob {7 hratio} hratio {{"cam_data.haperture / cam_data.focal"}} addUserKnob {7 maxwidth} maxwidth {{"hratio * parent.fregion_define_z"}} addUserKnob {7 maxheight} maxheight {{"hratio * parent.fregion_define_z * ( img_dot.height / img_dot.width )"}} addUserKnob {13 pt1} pt1 {{"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + \n( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} addUserKnob {13 pt2} pt2 {{"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} } end_group Camera2 { inputs 0 translate {-23.73355293 6.752248287 -3.158116341} rotate {30.63627052 -44.94124796 0} focal 24 name Camera5 xpos -993 ypos 999 } Scene { inputs 2 name Scene5 xpos -814 ypos 1141 } Dot { name Dot5 xpos -790 ypos 1328 } Group { inputs 0 name render_with_pworld2 xpos -119 ypos 837 postage_stamp true } Camera2 { inputs 0 translate {{curve x1 -23.73355293 x50 1.828465939 x100 10.79810143} {curve x1 6.752248287 x50 13.82691669 x100 25.23773003} {curve x1 -3.158116341 x50 5.475767136 x100 -12.79232216}} rotate {{curve x1 30.63627052 x50 14.22963619 x100 -23.22279344} {curve x1 -44.94124796 x50 19.70681696 x100 76.6501109} {curve x1 0 x50 27.42004885 x100 13.36756642}} focal 24 name Camera1 xpos 241 ypos -567 } Dot { name Dot2 xpos 351 ypos -543 } set N7ee71cb0 [stack 0] Dot { name Dot3 xpos 351 ypos -428 } push $N7ee71cb0 CheckerBoard2 { inputs 0 name CheckerBoard1 xpos 406 ypos -928 } Dot { name Dot1 xpos 440 ypos -814 } set N7ee7ab60 [stack 0] Dot { name Dot5 xpos 553 ypos -814 } set N7ee7cee0 [stack 0] Dot { name Dot4 xpos 693 ypos -814 } Multiply { channels rgb value {0 1 1 1} name Multiply3 xpos 659 ypos -756 } Cube { rows 1 columns 1 separate_faces false translate {-7.849998951 18.14999962 -19.00000191} rotate {0 0 45.93192592} uniform_scale 7 name Cube1 xpos 659 ypos -676 } push $N7ee7cee0 Multiply { channels rgb value {1 0 1 1} name Multiply2 xpos 519 ypos -750 } Sphere { translate {-15.00000191 16.45000076 -17.79999924} scaling {3.183291435 1 2.618715286} uniform_scale 2 name Sphere1 xpos 519 ypos -670 } push $N7ee7ab60 Multiply { channels rgb value {1 1 0 1} name Multiply1 xpos 406 ypos -754 } Cylinder { rows 1 close_top true close_bottom true translate {-3.149999619 19.64999962 -13.89999866} rotate {52.26493538 0 32.53306187} scaling {1 4.216488838 1} uniform_scale 2 name Cylinder1 xpos 406 ypos -673 } Scene { inputs 4 name Scene1 xpos 416 ypos -567 } Reformat { inputs 0 type "to box" box_width 1280 box_height 720 box_fixed true name Reformat1 xpos 530 ypos -431 } ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type off MB_channel none output_shader_vectors true P_channel pworld name ScanlineRender1 xpos 406 ypos -431 } Output { name Output1 xpos 406 ypos -331 } end_group Group { name SSMesh6 tile_color 0x5c9e83ff label "Geo Output" xpos -119 ypos 1004 addUserKnob {20 tab_general l General} addUserKnob {22 set_link l "link to selected camera" t "Click to link selected camera by expression. This tool will get the focal, haperture and world matrix from selected camera to generate" T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\n\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\ndefaultKnobs = \{\n\t\t\t'world matrix' : 'world_matrix',\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.focal'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.haperture'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.win_translate'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.win_scale'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.winroll'.format(CAMnode))\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']))\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']))\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']))\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']))\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window roll']))\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\n\nfor knob in thisGRP.knobs() :\n\tif mainKnobs.count(knob) != 0 :\n\t\t thisGRP\[knob].clearAnimated()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 cam_focal l "focal length" R 5 100} cam_focal {{Camera6.focal}} addUserKnob {7 cam_haperture l "horiz aperture" R 0.1 50} cam_haperture {{Camera6.haperture}} addUserKnob {30 cam_win_translate l "window translate"} cam_win_translate {{Camera6.win_translate} {Camera6.win_translate}} addUserKnob {30 cam_win_scale l "window scale"} cam_win_scale {{Camera6.win_scale} {Camera6.win_scale}} addUserKnob {7 cam_winroll l "window roll" R -45 45} cam_winroll {{Camera6.winroll}} addUserKnob {41 world_matrix l "world matrix" T cam_data.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 spacer_5 l "" +STARTLINE T
    } addUserKnob {26 title_basic l "BASIC SETTING"} addUserKnob {4 display l "3D display" t "How to draw in 3D preview. The viewer can override this setting." M {off wireframe soild solid+wireframe textured textured+wireframe "" "" ""}} display textured addUserKnob {4 data_type l "data type" t "data type\nUsing one of these data to convert into 3D mesh.\n\nPosition\nSupported world space or camera space position data.\n\nDepth (normalized far=0)\nNormalized depth data, which is same as depth data output by ScanlineRender.\n\nDeep / Depth (direct)\nRaw camera depth data. If using deep, need to convert DeepToImage first, and selected deep channel on 'channels' knob." M {"position (world space)" "position (camera space)" "depth (normalized far=0)" "deep / depth (direct)" "" "" ""}} addUserKnob {41 channels t "Select which channel represented on selected data type." T shuffle_data.in} addUserKnob {6 unpm l unpremult t "3D data pass should be unpremult with alpha before process." -STARTLINE} unpm true addUserKnob {26 spacer_4 l "" +STARTLINE T
    } addUserKnob {7 lod l "mesh LOD" t "Level of Details\n\nIf this value set to 1.0, subdivision of the mesh 1:1 to the data available in the resolution. Which mean 1 face of the mesh equal to 1 pixel.\n\nIf this value set to 1.0, it will slow down the render process.\n\nHighly recommend to use 0.1 - 0.5 if high resolution mesh details is not concern."} lod 0.1 addUserKnob {41 filter_size l "filter size" T DisplaceGeo.filter_size} addUserKnob {41 filter T DisplaceGeo.filter} addUserKnob {26 spacer_2 l "" +STARTLINE T
    } addUserKnob {26 title_drange l "" +STARTLINE T "distance range"} addUserKnob {7 drange_near l near t "clip the mesh in the min value in terms of depth." R 0 10000} drange_near 14 addUserKnob {7 drange_far l far t "clip the mesh in the max value in terms of depth." R 0 10000} drange_far 17 addUserKnob {6 clip_color l "distance clip on color" t "Apply the distance clip on colored texture." +STARTLINE} addUserKnob {26 spacer_3 l "" +STARTLINE T
    } addUserKnob {26 title_export l EXPORT} addUserKnob {41 file t "only support *.abc file extension (alembric) ." T WriteGeo.file} addUserKnob {22 export_geo l "Export Geo" T "def exportGeo() :\n\twgeo = nuke.toNode('WriteGeo')\n\twgeo\['Execute'].execute()\n\nthisGRP = nuke.thisGroup()\nfilepath = thisGRP\['file'].getValue()\n\nif not len(filepath) :\n\tnuke.message('file path is empty. Process denied.')\nelif not filepath.split('.')\[-1:]\[0].lower() == 'abc' :\n\tif nuke.ask('File extension invalue. Only support render *.abc . Do you want this tool to fix it and process ?') :\n\t\tthisGRP\['file'].setValue( thisGRP\['file'].getValue() + '.abc' )\n\t\texportGeo()\nelse :\n\texportGeo()" +STARTLINE} addUserKnob {22 import_geo l "Import Geo" -STARTLINE T "prefx = nuke.toNode('preferences')\['GridWidth'].value()\nthisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\nroot = getLevel()\n\nwith root :\n\trgeo = nuke.nodes.ReadGeo2( file=thisGRP\['file'].getValue() )\n\trgeo.setXYpos( int( thisGRP\['xpos'].getValue() + prefx ) , int( thisGRP\['ypos'].getValue() ) )"} addUserKnob {20 tab_misc l Miscellaneous} addUserKnob {26 title_focus_region l "FOCUS REGION"} addUserKnob {41 use_focus_region l "use focus region" t "use focus region to generate SSMesh in specific area. Save resources and possible to work with high LOD mesh." T menu2.use_focus_region} addUserKnob {15 focus_region l "focus region" t "Set focus region in screen space. These values are 2D coordinate." +DISABLED} focus_region {0 0 1280 720} addUserKnob {26 spacer_1 l "" +STARTLINE T
    } addUserKnob {3 fregion_ref_frame l "ref frame" t "set reference frame for tracking focus region. 'focus region' & 'define z' will apply on this reference frame and process the tracking." +DISABLED} fregion_ref_frame 1 addUserKnob {22 fregion_set_frame l "set current frame" t "set current frame for focus region reference frame." -STARTLINE +DISABLED T "nuke.thisGroup()\['fregion_ref_frame'].setValue( nuke.frame() )"} addUserKnob {12 sample_point l "sample position" t "Toggle 'sample z' in 2D to enable this 2D sample coordinate." +DISABLED} addUserKnob {22 sample_z_toggle l "sample z in 2D" t "'sample z' is only works for sample value purpose. After sample is done, must turn off sample function." -STARTLINE +DISABLED T "thisGRP = nuke.thisGroup()\nszstatus = thisGRP\['sample_z_status'].value()\n\nstatus = \['\[ OFF ]','\[ ON ]']\n\nif szstatus == status\[0] :\n\tthisGRP\['sample_z_status'].setValue( status\[1] )\n\tthisGRP\['sample_point'].setEnabled(True)\n\tthisGRP\['updateUI'].setValue(\"goStore = nuke.toNode(\\'store\\')\\ngoStore\[\\'fn\\'].execute()\\nsample2d()\")\nelse :\n\tthisGRP\['sample_z_status'].setValue( status\[0] )\n\tthisGRP\['sample_point'].setEnabled(False)\n\tthisGRP\['updateUI'].setValue('')"} addUserKnob {26 sample_z_status l "" -STARTLINE +DISABLED T "\[ OFF ]"} addUserKnob {7 fregion_define_z l "define z" t "Define the z value on reference frame. Can use 'sample z in 2D' to get this value." +DISABLED R 0 10000} addUserKnob {22 track_focus_region l "\[ track focus region ]" t "Use the set focus region on reference frame to track with camera in 3D space.\n\n* project setting need to be same as image resolution to get the correct result." +DISABLED T "rootST = int( nuke.root()\['first_frame'].getValue() )\nrootED = int( nuke.root()\['last_frame'].getValue() )\n\ngetFrame = nuke.getFramesAndViews( 'frame range', str( rootST ) + '-' + str( rootED ) )\n\ntry :\n\tframeST = int( getFrame\[0].replace( ' ' , '' ).split('-')\[0] )\n\tframeED = int( getFrame\[0].replace( ' ' , '' ).split('-')\[1] )\n\n\tthisGRP = nuke.thisGroup()\n\trefframe = int( thisGRP\['fregion_ref_frame'].getValue() )\n\tcam = nuke.toNode('cam_data')\n\tpt1 = nuke.toNode('left_pt')\['translate'].getValue()\n\tpt2 = nuke.toNode('right_pt')\['translate'].getValue()\n\n\tct_hack = nuke.nodes.CurveTool()\n\n\twith nuke.root() :\n\n\t\tif frameED - frameST != 0 :\n\t\t\tthisGRP\['focus_region'].clearAnimated()\n\t\t\ttempbuffer1 = thisGRP\['focus_region'].getValue()\n\t\t\tthisGRP\['focus_region'].setAnimated()\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[0] , refframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[1] , refframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[2] , refframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[3] , refframe , 3 )\n\n\t\tfor trackframe in range( frameST, frameED+1 , 1 ) :\n\t\t\tnuke.execute( ct_hack, trackframe, trackframe )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[0] , trackframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[1] , trackframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[0] , trackframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[1] , trackframe , 3 )\n\n\tnuke.delete( ct_hack )\nexcept :\n pass" +STARTLINE} addUserKnob {26 spacer_6 l "" +STARTLINE T
    } addUserKnob {20 grp_crop_preview l "3D crop preview" +DISABLED n 1} grp_crop_preview 0 addUserKnob {6 show_crop l "show crop point" t "It will show 2 spheres for the crop in 3D space. They set in the place which is where you set the focus region in screen space and defined by z." +DISABLED +STARTLINE} addUserKnob {7 crop_point_scale l scale t "Scale the preview crop points (spheres)." +DISABLED} crop_point_scale 0.3 addUserKnob {18 crop_point_color l color t "change color of the crop points (spheres)." +DISABLED} crop_point_color 1 addUserKnob {6 crop_point_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup n -1} addUserKnob {26 spacer l "" +STARTLINE T
    } addUserKnob {26 title_uv l UV} addUserKnob {41 uv_stabilize l "uv stabilize" t "Turn this on if you need to stabilize in UV space. During UV stabilize on, the geo will not be animated. Set reference frame under 'mesh ref frame'." T menu1.uv_stabilize} addUserKnob {3 uv_ref_frame l "mesh ref frame" t "Select the frame number that will have identity geo shaped for UV texturing." +DISABLED} uv_ref_frame 1001 addUserKnob {22 uv_set_frame l "set current frame" -STARTLINE +DISABLED T "nuke.thisGroup()\['uv_ref_frame'].setValue( nuke.frame() )"} addUserKnob {6 black_outside l "black outside" t "black outside the UV texture." +DISABLED +STARTLINE} black_outside true addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.3} addUserKnob {26 l_DATE l "Date Modified" T 2019-11-08} addUserKnob {26 l_CHANGELOG l Changelog T "1.3\n- camera window supported\n- anamophic project supported\n- fix the conflict of 'force region' and 'UV stabilize'.\n can use both at the same time now.\n\n1.2\n- removed unuse camera link knobs\n- added focus region, so mesh can be\n form in specific area/object to save\n resources for higher LOD\n\n1.1\n- fix the missing line on 'Export Geo' \n button\n\n1.0\n- create mesh/geo in screen space\n using position/depth/deep data"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "don't touch" note_font_size 32 xpos -1142 ypos -169 bdwidth 202 bdheight 478 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x4c4c4cff label bin note_font_size 32 xpos -899 ypos -170 bdwidth 200 bdheight 280 } Input { inputs 0 name img xpos -100 ypos -184 } Dot { name img_dot xpos -66 ypos -83 } set N82af5df0 [stack 0] Dot { name Dot3 xpos 758 ypos -83 } set N5a449eb0 [stack 0] Shuffle { in pworld in2 alpha alpha red2 name shuffle_data label "\[value in]" xpos 724 ypos -32 } Unpremult { name Unpremult_data xpos 724 ypos 62 disable {{!parent.unpm}} } Dot { name Dot5 xpos 758 ypos 700 } set N4a722520 [stack 0] Dot { name Dot6 xpos 928 ypos 700 } set N5a74dc00 [stack 0] Dot { name Dot7 xpos 1106 ypos 700 } set N4a753940 [stack 0] Dot { name Dot8 xpos 1260 ypos 700 } Expression { temp_name0 dvalue temp_expr0 red temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression9 xpos 1226 ypos 774 } Dot { name Dot16 xpos 1260 ypos 889 } push $N4a753940 Expression { temp_name0 dvalue temp_expr0 "1 / red" temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression6 xpos 1072 ypos 774 } Dot { name Dot17 xpos 1106 ypos 863 } push $N5a74dc00 Expression { expr2 -blue name Expression7 label "fix z" xpos 894 ypos 774 } Dot { name Dot18 xpos 928 ypos 876 } push $N4a722520 Expression { temp_name0 nx temp_expr0 "red - cam_data.world_matrix.3" temp_name1 ny temp_expr1 "green - cam_data.world_matrix.7" temp_name2 nz temp_expr2 "blue - cam_data.world_matrix.11" expr0 "nx * \[value inverseMatrix.invMatrix.0] + ny * \[value inverseMatrix.invMatrix.1] + nz * \[value inverseMatrix.invMatrix.2]" expr1 "nx * \[value inverseMatrix.invMatrix.3] + ny * \[value inverseMatrix.invMatrix.4] + nz * \[value inverseMatrix.invMatrix.5]" expr2 "nx * \[value inverseMatrix.invMatrix.6] + ny * \[value inverseMatrix.invMatrix.7] + nz * \[value inverseMatrix.invMatrix.8]" name Expression3 label "position invert" xpos 724 ypos 774 } Switch { inputs 4 which {{parent.data_type}} name Switch1 xpos 724 ypos 984 } Dot { name Dot13 xpos 758 ypos 1113 } set N50100680 [stack 0] Dot { name sam_dot xpos 551 ypos 1113 } NoOp { inputs 0 name menu1 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['uv_stabilize'].getValue() == 1 :\n thisGRP\['uv_ref_frame'].setEnabled(True)\n thisGRP\['uv_set_frame'].setEnabled(True)\n thisGRP\['black_outside'].setEnabled(True)\nelse :\n thisGRP\['uv_ref_frame'].setEnabled(False)\n thisGRP\['uv_set_frame'].setEnabled(False)\n thisGRP\['black_outside'].setEnabled(False)\n" xpos -1085 ypos -42 addUserKnob {20 User} addUserKnob {6 uv_stabilize l "uv stabilize" +STARTLINE} } NoOp { inputs 0 name menu2 onCreate "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nthisGRP\[fregion_knobs\[4]].setEnabled(True)\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n else :\n thisGRP\[i].setEnabled(False)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" knobChanged "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" xpos -1085 ypos 25 addUserKnob {20 User} addUserKnob {6 use_focus_region l "use focus region" +STARTLINE} } Camera { inputs 0 display off selectable false useMatrix true matrix { {{Camera6.world_matrix} {Camera6.world_matrix} {Camera6.world_matrix} {Camera6.world_matrix}} {{Camera6.world_matrix} {Camera6.world_matrix} {Camera6.world_matrix} {Camera6.world_matrix}} {{Camera6.world_matrix} {Camera6.world_matrix} {Camera6.world_matrix} {Camera6.world_matrix}} {{Camera6.world_matrix} {Camera6.world_matrix} {Camera6.world_matrix} {Camera6.world_matrix}} } focal {{parent.cam_focal}} haperture {{cam_haperture}} name cam_data xpos -335 ypos 2204 } push $N50100680 Expression { temp_name0 unpremultA temp_expr0 "alpha * ( 1 / alpha )" temp_name1 max temp_expr1 blue expr3 "abs( max ) < \[value parent.drange_near] || abs( max ) > \[value parent.drange_far] ? 0 : isnan(unpremultA) ? 0 : unpremultA" name Expression1 label "distance crop" xpos 724 ypos 1244 } Premult { name Premult1 xpos 724 ypos 1332 } Dot { name Dot9 xpos 758 ypos 1640 } set N50018fb0 [stack 0] push $N82af5df0 Dot { name Dot10 xpos -66 ypos 1552 } set N6a0cc380 [stack 0] Unpremult { name Unpremult1 xpos 48 ypos 1549 } Merge2 { inputs 2 operation mask name Merge2 xpos 48 ypos 1637 } Premult { name Premult3 xpos 48 ypos 1719 } push $N6a0cc380 Switch { inputs 2 which {{parent.clip_color}} name Switch2 xpos -100 ypos 1828 } Project3D2 { inputs 2 crop {{parent.black_outside}} name Project3D2 xpos -100 ypos 2224 } push $N5a449eb0 Dot { name Dot2 xpos 1576 ypos -84 } Shuffle { red black green black blue black alpha black name Shuffle1 label "\[value in]" xpos 1542 ypos 30 } Remove { name Remove1 xpos 1542 ypos 118 } Reformat { type scale black_outside true name Reformat1 xpos 1542 ypos 212 } Expression { temp_name0 xpos temp_expr0 "( ( x + 0.5 ) / input.width - 0.5) * \[value global_math.hratio] * abs( \[value parent.drange_far] )" temp_name1 ypos temp_expr1 "( ( y + 0.5 ) / input.height -0.5 ) * ( \[value global_math.hratio] * abs( \[value parent.drange_far] ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name2 zpos temp_expr2 "-\[value parent.drange_far]" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression8 xpos 1542 ypos 845 } ColorMatrix { matrix { {{cam_data.world_matrix.0} {cam_data.world_matrix.1} {cam_data.world_matrix.2}} {{cam_data.world_matrix.4} {cam_data.world_matrix.5} {cam_data.world_matrix.6}} {{cam_data.world_matrix.8} {cam_data.world_matrix.9} {cam_data.world_matrix.10}} } name ColorMatrix1 xpos 1542 ypos 970 } Add { channels rgb value {{cam_data.world_matrix.3} {cam_data.world_matrix.7} {cam_data.world_matrix.11} 0} name Add1 xpos 1542 ypos 1052 } Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop1 xpos 1542 ypos 1476 disable {{!parent.use_focus_region}} } Dot { name Dot4 xpos 1576 ypos 2402 } push $N50018fb0 Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop4 selected true xpos 724 ypos 1714 disable {{!parent.use_focus_region}} } Unpremult { name Unpremult3 xpos 724 ypos 1851 } Expression { temp_name0 nx temp_expr0 red temp_name1 ny temp_expr1 green temp_name2 nz temp_expr2 blue expr0 "( nx * \[value cam_data.world_matrix.0] + ny * \[value cam_data.world_matrix.1] + nz * \[value cam_data.world_matrix.2] ) + \[value cam_data.world_matrix.3]" expr1 "( nx * \[value cam_data.world_matrix.4] + ny * \[value cam_data.world_matrix.5] + nz * \[value cam_data.world_matrix.6] ) + \[value cam_data.world_matrix.7]" expr2 "( nx * \[value cam_data.world_matrix.8] + ny * \[value cam_data.world_matrix.9] + nz * \[value cam_data.world_matrix.10] ) + \[value cam_data.world_matrix.11]" name Expression4 label "position revert" xpos 724 ypos 1933 } Premult { name Premult2 xpos 724 ypos 2027 } Merge2 { inputs 2 operation under name Merge1 xpos 724 ypos 2398 } Card { inputs 0 image_aspect false rows {{"img_dot.height * parent.lod"}} columns {{"img_dot.width * parent.lod"}} name ssmesh xpos 343 ypos 2317 } DisplaceGeo { inputs 2 source "rgb absolute" scale 1 filter_size 1 name DisplaceGeo xpos 343 ypos 2399 } FrameHold { first_frame {{parent.uv_ref_frame}} name FrameHold xpos 343 ypos 2479 disable {{!parent.uv_stabilize}} } ApplyMaterial { inputs 2 name ApplyMaterial1 xpos -100 ypos 2483 } Scene { display {{parent.display}} name gl_scene xpos -90 ypos 3072 } set N500a2570 [stack 0] WriteGeo { file_type abc name WriteGeo xpos 120 ypos 3093 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt2.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name right_pt xpos -600 ypos 3218 } CheckerBoard2 { inputs 0 format "256 256 0 0 256 256 1 square_256" name CheckerBoard1 xpos -789 ypos 2694 } Multiply { channels rgb value {{parent.crop_point_color.r} {parent.crop_point_color.g} {parent.crop_point_color.b} 1} name Multiply xpos -789 ypos 2822 } Clamp { channels rgba name Clamp1 xpos -789 ypos 2905 } Sphere { selectable false cast_shadow false receive_shadow false rows 10 columns 10 uniform_scale {{parent.crop_point_scale}} name Sphere1 xpos -789 ypos 2987 disable {{!show_crop}} } Dot { name Dot24 xpos -755 ypos 3065 } set N500cbae0 [stack 0] Dot { name Dot25 xpos -456 ypos 3065 } TransformGeo { inputs 2 selectable false name TransformGeo2 xpos -490 ypos 3238 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt1.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name left_pt xpos -899 ypos 3220 } push $N500cbae0 TransformGeo { inputs 2 selectable false name TransformGeo1 xpos -789 ypos 3240 } Scene { inputs 2 selectable false name Scene1 xpos -480 ypos 3395 } ApplyMaterial { display off selectable false render_mode off name material_switch xpos -490 ypos 3523 } push $N500a2570 Scene { inputs 2 name Scene2 xpos -90 ypos 3502 } Output { name Output1 xpos -100 ypos 4030 } Group { inputs 0 name inverseMatrix tile_color 0x337f4cff xpos 576 ypos 780 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path cam_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2011-11-28} addUserKnob {26 l_CHANGELOG l Changelog T "v1.0\n- reveal the calculate output of \n inverse matrix which is c44matrix\n and colormatrix doesn't show\n "} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group Camera { inputs 0 rotate {0 0 {-parent.cam_winroll}} win_translate {{parent.cam_win_translate} {parent.cam_win_translate}} win_scale {{parent.cam_win_scale} {parent.cam_win_scale}} name fb_data xpos -340 ypos 2087 } NoOp { inputs 0 name store xpos -843 ypos 28 addUserKnob {20 User} addUserKnob {22 fn T "### level define ###\n\ndef getLevel() :\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\tggLevel = nuke.root()\n\telse :\n\t\tnodePath = nuke.thisNode().fullName().split('.')\n\t\tnodePath.pop()\n\t\tggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\n### sample z in 2D ###\n\ndef sample2d() :\n\tthisGRP = nuke.thisGroup()\n\tif thisGRP\['sample_z_status'].value() == '\[ ON ]' :\n\t\tsam_co = thisGRP\['sample_point'].getValue()\n\t\tzdata = nuke.toNode('sam_dot').sample('blue', sam_co\[0], sam_co\[1]) * -1\n\t\tthisGRP\['fregion_define_z'].setValue( zdata )" +STARTLINE} addUserKnob {15 fregion} fregion {{parent.focus_region} {parent.focus_region} {parent.focus_region} {parent.focus_region}} } NoOp { inputs 0 name global_math xpos -842 ypos -43 addUserKnob {20 User} addUserKnob {7 hratio} hratio {{"cam_data.haperture / cam_data.focal"}} addUserKnob {7 maxwidth} maxwidth {{"hratio * parent.fregion_define_z"}} addUserKnob {7 maxheight} maxheight {{"hratio * parent.fregion_define_z * ( img_dot.height / img_dot.width )"}} addUserKnob {13 pt1} pt1 {{"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + \n( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} addUserKnob {13 pt2} pt2 {{"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} } end_group Camera2 { inputs 0 translate {-23.73355293 6.752248287 -3.158116341} rotate {30.63627052 -44.94124796 0} focal 24 name Camera6 xpos -291 ypos 999 } Scene { inputs 2 name Scene6 xpos -109 ypos 1142 } Dot { name Dot6 xpos -85 ypos 1329 } Camera2 { inputs 0 translate {{curve x1 -23.73355293 x50 1.828465939 x100 10.79810143} {curve x1 6.752248287 x50 13.82691669 x100 25.23773003} {curve x1 -3.158116341 x50 5.475767136 x100 -12.79232216}} rotate {{curve x1 30.63627052 x50 14.22963619 x100 -23.22279344} {curve x1 -44.94124796 x50 19.70681696 x100 76.6501109} {curve x1 0 x50 27.42004885 x100 13.36756642}} focal 24 name Camera7 xpos -1083 ypos 2091 } Dot { name Dot7 xpos -1059 ypos 2798 } Group { inputs 0 name render_with_pworld3 xpos -400 ypos 1992 postage_stamp true } Camera2 { inputs 0 translate {{curve x1 -23.73355293 x50 1.828465939 x100 10.79810143} {curve x1 6.752248287 x50 13.82691669 x100 25.23773003} {curve x1 -3.158116341 x50 5.475767136 x100 -12.79232216}} rotate {{curve x1 30.63627052 x50 14.22963619 x100 -23.22279344} {curve x1 -44.94124796 x50 19.70681696 x100 76.6501109} {curve x1 0 x50 27.42004885 x100 13.36756642}} focal 24 name Camera1 selected true xpos 241 ypos -567 } Dot { name Dot2 xpos 351 ypos -543 } set N829b9130 [stack 0] Dot { name Dot3 xpos 351 ypos -428 } push $N829b9130 CheckerBoard2 { inputs 0 name CheckerBoard1 xpos 406 ypos -928 } Dot { name Dot1 xpos 440 ypos -814 } set N829c1fe0 [stack 0] Dot { name Dot5 xpos 553 ypos -814 } set N829c4360 [stack 0] Dot { name Dot4 xpos 693 ypos -814 } Multiply { channels rgb value {0 1 1 1} name Multiply3 xpos 659 ypos -756 } Cube { rows 1 columns 1 separate_faces false translate {-7.849998951 18.14999962 -19.00000191} rotate {0 0 45.93192592} uniform_scale 7 name Cube1 xpos 659 ypos -676 } push $N829c4360 Multiply { channels rgb value {1 0 1 1} name Multiply2 xpos 519 ypos -750 } Sphere { translate {-15.00000191 16.45000076 -17.79999924} scaling {3.183291435 1 2.618715286} uniform_scale 2 name Sphere1 xpos 519 ypos -670 } push $N829c1fe0 Multiply { channels rgb value {1 1 0 1} name Multiply1 xpos 406 ypos -754 } Cylinder { rows 1 close_top true close_bottom true translate {-3.149999619 19.64999962 -13.89999866} rotate {52.26493538 0 32.53306187} scaling {1 4.216488838 1} uniform_scale 2 name Cylinder1 xpos 406 ypos -673 } Scene { inputs 4 name Scene1 xpos 416 ypos -567 } Reformat { inputs 0 type "to box" box_width 1280 box_height 720 box_fixed true name Reformat1 xpos 530 ypos -431 } ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type off MB_channel none output_shader_vectors true P_channel pworld name ScanlineRender1 xpos 406 ypos -431 } Output { name Output1 xpos 406 ypos -331 } end_group Dot { name Dot14 xpos -366 ypos 2120 } set N82b0bfa0 [stack 0] Group { name SSMesh5 tile_color 0x5c9e83ff label "Geo Output" xpos -992 ypos 2103 addUserKnob {20 tab_general l General} addUserKnob {22 set_link l "link to selected camera" t "Click to link selected camera by expression. This tool will get the focal, haperture and world matrix from selected camera to generate" T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\n\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\ndefaultKnobs = \{\n\t\t\t'world matrix' : 'world_matrix',\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.focal'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.haperture'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.win_translate'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.win_scale'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.winroll'.format(CAMnode))\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']))\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']))\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']))\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']))\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window roll']))\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\n\nfor knob in thisGRP.knobs() :\n\tif mainKnobs.count(knob) != 0 :\n\t\t thisGRP\[knob].clearAnimated()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 cam_focal l "focal length" R 5 100} cam_focal {{Camera7.focal}} addUserKnob {7 cam_haperture l "horiz aperture" R 0.1 50} cam_haperture {{Camera7.haperture}} addUserKnob {30 cam_win_translate l "window translate"} cam_win_translate {{Camera7.win_translate} {Camera7.win_translate}} addUserKnob {30 cam_win_scale l "window scale"} cam_win_scale {{Camera7.win_scale} {Camera7.win_scale}} addUserKnob {7 cam_winroll l "window roll" R -45 45} cam_winroll {{Camera7.winroll}} addUserKnob {41 world_matrix l "world matrix" T cam_data.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 spacer_5 l "" +STARTLINE T
    } addUserKnob {26 title_basic l "BASIC SETTING"} addUserKnob {4 display l "3D display" t "How to draw in 3D preview. The viewer can override this setting." M {off wireframe soild solid+wireframe textured textured+wireframe "" "" ""}} display textured addUserKnob {4 data_type l "data type" t "data type\nUsing one of these data to convert into 3D mesh.\n\nPosition\nSupported world space or camera space position data.\n\nDepth (normalized far=0)\nNormalized depth data, which is same as depth data output by ScanlineRender.\n\nDeep / Depth (direct)\nRaw camera depth data. If using deep, need to convert DeepToImage first, and selected deep channel on 'channels' knob." M {"position (world space)" "position (camera space)" "depth (normalized far=0)" "deep / depth (direct)" "" "" ""}} addUserKnob {41 channels t "Select which channel represented on selected data type." T shuffle_data.in} addUserKnob {6 unpm l unpremult t "3D data pass should be unpremult with alpha before process." -STARTLINE} unpm true addUserKnob {26 spacer_4 l "" +STARTLINE T
    } addUserKnob {7 lod l "mesh LOD" t "Level of Details\n\nIf this value set to 1.0, subdivision of the mesh 1:1 to the data available in the resolution. Which mean 1 face of the mesh equal to 1 pixel.\n\nIf this value set to 1.0, it will slow down the render process.\n\nHighly recommend to use 0.1 - 0.5 if high resolution mesh details is not concern."} lod 0.5 addUserKnob {41 filter_size l "filter size" T DisplaceGeo.filter_size} addUserKnob {41 filter T DisplaceGeo.filter} addUserKnob {26 spacer_2 l "" +STARTLINE T
    } addUserKnob {26 title_drange l "" +STARTLINE T "distance range"} addUserKnob {7 drange_near l near t "clip the mesh in the min value in terms of depth." R 0 10000} addUserKnob {7 drange_far l far t "clip the mesh in the max value in terms of depth." R 0 10000} drange_far 30 addUserKnob {6 clip_color l "distance clip on color" t "Apply the distance clip on colored texture." +STARTLINE} clip_color true addUserKnob {26 spacer_3 l "" +STARTLINE T
    } addUserKnob {26 title_export l EXPORT} addUserKnob {41 file t "only support *.abc file extension (alembric) ." T WriteGeo.file} addUserKnob {22 export_geo l "Export Geo" T "def exportGeo() :\n\twgeo = nuke.toNode('WriteGeo')\n\twgeo\['Execute'].execute()\n\nthisGRP = nuke.thisGroup()\nfilepath = thisGRP\['file'].getValue()\n\nif not len(filepath) :\n\tnuke.message('file path is empty. Process denied.')\nelif not filepath.split('.')\[-1:]\[0].lower() == 'abc' :\n\tif nuke.ask('File extension invalue. Only support render *.abc . Do you want this tool to fix it and process ?') :\n\t\tthisGRP\['file'].setValue( thisGRP\['file'].getValue() + '.abc' )\n\t\texportGeo()\nelse :\n\texportGeo()" +STARTLINE} addUserKnob {22 import_geo l "Import Geo" -STARTLINE T "prefx = nuke.toNode('preferences')\['GridWidth'].value()\nthisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\nroot = getLevel()\n\nwith root :\n\trgeo = nuke.nodes.ReadGeo2( file=thisGRP\['file'].getValue() )\n\trgeo.setXYpos( int( thisGRP\['xpos'].getValue() + prefx ) , int( thisGRP\['ypos'].getValue() ) )"} addUserKnob {20 tab_misc l Miscellaneous} addUserKnob {26 title_focus_region l "FOCUS REGION"} addUserKnob {41 use_focus_region l "use focus region" t "use focus region to generate SSMesh in specific area. Save resources and possible to work with high LOD mesh." T menu2.use_focus_region} addUserKnob {15 focus_region l "focus region" t "Set focus region in screen space. These values are 2D coordinate." +DISABLED} focus_region {0 0 1280 720} addUserKnob {26 spacer_1 l "" +STARTLINE T
    } addUserKnob {3 fregion_ref_frame l "ref frame" t "set reference frame for tracking focus region. 'focus region' & 'define z' will apply on this reference frame and process the tracking." +DISABLED} fregion_ref_frame 1 addUserKnob {22 fregion_set_frame l "set current frame" t "set current frame for focus region reference frame." -STARTLINE +DISABLED T "nuke.thisGroup()\['fregion_ref_frame'].setValue( nuke.frame() )"} addUserKnob {12 sample_point l "sample position" t "Toggle 'sample z' in 2D to enable this 2D sample coordinate." +DISABLED} addUserKnob {22 sample_z_toggle l "sample z in 2D" t "'sample z' is only works for sample value purpose. After sample is done, must turn off sample function." -STARTLINE +DISABLED T "thisGRP = nuke.thisGroup()\nszstatus = thisGRP\['sample_z_status'].value()\n\nstatus = \['\[ OFF ]','\[ ON ]']\n\nif szstatus == status\[0] :\n\tthisGRP\['sample_z_status'].setValue( status\[1] )\n\tthisGRP\['sample_point'].setEnabled(True)\n\tthisGRP\['updateUI'].setValue(\"goStore = nuke.toNode(\\'store\\')\\ngoStore\[\\'fn\\'].execute()\\nsample2d()\")\nelse :\n\tthisGRP\['sample_z_status'].setValue( status\[0] )\n\tthisGRP\['sample_point'].setEnabled(False)\n\tthisGRP\['updateUI'].setValue('')"} addUserKnob {26 sample_z_status l "" -STARTLINE +DISABLED T "\[ OFF ]"} addUserKnob {7 fregion_define_z l "define z" t "Define the z value on reference frame. Can use 'sample z in 2D' to get this value." +DISABLED R 0 10000} addUserKnob {22 track_focus_region l "\[ track focus region ]" t "Use the set focus region on reference frame to track with camera in 3D space.\n\n* project setting need to be same as image resolution to get the correct result." +DISABLED T "rootST = int( nuke.root()\['first_frame'].getValue() )\nrootED = int( nuke.root()\['last_frame'].getValue() )\n\ngetFrame = nuke.getFramesAndViews( 'frame range', str( rootST ) + '-' + str( rootED ) )\n\ntry :\n\tframeST = int( getFrame\[0].replace( ' ' , '' ).split('-')\[0] )\n\tframeED = int( getFrame\[0].replace( ' ' , '' ).split('-')\[1] )\n\n\tthisGRP = nuke.thisGroup()\n\trefframe = int( thisGRP\['fregion_ref_frame'].getValue() )\n\tcam = nuke.toNode('cam_data')\n\tpt1 = nuke.toNode('left_pt')\['translate'].getValue()\n\tpt2 = nuke.toNode('right_pt')\['translate'].getValue()\n\n\tct_hack = nuke.nodes.CurveTool()\n\n\twith nuke.root() :\n\n\t\tif frameED - frameST != 0 :\n\t\t\tthisGRP\['focus_region'].clearAnimated()\n\t\t\ttempbuffer1 = thisGRP\['focus_region'].getValue()\n\t\t\tthisGRP\['focus_region'].setAnimated()\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[0] , refframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[1] , refframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[2] , refframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[3] , refframe , 3 )\n\n\t\tfor trackframe in range( frameST, frameED+1 , 1 ) :\n\t\t\tnuke.execute( ct_hack, trackframe, trackframe )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[0] , trackframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[1] , trackframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[0] , trackframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[1] , trackframe , 3 )\n\n\tnuke.delete( ct_hack )\nexcept :\n pass" +STARTLINE} addUserKnob {26 spacer_6 l "" +STARTLINE T
    } addUserKnob {20 grp_crop_preview l "3D crop preview" +DISABLED n 1} grp_crop_preview 0 addUserKnob {6 show_crop l "show crop point" t "It will show 2 spheres for the crop in 3D space. They set in the place which is where you set the focus region in screen space and defined by z." +DISABLED +STARTLINE} addUserKnob {7 crop_point_scale l scale t "Scale the preview crop points (spheres)." +DISABLED} crop_point_scale 0.3 addUserKnob {18 crop_point_color l color t "change color of the crop points (spheres)." +DISABLED} crop_point_color 1 addUserKnob {6 crop_point_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup n -1} addUserKnob {26 spacer l "" +STARTLINE T
    } addUserKnob {26 title_uv l UV} addUserKnob {41 uv_stabilize l "uv stabilize" t "Turn this on if you need to stabilize in UV space. During UV stabilize on, the geo will not be animated. Set reference frame under 'mesh ref frame'." T menu1.uv_stabilize} addUserKnob {3 uv_ref_frame l "mesh ref frame" t "Select the frame number that will have identity geo shaped for UV texturing."} uv_ref_frame 64 addUserKnob {22 uv_set_frame l "set current frame" -STARTLINE T "nuke.thisGroup()\['uv_ref_frame'].setValue( nuke.frame() )"} addUserKnob {6 black_outside l "black outside" t "black outside the UV texture." +STARTLINE} black_outside true addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.3} addUserKnob {26 l_DATE l "Date Modified" T 2019-11-08} addUserKnob {26 l_CHANGELOG l Changelog T "1.3\n- camera window supported\n- anamophic project supported\n- fix the conflict of 'force region' and 'UV stabilize'.\n can use both at the same time now.\n\n1.2\n- removed unuse camera link knobs\n- added focus region, so mesh can be\n form in specific area/object to save\n resources for higher LOD\n\n1.1\n- fix the missing line on 'Export Geo' \n button\n\n1.0\n- create mesh/geo in screen space\n using position/depth/deep data"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "don't touch" note_font_size 32 xpos -1142 ypos -169 bdwidth 202 bdheight 478 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x4c4c4cff label bin note_font_size 32 xpos -899 ypos -170 bdwidth 200 bdheight 280 } Input { inputs 0 name img xpos -100 ypos -184 } Dot { name img_dot xpos -66 ypos -83 } set N5012ddb0 [stack 0] Dot { name Dot3 xpos 758 ypos -83 } set N831ba3d0 [stack 0] Shuffle { in pworld in2 alpha alpha red2 name shuffle_data label "\[value in]" xpos 724 ypos -32 } Unpremult { name Unpremult_data xpos 724 ypos 62 disable {{!parent.unpm}} } Dot { name Dot5 xpos 758 ypos 700 } set N3e85ff50 [stack 0] Dot { name Dot6 xpos 928 ypos 700 } set N3e862410 [stack 0] Dot { name Dot7 xpos 1106 ypos 700 } set N3e8648d0 [stack 0] Dot { name Dot8 xpos 1260 ypos 700 } Expression { temp_name0 dvalue temp_expr0 red temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression9 xpos 1226 ypos 774 } Dot { name Dot16 xpos 1260 ypos 889 } push $N3e8648d0 Expression { temp_name0 dvalue temp_expr0 "1 / red" temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression6 xpos 1072 ypos 774 } Dot { name Dot17 xpos 1106 ypos 863 } push $N3e862410 Expression { expr2 -blue name Expression7 label "fix z" xpos 894 ypos 774 } Dot { name Dot18 xpos 928 ypos 876 } push $N3e85ff50 Expression { temp_name0 nx temp_expr0 "red - cam_data.world_matrix.3" temp_name1 ny temp_expr1 "green - cam_data.world_matrix.7" temp_name2 nz temp_expr2 "blue - cam_data.world_matrix.11" expr0 "nx * \[value inverseMatrix.invMatrix.0] + ny * \[value inverseMatrix.invMatrix.1] + nz * \[value inverseMatrix.invMatrix.2]" expr1 "nx * \[value inverseMatrix.invMatrix.3] + ny * \[value inverseMatrix.invMatrix.4] + nz * \[value inverseMatrix.invMatrix.5]" expr2 "nx * \[value inverseMatrix.invMatrix.6] + ny * \[value inverseMatrix.invMatrix.7] + nz * \[value inverseMatrix.invMatrix.8]" name Expression3 label "position invert" xpos 724 ypos 774 } Switch { inputs 4 which {{parent.data_type}} name Switch1 xpos 724 ypos 984 } Dot { name Dot13 xpos 758 ypos 1113 } set N3e891b90 [stack 0] Dot { name sam_dot xpos 551 ypos 1113 } NoOp { inputs 0 name menu1 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['uv_stabilize'].getValue() == 1 :\n thisGRP\['uv_ref_frame'].setEnabled(True)\n thisGRP\['uv_set_frame'].setEnabled(True)\n thisGRP\['black_outside'].setEnabled(True)\nelse :\n thisGRP\['uv_ref_frame'].setEnabled(False)\n thisGRP\['uv_set_frame'].setEnabled(False)\n thisGRP\['black_outside'].setEnabled(False)\n" xpos -1085 ypos -42 addUserKnob {20 User} addUserKnob {6 uv_stabilize l "uv stabilize" +STARTLINE} uv_stabilize true } NoOp { inputs 0 name menu2 onCreate "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nthisGRP\[fregion_knobs\[4]].setEnabled(True)\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n else :\n thisGRP\[i].setEnabled(False)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" knobChanged "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" xpos -1085 ypos 25 addUserKnob {20 User} addUserKnob {6 use_focus_region l "use focus region" +STARTLINE} } Camera { inputs 0 display off selectable false useMatrix true matrix { {{Camera7.world_matrix} {Camera7.world_matrix} {Camera7.world_matrix} {Camera7.world_matrix}} {{Camera7.world_matrix} {Camera7.world_matrix} {Camera7.world_matrix} {Camera7.world_matrix}} {{Camera7.world_matrix} {Camera7.world_matrix} {Camera7.world_matrix} {Camera7.world_matrix}} {{Camera7.world_matrix} {Camera7.world_matrix} {Camera7.world_matrix} {Camera7.world_matrix}} } focal {{parent.cam_focal}} haperture {{cam_haperture}} name cam_data xpos -335 ypos 2204 } push $N3e891b90 Expression { temp_name0 unpremultA temp_expr0 "alpha * ( 1 / alpha )" temp_name1 max temp_expr1 blue expr3 "abs( max ) < \[value parent.drange_near] || abs( max ) > \[value parent.drange_far] ? 0 : isnan(unpremultA) ? 0 : unpremultA" name Expression1 label "distance crop" xpos 724 ypos 1244 } Premult { name Premult1 xpos 724 ypos 1332 } Dot { name Dot9 xpos 758 ypos 1640 } set N3e8b5b60 [stack 0] push $N5012ddb0 Dot { name Dot10 xpos -66 ypos 1552 } set N3e8b8020 [stack 0] Unpremult { name Unpremult1 xpos 48 ypos 1549 } Merge2 { inputs 2 operation mask name Merge2 xpos 48 ypos 1637 } Premult { name Premult3 xpos 48 ypos 1719 } push $N3e8b8020 Switch { inputs 2 which {{parent.clip_color}} name Switch2 xpos -100 ypos 1828 } Project3D2 { inputs 2 crop {{parent.black_outside}} name Project3D2 xpos -100 ypos 2224 } push $N831ba3d0 Dot { name Dot2 xpos 1576 ypos -84 } Shuffle { red black green black blue black alpha black name Shuffle1 label "\[value in]" xpos 1542 ypos 30 } Remove { name Remove1 xpos 1542 ypos 118 } Reformat { type scale black_outside true name Reformat1 xpos 1542 ypos 212 } Expression { temp_name0 xpos temp_expr0 "( ( x + 0.5 ) / input.width - 0.5) * \[value global_math.hratio] * abs( \[value parent.drange_far] )" temp_name1 ypos temp_expr1 "( ( y + 0.5 ) / input.height -0.5 ) * ( \[value global_math.hratio] * abs( \[value parent.drange_far] ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name2 zpos temp_expr2 "-\[value parent.drange_far]" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression8 xpos 1542 ypos 845 } ColorMatrix { matrix { {{cam_data.world_matrix.0} {cam_data.world_matrix.1} {cam_data.world_matrix.2}} {{cam_data.world_matrix.4} {cam_data.world_matrix.5} {cam_data.world_matrix.6}} {{cam_data.world_matrix.8} {cam_data.world_matrix.9} {cam_data.world_matrix.10}} } name ColorMatrix1 xpos 1542 ypos 970 } Add { channels rgb value {{cam_data.world_matrix.3} {cam_data.world_matrix.7} {cam_data.world_matrix.11} 0} name Add1 xpos 1542 ypos 1052 } Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop1 xpos 1542 ypos 1476 disable {{!parent.use_focus_region}} } Dot { name Dot4 xpos 1576 ypos 2402 } push $N3e8b5b60 Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop4 selected true xpos 724 ypos 1714 disable {{!parent.use_focus_region}} } Unpremult { name Unpremult3 xpos 724 ypos 1851 } Expression { temp_name0 nx temp_expr0 red temp_name1 ny temp_expr1 green temp_name2 nz temp_expr2 blue expr0 "( nx * \[value cam_data.world_matrix.0] + ny * \[value cam_data.world_matrix.1] + nz * \[value cam_data.world_matrix.2] ) + \[value cam_data.world_matrix.3]" expr1 "( nx * \[value cam_data.world_matrix.4] + ny * \[value cam_data.world_matrix.5] + nz * \[value cam_data.world_matrix.6] ) + \[value cam_data.world_matrix.7]" expr2 "( nx * \[value cam_data.world_matrix.8] + ny * \[value cam_data.world_matrix.9] + nz * \[value cam_data.world_matrix.10] ) + \[value cam_data.world_matrix.11]" name Expression4 label "position revert" xpos 724 ypos 1933 } Premult { name Premult2 xpos 724 ypos 2027 } Merge2 { inputs 2 operation under name Merge1 xpos 724 ypos 2398 } Card { inputs 0 image_aspect false rows {{"img_dot.height * parent.lod"}} columns {{"img_dot.width * parent.lod"}} name ssmesh xpos 343 ypos 2317 } DisplaceGeo { inputs 2 source "rgb absolute" scale 1 filter_size 1 name DisplaceGeo xpos 343 ypos 2399 } FrameHold { first_frame {{parent.uv_ref_frame}} name FrameHold xpos 343 ypos 2479 disable {{!parent.uv_stabilize}} } ApplyMaterial { inputs 2 name ApplyMaterial1 xpos -100 ypos 2483 } Scene { display {{parent.display}} name gl_scene xpos -90 ypos 3072 } set N3e977a90 [stack 0] WriteGeo { file_type abc name WriteGeo xpos 120 ypos 3093 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt2.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name right_pt xpos -600 ypos 3218 } CheckerBoard2 { inputs 0 format "256 256 0 0 256 256 1 square_256" name CheckerBoard1 xpos -789 ypos 2694 } Multiply { channels rgb value {{parent.crop_point_color.r} {parent.crop_point_color.g} {parent.crop_point_color.b} 1} name Multiply xpos -789 ypos 2822 } Clamp { channels rgba name Clamp1 xpos -789 ypos 2905 } Sphere { selectable false cast_shadow false receive_shadow false rows 10 columns 10 uniform_scale {{parent.crop_point_scale}} name Sphere1 xpos -789 ypos 2987 disable {{!show_crop}} } Dot { name Dot24 xpos -755 ypos 3065 } set N3e9d65e0 [stack 0] Dot { name Dot25 xpos -456 ypos 3065 } TransformGeo { inputs 2 selectable false name TransformGeo2 xpos -490 ypos 3238 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt1.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name left_pt xpos -899 ypos 3220 } push $N3e9d65e0 TransformGeo { inputs 2 selectable false name TransformGeo1 xpos -789 ypos 3240 } Scene { inputs 2 selectable false name Scene1 xpos -480 ypos 3395 } ApplyMaterial { display off selectable false render_mode off name material_switch xpos -490 ypos 3523 } push $N3e977a90 Scene { inputs 2 name Scene2 xpos -90 ypos 3502 } Output { name Output1 xpos -100 ypos 4030 } Group { inputs 0 name inverseMatrix tile_color 0x337f4cff xpos 576 ypos 780 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path cam_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2011-11-28} addUserKnob {26 l_CHANGELOG l Changelog T "v1.0\n- reveal the calculate output of \n inverse matrix which is c44matrix\n and colormatrix doesn't show\n "} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group Camera { inputs 0 rotate {0 0 {-parent.cam_winroll}} win_translate {{parent.cam_win_translate} {parent.cam_win_translate}} win_scale {{parent.cam_win_scale} {parent.cam_win_scale}} name fb_data xpos -340 ypos 2087 } NoOp { inputs 0 name store xpos -843 ypos 28 addUserKnob {20 User} addUserKnob {22 fn T "### level define ###\n\ndef getLevel() :\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\tggLevel = nuke.root()\n\telse :\n\t\tnodePath = nuke.thisNode().fullName().split('.')\n\t\tnodePath.pop()\n\t\tggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\n### sample z in 2D ###\n\ndef sample2d() :\n\tthisGRP = nuke.thisGroup()\n\tif thisGRP\['sample_z_status'].value() == '\[ ON ]' :\n\t\tsam_co = thisGRP\['sample_point'].getValue()\n\t\tzdata = nuke.toNode('sam_dot').sample('blue', sam_co\[0], sam_co\[1]) * -1\n\t\tthisGRP\['fregion_define_z'].setValue( zdata )" +STARTLINE} addUserKnob {15 fregion} fregion {{parent.focus_region} {parent.focus_region} {parent.focus_region} {parent.focus_region}} } NoOp { inputs 0 name global_math xpos -842 ypos -43 addUserKnob {20 User} addUserKnob {7 hratio} hratio {{"cam_data.haperture / cam_data.focal"}} addUserKnob {7 maxwidth} maxwidth {{"hratio * parent.fregion_define_z"}} addUserKnob {7 maxheight} maxheight {{"hratio * parent.fregion_define_z * ( img_dot.height / img_dot.width )"}} addUserKnob {13 pt1} pt1 {{"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + \n( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} addUserKnob {13 pt2} pt2 {{"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} } end_group Dot { name Dot17 xpos -958 ypos 2214 } set N82a638e0 [stack 0] push 0 ScanlineRender { inputs 2 conservative_shader_sampling false projection_mode uv motion_vectors_type off MB_channel none name ScanlineRender1 xpos -869 ypos 2211 } FrameHold { first_frame 64 name FrameHold1 xpos -869 ypos 2278 } Dot { name Dot8 xpos -835 ypos 2485 } set N82a73560 [stack 0] Shuffle { red black green black blue black alpha black name Shuffle1 xpos -759 ypos 2482 } Roto { output alpha curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44200000 x43b40000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier1 512 bezier {{cc {f 8192} {p {x41680000 x3fc00000} {x43ea8000 x43c30000} {xc1680000 xbfc00000} {xc1100000 x41280000} {x43dec000 x43bc4000} {x41100000 xc1280000} {xc0200000 x41500000} {x43fec000 x439c8000} {x40200000 xc1500000} {x41080000 x40a00000} {x43f88000 x43800000} {xc1080000 xc0a00000} {xc1580000 x40d00000} {x43f67000 x43698001} {x41580000 xc0d00000} {xc0900000 xc1a80000} {x440d2000 x43844000} {x40900000 x41a80000} {x41200000 xc1880000} {x440ae000 x43a78000} {xc1200000 x41880000} {x41480000 xc0c00000} {x44006000 x43bc0000} {xc1480000 x40c00000}}} {cc {f 8192} {p {x41680000 x3fc00000} {} {xc1680000 xbfc00000} {xc1100000 x41280000} {xc1ee6340 xc08c30c0} {x41100000 xc1280000} {xc0200000 x41500000} {xc21bed08 xc0efe200} {x40200000 xc1500000} {x41080000 x40a00000} {xc210b930 x3f98f900} {xc1080000 xc0a00000} {xc1580000 x40d00000} {xc123f5c0 xc1aa44d8} {x41580000 xc0d00000} {xc0900000 xc1a80000} {x41dc7300 xc0bcf6e0} {x40900000 x41a80000} {x41200000 xc1880000} {x41db6220 x41810c50} {xc1200000 x41880000} {x41480000 xc0c00000} {x418ba580 x41b91720} {xc1480000 x40c00000}}}} {t x43fd0000 x439e4000} {a osw x41200000 osf 0 str 1 spx x44200000 spy x43b40000 sb 1 ltn x42840000 ltm x42840000 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {640 360} colorOverlay {0 0 0 0} lifetime_type "all frames" lifetime_start 66 lifetime_end 66 motionblur_shutter_offset_type centred source_black_outside true name Roto1 xpos -759 ypos 2561 } push $N82a73560 ShuffleCopy { inputs 2 in alpha red red out mask name ShuffleCopy1 xpos -869 ypos 2565 } push $N82a638e0 FrameHold { first_frame 64 name FrameHold3 xpos -992 ypos 2288 } Dot { name Dot18 xpos -958 ypos 2741 } ApplyMaterial { inputs 2 name ApplyMaterial1 xpos -869 ypos 2738 } Reformat { inputs 0 type "to box" box_width 1280 box_height 720 box_fixed true name Reformat1 xpos -759 ypos 2795 } ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type off MB_channel none name ScanlineRender2 xpos -869 ypos 2795 } Premult { channels rgba alpha mask.a name Premult1 xpos -869 ypos 2875 } push $N82b0bfa0 Grade { inputs 1+1 white 0.14 name Grade1 xpos -400 ypos 2879 } Dot { name Dot15 xpos -366 ypos 3135 } Camera2 { inputs 0 translate {{curve x1 -23.73355293 x50 1.828465939 x100 10.79810143} {curve x1 6.752248287 x50 13.82691669 x100 25.23773003} {curve x1 -3.158116341 x50 5.475767136 x100 -12.79232216}} rotate {{curve x1 30.63627052 x50 14.22963619 x100 -23.22279344} {curve x1 -44.94124796 x50 19.70681696 x100 76.6501109} {curve x1 0 x50 27.42004885 x100 13.36756642}} focal 24 name Camera8 xpos 211 ypos 2099 } Dot { name Dot9 xpos 235 ypos 2789 } ColorWheel { inputs 0 gamma 0.45 name ColorWheel1 xpos 599 ypos 2425 } Transform { translate {-70 -60} scale 0.3 center {640 360} name Transform1 xpos 599 ypos 2518 } Dot { name Dot10 xpos 633 ypos 2558 } set N82cc6220 [stack 0] Dot { name Dot11 xpos 633 ypos 2638 } push $N82cc6220 Group { inputs 0 name render_with_pworld4 xpos 903 ypos 1995 postage_stamp true } Camera2 { inputs 0 translate {{curve x1 -23.73355293 x50 1.828465939 x100 10.79810143} {curve x1 6.752248287 x50 13.82691669 x100 25.23773003} {curve x1 -3.158116341 x50 5.475767136 x100 -12.79232216}} rotate {{curve x1 30.63627052 x50 14.22963619 x100 -23.22279344} {curve x1 -44.94124796 x50 19.70681696 x100 76.6501109} {curve x1 0 x50 27.42004885 x100 13.36756642}} focal 24 name Camera1 xpos 241 ypos -567 } Dot { name Dot2 xpos 351 ypos -543 } set N82cd9c60 [stack 0] Dot { name Dot3 xpos 351 ypos -428 } push $N82cd9c60 CheckerBoard2 { inputs 0 name CheckerBoard1 xpos 406 ypos -928 } Dot { name Dot1 xpos 440 ypos -814 } set N82ce2b10 [stack 0] Dot { name Dot5 xpos 553 ypos -814 } set N82ce4e90 [stack 0] Dot { name Dot4 xpos 693 ypos -814 } Multiply { channels rgb value {0 1 1 1} name Multiply3 xpos 659 ypos -756 } Cube { rows 1 columns 1 separate_faces false translate {-7.849998951 18.14999962 -19.00000191} rotate {0 0 45.93192592} uniform_scale 7 name Cube1 xpos 659 ypos -676 } push $N82ce4e90 Multiply { channels rgb value {1 0 1 1} name Multiply2 xpos 519 ypos -750 } Sphere { translate {-15.00000191 16.45000076 -17.79999924} scaling {3.183291435 1 2.618715286} uniform_scale 2 name Sphere1 xpos 519 ypos -670 } push $N82ce2b10 Multiply { channels rgb value {1 1 0 1} name Multiply1 xpos 406 ypos -754 } Cylinder { rows 1 close_top true close_bottom true translate {-3.149999619 19.64999962 -13.89999866} rotate {52.26493538 0 32.53306187} scaling {1 4.216488838 1} uniform_scale 2 name Cylinder1 xpos 406 ypos -673 } Scene { inputs 4 name Scene1 xpos 416 ypos -567 } Reformat { inputs 0 type "to box" box_width 1280 box_height 720 box_fixed true name Reformat1 xpos 530 ypos -431 } ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type off MB_channel none output_shader_vectors true P_channel pworld name ScanlineRender1 xpos 406 ypos -431 } Output { name Output1 xpos 406 ypos -331 } end_group Dot { name Dot12 xpos 937 ypos 2123 } set N82d2c920 [stack 0] Group { name SSMesh10 tile_color 0x5c9e83ff label "Geo Output" xpos 309 ypos 2104 addUserKnob {20 tab_general l General} addUserKnob {22 set_link l "link to selected camera" t "Click to link selected camera by expression. This tool will get the focal, haperture and world matrix from selected camera to generate" T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\n\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\ndefaultKnobs = \{\n\t\t\t'world matrix' : 'world_matrix',\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.focal'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.haperture'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.win_translate'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.win_scale'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.winroll'.format(CAMnode))\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']))\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']))\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']))\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']))\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window roll']))\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\n\nfor knob in thisGRP.knobs() :\n\tif mainKnobs.count(knob) != 0 :\n\t\t thisGRP\[knob].clearAnimated()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 cam_focal l "focal length" R 5 100} cam_focal {{Camera8.focal}} addUserKnob {7 cam_haperture l "horiz aperture" R 0.1 50} cam_haperture {{Camera8.haperture}} addUserKnob {30 cam_win_translate l "window translate"} cam_win_translate {{Camera8.win_translate} {Camera8.win_translate}} addUserKnob {30 cam_win_scale l "window scale"} cam_win_scale {{Camera8.win_scale} {Camera8.win_scale}} addUserKnob {7 cam_winroll l "window roll" R -45 45} cam_winroll {{Camera8.winroll}} addUserKnob {41 world_matrix l "world matrix" T cam_data.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 spacer_5 l "" +STARTLINE T
    } addUserKnob {26 title_basic l "BASIC SETTING"} addUserKnob {4 display l "3D display" t "How to draw in 3D preview. The viewer can override this setting." M {off wireframe soild solid+wireframe textured textured+wireframe "" "" ""}} display textured addUserKnob {4 data_type l "data type" t "data type\nUsing one of these data to convert into 3D mesh.\n\nPosition\nSupported world space or camera space position data.\n\nDepth (normalized far=0)\nNormalized depth data, which is same as depth data output by ScanlineRender.\n\nDeep / Depth (direct)\nRaw camera depth data. If using deep, need to convert DeepToImage first, and selected deep channel on 'channels' knob." M {"position (world space)" "position (camera space)" "depth (normalized far=0)" "deep / depth (direct)" "" "" ""}} addUserKnob {41 channels t "Select which channel represented on selected data type." T shuffle_data.in} addUserKnob {6 unpm l unpremult t "3D data pass should be unpremult with alpha before process." -STARTLINE} unpm true addUserKnob {26 spacer_4 l "" +STARTLINE T
    } addUserKnob {7 lod l "mesh LOD" t "Level of Details\n\nIf this value set to 1.0, subdivision of the mesh 1:1 to the data available in the resolution. Which mean 1 face of the mesh equal to 1 pixel.\n\nIf this value set to 1.0, it will slow down the render process.\n\nHighly recommend to use 0.1 - 0.5 if high resolution mesh details is not concern."} lod 0.5 addUserKnob {41 filter_size l "filter size" T DisplaceGeo.filter_size} addUserKnob {41 filter T DisplaceGeo.filter} addUserKnob {26 spacer_2 l "" +STARTLINE T
    } addUserKnob {26 title_drange l "" +STARTLINE T "distance range"} addUserKnob {7 drange_near l near t "clip the mesh in the min value in terms of depth." R 0 10000} addUserKnob {7 drange_far l far t "clip the mesh in the max value in terms of depth." R 0 10000} drange_far 30 addUserKnob {6 clip_color l "distance clip on color" t "Apply the distance clip on colored texture." +STARTLINE} clip_color true addUserKnob {26 spacer_3 l "" +STARTLINE T
    } addUserKnob {26 title_export l EXPORT} addUserKnob {41 file t "only support *.abc file extension (alembric) ." T WriteGeo.file} addUserKnob {22 export_geo l "Export Geo" T "def exportGeo() :\n\twgeo = nuke.toNode('WriteGeo')\n\twgeo\['Execute'].execute()\n\nthisGRP = nuke.thisGroup()\nfilepath = thisGRP\['file'].getValue()\n\nif not len(filepath) :\n\tnuke.message('file path is empty. Process denied.')\nelif not filepath.split('.')\[-1:]\[0].lower() == 'abc' :\n\tif nuke.ask('File extension invalue. Only support render *.abc . Do you want this tool to fix it and process ?') :\n\t\tthisGRP\['file'].setValue( thisGRP\['file'].getValue() + '.abc' )\n\t\texportGeo()\nelse :\n\texportGeo()" +STARTLINE} addUserKnob {22 import_geo l "Import Geo" -STARTLINE T "prefx = nuke.toNode('preferences')\['GridWidth'].value()\nthisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\nroot = getLevel()\n\nwith root :\n\trgeo = nuke.nodes.ReadGeo2( file=thisGRP\['file'].getValue() )\n\trgeo.setXYpos( int( thisGRP\['xpos'].getValue() + prefx ) , int( thisGRP\['ypos'].getValue() ) )"} addUserKnob {20 tab_misc l Miscellaneous} addUserKnob {26 title_focus_region l "FOCUS REGION"} addUserKnob {41 use_focus_region l "use focus region" t "use focus region to generate SSMesh in specific area. Save resources and possible to work with high LOD mesh." T menu2.use_focus_region} addUserKnob {15 focus_region l "focus region" t "Set focus region in screen space. These values are 2D coordinate." +DISABLED} focus_region {0 0 1280 720} addUserKnob {26 spacer_1 l "" +STARTLINE T
    } addUserKnob {3 fregion_ref_frame l "ref frame" t "set reference frame for tracking focus region. 'focus region' & 'define z' will apply on this reference frame and process the tracking." +DISABLED} fregion_ref_frame 1 addUserKnob {22 fregion_set_frame l "set current frame" t "set current frame for focus region reference frame." -STARTLINE +DISABLED T "nuke.thisGroup()\['fregion_ref_frame'].setValue( nuke.frame() )"} addUserKnob {12 sample_point l "sample position" t "Toggle 'sample z' in 2D to enable this 2D sample coordinate." +DISABLED} addUserKnob {22 sample_z_toggle l "sample z in 2D" t "'sample z' is only works for sample value purpose. After sample is done, must turn off sample function." -STARTLINE +DISABLED T "thisGRP = nuke.thisGroup()\nszstatus = thisGRP\['sample_z_status'].value()\n\nstatus = \['\[ OFF ]','\[ ON ]']\n\nif szstatus == status\[0] :\n\tthisGRP\['sample_z_status'].setValue( status\[1] )\n\tthisGRP\['sample_point'].setEnabled(True)\n\tthisGRP\['updateUI'].setValue(\"goStore = nuke.toNode(\\'store\\')\\ngoStore\[\\'fn\\'].execute()\\nsample2d()\")\nelse :\n\tthisGRP\['sample_z_status'].setValue( status\[0] )\n\tthisGRP\['sample_point'].setEnabled(False)\n\tthisGRP\['updateUI'].setValue('')"} addUserKnob {26 sample_z_status l "" -STARTLINE +DISABLED T "\[ OFF ]"} addUserKnob {7 fregion_define_z l "define z" t "Define the z value on reference frame. Can use 'sample z in 2D' to get this value." +DISABLED R 0 10000} addUserKnob {22 track_focus_region l "\[ track focus region ]" t "Use the set focus region on reference frame to track with camera in 3D space.\n\n* project setting need to be same as image resolution to get the correct result." +DISABLED T "rootST = int( nuke.root()\['first_frame'].getValue() )\nrootED = int( nuke.root()\['last_frame'].getValue() )\n\ngetFrame = nuke.getFramesAndViews( 'frame range', str( rootST ) + '-' + str( rootED ) )\n\ntry :\n\tframeST = int( getFrame\[0].replace( ' ' , '' ).split('-')\[0] )\n\tframeED = int( getFrame\[0].replace( ' ' , '' ).split('-')\[1] )\n\n\tthisGRP = nuke.thisGroup()\n\trefframe = int( thisGRP\['fregion_ref_frame'].getValue() )\n\tcam = nuke.toNode('cam_data')\n\tpt1 = nuke.toNode('left_pt')\['translate'].getValue()\n\tpt2 = nuke.toNode('right_pt')\['translate'].getValue()\n\n\tct_hack = nuke.nodes.CurveTool()\n\n\twith nuke.root() :\n\n\t\tif frameED - frameST != 0 :\n\t\t\tthisGRP\['focus_region'].clearAnimated()\n\t\t\ttempbuffer1 = thisGRP\['focus_region'].getValue()\n\t\t\tthisGRP\['focus_region'].setAnimated()\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[0] , refframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[1] , refframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[2] , refframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[3] , refframe , 3 )\n\n\t\tfor trackframe in range( frameST, frameED+1 , 1 ) :\n\t\t\tnuke.execute( ct_hack, trackframe, trackframe )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[0] , trackframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[1] , trackframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[0] , trackframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[1] , trackframe , 3 )\n\n\tnuke.delete( ct_hack )\nexcept :\n pass" +STARTLINE} addUserKnob {26 spacer_6 l "" +STARTLINE T
    } addUserKnob {20 grp_crop_preview l "3D crop preview" +DISABLED n 1} grp_crop_preview 0 addUserKnob {6 show_crop l "show crop point" t "It will show 2 spheres for the crop in 3D space. They set in the place which is where you set the focus region in screen space and defined by z." +DISABLED +STARTLINE} addUserKnob {7 crop_point_scale l scale t "Scale the preview crop points (spheres)." +DISABLED} crop_point_scale 0.3 addUserKnob {18 crop_point_color l color t "change color of the crop points (spheres)." +DISABLED} crop_point_color 1 addUserKnob {6 crop_point_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup n -1} addUserKnob {26 spacer l "" +STARTLINE T
    } addUserKnob {26 title_uv l UV} addUserKnob {41 uv_stabilize l "uv stabilize" t "Turn this on if you need to stabilize in UV space. During UV stabilize on, the geo will not be animated. Set reference frame under 'mesh ref frame'." T menu1.uv_stabilize} addUserKnob {3 uv_ref_frame l "mesh ref frame" t "Select the frame number that will have identity geo shaped for UV texturing."} uv_ref_frame 64 addUserKnob {22 uv_set_frame l "set current frame" -STARTLINE T "nuke.thisGroup()\['uv_ref_frame'].setValue( nuke.frame() )"} addUserKnob {6 black_outside l "black outside" t "black outside the UV texture." +STARTLINE} black_outside true addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.3} addUserKnob {26 l_DATE l "Date Modified" T 2019-11-08} addUserKnob {26 l_CHANGELOG l Changelog T "1.3\n- camera window supported\n- anamophic project supported\n- fix the conflict of 'force region' and 'UV stabilize'.\n can use both at the same time now.\n\n1.2\n- removed unuse camera link knobs\n- added focus region, so mesh can be\n form in specific area/object to save\n resources for higher LOD\n\n1.1\n- fix the missing line on 'Export Geo' \n button\n\n1.0\n- create mesh/geo in screen space\n using position/depth/deep data"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "don't touch" note_font_size 32 xpos -1142 ypos -169 bdwidth 202 bdheight 478 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x4c4c4cff label bin note_font_size 32 xpos -899 ypos -170 bdwidth 200 bdheight 280 } Input { inputs 0 name img xpos -100 ypos -184 } Dot { name img_dot xpos -66 ypos -83 } set N3eb06b40 [stack 0] Dot { name Dot3 xpos 758 ypos -83 } set N3eb08ec0 [stack 0] Shuffle { in pworld in2 alpha alpha red2 name shuffle_data label "\[value in]" xpos 724 ypos -32 } Unpremult { name Unpremult_data xpos 724 ypos 62 disable {{!parent.unpm}} } Dot { name Dot5 xpos 758 ypos 700 } set N5a4ecc00 [stack 0] Dot { name Dot6 xpos 928 ypos 700 } set N4a76bb30 [stack 0] Dot { name Dot7 xpos 1106 ypos 700 } set N3ea89990 [stack 0] Dot { name Dot8 xpos 1260 ypos 700 } Expression { temp_name0 dvalue temp_expr0 red temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression9 xpos 1226 ypos 774 } Dot { name Dot16 xpos 1260 ypos 889 } push $N3ea89990 Expression { temp_name0 dvalue temp_expr0 "1 / red" temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression6 xpos 1072 ypos 774 } Dot { name Dot17 xpos 1106 ypos 863 } push $N4a76bb30 Expression { expr2 -blue name Expression7 label "fix z" xpos 894 ypos 774 } Dot { name Dot18 xpos 928 ypos 876 } push $N5a4ecc00 Expression { temp_name0 nx temp_expr0 "red - cam_data.world_matrix.3" temp_name1 ny temp_expr1 "green - cam_data.world_matrix.7" temp_name2 nz temp_expr2 "blue - cam_data.world_matrix.11" expr0 "nx * \[value inverseMatrix.invMatrix.0] + ny * \[value inverseMatrix.invMatrix.1] + nz * \[value inverseMatrix.invMatrix.2]" expr1 "nx * \[value inverseMatrix.invMatrix.3] + ny * \[value inverseMatrix.invMatrix.4] + nz * \[value inverseMatrix.invMatrix.5]" expr2 "nx * \[value inverseMatrix.invMatrix.6] + ny * \[value inverseMatrix.invMatrix.7] + nz * \[value inverseMatrix.invMatrix.8]" name Expression3 label "position invert" xpos 724 ypos 774 } Switch { inputs 4 which {{parent.data_type}} name Switch1 xpos 724 ypos 984 } Dot { name Dot13 xpos 758 ypos 1113 } set N3ea40e20 [stack 0] Dot { name sam_dot xpos 551 ypos 1113 } NoOp { inputs 0 name menu1 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['uv_stabilize'].getValue() == 1 :\n thisGRP\['uv_ref_frame'].setEnabled(True)\n thisGRP\['uv_set_frame'].setEnabled(True)\n thisGRP\['black_outside'].setEnabled(True)\nelse :\n thisGRP\['uv_ref_frame'].setEnabled(False)\n thisGRP\['uv_set_frame'].setEnabled(False)\n thisGRP\['black_outside'].setEnabled(False)\n" xpos -1085 ypos -42 addUserKnob {20 User} addUserKnob {6 uv_stabilize l "uv stabilize" +STARTLINE} uv_stabilize true } NoOp { inputs 0 name menu2 onCreate "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nthisGRP\[fregion_knobs\[4]].setEnabled(True)\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n else :\n thisGRP\[i].setEnabled(False)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" knobChanged "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" xpos -1085 ypos 25 addUserKnob {20 User} addUserKnob {6 use_focus_region l "use focus region" +STARTLINE} } Camera { inputs 0 display off selectable false useMatrix true matrix { {{Camera8.world_matrix} {Camera8.world_matrix} {Camera8.world_matrix} {Camera8.world_matrix}} {{Camera8.world_matrix} {Camera8.world_matrix} {Camera8.world_matrix} {Camera8.world_matrix}} {{Camera8.world_matrix} {Camera8.world_matrix} {Camera8.world_matrix} {Camera8.world_matrix}} {{Camera8.world_matrix} {Camera8.world_matrix} {Camera8.world_matrix} {Camera8.world_matrix}} } focal {{parent.cam_focal}} haperture {{cam_haperture}} name cam_data xpos -335 ypos 2204 } push $N3ea40e20 Expression { temp_name0 unpremultA temp_expr0 "alpha * ( 1 / alpha )" temp_name1 max temp_expr1 blue expr3 "abs( max ) < \[value parent.drange_near] || abs( max ) > \[value parent.drange_far] ? 0 : isnan(unpremultA) ? 0 : unpremultA" name Expression1 label "distance crop" xpos 724 ypos 1244 } Premult { name Premult1 xpos 724 ypos 1332 } Dot { name Dot9 xpos 758 ypos 1640 } set N3ea9cf00 [stack 0] push $N3eb06b40 Dot { name Dot10 xpos -66 ypos 1552 } set N3ea9f3c0 [stack 0] Unpremult { name Unpremult1 xpos 48 ypos 1549 } Merge2 { inputs 2 operation mask name Merge2 xpos 48 ypos 1637 } Premult { name Premult3 xpos 48 ypos 1719 } push $N3ea9f3c0 Switch { inputs 2 which {{parent.clip_color}} name Switch2 xpos -100 ypos 1828 } Project3D2 { inputs 2 crop {{parent.black_outside}} name Project3D2 xpos -100 ypos 2224 } push $N3eb08ec0 Dot { name Dot2 xpos 1576 ypos -84 } Shuffle { red black green black blue black alpha black name Shuffle1 label "\[value in]" xpos 1542 ypos 30 } Remove { name Remove1 xpos 1542 ypos 118 } Reformat { type scale black_outside true name Reformat1 xpos 1542 ypos 212 } Expression { temp_name0 xpos temp_expr0 "( ( x + 0.5 ) / input.width - 0.5) * \[value global_math.hratio] * abs( \[value parent.drange_far] )" temp_name1 ypos temp_expr1 "( ( y + 0.5 ) / input.height -0.5 ) * ( \[value global_math.hratio] * abs( \[value parent.drange_far] ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name2 zpos temp_expr2 "-\[value parent.drange_far]" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression8 xpos 1542 ypos 845 } ColorMatrix { matrix { {{cam_data.world_matrix.0} {cam_data.world_matrix.1} {cam_data.world_matrix.2}} {{cam_data.world_matrix.4} {cam_data.world_matrix.5} {cam_data.world_matrix.6}} {{cam_data.world_matrix.8} {cam_data.world_matrix.9} {cam_data.world_matrix.10}} } name ColorMatrix1 xpos 1542 ypos 970 } Add { channels rgb value {{cam_data.world_matrix.3} {cam_data.world_matrix.7} {cam_data.world_matrix.11} 0} name Add1 xpos 1542 ypos 1052 } Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop1 xpos 1542 ypos 1476 disable {{!parent.use_focus_region}} } Dot { name Dot4 xpos 1576 ypos 2402 } push $N3ea9cf00 Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop4 selected true xpos 724 ypos 1714 disable {{!parent.use_focus_region}} } Unpremult { name Unpremult3 xpos 724 ypos 1851 } Expression { temp_name0 nx temp_expr0 red temp_name1 ny temp_expr1 green temp_name2 nz temp_expr2 blue expr0 "( nx * \[value cam_data.world_matrix.0] + ny * \[value cam_data.world_matrix.1] + nz * \[value cam_data.world_matrix.2] ) + \[value cam_data.world_matrix.3]" expr1 "( nx * \[value cam_data.world_matrix.4] + ny * \[value cam_data.world_matrix.5] + nz * \[value cam_data.world_matrix.6] ) + \[value cam_data.world_matrix.7]" expr2 "( nx * \[value cam_data.world_matrix.8] + ny * \[value cam_data.world_matrix.9] + nz * \[value cam_data.world_matrix.10] ) + \[value cam_data.world_matrix.11]" name Expression4 label "position revert" xpos 724 ypos 1933 } Premult { name Premult2 xpos 724 ypos 2027 } Merge2 { inputs 2 operation under name Merge1 xpos 724 ypos 2398 } Card { inputs 0 image_aspect false rows {{"img_dot.height * parent.lod"}} columns {{"img_dot.width * parent.lod"}} name ssmesh xpos 343 ypos 2317 } DisplaceGeo { inputs 2 source "rgb absolute" scale 1 filter_size 1 name DisplaceGeo xpos 343 ypos 2399 } FrameHold { first_frame {{parent.uv_ref_frame}} name FrameHold xpos 343 ypos 2479 disable {{!parent.uv_stabilize}} } ApplyMaterial { inputs 2 name ApplyMaterial1 xpos -100 ypos 2483 } Scene { display {{parent.display}} name gl_scene xpos -90 ypos 3072 } set N3eb93730 [stack 0] WriteGeo { file_type abc name WriteGeo xpos 120 ypos 3093 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt2.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name right_pt xpos -600 ypos 3218 } CheckerBoard2 { inputs 0 format "256 256 0 0 256 256 1 square_256" name CheckerBoard1 xpos -789 ypos 2694 } Multiply { channels rgb value {{parent.crop_point_color.r} {parent.crop_point_color.g} {parent.crop_point_color.b} 1} name Multiply xpos -789 ypos 2822 } Clamp { channels rgba name Clamp1 xpos -789 ypos 2905 } Sphere { selectable false cast_shadow false receive_shadow false rows 10 columns 10 uniform_scale {{parent.crop_point_scale}} name Sphere1 xpos -789 ypos 2987 disable {{!show_crop}} } Dot { name Dot24 xpos -755 ypos 3065 } set N3a702900 [stack 0] Dot { name Dot25 xpos -456 ypos 3065 } TransformGeo { inputs 2 selectable false name TransformGeo2 xpos -490 ypos 3238 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt1.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name left_pt xpos -899 ypos 3220 } push $N3a702900 TransformGeo { inputs 2 selectable false name TransformGeo1 xpos -789 ypos 3240 } Scene { inputs 2 selectable false name Scene1 xpos -480 ypos 3395 } ApplyMaterial { display off selectable false render_mode off name material_switch xpos -490 ypos 3523 } push $N3eb93730 Scene { inputs 2 name Scene2 xpos -90 ypos 3502 } Output { name Output1 xpos -100 ypos 4030 } Group { inputs 0 name inverseMatrix tile_color 0x337f4cff xpos 576 ypos 780 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path cam_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2011-11-28} addUserKnob {26 l_CHANGELOG l Changelog T "v1.0\n- reveal the calculate output of \n inverse matrix which is c44matrix\n and colormatrix doesn't show\n "} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group Camera { inputs 0 rotate {0 0 {-parent.cam_winroll}} win_translate {{parent.cam_win_translate} {parent.cam_win_translate}} win_scale {{parent.cam_win_scale} {parent.cam_win_scale}} name fb_data xpos -340 ypos 2087 } NoOp { inputs 0 name store xpos -843 ypos 28 addUserKnob {20 User} addUserKnob {22 fn T "### level define ###\n\ndef getLevel() :\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\tggLevel = nuke.root()\n\telse :\n\t\tnodePath = nuke.thisNode().fullName().split('.')\n\t\tnodePath.pop()\n\t\tggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\n### sample z in 2D ###\n\ndef sample2d() :\n\tthisGRP = nuke.thisGroup()\n\tif thisGRP\['sample_z_status'].value() == '\[ ON ]' :\n\t\tsam_co = thisGRP\['sample_point'].getValue()\n\t\tzdata = nuke.toNode('sam_dot').sample('blue', sam_co\[0], sam_co\[1]) * -1\n\t\tthisGRP\['fregion_define_z'].setValue( zdata )" +STARTLINE} addUserKnob {15 fregion} fregion {{parent.focus_region} {parent.focus_region} {parent.focus_region} {parent.focus_region}} } NoOp { inputs 0 name global_math xpos -842 ypos -43 addUserKnob {20 User} addUserKnob {7 hratio} hratio {{"cam_data.haperture / cam_data.focal"}} addUserKnob {7 maxwidth} maxwidth {{"hratio * parent.fregion_define_z"}} addUserKnob {7 maxheight} maxheight {{"hratio * parent.fregion_define_z * ( img_dot.height / img_dot.width )"}} addUserKnob {13 pt1} pt1 {{"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + \n( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} addUserKnob {13 pt2} pt2 {{"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} } end_group Dot { name Dot20 xpos 343 ypos 2212 } set N82dad460 [stack 0] push 0 ScanlineRender { inputs 2 conservative_shader_sampling false projection_mode uv motion_vectors_type off MB_channel none name ScanlineRender3 xpos 453 ypos 2209 } FrameHold { first_frame 64 name FrameHold2 xpos 452 ypos 2278 } Merge2 { inputs 2 name Merge1 xpos 452 ypos 2555 } ShuffleCopy { inputs 2 in alpha red red out mask name ShuffleCopy3 xpos 452 ypos 2635 } push $N82dad460 FrameHold { first_frame 64 name FrameHold4 xpos 309 ypos 2271 } Dot { name Dot19 xpos 342 ypos 2721 } ApplyMaterial { inputs 2 name ApplyMaterial2 xpos 452 ypos 2718 } Reformat { inputs 0 type "to box" box_width 1280 box_height 720 box_fixed true name Reformat2 xpos 580 ypos 2786 } ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type off MB_channel none name ScanlineRender4 xpos 452 ypos 2786 } Premult { channels rgba alpha mask.a name Premult2 xpos 452 ypos 2866 } Dot { name Dot13 xpos 486 ypos 2954 } push $N82d2c920 Merge2 { inputs 2 name Merge2 xpos 903 ypos 2951 } Dot { name Dot16 xpos 937 ypos 3143 } StickyNote { inputs 0 name StickyNote1 label "view here to :\nanimated the crop in SSMesh's focus region\nor\nset crop & sample z in SSMesh's focus region" note_font_size 24 xpos -690 ypos 3796 } StickyNote { inputs 0 name StickyNote2 label "check 3D crop preview in 2D or 3D here after SSMesh" note_font_size 24 xpos -705 ypos 4294 } Camera2 { inputs 0 translate {{curve x1 33 x100 62.93263245} {curve x1 26.39999962 x100 34.79999924} {curve x1 34.59999847 x100 11.96562004}} rotate {{curve x1 0 x100 -15.51148426} {curve x1 0 x100 46.58225214} {curve x1 0 x100 0.5831401536}} focal 30 name Camera10 xpos -1029 ypos 4184 } Dot { name Dot22 xpos -901 ypos 4208 } set N82f0ce40 [stack 0] Dot { name Dot23 xpos -901 ypos 4309 } push $N82f0ce40 Group { inputs 0 name Group1 xpos -831 ypos 3829 postage_stamp true } Camera2 { inputs 0 translate {{curve x1 33 x100 62.93263245} {curve x1 26.39999962 x100 34.79999924} {curve x1 34.59999847 x100 11.96562004}} rotate {{curve x1 0 x100 -15.51148426} {curve x1 0 x100 46.58225214} {curve x1 0 x100 0.5831401536}} focal 30 name Camera1 xpos 425 ypos -536 } Axis2 { inputs 0 translate {37.5 26.25 0} name Axis1 xpos 430 ypos -734 } Axis { inputs 0 display off selectable false translate {2.679637267 -1.884568013 5.423575904} pivot {-2.679637267 1.884568013 -5.423575904} name GG_Axis984_0009 xpos 2805 ypos -1508 } CheckerBoard2 { inputs 0 format "512 512 0 0 512 512 1 square_512" name CheckerBoard1 xpos 600 ypos -1983 } Shuffle { green black blue black name Shuffle1 xpos 600 ypos -1820 } HueShift { hue_rotation {{frame*10}} name HueShift1 xpos 600 ypos -1740 } Dot { name dot_spacer01_984 xpos 634 ypos -1554 } set N82f3f8c0 [stack 0] FrameHold { first_frame 1024 name GG_Framehold984_0009 xpos 1590 ypos -1480 } Clamp { name GG_Clamp984_0009 xpos 1590 ypos -1392 } Sphere { name GG_Sphere984_0009 xpos 1590 ypos -1304 } TransformGeo { inputs 2 name GG_TransformGeo984_0009 xpos 1590 ypos -1093 } Axis { inputs 0 display off selectable false translate {-8.874522276 3.548102203 1.948912169} pivot {8.874522276 -3.548102203 -1.948912169} name GG_Axis984_0008 xpos 2705 ypos -1508 } push $N82f3f8c0 FrameHold { first_frame 1070 name GG_Framehold984_0008 xpos 1480 ypos -1480 } Clamp { name GG_Clamp984_0008 xpos 1480 ypos -1392 } Sphere { name GG_Sphere984_0008 xpos 1480 ypos -1304 } TransformGeo { inputs 2 name GG_TransformGeo984_0008 xpos 1480 ypos -1093 } Axis { inputs 0 display off selectable false translate {6.313467354 -2.632137413 -1.309742931} pivot {-6.313467354 2.632137413 1.309742931} name GG_Axis984_0007 xpos 2605 ypos -1508 } push $N82f3f8c0 FrameHold { first_frame 1019 name GG_Framehold984_0007 xpos 1370 ypos -1480 } Clamp { name GG_Clamp984_0007 xpos 1370 ypos -1392 } Sphere { name GG_Sphere984_0007 xpos 1370 ypos -1304 } TransformGeo { inputs 2 name GG_TransformGeo984_0007 xpos 1370 ypos -1093 } Axis { inputs 0 display off selectable false translate {-13.12676241 -0.4082311155 -1.952071942} pivot {13.12676241 0.4082311155 1.952071942} name GG_Axis984_0006 xpos 2505 ypos -1508 } push $N82f3f8c0 FrameHold { first_frame 1046 name GG_Framehold984_0006 xpos 1260 ypos -1480 } Clamp { name GG_Clamp984_0006 xpos 1260 ypos -1392 } Sphere { name GG_Sphere984_0006 xpos 1260 ypos -1304 } TransformGeo { inputs 2 name GG_TransformGeo984_0006 xpos 1260 ypos -1093 } Axis { inputs 0 display off selectable false translate {-6.206141649 -1.363666429 2.6093192} pivot {6.206141649 1.363666429 -2.6093192} name GG_Axis984_0005 xpos 2405 ypos -1508 } push $N82f3f8c0 FrameHold { first_frame 1010 name GG_Framehold984_0005 xpos 1150 ypos -1480 } Clamp { name GG_Clamp984_0005 xpos 1150 ypos -1392 } Sphere { name GG_Sphere984_0005 xpos 1150 ypos -1304 } TransformGeo { inputs 2 name GG_TransformGeo984_0005 xpos 1150 ypos -1093 } Axis { inputs 0 display off selectable false translate {3.576542504 2.684284256 2.047008002} pivot {-3.576542504 -2.684284256 -2.047008002} name GG_Axis984_0004 xpos 2305 ypos -1508 } push $N82f3f8c0 FrameHold { first_frame 1056 name GG_Framehold984_0004 xpos 1040 ypos -1480 } Clamp { name GG_Clamp984_0004 xpos 1040 ypos -1392 } Sphere { name GG_Sphere984_0004 xpos 1040 ypos -1304 } TransformGeo { inputs 2 name GG_TransformGeo984_0004 xpos 1040 ypos -1093 } Axis { inputs 0 display off selectable false translate {6.259842546 1.604622218 -1.604947836} pivot {-6.259842546 -1.604622218 1.604947836} name GG_Axis984_0003 xpos 2205 ypos -1508 } push $N82f3f8c0 FrameHold { first_frame 1086 name GG_Framehold984_0003 xpos 930 ypos -1480 } Clamp { name GG_Clamp984_0003 xpos 930 ypos -1392 } Sphere { name GG_Sphere984_0003 xpos 930 ypos -1304 } TransformGeo { inputs 2 name GG_TransformGeo984_0003 xpos 930 ypos -1093 } Axis { inputs 0 display off selectable false translate {-1.711193772 1.393878945 0.5224952546} pivot {1.711193772 -1.393878945 -0.5224952546} name GG_Axis984_0002 xpos 2105 ypos -1508 } push $N82f3f8c0 FrameHold { first_frame 1074 name GG_Framehold984_0002 xpos 820 ypos -1480 } Clamp { name GG_Clamp984_0002 xpos 820 ypos -1392 } Sphere { name GG_Sphere984_0002 xpos 820 ypos -1304 } TransformGeo { inputs 2 name GG_TransformGeo984_0002 xpos 820 ypos -1093 } Axis { inputs 0 display off translate {-0.5500000119 -2.650000095 0.1599481702} pivot {-0.6229833555 0.8497041464 -0.1599481756} name GG_Axis984_0001 xpos 1998 ypos -1514 } push $N82f3f8c0 FrameHold { first_frame 1051 name GG_Framehold984_0001 xpos 710 ypos -1480 } Clamp { name GG_Clamp984_0001 xpos 710 ypos -1392 } Sphere { name GG_Sphere984_0001 xpos 710 ypos -1304 } TransformGeo { inputs 2 name GG_TransformGeo984_0001 xpos 710 ypos -1093 } Axis { inputs 0 display off selectable false name GG_Axis984_0000 xpos 1902 ypos -1505 } push $N82f3f8c0 FrameHold { first_frame 1019 name GG_Framehold984_0000 xpos 600 ypos -1480 } Clamp { name GG_Clamp984_0000 xpos 600 ypos -1392 } Sphere { name GG_Sphere984_0000 xpos 600 ypos -1304 } TransformGeo { inputs 2 name GG_TransformGeo984_0000 xpos 600 ypos -1093 } MergeGeo { inputs 10 display textured name GG_MergeGeo_984 xpos 600 ypos -793 } TransformGeo { inputs 2 name TransformGeo1 xpos 600 ypos -713 } Reformat { inputs 0 type "to box" box_width 1280 box_height 720 box_fixed true name Reformat1 xpos 747 ypos -515 } ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type off MB_channel none output_shader_vectors true P_channel pworld name ScanlineRender1 xpos 600 ypos -515 } Output { name Output1 xpos 600 ypos -415 } end_group Group { name SSMesh7 tile_color 0x5c9e83ff label "Geo Output" xpos -831 ypos 4024 addUserKnob {20 tab_general l General} addUserKnob {22 set_link l "link to selected camera" t "Click to link selected camera by expression. This tool will get the focal, haperture and world matrix from selected camera to generate" T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\nroot = getLevel()\nthisGRP = nuke.thisGroup()\n\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\ndefaultKnobs = \{\n\t\t\t'world matrix' : 'world_matrix',\n\t\t\t'focal length' : 'focal',\n\t\t\t'horiz aperture' : 'haperture',\n\t\t\t'window translate' : 'win_translate',\n\t\t\t'window scale' : 'win_scale',\n\t\t\t'window roll' : 'winroll'\n\t\t\t\}\nselNodeKnobs = \[]\nmissingKnob = \[]\n\ntry :\n\twith root :\n\t\tselNode = nuke.selectedNode()\n\n\tfor knob in selNode.knobs() :\n\t\tselNodeKnobs.append( knob )\n\n\tselNodeKnobs.sort()\n\n\tfor key,value in defaultKnobs.items() :\n\t\tif value not in selNodeKnobs :\n\t\t\tmissingKnob.append( key )\n\n\tif not len(missingKnob) :\n\t\twith root :\n\t\t\tCAMnode = selNode.name()\n\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.world_matrix'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.focal'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.haperture'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.win_translate'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.win_scale'.format(CAMnode))\n\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.winroll'.format(CAMnode))\n\telse :\n\t\tp = nuke.Panel('Select knobs :')\n\t\tp.addBooleanCheckBox( 'Unable to find the default knobs. Please use the pulldown menu below to define the knob manually.' , False)\n\t\tfor rk in missingKnob :\n\t\t\tp.addEnumerationPulldown( rk, ' '.join( selNodeKnobs ) )\n\n\t\tif p.show() :\n\t\t\ttry :\n\t\t\t\tfor key,value in defaultKnobs.items() :\n\t\t\t\t\tif p.value( key ) != None :\n\t\t\t\t\t\tdefaultKnobs\[key] = p.value( key )\n\t\t\texcept :\n\t\t\t\tpass\n\n\t\t\twith root :\n\t\t\t\tCAMnode = selNode.name()\n\t\t\t\tthisGRP\[mainKnobs\[0]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['world matrix']))\n\t\t\t\tthisGRP\[mainKnobs\[1]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['focal length']))\n\t\t\t\tthisGRP\[mainKnobs\[2]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['horiz aperture']))\n\t\t\t\tthisGRP\[mainKnobs\[3]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window translate']))\n\t\t\t\tthisGRP\[mainKnobs\[4]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window scale']))\n\t\t\t\tthisGRP\[mainKnobs\[5]].setExpression('\{0\}.\{1\}'.format(CAMnode, defaultKnobs\['window roll']))\nexcept :\n\tnuke.message('no node selected.')" +STARTLINE} addUserKnob {22 remove_link l "remove linked expression" t "Remove the linked camera expression but won't reset any data." -STARTLINE T "thisGRP = nuke.thisGroup()\nmainKnobs = \['world_matrix','cam_focal','cam_haperture','cam_win_translate','cam_win_scale','cam_winroll']\n\nfor knob in thisGRP.knobs() :\n\tif mainKnobs.count(knob) != 0 :\n\t\t thisGRP\[knob].clearAnimated()"} addUserKnob {20 cam_data_grp l "CAMERA DATA" n 1} cam_data_grp 0 addUserKnob {7 cam_focal l "focal length" R 5 100} cam_focal {{Camera10.focal}} addUserKnob {7 cam_haperture l "horiz aperture" R 0.1 50} cam_haperture {{Camera10.haperture}} addUserKnob {30 cam_win_translate l "window translate"} cam_win_translate {{Camera10.win_translate} {Camera10.win_translate}} addUserKnob {30 cam_win_scale l "window scale"} cam_win_scale {{Camera10.win_scale} {Camera10.win_scale}} addUserKnob {7 cam_winroll l "window roll" R -45 45} cam_winroll {{Camera10.winroll}} addUserKnob {41 world_matrix l "world matrix" T cam_data.matrix} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 spacer_5 l "" +STARTLINE T
    } addUserKnob {26 title_basic l "BASIC SETTING"} addUserKnob {4 display l "3D display" t "How to draw in 3D preview. The viewer can override this setting." M {off wireframe soild solid+wireframe textured textured+wireframe "" "" ""}} display textured addUserKnob {4 data_type l "data type" t "data type\nUsing one of these data to convert into 3D mesh.\n\nPosition\nSupported world space or camera space position data.\n\nDepth (normalized far=0)\nNormalized depth data, which is same as depth data output by ScanlineRender.\n\nDeep / Depth (direct)\nRaw camera depth data. If using deep, need to convert DeepToImage first, and selected deep channel on 'channels' knob." M {"position (world space)" "position (camera space)" "depth (normalized far=0)" "deep / depth (direct)" "" "" ""}} addUserKnob {41 channels t "Select which channel represented on selected data type." T shuffle_data.in} addUserKnob {6 unpm l unpremult t "3D data pass should be unpremult with alpha before process." -STARTLINE} unpm true addUserKnob {26 spacer_4 l "" +STARTLINE T
    } addUserKnob {7 lod l "mesh LOD" t "Level of Details\n\nIf this value set to 1.0, subdivision of the mesh 1:1 to the data available in the resolution. Which mean 1 face of the mesh equal to 1 pixel.\n\nIf this value set to 1.0, it will slow down the render process.\n\nHighly recommend to use 0.1 - 0.5 if high resolution mesh details is not concern."} lod 0.5 addUserKnob {41 filter_size l "filter size" T DisplaceGeo.filter_size} addUserKnob {41 filter T DisplaceGeo.filter} addUserKnob {26 spacer_2 l "" +STARTLINE T
    } addUserKnob {26 title_drange l "" +STARTLINE T "distance range"} addUserKnob {7 drange_near l near t "clip the mesh in the min value in terms of depth." R 0 10000} addUserKnob {7 drange_far l far t "clip the mesh in the max value in terms of depth." R 0 10000} drange_far 40 addUserKnob {6 clip_color l "distance clip on color" t "Apply the distance clip on colored texture." +STARTLINE} clip_color true addUserKnob {26 spacer_3 l "" +STARTLINE T
    } addUserKnob {26 title_export l EXPORT} addUserKnob {41 file t "only support *.abc file extension (alembric) ." T WriteGeo.file} addUserKnob {22 export_geo l "Export Geo" T "def exportGeo() :\n\twgeo = nuke.toNode('WriteGeo')\n\twgeo\['Execute'].execute()\n\nthisGRP = nuke.thisGroup()\nfilepath = thisGRP\['file'].getValue()\n\nif not len(filepath) :\n\tnuke.message('file path is empty. Process denied.')\nelif not filepath.split('.')\[-1:]\[0].lower() == 'abc' :\n\tif nuke.ask('File extension invalue. Only support render *.abc . Do you want this tool to fix it and process ?') :\n\t\tthisGRP\['file'].setValue( thisGRP\['file'].getValue() + '.abc' )\n\t\texportGeo()\nelse :\n\texportGeo()" +STARTLINE} addUserKnob {22 import_geo l "Import Geo" -STARTLINE T "prefx = nuke.toNode('preferences')\['GridWidth'].value()\nthisGRP = nuke.thisGroup()\ngoStore = nuke.toNode('store')\ngoStore\['fn'].execute()\n\nroot = getLevel()\n\nwith root :\n\trgeo = nuke.nodes.ReadGeo2( file=thisGRP\['file'].getValue() )\n\trgeo.setXYpos( int( thisGRP\['xpos'].getValue() + prefx ) , int( thisGRP\['ypos'].getValue() ) )"} addUserKnob {20 tab_misc l Miscellaneous} addUserKnob {26 title_focus_region l "FOCUS REGION"} addUserKnob {41 use_focus_region l "use focus region" t "use focus region to generate SSMesh in specific area. Save resources and possible to work with high LOD mesh." T menu2.use_focus_region} addUserKnob {15 focus_region l "focus region" t "Set focus region in screen space. These values are 2D coordinate."} focus_region {{curve x1 233.5207062 497.8091125 494.2871094 490.5583496 486.6227112 482.4801941 478.1316223 473.5766907 468.8161316 463.8508301 458.6824646 453.3103333 447.7382507 441.9660339 435.9968567 429.8322449 423.4750671 416.9274902 410.1922913 403.2732849 396.1737671 388.8970032 381.447998 373.8299866 366.0475769 358.1063843 350.0110779 341.7667236 333.3794861 324.854187 316.1987 307.4177246 298.5187073 289.5086365 280.3937378 271.182312 261.8818359 252.4991913 243.0432434 233.5207062 223.9414215 214.3127136 204.6440887 194.9425507 185.2186279 175.4802246 165.7357635 155.9950867 146.2666626 136.5593872 126.8825073 117.2451859 107.6561279 98.12382507 88.65762329 79.26589203 69.95688629 60.73909378 51.62180328 42.61193466 33.71819687 24.9479351 16.30883789 7.808671951 -0.5459617376 -8.74853611 -16.79135513 -24.66836739 -32.37460327 -39.90288162 -47.24801636 -54.40490723 -61.36901093 -68.13480377 -74.69895935 -81.05633545 -87.20454407 -93.13911438 -98.85650635 -104.3555374 -109.6317444 -114.6851883 -119.5113983 -124.1103897 -128.480423 -132.6210938 -136.5300446 -140.2077789 -143.6538849 -146.8681793 -149.8506775 -152.6027069 -155.123764 -157.4156494 -159.4779816 -161.3143463 -162.9235687 -164.3097229 -165.4726562 -166.4156647} {curve x1 157.4579773 214.1690063 213.2086792 212.1981964 211.1391754 210.0319061 208.8781433 207.6791077 206.4360809 205.1501007 203.82341 202.4568634 201.0526886 199.6125793 198.1383514 196.6322174 195.0958099 193.5317688 191.9420624 190.3292542 188.6951599 187.0426941 185.3750763 183.6937408 182.0026703 180.303833 178.6006622 176.8956146 175.1918335 173.4927673 171.8010559 170.1205902 168.4539642 166.8043671 165.1757507 163.5709686 161.9935608 160.4465332 158.9336548 157.4579773 156.023468 154.6329651 153.2897186 151.9969788 150.758667 149.5775299 148.4563141 147.3991089 146.408371 145.4872284 144.6382141 143.8647461 143.1698608 142.5553131 142.023819 141.5784149 141.220871 140.9538727 140.7787323 140.6987762 140.7147522 140.8284912 141.041687 141.3562775 141.7730255 142.2937469 142.9190521 143.6502533 144.4872284 145.4320679 146.4837036 147.6437683 148.9120483 150.2889557 151.773407 153.3664703 155.0676575 156.8766632 158.7926178 160.815033 162.9429016 165.1763611 167.5137024 169.9541779 172.4965057 175.1397552 177.8824921 180.7233276 183.661087 186.693924 189.8207245 193.0394592 196.3488007 199.7467194 203.2320709 206.8022766 210.4560699 214.1911774 218.0061188 221.8986664} {curve x1 407.3132629 632.9698486 630.8667603 628.5549316 626.0327759 623.298645 620.3521118 617.1916504 613.8161621 610.2250366 606.418457 602.3939209 598.1537476 593.696228 589.0222168 584.1320801 579.0261841 573.7053833 568.1705322 562.423645 556.4656982 550.298584 543.9248047 537.3465576 530.565918 523.5864868 516.4117432 509.044281 501.4887695 493.7480164 485.8283691 477.7326355 469.4665833 461.0358276 452.4449463 443.7006226 434.809082 425.776001 416.6088257 407.3132629 397.8980103 388.3695374 378.7364807 369.005188 359.1854858 349.2848511 339.3110352 329.274231 319.1820679 309.0441284 298.8691711 288.6670837 278.4466553 268.217041 257.9882812 247.7691956 237.5692902 227.3978271 217.2652893 207.1797485 197.1512299 187.1884918 177.3011169 167.4981384 157.7879639 148.1790771 138.6807556 129.3011169 120.0474625 110.9286194 101.9519806 93.12505341 84.45433807 75.9477005 67.61076355 59.4508934 51.47251511 43.68294525 36.08748627 28.6897316 21.49653053 14.50977325 7.736446857 1.178515553 -5.159889221 -11.27678871 -17.16728783 -22.83028221 -28.26292801 -33.4636879 -38.43037415 -43.16260147 -47.65843582 -51.91768265 -55.93866348 -59.72333908 -63.26909256 -66.57868195 -69.65059662 -72.48701477} {curve x1 323.3641968 354.7592773 354.8156738 354.8145752 354.7564697 354.6416931 354.4703369 354.2427063 353.9594116 353.6203003 353.2267151 352.7784119 352.2769165 351.7224426 351.1160278 350.4587708 349.7514648 348.9953613 348.1914368 347.3412781 346.4457703 345.5065613 344.5258484 343.5041504 342.4444885 341.3478394 340.2164001 339.0519409 337.8566895 336.6329346 335.3825684 334.1089478 332.813446 331.4989624 330.1681519 328.8237305 327.4683228 326.1046753 324.7355957 323.3641968 321.9935608 320.6267395 319.2663574 317.9155884 316.5777893 315.2562561 313.9532776 312.6731567 311.4185791 310.1926575 308.9984131 307.8394165 306.7189636 305.6393738 304.6039734 303.6160889 302.6785889 301.7942505 300.9658813 300.1967163 299.4889526 298.8451843 298.2681274 297.760376 297.3241272 296.9620361 296.6756592 296.4677124 296.3391724 296.2930603 296.3299255 296.4519653 296.6607056 296.9576416 297.3430176 297.8189697 298.3862 299.0457153 299.7979126 300.6434631 301.5828247 302.6166687 303.7449951 304.9680176 306.2857666 307.6982422 309.2050171 310.8058777 312.5005493 314.2882385 316.1691284 318.1416016 320.2055664 322.3596497 324.6036072 326.93573 329.3555603 331.8613892 334.4525452 337.1275024}} addUserKnob {26 spacer_1 l "" +STARTLINE T
    } addUserKnob {3 fregion_ref_frame l "ref frame" t "set reference frame for tracking focus region. 'focus region' & 'define z' will apply on this reference frame and process the tracking."} fregion_ref_frame 40 addUserKnob {22 fregion_set_frame l "set current frame" t "set current frame for focus region reference frame." -STARTLINE T "nuke.thisGroup()\['fregion_ref_frame'].setValue( nuke.frame() )"} addUserKnob {12 sample_point l "sample position" t "Toggle 'sample z' in 2D to enable this 2D sample coordinate." +DISABLED} addUserKnob {22 sample_z_toggle l "sample z in 2D" t "'sample z' is only works for sample value purpose. After sample is done, must turn off sample function." -STARTLINE T "thisGRP = nuke.thisGroup()\nszstatus = thisGRP\['sample_z_status'].value()\n\nstatus = \['\[ OFF ]','\[ ON ]']\n\nif szstatus == status\[0] :\n\tthisGRP\['sample_z_status'].setValue( status\[1] )\n\tthisGRP\['sample_point'].setEnabled(True)\n\tthisGRP\['updateUI'].setValue(\"goStore = nuke.toNode(\\'store\\')\\ngoStore\[\\'fn\\'].execute()\\nsample2d()\")\nelse :\n\tthisGRP\['sample_z_status'].setValue( status\[0] )\n\tthisGRP\['sample_point'].setEnabled(False)\n\tthisGRP\['updateUI'].setValue('')"} addUserKnob {26 sample_z_status l "" -STARTLINE T "\[ OFF ]"} addUserKnob {7 fregion_define_z l "define z" t "Define the z value on reference frame. Can use 'sample z in 2D' to get this value." R 0 10000} fregion_define_z 26.2365181 addUserKnob {22 track_focus_region l "\[ track focus region ]" t "Use the set focus region on reference frame to track with camera in 3D space.\n\n* project setting need to be same as image resolution to get the correct result." T "rootST = int( nuke.root()\['first_frame'].getValue() )\nrootED = int( nuke.root()\['last_frame'].getValue() )\n\ngetFrame = nuke.getFramesAndViews( 'frame range', str( rootST ) + '-' + str( rootED ) )\n\ntry :\n\tframeST = int( getFrame\[0].replace( ' ' , '' ).split('-')\[0] )\n\tframeED = int( getFrame\[0].replace( ' ' , '' ).split('-')\[1] )\n\n\tthisGRP = nuke.thisGroup()\n\trefframe = int( thisGRP\['fregion_ref_frame'].getValue() )\n\tcam = nuke.toNode('cam_data')\n\tpt1 = nuke.toNode('left_pt')\['translate'].getValue()\n\tpt2 = nuke.toNode('right_pt')\['translate'].getValue()\n\n\tct_hack = nuke.nodes.CurveTool()\n\n\twith nuke.root() :\n\n\t\tif frameED - frameST != 0 :\n\t\t\tthisGRP\['focus_region'].clearAnimated()\n\t\t\ttempbuffer1 = thisGRP\['focus_region'].getValue()\n\t\t\tthisGRP\['focus_region'].setAnimated()\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[0] , refframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[1] , refframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[2] , refframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( tempbuffer1\[3] , refframe , 3 )\n\n\t\tfor trackframe in range( frameST, frameED+1 , 1 ) :\n\t\t\tnuke.execute( ct_hack, trackframe, trackframe )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[0] , trackframe , 0 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt1 )\[1] , trackframe , 1 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[0] , trackframe , 2 )\n\t\t\tthisGRP\['focus_region'].setValueAt( nukescripts.snap3d.projectPoint( cam, pt2 )\[1] , trackframe , 3 )\n\n\tnuke.delete( ct_hack )\nexcept :\n pass" +STARTLINE} addUserKnob {26 spacer_6 l "" +STARTLINE T
    } addUserKnob {20 grp_crop_preview l "3D crop preview" n 1} grp_crop_preview 0 addUserKnob {6 show_crop l "show crop point" t "It will show 2 spheres for the crop in 3D space. They set in the place which is where you set the focus region in screen space and defined by z." +STARTLINE} addUserKnob {7 crop_point_scale l scale t "Scale the preview crop points (spheres)."} crop_point_scale 0.3 addUserKnob {18 crop_point_color l color t "change color of the crop points (spheres)."} crop_point_color 1 addUserKnob {6 crop_point_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 crop_point_color_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {20 endGroup n -1} addUserKnob {26 spacer l "" +STARTLINE T
    } addUserKnob {26 title_uv l UV} addUserKnob {41 uv_stabilize l "uv stabilize" t "Turn this on if you need to stabilize in UV space. During UV stabilize on, the geo will not be animated. Set reference frame under 'mesh ref frame'." T menu1.uv_stabilize} addUserKnob {3 uv_ref_frame l "mesh ref frame" t "Select the frame number that will have identity geo shaped for UV texturing." +DISABLED} uv_ref_frame 1001 addUserKnob {22 uv_set_frame l "set current frame" -STARTLINE +DISABLED T "nuke.thisGroup()\['uv_ref_frame'].setValue( nuke.frame() )"} addUserKnob {6 black_outside l "black outside" t "black outside the UV texture." +DISABLED +STARTLINE} black_outside true addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.3} addUserKnob {26 l_DATE l "Date Modified" T 2019-11-08} addUserKnob {26 l_CHANGELOG l Changelog T "1.3\n- camera window supported\n- anamophic project supported\n- fix the conflict of 'force region' and 'UV stabilize'.\n can use both at the same time now.\n\n1.2\n- removed unuse camera link knobs\n- added focus region, so mesh can be\n form in specific area/object to save\n resources for higher LOD\n\n1.1\n- fix the missing line on 'Export Geo' \n button\n\n1.0\n- create mesh/geo in screen space\n using position/depth/deep data"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "don't touch" note_font_size 32 xpos -1142 ypos -169 bdwidth 202 bdheight 478 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x4c4c4cff label bin note_font_size 32 xpos -899 ypos -170 bdwidth 200 bdheight 280 } Input { inputs 0 name img xpos -100 ypos -184 } Dot { name img_dot xpos -66 ypos -83 } set N3ec285d0 [stack 0] Dot { name Dot3 xpos 758 ypos -83 } set N3ea5e7a0 [stack 0] Shuffle { in pworld in2 alpha alpha red2 name shuffle_data label "\[value in]" xpos 724 ypos -32 } Unpremult { name Unpremult_data xpos 724 ypos 62 disable {{!parent.unpm}} } Dot { name Dot5 xpos 758 ypos 700 } set N3ec5fec0 [stack 0] Dot { name Dot6 xpos 928 ypos 700 } set N3ec62380 [stack 0] Dot { name Dot7 xpos 1106 ypos 700 } set N5015d780 [stack 0] Dot { name Dot8 xpos 1260 ypos 700 } Expression { temp_name0 dvalue temp_expr0 red temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression9 xpos 1226 ypos 774 } Dot { name Dot16 xpos 1260 ypos 889 } push $N5015d780 Expression { temp_name0 dvalue temp_expr0 "1 / red" temp_name1 xpos temp_expr1 "( ( x + 0.5 ) / input.width - 0.5 ) * \[value global_math.hratio] * abs( dvalue )" temp_name2 ypos temp_expr2 "( ( y + 0.5 ) / input.height - 0.5 ) * ( \[value global_math.hratio] * abs( dvalue ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name3 zpos temp_expr3 "- dvalue" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression6 xpos 1072 ypos 774 } Dot { name Dot17 xpos 1106 ypos 863 } push $N3ec62380 Expression { expr2 -blue name Expression7 label "fix z" xpos 894 ypos 774 } Dot { name Dot18 xpos 928 ypos 876 } push $N3ec5fec0 Expression { temp_name0 nx temp_expr0 "red - cam_data.world_matrix.3" temp_name1 ny temp_expr1 "green - cam_data.world_matrix.7" temp_name2 nz temp_expr2 "blue - cam_data.world_matrix.11" expr0 "nx * \[value inverseMatrix.invMatrix.0] + ny * \[value inverseMatrix.invMatrix.1] + nz * \[value inverseMatrix.invMatrix.2]" expr1 "nx * \[value inverseMatrix.invMatrix.3] + ny * \[value inverseMatrix.invMatrix.4] + nz * \[value inverseMatrix.invMatrix.5]" expr2 "nx * \[value inverseMatrix.invMatrix.6] + ny * \[value inverseMatrix.invMatrix.7] + nz * \[value inverseMatrix.invMatrix.8]" name Expression3 label "position invert" xpos 724 ypos 774 } Switch { inputs 4 which {{parent.data_type}} name Switch1 xpos 724 ypos 984 } Dot { name Dot13 xpos 758 ypos 1113 } set N2a401a80 [stack 0] Dot { name sam_dot xpos 551 ypos 1113 } NoOp { inputs 0 name menu1 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['uv_stabilize'].getValue() == 1 :\n thisGRP\['uv_ref_frame'].setEnabled(True)\n thisGRP\['uv_set_frame'].setEnabled(True)\n thisGRP\['black_outside'].setEnabled(True)\nelse :\n thisGRP\['uv_ref_frame'].setEnabled(False)\n thisGRP\['uv_set_frame'].setEnabled(False)\n thisGRP\['black_outside'].setEnabled(False)\n" xpos -1085 ypos -42 addUserKnob {20 User} addUserKnob {6 uv_stabilize l "uv stabilize" +STARTLINE} } NoOp { inputs 0 name menu2 onCreate "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nthisGRP\[fregion_knobs\[4]].setEnabled(True)\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n else :\n thisGRP\[i].setEnabled(False)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" knobChanged "\nthisGRP = nuke.thisGroup()\nfregion_knobs = \['focus_region','fregion_define_z','sample_z_toggle','sample_z_status','sample_point','fregion_ref_frame','fregion_set_frame','track_focus_region','grp_crop_preview','show_crop','crop_point_scale','crop_point_color']\n\nif thisGRP\['use_focus_region'].getValue() == 0 :\n for i in fregion_knobs :\n thisGRP\[i].setEnabled(False)\n thisGRP\[fregion_knobs\[3]].setValue( '\[ OFF ]' )\n thisGRP\['updateUI'].setValue('')\n nuke.toNode('material_switch')\['disable'].setValue(0)\nelse :\n for i in fregion_knobs :\n if i != 'sample_point' :\n thisGRP\[i].setEnabled(True)\n nuke.toNode('material_switch')\['disable'].setValue(1)\n" xpos -1085 ypos 25 addUserKnob {20 User} addUserKnob {6 use_focus_region l "use focus region" +STARTLINE} use_focus_region true } Camera { inputs 0 display off selectable false useMatrix true matrix { {{Camera10.world_matrix} {Camera10.world_matrix} {Camera10.world_matrix} {Camera10.world_matrix}} {{Camera10.world_matrix} {Camera10.world_matrix} {Camera10.world_matrix} {Camera10.world_matrix}} {{Camera10.world_matrix} {Camera10.world_matrix} {Camera10.world_matrix} {Camera10.world_matrix}} {{Camera10.world_matrix} {Camera10.world_matrix} {Camera10.world_matrix} {Camera10.world_matrix}} } focal {{parent.cam_focal}} haperture {{cam_haperture}} name cam_data xpos -335 ypos 2204 } push $N2a401a80 Expression { temp_name0 unpremultA temp_expr0 "alpha * ( 1 / alpha )" temp_name1 max temp_expr1 blue expr3 "abs( max ) < \[value parent.drange_near] || abs( max ) > \[value parent.drange_far] ? 0 : isnan(unpremultA) ? 0 : unpremultA" name Expression1 label "distance crop" xpos 724 ypos 1244 } Premult { name Premult1 xpos 724 ypos 1332 } Dot { name Dot9 xpos 758 ypos 1640 } set N2a425a50 [stack 0] push $N3ec285d0 Dot { name Dot10 xpos -66 ypos 1552 } set N2a427f10 [stack 0] Unpremult { name Unpremult1 xpos 48 ypos 1549 } Merge2 { inputs 2 operation mask name Merge2 xpos 48 ypos 1637 } Premult { name Premult3 xpos 48 ypos 1719 } push $N2a427f10 Switch { inputs 2 which {{parent.clip_color}} name Switch2 selected true xpos -100 ypos 1828 } Project3D2 { inputs 2 crop {{parent.black_outside}} name Project3D2 xpos -100 ypos 2224 } push $N3ea5e7a0 Dot { name Dot2 xpos 1576 ypos -84 } Shuffle { red black green black blue black alpha black name Shuffle1 label "\[value in]" xpos 1542 ypos 30 } Remove { name Remove1 xpos 1542 ypos 118 } Reformat { type scale black_outside true name Reformat1 xpos 1542 ypos 212 } Expression { temp_name0 xpos temp_expr0 "( ( x + 0.5 ) / input.width - 0.5) * \[value global_math.hratio] * abs( \[value parent.drange_far] )" temp_name1 ypos temp_expr1 "( ( y + 0.5 ) / input.height -0.5 ) * ( \[value global_math.hratio] * abs( \[value parent.drange_far] ) * ( img_dot.height / img_dot.width ) ) * 1 / \[value format.pixel_aspect]" temp_name2 zpos temp_expr2 "-\[value parent.drange_far]" expr0 "( xpos * \[value fb_data.world_matrix.0] + ypos * \[value fb_data.world_matrix.1] ) * \[value fb_data.win_scale.u] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.u] / 2 )" expr1 "( xpos * \[value fb_data.world_matrix.4] + ypos * \[value fb_data.world_matrix.5] ) * \[value fb_data.win_scale.v] + ( \[value global_math.hratio] * abs(zpos) * \[value fb_data.win_translate.v] / 2 )" expr2 zpos name Expression8 xpos 1542 ypos 845 } ColorMatrix { matrix { {{cam_data.world_matrix.0} {cam_data.world_matrix.1} {cam_data.world_matrix.2}} {{cam_data.world_matrix.4} {cam_data.world_matrix.5} {cam_data.world_matrix.6}} {{cam_data.world_matrix.8} {cam_data.world_matrix.9} {cam_data.world_matrix.10}} } name ColorMatrix1 xpos 1542 ypos 970 } Add { channels rgb value {{cam_data.world_matrix.3} {cam_data.world_matrix.7} {cam_data.world_matrix.11} 0} name Add1 xpos 1542 ypos 1052 } Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop1 xpos 1542 ypos 1476 disable {{!parent.use_focus_region}} } Dot { name Dot4 xpos 1576 ypos 2402 } push $N2a425a50 Crop { box {{store.fregion} {store.fregion} {store.fregion} {store.fregion}} reformat true crop false name Crop4 xpos 724 ypos 1771 disable {{!parent.use_focus_region}} } Unpremult { name Unpremult3 xpos 724 ypos 1851 } Expression { temp_name0 nx temp_expr0 red temp_name1 ny temp_expr1 green temp_name2 nz temp_expr2 blue expr0 "( nx * \[value cam_data.world_matrix.0] + ny * \[value cam_data.world_matrix.1] + nz * \[value cam_data.world_matrix.2] ) + \[value cam_data.world_matrix.3]" expr1 "( nx * \[value cam_data.world_matrix.4] + ny * \[value cam_data.world_matrix.5] + nz * \[value cam_data.world_matrix.6] ) + \[value cam_data.world_matrix.7]" expr2 "( nx * \[value cam_data.world_matrix.8] + ny * \[value cam_data.world_matrix.9] + nz * \[value cam_data.world_matrix.10] ) + \[value cam_data.world_matrix.11]" name Expression4 label "position revert" xpos 724 ypos 1933 } Premult { name Premult2 xpos 724 ypos 2027 } Merge2 { inputs 2 operation under name Merge1 xpos 724 ypos 2398 } Card { inputs 0 image_aspect false rows {{"img_dot.height * parent.lod"}} columns {{"img_dot.width * parent.lod"}} name ssmesh xpos 343 ypos 2317 } DisplaceGeo { inputs 2 source "rgb absolute" scale 1 filter_size 1 name DisplaceGeo xpos 343 ypos 2399 } FrameHold { first_frame {{parent.uv_ref_frame}} name FrameHold xpos 343 ypos 2479 disable {{!parent.uv_stabilize}} } ApplyMaterial { inputs 2 name ApplyMaterial1 xpos -100 ypos 2483 } Scene { display {{parent.display}} name gl_scene xpos -90 ypos 3072 } set N3ec94f70 [stack 0] WriteGeo { file_type abc name WriteGeo xpos 120 ypos 3093 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt2.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt2.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt2.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt2.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name right_pt xpos -600 ypos 3218 } CheckerBoard2 { inputs 0 format "256 256 0 0 256 256 1 square_256" name CheckerBoard1 xpos -789 ypos 2694 } Multiply { channels rgb value {{parent.crop_point_color.r} {parent.crop_point_color.g} {parent.crop_point_color.b} 1} name Multiply xpos -789 ypos 2822 } Clamp { channels rgba name Clamp1 xpos -789 ypos 2905 } Sphere { selectable false cast_shadow false receive_shadow false rows 10 columns 10 uniform_scale {{parent.crop_point_scale}} name Sphere1 xpos -789 ypos 2987 disable {{!show_crop}} } Dot { name Dot24 xpos -755 ypos 3065 } set N3ecbe4e0 [stack 0] Dot { name Dot25 xpos -456 ypos 3065 } TransformGeo { inputs 2 selectable false name TransformGeo2 xpos -490 ypos 3238 } Axis { inputs 0 display off selectable false translate {{"( global_math.pt1.x * cam_data.world_matrix.0(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.1(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.2(parent.fregion_ref_frame) ) + cam_data.world_matrix.3(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.4(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.5(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.6(parent.fregion_ref_frame) ) + cam_data.world_matrix.7(parent.fregion_ref_frame)"} {"( global_math.pt1.x * cam_data.world_matrix.8(parent.fregion_ref_frame) + global_math.pt1.y * cam_data.world_matrix.9(parent.fregion_ref_frame) + global_math.pt1.z * cam_data.world_matrix.10(parent.fregion_ref_frame) ) + cam_data.world_matrix.11(parent.fregion_ref_frame)"}} name left_pt xpos -899 ypos 3220 } push $N3ecbe4e0 TransformGeo { inputs 2 selectable false name TransformGeo1 xpos -789 ypos 3240 } Scene { inputs 2 selectable false name Scene1 xpos -480 ypos 3395 } ApplyMaterial { display off selectable false render_mode off name material_switch xpos -490 ypos 3523 disable true } push $N3ec94f70 Scene { inputs 2 name Scene2 xpos -90 ypos 3502 } Output { name Output1 xpos -100 ypos 4030 } Group { inputs 0 name inverseMatrix tile_color 0x337f4cff xpos 576 ypos 780 addUserKnob {20 tab_general l General} addUserKnob {1 knob_path} knob_path cam_data.world_matrix addUserKnob {26 ""} addUserKnob {41 id T id_assign.matrix} addUserKnob {26 ""} addUserKnob {7 determinant} determinant {{"\[value \[value knob_path].\[value id.0]] * ((\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])) - \[value \[value knob_path].\[value id.1]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]])) + \[value \[value knob_path].\[value id.2]] * ((\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]])-(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]]))"}} addUserKnob {26 ""} addUserKnob {41 cofactor T mtx_cofactor.matrix} addUserKnob {26 ""} addUserKnob {41 invMatrix T matrix_output.matrix} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.0} addUserKnob {26 l_DATE l "Date Modified" T 2011-11-28} addUserKnob {26 l_CHANGELOG l Changelog T "v1.0\n- reveal the calculate output of \n inverse matrix which is c44matrix\n and colormatrix doesn't show\n "} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } Matrix { inputs 0 matrix { {0 1 2} {4 5 6} {8 9 10} } name id_assign xpos -12 ypos 33 } Matrix { inputs 0 matrix { {{"(\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.8]]) - (\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.7]])"} {"(\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.2]]) - (\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.1]])"} {"(\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.5]]) - (\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.4]])"}} {{"(\[value \[value knob_path].\[value id.5]]*\[value \[value knob_path].\[value id.6]]) - (\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.8]])"} {"(\[value \[value knob_path].\[value id.8]]*\[value \[value knob_path].\[value id.0]]) - (\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.2]])"} {"(\[value \[value knob_path].\[value id.2]]*\[value \[value knob_path].\[value id.3]]) - (\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.5]])"}} {{"(\[value \[value knob_path].\[value id.3]]*\[value \[value knob_path].\[value id.7]]) - (\[value \[value knob_path].\[value id.4]]*\[value \[value knob_path].\[value id.6]])"} {"(\[value \[value knob_path].\[value id.6]]*\[value \[value knob_path].\[value id.1]]) - (\[value \[value knob_path].\[value id.7]]*\[value \[value knob_path].\[value id.0]])"} {"(\[value \[value knob_path].\[value id.0]]*\[value \[value knob_path].\[value id.4]]) - (\[value \[value knob_path].\[value id.1]]*\[value \[value knob_path].\[value id.3]])"}} } name mtx_cofactor xpos 86 ypos 32 } Matrix { inputs 0 matrix { {{"cofactor.0 == 0 || determinant == 0 ? 0 : cofactor.0/determinant"} {"cofactor.1 == 0 || determinant == 0 ? 0 : cofactor.1/determinant"} {"cofactor.2 == 0 || determinant == 0 ? 0 : cofactor.2/determinant"}} {{"cofactor.3 == 0 || determinant == 0 ? 0 : cofactor.3/determinant"} {"cofactor.4 == 0 || determinant == 0 ? 0 : cofactor.4/determinant"} {"cofactor.5 == 0 || determinant == 0 ? 0 : cofactor.5/determinant"}} {{"cofactor.6 == 0 || determinant == 0 ? 0 : cofactor.6/determinant"} {"cofactor.7 == 0 || determinant == 0 ? 0 : cofactor.7/determinant"} {"cofactor.8 == 0 || determinant == 0 ? 0 : cofactor.8/determinant"}} } name matrix_output xpos 186 ypos 33 } end_group Camera { inputs 0 rotate {0 0 {-parent.cam_winroll}} win_translate {{parent.cam_win_translate} {parent.cam_win_translate}} win_scale {{parent.cam_win_scale} {parent.cam_win_scale}} name fb_data xpos -340 ypos 2087 } NoOp { inputs 0 name store xpos -843 ypos 28 addUserKnob {20 User} addUserKnob {22 fn T "### level define ###\n\ndef getLevel() :\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\tggLevel = nuke.root()\n\telse :\n\t\tnodePath = nuke.thisNode().fullName().split('.')\n\t\tnodePath.pop()\n\t\tggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel\n\n### sample z in 2D ###\n\ndef sample2d() :\n\tthisGRP = nuke.thisGroup()\n\tif thisGRP\['sample_z_status'].value() == '\[ ON ]' :\n\t\tsam_co = thisGRP\['sample_point'].getValue()\n\t\tzdata = nuke.toNode('sam_dot').sample('blue', sam_co\[0], sam_co\[1]) * -1\n\t\tthisGRP\['fregion_define_z'].setValue( zdata )" +STARTLINE} addUserKnob {15 fregion} fregion {{parent.focus_region} {parent.focus_region} {parent.focus_region} {parent.focus_region}} } NoOp { inputs 0 name global_math xpos -842 ypos -43 addUserKnob {20 User} addUserKnob {7 hratio} hratio {{"cam_data.haperture / cam_data.focal"}} addUserKnob {7 maxwidth} maxwidth {{"hratio * parent.fregion_define_z"}} addUserKnob {7 maxheight} maxheight {{"hratio * parent.fregion_define_z * ( img_dot.height / img_dot.width )"}} addUserKnob {13 pt1} pt1 {{"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.x(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + \n( ( ( maxheight * ( parent.focus_region.y(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} addUserKnob {13 pt2} pt2 {{"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.0 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.1 ) * fb_data.win_scale.u + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.u /2 )"} {"( ( ( maxwidth * ( parent.focus_region.r(parent.fregion_ref_frame) / img_dot.width) ) - ( maxwidth / 2 ) ) * fb_data.world_matrix.4 + ( ( ( maxheight * ( parent.focus_region.t(parent.fregion_ref_frame) / img_dot.height ) ) - ( maxheight / 2 ) ) * 1 / \[value root.format.pixel_aspect] ) * fb_data.world_matrix.5 ) * fb_data.win_scale.v + ( hratio * abs(parent.fregion_define_z) * fb_data.win_translate.v /2 )"} {-parent.fregion_define_z}} } end_group Scene { inputs 2 name Scene8 xpos -821 ypos 4184 } push 0 ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type off MB_channel none name ScanlineRender5 xpos -831 ypos 4306 } Dot { name Dot25 selected true xpos -797 ypos 4543 } ================================================ FILE: NukeSurvivalToolkit/nk_files/NST_STMap_Keying_Setup.nk ================================================ set cut_paste_input [stack 0] ColorBars { inputs 0 name ColorBars1 selected true xpos 2 ypos -334 } Blur { size 150 name Blur1 label "size \[value size]" selected true xpos 2 ypos -262 } Dot { name Dot2 tile_color 0xcc804e00 label plate note_font_size 30 selected true xpos 36 ypos -184 } set N12350460 [stack 0] Colorspace { colorspace_out YCbCr name Colorspace1 label "input \[value colorspace_in]\noutput \[value colorspace_out]" selected true xpos 2 ypos -121 } Shuffle { red green green blue blue black name Shuffle1 label "in \[value in]-->out \[value out]" selected true xpos 2 ypos -73 } Dot { name Dot3 tile_color 0x9e3c6300 selected true xpos 36 ypos -10 } set N1456efa0 [stack 0] Dot { name Dot4 tile_color 0x9e3c6300 selected true xpos 264 ypos -10 } push $N1456efa0 push $N12350460 Dot { name Dot1 tile_color 0xcc804e00 selected true xpos -110 ypos -60 } BlinkScript { inputs 2 recompileCount 1 ProgramGroup 1 KernelDescription "2 \"InverseSTKernel\" iterate pixelWise 79737837f0b8f5ef5ba9dd8c86c9e76f184ef0da76c94577b5431d3e3e08b063 3 \"src\" Read Point \"stmap\" Read Point \"dst\" Write Random 1 \"resolution\" Float 2 AAAAAAAAAAA= 1 \"resolution\" 2 1 0" kernelSource "// Original Kernel by Mads Hagbarth, modified to use STMaps by Erwan Leroy\n\nkernel InverseSTKernel : ImageComputationKernel\n\{\n Image src;\n Image stmap;\n Image dst;\n\n param:\n float2 resolution;\n\n void process() \{\n float2 uv;\n uv.x = stmap().x * resolution.x - 0.5f;\n uv.y = stmap().y * resolution.y - 0.5f;\n //always make sure that you don't write outside bounds\n //as it will usually crash nuke.\n if (dst.bounds.inside(uv.x,uv.y)) \{ \n dst(uv.x,uv.y) = src(); \n \}\n \}\n\};" useGPUIfAvailable false rebuild "" InverseSTKernel_resolution {{width} {height}} rebuild_finalise "" name BlinkScript1 selected true xpos 2 ypos 60 } Roto { output alpha cliptype none replace true curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier1 512 bezier {{cc {f 8192} {px 1 {xc0000000 0} {x440d8000 x44024000} {x40000000 0} {xc1a80000 x41000000} {x442ec000 x43f70000} {x41a80000 xc1000000} {xc0800000 x41d80000} {x4440c667 x43bf0000} {x40800000 xc1d80000} {x40a00000 x41400000} {x4441c000 x43928000} {xc0a00000 xc1400000} {x41b80000 x40000000} {x442b0000 x43750000} {xc1b80000 xc0000000} {x41500000 xc1500000} {x440c0000 x438d8000} {xc1500000 x41500000} {0 xc1700000} {x43f60000 x43b48000} {0 x41700000} {0 0} {x43fe8000 x43dc8000} {0 0}}} {cc {f 8192} {px 1 {xc0000000 0} {0 0} {x40000000 0} {xc1a80000 x41000000} {x421903f0 x42c8da30} {x41a80000 xc1000000} {xc0800000 x41d80000} {x431a824c x41b71e70} {x40800000 xc1d80000} {x40a00000 x41400000} {x433eb874 xc29ef132} {xc0a00000 xc1400000} {x41b80000 x40000000} {0 0} {xc1b80000 xc0000000} {x41500000 xc1500000} {0 0} {xc1500000 x41500000} {0 xc1700000} {0 0} {0 x41700000} {0 0} {0 0} {0 0}}}} {tx 1 x441e1000 x43bcc000} {a osw x41200000 osf 0 str 1 spx x44800000 spy x44428000 sb 1 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {1024 778} colorOverlay {0 0 0 0} lifetime_type "all frames" motionblur_shutter_offset_type centred source_black_outside true link_output false name Roto1 selected true xpos 2 ypos 138 } Shuffle { red alpha green alpha blue alpha name Shuffle2 label "in \[value in]-->out \[value out]" selected true xpos 2 ypos 174 } STMap { inputs 2 uv rgb name STMap1 selected true xpos 230 ypos 174 } push $N12350460 Dot { name Dot5 tile_color 0xcc804e00 selected true xpos 419 ypos -184 } Merge2 { inputs 2 operation mask bbox B name Merge1 selected true xpos 385 ypos 231 } ================================================ FILE: NukeSurvivalToolkit/nk_files/NST_SparkyExampleScene.nk ================================================ BackdropNode { inputs 0 name BackdropNode1 tile_color 0x7171c600 label "Cam/Axis setup. \nDeep compatible!" note_font "Verdana Bold Italic Bold Italic" note_font_size 80 selected true xpos -2908 ypos -539 bdwidth 1592 bdheight 1334 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x8e8e3800 label "2D Setup" note_font_size 80 selected true xpos -3529 ypos -534 bdwidth 428 bdheight 366 } push $cut_paste_input Camera2 { translate {{curve x1001 930 x1098 524.2270508 x1200 9.730261803} {curve x1001 520 x1098 895.1622314 x1200 1183.430542} {curve x1001 3504 x1098 1449.996826 x1200 1276.928467}} rotate {{curve x1001 4.3 x1098 19.60003662 x1200 9.119994164} {curve x1001 30.2 x1098 84.99999237 x1200 132.1900024} {curve x1001 0 x1098 -3.398572801e-07 x1200 -8.647048162e-07}} focal 24 haperture 36 vaperture 24 near 1 far 100000 name Camera1 selected true xpos -2521 ypos -35 } Dot { name Dot3 selected true xpos -2497 ypos 85 } set N4aa30170 [stack 0] Dot { name Dot4 selected true xpos -2135 ypos 85 } set N49cf22b0 [stack 0] Dot { name Dot2 selected true xpos -2135 ypos 253 } set N49c97eb0 [stack 0] RotoPaint { inputs 0 curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44700000 x44070000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush3 512 catmullrom {cc {f 2080} {px x4494e000 {x41b00000 x43dc0000 1} {x41c80000 x43dc0000 1} {x42100000 x43dc0000 1} {x427c0000 x43dc0000 1} {x42dc0000 x43da8000 1} {x43320000 x43d90000 1} {x437a0000 x43d58000 1} {x439f0000 x43d58000 1} {x43ce8000 x43d58000 1} {x43f58000 x43d58000 1} {x4405c000 x43d58000 1} {x44110000 x43d58000 1} {x44210000 x43d58000 1} {x44330000 x43d38000 1} {x4444c000 x43d38000 1} {x44518000 x43d38000 1} {x445e4000 x43d38000 1} {x44688000 x43d38000 1} {x44744000 x43d38000 1} {x4481e000 x43d38000 1} {x44862000 x43d38000 1} {x44868000 x43d38000 1} {x4486e000 x43d38000 1} {x448ce000 x43d38000 1} {x4493a000 x43d38000 1} {x44942000 x43d38000 1} {x449a8000 x43d38000 1} {x44a06000 x43d38000 1} {x44a82000 x43d38000 1} {x44b02000 x43d38000 1} {x44b62000 x43d38000 1} {x44bac000 x43d38000 1} {x44c12000 x43d38000 1} {x44c8c000 x43d38000 1} {x44cfa000 x43d38000 1} {x44d74000 x43d38000 1} {x44df6000 x43d58000 1} {x44dfc000 x43d58000 1} {x44e68000 x43d58000 1} {x44ec8000 x43d58000 1} {x44ece000 x43d58000 1} {x44f12000 x43d58000 1} {x44f50000 x43d58000 1} {x44f94000 x43d58000 1} {x44fbc000 x43d58000 1} {x44fd2000 x43d58000 1}}} {tx x4494e000 x448917a7 x43d54000} {a r x3e99999a g x3dd29ebb b x3bc8a0e7 ro 0 go 0 bo 0 ao 0 bs x4402c000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x447a4000 ltm x447a4000 tt x41880000}} {cubiccurve Brush2 512 catmullrom {cc {f 2080} {px x4494e000 {x41980000 x43700000 1} {x41e80000 x436c0000 1} {x42000000 x43690000 1} {x42a00000 x43620000 1} {x433d0000 x43550000 1} {x439d0000 x43510000 1} {x43fc8000 x43510000 1} {x4438c000 x43510000 1} {x443b8000 x43510000 1} {x447cc000 x43580000 1} {x44a4a000 x435b0000 1} {x44b5a000 x435b0000 1} {x44b7c000 x435b0000 1} {x44d14000 x43580000 1} {x44d88000 x43580000 1} {x44d82000 x43580000 1} {x44d74000 x43580000 1} {x44cde000 x43510000 1} {x44a88000 x434e0000 1} {x44304000 x43400000 1} {xc1000000 x431e0000 1} {xc405c000 x42e40000 1} {xc4484000 x429a0000 1} {xc4524000 x428c0000 1} {xc44f0000 x428c0000 1} {xc4440000 x428c0000 1} {xc42f8000 x428c0000 1} {xc40bc000 x428c0000 1} {xc3b18000 x428c0000 1} {xc2d60000 x42a00000 1} {xc2bc0000 x42a00000 1} {x43430000 x42b40000 1} {x445e4000 x430a0000 1} {x44c72000 x43360000 1} {x450ee000 x434a0000 1} {x452a5000 x434e0000 1} {x4532a000 x43470000 1} {x45330000 x43400000 1} {x4532a000 x43400000 1} {x4530e000 x43400000 1} {x452d5000 x43400000 1} {x45272000 x43390000 1} {x45264000 x43390000 1} {x451f8000 x432f0000 1} {x4514a000 x43250000 1} {x45060000 x43170000 1} {x44e70000 x43110000 1} {x44bf0000 x430d0000 1} {x4449c000 x43030000 1} {x435b0000 x42d00000 1} {x43510000 x42d00000 1} {xc2840000 x42a60000 1} {xc3030000 x42920000 1} {xc30d0000 x42920000 1} {xc31b0000 x428c0000 1} {xc3250000 x428c0000 1}}} {tx x4494e000 x44640c92 x431ee000} {a r x3e000080 b 0 ro 0 go 0 bo 0 ao 0 bs x4402c000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x447a4000 ltm x447a4000 tt x41880000}} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {px x4494e000 {xc2f20000 x4481e000 1} {xc2ea0000 x4481e000 1} {xc2dc0000 x44816000 1} {xc1e80000 x44802000 1} {xc1b00000 x44802000 1} {x43220000 x447cc000 1} {x432c0000 x447cc000 1} {x43d88000 x44788000 1} {x44138000 x4477c000 1} {x4417c000 x4477c000 1} {x44374000 x44770000 1} {x44832000 x44788000 1} {x449d8000 x447a4000 1} {x44b38000 x447cc000 1} {x44b46000 x447cc000 1} {x44c6a000 x447f8000 1} {x44d60000 x44810000 1} {x44e40000 x44816000 1} {x44ef8000 x447f8000 1} {x44f50000 x447dc000 1} {x44f50000 x447cc000 1} {x44f4a000 x447cc000 1} {x44f2e000 x447b4000 1} {x44e02000 x44770000 1} {x44aa4000 x4472c000 1} {x44210000 x446a4000 1} {xc27c0000 x445ac000 1} {xc3eb8000 x44528000 1} {xc3ef0000 x44528000 1} {xc3fc8000 x44518000 1} {xc40bc000 x444fc000 1} {xc4078000 x444f0000 1} {xc3fa8000 x444e0000 1} {xc3d58000 x444d4000 1} {xc3c78000 x444c8000 1} {xc3950000 x444b8000 1} {xc3870000 x444b8000 1} {xc3838000 x444b8000 1} {xc2e40000 x444a0000 1} {xc2980000 x444a0000 1} {x42fe0000 x444a0000 1} {x44320000 x444d4000 1} {x44ad2000 x4450c000 1} {x44b02000 x4450c000 1} {x44f28000 x44518000 1} {x450a7000 x44518000 1} {x450e1000 x444fc000 1} {x450e1000 x444f0000 1} {x450a0000 x444c8000 1} {x45041000 x444b8000 1} {x44f4a000 x444ac000 1} {x44d74000 x444ac000 1} {x44d2a000 x444ac000 1} {x44b92000 x444c8000 1} {x44b62000 x444c8000 1} {x44a88000 x444e0000 1} {x43dc0000 x44534000 1} {xc3540000 x44540000 1} {xc3730000 x44540000 1} {xc4154000 x444fc000 1} {xc41cc000 x444f0000 1} {xc41cc000 x444e0000 1} {xc40f4000 x444d4000 1} {xc3b68000 x444ac000 1} {xc3b00000 x444ac000 1} {xc39d8000 x444a0000 1} {xc33d0000 x44490000 1} {x42100000 x44490000 1} {x43a78000 x444a0000 1} {x4461c000 x444a0000 1} {x44bb4000 x44468000 1} {x44e62000 x44430000 1} {x44f86000 x443fc000 1} {x44fc4000 x443e0000 1} {x44fd2000 x443d0000 1} {x45022000 x44380000 1} {x45033000 x44364000 1} {x45011000 x44364000 1} {x44d36000 x44374000 1} {x445e4000 x44374000 1} {x43c10000 x4433c000 1} {x43ba0000 x44330000 1} {x41980000 x442f8000 1} {xc2a60000 x442dc000 1} {xc2dc0000 x442dc000 1} {xc3030000 x442dc000 1} {xc34a0000 x442f8000 1} {xc3580000 x442f8000 1} {xc3540000 x442f8000 1} {xc3510000 x442f8000 1} {xc34a0000 x442f8000 1} {xc33d0000 x442ec000 1} {xc2b40000 x442d0000 1} {x43820000 x44298000 1} {x444ac000 x4427c000 1} {x444e0000 x4427c000 1} {x44a66000 x442a8000 1} {x44d36000 x442a8000 1} {x44e5c000 x44298000 1} {x44e70000 x4428c000 1}}} {tx x4494e000 x44319333 x44519148} {a r x3ea96ec8 g x3f24a226 ro 0 go 0 bo 0 ao 0 bs x4402c000 bu 1 str 1 spx x44700000 spy x44070000 sb 1 ltn x447a4000 ltm x447a4000 tt x41880000}}}}}} toolbox {brush { { selectAll r 0.3 g 0.102842 b 0.0061227 bs 523 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush r 0.3 g 0.102842 b 0.0061227 bs 523 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 1191 ltm 1191 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_paint_color {0.3000000119 0.1028420031 0.006122699939 1} toolbar_brush_size 523 toolbar_brush_hardness 0.200000003 toolbar_lifetime_type single toolbar_lifetime_start 1191 toolbar_lifetime_end 1191 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {960 540} color {0.3000000119 0.1028418168 0.006122696679 1} colorOverlay {0 0 0 0} lifetime_type "all frames" lifetime_start 1001 lifetime_end 1001 brush_size 523 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint1 tile_color 0xff selected true xpos -1541 ypos -111 } Sphere { translate {57.00060513 560.261795 1277.047357} scaling {1 0.6 1} uniform_scale 9000 name Sphere1 tile_color 0xff selected true xpos -1541 ypos 81 } push $N49cf22b0 CheckerBoard2 { inputs 0 boxsize {120 60} name CheckerBoard2 selected true xpos -2193 ypos -288 postage_stamp false } Card2 { rows 1 columns 1 rotate {90 0 0} scaling {6 24 1} uniform_scale 2000 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card1 tile_color 0xff selected true xpos -2193 ypos -114 } CheckerBoard2 { inputs 0 boxsize {130 108} centerlinewidth 0 name CheckerBoard1 selected true xpos -1981 ypos -291 postage_stamp false } Reflection { reflection_value 0.1 name Reflection1 tile_color 0xff selected true xpos -1981 ypos -207 } set N34df3520 [stack 0] Cube { translate {-368 465 166} scaling {0.5 1 1} uniform_scale 1000 name Cube3 tile_color 0xff selected true xpos -2089 ypos -111 } push $N34df3520 Cube { rows 1 columns 1 separate_faces false translate {-700 504 2040} scaling {0.6 0.7 0.7} uniform_scale 2000 name Cube1 tile_color 0xff selected true xpos -1857 ypos -116 } push $N34df3520 Cube { rows 1 columns 1 translate {-540 332 1010} scaling {0.6 0.7 0.7} uniform_scale 1000 name Cube2 tile_color 0xff selected true xpos -1981 ypos -111 } Scene { inputs 6 display textured+wireframe name Scene1 tile_color 0xff selected true xpos -1971 ypos 61 } set N34de79f0 [stack 0] push 0 add_layer {reflection reflection.red reflection.green reflection.blue reflection.alpha} RayRender { inputs 3 output_shader_vectors true AOV_Reflection reflection name RayRender1 tile_color 0xff selected true xpos -1761 ypos 249 } set N49e28390 [stack 0] push $N49e28390 Blur { size 55 maskChannelInput -rgba.alpha name Blur1 tile_color 0xff selected true xpos -1761 ypos 291 } Shuffle { in reflection name Shuffle1 label "\[value in] \[ expr \{ \[value out2] == \"none\" ? \" \" : \[concat -> \[value out2]] \}]" note_font_size 21 note_font_color 0xffffffff selected true xpos -1761 ypos 355 } Merge2 { inputs 2 operation plus name Merge3 tile_color 0xff selected true xpos -1541 ypos 369 } Dot { name Dot1 selected true xpos -1507 ypos 469 } EXPTool { mode Stops red -1 green -1 blue -1 name Exposure2 tile_color 0xff selected true xpos -1761 ypos 465 } push $N49c97eb0 push $N34de79f0 push 0 ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type distance name ScanlineRender1 selected true xpos -1981 ypos 249 } DeepRecolor { inputs 2 name DeepRecolor1 tile_color 0xff selected true xpos -1981 ypos 465 } Axis2 { inputs 0 translate {-92 1202 1345} name Axis1 selected true xpos -2851 ypos 229 } push $N4aa30170 Group { inputs 2 name Sparky3D tile_color 0xbd4600ff label "\[if \{\[value ROrP]==false\} \{return \"Render Mode\"\} \{return \"!! PARTICLE MODE !! \\nENABLED\"\}]" note_font "Bitstream Vera Sans Bold Bold" selected true xpos -2531 ypos 243 addUserKnob {20 SparkTab l "Sparky Settings"} addUserKnob {41 start_frame l "Initial Frame" T SparkEmit.start_frame} addUserKnob {7 EmissionRate l "Emission Amount" R 0 100} EmissionRate {{curve(((frame-1001)%(1015-1001+1))+1001) K x1001 0 S 400 x1004 0 x1005 12 175 x1008 20 x1012 0 x1015 0}} addUserKnob {22 Refresh l "Refresh Sim" T "import random\n\ni = int(nuke.expression('random()')*1000)\nn = nuke.thisNode()\nhs = n\['HiddenSeed'].value()\n\nif hs == i:\n n\['HiddenSeed'].setValue(hs+1)\nelse :\n n\['HiddenSeed'].setValue(i)" +STARTLINE} addUserKnob {26 text l "" +STARTLINE T "\t\tClick Refresh if modifying values doesn't show any changes."} addUserKnob {3 HiddenSeed +INVISIBLE} HiddenSeed 816 addUserKnob {26 ""} addUserKnob {26 emittertext l "" +STARTLINE T "Emitter Settings"} addUserKnob {13 Direction t "Set the initial velocity applied to the particles. This will orient the sparks in 3D space."} Direction {100 50 0} addUserKnob {7 MaxLife l "Particle Life" t "Maximum amount of frames the particles will live for." R 10 100} MaxLife 60 addUserKnob {7 LifeRange l "Life Range" t "Randomizes the Life Range of the particles." R 0 2} LifeRange 0.75 addUserKnob {3 seed l "Particle Seed" t "Randomizes the simulation."} seed 123 addUserKnob {26 ""} addUserKnob {7 ParticleSize l "Particle Size" t "Change Particle Size" R 1 5} ParticleSize 2 addUserKnob {7 Explosivity t "Changes how much influence the initial force has on the particles." R 0 100} Explosivity 55 addUserKnob {7 Scatter t "Adds some randomness between particles." R 0 100} Scatter 100 addUserKnob {41 Softness l "Particle Softness" T CustomKnobs.Softness} addUserKnob {26 ""} addUserKnob {4 ROption l "Render Options" t "Multi Scanline: Output is a ScanlineRender with motionblur enabled. Can be DeepMerged\nVectorBlur: 2D motionblur added post-render. Can get rid of sample issues, but is not Deep compatible." M {"Multi Scanline" VectorBlur "" ""}} addUserKnob {41 format l Format T RootFormatSetup.format} addUserKnob {14 Overscan R 0 100} Overscan 100 addUserKnob {6 ROrP l "Output As Particles" t "Check this to output Particles instead of a 2D render.\nIt can then be plugged into a 3D scene." +STARTLINE} addUserKnob {6 OutputDeep l "Output Deep" t "Warning: Will output in Multi-Scanlinde mode only. Doesn't have any effect if \"Output As Particles is selected\"." -STARTLINE} addUserKnob {20 Presets} addUserKnob {4 AnimPreset l "Animation Presets" t "None: This wont do anything. Serves as safety to not enable a preset accidentally\nSingle Hit Heavy: Heavy hit with a double pop.\nSingle Hit Light : Light pop of sparks.\nWelding : Expression that will mimic a natural welding feeling.\nWavy : Constant sim with some strong variation in birth rate.\nConstant : Softer variation than the Wavy preset.\nLoopy : Loops the same pop of Sparks." M {None "Single Hit Heavy" "Single Hit Light" Welding Wavy Constant Loopy "" "" "" "" ""}} AnimPreset Loopy addUserKnob {22 Apply l "Apply Preset" t " " T "def checkPreset():\n preset = int(nuke.thisNode()\['AnimPreset'].getValue())\n if preset ==0:\n return False\n else:\n return preset\n\ndef checkFrame():\n InitFrame = nuke.getInput(\"Enter Initial Frame\", '1001')\n if InitFrame:\n try:\n InitFrame = int(InitFrame)\n return InitFrame\n except ValueError:\n nuke.message(\"Not a valid frame number\")\n return False\n\n\nif checkPreset() == False:\n nuke.ask(\"No preset selected\")\nelse:\n n=nuke.thisNode()\['EmissionRate']\n s=int(nuke.thisNode()\['AnimPreset'].getValue())\n cf=checkFrame()\n if cf!=False and cf!=None:\n if s == 1: \n nuke.thisNode()\['start_frame'].setValue(cf)\n n.clearAnimated()\n n.setAnimated()\n sCurve = '\{curve K x%v1 0 S 400 x%v2 0 12 x%v3 175 x%v4 20 0\}'\n sCurve=sCurve.replace(\"%v1\",str(cf))\n sCurve=sCurve.replace(\"%v2\",str(cf+3))\n sCurve=sCurve.replace(\"%v3\",str(cf+6))\n sCurve=sCurve.replace(\"%v4\",str(cf+12))\n n.fromScript(sCurve)\n nuke.message(\"Applied Single Hit Heavy Preset\")\n elif s == 2:\n nuke.thisNode()\['start_frame'].setValue(cf)\n n.clearAnimated()\n n.setAnimated()\n sCurve = '\{curve K x%v1 0 S 140 x%v2 0\}'\n sCurve=sCurve.replace(\"%v1\",str(cf))\n sCurve=sCurve.replace(\"%v2\",str(cf+3))\n n.fromScript(sCurve)\n nuke.message(\"Applied Single Hit Light Preset\")\n elif s == 3:\n nuke.thisNode()\['start_frame'].setValue(cf)\n n.clearAnimated()\n n.setExpression(\"max(0,(random(frame+seed)*120*((sin(frame+seed)+1)*0.5)-12))*3\")\n nuke.message(\"Applied Welding Preset\")\n elif s == 4:\n nuke.thisNode()\['start_frame'].setValue(cf)\n n.clearAnimated()\n n.setExpression(\"random(frame+seed)*120*((sin(frame+seed)+1)*0.5)\")\n nuke.message(\"Applied Wavy Preset\")\n elif s == 5:\n nuke.thisNode()\['start_frame'].setValue(cf)\n n.clearAnimated()\n n.setExpression(\"random(frame/5+seed)*100+60\")\n nuke.message(\"Applied Constant Preset\")\n else:\n nuke.thisNode()\['start_frame'].setValue(cf)\n n.clearAnimated()\n n.setAnimated()\n sCurve = '\{curve(((frame-%v1)%(%v6-%v1+1))+%v1) K x%v1 0 S 400 x%v2 0 x%v3 12 175 x%v4 20 x%v5 0 x%v6 0\}'\n sCurve=sCurve.replace(\"%v1\",str(cf))\n sCurve=sCurve.replace(\"%v2\",str(cf+3))\n sCurve=sCurve.replace(\"%v3\",str(cf+4))\n sCurve=sCurve.replace(\"%v4\",str(cf+7))\n sCurve=sCurve.replace(\"%v5\",str(cf+11))\n sCurve=sCurve.replace(\"%v6\",str(cf+14))\n n.fromScript(sCurve)\n nuke.message(\"Applied Loopy Preset\")\n\n" +STARTLINE} addUserKnob {20 Advanced l "Advanced Settings"} addUserKnob {7 TVelocity l "Transfer Velocity"} TVelocity 0.5 addUserKnob {7 TWindow l "Transfer window" R 0 5} TWindow 2 addUserKnob {7 Spread l "Emission Spread"} Spread 0.1 addUserKnob {26 ""} addUserKnob {41 samples l "Scanline Samples" T MultiSampleRender.samples} addUserKnob {7 Shutter} Shutter 0.5 addUserKnob {41 shutteroffset l "Shutter Offset" T MultiSampleRender.shutteroffset} addUserKnob {41 shuttercustomoffset l "" -STARTLINE T MultiSampleRender.shuttercustomoffset} addUserKnob {20 Instructions} addUserKnob {26 info l "" +STARTLINE T "Sparky v1.2\n\nEasy to use particle setup for Sparks.\n\nOutputs an image by default, but can be configured to be rendered through a specific Camera or\nto output as particles, which allows you to plug Sparky into a 3D scene.\n\nIf you wish to use the 3D version of this Gizmo, simply plug your Camera and plug an Axis to \nmove and place the sparks where you need them.\n\nFor more information about presets and changelogs, head to the Nukepedia page!"} } BackdropNode { inputs 0 name BackdropNode9 tile_color 0x557fffff label "Welcome Curious Comper!\n\nI hope you'll find answers\nto what you are looking for\ninside here! " note_font "Bitstream Vera Sans" note_font_size 111 xpos -2486 ypos -861 bdwidth 2780 bdheight 1970 } ColorWheel { inputs 0 format "256 256 0 0 256 256 1 square_256" gamma 0.45 name ColorWheel1 xpos -1170 ypos -537 } Saturation { saturation 0 mode Maximum name Saturation1 xpos -1170 ypos -427 } FilterErode { channels all size {{abs(parent.CustomKnobs.Softness)}} filter gaussian name ErodeSoft xpos -1170 ypos -384 } Reformat { type scale scale 0.125 resize distort black_outside true name Reformat2 xpos -1170 ypos -325 } Grade { white {0.9 0.35 0.085 1} name Grade1 xpos -1170 ypos -267 } BlendMat { operation max surfaceblend modulate name BlendMat1 xpos -971 ypos -267 } Noise { inputs 0 size 750 zoffset {{frame/5+CustomKnobs.time_offset}} octaves 6 lacunarity 1.45 gain 0.6 center {1440 810} name Noise6 xpos -676 ypos -548 } set N49e114c0 [stack 0] Sphere { name Sphere1 xpos -770 ypos -456 } push $N49e114c0 Sphere { translate {{parent.input1.translate} {parent.input1.translate} {parent.input1.translate}} rotate {{parent.input1.rotate} {parent.input1.rotate} {parent.input1.rotate}} scaling {{parent.input1.scaling} {parent.input1.scaling} {parent.input1.scaling}} name Sphere2 xpos -575 ypos -460 } Switch { inputs 2 which {{"!\[exists parent.input1]"}} name Switch3 xpos -676 ypos -342 } push 0 ParticleEmitter { inputs 3 start_frame 1001 emit_from faces randomize_type "randomized direction" rate {{parent.EmissionRate}} rate_variation 0.5 rate_channel rgba.red lifetime {{parent.MaxLife}} lifetime_variation {{parent.LifeRange}} halflife {{lifetime/2.5}} velocity {{"!\[exists parent.input1]?7.5+(10*Explosivity/100):7.5+(10*Explosivity/100)*((parent.input1.uniform_scale-1)*0.25+1)"}} velocity_variation {{0.125+abs((min(100,parent.Scatter)*0.035))}} size {{"!\[exists parent.input1]?max(0.1,parent.ParticleSize):max(0.01,parent.ParticleSize)*((parent.input1.uniform_scale-1)*0.25+1)"}} size_variation 1.6 mass {{"!\[exists parent.input1]?0.5+(1-(clamp(parent.Explosivity,0,100))/100)*3.5:(0.5+((1-(clamp(parent.Explosivity,0,100))/100)*3.5))*(((parent.input1.uniform_scale-1)*0.25)+1)"}} mass_variation {{1.5*(clamp(parent.Scatter,0,100))/100}} transfer_velocity {{parent.TVelocity}} transfer_window {{parent.TWindow}} spread {{parent.Spread}} color {0.9 0.35 0.085 1} seed {{CustomKnobs.time_offset}} name SparkEmit xpos -676 ypos -267 } ParticleDirectionalForce { strength {{"parent.Direction*(\[exists parent.input1]?1+(parent.input1.uniform_scale-1)*0.85:1)"} {"parent.Direction*(\[exists parent.input1]?1+(parent.input1.uniform_scale-1)*0.85:1)"} {"parent.Direction*(\[exists parent.input1]?1+(parent.input1.uniform_scale-1)*0.85:1)"}} max_age {{1/(max(1,parent.SparkEmit.lifetime*1.25))}} name ParticleDirectionalForce selected true xpos -676 ypos -120 } ParticleDrag { drag 0.6 name ParticleDrag xpos -676 ypos -36 } ParticleTurbulence { strength {2 0.85 4} scale {5 10 20} name ParticleTurbulence xpos -676 ypos 22 } ParticleDrag { drag 0.1 name ParticleDrag2 xpos -676 ypos 86 } ParticleGravity { to {0 {"!\[exists parent.input1]?-3:-1-(2*(parent.input1.uniform_scale))"} 0} min_age 0.1 name ParticleGravity xpos -676 ypos 148 } ParticleCurve { curves {r {curve L x0.04740819708 1 S l x0.4987964034 0.7955223322 x1 0} g {curve L x0.04740819708 1 S l x0.4987964034 0.7955223322 x1 0} b {curve L x0.04740819708 1 S l x1 0} a {curve L x0.04740819708 1 S l x0.4939824343 0.7353233099 x1 0} size {} mass {}} seed {{HiddenSeed}} name FadeOut xpos -676 ypos 201 } ParticleSettings { name ParticleSettings1 xpos -676 ypos 265 } set N37869af0 [stack 0] Dot { name Dot2 xpos -924 ypos 711 } Dot { name Dot1 xpos -924 ypos 831 } Input { inputs 0 name Camera xpos -1457 ypos 312 } Dot { name Dot3 xpos -1423 ypos 551 } Camera2 { inputs 0 translate {0 -100 1200} focal 20 haperture 24 vaperture 13.5 near 1 far 1000000 name Default2DCam xpos -1217 ypos 210 } Switch { inputs 2 which {{"\[exists parent.input0]"}} name Switch1 xpos -1227 ypos 548 } set N37891e70 [stack 0] push $N37869af0 Dot { name Dot6 xpos -642 ypos 516 } set N37898940 [stack 0] Constant { inputs 0 name Constant1 xpos -161 ypos 316 } Reformat { resize none name RootFormatSetup xpos -161 ypos 406 addUserKnob {20 User} addUserKnob {14 Overscan R 0 100} Overscan {{parent.Overscan}} } Dot { name Dot4 xpos -127 ypos 551 } set N378b0eb0 [stack 0] ScanlineRender { inputs 3 conservative_shader_sampling false antialiasing high overscan {{parent.RootFormatSetup.Overscan}} spatial_jitter 0.1 motion_vectors_type velocity name NO_Motionblur xpos -449 ypos 548 } VectorBlur2 { channels rgba uv forward alpha -rgba.alpha scale 0.5 motion_falloff 0.65 offset 0 grow_bbox 40 normalize false name MBlur xpos -448 ypos 708 } push $N37891e70 Dot { name Dot48 xpos -1192 ypos 640 } push $N37898940 push $N378b0eb0 Dot { name Dot5 xpos -126 ypos 640 } ScanlineRender { inputs 3 conservative_shader_sampling false antialiasing high ambient {{parent.RootFormatSetup.Overscan}} samples 30 shutter {{parent.Shutter}} spatial_jitter 0.025 motion_vectors_type velocity name MultiSampleRender xpos -676 ypos 637 } Switch { inputs 2 which {{OutputDeep==1?0:ROption}} name Switch2 xpos -677 ypos 712 } Switch { inputs 2 which {{parent.ROrP}} name RorP xpos -677 ypos 827 } Output { name Output xpos -677 ypos 1014 } NoOp { inputs 0 name CustomKnobs tile_color 0xff9fff xpos -90 ypos -264 addUserKnob {20 User} addUserKnob {7 Softness R 0 100} Softness 10 addUserKnob {3 time_offset l Seed} time_offset {{parent.seed}} } Input { inputs 0 name Axis xpos -358 ypos -541 number 1 } Dot { name Dot7 xpos -324 ypos -479 } end_group DeepColorCorrect2 { gain 3 name DeepColorCorrect1 tile_color 0xff selected true xpos -2531 ypos 369 } DeepMerge { inputs 2 name DeepMerge2 selected true xpos -2531 ypos 465 } DeepToImage { name DeepToImage2 selected true xpos -2531 ypos 561 } NoOp { name LookAtMe tile_color 0xe955ffff note_font "Verdana Bold Italic Bold Italic" note_font_size 70 selected true xpos -2531 ypos 640 } push $cut_paste_input Axis2 { translate {-100 0 0} name Axis2 selected true xpos -3440 ypos -463 } push 0 Group { inputs 2 name Sparky2D tile_color 0xbd4600ff label "\[if \{\[value ROrP]==false\} \{return \"Render Mode\"\} \{return \"!! PARTICLE MODE !! \\nENABLED\"\}]" note_font "Bitstream Vera Sans Bold Bold" selected true xpos -3450 ypos -361 addUserKnob {20 SparkTab l "Sparky Settings"} addUserKnob {41 start_frame l "Initial Frame" T SparkEmit.start_frame} addUserKnob {7 EmissionRate l "Emission Amount" R 0 100} EmissionRate {{curve(((frame-1001)%(1015-1001+1))+1001) K x1001 0 S 400 x1004 0 x1005 12 175 x1008 20 x1012 0 x1015 0}} addUserKnob {22 Refresh l "Refresh Sim" T "import random\n\ni = int(nuke.expression('random()')*1000)\nn = nuke.thisNode()\nhs = n\['HiddenSeed'].value()\n\nif hs == i:\n n\['HiddenSeed'].setValue(hs+1)\nelse :\n n\['HiddenSeed'].setValue(i)" +STARTLINE} addUserKnob {26 text l "" +STARTLINE T "\t\tClick Refresh if modifying values doesn't show any changes."} addUserKnob {3 HiddenSeed +INVISIBLE} HiddenSeed 816 addUserKnob {26 ""} addUserKnob {26 emittertext l "" +STARTLINE T "Emitter Settings"} addUserKnob {13 Direction t "Set the initial velocity applied to the particles. This will orient the sparks in 3D space."} Direction {200 50 0} addUserKnob {7 MaxLife l "Particle Life" t "Maximum amount of frames the particles will live for." R 10 100} MaxLife 60 addUserKnob {7 LifeRange l "Life Range" t "Randomizes the Life Range of the particles." R 0 2} LifeRange 0.75 addUserKnob {3 seed l "Particle Seed" t "Randomizes the simulation."} seed 223 addUserKnob {26 ""} addUserKnob {7 ParticleSize l "Particle Size" t "Change Particle Size" R 1 5} ParticleSize 2 addUserKnob {7 Explosivity t "Changes how much influence the initial force has on the particles." R 0 100} Explosivity 55 addUserKnob {7 Scatter t "Adds some randomness between particles." R 0 100} Scatter 100 addUserKnob {41 Softness l "Particle Softness" T CustomKnobs.Softness} addUserKnob {26 ""} addUserKnob {4 ROption l "Render Options" t "Multi Scanline: Output is a ScanlineRender with motionblur enabled. Can be DeepMerged\nVectorBlur: 2D motionblur added post-render. Can get rid of sample issues, but is not Deep compatible." M {"Multi Scanline" VectorBlur "" ""}} addUserKnob {41 format l Format T RootFormatSetup.format} addUserKnob {14 Overscan R 0 100} Overscan 100 addUserKnob {6 ROrP l "Output As Particles" t "Check this to output Particles instead of a 2D render.\nIt can then be plugged into a 3D scene." +STARTLINE} addUserKnob {6 OutputDeep l "Output Deep" t "Warning: Will output in Multi-Scanlinde mode only. Doesn't have any effect if \"Output As Particles is selected\"." -STARTLINE} addUserKnob {20 Presets} addUserKnob {4 AnimPreset l "Animation Presets" t "None: This wont do anything. Serves as safety to not enable a preset accidentally\nSingle Hit Heavy: Heavy hit with a double pop.\nSingle Hit Light : Light pop of sparks.\nWelding : Expression that will mimic a natural welding feeling.\nWavy : Constant sim with some strong variation in birth rate.\nConstant : Softer variation than the Wavy preset.\nLoopy : Loops the same pop of Sparks." M {None "Single Hit Heavy" "Single Hit Light" Welding Wavy Constant Loopy "" "" "" "" ""}} AnimPreset Loopy addUserKnob {22 Apply l "Apply Preset" t " " T "def checkPreset():\n preset = int(nuke.thisNode()\['AnimPreset'].getValue())\n if preset ==0:\n return False\n else:\n return preset\n\ndef checkFrame():\n InitFrame = nuke.getInput(\"Enter Initial Frame\", '1001')\n if InitFrame:\n try:\n InitFrame = int(InitFrame)\n return InitFrame\n except ValueError:\n nuke.message(\"Not a valid frame number\")\n return False\n\n\nif checkPreset() == False:\n nuke.ask(\"No preset selected\")\nelse:\n n=nuke.thisNode()\['EmissionRate']\n s=int(nuke.thisNode()\['AnimPreset'].getValue())\n cf=checkFrame()\n if cf!=False and cf!=None:\n if s == 1: \n nuke.thisNode()\['start_frame'].setValue(cf)\n n.clearAnimated()\n n.setAnimated()\n sCurve = '\{curve K x%v1 0 S 400 x%v2 0 12 x%v3 175 x%v4 20 0\}'\n sCurve=sCurve.replace(\"%v1\",str(cf))\n sCurve=sCurve.replace(\"%v2\",str(cf+3))\n sCurve=sCurve.replace(\"%v3\",str(cf+6))\n sCurve=sCurve.replace(\"%v4\",str(cf+12))\n n.fromScript(sCurve)\n nuke.message(\"Applied Single Hit Heavy Preset\")\n elif s == 2:\n nuke.thisNode()\['start_frame'].setValue(cf)\n n.clearAnimated()\n n.setAnimated()\n sCurve = '\{curve K x%v1 0 S 140 x%v2 0\}'\n sCurve=sCurve.replace(\"%v1\",str(cf))\n sCurve=sCurve.replace(\"%v2\",str(cf+3))\n n.fromScript(sCurve)\n nuke.message(\"Applied Single Hit Light Preset\")\n elif s == 3:\n nuke.thisNode()\['start_frame'].setValue(cf)\n n.clearAnimated()\n n.setExpression(\"max(0,(random(frame+seed)*120*((sin(frame+seed)+1)*0.5)-12))*3\")\n nuke.message(\"Applied Welding Preset\")\n elif s == 4:\n nuke.thisNode()\['start_frame'].setValue(cf)\n n.clearAnimated()\n n.setExpression(\"random(frame+seed)*120*((sin(frame+seed)+1)*0.5)\")\n nuke.message(\"Applied Wavy Preset\")\n elif s == 5:\n nuke.thisNode()\['start_frame'].setValue(cf)\n n.clearAnimated()\n n.setExpression(\"random(frame/5+seed)*100+60\")\n nuke.message(\"Applied Constant Preset\")\n else:\n nuke.thisNode()\['start_frame'].setValue(cf)\n n.clearAnimated()\n n.setAnimated()\n sCurve = '\{curve(((frame-%v1)%(%v6-%v1+1))+%v1) K x%v1 0 S 400 x%v2 0 x%v3 12 175 x%v4 20 x%v5 0 x%v6 0\}'\n sCurve=sCurve.replace(\"%v1\",str(cf))\n sCurve=sCurve.replace(\"%v2\",str(cf+3))\n sCurve=sCurve.replace(\"%v3\",str(cf+4))\n sCurve=sCurve.replace(\"%v4\",str(cf+7))\n sCurve=sCurve.replace(\"%v5\",str(cf+11))\n sCurve=sCurve.replace(\"%v6\",str(cf+14))\n n.fromScript(sCurve)\n nuke.message(\"Applied Loopy Preset\")\n\n" +STARTLINE} addUserKnob {20 Advanced l "Advanced Settings"} addUserKnob {7 TVelocity l "Transfer Velocity"} TVelocity 0.5 addUserKnob {7 TWindow l "Transfer window" R 0 5} TWindow 2 addUserKnob {7 Spread l "Emission Spread"} Spread 0.1 addUserKnob {26 ""} addUserKnob {41 samples l "Scanline Samples" T MultiSampleRender.samples} addUserKnob {7 Shutter} Shutter 0.5 addUserKnob {41 shutteroffset l "Shutter Offset" T MultiSampleRender.shutteroffset} addUserKnob {41 shuttercustomoffset l "" -STARTLINE T MultiSampleRender.shuttercustomoffset} addUserKnob {20 Instructions} addUserKnob {26 info l "" +STARTLINE T "Sparky v1.2\n\nEasy to use particle setup for Sparks.\n\nOutputs an image by default, but can be configured to be rendered through a specific Camera or\nto output as particles, which allows you to plug Sparky into a 3D scene.\n\nIf you wish to use the 3D version of this Gizmo, simply plug your Camera and plug an Axis to \nmove and place the sparks where you need them.\n\nFor more information about presets and changelogs, head to the Nukepedia page!"} } BackdropNode { inputs 0 name BackdropNode9 tile_color 0x557fffff label "Welcome Curious Comper!\n\nI hope you'll find answers\nto what you are looking for\ninside here! " note_font "Bitstream Vera Sans" note_font_size 111 xpos -2486 ypos -861 bdwidth 2780 bdheight 1970 } ColorWheel { inputs 0 format "256 256 0 0 256 256 1 square_256" gamma 0.45 name ColorWheel1 xpos -1170 ypos -537 } Saturation { saturation 0 mode Maximum name Saturation1 xpos -1170 ypos -427 } FilterErode { channels all size {{abs(parent.CustomKnobs.Softness)}} filter gaussian name ErodeSoft xpos -1170 ypos -384 } Reformat { type scale scale 0.125 resize distort black_outside true name Reformat2 xpos -1170 ypos -325 } Grade { white {0.9 0.35 0.085 1} name Grade1 xpos -1170 ypos -267 } BlendMat { operation max surfaceblend modulate name BlendMat1 xpos -971 ypos -267 } Noise { inputs 0 size 750 zoffset {{frame/5+CustomKnobs.time_offset}} octaves 6 lacunarity 1.45 gain 0.6 center {1440 810} name Noise6 xpos -676 ypos -548 } set N4aba6030 [stack 0] Sphere { name Sphere1 xpos -770 ypos -456 } push $N4aba6030 Sphere { translate {{parent.input1.translate} {parent.input1.translate} {parent.input1.translate}} rotate {{parent.input1.rotate} {parent.input1.rotate} {parent.input1.rotate}} scaling {{parent.input1.scaling} {parent.input1.scaling} {parent.input1.scaling}} name Sphere2 xpos -575 ypos -460 } Switch { inputs 2 which {{"!\[exists parent.input1]"}} name Switch3 xpos -676 ypos -342 } push 0 ParticleEmitter { inputs 3 start_frame 1001 emit_from faces randomize_type "randomized direction" rate {{parent.EmissionRate}} rate_variation 0.5 rate_channel rgba.red lifetime {{parent.MaxLife}} lifetime_variation {{parent.LifeRange}} halflife {{lifetime/2.5}} velocity {{"!\[exists parent.input1]?7.5+(10*Explosivity/100):7.5+(10*Explosivity/100)*((parent.input1.uniform_scale-1)*0.25+1)"}} velocity_variation {{0.125+abs((min(100,parent.Scatter)*0.035))}} size {{"!\[exists parent.input1]?max(0.1,parent.ParticleSize):max(0.01,parent.ParticleSize)*((parent.input1.uniform_scale-1)*0.25+1)"}} size_variation 1.6 mass {{"!\[exists parent.input1]?0.5+(1-(clamp(parent.Explosivity,0,100))/100)*3.5:(0.5+((1-(clamp(parent.Explosivity,0,100))/100)*3.5))*(((parent.input1.uniform_scale-1)*0.25)+1)"}} mass_variation {{1.5*(clamp(parent.Scatter,0,100))/100}} transfer_velocity {{parent.TVelocity}} transfer_window {{parent.TWindow}} spread {{parent.Spread}} color {0.9 0.35 0.085 1} seed {{CustomKnobs.time_offset}} name SparkEmit xpos -676 ypos -267 } ParticleDirectionalForce { strength {{"parent.Direction*(\[exists parent.input1]?1+(parent.input1.uniform_scale-1)*0.85:1)"} {"parent.Direction*(\[exists parent.input1]?1+(parent.input1.uniform_scale-1)*0.85:1)"} {"parent.Direction*(\[exists parent.input1]?1+(parent.input1.uniform_scale-1)*0.85:1)"}} max_age {{1/(max(1,parent.SparkEmit.lifetime*1.25))}} name ParticleDirectionalForce selected true xpos -676 ypos -120 } ParticleDrag { drag 0.6 name ParticleDrag xpos -676 ypos -36 } ParticleTurbulence { strength {2 0.85 4} scale {5 10 20} name ParticleTurbulence xpos -676 ypos 22 } ParticleDrag { drag 0.1 name ParticleDrag2 xpos -676 ypos 86 } ParticleGravity { to {0 {"!\[exists parent.input1]?-3:-1-(2*(parent.input1.uniform_scale))"} 0} min_age 0.1 name ParticleGravity xpos -676 ypos 148 } ParticleCurve { curves {r {curve L x0.04740819708 1 S l x0.4987964034 0.7955223322 x1 0} g {curve L x0.04740819708 1 S l x0.4987964034 0.7955223322 x1 0} b {curve L x0.04740819708 1 S l x1 0} a {curve L x0.04740819708 1 S l x0.4939824343 0.7353233099 x1 0} size {} mass {}} seed {{HiddenSeed}} name FadeOut xpos -676 ypos 201 } ParticleSettings { name ParticleSettings1 xpos -676 ypos 265 } set N37cd0d90 [stack 0] Dot { name Dot2 xpos -924 ypos 711 } Dot { name Dot1 xpos -924 ypos 831 } Input { inputs 0 name Camera xpos -1457 ypos 312 } Dot { name Dot3 xpos -1423 ypos 551 } Camera2 { inputs 0 translate {0 -100 1200} focal 20 haperture 24 vaperture 13.5 near 1 far 1000000 name Default2DCam xpos -1217 ypos 210 } Switch { inputs 2 which {{"\[exists parent.input0]"}} name Switch1 xpos -1227 ypos 548 } set N37cf9110 [stack 0] push $N37cd0d90 Dot { name Dot6 xpos -642 ypos 516 } set N37d03b60 [stack 0] Constant { inputs 0 name Constant1 xpos -161 ypos 316 } Reformat { resize none name RootFormatSetup xpos -161 ypos 406 addUserKnob {20 User} addUserKnob {14 Overscan R 0 100} Overscan {{parent.Overscan}} } Dot { name Dot4 xpos -127 ypos 551 } set N37d1c0d0 [stack 0] ScanlineRender { inputs 3 conservative_shader_sampling false antialiasing high overscan {{parent.RootFormatSetup.Overscan}} spatial_jitter 0.1 motion_vectors_type velocity name NO_Motionblur xpos -449 ypos 548 } VectorBlur2 { channels rgba uv forward alpha -rgba.alpha scale 0.5 motion_falloff 0.65 offset 0 grow_bbox 40 normalize false name MBlur xpos -448 ypos 708 } push $N37cf9110 Dot { name Dot48 xpos -1192 ypos 640 } push $N37d03b60 push $N37d1c0d0 Dot { name Dot5 xpos -126 ypos 640 } ScanlineRender { inputs 3 conservative_shader_sampling false antialiasing high ambient {{parent.RootFormatSetup.Overscan}} samples 30 shutter {{parent.Shutter}} spatial_jitter 0.025 motion_vectors_type velocity name MultiSampleRender xpos -676 ypos 637 } Switch { inputs 2 which {{OutputDeep==1?0:ROption}} name Switch2 xpos -677 ypos 712 } Switch { inputs 2 which {{parent.ROrP}} name RorP xpos -677 ypos 827 } Output { name Output xpos -677 ypos 1014 } NoOp { inputs 0 name CustomKnobs tile_color 0xff9fff xpos -90 ypos -264 addUserKnob {20 User} addUserKnob {7 Softness R 0 100} Softness 10 addUserKnob {3 time_offset l Seed} time_offset {{parent.seed}} } Input { inputs 0 name Axis xpos -358 ypos -541 number 1 } Dot { name Dot7 xpos -324 ypos -479 } end_group Grade { white 2 name Grade1 selected true xpos -3450 ypos -286 } Glow2 { brightness 3 size 3 name Glow1 selected true xpos -3450 ypos -229 } CheckerBoard2 { inputs 0 name CheckerBoard3 selected true xpos -3244 ypos -385 } Grade { white 0.125 name Grade2 selected true xpos -3244 ypos -313 } Merge2 { inputs 2 name Merge1 selected true xpos -3244 ypos -229 } ================================================ FILE: NukeSurvivalToolkit/nk_files/NST_UVEditor_demo_clean.nk ================================================ #write_info Write1 file:"" format:"256 256 1" chans:":rgba.red:rgba.green:rgba.blue:" framerange:"1001 1050" fps:"0" colorspace:"default" datatype:"unknown" transfer:"unknown" views:"main" colorManagement:"Nuke" Root { inputs 0 frame 1027 first_frame 1001 last_frame 1050 format "2048 1556 0 0 2048 1556 1 2K_Super_35(full-ap)" proxy_type scale proxy_format "1024 778 0 0 1024 778 1 1K_Super_35(full-ap)" } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x354c4cff label "preview in uv space" note_font_size 42 xpos -383 ypos -672 bdwidth 469 bdheight 698 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x354c4cff label "udim - modify / export" note_font_size 42 xpos 200 ypos -670 bdwidth 622 bdheight 696 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x354c4cff label "uvtile - map to geo directly" note_font_size 42 xpos 992 ypos -668 bdwidth 646 bdheight 689 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x354c4cff label "UV pass - for STmap" note_font_size 42 xpos 1762 ypos -527 bdwidth 594 bdheight 558 } Axis2 { inputs 0 rotate {0 {curve x1001 -20 x1050 20} 0} name Axis2 xpos 228 ypos -546 } Camera2 { translate {66.90603638 35.25645828 -5.300000668} rotate {-24.62797338 90.0000025 0} name Camera4 xpos 228 ypos -424 } Dot { name Dot5 xpos 252 ypos -240 } set N8decb800 [stack 0] FrameHold { first_frame 1001 name FrameHold2 xpos 305 ypos -250 } CheckerBoard2 { inputs 0 name CheckerBoard2 xpos 415 ypos -372 } Project3D2 { inputs 2 name Project3D2 xpos 415 ypos -244 } ReadGeo2 { inputs 0 file ./Trex_UVtile_skin.abc localizationPolicy off version 2 use_geometry_colors false range_first 0 range_last 0 scene_view {{0} imported: 0 selected: 0 items: /root/Trex_UVtile:Skin/Trex_UVtile:SkinShape} name ReadGeo8 xpos 531 ypos -243 } Group { inputs 2 name UVEditor3 onCreate "\nthisGRP = nuke.thisGroup()\nif not thisGRP\['disable_error'].getValue() :\n import os\n import re\n\n fontpath = re.split( '/|\"\"' , nuke.EXE_PATH )\n fontpath.pop()\n fontpath += \['plugins','fonts']\n \n if os.path.isfile( '/'.join( fontpath + \['UtopiaBold.pfa'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['UtopiaBold.pfa'] ) )\n elif os.path.isfile( '/'.join( fontpath + \['CourierBold.pfa'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['CourierBold.pfa'] ) )\n elif os.path.isfile( '/'.join( fontpath + \['Courier10PitchBold.pfb'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['Courier10PitchBold.pfb'] ) )\n else :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['BitstreamCharterBold.pfb'] ) )\n" tile_color 0x6666ff xpos 466 ypos -154 addUserKnob {20 tab_general l General} addUserKnob {3 texSize l "texture size"} texSize 256 addUserKnob {41 filter T SR.filter} addUserKnob {41 antialiasing T SR.antialiasing} addUserKnob {26 ""} addUserKnob {41 view_wireframe l "view wireframe" T menu02.view_wireframe} addUserKnob {7 wireframe_size l "wireframe size" +DISABLED R 0.1 10} wireframe_size 0.1 addUserKnob {26 ""} addUserKnob {41 output T menu01.output} addUserKnob {30 uv_shift l INVISIBLE +INVISIBLE} addUserKnob {41 scanRes +INVISIBLE T store.scanRes} addUserKnob {22 udim_export l export T "thisGRP = nuke.thisGroup()\ndataCheckNode = nuke.toNode('dataCheck')\n\n########################################################\n\nusrUV = thisGRP\['uv_shift'].getValue()\ndataReturn = \[]\n\nprogBar = nuke.ProgressTask('Checking UV')\njobCount = 0\n\nfor v in range (0, 10) :\n for u in range (0, 10) :\n\n ### progress bar\n jobCount += 1\n progShow = int(jobCount/100 * 100)\n if progBar.isCancelled() :\n break;\n progBar.setProgress(progShow)\n #################\n\n thisGRP\['uv_shift'].setValue(\[u,v])\n nuke.execute(dataCheckNode, nuke.frame(), nuke.frame())\n if dataCheckNode\['maxlumapixvalue'].getValue() != \[0.0, 0.0, 0.0] :\n dataReturn.append(1)\n else :\n dataReturn.append(0)\n\ndel progBar\n\ndataCheckNode\['maxlumapixdata'].clearAnimated()\ndataCheckNode\['maxlumapixvalue'].clearAnimated()\ndataCheckNode\['minlumapixdata'].clearAnimated()\ndataCheckNode\['minlumapixvalue'].clearAnimated()\n\nif len(dataReturn) == 100 :\n\tfor i in range (0, 100) :\n\t if dataReturn\[i] == 1 :\n\t uvMax = i\n\n\tthisGRP\['uv_shift'].setValue(usrUV)\n\n\t########################################################\n\n\tgoStore = nuke.toNode('store')\n\tgoStore\['fn'].execute()\n\n\troot = getLevel()\n\n\troot.begin()\n\toutFR = nuke.nodes.FrameRange()\n\toutFR\['first_frame'].setValue(1001)\n\toutFR\['last_frame'].setValue(1001 + uvMax)\n\toutFR\['label'].setValue( 'udim range : 1001 - \{0\}'.format( str(1001 + uvMax) ) )\n\toutFR.setInput(0, thisGRP)\n\toutFR.setXYpos(int(thisGRP\['xpos'].value()), int(thisGRP\['ypos'].value()+80))\n\n\texpDot = nuke.nodes.Dot()\n\texpDot\['label'].setValue('Texture modify here : swap the paint/patch texture into udim frame')\n\texpDot.setInput(0, outFR)\n\n\tyDot = nuke.nodes.Dot()\n\tyDot.setInput(0, expDot)\n\n\tuvGRP = nuke.nodes.Group()\n\tuvGRP\['label'].setValue('udim stitch for nuke')\n\n\tnDot = nuke.nodes.Dot()\n\tnDot\['label'].setValue('Connect to Geo')\n\troot.end()\n\n\tuvGRP.begin()\n\tinNode = nuke.nodes.Input(name='udim')\n\tcropNode = nuke.nodes.Crop()\n\tcropNode\['crop'].setValue(1)\n\tcropNode.setInput(0, inNode)\n\tallDot = nuke.nodes.Dot()\n\tallDot.setInput(0, cropNode)\n\n\tuvMerge = nuke.nodes.Merge2()\n\toutNode = nuke.nodes.Output()\n\toutNode.setInput(0, uvMerge)\n\n\tfor i in range (0, uvMax+1) :\n\t uDimHold = nuke.nodes.FrameHold()\n\t uDimHold\['first_frame'].setValue(1001+i)\n\t uDimHold.setInput(0, allDot)\n\t \n\t uvTran = nuke.nodes.Transform()\n\t uvTran.addKnob(nuke.UV_Knob('uv_offset'))\n\t if i < 10 :\n\t u = i\n\t v = 0\n\t else :\n\t if i < 100 :\n\t u = int(str(i)\[1])\n\t v = int(str(i)\[0])\n\t uvTran\['uv_offset'].setValue(\[u, v])\n\t uvTran\['translate'].setExpression('input.width*uv_offset.u', 0)\n\t uvTran\['translate'].setExpression('input.height*uv_offset.v', 1)\n\t uvTran.setInput(0, uDimHold)\n\n\t uvMerge.setInput(i+3, uvTran)\n\n\n\tuvGRP.end()\n\n\tuvGRP.setInput(0, yDot)\n\tnDot.setInput(0, uvGRP)\n\n\troot.begin()\n\texWrite = nuke.nodes.Write()\n\texWrite.setInput(0, yDot)\n\texWrite\['label'].setValue('export udim
    render range : \[value input.first_frame] - \[value input.last_frame]')\n\troot.end()\n\n\tdel uvMax\nelse :\n\tnuke.message('Scan process terminated by user.')\n\ndel dataReturn" +STARTLINE} addUserKnob {26 ""} addUserKnob {41 font T store.font} addUserKnob {6 disable_error l "disable text" +STARTLINE} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.4} addUserKnob {26 l_DATE l "Date Modified" T 2020-04-24} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.4
    - fix misspelling of knob's label
    - fix not working disable text knob

    1.3
    - fix font issue
      works on linux, mac & windows

    1.2
    - preview in uv space set limited 
      in 1024 resolution for not drag 
      down speed purpose.
    - added show tile number
    - changed uv combine to uv stitch
      in export group
    - code update
    - scan size reduce, speed up process\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -1755 ypos 302 bdwidth 263 bdheight 296 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x424242ff label "UV preview" note_font_size 42 xpos -824 ypos 451 bdwidth 343 bdheight 672 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x424242ff label udim note_font_size 42 xpos -328 ypos 451 bdwidth 354 bdheight 675 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x424242ff label uvtile note_font_size 42 xpos 109 ypos 451 bdwidth 354 bdheight 675 } Input { inputs 0 name tex xpos -1000 ypos 83 number 1 } Wireframe { inputs 0 line_width {{wireframe_size}} name Wireframe1 xpos -866 ypos 207 } Switch { inputs 2 which {{!view_wireframe}} name Switch2 xpos -1000 ypos 207 } Input { inputs 0 name geo xpos -1171 ypos 82 } ApplyMaterial { inputs 2 name ApplyMaterial1 xpos -1171 ypos 207 } Dot { name Dot6 xpos -1137 ypos 287 } Dot { name Dot1 xpos -1137 ypos 384 } set Na6c8e000 [stack 0] Reformat { inputs 0 type "to box" box_width {{store.scanRes}} box_height {{box_width}} box_fixed true name scanRes xpos -1061 ypos 595 } ScanlineRender { inputs 2 conservative_shader_sampling false transparency false ztest_enabled false projection_mode uv overscan {{store.scanRes*10}} shutteroffset centred motion_vectors_type off MB_channel none name SR1 xpos -1171 ypos 595 } Remove { operation keep channels rgb name Remove1 xpos -1171 ypos 675 } Transform { translate {{store.scanRes*uv_offset.u*-1} {store.scanRes*uv_offset*-1}} shutteroffset centred name pos_shift xpos -1171 ypos 740 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {{uv_shift} {uv_shift}} } Crop { box {0 0 {store.scanRes} {store.scanRes}} reformat true crop false name Crop1 xpos -1171 ypos 801 } CurveTool { operation "Max Luma Pixel" ROI {0 0 {store.scanRes} {store.scanRes}} intensitydata {0 0 0 0} maxlumapixvalue {0 0 0} minlumapixvalue {0 0 0} name dataCheck xpos -1171 ypos 881 } NoOp { inputs 0 name menu01 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['output'].getValue() == 1 :\n thisGRP\['udim_export'].setEnabled(True)\nelse :\n thisGRP\['udim_export'].setEnabled(False)\n" xpos -1669 ypos 392 addUserKnob {20 User} addUserKnob {4 output M {"preview in uv space" udim "uv tile" "uv pass"}} output udim } Reformat { inputs 0 type "to box" box_width {{texSize*10}} box_height {{texSize*10}} box_fixed true resize none name Reformat4 xpos 719 ypos 638 } Expression { expr0 x/width expr1 y/height channel2 none channel3 none name uv xpos 719 ypos 720 } Multiply { channels rgb value {10 10 1 1} name Multiply1 xpos 719 ypos 798 } Reformat { type "to box" box_width {{texSize}} box_height {{texSize}} box_fixed true resize none center false pbb true name Reformat3 xpos 719 ypos 878 } Dot { name Dot8 xpos 753 ypos 1225 } push $Na6c8e000 Dot { name Dot4 xpos -780 ypos 384 } set Na68b0000 [stack 0] Reformat { inputs 0 type "to box" box_width {{texSize}} box_height {{box_width}} box_fixed true name res xpos 5 ypos 381 } ScanlineRender { inputs 2 conservative_shader_sampling false transparency false ztest_enabled false filter Impulse projection_mode uv overscan {{texSize*10 x1009 1948}} shutteroffset centred motion_vectors_type off MB_channel none name SR xpos -154 ypos 381 } Dot { name Dot2 xpos -120 ypos 628 } set Na5309000 [stack 0] Shuffle { red black green black blue black alpha black name Shuffle1 xpos -292 ypos 625 } Text { output rgb cliptype none message " 91 92 93 94 95 96 97 98 99 00\n 81 82 83 84 85 86 87 88 89 90\n 71 72 73 74 75 76 77 78 79 80\n 61 62 63 64 65 66 67 68 69 70\n 51 52 53 54 55 56 57 58 59 60\n 41 42 43 44 45 46 47 48 49 50\n 31 32 33 34 35 36 37 38 39 40\n 21 22 23 24 25 26 27 28 29 30\n 11 12 13 14 15 16 17 18 19 20\n 01 02 03 04 05 06 07 08 09 10" font "\[value store.font]" kerning 0.236 leading 1.051 yjustify bottom Transform 1 box {0 0 1024 999} translate {0 {"( ( texSize * 10 ) / 1024 ) *25"}} scale {{"( texSize * 10 ) / 1024"}} name Text2 xpos -292 ypos 707 disable {{disable_error}} } Multiply { channels rgb value {0 0.05 0.05 1} name Multiply3 xpos -292 ypos 769 } Dot { name Dot13 xpos -258 ypos 821 } Dot { name Dot11 xpos -178 ypos 821 } set Naa775800 [stack 0] Dot { name Dot12 xpos 221 ypos 821 } push $Na5309000 Dot { name Dot5 xpos 281 ypos 628 } Merge2 { inputs 2 operation under Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge4 xpos 247 ypos 879 } Crop { box {0 0 {texSize*10} {texSize*10}} crop false name Crop4 xpos 247 ypos 961 } Dot { name Dot7 xpos 281 ypos 1204 } push $Naa775800 push $Na5309000 Merge2 { inputs 2 operation under Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge3 xpos -154 ypos 879 } Transform { translate {{texSize*uv_offset.u*-1 i} {texSize*uv_offset*-1 i}} shutteroffset centred name pos_shift1 xpos -154 ypos 961 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {{"frame <=1001 ? 0 : (frame-1)%10"} {"frame < 1000 ? 0 : int(((frame-1)/10)-100)"}} } Dot { name Dot3 xpos -120 ypos 1202 } Reformat { inputs 0 format "1024 1024 0 0 1024 1024 1 square_1K" name Reformat2 xpos -693 ypos 712 } Dot { name Dot9 xpos -659 ypos 770 } set Na6c60c00 [stack 0] Dot { name Dot10 xpos -533 ypos 770 } Text { output rgb message " 91 92 93 94 95 96 97 98 99 00\n 81 82 83 84 85 86 87 88 89 90\n 71 72 73 74 75 76 77 78 79 80\n 61 62 63 64 65 66 67 68 69 70\n 51 52 53 54 55 56 57 58 59 60\n 41 42 43 44 45 46 47 48 49 50\n 31 32 33 34 35 36 37 38 39 40\n 21 22 23 24 25 26 27 28 29 30\n 11 12 13 14 15 16 17 18 19 20\n 01 02 03 04 05 06 07 08 09 10" font "\[value store.font]" kerning 0.236 leading 1.051 yjustify bottom Transform 1 box {0 0 1024 999} translate {0 25} name Text1 xpos -567 ypos 818 disable {{disable_error}} } Multiply { channels rgb value {0 0.05 0.05 1} name Multiply2 xpos -567 ypos 887 } push $Na6c60c00 Grid { name Grid1 xpos -693 ypos 814 } Merge2 { inputs 2 name Merge2 xpos -693 ypos 887 } push $Na68b0000 Reformat { inputs 0 format "1024 1024 0 0 1024 1024 1 square_1K" name Reformat5 xpos -689 ypos 531 } Reformat { type scale scale 0.1 resize none name Reformat6 xpos -689 ypos 594 } ScanlineRender { inputs 2 conservative_shader_sampling false transparency false ztest_enabled false projection_mode uv overscan 2560 shutteroffset centred motion_vectors_type off MB_channel none name SR2 xpos -814 ypos 594 } Merge2 { inputs 2 operation under name Merge1 xpos -814 ypos 887 } Crop { box {0 0 1024 1024} reformat true crop false name Crop2 xpos -814 ypos 969 } Switch { inputs 4 which {{output}} name Switch1 xpos -814 ypos 1412 } Output { name Output1 xpos -814 ypos 1597 } NoOp { inputs 0 name menu02 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['view_wireframe'].getValue() == 1 :\n thisGRP\['wireframe_size'].setEnabled(True)\nelse :\n thisGRP\['wireframe_size'].setEnabled(False)\n" xpos -1668 ypos 484 addUserKnob {20 User} addUserKnob {6 view_wireframe l "view wireframe" +STARTLINE} } NoOp { inputs 0 name store xpos -1419 ypos 388 addUserKnob {20 User} addUserKnob {22 fn T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel" +STARTLINE} addUserKnob {3 scanRes} scanRes 64 addUserKnob {2 font} font "C:/Program Files/Nuke12.0v3/plugins/fonts/UtopiaBold.pfa" } end_group FrameRange { first_frame 1001 last_frame 1022 time "" name FrameRange1 label "udim range : 1001 - 1022" xpos 466 ypos -90 } Dot { name Dot2 label "Texture modify here : swap the paint/patch texture into udim frame" xpos 500 ypos -10 } RotoPaint { curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush2 512 catmullrom {cc {f 2080} {p {x42e40000 x435e0000 x3d904090} {x42e50000 x435f0000 x3e044084} {x42e40000 x43600000 x3ea24ca2} {x42e20000 x43600000 x3eb458b4} {x42e00000 x435f8000 x3eb458b4} {x42de0000 x435f0000 x3eb658b6} {x42dd0000 x435d8000 x3eb658b6} {x42da0000 x435c8000 x3eb658b6} {x42d80000 x435b8000 x3eb658b6} {x42d40000 x435a0000 x3eba58ba} {x42d20000 x43580000 x3eb958b9} {x42cf0000 x43568000 x3eba58ba} {x42cc0000 x43550000 x3eb958b9} {x42ca0000 x43538000 x3eba58ba} {x42c90000 x43528000 x3eba58ba} {x42c90000 x43518000 x3eb958b9} {x42ca0000 x43508000 x3eb958b9} {x42cc0000 x43500000 x3eb958b9} {x42cf0000 x434e8000 x3eb958b9} {x42d30000 x434e0000 x3eba58ba} {x42d80000 x434d0000 x3eba58ba} {x42dc0000 x434c8000 x3eba58ba} {x42e00000 x434b8000 x3eb958b9} {x42e50000 x434b0000 x3eba58ba} {x42e80000 x43498000 x3eb958b9} {x42ec0000 x43490000 x3eb958b9} {x42ef0000 x43488000 x3eba58ba} {x42f20000 x43478000 x3eba58ba} {x42f20000 x43460000 x3ebb5cbb} {x42f20000 x43448000 x3ebc5cbc} {x42f10000 x43438000 x3ebe5cbe} {x42ef0000 x43420000 x3ebe5cbe} {x42ec0000 x43410000 x3ebd5cbd} {x42e80000 x433f0000 x3ebf5cbf} {x42e40000 x433d8000 x3ebf5cbf} {x42e00000 x433c8000 x3ebf5cbf} {x42de0000 x433b0000 x3ec15cc1} {x42db0000 x433a0000 x3ebe5cbe} {x42da0000 x43390000 x3ebe5cbe} {x42dc0000 x43388000 x3ebf5cbf} {x42de0000 x43380000 x3ebf5cbf} {x42e30000 x43378000 x3ebf5cbf} {x42e70000 x43370000 x3ec25cc2} {x42ec0000 x43360000 x3ec360c3} {x42ef0000 x43350000 x3ec360c3} {x42f30000 x43348000 x3ec360c3} {x42f70000 x43338000 x3ec360c3} {x42fa0000 x43320000 x3ec25cc2} {x42fc0000 x43308000 x3ec560c5} {x42fe0000 x432f8000 x3ec660c6} {x42fe0000 x432e0000 x3ec960c9} {x42fe0000 x432c0000 x3ecc64cc} {x42fd0000 x432a8000 x3ecd64cd} {x42fa0000 x43290000 x3ecd64cd} {x42f70000 x43268000 x3ed064d0} {x42f30000 x43250000 x3ecd64cd} {x42ef0000 x43238000 x3ecf64cf} {x42e90000 x43220000 x3ed064d0} {x42e50000 x43210000 x3ed064d0} {x42e20000 x43208000 x3ed064d0} {x42df0000 x43200000 x3ecf64cf} {x42e30000 x43208000 x3ed264d2} {x42e60000 x43210000 x3ed468d4} {x42ea0000 x43218000 x3ed264d2} {x42f00000 x43218000 x3ed468d4} {x42f60000 x43218000 x3ed264d2} {x42fc0000 x43208000 x3ed568d5} {x43020000 x431f8000 x3edc6cdc} {x43060000 x431e0000 x3ee970e9} {x430a8000 x431b8000 x3eef74ef} {x430d0000 x43198000 x3ef074f0} {x430f8000 x43170000 x3ef274f2} {x43100000 x43150000 x3ef374f3} {x43100000 x43128000 x3ef678f6} {x430f8000 x43110000 x3ef778f7} {x430d8000 x43100000 x3efa78fa} {x430b8000 x430f0000 x3efb78fb} {x43088000 x430f0000 x3efa78fa} {x43060000 x43100000 x3efb78fb} {x43028000 x43118000 x3efc7cfc} {x43000000 x43148000 x3efc7cfc} {x42f20000 x431b8000 x3efa78fa} {x42ed0000 x43200000 x3ef778f7} {x42e70000 x43248000 x3ef478f4} {x42e40000 x43298000 x3ee970e9} {x42e00000 x432e8000 x3ee570e5} {x42df0000 x43328000 x3ee06ce0} {x42df0000 x43360000 x3ee06ce0} {x42df0000 x43390000 x3ee06ce0} {x42e00000 x433b0000 x3edd6cdd} {x42e30000 x433d0000 x3edf6cdf} {x42e50000 x433e8000 x3edd6cdd} {x42e80000 x433f8000 x3ede6cde} {x42ea0000 x43410000 x3edd6cdd} {x42ee0000 x43410000 x3ede6cde} {x42f10000 x43418000 x3ede6cde} {x42f30000 x43418000 x3edd6cdd} {x42f70000 x43410000 x3edb6cdb} {x42fa0000 x43400000 x3ed968d9} {x42fc0000 x433f8000 x3ed668d6} {x42fe0000 x433f0000 x3ed568d5} {x43008000 x433e8000 x3ed768d7} {x43018000 x433e8000 x3ed668d6} {x43028000 x43410000 x3ed968d9} {x43030000 x43428000 x3ed868d8} {x43038000 x43440000 x3edb6cdb} {x43040000 x43468000 x3edd6cdd} {x43050000 x43490000 x3edd6cdd} {x43050000 x434c8000 x3edf6cdf} {x43050000 x43500000 x3edf6cdf} {x43050000 x43530000 x3edf6cdf} {x43050000 x43570000 x3ee06ce0} {x43050000 x435a8000 x3ee26ce2} {x43050000 x435d8000 x3ee26ce2} {x43050000 x435f8000 x3ee770e7} {x43050000 x43610000 x3eeb70eb} {x43050000 x43620000 x3eec74ec} {x43050000 x43630000 x3eec74ec} {x43050000 x43640000 x3eef74ef} {x43058000 x43628000 x3eec74ec} {x43060000 x43618000 x3eed74ed} {x43068000 x43608000 x3eec74ec} {x43078000 x435f0000 x3eed74ed} {x43078000 x435c8000 x3eed74ed} {x43080000 x435a8000 x3eed74ed} {x43080000 x43580000 x3ef074f0} {x43080000 x43568000 x3eef74ef} {x43080000 x43558000 x3ef074f0} {x43088000 x43578000 x3ef274f2} {x43090000 x435a0000 x3ef174f1} {x43090000 x435c8000 x3ef174f1} {x430a0000 x435f8000 x3ef074f0} {x430a8000 x43618000 x3ef174f1} {x430a8000 x43630000 x3eef74ef} {x430b8000 x43648000 x3ef074f0} {x430d0000 x43648000 x3ef074f0} {x430f8000 x43628000 x3eef74ef} {x43118000 x43608000 x3eef74ef} {x43150000 x435c8000 x3eef74ef} {x43180000 x43580000 x3ef174f1} {x431b8000 x43530000 x3ef678f6} {x431f0000 x434e0000 x3ef578f5} {x43210000 x43490000 x3ef878f8} {x43238000 x43440000 x3ef878f8} {x43240000 x433f0000 x3ef778f7} {x43240000 x433a0000 x3ef878f8} {x43230000 x43358000 x3ef778f7} {x43208000 x43320000 x3ef878f8} {x431e0000 x432f0000 x3ef878f8} {x431a8000 x432d8000 x3ef678f6} {x43168000 x432b8000 x3eec74ec} {x43128000 x432b8000 x3ee670e6} {x43090000 x432d0000 x3ee470e4} {x43050000 x432e8000 x3ee16ce1} {x43008000 x43310000 x3ee16ce1} {x42fa0000 x43348000 x3ee26ce2} {x42f20000 x433d8000 x3ee16ce1} {x42f10000 x433f8000 x3ee26ce2} {x42f10000 x43418000 x3ee16ce1} {x42f20000 x43430000 x3ee16ce1} {x42f30000 x43440000 x3ee26ce2} {x42f70000 x43450000 x3ee16ce1} {x42f90000 x43450000 x3ee26ce2} {x42fe0000 x43460000 x3ee26ce2} {x43028000 x43460000 x3ee16ce1} {x43068000 x43460000 x3ee16ce1} {x430b8000 x43450000 x3ee16ce1} {x43100000 x43440000 x3ee470e4} {x43150000 x43430000 x3ee16ce1} {x43198000 x43418000 x3ee16ce1} {x431c8000 x433f0000 x3ee26ce2} {x431f8000 x433d8000 x3ee570e5} {x43208000 x433b0000 x3ee470e4} {x43208000 x43390000 x3ee670e6} {x431e8000 x43370000 x3ee770e7} {x431b0000 x43348000 x3ee670e6} {x43168000 x43330000 x3ee670e6} {x43110000 x43310000 x3ee670e6} {x430b0000 x432f8000 x3ee770e7} {x43040000 x432f0000 x3ee670e6} {x42fc0000 x432e0000 x3ee670e6} {x42f00000 x432d8000 x3ee670e6} {x42e40000 x432d0000 x3ee670e6} {x42da0000 x432c0000 x3ee770e7} {x42d20000 x432c0000 x3ee770e7} {x42cc0000 x432b8000 x3ee670e6} {x42c90000 x432b8000 x3ee670e6} {x42cb0000 x432a8000 x3ee670e6} {x42d00000 x43298000 x3ee770e7} {x42d60000 x43288000 x3ee770e7} {x42df0000 x43268000 x3ee670e6} {x42e80000 x43248000 x3ee770e7} {x42f30000 x43218000 x3ee670e6} {x42fe0000 x431e8000 x3ee870e8} {x43040000 x431a8000 x3ee870e8} {x43088000 x43168000 x3ee870e8} {x430b8000 x43128000 x3eea70ea} {x430d0000 x430e0000 x3eec74ec} {x430d8000 x430a0000 x3ef074f0} {x430d8000 x43068000 x3ef174f1} {x430c0000 x43028000 x3ef374f3} {x43090000 x43000000 x3ef478f4} {x43060000 x42fb0000 x3ef374f3} {x43028000 x42f80000 x3ef478f4} {x42fc0000 x42f70000 x3ef478f4} {x42f20000 x42f60000 x3ef578f5} {x42e70000 x42f60000 x3ef374f3} {x42db0000 x42f70000 x3ef478f4} {x42c40000 x42fd0000 x3ef478f4} {x42ba0000 x43010000 x3ef578f5} {x42b10000 x43028000 x3ef578f5} {x42aa0000 x43038000 x3ef578f5} {x42a70000 x43040000 x3ef578f5} {x42a30000 x43040000 x3ef578f5} {x42a20000 x43050000 x3ef374f3} {x42a30000 x43040000 x3ef478f4} {x42a60000 x43030000 x3ef478f4} {x42ab0000 x43020000 x3ef478f4} {x42b10000 x43008000 x3ef374f3} {x42bb0000 x42fd0000 x3ef478f4} {x42c60000 x42f90000 x3ef374f3} {x42d30000 x42f40000 x3ef678f6} {x42e30000 x42f10000 x3ef478f4} {x42f30000 x42ed0000 x3ef678f6} {x43028000 x42e90000 x3ef678f6} {x430b0000 x42e60000 x3ef678f6} {x43128000 x42e20000 x3ef578f5} {x43198000 x42dd0000 x3ef778f7} {x431e8000 x42d90000 x3ef778f7} {x43220000 x42d40000 x3ef878f8} {x43248000 x42d00000 x3ef878f8} {x43258000 x42cc0000 x3ef778f7} {x43258000 x42ca0000 x3ef778f7} {x43250000 x42c80000 x3ef778f7} {x43238000 x42c60000 x3ef878f8} {x43208000 x42c50000 x3ef778f7} {x431d0000 x42c40000 x3ef778f7} {x43198000 x42c20000 x3ef778f7} {x43110000 x42c00000 x3ef878f8} {x430d8000 x42bf0000 x3ef778f7} {x430b8000 x42bd0000 x3ef878f8} {x43090000 x42bb0000 x3ef878f8} {x43080000 x42b80000 x3ef878f8} {x43078000 x42b60000 x3ef878f8} {x43078000 x42b30000 x3ef778f7} {x43088000 x42ac0000 x3ef778f7} {x430a0000 x42a90000 x3ef778f7} {x430b8000 x42a60000 x3efb78fb} {x430e0000 x42a10000 x3ef878f8} {x43110000 x429e0000 x3efb78fb} {x43148000 x429a0000 x3efa78fa} {x43178000 x42980000 x3efa78fa} {x431b0000 x42960000 x3efa78fa} {x431e0000 x42950000 x3efd7cfd} {x43208000 x42950000 x3efc7cfc} {x43230000 x42950000 x3efc7cfc} {x43250000 x42970000 x3efe7cfe} {x43260000 x42990000 x3efe7cfe} {x43268000 x429d0000 x3eff7cff} {x43268000 x42a00000 x3efe7cfe} {x43268000 x42a30000 x3efd7cfd} {x43258000 x42a70000 x3efe7cfe} {x43240000 x42ab0000 x3efd7cfd} {x43220000 x42b00000 x3efd7cfd} {x431f8000 x42b70000 x3efd7cfd} {x431e8000 x42bc0000 x3efb78fb} {x431e0000 x42bf0000 x3efb78fb} {x431d0000 x42c20000 x3efb78fb} {x431d0000 x42c50000 x3efa78fa} {x431d0000 x42c70000 x3efa78fa} {x431e8000 x42c80000 x3ef578f5} {x43208000 x42c80000 x3ef678f6} {x43220000 x42c60000 x3ef578f5} {x43240000 x42c50000 x3ef578f5} {x43260000 x42c10000 x3ef578f5} {x43288000 x42bf0000 x3ef678f6} {x432b0000 x42bc0000 x3ef778f7} {x432d8000 x42b80000 x3ef778f7} {x432f8000 x42b50000 x3ef678f6} {x43308000 x42b20000 x3ef878f8} {x43320000 x42b00000 x3ef878f8} {x43328000 x42ae0000 x3ef878f8} {x43308000 x42ae0000 x3efa78fa} {x432f0000 x42b10000 x3efa78fa} {x432c0000 x42b40000 x3efa78fa} {x43290000 x42b80000 x3ef778f7} {x43248000 x42be0000 x3ef778f7} {x431e8000 x42c50000 x3ef578f5} {x43178000 x42cc0000 x3ef578f5} {x43100000 x42d40000 x3ef478f4} {x43080000 x42dd0000 x3ef374f3} {x43010000 x42e40000 x3ef374f3} {x42f60000 x42e70000 x3ef374f3} {x42ea0000 x42e80000 x3ef478f4} {x42e00000 x42e60000 x3ef478f4} {x42d80000 x42e20000 x3ef374f3} {x42d00000 x42dc0000 x3ef478f4} {x42c90000 x42d40000 x3ef678f6} {x42c20000 x42ca0000 x3ef478f4} {x42be0000 x42c00000 x3ef478f4} {x42bb0000 x42b50000 x3ef478f4} {x42b80000 x42a90000 x3ef578f5} {x42b60000 x429c0000 x3ef578f5} {x42b50000 x428d0000 x3ef878f8} {x42b50000 x42800000 x3efb78fb} {x42b50000 x42640000 x3ef878f8} {x42b70000 x424c0000 x3efb78fb} {x42ba0000 x42360000 x3ef778f7} {x42bc0000 x42240000 x3efa78fa} {x42bf0000 x42140000 x3efb78fb} {x42c20000 x420a0000 x3efd7cfd} {x42c60000 x41fc0000 x3efc7cfc} {x42c80000 x41f00000 x3efe7cfe} {x42c90000 x41e40000 x3efe7cfe} {x42ca0000 x41d80000 x3eff7cff} {x42c80000 x41d00000 x3f01be82} {x42c50000 x41d00000 x3f013e81} {x42c00000 x41d00000 x3f024082} {x42ba0000 x41d80000 x3f024082} {x42b30000 x41e40000 x3f02c083} {x42ab0000 x41f00000 x3f024082} {x42a20000 x42000000 x3f02c083} {x42990000 x420c0000 x3f024082} {x428f0000 x42180000 x3f044084} {x42850000 x42240000 x3f024082} {x427c0000 x42300000 x3f03c084} {x426e0000 x423a0000 x3f03c084} {x42640000 x42400000 x3f03c084} {x42600000 x42440000 x3f04c085} {x425c0000 x42440000 x3f044084} {x42600000 x423c0000 x3f044084} {x42640000 x42360000 x3f03c084} {x426e0000 x42300000 x3f044084} {x42760000 x42280000 x3f03c084} {x42810000 x42200000 x3f044084} {x42880000 x42180000 x3f03c084} {x428f0000 x42100000 x3f04c085} {x42970000 x420c0000 x3f04c085} {x429f0000 x42080000 x3f04c085} {x42a80000 x42060000 x3f064286} {x42b10000 x42060000 x3f05c086} {x42bb0000 x42080000 x3f05c086} {x42c60000 x420e0000 x3f05c086} {x42d00000 x421a0000 x3f074287} {x42db0000 x42240000 x3f064286} {x42e60000 x42360000 x3f074287} {x42fc0000 x425a0000 x3f06c287} {x43038000 x426e0000 x3f074287} {x430a0000 x427e0000 x3f06c287} {x430f8000 x42860000 x3f074287} {x43148000 x428d0000 x3f074287} {x43198000 x42930000 x3f084288} {x431d0000 x42960000 x3f06c287} {x43218000 x42990000 x3f06c287} {x43298000 x429f0000 x3f074287} {x432d0000 x42a00000 x3f06c287} {x43300000 x42a10000 x3f06c287} {x43338000 x42a20000 x3f074287} {x43370000 x42a30000 x3f06c287} {x43390000 x42a30000 x3f06c287} {x433b0000 x42a20000 x3f064286} {x433c8000 x42a10000 x3f05c086} {x433d8000 x429e0000 x3f064286} {x433d8000 x429a0000 x3f05c086} {x433e0000 x42960000 x3f05c086} {x433e0000 x42900000 x3f05c086} {x433d8000 x42890000 x3f064286} {x433d0000 x42820000 x3f05c086} {x433c0000 x42740000 x3f05c086} {x433b0000 x42540000 x3f05c086} {x433c0000 x42380000 x3f064286} {x433d0000 x422e0000 x3f064286} {x433e0000 x42220000 x3f05c086} {x43400000 x421e0000 x3f05c086} {x43428000 x421a0000 x3f064286} {x43448000 x42180000 x3f05c086} {x43480000 x421a0000 x3f05c086} {x434b8000 x421c0000 x3f074287} {x434e8000 x42220000 x3f05c086} {x43528000 x42280000 x3f06c287} {x43560000 x42320000 x3f074287} {x435a0000 x42380000 x3f06c287} {x43610000 x423a0000 x3f074287} {x43640000 x42340000 x3f074287} {x43660000 x422c0000 x3f074287} {x43690000 x42200000 x3f084288} {x436a8000 x42140000 x3f074287} {x436c8000 x420a0000 x3f084288} {x436e8000 x41f80000 x3f07c288} {x43708000 x41e80000 x3f084288} {x43738000 x41c80000 x3f07c288} {x43750000 x41c40000 x3f094289} {x43760000 x41c00000 x3f0a448a} {x43770000 x41cc0000 x3f0dc48e} {x43770000 x41d80000 x3f0d448d} {x43770000 x41f00000 x3f0d448d} {x43770000 x42060000 x3f0dc48e} {x43760000 x42140000 x3f0d448d} {x43740000 x42280000 x3f0dc48e} {x43710000 x42400000 x3f0dc48e} {x436d0000 x425a0000 x3f0dc48e} {x43690000 x42760000 x3f0dc48e} {x43640000 x428a0000 x3f0cc48d} {x435f8000 x42980000 x3f0cc48d} {x43578000 x42ad0000 x3f0c448c} {x43550000 x42b30000 x3f0bc48c} {x43520000 x42b70000 x3f0bc48c} {x43508000 x42bb0000 x3f0b448b} {x434e8000 x42bc0000 x3f09c28a} {x434d0000 x42bc0000 x3f094289} {x434b0000 x42bb0000 x3f094289} {x43490000 x42b70000 x3f094289} {x43468000 x42b30000 x3f084288} {x43440000 x42ad0000 x3f08c289} {x43410000 x42a70000 x3f084288} {x433e0000 x429f0000 x3f08c289} {x433a8000 x42950000 x3f094289} {x43370000 x428b0000 x3f08c289} {x43330000 x42800000 x3f094289} {x432f0000 x426a0000 x3f094289} {x432b0000 x42500000 x3f08c289} {x43280000 x42380000 x3f08c289} {x43240000 x42200000 x3f094289} {x43208000 x42080000 x3f094289} {x431e8000 x41e80000 x3f094289} {x431d0000 x41c00000 x3f094289} {x431c8000 x41a40000 x3f094289} {x431e0000 x41800000 x3f08c289} {x431f0000 x41700000 x3f0a448a} {x43208000 x41680000 x3f0b448b} {x43218000 x41680000 x3f0bc48c} {x43230000 x41800000 x3f0c448c} {x43240000 x41900000 x3f0c448c} {x43258000 x41a40000 x3f0bc48c} {x43268000 x41c00000 x3f0cc48d} {x43270000 x41e00000 x3f0b448b} {x43280000 x41fc0000 x3f0bc48c} {x43280000 x420c0000 x3f05c086} {x43280000 x42180000 x3efe7cfe} {x43280000 x42200000 x3ef578f5} {x43280000 x421c0000 x3e4e60ce}}} {t x430bce5e x42f9583c} {a r x3eced920 g 0 ro 0 go 0 bo 0 ao 0 bs x40e00000 bu 1 str 1 spx x44800000 spy x44428000 sb 1 ltn x447a4000 ltm x447a4000 ltt x40000000 tt x41880000}} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {p {x42b10000 x43558000 x3cd040d0} {x42b10000 x43568000 x3dc460c4} {x42b30000 x43578000 x3e184898} {x42b80000 x435a0000 x3e4a60ca} {x42bd0000 x435b0000 x3e6c70ec} {x42c40000 x435c0000 x3e7a78fa} {x42ca0000 x435d0000 x3e7e78fe} {x42d20000 x435f0000 x3e7e78fe} {x42dc0000 x43600000 x3e824082} {x42e60000 x43610000 x3e813c81} {x42f10000 x43620000 x3e813c81} {x42fe0000 x43628000 x3e834083} {x43060000 x43630000 x3e844084} {x430c8000 x43630000 x3e844084} {x43128000 x43628000 x3e874087} {x43178000 x43620000 x3e874087} {x431b8000 x43610000 x3e864086} {x431e8000 x435f8000 x3e874087} {x431f8000 x435d8000 x3e874087} {x431f0000 x435b8000 x3e884088} {x431d0000 x43588000 x3e884088} {x431a8000 x43560000 x3e8a448a} {x43168000 x43530000 x3e8a448a} {x43118000 x43508000 x3e8b448b} {x430c0000 x434d8000 x3e8b448b} {x43068000 x434b0000 x3e8a448a} {x42f60000 x43468000 x3e8b448b} {x42ea0000 x43448000 x3e8a448a} {x42df0000 x43430000 x3e8a448a} {x42d50000 x43428000 x3e8b448b} {x42cc0000 x43420000 x3e8a448a} {x42c60000 x43420000 x3e8d448d} {x42c00000 x43430000 x3e8e448e} {x42bd0000 x43440000 x3e8d448d} {x42bb0000 x43460000 x3e8d448d} {x42bb0000 x43478000 x3e8d448d} {x42bc0000 x43490000 x3e8e448e} {x42bf0000 x434a0000 x3e8d448d} {x42c40000 x434b8000 x3e8d448d} {x42ca0000 x434c0000 x3e8d448d} {x42d20000 x434c0000 x3e8e448e} {x42e70000 x434a0000 x3e8e448e} {x42f30000 x43480000 x3e8f448f} {x43008000 x43460000 x3e914491} {x43070000 x43438000 x3e954895} {x430d8000 x43418000 x3e964896} {x43130000 x433e8000 x3e994899} {x43170000 x433c8000 x3e9c4c9c} {x43198000 x43398000 x3e9c4c9c} {x43198000 x43370000 x3ea04ca0} {x43178000 x43340000 x3ea450a4} {x43140000 x43310000 x3ea650a6} {x430f8000 x432e8000 x3ea650a6} {x43090000 x432c0000 x3ea750a7} {x43030000 x432a0000 x3eaa50aa} {x42f90000 x43288000 x3ea850a8} {x42ec0000 x43270000 x3eaa50aa} {x42de0000 x43268000 x3ea850a8} {x42d00000 x43260000 x3eaa50aa} {x42c40000 x43260000 x3eab54ab} {x42b70000 x43260000 x3eab54ab} {x42ad0000 x43270000 x3eac54ac} {x42a70000 x43280000 x3eab54ab} {x42a30000 x43290000 x3ead54ad} {x42a70000 x432b0000 x3ead54ad} {x42ac0000 x432b8000 x3ead54ad} {x42b50000 x432c0000 x3ead54ad} {x42c00000 x432c0000 x3eae54ae} {x42cf0000 x432c0000 x3eaf54af} {x42de0000 x432a8000 x3eb154b1} {x42f00000 x43290000 x3eb458b4} {x43010000 x43260000 x3eb958b9} {x430a8000 x43238000 x3ebe5cbe} {x43140000 x43208000 x3ec25cc2} {x431b0000 x431c0000 x3ec560c5} {x43208000 x43170000 x3ec560c5} {x43230000 x43120000 x3eca60ca} {x43230000 x430d0000 x3ecb64cb} {x43208000 x43088000 x3ecc64cc} {x43168000 x43010000 x3ece64ce} {x43100000 x42fc0000 x3ece64ce} {x43080000 x42f80000 x3ece64ce} {x43008000 x42f40000 x3ece64ce} {x42f00000 x42f20000 x3ecd64cd} {x42e00000 x42f10000 x3ece64ce} {x42d00000 x42f10000 x3ecd64cd} {x42c00000 x42f20000 x3ece64ce} {x42b20000 x42f40000 x3ed064d0} {x42a60000 x42f70000 x3ecf64cf} {x42990000 x42fb0000 x3ecf64cf} {x42970000 x42fd0000 x3ed468d4} {x429c0000 x42fe0000 x3edc6cdc} {x42a20000 x42fe0000 x3ede6cde} {x42ac0000 x42fd0000 x3ede6cde} {x42ba0000 x42fa0000 x3edd6cdd} {x42c90000 x42f70000 x3ee06ce0} {x42da0000 x42f10000 x3ee470e4} {x42ea0000 x42ed0000 x3ee670e6} {x42fa0000 x42e70000 x3eeb70eb} {x43038000 x42e20000 x3eec74ec} {x430c0000 x42d60000 x3eec74ec} {x430d8000 x42d10000 x3ef174f1} {x430d8000 x42cc0000 x3ef478f4} {x430b8000 x42c70000 x3ef578f5} {x43078000 x42c20000 x3ef778f7} {x43020000 x42bf0000 x3ef778f7} {x42f80000 x42bc0000 x3ef878f8} {x42e90000 x42ba0000 x3ef878f8} {x42db0000 x42ba0000 x3ef878f8} {x42cc0000 x42ba0000 x3ef778f7} {x42bd0000 x42ba0000 x3ef778f7} {x42ad0000 x42bd0000 x3ef778f7} {x42a00000 x42bf0000 x3ef578f5} {x42950000 x42c40000 x3ef678f6} {x428d0000 x42c70000 x3ef578f5} {x428a0000 x42cb0000 x3ef678f6} {x428d0000 x42cb0000 x3ef374f3} {x42940000 x42cb0000 x3ef374f3} {x429e0000 x42ca0000 x3ef174f1} {x42ab0000 x42c80000 x3ef374f3} {x42bb0000 x42c50000 x3ef478f4} {x42cc0000 x42bf0000 x3ef578f5} {x42df0000 x42ba0000 x3ef678f6} {x42f00000 x42b30000 x3efa78fa} {x42fe0000 x42ac0000 x3efb78fb} {x430a0000 x429e0000 x3efd7cfd} {x430c0000 x42960000 x3efe7cfe} {x430c0000 x428e0000 x3f013e81} {x430b0000 x42880000 x3f01be82} {x43078000 x42820000 x3f013e81} {x43030000 x427c0000 x3f01be82} {x42fc0000 x42720000 x3f024082} {x42f00000 x426e0000 x3f013e81} {x42e20000 x426c0000 x3f013e81} {x42d40000 x426c0000 x3f013e81} {x42c60000 x426e0000 x3f013e81} {x42b60000 x42740000 x3f013e81} {x42990000 x42840000 x3f01be82} {x428e0000 x428a0000 x3f013e81} {x42860000 x428e0000 x3f01be82} {x42820000 x42930000 x3f01be82} {x42820000 x42960000 x3f013e81} {x42840000 x42980000 x3f00be81} {x428a0000 x429a0000 x3f00be81} {x42930000 x429a0000 x3f00be81} {x429f0000 x429a0000 x3eff7cff} {x42ae0000 x42980000 x3f00be81} {x42c10000 x42950000 x3f003e80} {x42d60000 x42920000 x3f00be81} {x42ec0000 x428d0000 x3f00be81} {x43008000 x428a0000 x3f01be82} {x430a8000 x42860000 x3f00be81} {x431b0000 x427c0000 x3f01be82} {x43210000 x42720000 x3f01be82} {x43258000 x42680000 x3f013e81} {x43288000 x425e0000 x3f003e80} {x43298000 x42560000 x3f003e80} {x43290000 x424c0000 x3f003e80} {x43270000 x42440000 x3f00be81} {x43248000 x423a0000 x3f00be81} {x43200000 x42340000 x3f003e80} {x431a8000 x42300000 x3efe7cfe} {x43140000 x422c0000 x3f00be81} {x430c0000 x42280000 x3f00be81} {x43030000 x42280000 x3efe7cfe} {x42f40000 x422c0000 x3f00be81} {x42e20000 x42300000 x3eff7cff} {x42cf0000 x42360000 x3f003e80} {x42bc0000 x423c0000 x3efe7cfe} {x42ab0000 x42460000 x3efe7cfe} {x429c0000 x424c0000 x3eff7cff} {x42900000 x42500000 x3eff7cff} {x428a0000 x42560000 x3eff7cff} {x42850000 x425a0000 x3f003e80} {x42850000 x42600000 x3f013e81} {x42880000 x42640000 x3eff7cff} {x428d0000 x426c0000 x3efe7cfe} {x42970000 x42720000 x3efe7cfe} {x42a30000 x42760000 x3eff7cff} {x42b30000 x427c0000 x3efc7cfc} {x42c60000 x427c0000 x3eff7cff} {x42da0000 x427c0000 x3eff7cff} {x43040000 x426e0000 x3efe7cfe} {x43108000 x42600000 x3efc7cfc} {x431c8000 x424e0000 x3efe7cfe} {x43270000 x423a0000 x3eff7cff} {x43308000 x42240000 x3eff7cff} {x43388000 x420c0000 x3eff7cff} {x433e0000 x41ec0000 x3efe7cfe} {x43420000 x41c40000 x3efe7cfe} {x43448000 x419c0000 x3f00be81} {x43460000 x41780000 x3f003e80} {x43460000 x41380000 x3f013e81} {x43448000 x41100000 x3f03c084} {x43428000 x40e00000 x3f05c086} {x433e8000 x40c00000 x3f094289} {x433a0000 x40b00000 x3f09c28a} {x43348000 x40b00000 x3f0a448a} {x432e8000 x40d00000 x3f0bc48c} {x43280000 x41100000 x3f0b448b} {x43210000 x41380000 x3f0b448b} {x431b8000 x41780000 x3f0a448a} {x43170000 x419c0000 x3f08c289} {x43150000 x41bc0000 x3f074287} {x43148000 x41d80000 x3f04c085} {x43160000 x41f80000 x3f02c083} {x43198000 x42080000 x3f01be82} {x431e8000 x42100000 x3f00be81} {x432b0000 x421c0000 x3f003e80} {x43328000 x421c0000 x3f00be81} {x433a0000 x421c0000 x3f00be81} {x43498000 x421c0000 x3efe7cfe} {x43518000 x421c0000 x3eff7cff} {x43588000 x421c0000 x3f00be81} {x435f0000 x421a0000 x3f003e80} {x43628000 x42180000 x3f00be81} {x43648000 x42120000 x3f00be81} {x43628000 x420a0000 x3f03c084} {x435f0000 x42060000 x3f04c085} {x435a0000 x42040000 x3f04c085} {x43530000 x42000000 x3f04c085} {x434b8000 x42000000 x3f05c086} {x43428000 x42040000 x3f04c085} {x43390000 x420c0000 x3f04c085} {x432f0000 x42180000 x3f054085} {x43240000 x42240000 x3f05c086} {x43180000 x42380000 x3f05c086} {x430c0000 x42500000 x3f064286} {x43000000 x426a0000 x3f05c086} {x42e80000 x42830000 x3f064286} {x42d20000 x42900000 x3f05c086} {x42be0000 x429f0000 x3f05c086} {x42ac0000 x42ae0000 x3f074287} {x429d0000 x42bd0000 x3f05c086} {x42920000 x42cc0000 x3f064286} {x42890000 x42dc0000 x3f05c086} {x42820000 x42ec0000 x3f05c086} {x42800000 x42fb0000 x3f064286} {x42800000 x43050000 x3f05c086} {x42820000 x430c0000 x3f05c086} {x42880000 x43120000 x3f05c086} {x42920000 x43180000 x3f064286} {x429e0000 x431e0000 x3f04c085} {x42ad0000 x43238000 x3f04c085} {x42c00000 x43288000 x3f054085} {x42d30000 x432d8000 x3f04c085} {x42e70000 x43310000 x3f03c084} {x42fa0000 x43340000 x3f03c084} {x43058000 x43358000 x3f03c084} {x43120000 x43340000 x3f044084} {x43160000 x43300000 x3f03c084} {x43178000 x432a8000 x3f03c084} {x43178000 x43248000 x3f044084} {x43168000 x431d0000 x3f054085} {x43140000 x43160000 x3f04c085} {x430f8000 x430f0000 x3f064286} {x430a8000 x43080000 x3f064286} {x43040000 x43018000 x3f05c086} {x42fb0000 x42f70000 x3f05c086} {x42ec0000 x42ed0000 x3f04c085} {x42db0000 x42e30000 x3f05c086} {x42c90000 x42dc0000 x3f05c086} {x42b70000 x42d90000 x3f064286} {x42a80000 x42d80000 x3f064286} {x42980000 x42db0000 x3f05c086} {x428c0000 x42e20000 x3f064286} {x42720000 x42fd0000 x3f06c287} {x42640000 x43080000 x3f064286} {x425c0000 x43128000 x3f04c085} {x42560000 x431c8000 x3f02c083} {x42560000 x43268000 x3f003e80} {x425a0000 x432f8000 x3efe7cfe} {x42640000 x43380000 x3efc7cfc} {x42740000 x433f8000 x3efd7cfd} {x42850000 x43468000 x3efd7cfd} {x42930000 x434c0000 x3efd7cfd} {x42a20000 x43508000 x3efc7cfc} {x42b40000 x43538000 x3efd7cfd} {x42c70000 x43560000 x3efc7cfc} {x42da0000 x43570000 x3efc7cfc} {x42ee0000 x43570000 x3efc7cfc} {x430b8000 x43518000 x3efc7cfc} {x43160000 x434d0000 x3efd7cfd} {x431f8000 x43470000 x3efa78fa} {x43280000 x433f8000 x3efa78fa} {x432e8000 x43388000 x3efb78fb} {x43330000 x43308000 x3ef878f8} {x43358000 x43288000 x3efb78fb} {x43360000 x43210000 x3ef778f7} {x43360000 x43198000 x3efb78fb} {x43348000 x43120000 x3efb78fb} {x43308000 x430b0000 x3efc7cfc} {x432b0000 x43040000 x3efc7cfc} {x43240000 x42fb0000 x3efc7cfc} {x431b0000 x42f00000 x3efd7cfd} {x43070000 x42de0000 x3efd7cfd} {x42fa0000 x42d90000 x3efc7cfc} {x42e70000 x42d60000 x3efe7cfe} {x42d50000 x42d60000 x3efc7cfc} {x42c50000 x42db0000 x3eff7cff} {x42b60000 x42e30000 x3efc7cfc} {x42a90000 x42ee0000 x3efd7cfd} {x429e0000 x42fc0000 x3efd7cfd} {x42950000 x43060000 x3efc7cfc} {x42900000 x430f0000 x3ef678f6} {x42900000 x43170000 x3ef074f0} {x42950000 x431e0000 x3eea70ea} {x429e0000 x43238000 x3ee970e9} {x42ac0000 x43270000 x3ee970e9} {x42bd0000 x43298000 x3ee670e6} {x42d10000 x432b0000 x3ee670e6} {x42e70000 x432b0000 x3ee770e7} {x43008000 x43298000 x3ee670e6} {x430d0000 x43260000 x3ee770e7} {x431b0000 x43230000 x3ee670e6} {x43290000 x431e0000 x3ee770e7} {x43358000 x43190000 x3ee770e7} {x43400000 x43130000 x3ee970e9} {x43480000 x430d0000 x3eeb70eb} {x434d0000 x43060000 x3ef274f2} {x434f0000 x42fc0000 x3ef478f4} {x434f0000 x42ec0000 x3ef578f5} {x434d0000 x42dc0000 x3ef678f6} {x43430000 x42bd0000 x3ef678f6} {x433d0000 x42b00000 x3ef878f8} {x43350000 x42a20000 x3efa78fa} {x432d0000 x42950000 x3ef878f8} {x43238000 x42880000 x3efc7cfc} {x43198000 x42760000 x3efa78fa} {x43100000 x42600000 x3efa78fa} {x43068000 x424c0000 x3efd7cfd} {x42fc0000 x423c0000 x3efd7cfd} {x42ee0000 x42300000 x3efd7cfd} {x42dd0000 x42240000 x3efc7cfc} {x42db0000 x42240000 x3efc7cfc} {x42dc0000 x422c0000 x3ef778f7} {x42e20000 x42340000 x3ef374f3} {x42ea0000 x42400000 x3ef274f2} {x42f70000 x424a0000 x3ef174f1} {x43028000 x42540000 x3ef174f1} {x430b8000 x42580000 x3ef174f1} {x43150000 x42580000 x3ef174f1} {x431f0000 x42560000 x3ef174f1} {x43288000 x424e0000 x3ef174f1} {x43310000 x42440000 x3ef174f1} {x43390000 x42380000 x3ef274f2} {x433e8000 x42280000 x3ef274f2} {x43420000 x421a0000 x3ef174f1} {x43430000 x420a0000 x3ef778f7} {x43420000 x41f40000 x3efb78fb} {x433e8000 x41d00000 x3efc7cfc} {x43398000 x41b00000 x3efd7cfd} {x43328000 x41940000 x3efd7cfd} {x432a8000 x41700000 x3eff7cff} {x43210000 x41500000 x3eff7cff} {x43170000 x41280000 x3efe7cfe} {x430c8000 x41180000 x3eff7cff} {x43018000 x41180000 x3f00be81} {x42ed0000 x41180000 x3f00be81} {x42d80000 x41300000 x3f003e80} {x42c20000 x41580000 x3f00be81} {x42ae0000 x41840000 x3f00be81} {x429d0000 x41a00000 x3f003e80} {x428e0000 x41c00000 x3f00be81} {x42850000 x41d80000 x3f03c084} {x427e0000 x41f00000 x3f054085} {x42780000 x42040000 x3f05c086} {x42760000 x420a0000 x3f064286} {x42740000 x420e0000 x3f05c086} {x42740000 x42120000 x3f064286} {x42720000 x42180000 x3f064286} {x426e0000 x421c0000 x3f05c086} {x42680000 x421e0000 x3f064286} {x425e0000 x42220000 x3f064286} {x42560000 x42260000 x3f064286} {x424c0000 x422c0000 x3f05c086} {x42440000 x42300000 x3f064286} {x423a0000 x42340000 x3f064286} {x42340000 x42360000 x3f064286} {x422e0000 x42380000 x3f05c086} {x42280000 x423a0000 x3f05c086} {x422c0000 x423a0000 x3f044084} {x42380000 x42400000 x3f03c084} {x42420000 x42440000 x3f03c084} {x424e0000 x424a0000 x3f044084} {x42600000 x42540000 x3f03c084} {x42760000 x425e0000 x3f044084} {x428a0000 x426a0000 x3f024082} {x429a0000 x42780000 x3f03c084} {x42b00000 x42830000 x3f03c084} {x42c80000 x428a0000 x3f044084} {x42e20000 x428f0000 x3f03c084} {x42fd0000 x42940000 x3f03c084} {x430c8000 x42960000 x3f054085} {x431a8000 x42970000 x3f04c085} {x43268000 x42960000 x3f03c084} {x43310000 x42930000 x3f03c084} {x43398000 x428f0000 x3f04c085} {x433f8000 x428a0000 x3f03c084} {x43430000 x42830000 x3f013e81} {x43450000 x42780000 x3eef74ef} {x43450000 x426a0000 x3ed468d4} {x43448000 x425e0000 x3e9d4c9d} {x43430000 x42500000 x3db050b0}}} {t x42f794e9 x42d3d07a} {a r 0 g x3f395810 ro 0 go 0 bo 0 ao 0 bs x40e00000 bu 1 str 1 spx x44800000 spy x44428000 sb 1 ltn x447d8000 ltm x447d8000 ltt x40000000 tt x41880000}}}}}} toolbox {brush { { selectAll r 0.404 g 0 bs 7 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush r 0.404 g 0 bs 7 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 1001 ltm 1001 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_paint_color {0.4040002823 0 1 1} toolbar_brush_size 7 toolbar_brush_hardness 0.200000003 toolbar_lifetime_type single toolbar_lifetime_start 1001 toolbar_lifetime_end 1001 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {1024 778} color {0.4040002823 0 1 1} colorOverlay {0 0 0 0} lifetime_start 1001 lifetime_end 1001 motionblur_on true brush_size 7 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint1 xpos 466 ypos 137 } Dot { name Dot3 xpos 500 ypos 270 } set Na052a000 [stack 0] Write { name Write1 label "export udim
    render range : \[value input.first_frame] - \[value input.last_frame]" xpos 576 ypos 344 } StickyNote { inputs 0 name StickyNote1 label "Texture painted on frame 1001 and 1014 = udim 1001 and 1014" xpos 566 ypos 135 } StickyNote { inputs 0 name StickyNote2 label "3D view cant display uvtile, have to check through scanlineRender" xpos 568 ypos 529 } Axis2 { inputs 0 rotate {0 {curve x1001 -20 x1050 20} 0} name Axis3 xpos 1852 ypos 509 } Camera2 { translate {66.90603638 35.25645828 -5.300000668} rotate {-24.62797338 90.0000025 0} name Camera2 xpos 1852 ypos 631 } ReadGeo2 { inputs 0 file ./Trex_UVtile_skin.abc localizationPolicy off version 2 use_geometry_colors false range_first 0 range_last 0 scene_view {{0} imported: 0 selected: 0 items: /root/Trex_UVtile:Skin/Trex_UVtile:SkinShape} name ReadGeo5 xpos 2011 ypos -279 } Group { name UVEditor5 onCreate "\nthisGRP = nuke.thisGroup()\nif not thisGRP\['disable_error'].getValue() :\n import os\n import re\n\n fontpath = re.split( '/|\"\"' , nuke.EXE_PATH )\n fontpath.pop()\n fontpath += \['plugins','fonts']\n \n if os.path.isfile( '/'.join( fontpath + \['UtopiaBold.pfa'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['UtopiaBold.pfa'] ) )\n elif os.path.isfile( '/'.join( fontpath + \['CourierBold.pfa'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['CourierBold.pfa'] ) )\n elif os.path.isfile( '/'.join( fontpath + \['Courier10PitchBold.pfb'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['Courier10PitchBold.pfb'] ) )\n else :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['BitstreamCharterBold.pfb'] ) )\n" tile_color 0x6666ff xpos 2011 ypos -171 addUserKnob {20 tab_general l General} addUserKnob {3 texSize l "texture size"} texSize 256 addUserKnob {41 filter T SR.filter} addUserKnob {41 antialiasing T SR.antialiasing} addUserKnob {26 ""} addUserKnob {41 view_wireframe l "view wireframe" T menu02.view_wireframe} addUserKnob {7 wireframe_size l "wireframe size" +DISABLED R 0.1 10} wireframe_size 0.1 addUserKnob {26 ""} addUserKnob {41 output T menu01.output} addUserKnob {30 uv_shift l INVISIBLE +INVISIBLE} addUserKnob {41 scanRes +INVISIBLE T store.scanRes} addUserKnob {22 udim_export l export +DISABLED T "thisGRP = nuke.thisGroup()\ndataCheckNode = nuke.toNode('dataCheck')\n\n########################################################\n\nusrUV = thisGRP\['uv_shift'].getValue()\ndataReturn = \[]\n\nprogBar = nuke.ProgressTask('Checking UV')\njobCount = 0\n\nfor v in range (0, 10) :\n for u in range (0, 10) :\n\n ### progress bar\n jobCount += 1\n progShow = int(jobCount/100 * 100)\n if progBar.isCancelled() :\n break;\n progBar.setProgress(progShow)\n #################\n\n thisGRP\['uv_shift'].setValue(\[u,v])\n nuke.execute(dataCheckNode, nuke.frame(), nuke.frame())\n if dataCheckNode\['maxlumapixvalue'].getValue() != \[0.0, 0.0, 0.0] :\n dataReturn.append(1)\n else :\n dataReturn.append(0)\n\ndel progBar\n\ndataCheckNode\['maxlumapixdata'].clearAnimated()\ndataCheckNode\['maxlumapixvalue'].clearAnimated()\ndataCheckNode\['minlumapixdata'].clearAnimated()\ndataCheckNode\['minlumapixvalue'].clearAnimated()\n\nif len(dataReturn) == 100 :\n\tfor i in range (0, 100) :\n\t if dataReturn\[i] == 1 :\n\t uvMax = i\n\n\tthisGRP\['uv_shift'].setValue(usrUV)\n\n\t########################################################\n\n\tgoStore = nuke.toNode('store')\n\tgoStore\['fn'].execute()\n\n\troot = getLevel()\n\n\troot.begin()\n\toutFR = nuke.nodes.FrameRange()\n\toutFR\['first_frame'].setValue(1001)\n\toutFR\['last_frame'].setValue(1001 + uvMax)\n\toutFR\['label'].setValue( 'udim range : 1001 - \{0\}'.format( str(1001 + uvMax) ) )\n\toutFR.setInput(0, thisGRP)\n\toutFR.setXYpos(int(thisGRP\['xpos'].value()), int(thisGRP\['ypos'].value()+80))\n\n\texpDot = nuke.nodes.Dot()\n\texpDot\['label'].setValue('Texture modify here : swap the paint/patch texture into udim frame')\n\texpDot.setInput(0, outFR)\n\n\tyDot = nuke.nodes.Dot()\n\tyDot.setInput(0, expDot)\n\n\tuvGRP = nuke.nodes.Group()\n\tuvGRP\['label'].setValue('udim stitch for nuke')\n\n\tnDot = nuke.nodes.Dot()\n\tnDot\['label'].setValue('Connect to Geo')\n\troot.end()\n\n\tuvGRP.begin()\n\tinNode = nuke.nodes.Input(name='udim')\n\tcropNode = nuke.nodes.Crop()\n\tcropNode\['crop'].setValue(1)\n\tcropNode.setInput(0, inNode)\n\tallDot = nuke.nodes.Dot()\n\tallDot.setInput(0, cropNode)\n\n\tuvMerge = nuke.nodes.Merge2()\n\toutNode = nuke.nodes.Output()\n\toutNode.setInput(0, uvMerge)\n\n\tfor i in range (0, uvMax+1) :\n\t uDimHold = nuke.nodes.FrameHold()\n\t uDimHold\['first_frame'].setValue(1001+i)\n\t uDimHold.setInput(0, allDot)\n\t \n\t uvTran = nuke.nodes.Transform()\n\t uvTran.addKnob(nuke.UV_Knob('uv_offset'))\n\t if i < 10 :\n\t u = i\n\t v = 0\n\t else :\n\t if i < 100 :\n\t u = int(str(i)\[1])\n\t v = int(str(i)\[0])\n\t uvTran\['uv_offset'].setValue(\[u, v])\n\t uvTran\['translate'].setExpression('input.width*uv_offset.u', 0)\n\t uvTran\['translate'].setExpression('input.height*uv_offset.v', 1)\n\t uvTran.setInput(0, uDimHold)\n\n\t uvMerge.setInput(i+3, uvTran)\n\n\n\tuvGRP.end()\n\n\tuvGRP.setInput(0, yDot)\n\tnDot.setInput(0, uvGRP)\n\n\troot.begin()\n\texWrite = nuke.nodes.Write()\n\texWrite.setInput(0, yDot)\n\texWrite\['label'].setValue('export udim
    render range : \[value input.first_frame] - \[value input.last_frame]')\n\troot.end()\n\n\tdel uvMax\nelse :\n\tnuke.message('Scan process terminated by user.')\n\ndel dataReturn" +STARTLINE} addUserKnob {26 ""} addUserKnob {41 font T store.font} addUserKnob {6 disable_error l "disable text" +STARTLINE} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.4} addUserKnob {26 l_DATE l "Date Modified" T 2020-04-24} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.4
    - fix misspelling of knob's label
    - fix not working disable text knob

    1.3
    - fix font issue
      works on linux, mac & windows

    1.2
    - preview in uv space set limited 
      in 1024 resolution for not drag 
      down speed purpose.
    - added show tile number
    - changed uv combine to uv stitch
      in export group
    - code update
    - scan size reduce, speed up process\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -1755 ypos 302 bdwidth 263 bdheight 296 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x424242ff label "UV preview" note_font_size 42 xpos -824 ypos 451 bdwidth 343 bdheight 672 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x424242ff label udim note_font_size 42 xpos -328 ypos 451 bdwidth 354 bdheight 675 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x424242ff label uvtile note_font_size 42 xpos 109 ypos 451 bdwidth 354 bdheight 675 } Input { inputs 0 name tex xpos -1000 ypos 83 number 1 } Wireframe { inputs 0 line_width {{wireframe_size}} name Wireframe1 xpos -866 ypos 207 } Switch { inputs 2 which {{!view_wireframe}} name Switch2 xpos -1000 ypos 207 } Input { inputs 0 name geo xpos -1171 ypos 82 } ApplyMaterial { inputs 2 name ApplyMaterial1 xpos -1171 ypos 207 } Dot { name Dot6 xpos -1137 ypos 287 } Dot { name Dot1 xpos -1137 ypos 384 } set Nb3efa400 [stack 0] Reformat { inputs 0 type "to box" box_width {{store.scanRes}} box_height {{box_width}} box_fixed true name scanRes xpos -1061 ypos 595 } ScanlineRender { inputs 2 conservative_shader_sampling false transparency false ztest_enabled false projection_mode uv overscan {{store.scanRes*10}} shutteroffset centred motion_vectors_type off MB_channel none name SR1 xpos -1171 ypos 595 } Remove { operation keep channels rgb name Remove1 xpos -1171 ypos 675 } Transform { translate {{store.scanRes*uv_offset.u*-1} {store.scanRes*uv_offset*-1}} shutteroffset centred name pos_shift xpos -1171 ypos 740 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {{uv_shift} {uv_shift}} } Crop { box {0 0 {store.scanRes} {store.scanRes}} reformat true crop false name Crop1 xpos -1171 ypos 801 } CurveTool { operation "Max Luma Pixel" ROI {0 0 {store.scanRes} {store.scanRes}} intensitydata {0 0 0 0} maxlumapixvalue {0 0 0} minlumapixvalue {0 0 0} name dataCheck xpos -1171 ypos 881 } NoOp { inputs 0 name menu01 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['output'].getValue() == 1 :\n thisGRP\['udim_export'].setEnabled(True)\nelse :\n thisGRP\['udim_export'].setEnabled(False)\n" xpos -1669 ypos 392 addUserKnob {20 User} addUserKnob {4 output M {"preview in uv space" udim "uv tile" "uv pass"}} output "uv pass" } Reformat { inputs 0 type "to box" box_width {{texSize*10}} box_height {{texSize*10}} box_fixed true resize none name Reformat4 xpos 719 ypos 638 } Expression { expr0 x/width expr1 y/height channel2 none channel3 none name uv xpos 719 ypos 720 } Multiply { channels rgb value {10 10 1 1} name Multiply1 xpos 719 ypos 798 } Reformat { type "to box" box_width {{texSize}} box_height {{texSize}} box_fixed true resize none center false pbb true name Reformat3 xpos 719 ypos 878 } Dot { name Dot8 xpos 753 ypos 1225 } push $Nb3efa400 Dot { name Dot4 xpos -780 ypos 384 } set Nb7288400 [stack 0] Reformat { inputs 0 type "to box" box_width {{texSize}} box_height {{box_width}} box_fixed true name res xpos 5 ypos 381 } ScanlineRender { inputs 2 conservative_shader_sampling false transparency false ztest_enabled false filter Impulse projection_mode uv overscan {{texSize*10 x1009 1948}} shutteroffset centred motion_vectors_type off MB_channel none name SR xpos -154 ypos 381 } Dot { name Dot2 xpos -120 ypos 628 } set Nb2983400 [stack 0] Shuffle { red black green black blue black alpha black name Shuffle1 xpos -292 ypos 625 } Text { output rgb cliptype none message " 91 92 93 94 95 96 97 98 99 00\n 81 82 83 84 85 86 87 88 89 90\n 71 72 73 74 75 76 77 78 79 80\n 61 62 63 64 65 66 67 68 69 70\n 51 52 53 54 55 56 57 58 59 60\n 41 42 43 44 45 46 47 48 49 50\n 31 32 33 34 35 36 37 38 39 40\n 21 22 23 24 25 26 27 28 29 30\n 11 12 13 14 15 16 17 18 19 20\n 01 02 03 04 05 06 07 08 09 10" font "\[value store.font]" kerning 0.236 leading 1.051 yjustify bottom Transform 1 box {0 0 1024 999} translate {0 {"( ( texSize * 10 ) / 1024 ) *25"}} scale {{"( texSize * 10 ) / 1024"}} name Text2 selected true xpos -292 ypos 707 disable {{disable_error}} } Multiply { channels rgb value {0 0.05 0.05 1} name Multiply3 xpos -292 ypos 769 } Dot { name Dot13 xpos -258 ypos 821 } Dot { name Dot11 xpos -178 ypos 821 } set Nb392dc00 [stack 0] Dot { name Dot12 xpos 221 ypos 821 } push $Nb2983400 Dot { name Dot5 xpos 281 ypos 628 } Merge2 { inputs 2 operation under Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge4 xpos 247 ypos 879 } Crop { box {0 0 {texSize*10} {texSize*10}} crop false name Crop4 xpos 247 ypos 961 } Dot { name Dot7 xpos 281 ypos 1204 } push $Nb392dc00 push $Nb2983400 Merge2 { inputs 2 operation under Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge3 xpos -154 ypos 879 } Transform { translate {{texSize*uv_offset.u*-1 i} {texSize*uv_offset*-1 i}} shutteroffset centred name pos_shift1 xpos -154 ypos 961 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {{"frame <=1001 ? 0 : (frame-1)%10"} {"frame < 1000 ? 0 : int(((frame-1)/10)-100)"}} } Dot { name Dot3 xpos -120 ypos 1202 } Reformat { inputs 0 format "1024 1024 0 0 1024 1024 1 square_1K" name Reformat2 xpos -693 ypos 712 } Dot { name Dot9 xpos -659 ypos 770 } set Nb7ce1000 [stack 0] Dot { name Dot10 xpos -533 ypos 770 } Text { output rgb message " 91 92 93 94 95 96 97 98 99 00\n 81 82 83 84 85 86 87 88 89 90\n 71 72 73 74 75 76 77 78 79 80\n 61 62 63 64 65 66 67 68 69 70\n 51 52 53 54 55 56 57 58 59 60\n 41 42 43 44 45 46 47 48 49 50\n 31 32 33 34 35 36 37 38 39 40\n 21 22 23 24 25 26 27 28 29 30\n 11 12 13 14 15 16 17 18 19 20\n 01 02 03 04 05 06 07 08 09 10" font "\[value store.font]" kerning 0.236 leading 1.051 yjustify bottom Transform 1 box {0 0 1024 999} translate {0 25} name Text1 xpos -567 ypos 818 disable {{disable_error}} } Multiply { channels rgb value {0 0.05 0.05 1} name Multiply2 xpos -567 ypos 887 } push $Nb7ce1000 Grid { name Grid1 xpos -693 ypos 814 } Merge2 { inputs 2 name Merge2 xpos -693 ypos 887 } push $Nb7288400 Reformat { inputs 0 format "1024 1024 0 0 1024 1024 1 square_1K" name Reformat5 xpos -689 ypos 531 } Reformat { type scale scale 0.1 resize none name Reformat6 xpos -689 ypos 594 } ScanlineRender { inputs 2 conservative_shader_sampling false transparency false ztest_enabled false projection_mode uv overscan 2560 shutteroffset centred motion_vectors_type off MB_channel none name SR2 xpos -814 ypos 594 } Merge2 { inputs 2 operation under name Merge1 xpos -814 ypos 887 } Crop { box {0 0 1024 1024} reformat true crop false name Crop2 xpos -814 ypos 969 } Switch { inputs 4 which {{output}} name Switch1 xpos -814 ypos 1412 } Output { name Output1 xpos -814 ypos 1597 } NoOp { inputs 0 name menu02 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['view_wireframe'].getValue() == 1 :\n thisGRP\['wireframe_size'].setEnabled(True)\nelse :\n thisGRP\['wireframe_size'].setEnabled(False)\n" xpos -1668 ypos 484 addUserKnob {20 User} addUserKnob {6 view_wireframe l "view wireframe" +STARTLINE} } NoOp { inputs 0 name store xpos -1419 ypos 388 addUserKnob {20 User} addUserKnob {22 fn T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel" +STARTLINE} addUserKnob {3 scanRes} scanRes 64 addUserKnob {2 font} font "C:/Program Files/Nuke12.0v3/plugins/fonts/UtopiaBold.pfa" } end_group ReadGeo2 { file ./Trex_UVtile_skin.abc localizationPolicy off version 2 use_geometry_colors false range_first 0 range_last 0 scene_view {{0} imported: 0 selected: 0 items: /root/Trex_UVtile:Skin/Trex_UVtile:SkinShape} name ReadGeo9 xpos 2011 ypos 509 } Reformat { inputs 0 format "1280 720 0 0 1280 720 1 HD_720" name Reformat3 xpos 2141 ypos 647 } ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type off MB_channel none name ScanlineRender3 xpos 2011 ypos 651 } Axis2 { inputs 0 rotate {0 {curve x1001 -20 x1050 20} 0} name Axis1 xpos 1065 ypos -503 } Camera2 { translate {66.90603638 35.25645828 -5.300000668} rotate {-24.62797338 90.0000025 0} name Camera1 xpos 1065 ypos -381 } Dot { name Dot7 xpos 1089 ypos -259 } set Na172b400 [stack 0] Dot { name Dot8 xpos 1089 ypos 665 } push $Na172b400 FrameHold { first_frame 1001 name FrameHold1 xpos 1155 ypos -269 } CheckerBoard2 { inputs 0 name CheckerBoard1 xpos 1265 ypos -391 } Project3D2 { inputs 2 name Project3D1 xpos 1265 ypos -263 } ReadGeo2 { inputs 0 file ./Trex_UVtile_skin.abc localizationPolicy off version 2 use_geometry_colors false range_first 0 range_last 0 scene_view {{0} imported: 0 selected: 0 items: /root/Trex_UVtile:Skin/Trex_UVtile:SkinShape} name ReadGeo3 xpos 1382 ypos -267 } Group { inputs 2 name UVEditor4 onCreate "\nthisGRP = nuke.thisGroup()\nif not thisGRP\['disable_error'].getValue() :\n import os\n import re\n\n fontpath = re.split( '/|\"\"' , nuke.EXE_PATH )\n fontpath.pop()\n fontpath += \['plugins','fonts']\n \n if os.path.isfile( '/'.join( fontpath + \['UtopiaBold.pfa'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['UtopiaBold.pfa'] ) )\n elif os.path.isfile( '/'.join( fontpath + \['CourierBold.pfa'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['CourierBold.pfa'] ) )\n elif os.path.isfile( '/'.join( fontpath + \['Courier10PitchBold.pfb'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['Courier10PitchBold.pfb'] ) )\n else :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['BitstreamCharterBold.pfb'] ) )\n" tile_color 0x6666ff xpos 1316 ypos -176 addUserKnob {20 tab_general l General} addUserKnob {3 texSize l "texture size"} texSize 256 addUserKnob {41 filter T SR.filter} addUserKnob {41 antialiasing T SR.antialiasing} addUserKnob {26 ""} addUserKnob {41 view_wireframe l "view wireframe" T menu02.view_wireframe} addUserKnob {7 wireframe_size l "wireframe size" +DISABLED R 0.1 10} wireframe_size 0.1 addUserKnob {26 ""} addUserKnob {41 output T menu01.output} addUserKnob {30 uv_shift l INVISIBLE +INVISIBLE} addUserKnob {41 scanRes +INVISIBLE T store.scanRes} addUserKnob {22 udim_export l export +DISABLED T "thisGRP = nuke.thisGroup()\ndataCheckNode = nuke.toNode('dataCheck')\n\n########################################################\n\nusrUV = thisGRP\['uv_shift'].getValue()\ndataReturn = \[]\n\nprogBar = nuke.ProgressTask('Checking UV')\njobCount = 0\n\nfor v in range (0, 10) :\n for u in range (0, 10) :\n\n ### progress bar\n jobCount += 1\n progShow = int(jobCount/100 * 100)\n if progBar.isCancelled() :\n break;\n progBar.setProgress(progShow)\n #################\n\n thisGRP\['uv_shift'].setValue(\[u,v])\n nuke.execute(dataCheckNode, nuke.frame(), nuke.frame())\n if dataCheckNode\['maxlumapixvalue'].getValue() != \[0.0, 0.0, 0.0] :\n dataReturn.append(1)\n else :\n dataReturn.append(0)\n\ndel progBar\n\ndataCheckNode\['maxlumapixdata'].clearAnimated()\ndataCheckNode\['maxlumapixvalue'].clearAnimated()\ndataCheckNode\['minlumapixdata'].clearAnimated()\ndataCheckNode\['minlumapixvalue'].clearAnimated()\n\nif len(dataReturn) == 100 :\n\tfor i in range (0, 100) :\n\t if dataReturn\[i] == 1 :\n\t uvMax = i\n\n\tthisGRP\['uv_shift'].setValue(usrUV)\n\n\t########################################################\n\n\tgoStore = nuke.toNode('store')\n\tgoStore\['fn'].execute()\n\n\troot = getLevel()\n\n\troot.begin()\n\toutFR = nuke.nodes.FrameRange()\n\toutFR\['first_frame'].setValue(1001)\n\toutFR\['last_frame'].setValue(1001 + uvMax)\n\toutFR\['label'].setValue( 'udim range : 1001 - \{0\}'.format( str(1001 + uvMax) ) )\n\toutFR.setInput(0, thisGRP)\n\toutFR.setXYpos(int(thisGRP\['xpos'].value()), int(thisGRP\['ypos'].value()+80))\n\n\texpDot = nuke.nodes.Dot()\n\texpDot\['label'].setValue('Texture modify here : swap the paint/patch texture into udim frame')\n\texpDot.setInput(0, outFR)\n\n\tyDot = nuke.nodes.Dot()\n\tyDot.setInput(0, expDot)\n\n\tuvGRP = nuke.nodes.Group()\n\tuvGRP\['label'].setValue('udim stitch for nuke')\n\n\tnDot = nuke.nodes.Dot()\n\tnDot\['label'].setValue('Connect to Geo')\n\troot.end()\n\n\tuvGRP.begin()\n\tinNode = nuke.nodes.Input(name='udim')\n\tcropNode = nuke.nodes.Crop()\n\tcropNode\['crop'].setValue(1)\n\tcropNode.setInput(0, inNode)\n\tallDot = nuke.nodes.Dot()\n\tallDot.setInput(0, cropNode)\n\n\tuvMerge = nuke.nodes.Merge2()\n\toutNode = nuke.nodes.Output()\n\toutNode.setInput(0, uvMerge)\n\n\tfor i in range (0, uvMax+1) :\n\t uDimHold = nuke.nodes.FrameHold()\n\t uDimHold\['first_frame'].setValue(1001+i)\n\t uDimHold.setInput(0, allDot)\n\t \n\t uvTran = nuke.nodes.Transform()\n\t uvTran.addKnob(nuke.UV_Knob('uv_offset'))\n\t if i < 10 :\n\t u = i\n\t v = 0\n\t else :\n\t if i < 100 :\n\t u = int(str(i)\[1])\n\t v = int(str(i)\[0])\n\t uvTran\['uv_offset'].setValue(\[u, v])\n\t uvTran\['translate'].setExpression('input.width*uv_offset.u', 0)\n\t uvTran\['translate'].setExpression('input.height*uv_offset.v', 1)\n\t uvTran.setInput(0, uDimHold)\n\n\t uvMerge.setInput(i+3, uvTran)\n\n\n\tuvGRP.end()\n\n\tuvGRP.setInput(0, yDot)\n\tnDot.setInput(0, uvGRP)\n\n\troot.begin()\n\texWrite = nuke.nodes.Write()\n\texWrite.setInput(0, yDot)\n\texWrite\['label'].setValue('export udim
    render range : \[value input.first_frame] - \[value input.last_frame]')\n\troot.end()\n\n\tdel uvMax\nelse :\n\tnuke.message('Scan process terminated by user.')\n\ndel dataReturn" +STARTLINE} addUserKnob {26 ""} addUserKnob {41 font T store.font} addUserKnob {6 disable_error l "disable text" +STARTLINE} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.4} addUserKnob {26 l_DATE l "Date Modified" T 2020-04-24} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.4
    - fix misspelling of knob's label
    - fix not working disable text knob

    1.3
    - fix font issue
      works on linux, mac & windows

    1.2
    - preview in uv space set limited 
      in 1024 resolution for not drag 
      down speed purpose.
    - added show tile number
    - changed uv combine to uv stitch
      in export group
    - code update
    - scan size reduce, speed up process\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -1755 ypos 302 bdwidth 263 bdheight 296 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x424242ff label "UV preview" note_font_size 42 xpos -824 ypos 451 bdwidth 343 bdheight 672 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x424242ff label udim note_font_size 42 xpos -328 ypos 451 bdwidth 354 bdheight 675 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x424242ff label uvtile note_font_size 42 xpos 109 ypos 451 bdwidth 354 bdheight 675 } Input { inputs 0 name tex xpos -1000 ypos 83 number 1 } Wireframe { inputs 0 line_width {{wireframe_size}} name Wireframe1 xpos -866 ypos 207 } Switch { inputs 2 which {{!view_wireframe}} name Switch2 xpos -1000 ypos 207 } Input { inputs 0 name geo xpos -1171 ypos 82 } ApplyMaterial { inputs 2 name ApplyMaterial1 xpos -1171 ypos 207 } Dot { name Dot6 xpos -1137 ypos 287 } Dot { name Dot1 xpos -1137 ypos 384 } set Nbcb69c00 [stack 0] Reformat { inputs 0 type "to box" box_width {{store.scanRes}} box_height {{box_width}} box_fixed true name scanRes xpos -1061 ypos 595 } ScanlineRender { inputs 2 conservative_shader_sampling false transparency false ztest_enabled false projection_mode uv overscan {{store.scanRes*10}} shutteroffset centred motion_vectors_type off MB_channel none name SR1 xpos -1171 ypos 595 } Remove { operation keep channels rgb name Remove1 xpos -1171 ypos 675 } Transform { translate {{store.scanRes*uv_offset.u*-1} {store.scanRes*uv_offset*-1}} shutteroffset centred name pos_shift xpos -1171 ypos 740 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {{uv_shift} {uv_shift}} } Crop { box {0 0 {store.scanRes} {store.scanRes}} reformat true crop false name Crop1 xpos -1171 ypos 801 } CurveTool { operation "Max Luma Pixel" ROI {0 0 {store.scanRes} {store.scanRes}} intensitydata {0 0 0 0} maxlumapixvalue {0 0 0} minlumapixvalue {0 0 0} name dataCheck xpos -1171 ypos 881 } NoOp { inputs 0 name menu01 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['output'].getValue() == 1 :\n thisGRP\['udim_export'].setEnabled(True)\nelse :\n thisGRP\['udim_export'].setEnabled(False)\n" xpos -1669 ypos 392 addUserKnob {20 User} addUserKnob {4 output M {"preview in uv space" udim "uv tile" "uv pass"}} output "uv tile" } Reformat { inputs 0 type "to box" box_width {{texSize*10}} box_height {{texSize*10}} box_fixed true resize none name Reformat4 xpos 719 ypos 638 } Expression { expr0 x/width expr1 y/height channel2 none channel3 none name uv xpos 719 ypos 720 } Multiply { channels rgb value {10 10 1 1} name Multiply1 xpos 719 ypos 798 } Reformat { type "to box" box_width {{texSize}} box_height {{texSize}} box_fixed true resize none center false pbb true name Reformat3 xpos 719 ypos 878 } Dot { name Dot8 xpos 753 ypos 1225 } push $Nbcb69c00 Dot { name Dot4 xpos -780 ypos 384 } set Nbcbc7c00 [stack 0] Reformat { inputs 0 type "to box" box_width {{texSize}} box_height {{box_width}} box_fixed true name res xpos 5 ypos 381 } ScanlineRender { inputs 2 conservative_shader_sampling false transparency false ztest_enabled false filter Impulse projection_mode uv overscan {{texSize*10 x1009 1948}} shutteroffset centred motion_vectors_type off MB_channel none name SR xpos -154 ypos 381 } Dot { name Dot2 xpos -120 ypos 628 } set Nbcbc6c00 [stack 0] Shuffle { red black green black blue black alpha black name Shuffle1 xpos -292 ypos 625 } Text { output rgb cliptype none message " 91 92 93 94 95 96 97 98 99 00\n 81 82 83 84 85 86 87 88 89 90\n 71 72 73 74 75 76 77 78 79 80\n 61 62 63 64 65 66 67 68 69 70\n 51 52 53 54 55 56 57 58 59 60\n 41 42 43 44 45 46 47 48 49 50\n 31 32 33 34 35 36 37 38 39 40\n 21 22 23 24 25 26 27 28 29 30\n 11 12 13 14 15 16 17 18 19 20\n 01 02 03 04 05 06 07 08 09 10" font "\[value store.font]" kerning 0.236 leading 1.051 yjustify bottom Transform 1 box {0 0 1024 999} translate {0 {"( ( texSize * 10 ) / 1024 ) *25"}} scale {{"( texSize * 10 ) / 1024"}} name Text2 selected true xpos -292 ypos 707 disable {{disable_error}} } Multiply { channels rgb value {0 0.05 0.05 1} name Multiply3 xpos -292 ypos 769 } Dot { name Dot13 xpos -258 ypos 821 } Dot { name Dot11 xpos -178 ypos 821 } set Nbcbf1400 [stack 0] Dot { name Dot12 xpos 221 ypos 821 } push $Nbcbc6c00 Dot { name Dot5 xpos 281 ypos 628 } Merge2 { inputs 2 operation under Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge4 xpos 247 ypos 879 } Crop { box {0 0 {texSize*10} {texSize*10}} crop false name Crop4 xpos 247 ypos 961 } Dot { name Dot7 xpos 281 ypos 1204 } push $Nbcbf1400 push $Nbcbc6c00 Merge2 { inputs 2 operation under Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge3 xpos -154 ypos 879 } Transform { translate {{texSize*uv_offset.u*-1 i} {texSize*uv_offset*-1 i}} shutteroffset centred name pos_shift1 xpos -154 ypos 961 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {{"frame <=1001 ? 0 : (frame-1)%10"} {"frame < 1000 ? 0 : int(((frame-1)/10)-100)"}} } Dot { name Dot3 xpos -120 ypos 1202 } Reformat { inputs 0 format "1024 1024 0 0 1024 1024 1 square_1K" name Reformat2 xpos -693 ypos 712 } Dot { name Dot9 xpos -659 ypos 770 } set Nbcc12800 [stack 0] Dot { name Dot10 xpos -533 ypos 770 } Text { output rgb message " 91 92 93 94 95 96 97 98 99 00\n 81 82 83 84 85 86 87 88 89 90\n 71 72 73 74 75 76 77 78 79 80\n 61 62 63 64 65 66 67 68 69 70\n 51 52 53 54 55 56 57 58 59 60\n 41 42 43 44 45 46 47 48 49 50\n 31 32 33 34 35 36 37 38 39 40\n 21 22 23 24 25 26 27 28 29 30\n 11 12 13 14 15 16 17 18 19 20\n 01 02 03 04 05 06 07 08 09 10" font "\[value store.font]" kerning 0.236 leading 1.051 yjustify bottom Transform 1 box {0 0 1024 999} translate {0 25} name Text1 xpos -567 ypos 818 disable {{disable_error}} } Multiply { channels rgb value {0 0.05 0.05 1} name Multiply2 xpos -567 ypos 887 } push $Nbcc12800 Grid { name Grid1 xpos -693 ypos 814 } Merge2 { inputs 2 name Merge2 xpos -693 ypos 887 } push $Nbcbc7c00 Reformat { inputs 0 format "1024 1024 0 0 1024 1024 1 square_1K" name Reformat5 xpos -689 ypos 531 } Reformat { type scale scale 0.1 resize none name Reformat6 xpos -689 ypos 594 } ScanlineRender { inputs 2 conservative_shader_sampling false transparency false ztest_enabled false projection_mode uv overscan 2560 shutteroffset centred motion_vectors_type off MB_channel none name SR2 xpos -814 ypos 594 } Merge2 { inputs 2 operation under name Merge1 xpos -814 ypos 887 } Crop { box {0 0 1024 1024} reformat true crop false name Crop2 xpos -814 ypos 969 } Switch { inputs 4 which {{output}} name Switch1 xpos -814 ypos 1412 } Output { name Output1 xpos -814 ypos 1597 } NoOp { inputs 0 name menu02 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['view_wireframe'].getValue() == 1 :\n thisGRP\['wireframe_size'].setEnabled(True)\nelse :\n thisGRP\['wireframe_size'].setEnabled(False)\n" xpos -1668 ypos 484 addUserKnob {20 User} addUserKnob {6 view_wireframe l "view wireframe" +STARTLINE} } NoOp { inputs 0 name store xpos -1419 ypos 388 addUserKnob {20 User} addUserKnob {22 fn T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel" +STARTLINE} addUserKnob {3 scanRes} scanRes 64 addUserKnob {2 font} font "C:/Program Files/Nuke12.0v3/plugins/fonts/UtopiaBold.pfa" } end_group ReadGeo2 { file ./Trex_UVtile_skin.abc localizationPolicy off version 2 use_geometry_colors false range_first 0 range_last 0 scene_view {{0} imported: 0 selected: 0 items: /root/Trex_UVtile:Skin/Trex_UVtile:SkinShape} name ReadGeo4 xpos 1316 ypos 521 } Reformat { inputs 0 format "1280 720 0 0 1280 720 1 HD_720" name Reformat2 xpos 1446 ypos 657 } ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type off MB_channel none name ScanlineRender2 xpos 1316 ypos 661 } push $N8decb800 Dot { name Dot6 xpos 252 ypos 647 } push $Na052a000 Group { name Group1 label "udim stitch for nuke" xpos 466 ypos 344 } Input { inputs 0 name udim } Crop { name Crop1 } Dot { name Dot1 } set Na18e7800 [stack 0] FrameHold { first_frame 1022 name FrameHold22 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform22 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {1 2} } push $Na18e7800 FrameHold { first_frame 1021 name FrameHold21 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform21 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {0 2} } push $Na18e7800 FrameHold { first_frame 1020 name FrameHold20 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform20 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {9 1} } push $Na18e7800 FrameHold { first_frame 1019 name FrameHold19 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform19 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {8 1} } push $Na18e7800 FrameHold { first_frame 1018 name FrameHold18 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform18 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {7 1} } push $Na18e7800 FrameHold { first_frame 1017 name FrameHold17 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform17 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {6 1} } push $Na18e7800 FrameHold { first_frame 1016 name FrameHold16 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform16 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {5 1} } push $Na18e7800 FrameHold { first_frame 1015 name FrameHold15 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform15 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {4 1} } push $Na18e7800 FrameHold { first_frame 1014 name FrameHold14 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform14 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {3 1} } push $Na18e7800 FrameHold { first_frame 1013 name FrameHold13 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform13 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {2 1} } push $Na18e7800 FrameHold { first_frame 1012 name FrameHold12 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform12 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {1 1} } push $Na18e7800 FrameHold { first_frame 1011 name FrameHold11 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform11 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {0 1} } push $Na18e7800 FrameHold { first_frame 1010 name FrameHold10 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform10 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {9 0} } push $Na18e7800 FrameHold { first_frame 1009 name FrameHold9 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform9 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {8 0} } push $Na18e7800 FrameHold { first_frame 1008 name FrameHold8 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform8 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {7 0} } push $Na18e7800 FrameHold { first_frame 1007 name FrameHold7 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform7 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {6 0} } push $Na18e7800 FrameHold { first_frame 1006 name FrameHold6 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform6 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {5 0} } push $Na18e7800 FrameHold { first_frame 1005 name FrameHold5 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform5 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {4 0} } push $Na18e7800 FrameHold { first_frame 1004 name FrameHold4 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform4 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {3 0} } push $Na18e7800 FrameHold { first_frame 1003 name FrameHold3 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform3 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {2 0} } push $Na18e7800 FrameHold { first_frame 1002 name FrameHold2 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform2 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {1 0} } push $Na18e7800 FrameHold { first_frame 1001 name FrameHold1 } Transform { translate {{input.width*uv_offset.u} {input.height*uv_offset.v}} name Transform1 addUserKnob {20 User} addUserKnob {30 uv_offset} } push 0 push 0 push 0 Merge2 { inputs 24+1 name Merge1 } Output { name Output1 } end_group Dot { name Dot4 label "Connect to Geo" xpos 500 ypos 424 } ReadGeo2 { file ./Trex_UVtile_skin.abc localizationPolicy off version 2 use_geometry_colors false range_first 0 range_last 0 scene_view {{0} imported: 0 selected: 0 items: /root/Trex_UVtile:Skin/Trex_UVtile:SkinShape} name ReadGeo1 xpos 466 ypos 524 } Reformat { inputs 0 format "1280 720 0 0 1280 720 1 HD_720" name Reformat1 xpos 596 ypos 639 } ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type off MB_channel none name ScanlineRender1 xpos 466 ypos 643 } ReadGeo2 { inputs 0 file ./Trex_UVtile_skin.abc localizationPolicy off version 2 use_geometry_colors false range_first 0 range_last 0 scene_view {{0} imported: 0 selected: 0 items: /root/Trex_UVtile:Skin/Trex_UVtile:SkinShape} name ReadGeo2 xpos -157 ypos -276 } Group { name UVEditor2 onCreate "\nthisGRP = nuke.thisGroup()\nif not thisGRP\['disable_error'].getValue() :\n import os\n import re\n\n fontpath = re.split( '/|\"\"' , nuke.EXE_PATH )\n fontpath.pop()\n fontpath += \['plugins','fonts']\n \n if os.path.isfile( '/'.join( fontpath + \['UtopiaBold.pfa'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['UtopiaBold.pfa'] ) )\n elif os.path.isfile( '/'.join( fontpath + \['CourierBold.pfa'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['CourierBold.pfa'] ) )\n elif os.path.isfile( '/'.join( fontpath + \['Courier10PitchBold.pfb'] ) ) :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['Courier10PitchBold.pfb'] ) )\n else :\n thisGRP\['font'].setValue( '/'.join( fontpath + \['BitstreamCharterBold.pfb'] ) )\n" tile_color 0x6666ff xpos -157 ypos -170 addUserKnob {20 tab_general l General} addUserKnob {3 texSize l "texture size"} texSize 1024 addUserKnob {41 filter T SR.filter} addUserKnob {41 antialiasing T SR.antialiasing} addUserKnob {26 ""} addUserKnob {41 view_wireframe l "view wireframe" T menu02.view_wireframe} addUserKnob {7 wireframe_size l "wireframe size" R 0.1 10} wireframe_size 0.1 addUserKnob {26 ""} addUserKnob {41 output T menu01.output} addUserKnob {30 uv_shift l INVISIBLE +INVISIBLE} addUserKnob {41 scanRes +INVISIBLE T store.scanRes} addUserKnob {22 udim_export l export +DISABLED T "thisGRP = nuke.thisGroup()\ndataCheckNode = nuke.toNode('dataCheck')\n\n########################################################\n\nusrUV = thisGRP\['uv_shift'].getValue()\ndataReturn = \[]\n\nprogBar = nuke.ProgressTask('Checking UV')\njobCount = 0\n\nfor v in range (0, 10) :\n for u in range (0, 10) :\n\n ### progress bar\n jobCount += 1\n progShow = int(jobCount/100 * 100)\n if progBar.isCancelled() :\n break;\n progBar.setProgress(progShow)\n #################\n\n thisGRP\['uv_shift'].setValue(\[u,v])\n nuke.execute(dataCheckNode, nuke.frame(), nuke.frame())\n if dataCheckNode\['maxlumapixvalue'].getValue() != \[0.0, 0.0, 0.0] :\n dataReturn.append(1)\n else :\n dataReturn.append(0)\n\ndel progBar\n\ndataCheckNode\['maxlumapixdata'].clearAnimated()\ndataCheckNode\['maxlumapixvalue'].clearAnimated()\ndataCheckNode\['minlumapixdata'].clearAnimated()\ndataCheckNode\['minlumapixvalue'].clearAnimated()\n\nif len(dataReturn) == 100 :\n\tfor i in range (0, 100) :\n\t if dataReturn\[i] == 1 :\n\t uvMax = i\n\n\tthisGRP\['uv_shift'].setValue(usrUV)\n\n\t########################################################\n\n\tgoStore = nuke.toNode('store')\n\tgoStore\['fn'].execute()\n\n\troot = getLevel()\n\n\troot.begin()\n\toutFR = nuke.nodes.FrameRange()\n\toutFR\['first_frame'].setValue(1001)\n\toutFR\['last_frame'].setValue(1001 + uvMax)\n\toutFR\['label'].setValue( 'udim range : 1001 - \{0\}'.format( str(1001 + uvMax) ) )\n\toutFR.setInput(0, thisGRP)\n\toutFR.setXYpos(int(thisGRP\['xpos'].value()), int(thisGRP\['ypos'].value()+80))\n\n\texpDot = nuke.nodes.Dot()\n\texpDot\['label'].setValue('Texture modify here : swap the paint/patch texture into udim frame')\n\texpDot.setInput(0, outFR)\n\n\tyDot = nuke.nodes.Dot()\n\tyDot.setInput(0, expDot)\n\n\tuvGRP = nuke.nodes.Group()\n\tuvGRP\['label'].setValue('udim stitch for nuke')\n\n\tnDot = nuke.nodes.Dot()\n\tnDot\['label'].setValue('Connect to Geo')\n\troot.end()\n\n\tuvGRP.begin()\n\tinNode = nuke.nodes.Input(name='udim')\n\tcropNode = nuke.nodes.Crop()\n\tcropNode\['crop'].setValue(1)\n\tcropNode.setInput(0, inNode)\n\tallDot = nuke.nodes.Dot()\n\tallDot.setInput(0, cropNode)\n\n\tuvMerge = nuke.nodes.Merge2()\n\toutNode = nuke.nodes.Output()\n\toutNode.setInput(0, uvMerge)\n\n\tfor i in range (0, uvMax+1) :\n\t uDimHold = nuke.nodes.FrameHold()\n\t uDimHold\['first_frame'].setValue(1001+i)\n\t uDimHold.setInput(0, allDot)\n\t \n\t uvTran = nuke.nodes.Transform()\n\t uvTran.addKnob(nuke.UV_Knob('uv_offset'))\n\t if i < 10 :\n\t u = i\n\t v = 0\n\t else :\n\t if i < 100 :\n\t u = int(str(i)\[1])\n\t v = int(str(i)\[0])\n\t uvTran\['uv_offset'].setValue(\[u, v])\n\t uvTran\['translate'].setExpression('input.width*uv_offset.u', 0)\n\t uvTran\['translate'].setExpression('input.height*uv_offset.v', 1)\n\t uvTran.setInput(0, uDimHold)\n\n\t uvMerge.setInput(i+3, uvTran)\n\n\n\tuvGRP.end()\n\n\tuvGRP.setInput(0, yDot)\n\tnDot.setInput(0, uvGRP)\n\n\troot.begin()\n\texWrite = nuke.nodes.Write()\n\texWrite.setInput(0, yDot)\n\texWrite\['label'].setValue('export udim
    render range : \[value input.first_frame] - \[value input.last_frame]')\n\troot.end()\n\n\tdel uvMax\nelse :\n\tnuke.message('Scan process terminated by user.')\n\ndel dataReturn" +STARTLINE} addUserKnob {26 ""} addUserKnob {41 font T store.font} addUserKnob {6 disable_error l "disable text" +STARTLINE} addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.4} addUserKnob {26 l_DATE l "Date Modified" T 2020-04-24} addUserKnob {22 btn_CHANGELOG l Changelog T "log = \"1.4
    - fix misspelling of knob's label
    - fix not working disable text knob

    1.3
    - fix font issue
      works on linux, mac & windows

    1.2
    - preview in uv space set limited 
      in 1024 resolution for not drag 
      down speed purpose.
    - added show tile number
    - changed uv combine to uv stitch
      in export group
    - code update
    - scan size reduce, speed up process\"\nnuke.message( log )" +STARTLINE} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -1755 ypos 302 bdwidth 263 bdheight 296 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x424242ff label "UV preview" note_font_size 42 xpos -824 ypos 451 bdwidth 343 bdheight 672 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x424242ff label udim note_font_size 42 xpos -328 ypos 451 bdwidth 354 bdheight 675 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x424242ff label uvtile note_font_size 42 xpos 109 ypos 451 bdwidth 354 bdheight 675 } Input { inputs 0 name tex xpos -1000 ypos 83 number 1 } Wireframe { inputs 0 line_width {{wireframe_size}} name Wireframe1 xpos -866 ypos 207 } Switch { inputs 2 which {{!view_wireframe}} name Switch2 xpos -1000 ypos 207 } Input { inputs 0 name geo xpos -1171 ypos 82 } ApplyMaterial { inputs 2 name ApplyMaterial1 xpos -1171 ypos 207 } Dot { name Dot6 xpos -1137 ypos 287 } Dot { name Dot1 xpos -1137 ypos 384 } set Nb4b16c00 [stack 0] Reformat { inputs 0 type "to box" box_width {{store.scanRes}} box_height {{box_width}} box_fixed true name scanRes xpos -1061 ypos 595 } ScanlineRender { inputs 2 conservative_shader_sampling false transparency false ztest_enabled false projection_mode uv overscan {{store.scanRes*10}} shutteroffset centred motion_vectors_type off MB_channel none name SR1 xpos -1171 ypos 595 } Remove { operation keep channels rgb name Remove1 xpos -1171 ypos 675 } Transform { translate {{store.scanRes*uv_offset.u*-1} {store.scanRes*uv_offset*-1}} shutteroffset centred name pos_shift xpos -1171 ypos 740 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {{uv_shift} {uv_shift}} } Crop { box {0 0 {store.scanRes} {store.scanRes}} reformat true crop false name Crop1 xpos -1171 ypos 801 } CurveTool { operation "Max Luma Pixel" ROI {0 0 {store.scanRes} {store.scanRes}} intensitydata {0 0 0 0} maxlumapixvalue {0 0 0} minlumapixvalue {0 0 0} name dataCheck xpos -1171 ypos 881 } NoOp { inputs 0 name menu01 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['output'].getValue() == 1 :\n thisGRP\['udim_export'].setEnabled(True)\nelse :\n thisGRP\['udim_export'].setEnabled(False)\n" xpos -1669 ypos 392 addUserKnob {20 User} addUserKnob {4 output M {"preview in uv space" udim "uv tile" "uv pass"}} } Reformat { inputs 0 type "to box" box_width {{texSize*10}} box_height {{texSize*10}} box_fixed true resize none name Reformat4 xpos 719 ypos 638 } Expression { expr0 x/width expr1 y/height channel2 none channel3 none name uv xpos 719 ypos 720 } Multiply { channels rgb value {10 10 1 1} name Multiply1 xpos 719 ypos 798 } Reformat { type "to box" box_width {{texSize}} box_height {{texSize}} box_fixed true resize none center false pbb true name Reformat3 xpos 719 ypos 878 } Dot { name Dot8 xpos 753 ypos 1225 } push $Nb4b16c00 Dot { name Dot4 xpos -780 ypos 384 } set Nb4b72c00 [stack 0] Reformat { inputs 0 type "to box" box_width {{texSize}} box_height {{box_width}} box_fixed true name res xpos 5 ypos 381 } ScanlineRender { inputs 2 conservative_shader_sampling false transparency false ztest_enabled false filter Impulse projection_mode uv overscan {{texSize*10 x1009 1948}} shutteroffset centred motion_vectors_type off MB_channel none name SR xpos -154 ypos 381 } Dot { name Dot2 xpos -120 ypos 628 } set Nb4ba5c00 [stack 0] Shuffle { red black green black blue black alpha black name Shuffle1 xpos -292 ypos 625 } Text { output rgb cliptype none message " 91 92 93 94 95 96 97 98 99 00\n 81 82 83 84 85 86 87 88 89 90\n 71 72 73 74 75 76 77 78 79 80\n 61 62 63 64 65 66 67 68 69 70\n 51 52 53 54 55 56 57 58 59 60\n 41 42 43 44 45 46 47 48 49 50\n 31 32 33 34 35 36 37 38 39 40\n 21 22 23 24 25 26 27 28 29 30\n 11 12 13 14 15 16 17 18 19 20\n 01 02 03 04 05 06 07 08 09 10" font "\[value store.font]" kerning 0.236 leading 1.051 yjustify bottom Transform 1 box {0 0 1024 999} translate {0 {"( ( texSize * 10 ) / 1024 ) *25"}} scale {{"( texSize * 10 ) / 1024"}} name Text2 selected true xpos -292 ypos 707 disable {{disable_error}} } Multiply { channels rgb value {0 0.05 0.05 1} name Multiply3 xpos -292 ypos 769 } Dot { name Dot13 xpos -258 ypos 821 } Dot { name Dot11 xpos -178 ypos 821 } set Nb4ba4400 [stack 0] Dot { name Dot12 xpos 221 ypos 821 } push $Nb4ba5c00 Dot { name Dot5 xpos 281 ypos 628 } Merge2 { inputs 2 operation under Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge4 xpos 247 ypos 879 } Crop { box {0 0 {texSize*10} {texSize*10}} crop false name Crop4 xpos 247 ypos 961 } Dot { name Dot7 xpos 281 ypos 1204 } push $Nb4ba4400 push $Nb4ba5c00 Merge2 { inputs 2 operation under Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge3 xpos -154 ypos 879 } Transform { translate {{texSize*uv_offset.u*-1 i} {texSize*uv_offset*-1 i}} shutteroffset centred name pos_shift1 xpos -154 ypos 961 addUserKnob {20 User} addUserKnob {30 uv_offset} uv_offset {{"frame <=1001 ? 0 : (frame-1)%10"} {"frame < 1000 ? 0 : int(((frame-1)/10)-100)"}} } Dot { name Dot3 xpos -120 ypos 1202 } Reformat { inputs 0 format "1024 1024 0 0 1024 1024 1 square_1K" name Reformat2 xpos -693 ypos 712 } Dot { name Dot9 xpos -659 ypos 770 } set Na365d800 [stack 0] Dot { name Dot10 xpos -533 ypos 770 } Text { output rgb message " 91 92 93 94 95 96 97 98 99 00\n 81 82 83 84 85 86 87 88 89 90\n 71 72 73 74 75 76 77 78 79 80\n 61 62 63 64 65 66 67 68 69 70\n 51 52 53 54 55 56 57 58 59 60\n 41 42 43 44 45 46 47 48 49 50\n 31 32 33 34 35 36 37 38 39 40\n 21 22 23 24 25 26 27 28 29 30\n 11 12 13 14 15 16 17 18 19 20\n 01 02 03 04 05 06 07 08 09 10" font "\[value store.font]" kerning 0.236 leading 1.051 yjustify bottom Transform 1 box {0 0 1024 999} translate {0 25} name Text1 xpos -567 ypos 818 disable {{disable_error}} } Multiply { channels rgb value {0 0.05 0.05 1} name Multiply2 xpos -567 ypos 887 } push $Na365d800 Grid { name Grid1 xpos -693 ypos 814 } Merge2 { inputs 2 name Merge2 xpos -693 ypos 887 } push $Nb4b72c00 Reformat { inputs 0 format "1024 1024 0 0 1024 1024 1 square_1K" name Reformat5 xpos -689 ypos 531 } Reformat { type scale scale 0.1 resize none name Reformat6 xpos -689 ypos 594 } ScanlineRender { inputs 2 conservative_shader_sampling false transparency false ztest_enabled false projection_mode uv overscan 2560 shutteroffset centred motion_vectors_type off MB_channel none name SR2 xpos -814 ypos 594 } Merge2 { inputs 2 operation under name Merge1 xpos -814 ypos 887 } Crop { box {0 0 1024 1024} reformat true crop false name Crop2 xpos -814 ypos 969 } Switch { inputs 4 which {{output}} name Switch1 xpos -814 ypos 1412 } Output { name Output1 xpos -814 ypos 1597 } NoOp { inputs 0 name menu02 knobChanged "\nthisGRP = nuke.thisGroup()\nif thisGRP\['view_wireframe'].getValue() == 1 :\n thisGRP\['wireframe_size'].setEnabled(True)\nelse :\n thisGRP\['wireframe_size'].setEnabled(False)\n" xpos -1668 ypos 484 addUserKnob {20 User} addUserKnob {6 view_wireframe l "view wireframe" +STARTLINE} view_wireframe true } NoOp { inputs 0 name store xpos -1419 ypos 388 addUserKnob {20 User} addUserKnob {22 fn T "def getLevel() :\n\t### level define ###\n\tif len(nuke.thisNode().fullName().split('.')) == 1 :\n\t\t ggLevel = nuke.root()\n\telse :\n\t\t nodePath = nuke.thisNode().fullName().split('.')\n\t\t nodePath.pop()\n\t\t ggLevel = nuke.toNode('.'.join(nodePath))\n\treturn ggLevel" +STARTLINE} addUserKnob {3 scanRes} scanRes 64 addUserKnob {2 font} font "C:/Program Files/Nuke12.0v3/plugins/fonts/UtopiaBold.pfa" } end_group Dot { name Dot1 xpos -123 ypos 637 } ================================================ FILE: NukeSurvivalToolkit/nk_files/NST_WaterLens_sampleScript.nk ================================================ BackdropNode { inputs 0 name BackdropNode1 tile_color 0x8e8e3800 label "default node" note_font_size 42 xpos 64 ypos -724 bdwidth 243 bdheight 195 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x3c30ff label "different droplet in different shape with DOF\n\n- DOF inside the node with recommend setting" note_font_size 42 xpos 27 ypos -381 bdwidth 1025 bdheight 1561 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x3c30ff label "different droplet in different shape with DOF\n\n- can use DOF(zDefocus) precedural in a single node.\n- when defocus value is 1 or 0 inside the gizmo, the node will be disable to avoid drag down the speed." note_font_size 42 xpos 1200 ypos -389 bdwidth 1493 bdheight 1552 } BackdropNode { inputs 0 name BackdropNode4 tile_color 0x3c30ff label "different droplet in different shape in focus" note_font_size 42 xpos 2954 ypos -408 bdwidth 1493 bdheight 1552 } BackdropNode { inputs 0 name BackdropNode5 tile_color 0x3c30ff label "droplet in jiggle motion\n\n- like windshield in motion car (I use expression to generate a random motion on 'center' knob)" note_font_size 42 xpos 4650 ypos -397 bdwidth 1493 bdheight 1552 } BackdropNode { inputs 0 name BackdropNode6 tile_color 0x3c30ff label "droplet pop in on lens\n\n- I set the lifetime in rotopaint, but it can be any kind of animated matte." note_font_size 42 xpos 6431 ypos -398 bdwidth 1701 bdheight 1542 } RotoPaint { inputs 0 curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097664} {t x44200000 x43b40000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {p {x44614000 x438b0000 x3b800080} {x44614000 x438a8000 x3e4c60cc} {x44614000 x438a0000 x3e5260d2} {x44618000 x43890000 x3e6068e0} {x44618000 x43888000 x3e6670e6} {x44618000 x43880000 x3e6a70ea} {x44620000 x43880000 x3e6c70ec} {x44620000 x43868000 x3e7270f2} {x44620000 x43860000 x3e6e70ee} {x44624000 x43860000 x3e7678f6}}} {t x4461a666 x4388599a} {a ro 0 go 0 bo 0 ao 0 bs x42000000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000 ltm x41300000 ltn x41000000 ltt x40400000}}}}}} toolbox {brush { { selectAll bs 32 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush bs 32 str 1 ssx 1 ssy 1 sf 1 sb 1 ltt 0 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_size 32 toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {640 360} colorOverlay {0 0 0 0} lifetime_type "frame to end" lifetime_start 8 lifetime_end 11 motionblur_on true brush_size 32 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint14 label "x8 to the end" xpos 6593 ypos 803 } Read { inputs 0 file_type jpeg file <<>>/images/waterLensExampleBG.jpg format "1280 720 0 0 1280 720 1 HD_720" origset true name Read5 xpos 7779 ypos 27 } Dot { name Dot21 xpos 7813 ypos 290 } set N28da0c90 [stack 0] Dot { name Dot22 xpos 7642 ypos 290 } set N28da1700 [stack 0] Dot { name Dot23 xpos 7354 ypos 290 } set N28da3bc0 [stack 0] Dot { name Dot24 xpos 7095 ypos 290 } set N28da6080 [stack 0] Dot { name Dot25 xpos 6782 ypos 290 } Group { inputs 2 name WaterLens14 tile_color 0xffccff note_font Verdana xpos 6748 ypos 800 addUserKnob {20 tab_general l General} addUserKnob {12 center} center {902.5 274} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 0.96 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 1 addUserKnob {7 bend R -1 1} addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 1 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} output element addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 7 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set Nfec08420 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $Nfec08420 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set Nfec3f360 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set Nfec45ee0 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set Nfec4c920 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $Nfec4c920 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $Nfec45ee0 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set Nfec82590 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set Nfec84910 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $Nfec84910 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $Nfec82590 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { contrast 1.1 name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set Nfed1e630 [stack 0] push $Nfed1e630 push $Nfec3f360 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.5 0 -0.5} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group RotoPaint { inputs 0 curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097664} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {p {x42d20000 x43ae8000 x3c904090} {x42d40000 x43ae8000 x3e2248a2} {x42d80000 x43ae8000 x3e5868d8} {x42dc0000 x43af0000 x3e6a70ea} {x42e20000 x43af8000 x3e7e78fe} {x42e60000 x43b08000 x3e864086} {x42ec0000 x43b18000 x3e8b448b} {x42f40000 x43b30000 x3e8d448d} {x42fc0000 x43b50000 x3e8f448f} {x43030000 x43b70000 x3e914491} {x43070000 x43b88000 x3e914491} {x430c0000 x43ba8000 x3e954895} {x43110000 x43bc8000 x3e944894} {x43150000 x43be8000 x3e954895} {x43190000 x43c08000 x3e954895} {x431c0000 x43c18000 x3e944894} {x431f0000 x43c30000 x3e944894} {x43200000 x43c40000 x3e964896} {x43230000 x43c50000 x3e974897} {x43230000 x43c58000 x3e974897} {x43240000 x43c60000 x3e984898} {x43250000 x43c70000 x3e994899} {x43250000 x43c78000 x3e9b4c9b} {x43270000 x43c80000 x3e9f4c9f} {x43270000 x43c88000 x3e9f4c9f} {x43270000 x43c80000 x3e9b4c9b} {x43270000 x43c78000 x3e9b4c9b} {x43250000 x43c60000 x3e9d4c9d} {x43250000 x43c58000 x3e9d4c9d} {x43240000 x43c40000 x3e9d4c9d} {x43240000 x43c30000 x3e9d4c9d} {x43240000 x43c18000 x3e9d4c9d} {x43240000 x43bf8000 x3e9e4c9e} {x43240000 x43be0000 x3e9d4c9d} {x43240000 x43bc0000 x3e9d4c9d} {x43240000 x43b98000 x3e9e4c9e} {x43240000 x43b78000 x3e9e4c9e} {x43240000 x43b50000 x3e9d4c9d} {x43240000 x43b30000 x3e9d4c9d} {x43250000 x43b08000 x3e9d4c9d} {x43270000 x43ae8000 x3e9d4c9d} {x43280000 x43ac0000 x3e9d4c9d} {x43290000 x43aa0000 x3e9d4c9d} {x432b0000 x43a78000 x3e9f4c9f} {x432c0000 x43a58000 x3ea04ca0} {x432e0000 x43a38000 x3e9f4c9f} {x43300000 x43a18000 x3ea04ca0} {x43320000 x439f8000 x3ea04ca0} {x43340000 x439e0000 x3e9f4c9f} {x43360000 x439c0000 x3ea04ca0} {x43370000 x439a8000 x3e9f4c9f} {x43390000 x43998000 x3e9f4c9f} {x433b0000 x43988000 x3e9f4c9f} {x433d0000 x43978000 x3ea04ca0} {x433e0000 x43968000 x3e9f4c9f} {x433f0000 x43960000 x3e9f4c9f} {x43400000 x43960000 x3ea04ca0} {x43420000 x43958000 x3e9f4c9f} {x43420000 x43950000 x3e9f4c9f} {x43430000 x43950000 x3ea04ca0} {x43440000 x43940000 x3e9f4c9f} {x43460000 x43940000 x3ea04ca0} {x43470000 x43938000 x3e9c4c9c} {x43480000 x43938000 x3e844084} {x43490000 x43938000 x3ddc60dc}}} {t x43232762 x43b001f8} {a ro 0 go 0 bo 0 ao 0 bs x43300000 bu 1 str 1 spx x44800000 spy x44428000 sb 1 tt x41880000 ltm x41300000 ltn x40a00000 ltt x40400000}}}}}} toolbox {brush { { selectAll bs 176 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createOpenSpline str 1 ssx 1 ssy 1 sf 1 tt 10 } { addPoints str 1 ssx 1 ssy 1 sf 1 } { brush bs 176 str 1 ssx 1 ssy 1 sf 1 sb 1 ltt 0 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_size 176 toolbar_brush_hardness 0.200000003 toolbar_openspline_width 1 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {640 360} colorOverlay {0 0 0 0} lifetime_type "frame to end" lifetime_start 5 lifetime_end 11 motionblur_on true motionblur_shutter_offset_type centred openspline_width 1 brush_size 176 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint15 label "x5 to the end" xpos 6911 ypos 696 } push $N28da6080 Group { inputs 2 name WaterLens15 tile_color 0xffccff note_font Verdana xpos 7061 ypos 693 addUserKnob {20 tab_general l General} addUserKnob {12 center} center {183 331} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 0.96 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 0.8 addUserKnob {7 bend R -1 1} bend -0.49 addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 0.3 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} output element addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 7 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set Nfed41a60 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $Nfed41a60 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set Nfed56980 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set Nfed5d500 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set Nfed63f40 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $Nfed63f40 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $Nfed5d500 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set Nfeda17f0 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set Nfeda3cb0 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $Nfeda3cb0 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $Nfeda17f0 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { contrast 1.1 name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set Nfef3d610 [stack 0] push $Nfef3d610 push $Nfed56980 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.5 0 -0.5} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group RotoPaint { inputs 0 curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097664} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup OpenSpline1 1049088 bezier {{cc {f 1056800} {p {} {{a osw 1 osf 0} x44028000 x44220000} {x41400000 xc2180000} {xc0aa7400 x427fe970} {{a osw 1 osf x409c5a65} x440d54e8 x43cf82d2} {x410a7900 xc2cfe580} {xc1200000 x42580000} {{a osw 1 osf x40fbe1c8} x44060000 x43300000} {x41200000 xc2580000} {xc0d00000 x41280000} {{a osw 1 osf x421e6637} x440f0000 x42b40000} {x40a87080 xc1080ae8}}} {cc {f 1056800} {p {} {} {x41400000 xc2180000} {xc0aa7400 x427fe970} {} {x410a7900 xc2cfe580} {xc1200000 x42580000} {} {x41200000 xc2580000} {xc0d00000 x41280000} {} {x40a87080 xc1080ae8}}}} {t x440a4000 x43a74000} {a osbe 0 osee 0 osw 1 osf 0 str 1 tt x41200000 ft x40400000 a {{x41300000 0 0 1 1 1} {x41400000 1 1 1 0 1}} b {{x41300000 0 0 1 1 1} {x41400000 1 1 1 0 1}} g {{x41300000 0 0 1 1 1} {x41400000 1 1 1 0 1}} r {{x41300000 0 0 1 1 1} {x41400000 1 1 1 0 1}}}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createOpenSpline str 1 ssx 1 ssy 1 sf 1 tt 10 } { addPoints str 1 ssx 1 ssy 1 sf 1 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 ltt 0 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_hardness 0.200000003 toolbar_openspline_width 1 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {320 240} color {{curve x11 0 1}} colorOverlay {0 0 0 0} lifetime_type "all frames" motionblur_shutter_offset_type centred feather_type smooth openspline_width 1 brush_spacing 0.05000000075 brush_hardness 0.200000003 name RotoPaint16 label "x11 to the end" xpos 7181 ypos 564 } push $N28da3bc0 Group { inputs 2 name WaterLens16 tile_color 0xffccff note_font Verdana xpos 7320 ypos 561 addUserKnob {20 tab_general l General} addUserKnob {12 center} center {517 118} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 0.975 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 0.8 addUserKnob {7 bend R -1 1} addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 1 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} output element addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 7 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set N28df8100 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $N28df8100 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set Nb8110a0 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set Nb817c20 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set Nb81e660 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $Nb81e660 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $Nb817c20 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set Nb85bf10 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set Nb85e3d0 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $Nb85e3d0 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $Nb85bf10 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { contrast 1.12 name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set Nfefe1630 [stack 0] push $Nfefe1630 push $Nb8110a0 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.2 0 -0.2} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group RotoPaint { inputs 0 curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097664} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {p {x44780000 x43b60000 x3d4860c8} {x44780000 x43b50000 x3e874087} {x44780000 x43b40000 x3e944894} {x44780000 x43b30000 x3e9e4c9e} {x44788000 x43b10000 x3ead54ad} {x44790000 x43b00000 x3eb254b2} {x44790000 x43ae0000 x3eb658b6} {x44798000 x43ab0000 x3eb958b9} {x447a0000 x43a90000 x3ebb5cbb} {x447a8000 x43a60000 x3ebe5cbe} {x447b0000 x43a40000 x3ec15cc1} {x447b0000 x43a20000 x3ec15cc1} {x447b8000 x43a00000 x3ec360c3} {x447b8000 x439e0000 x3ebf5cbf} {x447c0000 x439d0000 x3ec25cc2} {x447c0000 x439c0000 x3ec25cc2} {x447c0000 x439b0000 x3ec25cc2} {x447c0000 x439a0000 x3ec25cc2}}} {t x447a1555 x43a7d555} {a ro 0 go 0 bo 0 ao 0 bs x42d80000 bu 1 str 1 spx x44800000 spy x44428000 sb 1 tt x41880000 ltm x41c80000 ltn x40400000 ltt x40400000}}}}}} toolbox {brush { { selectAll bs 108 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush bs 108 str 1 ssx 1 ssy 1 sf 1 sb 1 ltt 0 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_size 108 toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {640 360} colorOverlay {0 0 0 0} lifetime_type "frame to end" lifetime_start 3 lifetime_end 25 motionblur_on true brush_size 108 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint17 label "x3 to the end" xpos 7465 ypos 456 } push $N28da1700 Group { inputs 2 name WaterLens17 tile_color 0xffccff note_font Verdana xpos 7608 ypos 453 addUserKnob {20 tab_general l General} addUserKnob {12 center} center {1002 334} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 0.99 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 1.5 addUserKnob {7 bend R -1 1} bend -0.07 addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 0.2 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} output element addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 7 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set Nfee96b90 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $Nfee96b90 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set Nb910350 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set Nb916ed0 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set Nb91d910 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $Nb91d910 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $Nb916ed0 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set Nb88f110 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set Nb8915d0 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $Nb8915d0 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $Nb88f110 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { gain 1.1 name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set Nba2b200 [stack 0] push $Nba2b200 push $Nb910350 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.5 0 -0.5} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group Merge2 { inputs 2 name Merge10 xpos 7608 ypos 568 } Merge2 { inputs 2 name Merge11 xpos 7608 ypos 700 } Merge2 { inputs 2 name Merge12 xpos 7608 ypos 807 } push $N28da0c90 ZDefocus2 { size 25 max_size 50 legacy_resize_mode false show_legacy_resize_mode false bloom true bloom_gain 5 name ZDefocus4 xpos 7779 ypos 505 } Reformat { black_outside true name Reformat4 xpos 7779 ypos 593 } Merge2 { inputs 2 bbox B name Merge13 xpos 7779 ypos 807 } Dot { name Dot26 xpos 7813 ypos 1336 } RotoPaint { inputs 0 curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097664} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {p {x44780000 x43b60000 x3d4860c8} {x44780000 x43b50000 x3e874087} {x44780000 x43b40000 x3e944894} {x44780000 x43b30000 x3e9e4c9e} {x44788000 x43b10000 x3ead54ad} {x44790000 x43b00000 x3eb254b2} {x44790000 x43ae0000 x3eb658b6} {x44798000 x43ab0000 x3eb958b9} {x447a0000 x43a90000 x3ebb5cbb} {x447a8000 x43a60000 x3ebe5cbe} {x447b0000 x43a40000 x3ec15cc1} {x447b0000 x43a20000 x3ec15cc1} {x447b8000 x43a00000 x3ec360c3} {x447b8000 x439e0000 x3ebf5cbf} {x447c0000 x439d0000 x3ec25cc2} {x447c0000 x439c0000 x3ec25cc2} {x447c0000 x439b0000 x3ec25cc2} {x447c0000 x439a0000 x3ec25cc2}}} {t x447a1555 x43a7d555 0 xc3870000} {a ro 0 go 0 bo 0 ao 0 bs x435a0000 bu 1 str 1 spx x44800000 spy x44428000 sb 1 tt x41880000}}}}}} toolbox {brush { { selectAll bs 108 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush bs 108 str 1 ssx 1 ssy 1 sf 1 sb 1 ltt 0 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_size 108 toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {640 360} colorOverlay {0 0 0 0} lifetime_type "all frames" motionblur_on true brush_size 218 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint9 xpos 5095 ypos 827 } Read { inputs 0 file_type jpeg file <<>>/images/waterLensExampleBG.jpg format "1280 720 0 0 1280 720 1 HD_720" origset true name Read2 xpos 5409 ypos 47 } Dot { name Dot12 xpos 5443 ypos 400 } set N2784c1a0 [stack 0] Dot { name Dot13 xpos 5272 ypos 400 } Group { inputs 2 name WaterLens9 tile_color 0xffccff note_font Verdana xpos 5238 ypos 820 addUserKnob {20 tab_general l General} addUserKnob {12 center} center {{"curve + (random(0,frame)*3)-1.5" x1 735} {"curve + (random(1,frame)*3)-1.5" x1 338}} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 0.99 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 1.5 addUserKnob {7 bend R -1 1} bend -0.14 addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 0.2 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} output element addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 7 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set N27af5580 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $N27af5580 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set N27b0e430 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set N27b14fb0 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set N27b1b9f0 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $N27b1b9f0 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $N27b14fb0 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set N27b58e60 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set N27b5b320 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $N27b5b320 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $N27b58e60 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { gain 1.1 name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set N27bf0450 [stack 0] push $N27bf0450 push $N27b0e430 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.2 0 -0.2} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group push $N2784c1a0 ZDefocus2 { size 25 max_size 50 legacy_resize_mode false show_legacy_resize_mode false bloom true bloom_gain 5 name ZDefocus2 xpos 5409 ypos 574 } Reformat { black_outside true name Reformat1 xpos 5409 ypos 662 } Merge2 { inputs 2 bbox B name Merge5 xpos 5409 ypos 827 } Dot { name Dot27 xpos 5443 ypos 1390 } RotoPaint { inputs 0 curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44200000 x43b40000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {p {x44614000 x438b0000 x3b800080} {x44614000 x438a8000 x3e4c60cc} {x44614000 x438a0000 x3e5260d2} {x44618000 x43890000 x3e6068e0} {x44618000 x43888000 x3e6670e6} {x44618000 x43880000 x3e6a70ea} {x44620000 x43880000 x3e6c70ec} {x44620000 x43868000 x3e7270f2} {x44620000 x43860000 x3e6e70ee} {x44624000 x43860000 x3e7678f6}}} {t x4461a666 x4388599a} {a ro 0 go 0 bo 0 ao 0 bs x42000000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}}}}}} toolbox {brush { { selectAll bs 32 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush bs 32 str 1 ssx 1 ssy 1 sf 1 sb 1 ltt 0 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_size 32 toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {640 360} colorOverlay {0 0 0 0} lifetime_type "all frames" motionblur_on true brush_size 32 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint8 xpos 3045 ypos 795 } Read { inputs 0 file_type jpeg file <<>>/images/waterLensExampleBG.jpg format "1280 720 0 0 1280 720 1 HD_720" origset true name Read1 xpos 4229 ypos 15 } Dot { name Dot8 xpos 4263 ypos 278 } set N26de1520 [stack 0] Dot { name Dot7 xpos 4092 ypos 278 } set N26de71a0 [stack 0] Dot { name Dot19 xpos 3804 ypos 278 } set N26de9660 [stack 0] Dot { name Dot20 xpos 3545 ypos 278 } set N26debb20 [stack 0] Dot { name Dot11 xpos 3232 ypos 278 } Group { inputs 2 name WaterLens8 tile_color 0xffccff note_font Verdana xpos 3198 ypos 788 addUserKnob {20 tab_general l General} addUserKnob {12 center} center {902.5 274} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 0.96 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 1 addUserKnob {7 bend R -1 1} addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 1 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} output element addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 7 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set N26e0bb80 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $N26e0bb80 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set N26e20aa0 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set N26e27620 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set N26e2e060 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $N26e2e060 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $N26e27620 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set N26e6b910 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set N26e6ddd0 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $N26e6ddd0 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $N26e6b910 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { contrast 1.1 name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set N26b7c6a0 [stack 0] push $N26b7c6a0 push $N26e20aa0 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.5 0 -0.5} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group RotoPaint { inputs 0 curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097664} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {p {x42d20000 x43ae8000 x3c904090} {x42d40000 x43ae8000 x3e2248a2} {x42d80000 x43ae8000 x3e5868d8} {x42dc0000 x43af0000 x3e6a70ea} {x42e20000 x43af8000 x3e7e78fe} {x42e60000 x43b08000 x3e864086} {x42ec0000 x43b18000 x3e8b448b} {x42f40000 x43b30000 x3e8d448d} {x42fc0000 x43b50000 x3e8f448f} {x43030000 x43b70000 x3e914491} {x43070000 x43b88000 x3e914491} {x430c0000 x43ba8000 x3e954895} {x43110000 x43bc8000 x3e944894} {x43150000 x43be8000 x3e954895} {x43190000 x43c08000 x3e954895} {x431c0000 x43c18000 x3e944894} {x431f0000 x43c30000 x3e944894} {x43200000 x43c40000 x3e964896} {x43230000 x43c50000 x3e974897} {x43230000 x43c58000 x3e974897} {x43240000 x43c60000 x3e984898} {x43250000 x43c70000 x3e994899} {x43250000 x43c78000 x3e9b4c9b} {x43270000 x43c80000 x3e9f4c9f} {x43270000 x43c88000 x3e9f4c9f} {x43270000 x43c80000 x3e9b4c9b} {x43270000 x43c78000 x3e9b4c9b} {x43250000 x43c60000 x3e9d4c9d} {x43250000 x43c58000 x3e9d4c9d} {x43240000 x43c40000 x3e9d4c9d} {x43240000 x43c30000 x3e9d4c9d} {x43240000 x43c18000 x3e9d4c9d} {x43240000 x43bf8000 x3e9e4c9e} {x43240000 x43be0000 x3e9d4c9d} {x43240000 x43bc0000 x3e9d4c9d} {x43240000 x43b98000 x3e9e4c9e} {x43240000 x43b78000 x3e9e4c9e} {x43240000 x43b50000 x3e9d4c9d} {x43240000 x43b30000 x3e9d4c9d} {x43250000 x43b08000 x3e9d4c9d} {x43270000 x43ae8000 x3e9d4c9d} {x43280000 x43ac0000 x3e9d4c9d} {x43290000 x43aa0000 x3e9d4c9d} {x432b0000 x43a78000 x3e9f4c9f} {x432c0000 x43a58000 x3ea04ca0} {x432e0000 x43a38000 x3e9f4c9f} {x43300000 x43a18000 x3ea04ca0} {x43320000 x439f8000 x3ea04ca0} {x43340000 x439e0000 x3e9f4c9f} {x43360000 x439c0000 x3ea04ca0} {x43370000 x439a8000 x3e9f4c9f} {x43390000 x43998000 x3e9f4c9f} {x433b0000 x43988000 x3e9f4c9f} {x433d0000 x43978000 x3ea04ca0} {x433e0000 x43968000 x3e9f4c9f} {x433f0000 x43960000 x3e9f4c9f} {x43400000 x43960000 x3ea04ca0} {x43420000 x43958000 x3e9f4c9f} {x43420000 x43950000 x3e9f4c9f} {x43430000 x43950000 x3ea04ca0} {x43440000 x43940000 x3e9f4c9f} {x43460000 x43940000 x3ea04ca0} {x43470000 x43938000 x3e9c4c9c} {x43480000 x43938000 x3e844084} {x43490000 x43938000 x3ddc60dc}}} {t x43232762 x43b001f8} {a ro 0 go 0 bo 0 ao 0 bs x43300000 bu 1 str 1 spx x44800000 spy x44428000 sb 1 tt x41880000}}}}}} toolbox {brush { { selectAll bs 176 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createOpenSpline str 1 ssx 1 ssy 1 sf 1 tt 10 } { addPoints str 1 ssx 1 ssy 1 sf 1 } { brush bs 176 str 1 ssx 1 ssy 1 sf 1 sb 1 ltt 0 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_size 176 toolbar_brush_hardness 0.200000003 toolbar_openspline_width 1 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {1024 778} colorOverlay {0 0 0 0} lifetime_type "all frames" motionblur_on true motionblur_shutter_offset_type centred openspline_width 1 brush_size 176 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint4 xpos 3365 ypos 688 } push $N26debb20 Group { inputs 2 name WaterLens7 tile_color 0xffccff note_font Verdana xpos 3511 ypos 681 addUserKnob {20 tab_general l General} addUserKnob {12 center} center {183 331} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 0.96 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 0.8 addUserKnob {7 bend R -1 1} bend -0.49 addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 0.3 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} output element addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 7 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set N26be4440 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $N26be4440 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set N235135f0 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set N23519f10 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set N23520950 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $N23520950 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $N23519f10 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set N26f1d500 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set N26f1f9c0 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $N26f1f9c0 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $N26f1d500 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { contrast 1.1 name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set N26fb42e0 [stack 0] push $N26fb42e0 push $N235135f0 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.5 0 -0.5} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group RotoPaint { inputs 0 curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup OpenSpline1 1049088 bezier {{cc {f 1056800} {p {} {{a osw 1 osf 0} x44028000 x44220000} {x41400000 xc2180000} {xc0aa7400 x427fe970} {{a osw 1 osf x409c5a65} x440d54e8 x43cf82d2} {x410a7900 xc2cfe580} {xc1200000 x42580000} {{a osw 1 osf x40fbe1c8} x44060000 x43300000} {x41200000 xc2580000} {xc0d00000 x41280000} {{a osw 1 osf x421e6637} x440f0000 x42b40000} {x40a87080 xc1080ae8}}} {cc {f 1056800} {p {} {} {x41400000 xc2180000} {xc0aa7400 x427fe970} {} {x410a7900 xc2cfe580} {xc1200000 x42580000} {} {x41200000 xc2580000} {xc0d00000 x41280000} {} {x40a87080 xc1080ae8}}}} {t x440a4000 x43a74000} {a osbe 0 osee 0 osw 1 osf 0 str 1 tt x41200000 ft x40400000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createOpenSpline str 1 ssx 1 ssy 1 sf 1 tt 10 } { addPoints str 1 ssx 1 ssy 1 sf 1 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 ltt 0 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_hardness 0.200000003 toolbar_openspline_width 1 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {320 240} colorOverlay {0 0 0 0} lifetime_type "all frames" motionblur_shutter_offset_type centred feather_type smooth openspline_width 1 brush_spacing 0.05000000075 brush_hardness 0.200000003 name RotoPaint5 xpos 3634 ypos 556 } push $N26de9660 Group { inputs 2 name WaterLens6 tile_color 0xffccff note_font Verdana xpos 3770 ypos 549 addUserKnob {20 tab_general l General} addUserKnob {12 center} center {517 118} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 0.975 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 0.8 addUserKnob {7 bend R -1 1} addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 1 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} output element addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 7 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set N26ebcc30 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $N26ebcc30 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set N26ed1b50 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set N26ed86d0 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set N26edf110 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $N26edf110 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $N26ed86d0 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set N279209d0 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set N27922e90 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $N27922e90 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $N279209d0 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { contrast 1.12 name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set N279b85f0 [stack 0] push $N279b85f0 push $N26ed1b50 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.2 0 -0.2} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group RotoPaint { inputs 0 curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {p {x44780000 x43b60000 x3d4860c8} {x44780000 x43b50000 x3e874087} {x44780000 x43b40000 x3e944894} {x44780000 x43b30000 x3e9e4c9e} {x44788000 x43b10000 x3ead54ad} {x44790000 x43b00000 x3eb254b2} {x44790000 x43ae0000 x3eb658b6} {x44798000 x43ab0000 x3eb958b9} {x447a0000 x43a90000 x3ebb5cbb} {x447a8000 x43a60000 x3ebe5cbe} {x447b0000 x43a40000 x3ec15cc1} {x447b0000 x43a20000 x3ec15cc1} {x447b8000 x43a00000 x3ec360c3} {x447b8000 x439e0000 x3ebf5cbf} {x447c0000 x439d0000 x3ec25cc2} {x447c0000 x439c0000 x3ec25cc2} {x447c0000 x439b0000 x3ec25cc2} {x447c0000 x439a0000 x3ec25cc2}}} {t x447a1555 x43a7d555} {a ro 0 go 0 bo 0 ao 0 bs x42d80000 bu 1 str 1 spx x44800000 spy x44428000 sb 1 tt x41880000}}}}}} toolbox {brush { { selectAll bs 108 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush bs 108 str 1 ssx 1 ssy 1 sf 1 sb 1 ltt 0 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_size 108 toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {1024 778} colorOverlay {0 0 0 0} lifetime_type "all frames" motionblur_on true brush_size 108 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint6 xpos 3923 ypos 448 } push $N26de71a0 Group { inputs 2 name WaterLens5 tile_color 0xffccff note_font Verdana xpos 4058 ypos 441 addUserKnob {20 tab_general l General} addUserKnob {12 center} center {1002 334} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 0.99 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 1.5 addUserKnob {7 bend R -1 1} bend -0.07 addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 0.2 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} output element addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 7 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set N27a0cf10 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $N27a0cf10 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set N27a21e30 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set N27a289b0 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set N27a2f3f0 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $N27a2f3f0 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $N27a289b0 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set N26ca9920 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set N26cabde0 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $N26cabde0 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $N26ca9920 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { gain 1.1 name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set N27ac6450 [stack 0] push $N27ac6450 push $N27a21e30 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.5 0 -0.5} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group Merge2 { inputs 2 name Merge1 xpos 4058 ypos 556 } Merge2 { inputs 2 name Merge2 xpos 4058 ypos 688 } Merge2 { inputs 2 name Merge4 xpos 4058 ypos 795 } push $N26de1520 ZDefocus2 { size 25 max_size 50 legacy_resize_mode false show_legacy_resize_mode false bloom true bloom_gain 5 name ZDefocus1 xpos 4229 ypos 493 } Reformat { black_outside true name Reformat3 xpos 4229 ypos 581 } Merge2 { inputs 2 bbox B name Merge3 xpos 4229 ypos 795 } Dot { name Dot28 xpos 4263 ypos 1357 } RotoPaint { inputs 0 curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44200000 x43b40000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {p {x44614000 x438b0000 x3b800080} {x44614000 x438a8000 x3e4c60cc} {x44614000 x438a0000 x3e5260d2} {x44618000 x43890000 x3e6068e0} {x44618000 x43888000 x3e6670e6} {x44618000 x43880000 x3e6a70ea} {x44620000 x43880000 x3e6c70ec} {x44620000 x43868000 x3e7270f2} {x44620000 x43860000 x3e6e70ee} {x44624000 x43860000 x3e7678f6}}} {t x4461a666 x4388599a} {a ro 0 go 0 bo 0 ao 0 bs x42000000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}}}}}} toolbox {brush { { selectAll bs 32 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush bs 32 str 1 ssx 1 ssy 1 sf 1 sb 1 ltt 0 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_size 32 toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {640 360} colorOverlay {0 0 0 0} lifetime_type "all frames" motionblur_on true brush_size 32 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint10 xpos 1296 ypos 745 } Read { inputs 0 file_type jpeg file <<>>/images/waterLensExampleBG.jpg format "1280 720 0 0 1280 720 1 HD_720" origset true name Read4 xpos 2480 ypos -35 } Dot { name Dot14 xpos 2514 ypos 228 } set N232b47c0 [stack 0] Dot { name Dot15 xpos 2343 ypos 228 } set N232b55b0 [stack 0] Dot { name Dot16 xpos 2055 ypos 228 } set N232b7940 [stack 0] Dot { name Dot17 xpos 1796 ypos 228 } set N232b9cd0 [stack 0] Dot { name Dot18 xpos 1483 ypos 228 } Group { inputs 2 name WaterLens10 tile_color 0xffccff note_font Verdana xpos 1449 ypos 738 addUserKnob {20 tab_general l General} addUserKnob {12 center} center {902.5 274} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 0.96 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 1 addUserKnob {7 bend R -1 1} addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 1 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} output element addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 7 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set N2361c2f0 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $N2361c2f0 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set N23631210 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set N1ecf3a20 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set N1ecf70d0 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $N1ecf70d0 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $N1ecf3a20 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set N234068e0 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set N23408b10 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $N23408b10 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $N234068e0 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { contrast 1.1 name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set N268a0390 [stack 0] push $N268a0390 push $N23631210 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.5 0 -0.5} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group RotoPaint { inputs 0 curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097664} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {p {x42d20000 x43ae8000 x3c904090} {x42d40000 x43ae8000 x3e2248a2} {x42d80000 x43ae8000 x3e5868d8} {x42dc0000 x43af0000 x3e6a70ea} {x42e20000 x43af8000 x3e7e78fe} {x42e60000 x43b08000 x3e864086} {x42ec0000 x43b18000 x3e8b448b} {x42f40000 x43b30000 x3e8d448d} {x42fc0000 x43b50000 x3e8f448f} {x43030000 x43b70000 x3e914491} {x43070000 x43b88000 x3e914491} {x430c0000 x43ba8000 x3e954895} {x43110000 x43bc8000 x3e944894} {x43150000 x43be8000 x3e954895} {x43190000 x43c08000 x3e954895} {x431c0000 x43c18000 x3e944894} {x431f0000 x43c30000 x3e944894} {x43200000 x43c40000 x3e964896} {x43230000 x43c50000 x3e974897} {x43230000 x43c58000 x3e974897} {x43240000 x43c60000 x3e984898} {x43250000 x43c70000 x3e994899} {x43250000 x43c78000 x3e9b4c9b} {x43270000 x43c80000 x3e9f4c9f} {x43270000 x43c88000 x3e9f4c9f} {x43270000 x43c80000 x3e9b4c9b} {x43270000 x43c78000 x3e9b4c9b} {x43250000 x43c60000 x3e9d4c9d} {x43250000 x43c58000 x3e9d4c9d} {x43240000 x43c40000 x3e9d4c9d} {x43240000 x43c30000 x3e9d4c9d} {x43240000 x43c18000 x3e9d4c9d} {x43240000 x43bf8000 x3e9e4c9e} {x43240000 x43be0000 x3e9d4c9d} {x43240000 x43bc0000 x3e9d4c9d} {x43240000 x43b98000 x3e9e4c9e} {x43240000 x43b78000 x3e9e4c9e} {x43240000 x43b50000 x3e9d4c9d} {x43240000 x43b30000 x3e9d4c9d} {x43250000 x43b08000 x3e9d4c9d} {x43270000 x43ae8000 x3e9d4c9d} {x43280000 x43ac0000 x3e9d4c9d} {x43290000 x43aa0000 x3e9d4c9d} {x432b0000 x43a78000 x3e9f4c9f} {x432c0000 x43a58000 x3ea04ca0} {x432e0000 x43a38000 x3e9f4c9f} {x43300000 x43a18000 x3ea04ca0} {x43320000 x439f8000 x3ea04ca0} {x43340000 x439e0000 x3e9f4c9f} {x43360000 x439c0000 x3ea04ca0} {x43370000 x439a8000 x3e9f4c9f} {x43390000 x43998000 x3e9f4c9f} {x433b0000 x43988000 x3e9f4c9f} {x433d0000 x43978000 x3ea04ca0} {x433e0000 x43968000 x3e9f4c9f} {x433f0000 x43960000 x3e9f4c9f} {x43400000 x43960000 x3ea04ca0} {x43420000 x43958000 x3e9f4c9f} {x43420000 x43950000 x3e9f4c9f} {x43430000 x43950000 x3ea04ca0} {x43440000 x43940000 x3e9f4c9f} {x43460000 x43940000 x3ea04ca0} {x43470000 x43938000 x3e9c4c9c} {x43480000 x43938000 x3e844084} {x43490000 x43938000 x3ddc60dc}}} {t x43232762 x43b001f8} {a ro 0 go 0 bo 0 ao 0 bs x43300000 bu 1 str 1 spx x44800000 spy x44428000 sb 1 tt x41880000}}}}}} toolbox {brush { { selectAll bs 176 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createOpenSpline str 1 ssx 1 ssy 1 sf 1 tt 10 } { addPoints str 1 ssx 1 ssy 1 sf 1 } { brush bs 176 str 1 ssx 1 ssy 1 sf 1 sb 1 ltt 0 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_size 176 toolbar_brush_hardness 0.200000003 toolbar_openspline_width 1 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {1024 778} colorOverlay {0 0 0 0} lifetime_type "all frames" motionblur_on true motionblur_shutter_offset_type centred openspline_width 1 brush_size 176 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint11 xpos 1616 ypos 638 } push $N232b9cd0 Group { inputs 2 name WaterLens11 tile_color 0xffccff note_font Verdana xpos 1762 ypos 631 addUserKnob {20 tab_general l General} addUserKnob {12 center} center {183 331} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 0.96 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 0.8 addUserKnob {7 bend R -1 1} bend -0.49 addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 0.3 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} output element addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 7 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set N236c0a80 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $N236c0a80 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set N236d59a0 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set N236dc520 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set N236e2f60 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $N236e2f60 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $N236dc520 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set N2349d220 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set N2349f6e0 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $N2349f6e0 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $N2349d220 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { contrast 1.1 name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set N26a30d50 [stack 0] push $N26a30d50 push $N236d59a0 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.5 0 -0.5} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group RotoPaint { inputs 0 curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup OpenSpline1 1049088 bezier {{cc {f 1056800} {p {} {{a osw 1 osf 0} x44028000 x44220000} {x41400000 xc2180000} {xc0aa7400 x427fe970} {{a osw 1 osf x409c5a65} x440d54e8 x43cf82d2} {x410a7900 xc2cfe580} {xc1200000 x42580000} {{a osw 1 osf x40fbe1c8} x44060000 x43300000} {x41200000 xc2580000} {xc0d00000 x41280000} {{a osw 1 osf x421e6637} x440f0000 x42b40000} {x40a87080 xc1080ae8}}} {cc {f 1056800} {p {} {} {x41400000 xc2180000} {xc0aa7400 x427fe970} {} {x410a7900 xc2cfe580} {xc1200000 x42580000} {} {x41200000 xc2580000} {xc0d00000 x41280000} {} {x40a87080 xc1080ae8}}}} {t x440a4000 x43a74000} {a osbe 0 osee 0 osw 1 osf 0 str 1 tt x41200000 ft x40400000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createOpenSpline str 1 ssx 1 ssy 1 sf 1 tt 10 } { addPoints str 1 ssx 1 ssy 1 sf 1 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 ltt 0 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_hardness 0.200000003 toolbar_openspline_width 1 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {320 240} colorOverlay {0 0 0 0} lifetime_type "all frames" motionblur_shutter_offset_type centred feather_type smooth openspline_width 1 brush_spacing 0.05000000075 brush_hardness 0.200000003 name RotoPaint12 xpos 1885 ypos 506 } push $N232b7940 Group { inputs 2 name WaterLens12 tile_color 0xffccff note_font Verdana xpos 2021 ypos 499 addUserKnob {20 tab_general l General} addUserKnob {12 center} center {517 118} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 0.975 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 0.8 addUserKnob {7 bend R -1 1} addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 1 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} output element addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 7 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set N2690b680 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $N2690b680 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set N269205a0 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set N26927120 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set N2692db60 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $N2692db60 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $N26927120 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set N26aa5060 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set N26aa7520 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $N26aa7520 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $N26aa5060 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { contrast 1.12 name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set N2696b790 [stack 0] push $N2696b790 push $N269205a0 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.2 0 -0.2} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group RotoPaint { inputs 0 curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {p {x44780000 x43b60000 x3d4860c8} {x44780000 x43b50000 x3e874087} {x44780000 x43b40000 x3e944894} {x44780000 x43b30000 x3e9e4c9e} {x44788000 x43b10000 x3ead54ad} {x44790000 x43b00000 x3eb254b2} {x44790000 x43ae0000 x3eb658b6} {x44798000 x43ab0000 x3eb958b9} {x447a0000 x43a90000 x3ebb5cbb} {x447a8000 x43a60000 x3ebe5cbe} {x447b0000 x43a40000 x3ec15cc1} {x447b0000 x43a20000 x3ec15cc1} {x447b8000 x43a00000 x3ec360c3} {x447b8000 x439e0000 x3ebf5cbf} {x447c0000 x439d0000 x3ec25cc2} {x447c0000 x439c0000 x3ec25cc2} {x447c0000 x439b0000 x3ec25cc2} {x447c0000 x439a0000 x3ec25cc2}}} {t x447a1555 x43a7d555} {a ro 0 go 0 bo 0 ao 0 bs x42d80000 bu 1 str 1 spx x44800000 spy x44428000 sb 1 tt x41880000}}}}}} toolbox {brush { { selectAll bs 108 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush bs 108 str 1 ssx 1 ssy 1 sf 1 sb 1 ltt 0 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_size 108 toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {1024 778} colorOverlay {0 0 0 0} lifetime_type "all frames" motionblur_on true brush_size 108 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint13 xpos 2174 ypos 398 } push $N232b55b0 Group { inputs 2 name WaterLens13 tile_color 0xffccff note_font Verdana xpos 2309 ypos 391 addUserKnob {20 tab_general l General} addUserKnob {12 center} center {1002 334} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 0.99 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 1.5 addUserKnob {7 bend R -1 1} bend -0.07 addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 0.2 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} output element addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 7 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set N26c3b610 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $N26c3b610 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set N26988790 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set N2698c430 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set N26997210 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $N26997210 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $N2698c430 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set N269d4180 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set N269d6640 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $N269d6640 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $N269d4180 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { gain 1.1 name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set N26d57e30 [stack 0] push $N26d57e30 push $N26988790 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.5 0 -0.5} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group Merge2 { inputs 2 name Merge6 xpos 2309 ypos 506 } Merge2 { inputs 2 name Merge7 xpos 2309 ypos 638 } Merge2 { inputs 2 name Merge8 xpos 2309 ypos 745 } ZDefocus2 { size 10 legacy_resize_mode false show_legacy_resize_mode false bloom true bloom_gain 7 name ZDefocus3 xpos 2309 ypos 906 } Reformat { black_outside true name Reformat2 xpos 2309 ypos 994 } push $N232b47c0 Merge2 { inputs 2 bbox B name Merge9 xpos 2480 ypos 994 } Dot { name Dot29 xpos 2514 ypos 1383 } Read { inputs 0 file_type jpeg file <<>>/images/waterLensExampleBG.jpg format "1280 720 0 0 1280 720 1 HD_720" origset true name Read3 xpos 757 ypos -9 } Dot { name Dot2 xpos 791 ypos 260 } set N278d4390 [stack 0] Dot { name Dot1 xpos 615 ypos 260 } set N278d6850 [stack 0] Dot { name Dot3 xpos 478 ypos 260 } set N278d8d10 [stack 0] Dot { name Dot5 xpos 328 ypos 260 } set N278db1d0 [stack 0] Dot { name Dot9 xpos 178 ypos 260 } RotoPaint { curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44200000 x43b40000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {p {x44614000 x438b0000 x3b800080} {x44614000 x438a8000 x3e4c60cc} {x44614000 x438a0000 x3e5260d2} {x44618000 x43890000 x3e6068e0} {x44618000 x43888000 x3e6670e6} {x44618000 x43880000 x3e6a70ea} {x44620000 x43880000 x3e6c70ec} {x44620000 x43868000 x3e7270f2} {x44620000 x43860000 x3e6e70ee} {x44624000 x43860000 x3e7678f6}}} {t x4461a666 x4388599a} {a ro 0 go 0 bo 0 ao 0 bs x42000000 bu 1 str 1 spx x44200000 spy x43b40000 sb 1 tt x41880000}}}}}} toolbox {brush { { selectAll bs 32 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush bs 32 str 1 ssx 1 ssy 1 sf 1 sb 1 ltt 0 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_size 32 toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {640 360} colorOverlay {0 0 0 0} lifetime_type "all frames" motionblur_on true brush_size 32 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint7 xpos 144 ypos 355 } Dot { name Dot10 xpos 178 ypos 776 } push $N278db1d0 RotoPaint { curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097664} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {p {x42d20000 x43ae8000 x3c904090} {x42d40000 x43ae8000 x3e2248a2} {x42d80000 x43ae8000 x3e5868d8} {x42dc0000 x43af0000 x3e6a70ea} {x42e20000 x43af8000 x3e7e78fe} {x42e60000 x43b08000 x3e864086} {x42ec0000 x43b18000 x3e8b448b} {x42f40000 x43b30000 x3e8d448d} {x42fc0000 x43b50000 x3e8f448f} {x43030000 x43b70000 x3e914491} {x43070000 x43b88000 x3e914491} {x430c0000 x43ba8000 x3e954895} {x43110000 x43bc8000 x3e944894} {x43150000 x43be8000 x3e954895} {x43190000 x43c08000 x3e954895} {x431c0000 x43c18000 x3e944894} {x431f0000 x43c30000 x3e944894} {x43200000 x43c40000 x3e964896} {x43230000 x43c50000 x3e974897} {x43230000 x43c58000 x3e974897} {x43240000 x43c60000 x3e984898} {x43250000 x43c70000 x3e994899} {x43250000 x43c78000 x3e9b4c9b} {x43270000 x43c80000 x3e9f4c9f} {x43270000 x43c88000 x3e9f4c9f} {x43270000 x43c80000 x3e9b4c9b} {x43270000 x43c78000 x3e9b4c9b} {x43250000 x43c60000 x3e9d4c9d} {x43250000 x43c58000 x3e9d4c9d} {x43240000 x43c40000 x3e9d4c9d} {x43240000 x43c30000 x3e9d4c9d} {x43240000 x43c18000 x3e9d4c9d} {x43240000 x43bf8000 x3e9e4c9e} {x43240000 x43be0000 x3e9d4c9d} {x43240000 x43bc0000 x3e9d4c9d} {x43240000 x43b98000 x3e9e4c9e} {x43240000 x43b78000 x3e9e4c9e} {x43240000 x43b50000 x3e9d4c9d} {x43240000 x43b30000 x3e9d4c9d} {x43250000 x43b08000 x3e9d4c9d} {x43270000 x43ae8000 x3e9d4c9d} {x43280000 x43ac0000 x3e9d4c9d} {x43290000 x43aa0000 x3e9d4c9d} {x432b0000 x43a78000 x3e9f4c9f} {x432c0000 x43a58000 x3ea04ca0} {x432e0000 x43a38000 x3e9f4c9f} {x43300000 x43a18000 x3ea04ca0} {x43320000 x439f8000 x3ea04ca0} {x43340000 x439e0000 x3e9f4c9f} {x43360000 x439c0000 x3ea04ca0} {x43370000 x439a8000 x3e9f4c9f} {x43390000 x43998000 x3e9f4c9f} {x433b0000 x43988000 x3e9f4c9f} {x433d0000 x43978000 x3ea04ca0} {x433e0000 x43968000 x3e9f4c9f} {x433f0000 x43960000 x3e9f4c9f} {x43400000 x43960000 x3ea04ca0} {x43420000 x43958000 x3e9f4c9f} {x43420000 x43950000 x3e9f4c9f} {x43430000 x43950000 x3ea04ca0} {x43440000 x43940000 x3e9f4c9f} {x43460000 x43940000 x3ea04ca0} {x43470000 x43938000 x3e9c4c9c} {x43480000 x43938000 x3e844084} {x43490000 x43938000 x3ddc60dc}}} {t x43232762 x43b001f8} {a ro 0 go 0 bo 0 ao 0 bs x43300000 bu 1 str 1 spx x44800000 spy x44428000 sb 1 tt x41880000}}}}}} toolbox {brush { { selectAll bs 176 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createOpenSpline str 1 ssx 1 ssy 1 sf 1 tt 10 } { addPoints str 1 ssx 1 ssy 1 sf 1 } { brush bs 176 str 1 ssx 1 ssy 1 sf 1 sb 1 ltt 0 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_size 176 toolbar_brush_hardness 0.200000003 toolbar_openspline_width 1 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {1024 778} colorOverlay {0 0 0 0} lifetime_type "all frames" motionblur_on true motionblur_shutter_offset_type centred openspline_width 1 brush_size 176 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint3 xpos 294 ypos 357 } Dot { name Dot6 xpos 328 ypos 632 } push $N278d8d10 RotoPaint { curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup OpenSpline1 1049088 bezier {{cc {f 1056800} {p {} {{a osw 1 osf 0} x44028000 x44220000} {x41400000 xc2180000} {xc0aa7400 x427fe970} {{a osw 1 osf x409c5a65} x440d54e8 x43cf82d2} {x410a7900 xc2cfe580} {xc1200000 x42580000} {{a osw 1 osf x40fbe1c8} x44060000 x43300000} {x41200000 xc2580000} {xc0d00000 x41280000} {{a osw 1 osf x421e6637} x440f0000 x42b40000} {x40a87080 xc1080ae8}}} {cc {f 1056800} {p {} {} {x41400000 xc2180000} {xc0aa7400 x427fe970} {} {x410a7900 xc2cfe580} {xc1200000 x42580000} {} {x41200000 xc2580000} {xc0d00000 x41280000} {} {x40a87080 xc1080ae8}}}} {t x440a4000 x43a74000} {a osbe 0 osee 0 osw 1 osf 0 str 1 tt x41200000 ft x40400000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createOpenSpline str 1 ssx 1 ssy 1 sf 1 tt 10 } { addPoints str 1 ssx 1 ssy 1 sf 1 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 ltt 0 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_hardness 0.200000003 toolbar_openspline_width 1 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {320 240} colorOverlay {0 0 0 0} lifetime_type "all frames" motionblur_shutter_offset_type centred feather_type smooth openspline_width 1 brush_spacing 0.05000000075 brush_hardness 0.200000003 name RotoPaint2 xpos 444 ypos 356 } Dot { name Dot4 xpos 478 ypos 493 } push $N278d6850 RotoPaint { curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {cubiccurve Brush1 512 catmullrom {cc {f 2080} {p {x44780000 x43b60000 x3d4860c8} {x44780000 x43b50000 x3e874087} {x44780000 x43b40000 x3e944894} {x44780000 x43b30000 x3e9e4c9e} {x44788000 x43b10000 x3ead54ad} {x44790000 x43b00000 x3eb254b2} {x44790000 x43ae0000 x3eb658b6} {x44798000 x43ab0000 x3eb958b9} {x447a0000 x43a90000 x3ebb5cbb} {x447a8000 x43a60000 x3ebe5cbe} {x447b0000 x43a40000 x3ec15cc1} {x447b0000 x43a20000 x3ec15cc1} {x447b8000 x43a00000 x3ec360c3} {x447b8000 x439e0000 x3ebf5cbf} {x447c0000 x439d0000 x3ec25cc2} {x447c0000 x439c0000 x3ec25cc2} {x447c0000 x439b0000 x3ec25cc2} {x447c0000 x439a0000 x3ec25cc2}}} {t x447a1555 x43a7d555} {a ro 0 go 0 bo 0 ao 0 bs x42d80000 bu 1 str 1 spx x44800000 spy x44428000 sb 1 tt x41880000}}}}}} toolbox {brush { { selectAll bs 108 str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush bs 108 str 1 ssx 1 ssy 1 sf 1 sb 1 ltt 0 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_size 108 toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {1024 778} colorOverlay {0 0 0 0} lifetime_type "all frames" motionblur_on true brush_size 108 brush_spacing 0.05000000075 brush_hardness 0.200000003 source_black_outside true name RotoPaint1 xpos 581 ypos 356 } push $N278d4390 Group { inputs 2 name WaterLens1 tile_color 0xffccff note_font Verdana xpos 757 ypos 349 addUserKnob {20 tab_general l General} addUserKnob {12 center} center {1002 334} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 0.99 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 1.5 addUserKnob {7 bend R -1 1} bend -0.07 addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 0.2 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} defocus_value 10 addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 7 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set N27d20b10 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $N27d20b10 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set N27d35a30 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set N27d3c5b0 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set N27d42ff0 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $N27d42ff0 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $N27d3c5b0 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set N27d808a0 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set N27d82d60 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $N27d82d60 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $N27d808a0 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { gain 1.1 name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set N27dc3c40 [stack 0] push $N27dc3c40 push $N27d35a30 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.5 0 -0.5} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group Group { inputs 2 name WaterLens2 tile_color 0xffccff note_font Verdana xpos 757 ypos 483 addUserKnob {20 tab_general l General} addUserKnob {12 center} center {517 118} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 0.975 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 0.8 addUserKnob {7 bend R -1 1} addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 1 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} defocus_value 10 addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 7 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set N27f93e60 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $N27f93e60 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set N27fa8d80 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set N27faf900 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set N27fb6340 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $N27fb6340 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $N27faf900 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set N27ff3660 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set N27ff5b20 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $N27ff5b20 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $N27ff3660 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { contrast 1.12 name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set N28879440 [stack 0] push $N28879440 push $N27fa8d80 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.2 0 -0.2} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group Group { inputs 2 name WaterLens3 tile_color 0xffccff note_font Verdana xpos 757 ypos 622 addUserKnob {20 tab_general l General} addUserKnob {12 center} center {183 331} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 0.96 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 0.8 addUserKnob {7 bend R -1 1} bend -0.49 addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 0.3 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} defocus_value 10 addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 7 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set N288a8a60 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $N288a8a60 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set N288bd980 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set N288c4500 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set N27dda450 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $N27dda450 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $N288c4500 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set N288e1c60 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set N288e4120 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $N288e4120 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $N288e1c60 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { contrast 1.1 name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set N28a7de30 [stack 0] push $N28a7de30 push $N288bd980 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.5 0 -0.5} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group Group { inputs 2 name WaterLens4 tile_color 0xffccff note_font Verdana xpos 757 ypos 766 addUserKnob {20 tab_general l General} addUserKnob {12 center} center {902.5 274} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 0.96 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 1 addUserKnob {7 bend R -1 1} addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 1 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} defocus_value 10 addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 7 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set N23581e10 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $N23581e10 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set N23596e70 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set N2359d9f0 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set N235a4430 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $N235a4430 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $N2359d9f0 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set N27e5dc70 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set N27e60130 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $N27e60130 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $N27e5dc70 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { contrast 1.1 name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set N28b221a0 [stack 0] push $N28b221a0 push $N23596e70 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.5 0 -0.5} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group Dot { name Dot30 xpos 791 ypos 1412 } Group { inputs 0 name WaterLens tile_color 0xffccff xpos 143 ypos -619 addUserKnob {20 tab_general l General} addUserKnob {12 center} addUserKnob {26 ""} addUserKnob {7 zdistortion l "z distortion"} zdistortion 1 addUserKnob {7 edgeScale l "edge scale" R 0 4} edgeScale 1 addUserKnob {7 bend R -1 1} addUserKnob {41 filter l "distortion filter" T IDistort1.filter} addUserKnob {7 matte_filter l "matte filter"} matte_filter 0.2 addUserKnob {26 ""} addUserKnob {41 abberation T killPanel.abberation} addUserKnob {26 ""} addUserKnob {20 grp_cc l "color correction" n 1} grp_cc 0 addUserKnob {41 saturation T ColorCorrect.saturation} addUserKnob {41 contrast T ColorCorrect.contrast} addUserKnob {41 gamma T ColorCorrect.gamma} addUserKnob {41 gain T ColorCorrect.gain} addUserKnob {41 offset T ColorCorrect.offset} addUserKnob {20 endGroup n -1} addUserKnob {26 ""} addUserKnob {4 output M {composite element}} addUserKnob {20 tab_defocus l Defocus} addUserKnob {7 defocus_value l "defocus value" R 0 100} addUserKnob {26 ""} addUserKnob {41 auto_layer_spacing l "automatic layer spacing" T dof_setting2.auto_layer_spacing} addUserKnob {3 depth_layers l "depth layers" +DISABLED} depth_layers 50 addUserKnob {7 layer_curve +DISABLED R 0 5} layer_curve 1 addUserKnob {26 ""} addUserKnob {41 filter_type l "filter type" T ZDefocus.filter_type} addUserKnob {7 filter_shape l "filter shape"} filter_shape 1 addUserKnob {7 aspect_ratio l "aspect ratio" R 0.5 2} aspect_ratio 1 addUserKnob {3 blades +HIDDEN} blades 5 addUserKnob {7 roundness +HIDDEN R -1 1} roundness 0.2 addUserKnob {7 rotation +HIDDEN R 0 360} addUserKnob {7 inner_size l "inner size" +HIDDEN} inner_size 0.8 addUserKnob {7 inner_feather l "inner feather" +HIDDEN} inner_feather 1 addUserKnob {7 inner_brightness l "inner brightness" +HIDDEN} inner_brightness 0.8 addUserKnob {7 catadioptric_size l "catadioptric size" +HIDDEN} catadioptric_size 0.3 addUserKnob {6 catadioptric -STARTLINE +HIDDEN} addUserKnob {20 grp_image l "image filter" n 1} grp_image 0 addUserKnob {41 filter_channel l "filter channel" T ZDefocus.filter_channel} addUserKnob {41 use_input_channels l "use input channels" -STARTLINE T ZDefocus.use_input_channels} addUserKnob {41 image_filter l "image filter" T ZDefocus.image_filter} addUserKnob {41 clamp_image_filter l "clamp image filter" -STARTLINE T ZDefocus.clamp_image_filter} addUserKnob {20 endGroup_1 l endGroup n -1} addUserKnob {26 ""} addUserKnob {6 gamma_correction l "gamma correction" +STARTLINE} addUserKnob {41 bloom -STARTLINE T dof_setting.bloom} addUserKnob {7 bloom_threshold l "bloom threshold"} bloom_threshold 0.8 addUserKnob {7 bloom_gain l "bloom gain" R 1 4} bloom_gain 2 addUserKnob {20 t_VERSION l Version} addUserKnob {26 l_VERSION l Version T 1.1} addUserKnob {26 l_DATE l "Date Modified" T 2019-04-17} addUserKnob {26 l_CHANGELOG l Changelog T "1.1\n- soften abberation\n\n1.0\n- create water droplet"} addUserKnob {26 l_DEV l "Developed by" T "Mark Joey Tang"} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0xff label "dont touch" note_font_size 42 xpos -424 ypos 1127 bdwidth 353 bdheight 281 } Input { inputs 0 name filter xpos -812 ypos 1264 number 2 } Input { inputs 0 name mask xpos -1138 ypos -508 number 1 } Shuffle { red alpha green alpha blue alpha name Shuffle1 xpos -1138 ypos -421 } Dot { name Dot2 xpos -1104 ypos -213 } set N27c12c40 [stack 0] Histogram { in {{0.2-(parent.matte_filter/10)} 1 {0.2+(parent.matte_filter/10)}} name Histogram1 xpos -1138 ypos 46 } Shuffle { red black green black blue black alpha red name Shuffle3 xpos -1138 ypos 126 } Dot { name Dot7 xpos -1104 ypos 814 } push $N27c12c40 Input { inputs 0 name img xpos 221 ypos -515 } Dot { name Dot1 xpos 255 ypos -348 } set N27c27b60 [stack 0] Remove { operation keep channels rgb name Remove2 xpos 38 ypos -351 } Dot { name Dot5 xpos -326 ypos -348 } set N27c2e6e0 [stack 0] Remove { name Remove1 xpos -552 ypos -355 } Dot { name Dot4 xpos -647 ypos -348 } set N27c35120 [stack 0] Dot { name Dot3 xpos -866 ypos -348 } Merge2 { inputs 2 name Merge1 xpos -900 ypos -216 } FilterErode { size {{1000-(parent.zdistortion*1000)} {1000-(parent.zdistortion*1000)}} filter gaussian name FilterErode1 xpos -900 ypos -136 } Invert { channels alpha name Invert1 xpos -900 ypos -25 } Shuffle { red black green black blue alpha alpha black name Shuffle2 xpos -900 ypos 54 } push $N27c35120 Expression { expr0 "(x-\[value center.x])/width" expr1 "(y-\[value center.y])/height" name Expression1 xpos -681 ypos -26 addUserKnob {20 User} addUserKnob {12 center} center {{parent.center} {parent.center}} } Merge2 { inputs 2 operation plus name Merge2 xpos -681 ypos 54 } Grade { channels {rgba.red rgba.green -rgba.blue none} blackpoint {{parent.bend*0.5}} white {{parent.zdistortion/10}} gamma {{parent.edgeScale}} black_clamp false maskChannelInput rgba.blue name Grade1 xpos -681 ypos 144 } Dot { name Dot6 xpos -647 ypos 498 } push $N27c2e6e0 Crop { box {0 0 {input.width} {input.height}} crop false name Crop1 xpos -360 ypos -274 } Dot { name Dot8 xpos -326 ypos -77 } set N27c729d0 [stack 0] Dot { name Dot10 xpos -215 ypos -77 } set N27c74e90 [stack 0] Dot { name Dot9 xpos -106 ypos -77 } Shuffle { red black green black alpha black name blue tile_color 0xffff xpos -140 ypos -3 } Transform { scale {{1+(parent.abberation.b/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform2 xpos -140 ypos 77 } Blur { channels {-rgba.red -rgba.green rgba.blue none} size {{abs(parent.abberation.b*10)}} name Blur3 xpos -140 ypos 147 } Dot { name Dot12 xpos -106 ypos 320 } push $N27c74e90 Shuffle { red black blue black alpha black name green tile_color 0xff00ff xpos -249 ypos -3 } Transform { scale {{1+(parent.abberation.g/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform4 xpos -249 ypos 77 } Blur { channels {-rgba.red rgba.green -rgba.blue none} size {{abs(parent.abberation.g*10)}} name Blur2 xpos -249 ypos 147 } Dot { name Dot11 xpos -215 ypos 240 } push $N27c729d0 Shuffle { green black blue black alpha black name red tile_color 0xff0000ff xpos -360 ypos -3 } Transform { scale {{1+(parent.abberation.r/10)}} center {{parent.center} {parent.center}} invert_matrix true black_outside false name Transform1 xpos -360 ypos 77 } Blur { channels {rgba.red -rgba.green -rgba.blue none} size {{abs(parent.abberation.r*10)}} name Blur1 xpos -360 ypos 149 } Merge2 { inputs 2 operation max name Merge5 xpos -360 ypos 237 } Merge2 { inputs 2 operation max name Merge6 xpos -360 ypos 317 } ShuffleCopy { inputs 2 red red green green out forward name ShuffleCopy1 xpos -360 ypos 495 } IDistort { channels rgb uv forward uv_scale -4750 name IDistort1 xpos -360 ypos 575 } Shuffle { alpha white name Shuffle4 xpos -360 ypos 655 } ColorCorrect { name ColorCorrect xpos -360 ypos 735 } Merge2 { inputs 2 operation mask name Merge3 xpos -360 ypos 811 } Shuffle { red black green black blue black alpha black out depth name Shuffle5 xpos -360 ypos 933 } ZDefocus2 { inputs 2 channels rgba focal_point {10000 10000} size {{parent.defocus_value}} max_size {{parent.defocus_value}} autoLayerSpacing {{parent.auto_layer_spacing}} layers {{parent.depth_layers}} layerCurve {{parent.layer_curve}} legacy_resize_mode false show_legacy_resize_mode false shape {{parent.filter_shape}} aspect {{parent.aspect_ratio}} blades {{parent.blades}} roundness {{parent.roundness}} rotation {{parent.rotation}} inner_size {{parent.inner_size}} inner_feather {{parent.inner_feather}} inner_brightness {{parent.inner_brightness}} catadioptric_size {{parent.catadioptric_size}} catadioptric {{parent.catadioptric}} bloom_gamma {{parent.gamma_correction}} bloom {{parent.bloom}} bloom_threshold {{parent.bloom_threshold}} bloom_gain {{parent.bloom_gain}} name ZDefocus knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['filter_shape','aspect_ratio','blades','roundness','rotation','inner_size','inner_feather','inner_brightness','catadioptric_size','catadioptric']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['filter_type'].getValue() == 0 :\n if i < 2 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n elif thisGRP\['filter_type'].getValue() == 1 :\n if i != 0 :\n thisGRP\[knob_ls\[i]].setVisible(True)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n else :\n thisGRP\[knob_ls\[i]].setVisible(False)\n" xpos -360 ypos 1260 disable {{"parent.defocus_value <= 1 ? 1 : 0"}} } Remove { operation keep channels rgba name Remove3 xpos -360 ypos 1562 } Dot { name Dot13 xpos -326 ypos 1642 } set N278b2140 [stack 0] push $N278b2140 push $N27c27b60 Merge2 { inputs 2 bbox B name Merge4 xpos 221 ypos 1639 } Switch { inputs 2 which {{output}} name Switch1 xpos 221 ypos 1865 } Output { name Output1 xpos 221 ypos 2076 } NoOp { inputs 0 name killPanel knobChanged "\nthisNODE = nuke.thisNode()\nfor knob in thisNODE.knobs() :\n if knob\[:11] == 'abberation_' :\n thisNODE.removeKnob(thisNODE\[knob])\n" xpos -203 ypos 1199 addUserKnob {20 User} addUserKnob {18 abberation} abberation {0.2 0 -0.2} addUserKnob {6 abberation_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 abberation_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } NoOp { inputs 0 name dof_setting knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['bloom_threshold','bloom_gain']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['bloom'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n" xpos -202 ypos 1258 addUserKnob {20 User} addUserKnob {6 bloom +STARTLINE} bloom true } NoOp { inputs 0 name dof_setting2 knobChanged "\nthisGRP = nuke.thisGroup()\nknob_ls = \['depth_layers','layer_curve']\nfor i in range( len(knob_ls) ) :\n if thisGRP\['auto_layer_spacing'].getValue() == 0 :\n thisGRP\[knob_ls\[i]].setEnabled(True)\n else :\n thisGRP\[knob_ls\[i]].setEnabled(False)\n" xpos -203 ypos 1322 addUserKnob {20 User} addUserKnob {6 auto_layer_spacing l "automatic layer spacing" +STARTLINE} auto_layer_spacing true } end_group ================================================ FILE: NukeSurvivalToolkit/nk_files/NST_X_Aton_Examples.nk ================================================ BackdropNode { inputs 0 name BackdropNode1 label WORDART note_font_size 72 note_font_color 0xffffffff xpos 1371 ypos -847 bdwidth 828 bdheight 20 } BackdropNode { inputs 0 name BackdropNode2 label BACKLIT note_font_size 72 note_font_color 0xffffffff xpos -93 ypos -853 bdwidth 828 bdheight 20 } BackdropNode { inputs 0 name BackdropNode3 label HOLOGRAM note_font_size 72 note_font_color 0xffffffff xpos 2646 ypos -870 bdwidth 828 bdheight 20 } Axis2 { inputs 0 rotate {{curve x1 -7.904351676 x100 -7.785} {curve x1 -38.0573257 x100 23.01} {curve x1 6.145020451 x100 -25.775}} name Axis1 xpos 408 ypos -462 } Camera2 { translate {0 {curve x1 0 x100 0.175} {curve x1 1.5 x100 1.25}} focal 23.8 name Camera1 xpos 408 ypos -396 } set N656ab000 [stack 0] Light2 { inputs 0 light_type spot color_panelDropped true cone_angle 120 cone_penumbra_angle 180 cone_falloff 15 falloff_type Quadratic translate {0.04599991813 0.1635388732 -0.8183040619} rotate {-13.71810454 -179.9999913 -179.9999913} cast_shadows true shadow_mode "clipped alpha" filter Impulse scene_epsilon 0.114 depthmap_slope_bias 0.218 clipping_threshold 0.84 shadow_jitter_scale 0 depthmap_width 512 name Light1 xpos 262 ypos -428 } set N656aac00 [stack 0] push $N656ab000 push $N656aac00 BasicMaterial { inputs 0 name BasicMaterial1 xpos -23 ypos -546 } Card2 { orientation ZX image_aspect false uniform_scale 2 control_points {3 3 3 6 1 {-0.5 0 -0.5} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0.1666666865} 0 {0 0 0} 0 {0 0 0} 1 {0 0 -0.5} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0.1666666865} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 0 -0.5} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0.1666666865} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0.1666666716} 0 {0 0 -0.1666666716} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0.1666666716} 0 {0 0 -0.1666666716} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0.1666666716} 0 {0 0 -0.1666666716} 0 {1 0.5 0} 1 {-0.5 0 0.5} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 0 -0.1666666865} 0 {0 1 0} 1 {0 0 0.5} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 0 -0.1666666865} 0 {0.5 1 0} 1 {0.5 0 0.5} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 0 -0.1666666865} 0 {1 1 0} } name Card2 xpos -23 ypos -520 } Text2 { inputs 0 font_size_toolbar 500 font_width_toolbar 100 font_height_toolbar 100 kerning_toolbar 0.5 output {-rgba.red -rgba.green -rgba.blue rgba.alpha} message BACKLIT old_message {{66 65 67 75 76 73 84} } box {68.5 279.5 1859.5 780.5} transforms {{0 2} } font_size_values {{0 500 1 500 2 500 3 500 4 500 5 500 6 500 0 96 1 96 2 96 3 96 4 96 5 96 6 96} } font_width_values {{0 100 1 100 2 100 3 100 4 100 5 100 6 100 0 101 1 101 2 101 3 101 4 101 5 101 6 101} } kern_values {{0 0.5 1 0.5 2 0.5 3 0.5 4 0.5 5 0.5 6 0.5 0 0.006 1 0.006 2 0.006 3 0.006 4 0.006 5 0.006 6 0.006} } font {{ Impact : Regular : impact.ttf : 0 }} font_size 500 kerning 0.5 scale {1 1} center {960 540} cursor_initialised true initial_cursor_position {{68.5 780.5} } group_animations {{0} imported: 0 selected: 0 items: "root transform/"} animation_layers {{1 11 960 540 0 0 1 1 0 0 0 0} } name Text1 xpos 270 ypos -681 } Card2 { translate {0 0.08900000155 0} control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card1 xpos 270 ypos -594 } set N6571b800 [stack 0] Scene { inputs 3 name Scene1 xpos 117 ypos -482 } push 0 ScanlineRender { inputs 3 conservative_shader_sampling false ztest_enabled false filter Impulse max_tessellation 1 motion_vectors_type off MB_channel none name ScanlineRender1 xpos 107 ypos -298 } ZDefocus2 { channels rgb center {{curve x1 0.7172219157 x50 0.7677050233 x100 0.8260945082}} focal_point {962 402} blur_dof false size 40 max_size 50 autoLayerSpacing false layers 5 layerCurve 2 legacy_resize_mode false show_legacy_resize_mode false name ZDefocus1 xpos 107 ypos -194 } Grade { white {1.44 1.1 1 1} white_panelDropped true multiply 0.5 gamma {0.6 0.6 0.74 0.6} gamma_panelDropped true name Grade1 xpos 107 ypos -158 } set N6571a400 [stack 0] push $N656ab000 Noise { inputs 0 zoffset {{frame/300}} octaves 6 gain 0.425 gamma 0.635 center {960 540} name Noise1 xpos 581 ypos -723 } IDistort { channels {rgba.red -rgba.green -rgba.blue none} uv rgb uv_offset 0.5 uv_scale -100 filter Impulse name IDistort1 xpos 581 ypos -695 disable true } IDistort { channels {-rgba.red -rgba.green rgba.blue none} uv rgb uv_offset 0.5 uv_scale 100 filter Impulse name IDistort2 xpos 581 ypos -658 disable true } Saturation { name Saturation1 xpos 581 ypos -632 disable true } Radial { invert true area {12 -2 1944 1094} color 0 name Radial1 xpos 581 ypos -594 } Card2 { translate {{parent.Light1.translate} {parent.Light1.translate} {parent.Light1.translate}} uniform_scale 2 control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card3 xpos 581 ypos -529 } push $N6571b800 Scene { inputs 2 name Scene2 xpos 591 ypos -483 } push 0 ScanlineRender { inputs 3 conservative_shader_sampling false ztest_enabled false filter Impulse max_tessellation 1 motion_vectors_type off MB_channel none name ScanlineRender2 xpos 581 ypos -274 } Merge2 { inputs 2 operation screen name Merge1 xpos 581 ypos -158 } NST_X_Aton_Volumetrics { inputs 3 name X_Aton1 xpos 581 ypos -39 use_3d true mode Diffuse gamma 1.5 iterations 40 } push $N6571a400 Merge2 { inputs 2 operation screen name Merge2 xpos 107 ypos 29 } Grade { white 3.95 multiply {1.38 0.52 0.16 1} multiply_panelDropped true add {0.025 0.01 0.035 0} add_panelDropped true gamma {0.96 0.79 0.82 1} gamma_panelDropped true name Grade3 xpos 107 ypos 158 } Reformat { type "to box" box_width 1920 box_height 811 box_fixed true name Reformat1 xpos 107 ypos 224 } Grain2 { name Grain2_1 label "Kodak 5218" xpos 107 ypos 248 red_size 0.1 green_size 1.6 blue_size 1.91 green_i 0.86 blue_i 0.73 red_m 0.38 green_m 0.17 blue_m 0.87 black {0 0 0} minimum {0 0 0} } Group { name CC1 xpos 107 ypos 309 } Input { inputs 0 name Input1 xpos 510 ypos 91 } ColorCorrect { highlights.gain 5 lookup {shadow {} midtone {} highlight {curve x-0.008459195495 0 s0 x0.3823549747 0.1056844592 x2.526475906 1 s0}} name ColorCorrect1 xpos 510 ypos 131 } Expression { expr0 r/(r+1) expr1 g/(g+1) expr2 b/(b+1) name Expression1 xpos 510 ypos 157 } Grade { multiply 1.62 gamma 0.76 mix_luminance 1 name Grade2 xpos 510 ypos 183 } Output { name Output1 xpos 510 ypos 283 } end_group Camera2 { inputs 0 translate {0 0 2.266000032} name Camera2 xpos 1534 ypos -384 } set N6548b000 [stack 0] Light2 { inputs 0 translate {{curve x1 0.1260000169 x31 0.2119999826 x60 0.0120000001 x100 0.5440000892} {curve x1 -0.3319999874 x31 0.2619999945 x60 -0.3099999726 x100 -0.3240000308} {curve x1 -1 x31 -1 x60 -0.9999999404 x100 -1}} rotate {{curve x1 -22.44072312 x31 23.1059494 x60 -18.7450068 x100 -18.09145503} {curve x1 -9.586705816 x31 -16.4712983 x60 0.1313750468 x100 -40.04410137} {curve x1 1.04731346 x31 -15.92444262 x60 -20.64958627 x100 26.71281691}} depthmap_slope_bias 0.01 name Light2 xpos 1887 ypos -447 } set N6548ac00 [stack 0] push $N6548b000 push $N6548ac00 Ramp { inputs 0 invert true p0 {1816 196} name Ramp1 xpos 1591 ypos -629 } Shuffle { green white blue white name Shuffle1 xpos 1591 ypos -603 } Colorspace { colorspace_in HSV name Colorspace1 xpos 1591 ypos -577 } Text2 { inputs 0 font_size_toolbar 500 font_width_toolbar 100 font_height_toolbar 100 message WordArt old_message {{87 111 114 100 65 114 116} } box {109.5 281.5 1806.5 782.5} transforms {{0 2} } font_size_values {{0 500 1 500 2 500 3 500 4 500 5 500 6 500 0 500 1 500 2 500 3 500 4 500 5 500 6 500} } font {{ Impact : Regular : impact.ttf : 0 }} font_size 500 scale {1 1} center {960 540} cursor_initialised true initial_cursor_position {{109.5 782.5} } group_animations {{0} imported: 0 selected: 0 items: "root transform/"} animation_layers {{1 11 960 540 0 0 1 1 0 0 0 0} } name Text2 xpos 1715 ypos -657 } Transform { skewY -0.1 center {960 540} name Transform1 xpos 1715 ypos -631 } Expression { channel0 rgba expr0 a>.1 name Expression1 xpos 1715 ypos -592 } Merge2 { inputs 2 operation multiply bbox B Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge3 xpos 1715 ypos -566 } Card2 { control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card4 xpos 1715 ypos -453 } TransformGeo { inputs 2 translate {0 0 1} name TransformGeo1 xpos 1715 ypos -427 } push 0 ScanlineRender { inputs 3 conservative_shader_sampling false ztest_enabled false filter Impulse motion_vectors_type off MB_channel none name ScanlineRender3 xpos 1715 ypos -364 } Crop { box {0 0 1920 1080} name Crop1 xpos 1715 ypos -328 } NST_X_Aton_Volumetrics { inputs 3 name X_Aton2 xpos 1715 ypos -276 use_3d true length -0.35 mode Brightest decay 5 gamma 0.86 iterations 100 } Unpremult { name Unpremult1 xpos 1715 ypos -205 } Expression { expr3 a>0 name Expression2 xpos 1715 ypos -179 } Constant { inputs 0 channels rgb color 1 name Constant1 xpos 1954 ypos -218 } Grid { opacity 0.1 number {32.14 17.6} size 5 translate {234 158} color 0 name Grid1 xpos 1954 ypos -146 } Grid { opacity 0.1 number {6.428 3.52} size 7 translate {234 158} color 0 name Grid2 xpos 1954 ypos -120 } Merge2 { inputs 2 name Merge4 xpos 1715 ypos -86 } Radial { inputs 0 area {-1061 -738 3021 1902} name Radial3 xpos 3155 ypos 622 } Group { inputs 0 name Lens_Dust xpos 3246 ypos 414 } Noise { inputs 0 size 135 gain 1 center {960 540} name Noise7 xpos -581 ypos 136 } Grade { blackpoint 0.98 white 0.02 gamma 0.77 name Grade11 xpos -581 ypos 162 } Defocus { defocus 20 name Defocus1 xpos -581 ypos 188 } Sharpen { size 15.5 name Sharpen1 xpos -581 ypos 226 } TransformMasked { channels {-rgba.red rgba.green -rgba.blue -rgba.alpha} translate {0 -5} scale 1.02 center {960 540} filter Sinc4 name Transform4 xpos -581 ypos 264 } Output { name Output1 xpos -581 ypos 364 } end_group Camera2 { inputs 0 translate {{curve x1 -0.18 x50 0.02 x100 0.12} {curve x1 -0.04 x50 0.02 x100 -0.02} 3} rotate {{curve x1 -5.999998093 x50 5.515254021 x101 -2.181924343} {curve x1 17.20000648 x50 -4.985045433 x101 -17.09903526} {curve x1 2.146191065e-007 x50 2.144360991e-007 x101 1.601986526e-007}} pivot {0 0 -3.5} focal 70 name Camera4 xpos 2867 ypos 65 } set N36b9800 [stack 0] Dot { name Dot2 xpos 3120 ypos 232 } set N36b9400 [stack 0] Light2 { inputs 0 translate {0.4850000143 0.3149999976 -3.549999952} depthmap_slope_bias 0.01 name Light4 xpos 3288 ypos -20 } Dot { name Dot3 xpos 3212 ypos 227 } set N36b8c00 [stack 0] push $N36b9800 Grid { inputs 0 opacity {{abs(sin(frame*180))}} number {1 100} translate {0 {frame}} name Grid4 xpos 3143 ypos -253 } Text2 { inputs 0 font_size_toolbar 500 font_width_toolbar 100 font_height_toolbar 100 output {rgba.red -rgba.green -rgba.blue -rgba.alpha} message POWER old_message {{80 79 87 69 82} } box {257.5 251.5 1666.5 752.5} transforms {{0 2} } font_size_values {{0 500 1 500 2 500 3 500 4 500 0 500 1 500 2 500 3 500 4 500} } cursor_position 2 font {{ Impact : Regular : impact.ttf : 0 }} font_size 500 scale {1 1} cursor_initialised true initial_cursor_position {{257.5 752.5} } group_animations {{0} imported: 0 selected: items: "root transform/"} animation_layers {{1 11 960 540 0 0 1 1 0 0 0 0} } name Text4 xpos 3025 ypos -717 } Crop { box {0 0 1920 1080} name Crop2 xpos 3025 ypos -600 } set N36b9c00 [stack 0] EdgeDetectWrapper { channels {rgba.red -rgba.green -rgba.blue none} name EdgeDetect2 xpos 2860 ypos -606 } Shuffle { red alpha green alpha blue alpha name Shuffle2 xpos 2860 ypos -568 } Multiply { value {{abs(sin(frame*11))*.2}} name Multiply1 xpos 2860 ypos -542 } Dot { name Dot4 xpos 2894 ypos -249 } push $N36b9c00 Noise { output {rgba.red -rgba.green -rgba.blue -rgba.alpha} replace true maskChannelInput rgba.red type turbulence size 1200 zoffset {{frame/8}} octaves 8 lacunarity 2.3 gain 0.51 gamma 0.165 translate {{curve x1 9176.75 x38 9469.2 x39 9350.85 x48 9417.9 x51 9470 x57 9286.25 x59 8987.4 x91 8987.4 x92 9687.4 x97 8860.77963 x98 8987.4} {curve x1 -497.25 x38 -436.1 x48 -188.75 x51 -210 x91 -210 x97 0}} rotate 61 center {960 540} name Noise3 xpos 3025 ypos -574 } EdgeDetectWrapper { channels {rgba.red -rgba.green -rgba.blue none} name EdgeDetect1 xpos 3025 ypos -536 } FilterErode { size -10 filter triangle mix 0.5 name FilterErode1 xpos 3025 ypos -498 } Laplacian { channels alpha size 164 quality 5 name Laplacian1 xpos 3025 ypos -465 } Grade { channels alpha white 2 gamma 0.2 name Grade5 xpos 3025 ypos -427 } TimeEcho { mode Plus framesbehind 10 frmaesfade 10 name TimeEcho1 xpos 3025 ypos -383 } Noise { output {-rgba.red -rgba.green rgba.blue -rgba.alpha} zoffset {{frame}} octaves 4 center {960 540} name Noise4 xpos 3025 ypos -357 } Noise { output {-rgba.red rgba.green -rgba.blue -rgba.alpha} type turbulence size 200 zoffset {{frame}} octaves 6 gain 0.625 center {960 540} name Noise5 xpos 3025 ypos -331 } Noise { output {rgba.red -rgba.green -rgba.blue -rgba.alpha} type turbulence size 9.8 zoffset {{frame}} octaves 2 gain 0.625 center {960 540} name Noise6 xpos 3025 ypos -305 } Premult { name Premult1 xpos 3025 ypos -279 } Merge2 { inputs 2+1 mix 0.1 name Merge8 xpos 3025 ypos -253 } Grid { opacity {{abs(sin(frame*180))}} maskChannelInput rgba.alpha number {1 200} size 0.7 translate {0 {frame}} name Grid3 xpos 3025 ypos -219 } Saturation { saturation 0.5 mode Average name Saturation3 xpos 3025 ypos -181 } Grade { multiply {0.66 1.02 3.2 1} multiply_panelDropped true gamma {0.89 1.1 1.42 1} gamma_panelDropped true name Grade6 xpos 3025 ypos -155 } TransformMasked { channels {-rgba.red rgba.green -rgba.blue none} translate {1 {sin(frame*111)*.5}} center {960 540} filter Sinc4 name Transform2 xpos 3025 ypos -129 } Dot { name Dot5 xpos 3059 ypos -44 } set Nf90e1400 [stack 0] TimeOffset { time_offset 1 time "" name TimeOffset1 xpos 3134 ypos -48 } Multiply { value 0.25 name Multiply2 xpos 3134 ypos -22 } Card2 { cast_shadow false receive_shadow false control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card9 xpos 3134 ypos 19 } TransformGeo { uniform_scale 0.98 pivot {0.4850000143 0.3149999976 -3.549999952} name TransformGeo2 xpos 3134 ypos 72 } push $Nf90e1400 Card2 { cast_shadow false receive_shadow false control_points {3 3 3 6 1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} 1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} 1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} 1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} 1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} 1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} 1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} 1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} 1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } name Card8 xpos 3025 ypos 23 } MergeGeo { inputs 2 name MergeGeo1 xpos 3025 ypos 72 } push 0 ScanlineRender { inputs 3 conservative_shader_sampling false motion_vectors_type off MB_channel none name ScanlineRender6 xpos 3025 ypos 148 } Crop { box {0 0 1920 1080} name Crop3 xpos 3025 ypos 174 } Dot { name Dot1 xpos 3059 ypos 249 } set N51f83400 [stack 0] NST_X_Aton_Volumetrics { inputs 3 name X_Aton4 xpos 3025 ypos 278 center {1758 880} use_3d true length 4 diffuse 0 multiply 10 iterations 250 maxGPUMemory 70 } push $N36b9400 push $N36b8c00 push $N51f83400 NST_X_Aton_Volumetrics { inputs 3 name X_Aton5 xpos 3154 ypos 269 center {{parent.X_Aton4.center} {parent.X_Aton4.center}} use_3d true length -1 diffuse 0 multiply 10 iterations 150 } Merge2 { inputs 2 name Merge7 xpos 3025 ypos 314 } Grade { gamma 0.75 name Grade7 xpos 3025 ypos 340 } Group { name Glow xpos 3025 ypos 456 } Input { inputs 0 name Input1 xpos -581 ypos 17 } Blur { size {100 5} mix 0.1 name Blur1 xpos -581 ypos 57 } Blur { size {300 5} mix 0.1 name Blur2 xpos -581 ypos 95 } Blur { size {5 100} mix 0.1 name Blur4 xpos -581 ypos 133 } Blur { size {500 500} mix 0.06 name Blur3 xpos -581 ypos 172 } Blur { size {200 200} mix 0.1 name Blur5 xpos -581 ypos 210 } Blur { size {50 50} mix 0.1 name Blur6 xpos -581 ypos 248 } Output { name Output1 xpos -581 ypos 348 } end_group set N630b1a80 [stack 0] Blur { size 500 name Blur7 xpos 3135 ypos 450 } Merge2 { inputs 2 operation multiply name Merge9 xpos 3246 ypos 521 } push $N630b1a80 Merge2 { inputs 2 operation plus Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} output {rgba.red rgba.green rgba.blue -rgba.alpha} name Merge10 xpos 3025 ypos 521 } Grade { black {0 0 0 0} black_panelDropped true multiply {1.2 1 1 1} multiply_panelDropped true gamma {0.9 1 1 1} gamma_panelDropped true name Grade8 xpos 3025 ypos 564 } Grade { black {0.01 0.002 0.05 0} black_panelDropped true name Grade10 xpos 3025 ypos 590 } Grade { inputs 1+1 multiply 0.26 gamma 0.83 invert_mask true name Grade9 xpos 3025 ypos 616 } TransformMasked { channels {-rgba.red rgba.green -rgba.blue -rgba.alpha} translate {0 -1} scale 1.005 center {960 540} filter Lanczos4 name Transform3 xpos 3025 ypos 642 } Grain2 { name Grain2_3 label "Kodak 5218" xpos 3025 ypos 694 red_size 0.1 green_size 1.6 blue_size 1.91 green_i 0.86 blue_i 0.73 red_m 2 green_m 0.39 blue_m 1 black {0 0 0} minimum {0 0 0} maskgrain false } Group { name CC3 xpos 3025 ypos 732 } Input { inputs 0 name Input1 xpos 510 ypos 91 } ColorCorrect { highlights.gain 5 lookup {shadow {} midtone {} highlight {curve x-0.008459195495 0 s0 x0.3823549747 0.1056844592 x2.526475906 1 s0}} name ColorCorrect1 xpos 510 ypos 131 } Expression { expr0 r/(r+1) expr1 g/(g+1) expr2 b/(b+1) name Expression1 xpos 510 ypos 157 } Grade { multiply 1.62 gamma 0.76 mix_luminance 1 name Grade2 xpos 510 ypos 183 } Output { name Output1 xpos 510 ypos 283 } end_group Reformat { type "to box" box_width 1920 box_height 811 box_fixed true name Reformat3 xpos 3025 ypos 758 } ================================================ FILE: NukeSurvivalToolkit/nk_files/Noise.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { temp_name0 value temp_expr0 5 expr0 noise(value) expr1 noise(value) expr2 noise(value) expr3 noise(r,g,b) name Noise_expression selected true xpos 97 ypos -53 } ================================================ FILE: NukeSurvivalToolkit/nk_files/Random_colors.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { expr0 random(r) expr1 random(g) expr2 random(b) expr3 random(a) name Random_every_pixel selected true xpos 166 ypos 78 } ================================================ FILE: NukeSurvivalToolkit/nk_files/Random_every_frame.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { expr0 random(frame)*random expr1 random(frame)*random expr2 random(frame)*random expr3 random(frame)*random name Random_every_frame selected true xpos 166 ypos 78 } ================================================ FILE: NukeSurvivalToolkit/nk_files/Random_every_pixel.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { expr0 random expr1 random expr2 random expr3 random name Random_every_pixel selected true xpos 216 ypos -63 } ================================================ FILE: NukeSurvivalToolkit/nk_files/STMap_invert.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { expr0 ((x+0.5)/width)-r+((x+0.5)/width) expr1 ((y+0.5)/height)-g+((y+0.5)/height) name ST_invert selected true xpos 1179 ypos 52 } ================================================ FILE: NukeSurvivalToolkit/nk_files/Trunc.nk ================================================ ColorWheel { inputs 0 gamma 0.45 name ColorWheel1 selected true xpos 107 ypos -172 } Expression { expr0 trunc(r*scale)/scale expr1 trunc(g*scale)/scale expr2 trunc(b*scale)/scale name Trunc selected true xpos 107 ypos -55 addUserKnob {20 User} addUserKnob {7 scale R 0 5} scale 1 } ================================================ FILE: NukeSurvivalToolkit/nk_files/UV_to_Vector.nk ================================================ Expression { expr0 (r-(x+0.5)/width)*width expr1 (g-(y+0.5)/height)*height expr2 0 name UV_to_Vector selected true xpos 80 ypos 4 } ================================================ FILE: NukeSurvivalToolkit/nk_files/Vector_to_UV.nk ================================================ Expression { expr0 (r+x+0.5)/width expr1 (g+y+0.5)/height expr2 0 name Vector_to_UV selected true xpos 204 ypos 33 } ================================================ FILE: NukeSurvivalToolkit/nk_files/abs.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 BackdropNode { inputs 0 name BackdropNode3 tile_color 0x7171c600 label ABS note_font_size 42 selected true xpos 1234 ypos -326 bdwidth 274 bdheight 394 } StickyNote { inputs 0 name StickyNote1 label "Return the Absolute value (always positive values)" selected true xpos 1255 ypos 24 } Constant { inputs 0 color 1 name Constant2 selected true xpos 1327 ypos -217 } Multiply { channels rgba value -1 name Multiply1 label -1 selected true xpos 1327 ypos -104 } Expression { expr0 abs(r) expr1 abs(g) expr2 abs(b) expr3 abs(a) name ABS selected true xpos 1327 ypos -27 } ================================================ FILE: NukeSurvivalToolkit/nk_files/alpha_binary.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { expr3 "(r || b || g) > 0 ? 1 : 0" name ifColorThenAlpha selected true xpos 2846 ypos 504 } ================================================ FILE: NukeSurvivalToolkit/nk_files/alpha_comparison.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 BackdropNode { inputs 0 name BackdropNode4 tile_color 0xc69871ff label "a < 0.1" note_font_size 42 selected true xpos 1595 ypos -323 bdwidth 274 bdheight 394 } push $cut_paste_input Noise { center {1181 558} name Noise1 selected true xpos 1703 ypos -165 } Expression { temp_name0 number temp_expr0 0.1 expr0 a-1"}} } ================================================ FILE: NukeSurvivalToolkit/nk_files/alpha_sum.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { temp_name0 clamp temp_expr0 1 expr3 "clamp==1 ? clamp(r+g+b) : r+g+b" name r_plus_g_plus_b selected true xpos 267 ypos -9 } ================================================ FILE: NukeSurvivalToolkit/nk_files/bricks.nk ================================================ Reformat { inputs 0 format "1920 1080 0 0 1920 1080 1 HD_1080" name Reformat1 xpos 131 ypos -105 } Expression { temp_name0 dimension_width temp_expr0 size*width_brick temp_name1 difference_size temp_expr1 size temp_name2 dimension_height temp_expr2 size expr0 "floor(y/size)%2 == 0? (x%(dimension_width*scale))/(difference_size*width_brick*scale) : ((x+offset)%dimension_width)/(difference_size*width_brick)" expr1 "floor(y/size)%2 == 0? (y%dimension_height)/(difference_size) : ((y)%dimension_height)/(difference_size)" name bricks xpos 131 ypos -64 addUserKnob {20 User} addUserKnob {7 size R 0 200} size 216 addUserKnob {7 offset R 0 100} offset 132 addUserKnob {7 scale R 0 6} scale 1 addUserKnob {26 ""} addUserKnob {7 width_brick R 0 5} width_brick 1.3 addUserKnob {3 random_value l INVISIBLE +INVISIBLE} random_value 61 } ColorWheel { inputs 0 gamma 0.45 name ColorWheel1 xpos 7 ypos -37 } STMap { inputs 2 channels rgba uv rgba name STMap1 xpos 131 ypos -13 } ================================================ FILE: NukeSurvivalToolkit/nk_files/check_nan_inf.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 BackdropNode { inputs 0 name BackdropNode17 tile_color 0x7190c6ff label check note_font_size 42 selected true xpos 492 ypos 65 bdwidth 247 bdheight 213 z_order 1 } push $cut_paste_input Dot { name Dot1 selected true xpos 614 ypos 145 } set N1863380 [stack 0] Expression { expr0 isinf(r)?1000:0 expr1 isinf(g)?1000:0 expr2 isinf(b)?1000:0 expr3 isinf(a)?1000:0 name Expression17 label INF selected true xpos 502 ypos 195 } Blur { channels rgba size 20 name Blur204 label "\[value size]" selected true xpos 502 ypos 233 } push $N1863380 Expression { expr0 isnan(r)?1000:0 expr1 isnan(g)?1000:0 expr2 isnan(b)?1000:0 expr3 isnan(a)?1000:0 name Expression16 label NAN selected true xpos 649 ypos 190 } Blur { channels rgba size 20 name Blur205 label "\[value size]" selected true xpos 649 ypos 236 } ================================================ FILE: NukeSurvivalToolkit/nk_files/check_negative.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { expr0 "r < 0 ? 1000 : 0" expr1 "g < 0 ? 1000 : 0" expr2 "b < 0 ? 1000 : 0" expr3 "a < 0 ? 1000 : 0" name Expression3 label NEGATIVE selected true xpos 2976 ypos -519 } Blur { channels rgba size 20 name Blur3 label "\[value size]" selected true xpos 2976 ypos -487 } ================================================ FILE: NukeSurvivalToolkit/nk_files/circles.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { expr0 "sin(sqrt(x * x + y * y ))" expr1 "sin(sqrt(x * x + y * y ))" expr2 "sin(sqrt(x * x + y * y ))" expr3 "sin(sqrt(x * x + y * y ))" name Circles selected true xpos 1203 ypos 221 } ================================================ FILE: NukeSurvivalToolkit/nk_files/circles_user.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 StickyNote { inputs 0 name StickyNote3 label "Hypot: calculate the pythagora's theorem" selected true xpos 1151 ypos 344 } push $cut_paste_input Expression { expr0 "sin(hypot(x-center.x, y-center.y ) / size)" expr1 "sin(hypot(x-center.x, y-center.y ) / size)" expr2 "sin(hypot(x-center.x, y-center.y ) / size)" expr3 "sin(hypot(x-center.x, y-center.y ) / size)" name Circles_User selected true xpos 1204 ypos 317 addUserKnob {20 User} addUserKnob {7 size R 0 10} size 5.8 addUserKnob {12 center} center {1161 547} } ================================================ FILE: NukeSurvivalToolkit/nk_files/coordinates.nk ================================================ BackdropNode { inputs 0 name BackdropNode1 tile_color 0x3d7c8401 note_font "Helvetica bold Bold" note_font_size 100 xpos 79 ypos -222 bookmark false bdwidth 355 bdheight 365 } Noise { inputs 0 output {-rgba.red -rgba.green rgba.blue rgba.alpha} center {1024 778} name Noise1 xpos 328 ypos -36 disable true } ColorWheel { inputs 0 gamma 0.45 name ColorWheel1 xpos 110 ypos -141 } set Na8e2fa0 [stack 0] Expression { expr0 cx expr1 cy expr2 0 name Expression1 xpos 280 ypos -117 } Dot { name Dot1 tile_color 0xcccccc00 xpos 314 ypos 58 } push $Na8e2fa0 PositionToPoints2 { inputs 2 display textured render_mode textured name PositionToPoints1 xpos 110 ypos 55 } StickyNote { inputs 0 name StickyNote1 label "Insert Noise on Blue channel\nto apply DIsplacement" xpos 332 ypos 23 } ================================================ FILE: NukeSurvivalToolkit/nk_files/create_inf.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input RotoPaint { curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097664} {t x4493a000 x440b8000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier2 512 bezier {{cc {f 8192} {px x44872000 {0 0} {x449dedc6 x445c9c0d} {0 0} {0 0} {x449e088f x445ca874} {0 0}}} idem} {tx x44872000 x449dbb34 x445c8b86} {a osw x41200000 osf 0 str 1 spx x4493a000 spy x440b8000 sb 1 ltn x44872000 ltm x44872000 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush bs 1 h 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 1081 ltm 1081 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone opc 0.1 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 tt 19 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ep1 5 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear opc 0.5 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {1181 558} colorOverlay {0 0 0 0} lifetime_type "all frames" lifetime_start 1081 lifetime_end 1081 motionblur_shutter_offset_type centred brush_size 1 brush_spacing 0.05000000075 brush_hardness 0 source_black_outside true name RotoPaint6 selected true xpos 627 ypos -198 } Expression { expr0 r!=0?1*exp(500)/0.0000000001:0 expr1 g!=0?1*exp(500)/0.0000000001:0 expr2 b!=0?1*exp(500)/0.0000000001:0 expr3 a!=0?1*exp(500)/0.0000000001:0 name Create_inf_pixel selected true xpos 627 ypos -118 } ================================================ FILE: NukeSurvivalToolkit/nk_files/create_nan.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input RotoPaint { curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097664} {t x4493a000 x440b8000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier2 512 bezier {{cc {f 8192} {px x44872000 {0 0} {x449dedc6 x445c9c0d} {0 0} {0 0} {x449e088f x445ca874} {0 0}}} idem} {tx x44872000 x449dbb34 x445c8b86} {a osw x41200000 osf 0 str 1 spx x4493a000 spy x440b8000 sb 1 ltn x44872000 ltm x44872000 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush bs 1 h 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 1081 ltm 1081 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone opc 0.1 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 tt 19 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ep1 5 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear opc 0.5 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {1181 558} colorOverlay {0 0 0 0} lifetime_type "all frames" lifetime_start 1081 lifetime_end 1081 motionblur_shutter_offset_type centred brush_size 1 brush_spacing 0.05000000075 brush_hardness 0 source_black_outside true name RotoPaint6 selected true xpos 502 ypos -225 } Expression { expr0 r!=0?sqrt(-1):0 expr1 g!=0?sqrt(-1):0 expr2 b!=0?sqrt(-1):0 expr3 a!=0?sqrt(-1):0 name Create_nan_pixel selected true xpos 502 ypos -118 } ================================================ FILE: NukeSurvivalToolkit/nk_files/deepThickness.nk ================================================ DeepExpression { temp_name3 t temp_expr3 "\[value thickness]/2" chans1 deep deep.front deep.front-t deep.back deep.back+t name DeepThickness selected true addUserKnob {20 Thickness} addUserKnob {7 thickness R 0 100} } ================================================ FILE: NukeSurvivalToolkit/nk_files/deepToDepth.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input DeepToImage { name DeepToImage1 selected true xpos 150 ypos -47 } AddChannels { channels depth name AddChannels1 selected true xpos 150 } Expression { channel3 depth expr3 "deep.r == 0 ? inf : deep.r" name DeepToDepth selected true xpos 150 ypos 59 } ================================================ FILE: NukeSurvivalToolkit/nk_files/depth_normalize.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { channel0 depth expr0 z==0?0:1/z name Expression1 label "NORMALIZED DEPTH" selected true xpos -584 ypos 440 } ================================================ FILE: NukeSurvivalToolkit/nk_files/despill_blue.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 ColorWheel { inputs 0 gamma 0.45 name ColorWheel1 selected true xpos 2124 ypos 80 } Expression { temp_name0 key temp_expr0 max(0,b-(r+g)/2) expr2 b-key expr3 key name Blue_Despill tile_color 0x3d3f8e00 selected true xpos 2124 ypos 233 } ================================================ FILE: NukeSurvivalToolkit/nk_files/despill_blue_list.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 ColorWheel { inputs 0 gamma 0.45 name ColorWheel1 selected true xpos 178 ypos -400 } Dot { name Dot1 selected true xpos 212 ypos -287 } set N2ea1fe80 [stack 0] Expression { expr2 b>(g+2*r)/2*LimitPercentage?(g+2*r)/2*LimitPercentage:b expr3 b-(2*r+g)*LimitPercentage/2 name DoubleRedAve2 tile_color 0xff01 selected true xpos 400 ypos -158 addUserKnob {20 User} addUserKnob {7 LimitPercentage l "fine tune" R 0.5 1.5} LimitPercentage 1 } push $N2ea1fe80 Expression { expr2 b>(g+r)/2*LimitPercentage?(g+r)/2*LimitPercentage:b expr3 b-(r+g)*LimitPercentage/2 name Average tile_color 0xff01 selected true xpos 288 ypos -157 addUserKnob {20 User} addUserKnob {7 LimitPercentage l "fine tune" R 0.5 1.5} LimitPercentage 1 } push $N2ea1fe80 Expression { expr2 b>(2*g+r)/2*LimitPercentage?(2*g+r)/2*LimitPercentage:b expr3 b-(r+2*g)*LimitPercentage/2 name DoubleGreenAve tile_color 0xff01 selected true xpos 178 ypos -158 addUserKnob {20 User} addUserKnob {7 LimitPercentage l "fine tune" R 0.5 1.5} LimitPercentage 1 } push $N2ea1fe80 Expression { expr2 b>g*LimitPercentage?g*LimitPercentage:b expr3 b-g*LimitPercentage name GreenLimitsBlue tile_color 0xff01 selected true xpos 66 ypos -158 addUserKnob {20 User} addUserKnob {7 LimitPercentage l "fine tune" R 0.5 1.5} LimitPercentage 1 } push $N2ea1fe80 Expression { expr2 b>r*LimitPercentage?r*LimitPercentage:b expr3 b-r*LimitPercentage name RedLimitsBlue tile_color 0xff01 selected true xpos -42 ypos -158 addUserKnob {20 User} addUserKnob {7 LimitPercentage l "fine tune" R 0.5 1.5} LimitPercentage 1 } ================================================ FILE: NukeSurvivalToolkit/nk_files/despill_green.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 ColorWheel { inputs 0 gamma 0.45 name ColorWheel1 selected true xpos 1974 ypos 80 } Expression { temp_name0 key temp_expr0 max(0,g-(r+b)/2) expr1 g-key expr3 key name Green_Despill tile_color 0x3f633800 selected true xpos 1974 ypos 236 } ================================================ FILE: NukeSurvivalToolkit/nk_files/despill_green_list.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 ColorWheel { inputs 0 gamma 0.45 name ColorWheel2 selected true xpos -480 ypos -423 } Dot { name Dot2 selected true xpos -446 ypos -307 } set N2ef0ab80 [stack 0] Expression { expr1 g>(b+2*r)/3*LimitPercentage?(b+2*r)/3*LimitPercentage:g expr3 g-(r+b)*LimitPercentage/2 name DoubleRedAve tile_color 0xff0001 selected true xpos -258 ypos -153 addUserKnob {20 User} addUserKnob {7 LimitPercentage l "fine tune" R 0.5 1.5} LimitPercentage 1 } push $N2ef0ab80 Expression { expr1 g>(2*b+r)/3*LimitPercentage?(2*b+r)/3*LimitPercentage:g expr3 g-(r+b)*LimitPercentage/2 name DoubleBlueAve tile_color 0xff0001 selected true xpos -370 ypos -153 addUserKnob {20 User} addUserKnob {7 LimitPercentage l "fine tune" R 0.5 1.5} LimitPercentage 1 } push $N2ef0ab80 Expression { expr1 g>(b+r)/2*LimitPercentage?(b+r)/2*LimitPercentage:g expr3 g-(r+b)*LimitPercentage/2 name AverageGreen tile_color 0xff0001 selected true xpos -480 ypos -153 addUserKnob {20 User} addUserKnob {7 LimitPercentage l "fine tune" R 0.5 1.5} LimitPercentage 1 } push $N2ef0ab80 Expression { expr1 g>b*LimitPercentage?b*LimitPercentage:g expr3 g-b*LimitPercentage name BlueLimitsGreen tile_color 0xff0001 selected true xpos -590 ypos -153 addUserKnob {20 User} addUserKnob {7 LimitPercentage l "fine tune" R 0.5 1.5} LimitPercentage 1 } push $N2ef0ab80 Expression { expr1 g>r*LimitPercentage?r*LimitPercentage:g expr3 g-r*LimitPercentage name RedLimitsGreen tile_color 0xff0001 selected true xpos -699 ypos -153 addUserKnob {20 User} addUserKnob {7 LimitPercentage l "fine tune" R 0.5 1.5} LimitPercentage 1 } ================================================ FILE: NukeSurvivalToolkit/nk_files/differenceKey.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Group { name differenceKey tile_color 0xffff0001 selected true xpos 159 ypos -87 addUserKnob {20 DifferenceKey} addUserKnob {41 tolerance T MergeExpression1.tolerance} } Input { inputs 0 name Input2 xpos -189 ypos -333 number 1 } Input { inputs 0 name Input1 xpos 9 ypos -333 } MergeExpression { inputs 2 expr3 "abs(Br-Ar) > tolerance || abs(Bg-Ag) > tolerance || abs(Bb-Ab)\n > tolerance?1:0" name MergeExpression1 xpos -98 ypos -270 addUserKnob {20 User} addUserKnob {7 tolerance R 0 0.1} } Shuffle { red alpha green alpha blue alpha name Shuffle2 tile_color 0xffffffff xpos -98 ypos -239 } Clamp { name Clamp1 xpos -98 ypos -208 } Output { name Output1 xpos -98 ypos -99 } end_group ================================================ FILE: NukeSurvivalToolkit/nk_files/fBm.nk ================================================ add_layer {Pref Pref.red Pref.green Pref.blue Pref.alpha} add_layer {ID01 ID01.red ID01.green ID01.blue ID01.alpha} Shuffle { in Pref in2 ID01 alpha red2 name Shuffle9 label "\[value in]" selected true xpos 82 ypos -145 } Unpremult { name Unpremult1 selected true xpos 82 ypos -83 } add_layer {noise01 noise01.red noise01.green noise01.blue noise01.alpha} Expression { channel0 noise01 expr0 random(r,g,b)+offset name Expression6 label lacunarity selected true xpos 82 ypos -40 addUserKnob {20 User} addUserKnob {7 offset l Offset} offset 0.365 } Expression { temp_name0 octaves temp_expr0 10 temp_name1 gain temp_expr1 1 channel0 rgb expr0 fBm(r,g,b,octaves,noise01.red,gain) name Expression5 label fBm selected true xpos 82 ypos -8 } Premult { name Premult1 selected true xpos 82 ypos 34 } ================================================ FILE: NukeSurvivalToolkit/nk_files/gradient_horizontal.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { expr0 "x / width" expr1 "x / width" expr2 "x / width" expr3 "x / width" name gradient_horizontal selected true xpos 1426 ypos 448 } ================================================ FILE: NukeSurvivalToolkit/nk_files/gradient_horizontal_invert.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { expr0 "1-(x / width)" expr1 "1-(x / width)" expr2 "1-(x / width)" expr3 "1-(x / width)" name gradient_horizontal_invert selected true xpos 1426 ypos 448 } ================================================ FILE: NukeSurvivalToolkit/nk_files/gradient_vertical.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { expr0 "y / height" expr1 "y / height" expr2 "y / height" expr3 "y / height" name gradient_vertical selected true xpos 1443 ypos 516 } ================================================ FILE: NukeSurvivalToolkit/nk_files/gradient_vertical_invert.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { expr0 "1-(y / height)" expr1 "1-(y / height)" expr2 "1-(y / height)" expr3 "1-(y / height)" name gradient_vertical_invert selected true xpos 1443 ypos 516 } ================================================ FILE: NukeSurvivalToolkit/nk_files/keying.nk ================================================ Expression { inputs 0 temp_name0 strip_low_r temp_expr0 "parent.Expression_Keying.thresh_low * parent.Expression_Keying.pick.r/(parent.Expression_Keying.pick.r + parent.Expression_Keying.pick.g + parent.Expression_Keying.pick.b)" temp_name1 strip_low_g temp_expr1 "parent.Expression_Keying.thresh_low * parent.Expression_Keying.pick.g/(parent.Expression_Keying.pick.r + parent.Expression_Keying.pick.g + parent.Expression_Keying.pick.b)" temp_name2 strip_low_b temp_expr2 "parent.Expression_Keying.thresh_low * parent.Expression_Keying.pick.b/(parent.Expression_Keying.pick.r + parent.Expression_Keying.pick.g + parent.Expression_Keying.pick.b)" expr0 "r > strip_low_r ? r : 0" expr1 "g > strip_low_g ? g : 0" expr2 "b > strip_low_b ? b : 0" name Expression_Tweaking xpos 615 ypos -48 } Expression { temp_name0 r_ratio temp_expr0 "abs(pick.r/(pick.r + pick.g + pick.b) - r/(r+g+b))\ng" temp_name1 g_ratio temp_expr1 "abs(pick.g/(pick.r + pick.g + pick.b) - g/(r+g+b))" temp_name2 b_ratio temp_expr2 "abs(pick.b/(pick.r + pick.g + pick.b) - b/(r+g+b))" temp_name3 valid temp_expr3 "r_ratio < ratio.r && g_ratio < ratio.g && b_ratio < ratio.b" expr3 "valid ? 1 - (r_ratio + g_ratio + b_ratio)/(ratio.r + ratio.g + ratio.b) : 0\n" name Expression_Keying xpos 615 ypos -3 addUserKnob {20 Keying} addUserKnob {26 instructions l "" +STARTLINE T "Pick the color you want to Key.
    This is telling us is how similar the colour’s ratio is to the target’s ratio.
    If it’s the exact same, we’ll have 0, and the further away it is, the greater the number it will be.
    Valid = This simply checks if our calculated similarity is less than the ratio for each channel"} addUserKnob {6 ratio_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 pick t "It's comparing the picked colour against every pixel, and as long as the ratio r, g and b is within the specified range.\nIt returns a single value between 0 and 1 of it’s similarity"} pick {0 0 0} addUserKnob {6 pick_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 ratio} ratio {0 0 0} addUserKnob {6 ratio_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {26 ""} addUserKnob {7 thresh_low l "Low Threshold"} addUserKnob {26 "" +STARTLINE} addUserKnob {26 tutorial l "" +STARTLINE T "From the tutorial:
    \nhttps://gizmosandgames.com/2016/02/15/colour-keying-with-expressions/
    \nThank you Matthew \"Rick\" Shaw"} } ================================================ FILE: NukeSurvivalToolkit/nk_files/kill_inf.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input RotoPaint { curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097664} {t x4493a000 x440b8000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier2 512 bezier {{cc {f 8192} {px x44872000 {0 0} {x449dedc6 x445c9c0d} {0 0} {0 0} {x449e088f x445ca874} {0 0}}} idem} {tx x44872000 x449dbb34 x445c8b86} {a osw x41200000 osf 0 str 1 spx x4493a000 spy x440b8000 sb 1 ltn x44872000 ltm x44872000 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush bs 1 h 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 1081 ltm 1081 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone opc 0.1 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 tt 19 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ep1 5 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear opc 0.5 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {1181 558} colorOverlay {0 0 0 0} lifetime_type "all frames" lifetime_start 1081 lifetime_end 1081 motionblur_shutter_offset_type centred brush_size 1 brush_spacing 0.05000000075 brush_hardness 0 source_black_outside true name RotoPaint6 selected true xpos 627 ypos -189 } Expression { expr0 r!=0?1*exp(500)/0.0000000001:0 expr1 g!=0?1*exp(500)/0.0000000001:0 expr2 b!=0?1*exp(500)/0.0000000001:0 expr3 a!=0?1*exp(500)/0.0000000001:0 name Create_inf_pixel selected true xpos 627 ypos -118 disable true } Expression { expr0 isinf(r)?r(x+x_offset,y+y_offset):r expr1 isinf(g)?g(x+x_offset,y+y_offset):g expr2 isinf(b)?b(x+x_offset,y+y_offset):b expr3 isinf(a)?a(x+x_offset,y+y_offset):a name Kill_inf_pixel selected true xpos 627 ypos -65 addUserKnob {20 User} addUserKnob {3 x_offset l "x clone offset"} addUserKnob {3 y_offset l "y clone offset"} } ================================================ FILE: NukeSurvivalToolkit/nk_files/kill_nan.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input RotoPaint { curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097664} {t x4493a000 x440b8000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier2 512 bezier {{cc {f 8192} {px x44872000 {0 0} {x449dedc6 x445c9c0d} {0 0} {0 0} {x449e088f x445ca874} {0 0}}} idem} {tx x44872000 x449dbb34 x445c8b86} {a osw x41200000 osf 0 str 1 spx x4493a000 spy x440b8000 sb 1 ltn x44872000 ltm x44872000 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush bs 1 h 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ltn 1081 ltm 1081 tt 17 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone opc 0.1 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 tt 19 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 ep1 5 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear opc 0.5 src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {1181 558} colorOverlay {0 0 0 0} lifetime_type "all frames" lifetime_start 1081 lifetime_end 1081 motionblur_shutter_offset_type centred brush_size 1 brush_spacing 0.05000000075 brush_hardness 0 source_black_outside true name RotoPaint6 selected true xpos 502 ypos -185 } Expression { expr0 r!=0?sqrt(-1):0 expr1 g!=0?sqrt(-1):0 expr2 b!=0?sqrt(-1):0 expr3 a!=0?sqrt(-1):0 name Create_nan_pixel selected true xpos 502 ypos -118 disable true } Expression { expr0 isnan(r)?r(x+x_offset,y+y_offset):r expr1 isnan(g)?g(x+x_offset,y+y_offset):g expr2 isnan(b)?b(x+x_offset,y+y_offset):b expr3 isnan(a)?a(x+x_offset,y+y_offset):a name Kill_nan_pixel selected true xpos 502 ypos -64 addUserKnob {20 User} addUserKnob {3 x_offset l "x clone offset"} addUserKnob {3 y_offset l "y clone offset"} } ================================================ FILE: NukeSurvivalToolkit/nk_files/normalPass_relight.nk ================================================ add_layer {N N.red N.green N.blue N.alpha} Shuffle { in N name Shuffle1 label "\[value in]" selected true xpos 225 ypos -175 } Expression { expr3 max((r*norm.r)+(g*norm.g)+(b*norm.b),0) name Expression label RELIGHT selected true xpos 225 ypos -121 addUserKnob {20 User} addUserKnob {7 round l left/right R -100 100} round 1 addUserKnob {7 around l up/down R -100 100} around 1 addUserKnob {26 ""} addUserKnob {7 rad} rad {{cos(radians(around))}} addUserKnob {7 lx} lx {{rad*cos(radians(round))}} addUserKnob {7 ly} ly {{sin(radians(around))}} addUserKnob {7 lz} lz {{rad*sin(radians(round))}} addUserKnob {18 norm} norm {{lx/sqrt(pow2(lx)+pow2(ly)+pow2(lz))} {ly/sqrt(pow2(lx)+pow2(ly)+pow2(lz))} {lz/sqrt(pow2(lx)+pow2(ly)+pow2(lz))}} addUserKnob {6 norm_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } ================================================ FILE: NukeSurvivalToolkit/nk_files/points.nk ================================================ Flare { inputs 0 position {288 240} size_mult 0.7 inner_color 1 outer_falloff 0.1 inner_falloff 0.1 vis_mask_size 1 corners 6 flattening 1 sharpness 0.99 name Flare1 xpos 1365 ypos 200 } Shuffle { green red blue red alpha red name Shuffle1 tile_color 0x93000000 xpos 1365 ypos 224 } Crop { box {198.5 168 378.5 312} reformat true crop false name Crop1 xpos 1365 ypos 248 } Dot { name Dot1 xpos 1399 ypos 296 } Reformat { inputs 0 format "3840 2160 0 0 3840 2160 1 UHD_4K" name Reformat1 xpos 1489 ypos 133 } Expression { expr0 fmod(x,offsetX)==0?fmod(y,offsetY)==0?random_colors?random:value:0:0 expr1 fmod(x,offsetX)==0?fmod(y,offsetY)==0?random_colors?random:value:0:0 expr2 fmod(x,offsetX)==0?fmod(y,offsetY)==0?random_colors?random:value:0:0 expr3 fmod(x,offsetX)==0?fmod(y,offsetY)==0?random_colors?1:value:0:0 name Points xpos 1489 ypos 165 addUserKnob {20 User} addUserKnob {7 value} value 1 addUserKnob {6 random_colors l "random colors" -STARTLINE} random_colors true addUserKnob {7 offsetX R 0 100} offsetX 200 addUserKnob {7 offsetY R 0 100} offsetY 200 } Dilate { size 25 name Dilate1 label "\[value size]" xpos 1489 ypos 189 } Grade { white 6 name Grade1 xpos 1489 ypos 231 } Convolve2 { inputs 2 name Convolve1 xpos 1489 ypos 289 } Expression { inputs 0 expr0 fmod(x,offsetX)==0?fmod(y,offsetY)==0?random_colors?random:value:0:0 expr1 fmod(x,offsetX)==0?fmod(y,offsetY)==0?random_colors?random:value:0:0 expr2 fmod(x,offsetX)==0?fmod(y,offsetY)==0?random_colors?random:value:0:0 expr3 fmod(x,offsetX)==0?fmod(y,offsetY)==0?random_colors?1:value:0:0 name Points1 selected true xpos 1705 ypos 194 addUserKnob {20 User} addUserKnob {7 value} value 1 addUserKnob {6 random_colors l "random colors" -STARTLINE} random_colors true addUserKnob {7 offsetX R 0 100} offsetX 200 addUserKnob {7 offsetY R 0 100} offsetY 200 } ================================================ FILE: NukeSurvivalToolkit/nk_files/points_advanced.nk ================================================ BackdropNode { inputs 0 name BackdropNode1 tile_color 0x71c67100 note_font_size 42 xpos -210 ypos -380 bdwidth 204 bdheight 257 } Flare { inputs 0 position {288 240} size_mult 0.7 inner_color 1 outer_falloff 0.1 inner_falloff 0.1 vis_mask_size 1 corners 6 flattening 1 sharpness 0.99 corners_angle 30 name Flare1 xpos -220 ypos -61 } Shuffle { green red blue red alpha red name Shuffle1 tile_color 0x93000000 xpos -220 ypos -37 } Crop { box {212 154 365 326} reformat true crop false name Crop1 xpos -220 ypos -13 } Dot { name Dot1 xpos -186 ypos 35 } Expression { inputs 0 expr0 "fmod(y/rows,offsetX) == 0 ? floor(y/offsetX)%2 == 0 ? ((x+offset)%offsetY)/offsetY == 0 ? random_points==1 && random_every_frame == 0 ? gain*random(x,y,1) : random_points == 1 && random_every_frame == 1?random(x*y, 1, frame)*gain:random_points==0 && random_every_frame==1?random(frame,1)*gain:gain :0:0:0" expr1 "fmod(y/rows,offsetX) == 0 ? floor(y/offsetX)%2 == 0 ? ((x+offset)%offsetY)/offsetY == 0 ? random_points==1 && random_every_frame == 0 ? gain*random(x,y,2) : random_points == 1 && random_every_frame == 1?random(x*y, 2, frame)*gain:random_points==0 && random_every_frame==1?random(frame,2)*gain:gain :0:0:0" expr2 "fmod(y/rows,offsetX) == 0 ? floor(y/offsetX)%2 == 0 ? ((x+offset)%offsetY)/offsetY == 0 ? random_points==1 && random_every_frame == 0 ? gain*random(x,y,3) : random_points == 1 && random_every_frame == 1?random(x*y, 3, frame)*gain:random_points==0 && random_every_frame==1?random(frame,3)*gain:gain :0:0:0" expr3 "fmod(y/rows,offsetX) == 0 ? floor(y/offsetX)%2 == 0 ? ((x+offset)%offsetY)/offsetY == 0 ? 1 :0:0:0" name Expression4 xpos -96 ypos -211 addUserKnob {20 User} addUserKnob {7 offsetX R 0 200} offsetX {{parent.MASTER_POINTS.offsetX}} addUserKnob {7 offsetY R 0 200} offsetY {{parent.MASTER_POINTS.offsetY}} addUserKnob {3 rows l INVISIBLE +INVISIBLE} rows {{parent.MASTER_POINTS.rows}} addUserKnob {3 columns l INVISIBLE +INVISIBLE} columns {{parent.MASTER_POINTS.columns}} addUserKnob {3 offset} offset {{parent.MASTER_POINTS.offset}} addUserKnob {7 gain R 0 4} gain {{parent.MASTER_POINTS.gain}} addUserKnob {6 random_points l "random points" +STARTLINE} random_points {{parent.MASTER_POINTS.random_points}} addUserKnob {6 random_every_frame l "random every frame" -STARTLINE} random_every_frame {{parent.MASTER_POINTS.random_every_frame}} } Expression { inputs 0 expr0 "fmod((y+1)/rows,offsetX) == 0 ? floor(y/offsetX)%2 == 0 ? ((x)%offsetY)/offsetY == 0 ? random_points==1 && random_every_frame == 0 ? gain*random(x,y,1) : random_points == 1 && random_every_frame == 1?random(x*y, 1, frame)*gain:random_points==0 && random_every_frame==1?random(frame,1)*gain:gain :0:0:0" expr1 "fmod((y+1)/rows,offsetX) == 0 ? floor(y/offsetX)%2 == 0 ? ((x)%offsetY)/offsetY == 0 ? random_points==1 && random_every_frame == 0 ? gain*random(x,y,2) : random_points == 1 && random_every_frame == 1?random(x*y, 2, frame)*gain:random_points==0 && random_every_frame==1?random(frame,2)*gain:gain :0:0:0" expr2 "fmod((y+1)/rows,offsetX) == 0 ? floor(y/offsetX)%2 == 0 ? ((x)%offsetY)/offsetY == 0 ? random_points==1 && random_every_frame == 0 ? gain*random(x,y,3) : random_points == 1 && random_every_frame == 1?random(x*y, 3, frame)*gain:random_points==0 && random_every_frame==1?random(frame,3)*gain:gain :0:0:0" expr3 "fmod((y+1)/rows,offsetX) == 0 ? floor(y/offsetX)%2 == 0 ? ((x)%offsetY)/offsetY == 0 ? 1 :0:0:0" name Expression11 xpos -200 ypos -210 addUserKnob {20 User} addUserKnob {7 offsetX R 0 200} offsetX {{parent.MASTER_POINTS.offsetX}} addUserKnob {7 offsetY R 0 200} offsetY {{parent.MASTER_POINTS.offsetY}} addUserKnob {3 rows l INVISIBLE +INVISIBLE} rows {{parent.MASTER_POINTS.rows}} addUserKnob {3 columns l INVISIBLE +INVISIBLE} columns {{parent.MASTER_POINTS.columns}} addUserKnob {3 offset} offset {{parent.MASTER_POINTS.offset}} addUserKnob {7 gain R 0 4} gain {{parent.MASTER_POINTS.gain}} addUserKnob {6 random_points l "random points" +STARTLINE} random_points {{parent.MASTER_POINTS.random_points}} addUserKnob {6 random_every_frame l "random every frame" -STARTLINE} random_every_frame {{parent.MASTER_POINTS.random_every_frame}} } Dot { name Dot6 xpos -166 ypos -148 } Merge2 { inputs 2 name Merge4 xpos -96 ypos -151 } Dilate { size 10 name Dilate10 label "\[value size]" xpos -96 ypos -107 } Grade { white 50 name Grade1 xpos -96 ypos -30 } Convolve2 { inputs 2 name Convolve1 xpos -96 ypos 28 } Expression { inputs 0 name MASTER_POINTS tile_color 0xff500001 note_font "Verdana Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" xpos -139 ypos -300 addUserKnob {20 User} addUserKnob {3 offsetX} offsetX 135 addUserKnob {3 offsetY} offsetY 181 addUserKnob {3 rows l INVISIBLE +INVISIBLE} rows 1 addUserKnob {3 columns l INVISIBLE +INVISIBLE} columns 1 addUserKnob {26 ""} addUserKnob {3 offset} offset 87 addUserKnob {26 ""} addUserKnob {20 Color n 1} addUserKnob {7 gain R 0 4} gain 1 addUserKnob {6 random_points l "random points" +STARTLINE} random_points true addUserKnob {6 random_every_frame l "random every frame" -STARTLINE} random_every_frame true addUserKnob {20 endGroup n -1} } ================================================ FILE: NukeSurvivalToolkit/nk_files/radial.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { temp_name0 size temp_expr0 600 expr0 "size - sqrt(x * x + y * y )" expr1 "\nsize - sqrt(x * x + y * y )" expr2 "\nsize - sqrt(x * x + y * y )" expr3 "\nsize - sqrt(x * x + y * y )" name Radial selected true xpos 923 ypos 541 } ================================================ FILE: NukeSurvivalToolkit/nk_files/radial_gradient.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { expr0 "(size - sqrt( (x-center.x) * (x-center.x) + (y-center.y) * (y-center.y) ) ) / gradient" expr1 "(size - sqrt( (x-center.x) * (x-center.x) + (y-center.y) * (y-center.y) ) ) / gradient" expr2 "(size - sqrt( (x-center.x) * (x-center.x) + (y-center.y) * (y-center.y) ) ) / gradient" expr3 "(size - sqrt( (x-center.x) * (x-center.x) + (y-center.y) * (y-center.y) ) ) / gradient" name RadialGradient selected true xpos 925 ypos 634 addUserKnob {20 User} addUserKnob {12 center} center {908 374} addUserKnob {7 size R 0 1000} size 300 addUserKnob {7 gradient R 0 1000} gradient 300 } ================================================ FILE: NukeSurvivalToolkit/nk_files/radial_rays.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { expr0 "sin( ( atan(x - center.x, y - center.y) + offset) * size)" expr1 "sin( ( atan(x - center.x, y - center.y) + offset) * size)" expr2 "sin( ( atan(x - center.x, y - center.y) + offset) * size)" expr3 "sin( ( atan(x - center.x, y - center.y) + offset) * size)" name Radial_Rays selected true xpos 1198 ypos 540 addUserKnob {20 User} addUserKnob {3 offset} offset 4 addUserKnob {7 size R 0 10} size 9.3 addUserKnob {12 center} center {868 444} } ================================================ FILE: NukeSurvivalToolkit/nk_files/transform.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { temp_name0 fx temp_expr0 "( x - translate.x ) * scale" temp_name1 fy temp_expr1 "( y - translate.y ) * scale" expr0 r(fx,fy) expr1 r(fx,fy) expr2 r(fx,fy) name Transform selected true xpos 2227 ypos -466 addUserKnob {20 User} addUserKnob {12 translate} translate {410 440} addUserKnob {7 scale R 0 10} scale 2 } ================================================ FILE: NukeSurvivalToolkit/nk_files/transform_advanced.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { temp_name0 fx temp_expr0 "(cos(rotationRad) * (x-translate.x) - sin(rotationRad) * (y - translate.y)+center.x)*scale" temp_name1 fy temp_expr1 "(sin(rotationRad) * (x-translate.x) + cos(rotationRad) * (y-translate.y) + center.y)*scale" expr0 r(fx,fy) expr1 g(fx,fy) expr2 b(fx,fy) name Transform selected true xpos 79 ypos -30 addUserKnob {20 Parameters} addUserKnob {12 translate} addUserKnob {7 rotation R -360 360} addUserKnob {7 rotationRad l "rotation Rad" t "Radiant Rotation\n"} rotationRad {{radians(rotation)}} addUserKnob {7 scale R 0 10} scale 1 addUserKnob {12 center} } ================================================ FILE: NukeSurvivalToolkit/nk_files/turbulence.nk ================================================ add_layer {Pref Pref.red Pref.green Pref.blue Pref.alpha} add_layer {ID01 ID01.red ID01.green ID01.blue ID01.alpha} Shuffle { in Pref in2 ID01 alpha red2 name Shuffle9 label "\[value in]" selected true xpos 82 ypos -145 } Unpremult { name Unpremult1 selected true xpos 82 ypos -83 } add_layer {noise01 noise01.red noise01.green noise01.blue noise01.alpha} Expression { channel0 noise01 expr0 random(r,g,b)+offset name Expression6 label lacunarity selected true xpos 82 ypos -40 addUserKnob {20 User} addUserKnob {7 offset l Offset} offset 0.365 } Expression { temp_name0 octaves temp_expr0 10 temp_name1 gain temp_expr1 1 channel0 rgb expr0 turbulence(r,g,b,octaves,noise01.red,gain) name Expression5 label turbulence selected true xpos 82 ypos -8 } Premult { name Premult1 selected true xpos 82 ypos 34 } ================================================ FILE: NukeSurvivalToolkit/nk_files/twist.nk ================================================ set cut_paste_input [stack 0] version 10.5 v2 push $cut_paste_input Expression { temp_name0 fx temp_expr0 abs(Posx+(x-Posx)*cos(angleD*pow((clamp(1-sqrt(pow(x-Posx,2)+pow(y-Posy,2))*Mag)),map))+(y-Posy)*sin(angleD*pow((clamp(1-sqrt(pow(x-Posx,2)+pow(y-Posy,2))*Mag)),map))) temp_name1 fy temp_expr1 abs(Posy-(x-Posx)*sin(angleD*pow((clamp(1-sqrt(pow(x-Posx,2)+pow(y-Posy,2))*Mag)),map))+(y-Posy)*cos(angleD*pow((clamp(1-sqrt(pow(x-Posx,2)+pow(y-Posy,2))*Mag)),map))) expr0 r(fx,fy) expr1 r(fx,fy) expr2 r(fx,fy) name Twist selected true xpos 2435 ypos -437 addUserKnob {20 User} addUserKnob {7 map} map 5 addUserKnob {7 angle R -500 500} addUserKnob {7 angleD} angleD {{radians(angle)}} addUserKnob {7 Mag R 0 0.01} Mag 0.00115 addUserKnob {7 Posx R 0 720} Posx 1010 addUserKnob {7 Posy R 0 576} Posy 688 } ================================================ FILE: NukeSurvivalToolkit/python/ColorGradientUi.py ================================================ #(C) Copyright Mads Hagbarth Damsbo 2016 -- Not for redistribution. # Version 1.1 # Updated for Nuke 14.1 and above import sys, math, os import nuke, nukescripts from nukescripts import panels import datetime import operator from functools import partial from PySide6 import QtGui, QtCore, QtWidgets from PySide6.QtWidgets import QWidget, QLabel, QSlider, QComboBox, QMenu, QToolButton, QGridLayout, QHBoxLayout, QWidgetAction, QPushButton from PySide6.QtGui import QColor, QPainter, QLinearGradient, QAction from PySide6.QtCore import Qt try: import ConfigParser except: import configparser as ConfigParser PresetsFile = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'python/GradientPresets.cfg') config = ConfigParser.RawConfigParser() config.read(PresetsFile) #nuke.toNode(inputNode.name()+".HueVsHue").knob("lut").editCurve("amount",myCurve.replace("amount","curve")[10:-1]) def saveTemplate(_curves): """ Save the current color gradient curves to a configuration file. """ global PresetsFile global config p = SectionPanel() if p.showModalDialog(): # Ensure the section exists or create it if it doesn't if not config.has_section(p.category.value()): config.add_section(p.category.value()) config.read(PresetsFile) config.set(p.category.value(), p.name.value(), _curves) try: # Writing the configuration file in text mode with open(PresetsFile, 'w') as configfile: config.write(configfile) except Exception as e: print(f"Error writing to presets file: {e}") def setColorCurve(node, colorlist, parent, _object): """ Set the color curve for a given node based on the provided color list. This function modifies the LUT (Look-Up Table) of a color lookup node by applying a gradient curve based on the input color list. The gradient is constructed for each channel (Red, Green, Blue, Alpha) and applied to the node. """ interpolation_map = { "Constant": "K", "Linear": "L", "Smooth": "C", # Cubic interpolation "Catmull-Rom": "R", "Horizontal": "s0", # Step interpolation for horizontal } Interpolation = _object.interpolationMenu.currentText() interp = interpolation_map.get(Interpolation, "C") # Default to Cubic interpB = interp # Boundary interpolation matches the main interpolation # Helper function to construct curve strings def build_curve_string(color_index): curve = "curve " for x, item in enumerate(colorlist): if x == len(colorlist) - 1: # Last point curve += "%s x%s %s %s" % ("L", item[-1], item[color_index], interpB) elif x == 0: # First point curve += "%s x%s %s" % (interpB, item[-1], item[color_index]) else: # Middle points curve += "%s x%s %s" % (interp, item[-1], item[color_index]) return curve # Build curves for each channel curveR = build_curve_string(0) # Red channel curveG = build_curve_string(1) # Green channel curveB = build_curve_string(2) # Blue channel curveA = build_curve_string(3) # Alpha channel # Apply the curves to the node node['lut'].editCurve("red", curveR) node['lut'].editCurve("green", curveG) node['lut'].editCurve("blue", curveB) node['lut'].editCurve("alpha", curveA) node['chek'].execute() # Force update the node def LoadCurveDataX(_curves): """ Load the curve data from a string and return a list of color values. """ # Split the input into lines and extract channel data curves = _curves.splitlines() channels = { "red": curves[1][10:-1].split(" "), "green": curves[2][12:-1].split(" "), "blue": curves[3][11:-1].split(" "), "alpha": curves[4][12:-1].split(" "), } colorlist = [] interpolation = "" index = -1.0 # Iterate through the red channel (assuming uniform lengths for all channels) for x, item in enumerate(channels["red"]): if item[0:1].isdigit(): # Check if the item starts with a digit if index == -1.0: # Handle missing index for the first/last entry index = 0 if x <= 2 else 1 colorlist.append([ float(channels["red"][x]), float(channels["green"][x]), float(channels["blue"][x]), float(channels["alpha"][x]), interpolation, float(index), ]) interpolation = "" index = -1.0 else: # Handle interpolation or index if item[1:]: index = item[1:] elif item[0:1] == "k": index = 0 else: interpolation = item return colorlist class SectionPanel(nukescripts.PythonPanel): def __init__(self): nukescripts.PythonPanel.__init__(self, 'Add Custom Gradient Preset') self.category = nuke.String_Knob('cat', 'Preset Category') self.name = nuke.String_Knob('name', 'Preset Name') self.addKnob(self.category) self.addKnob(self.name) class ColorValue: def __init__(self): self.position = 0 #Position is a value between 0 and 1 self.color = QColor.fromRgbF(1, 1, 1, 1) self.distance = 1 self.selected = False class GradientWidget(QWidget): def __init__(self, parent=None, mainDiameter=138, outerRingWidth=10,my_node="None"): super(GradientWidget, self).__init__(parent) self._parent = parent self.myTimer = QtCore.QElapsedTimer() # Used to limit the trigger times of mousemove events self.colorLookupNode = my_node.node("ColorLookup1") self.thisNode = my_node self.colorList = [] #Used to store all the colors self.selectedHandle = False self.selectedHandels = [] # this is the pixel diameter of the actual color wheel, without the extra decorations drawn as part of this widget #self.testPointsSetup() self.initCurve() def initCurve(self,fromNode=True,_data=""): #This function is used when you load the toolset/gizmo. It will fetch data from the colorlookup node self.colorList = [] if fromNode: #Should we read the data from a node or some input colorlist = LoadCurveDataX(self.colorLookupNode["lut"].toScript()) else: colorlist = LoadCurveDataX(_data) if len(colorlist) <= 1: self.testPointsSetup() else: for item in colorlist: ReturnItem = ColorValue() ReturnItem.position = item[-1] ReturnItem.color = QColor.fromRgbF(item[0], item[1], item[2], item[3]) self.colorList.append(ReturnItem) self._update() def sliderUpdate(self,_color): for item in self.colorList: if item.selected: item.color = _color self._update() break def _update(self): self.colorNodeUpdate() self.repaint() def paintEvent(self, evt): painter = QtGui.QPainter(self) painter.setRenderHint(QtGui.QPainter.Antialiasing) #painter.begin(self) self.drawRectangles(painter) #painter.end() def setSelection(self,_item): for item in self.colorList: item.selected = False _item.selected = True self._parent.updateSlider(_item.color) self._update() def testPointsSetup(self): #DEPRICATED!! self.colorList.append(ColorValue()) self.colorList.append(ColorValue()) self.colorList[1].position = 1 self.colorList[1].color = QColor.fromRgbF(0, 0, 0, 1) def getColorAtOffset(self,posx): #Get the points last and next point. sorted_x = sorted(self.colorList,key=operator.attrgetter('position')) current_index = len(sorted_x) for x,item in enumerate(sorted_x): if posx > item.position: pass else: current_index = x break if current_index == 0: itemA = sorted_x[0] itemB = sorted_x[0] elif current_index == len(sorted_x): itemA = sorted_x[-1] itemB = sorted_x[-1] else: itemA = sorted_x[current_index-1] itemB = sorted_x[current_index] #Calcualte how far between the two we are and get a color value _dist = itemB.position-itemA.position _distP = posx-itemA.position if _dist == 0.0: _distT = 0.0 else: _distT = _distP/_dist _red = _distT*itemA.color.getRgbF()[0] + (1-_distT)*itemB.color.getRgbF()[0] _green = _distT*itemA.color.getRgbF()[1] + (1-_distT)*itemB.color.getRgbF()[1] _blue = _distT*itemA.color.getRgbF()[2] + (1-_distT)*itemB.color.getRgbF()[2] _alpha = _distT*itemA.color.getRgbF()[3] + (1-_distT)*itemB.color.getRgbF()[3] return QColor.fromRgbF(_green, _blue,_alpha,_red).rgba() #MUST BE A NUKE BUG THAT ITS GREEN BLUE ALPHA RED!!! def drawRectangles(self, painter): self.widget_offset = 10 self.widget_width = self.width()-(self.widget_offset*2) self.widget_height = 40 self.widget_top = 15 self.handle_width = 7 color = QtGui.QColor(0, 0, 0) color.setNamedColor('#008080') painter.setPen(color) gradient = QLinearGradient(self.widget_width+(self.widget_offset*2), 0, 0, 0) painter.setBrush(Qt.CrossPattern) painter.drawRect(self.widget_offset, self.widget_top+10, self.widget_width-1, self.widget_height) for item in self.colorList: if item.selected: painter.drawEllipse(QtCore.QPoint((item.position*self.widget_width)+self.widget_offset,self.widget_top) , 10, 10 ) #DRAW THE OUTER BLACK CIRCLE gradient.setColorAt(1-item.position, item.color) painter.setBrush(item.color) painter.drawEllipse(QtCore.QPoint((item.position*self.widget_width)+self.widget_offset,self.widget_top) , 7, 7 ) #DRAW THE OUTER BLACK CIRCLE painter.drawRect((item.position*self.widget_width)-self.handle_width+self.widget_offset,self.widget_top+15+self.widget_height , self.handle_width*2, self.handle_width*2 ) #DRAW THE OUTER BLACK CIRCLE painter.setBrush(gradient) painter.drawRect(self.widget_offset, self.widget_top+10, self.widget_width-1, self.widget_height) def getNearestHandle(self,posx,posy,dc=False): for item in self.colorList: item.distance = abs(posx-item.position) sorted_x = sorted(self.colorList,key=operator.attrgetter('distance')) if sorted_x[0].distance <= self.handle_width/float(self.widget_width): if abs(posy-(self.widget_top)) <= self.handle_width: #The Main Color Handle if dc: #This part is triggered when you click a allready exsisting color chip (hence you want to edit the color) _tempcol = sorted_x[0].color.getRgbF() V = nuke.getColor(QColor.fromRgbF(_tempcol[1], _tempcol[2],_tempcol[3],_tempcol[0]).rgba() ) if V: R = (255 & V >> 24) / 255.0 G = (255 & V >> 16) / 255.0 B = (255 & V >> 8) / 255.0 A = (255 & V >> 0) / 255.0 sorted_x[0].color = QColor.fromRgbF(R, G, B, A) self._update() self.setSelection(sorted_x[0]) return sorted_x[0] elif abs(posy-(self.widget_top+15+self.widget_height+self.handle_width)) <= self.handle_width: #The Deletion Handle self.colorList.remove(sorted_x[0]) self._update() return False else: return False else: if dc: #If the user double clicks, we add a new handle #This part is triggered when you click to create a new color chip ReturnItem = ColorValue() ReturnItem.position = posx #print self.getColorAtOffset(posx) V = nuke.getColor(self.getColorAtOffset(posx)) if V: R = (255 & V >> 24) / 255.0 G = (255 & V >> 16) / 255.0 B = (255 & V >> 8) / 255.0 A = (255 & V >> 0) / 255.0 ReturnItem.color = QColor.fromRgbF(R, G, B, A) self.colorList.append(ReturnItem) self._update() self.setSelection(ReturnItem) return ReturnItem else: return False def mousePressEvent(self, evt): self.myTimer.start() self.selectedHandle = self.getNearestHandle(max(0,min(1,(evt.x()-(self.widget_offset))/float(self.widget_width))),evt.y()) if not self.selectedHandle: #We should not do anything... pass else: pass def mouseReleaseEvent(self,evt): if not self.selectedHandle: #We should not do anything... pass else: self.colorNodeUpdate() def mouseDoubleClickEvent(self, evt): self.myTimer.start() self.selectedHandle = self.getNearestHandle(max(0,min(1,(evt.x()-(self.widget_offset))/float(self.widget_width))),evt.y(),True) if not self.selectedHandle: #We should not do anything... pass def mouseMoveEvent(self, evt): self.setstate = 1 if not self.selectedHandle: pass else: nMilliseconds = self.myTimer.elapsed() if nMilliseconds < 1: pass else: self.selectedHandle.position = max(0,min(1,(evt.x()-(self.widget_offset))/float(self.widget_width))) self._update() self.myTimer.restart() def colorNodeUpdate(self): colorList = [] for item in self.colorList: color = item.color.getRgbF() colorList.append([color[0],color[1],color[2],color[3],item.position]) colorList = sorted(colorList, key=lambda x: x[-1], reverse=False) setColorCurve(self.colorLookupNode,colorList,self.thisNode,self._parent) class GradientLabel(QLabel): masterSignal = QtCore.Signal(object) def __init__(self, _gradient="",name=""): super(GradientLabel, self).__init__() self.setFixedHeight(30) self.GradientData = _gradient self.Name = name self.colorList = [] self.ExtractColorData() def mouseReleaseEvent(self, ev): self.masterSignal.emit(self.GradientData) def ExtractColorData(self): colorlist = LoadCurveDataX(self.GradientData) for item in colorlist: ReturnItem = ColorValue() ReturnItem.position = item[-1] ReturnItem.color = QColor.fromRgbF(item[0], item[1], item[2], item[3]) self.colorList.append(ReturnItem) def paintEvent(self, evt): painter = QtGui.QPainter(self) painter.setRenderHint(QtGui.QPainter.Antialiasing) #painter.begin(self) self.drawRectangles(painter) #painter.end() def drawRectangles(self, painter): self.widget_offset = 0 self.widget_width = self.width()-(self.widget_offset*2) self.widget_height = 28 self.widget_top = 0 gradient = QLinearGradient(self.widget_width+(self.widget_offset*2), 0, 0, 0) for item in self.colorList: gradient.setColorAt(1-item.position, item.color) painter.setBrush(gradient) painter.drawRect(self.widget_offset, self.widget_top, self.widget_width, self.widget_height) class MyToolButton(QToolButton): def __init__(self, *args): super(MyToolButton, self).__init__(*args) def eventFilter(self, menu, event): if event.type() == QtCore.QEvent.MouseButtonRelease: if self.underMouse(): menu.menu().close() return True return False class Example(QWidget): def __init__(self, parent=None,myNode="none"): global config super(Example, self).__init__(parent) self.setGeometry(900, 900, 800, 600) #self.setWindowTitle('ColorBars') self.baseNode = myNode self.setMinimumHeight(160) self.setMinimumWidth(200) self.interpolationLabel = QLabel("Interpolation") self.interpolationMenu = QComboBox() self.interpolationMenu.addItem("Constant") self.interpolationMenu.addItem("Linear") self.interpolationMenu.addItem("Smooth") self.interpolationMenu.addItem("Catmull-Rom") self.interpolationMenu.addItem("Cubic") self.interpolationMenu.addItem("Horizontal") self.interpolationMenu.setCurrentIndex(int(myNode['Interpolation'].getValue())) self.presetMenu = MyToolButton() self.presetMenu.setText("Gradient Presets ") self.menu = QMenu('Presets') # Updated to use QMenu from QtWidgets self.UpdatePresetList() self.presetMenu.setMenu(self.menu) self.presetMenu.installEventFilter(self.presetMenu) self.gradientUI = GradientWidget(self, 138, 10,myNode) self.hue = QSlider(Qt.Horizontal) self.sat = QSlider(Qt.Horizontal) self.lum = QSlider(Qt.Horizontal) self.interpolationMenu.currentIndexChanged.connect(self.gradientUI.colorNodeUpdate) self.hue.valueChanged.connect(self.sliderUpdate) self.sat.valueChanged.connect(self.sliderUpdate) self.lum.valueChanged.connect(self.sliderUpdate) self.hue.setRange(0,255) self.sat.setRange(0,255) self.lum.setRange(0,255) layout = QGridLayout() sub_layout = QHBoxLayout() dropdown_layout = QHBoxLayout() dropdown_layout.addWidget(self.presetMenu) dropdown_layout.addWidget(self.interpolationLabel) dropdown_layout.addWidget(self.interpolationMenu) dropdown_layout.addStretch() layout.addLayout(dropdown_layout,0,0) layout.addWidget(self.gradientUI,1,0) layout.addLayout(sub_layout,2,0) sub_layout.addWidget(self.hue) sub_layout.addWidget(self.sat) sub_layout.addWidget(self.lum) #layout.setRowStretch(0,0) self.setLayout(layout) self.UpdateStylesheet() self.show() @QtCore.Slot(object) def gradientClicked(self, values): self.gradientUI.initCurve(False,values) def addPreset(self): saveTemplate(self.baseNode.node("ColorLookup1")["lut"].toScript()) self.UpdatePresetList() def removePreset(self, section, preset_name): # Remove the preset from the config if config.has_section(section): config.remove_option(section, preset_name) # If the section is empty, remove the section if not config.items(section): config.remove_section(section) # Write the updated config back to the file with open(PresetsFile, 'w') as configfile: config.write(configfile) # Refresh the menu self.UpdatePresetList() def UpdatePresetList(self): for item in self.menu.actions(): self.menu.removeAction(item) #Read the presets. Look for all the sections config.read(PresetsFile) sections = config.sections() for section in sections: gradients = config.items(section) submenu = QMenu(section) submenu.setMinimumWidth(300) self.menu.addMenu(submenu) for gradient in gradients: # Create a container widget for the gradient and the remove button container = QWidget() layout = QHBoxLayout(container) layout.setContentsMargins(0, 0, 0, 0) # Remove margins for compact alignment # Create the gradient label qle = GradientLabel(gradient[1], gradient[0]) qle.masterSignal.connect(self.gradientClicked) layout.addWidget(qle) # Create the "Remove Preset" button removeButton = QPushButton("Remove") removeButton.setFixedSize(60, 25) # Set a fixed size for the button removeButton.clicked.connect(partial(self.removePreset, section, gradient[0])) layout.addWidget(removeButton) # Add the container widget to the submenu wac = QWidgetAction(submenu) wac.setDefaultWidget(container) submenu.addAction(wac) addAction = QAction('+ Add Preset', self) addAction.triggered.connect(self.addPreset) self.menu.addAction(addAction) # Close the dropdown menu self.menu.close() #self.menu.update() #self.menu.repaint() def updateSlider(self,_color): self.hue.setValue(_color.hsvHueF()*255 ) self.sat.setValue(_color.hsvSaturationF()*255) self.lum.setValue(_color.valueF()*255) def sliderUpdate(self): self.gradientUI.sliderUpdate(QColor.fromHsvF(self.hue.value()/255.0,self.sat.value()/255.0,self.lum.value()/255.0,1.0)) def updateValue(self): pass def UpdateStylesheet(self): self.hue.setStyleSheet(self.hue.styleSheet()+"""QSlider::groove:horizontal { border: 1px solid #999999; height: 8px; /* the groove expands to the size of the slider by default. by giving it a height, it has a fixed size */ background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop: 0.000 rgb(255, 0, 0), stop: 0.167 rgb(255, 255, 0), stop: 0.333 rgb(0, 255, 0), stop: 0.500 rgb(0, 255, 255), stop: 0.667 rgb(0, 0, 255), stop: 0.833 rgb(255, 0, 255), stop: 1.0 rgb(255, 0, 0)); margin: 2px 0; } QSlider::handle:horizontal { background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #b4b4b4, stop:1 #5f5f5f); border: 1px solid #008080; width: 18px; margin: -2px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ border-radius: 3px; }""") self.sat.setStyleSheet(self.sat.styleSheet()+"""QSlider::groove:horizontal { border: 1px solid #999999; height: 8px; /* the groove expands to the size of the slider by default. by giving it a height, it has a fixed size */ background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop: 0.000 rgb(0, 0, 0), stop: 1.0 rgb(255, 0, 0)); margin: 2px 0; } QSlider::handle:horizontal { background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #b4b4b4, stop:1 #5f5f5f); border: 1px solid #008080; width: 18px; margin: -2px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ border-radius: 3px; }""") self.lum.setStyleSheet(self.lum.styleSheet()+"""QSlider::groove:horizontal { border: 1px solid #999999; height: 8px; /* the groove expands to the size of the slider by default. by giving it a height, it has a fixed size */ background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop: 0.000 rgb(0, 0, 0), stop: 1.0 rgb(255, 255, 255)); margin: 2px 0; } QSlider::handle:horizontal { background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #b4b4b4, stop:1 #5f5f5f); border: 1px solid #008080; width: 18px; margin: -2px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ border-radius: 3px; }""") class ColorWheelKnob_GRADIENT: def __init__( self ): self.instance = 0 return None def makeUI( self ): self.instance = Example(None,nuke.thisNode()) return self.instance defined = 1 ================================================ FILE: NukeSurvivalToolkit/python/GradientPresets.cfg ================================================ [Fire] flatfire = master {} red {curve 0 x0.4897959232 0.7577935454 x1 1} green {curve 0 x0.4897959232 0.6538948653 x1 1} blue {curve 0 x0.4897959232 0.2382848859 x1 1} alpha {curve 1 x0.4897959232 1 x1 1} simplefire = master {} red {curve 0 x0.2925170064 1 x0.702947855 1 x1 1} green {curve 0 x0.2925170064 0.1137254902 x0.702947855 0.8196078431 x1 1} blue {curve 0 x0.2925170064 0.1137254902 x0.702947855 0.09803921569 x1 1} alpha {curve 1 x0.2925170064 1 x0.702947855 1 x1 1} yellowfire = master {} red {curve 0 x0.4943310618 0.8039215686 x1 1} green {curve 0 x0.4943310618 0.4029297322 x1 0.8795605402} blue {curve 0 x0.4943310618 0.1607843137 x1 0.3176470588} alpha {curve 1 x0.4943310618 1 x1 1} ember = master {} red {curve 0 x0.1587301642 0.275288014 x0.1859410405 0.9960784314 x0.297052145 0.9960784314 x0.6417233348 0.7424887465 x1 0} green {curve 0 x0.1587301642 0.1388876173 x0.1859410405 0.2344090944 x0.297052145 0.7500419623 x0.6417233348 0.6943160143 x1 0} blue {curve 0 x0.1587301642 0.124711986 x0.1859410405 0 x0.297052145 0 x0.6417233348 0.5908445869 x1 0} alpha {curve 1 x0.1587301642 1 x0.1859410405 1 x0.297052145 1 x0.6417233348 1 x1 1} ashfire = master {} red {curve 0 x0.1352380961 0.1098039216 x0.2761904895 0.2235294118 x0.4609523714 0.4078431373 x0.6304761767 0.9098039216 x0.792380929 1 x1 1} green {curve 0 x0.1352380961 0.1098039216 x0.2761904895 0.2235294118 x0.4609523714 0.04798962387 x0.6304761767 0.3425345235 x0.792380929 0.8635233082 x1 0.9019455253} blue {curve 0 x0.1352380961 0.1098039216 x0.2761904895 0.2235294118 x0.4609523714 0 x0.6304761767 0 x0.792380929 0.3176470588 x1 0.6666666667} alpha {curve 1 x0.1352380961 1 x0.2761904895 1 x0.4609523714 1 x0.6304761767 1 x0.792380929 1 x1 1} [Motion] design01 = master {} red {curve 0 x0.4965986311 0.662745098 x1 1} green {curve 0.4650186923 x0.4965986311 1 x1 0.8795605402} blue {curve 0.8235294118 x0.4965986311 0.8690928511 x1 0.3176470588} alpha {curve 1 x0.4965986311 1 x1 1} design02 = master {} red {curve 0.9960784314 1} green {curve 0 0.8666666667} blue {curve 0.3750209812 0.3176470588} alpha {curve 1 1} design03 = master {} red {curve 0.9960784314 0} green {curve 0 0} blue {curve 0.3750209812 0.3137254902} alpha {curve 1 1} design04 = master {} red {curve 0 x0.4897959232 0 x1 0.2380407416} green {curve 0.7030594339 x0.4897959232 0 x1 0} blue {curve 0.9960784314 x0.4897959232 0.3137254902 x1 0.337254902} alpha {curve 1 x0.4897959232 1 x1 1} deepbpp = master {} red {curve 0 x0.2883549035 0.4 x0.6136783957 1 x1 1} green {curve 0.04373235676 x0.2883549035 0 x0.6136783957 0.3568627451 x1 0} blue {curve 0.3098039216 x0.2883549035 1 x0.6136783957 0.9772793164 x1 0.4} alpha {curve 1 x0.2883549035 1 x0.6136783957 1 x1 1} oceanic = master {} red {curve 0.2415655756 x0.2975970507 0.09945830472 x0.6728280783 1 x1 1} green {curve 0 x0.2975970507 0.8745098039 x0.6728280783 0.3568627451 x1 0.5646601053} blue {curve 0.6039215686 x0.2975970507 0.8106965743 x0.6728280783 0.3568627451 x1 0} alpha {curve 1 x0.2975970507 1 x0.6728280783 1 x1 1} pachific = master {} red {curve 0 0.04705882353} green {curve 0.8352941176 0.1710688945} blue {curve 0.4716563668 0.2666666667} alpha {curve 1 1} [Basic] whiteblack = master {} red {curve 1 0} green {curve 1 0} blue {curve 1 0} alpha {curve 1 1} blackwhite = master {} red {curve 0 1} green {curve 0 1} blue {curve 0 1} alpha {curve 1 1} bwb = master {} red {curve 0 x0.4739229083 0.9960784314 x1 0} green {curve 0 x0.4739229083 0.9960784314 x1 0} blue {curve 0 x0.4739229083 0.9960784314 x1 0} alpha {curve 1 x0.4739229083 1 x1 1} wbw = master {} red {curve 0.9960784314 x0.537414968 0 x1 1} green {curve 0.9960784314 x0.537414968 0 x1 1} blue {curve 0.9960784314 x0.537414968 0 x1 1} alpha {curve 1 x0.537414968 1 x1 1} spectrum = master {} red {curve 1 x0.2653061152 1 x0.5102040768 0.03529411765 x0.7732426524 0 x1 0} green {curve 0.1137254902 x0.2653061152 0.9686884871 x0.5102040768 1 x0.7732426524 0.9960784314 x1 0.04681467918} blue {curve 0.1137254902 x0.2653061152 0.1137254902 x0.5102040768 0.03529411765 x0.7732426524 0.9842984665 x1 0.9960784314} alpha {curve 1 x0.2653061152 1 x0.5102040768 1 x0.7732426524 1 x1 1} rainbow = master {} red {curve 1 x0.1609977335 1 x0.3197278976 0.03529411765 x0.4739229083 0 x0.646258533 0 x0.8276643753 0.9374685283 x1 0.9960784314} green {curve 0.1137254902 x0.1609977335 0.9270313573 x0.3197278976 1 x0.4739229083 0.9960784314 x0.646258533 0.04681467918 x0.8276643753 0 x1 0} blue {curve 0.1137254902 x0.1609977335 0.1137254902 x0.3197278976 0.03529411765 x0.4739229083 0.9140611887 x0.646258533 0.9960784314 x0.8276643753 0.9960784314 x1 0} alpha {curve 1 x0.1609977335 1 x0.3197278976 1 x0.4739229083 1 x0.646258533 1 x0.8276643753 1 x1 1} lightspectrum = master {} red {curve 0 x0.2176870704 0 x0.3650793731 0 x0.5215419531 0.03529411765 x0.6643990874 1 x0.8095238209 1 x1 0} green {curve 0 x0.2176870704 0.04681467918 x0.3650793731 0.9960784314 x0.5215419531 1 x0.6643990874 0.9294117647 x0.8095238209 0.1137254902 x1 0} blue {curve 0 x0.2176870704 0.9960784314 x0.3650793731 0.9140611887 x0.5215419531 0.03529411765 x0.6643990874 0.1137254902 x0.8095238209 0.1137254902 x1 0} alpha {curve 1 x0.2176870704 1 x0.3650793731 1 x0.5215419531 1 x0.6643990874 1 x0.8095238209 1 x1 1} centerchromatic = master {} red {curve 0 x0.1541950107 0 x0.3083900213 0.6470588235 x0.4671201706 1 x0.6598639488 1 x0.8253968358 1 x1 0} green {curve 0 x0.1541950107 0.04681467918 x0.3083900213 1 x0.4671201706 1 x0.6598639488 0.9399404898 x0.8253968358 0.1137254902 x1 0} blue {curve 0 x0.1541950107 0.9960784314 x0.3083900213 0.9709468223 x0.4671201706 1 x0.6598639488 0.2705882353 x0.8253968358 0.1137254902 x1 0} alpha {curve 1 x0.1541950107 1 x0.3083900213 1 x0.4671201706 1 x0.6598639488 1 x0.8253968358 1 x1 1} [Horizon] horizon01 = master {} red {curve 0 x0.1587301642 0.275288014 x0.1859410405 0.9960784314 x0.297052145 0.9960784314 x0.6575963497 0.58954757 x1 0} green {curve 0 x0.1587301642 0.1388876173 x0.1859410405 0.2344090944 x0.297052145 0.7500419623 x0.6575963497 0.7201953155 x1 0.2081483177} blue {curve 0 x0.1587301642 0.124711986 x0.1859410405 0 x0.297052145 0 x0.6575963497 0.7437857633 x1 0.368627451} alpha {curve 1 x0.1587301642 1 x0.1859410405 1 x0.297052145 1 x0.6575963497 1 x1 1} horizon02 = master {} red {curve 0 x0.1587301642 0.4252231632 x0.1859410405 1 x0.2993197143 1 x0.6575963497 0.58954757 x1 0} green {curve 0 x0.1587301642 0.2161287861 x0.1859410405 0.4782330053 x0.2993197143 0.8663309682 x0.6575963497 0.7201953155 x1 0.4030212863} blue {curve 0 x0.1587301642 0.1943846799 x0.1859410405 0.3176470588 x0.2993197143 0.4588235294 x0.6575963497 0.7437857633 x1 0.7137254902} alpha {curve 1 x0.1587301642 1 x0.1859410405 1 x0.2993197143 1 x0.6575963497 1 x1 1} horizon03 = master {} red {curve 0.2600595102 x0.1451247185 0.9261768521 x0.1836734712 1 x0.2993197143 1 x0.6575963497 0.8068360418 x1 0.1921568627} green {curve 0.3438010224 x0.1451247185 0.8467841611 x0.1836734712 0.7600976577 x0.2993197143 0.938002594 x0.6575963497 0.8683299001 x1 0.6483253223} blue {curve 0.4379797055 x0.1451247185 0.8385290303 x0.1836734712 0.6862745098 x0.2993197143 0.7490196078 x0.6575963497 0.879438468 x1 1} alpha {curve 1 x0.1451247185 1 x0.1836734712 1 x0.2993197143 1 x0.6575963497 1 x1 1} [Plasma] plasma01 = master {} red {curve 0 x0.1315192729 0 x0.2766439915 0 x1 0.2222018769} green {curve 0 x0.1315192729 0 x0.2766439915 0.7030594339 x1 0} blue {curve 0 x0.1315192729 0.3137254902 x0.2766439915 0.9960784314 x1 0.337254902} alpha {curve 1 x0.1315192729 1 x0.2766439915 1 x1 1} plasma02 = master {} red {curve 0 x0.15646258 0.968627451 x0.2857142985 1 x0.396825403 1 x0.5487528443 0.6817273213 x0.7505668998 0.1172045472 x0.8979591727 0.1055619135 x0.9977324009 0} green {curve 0 x0.15646258 0.9951934081 x0.2857142985 0.9183184558 x0.396825403 0.6481879912 x0.5487528443 0.07905699245 x0.7505668998 0 x0.8979591727 0 x0.9977324009 0} blue {curve 0 x0.15646258 1 x0.2857142985 0.537254902 x0.396825403 0.2705882353 x0.5487528443 0.1641412985 x0.7505668998 0.9960784314 x0.8979591727 0.2039215686 x0.9977324009 0} alpha {curve 1 x0.15646258 1 x0.2857142985 1 x0.396825403 1 x0.5487528443 1 x0.7505668998 1 x0.8979591727 1 x0.9977324009 1} [Remapping] bluepeach = master {} red {curve 0 x0.1441774517 0.1072251469 x0.4750462174 0.7016861219 x0.76709795 1 x0.8853974342 1 x1 1} green {curve 0 x0.1441774517 0.2099488823 x0.4750462174 0.726115816 x0.76709795 0.7843289845 x0.8853974342 0.9210650797 x1 1} blue {curve 0 x0.1441774517 0.3254901961 x0.4750462174 0.7882352941 x0.76709795 0.6666666667 x0.8853974342 0.768627451 x1 1} alpha {curve 1 x0.1441774517 1 x0.4750462174 1 x0.76709795 1 x0.8853974342 1 x1 1} oldphoto = master {} red {curve 0 x0.2902033329 0.4078431373 x0.6173752546 0.7294117647 x1 1} green {curve 0 x0.2902033329 0.2546272984 x0.6173752546 0.5875944152 x1 1} blue {curve 0 x0.2902033329 0.1871213855 x0.6173752546 0.4834210727 x1 1} alpha {curve 1 x0.2902033329 1 x0.6173752546 1 x1 1} ================================================ FILE: NukeSurvivalToolkit/python/NST_ID_Extractor.py ================================================ import nuke import nukescripts def set(): n = nuke.thisNode() redName = n.knob('Red').value() greenName = n.knob('Green').value() blueName = n.knob('Blue').value() newName_list = [redName,greenName,blueName] for node in n.dependent(): if node.Class() == 'Shuffle': for newName in newName_list: if newName != "": matte = newName_list.index(newName) + 1 if node.knob('red').getValue() == matte and node.knob('green').getValue() == matte and node.knob('blue').getValue() == matte and node.knob('alpha').getValue() == matte: shuffle = nuke.toNode(node.name()) shuffle.setName(newName) nextDep = node.dependent() for anchor in nextDep: if anchor.Class() == 'NoOp': if anchor.input(0).Class() == "Shuffle": if 'title' in anchor.knobs(): anchorTitle = anchor.knob('title') if anchorTitle.value() != newName: anchorTitle.setValue(newName) def extractRed(): n = nuke.thisNode() nxpos = n.xpos() nypos = n.ypos() channelName = n['Red'].value() channelNameNoSpace = channelName.replace(" ", "_") if channelName != '': n.end() n.setSelected(True) dependents = n.dependent() shuffles = [] for node in dependents: if node.Class() == "Shuffle": shuffles.append(node) shuffleNames = [] for shuffle in shuffles: shuffleNames.append(shuffle.name()) if channelNameNoSpace not in shuffleNames: s = nuke.nodes.Shuffle(name=channelNameNoSpace) s.setXYpos(int(nxpos-100),int(nypos+110)) s.autoplace() s.setInput(0,n)################## matte = 1 s['tile_color'].setValue(2466250752) s['red'].setValue(matte) s['green'].setValue(matte) s['blue'].setValue(matte) s['alpha'].setValue(matte) s['note_font_size'].setValue(12) s['note_font_color'].setValue(4294967040) try: import stamps n.setSelected(False) s.setSelected(True) stamps.anchor(title = channelName, tags = "ID", input_node = "", node_type = "2D") except: pass nukescripts.clear_selection_recursive() n.setSelected(True) def extractGreen(): n = nuke.thisNode() nxpos = n.xpos() nypos = n.ypos() channelName = n['Green'].value() channelNameNoSpace = channelName.replace(" ", "_") if channelName != '': n.end() n.setSelected(True) dependents = n.dependent() shuffles = [] for node in dependents: if node.Class() == "Shuffle": shuffles.append(node) shuffleNames = [] for shuffle in shuffles: shuffleNames.append(shuffle.name()) if channelNameNoSpace not in shuffleNames: s = nuke.nodes.Shuffle(name=channelNameNoSpace) s.setXYpos(int(nxpos),int(nypos+110)) s.autoplace() s.setInput(0,n)################## matte = 2 s['tile_color'].setValue(1063467008) s['red'].setValue(matte) s['green'].setValue(matte) s['blue'].setValue(matte) s['alpha'].setValue(matte) s['note_font_size'].setValue(12) s['note_font_color'].setValue(4294967040) try: import stamps n.setSelected(False) s.setSelected(True) stamps.anchor(title = channelName, tags = "ID", input_node = "", node_type = "2D") except: pass nukescripts.clear_selection_recursive() n.setSelected(True) def extractBlue(): n = nuke.thisNode() nxpos = n.xpos() nypos = n.ypos() channelName = n['Blue'].value() channelNameNoSpace = channelName.replace(" ", "_") if channelName != '': n.end() n.setSelected(True) dependents = n.dependent() shuffles = [] for node in dependents: if node.Class() == "Shuffle": shuffles.append(node) shuffleNames = [] for shuffle in shuffles: shuffleNames.append(shuffle.name()) if channelNameNoSpace not in shuffleNames: s = nuke.nodes.Shuffle(name=channelNameNoSpace) s.setXYpos(int(nxpos+100),int(nypos+110)) s.autoplace() s.setInput(0,n)################## matte = 3 s['tile_color'].setValue(1027575296) s['red'].setValue(matte) s['green'].setValue(matte) s['blue'].setValue(matte) s['alpha'].setValue(matte) s['note_font_size'].setValue(12) s['note_font_color'].setValue(4294967040) try: import stamps n.setSelected(False) s.setSelected(True) stamps.anchor(title = channelName, tags = "ID", input_node = "", node_type = "2D") except: pass nukescripts.clear_selection_recursive() n.setSelected(True) def extractAll(): n = nuke.thisNode() red = n.knob('Red') redName = red.value() green = n.knob('Green') greenName = green.value() blue = n.knob('Blue') blueName = blue.value() if redName != "" and greenName != "" and blueName != "": dependents = n.dependent() shuffles = [] for node in dependents: if node.Class() == "Shuffle": shuffles.append(node) shuffleNames = [] for shuffle in shuffles: shuffleNames.append(shuffle.name()) if redName != "": if redName.replace(" ", "_") not in shuffleNames: n.knob("extractRed").execute() if greenName != "": if greenName.replace(" ", "_") not in shuffleNames: n.knob("extractGreen").execute() if blue.value() != "": if blueName.replace(" ", "_") not in shuffleNames: n.knob("extractBlue").execute() nukescripts.clear_selection_recursive() n.setSelected(True) def reset(): n = nuke.thisNode() n.knob('Red').setValue('') n.knob('Green').setValue('') n.knob('Blue').setValue('') ================================================ FILE: NukeSurvivalToolkit/python/NST_VectorTracker.py ================================================ ''' VectorTracker v1.0 by Jorrit Schulte Add this to menu.py: nuke.load('VectorTracker.py') nuke.menu("Nodes").addCommand('user/VectorTracker', "nuke.createNode('VectorTracker.gizmo')") ''' def allScriptNodes(): #collect all nodes in the root node graph nodes = nuke.allNodes() groups = [node for node in nodes if node.Class() == 'Group' ] #first collect groups inside groups for group in groups: for i in group.nodes(): if i.Class() == 'Group': groups.append(i) #then append nodes inside groups to the nodes list for group in groups: for node in group.nodes(): nodes.append(node) #return all nodes on all levels return nodes def J_VTT_Track(first, last, pb = True): node = nuke.thisNode() vectors = node.input(1) #bool to check track direction forward = last > first #get number of frames totalFrames = int(max(first, last) - min(first, last)) #check vector type if vectors is not None: layers = list( set([channel.split('.')[0] for channel in vectors.channels()]) ) else: layers = [] if 'smartvector' in layers: if forward: u = 'smartvector.fn1vp0_u' v = 'smartvector.fn1vp0_v' else: u = 'smartvector.fp1vp0_u' v = 'smartvector.fp1vp0_v' run = True elif 'forward' in layers and forward: u = 'forward.u' v = 'forward.v' run = True elif 'backward' in layers and not forward: u = 'backward.u' v = 'backward.v' run = True else: run = False #check if there are vectors if run: #collect existing trackers trackers = [i.name() for i in node.allKnobs() if i.Class() == 'XY_Knob' and 'tracker' in i.name()] #remove inactive trackers trackers = [i for i in trackers if node['enable_' + i].value()] #lists where tracker position data get stored xpos = [] ypos = [] xsize = [] ysize = [] for tracker in trackers: #Append initial positions trackerVal = node[tracker].valueAt(first) xpos.append(trackerVal[0]) ypos.append(trackerVal[1]) #append sample area sizes xsize.append(node['sampleArea_'+tracker].value(0)) ysize.append(node['sampleArea_'+tracker].value(1)) #make tracker knobs keyable node[tracker].setAnimated() #set frame list if forward: rangeList = range(first, last+1) else: rangeList = reversed(range(last, first+1)) #set up pogress window if pb: task = nuke.ProgressTask("VectorTracker") count = 0 #cycle through frames for frame in rangeList: #stop tracking if process is cancelled if pb: if task.isCancelled(): break #update process window if frame != last and pb: count += 1 task.setMessage("sampling frame " + str(frame) + ' (frame ' + str(count) +' of ' + str(totalFrames) + ')') task.setProgress(count*100/totalFrames) #execute for each tracker for i, tracker in enumerate(trackers): #get current position from list curx = xpos[i] cury = ypos[i] #set keyframe node[tracker].animations()[0].setKey(frame, curx) node[tracker].animations()[1].setKey(frame, cury) if frame != last: #sample vectors x = vectors.sample(u, curx+.5, cury+.5, xsize[i],ysize[i], frame) y = vectors.sample(v, curx+.5, cury+.5, xsize[i],ysize[i], frame) #set new position xpos[i] = curx + x ypos[i] = cury + y #jump to frame nuke.frame(frame) if pb: del task #message when there is no vector data else: nuke.message('No vectors found!') def J_VTT_AddTracker(): node = nuke.thisNode() trackerCount = int(node['count'].value() + 1) node['count'].setValue(trackerCount) name = 'tracker' + str(trackerCount) #enable knob enableKnob = nuke.nuke.Boolean_Knob('enable_' + name, '') enableKnob.setValue(True) enableKnob.setFlag(nuke.STARTLINE) enableKnob.setTooltip('Enable this tracker for tracking') node.addKnob( enableKnob ) #position knob posKnob = nuke.nuke.XY_Knob(name, name) posKnob.clearFlag(nuke.STARTLINE) node.addKnob( posKnob ) #area size knob areaKnob = nuke.nuke.WH_Knob('sampleArea_' + name, 'area') areaKnob.setValue(1) areaKnob.setRange(1,50) areaKnob.clearFlag(nuke.STARTLINE) areaKnob.clearFlag(0x00000004) #clear LOG_SLIDER flag areaKnob.setFlag(0x00000010) #set FORCE_RANGE flag areaKnob.setTooltip('Size of the area that will get sampled in the vector channels') node.addKnob( areaKnob ) #remove knob removeKnob = nuke.PyScript_Knob('remove_' + name, '@ColorMult', "node = nuke.thisNode()\nname = '" + name + "'\n\nknobs = ['', 'sampleArea_', 'enable_', 'remove_' ]\n\nfor i in knobs:\n try:\n node.removeKnob(node.knobs()[i + name])\n except:\n pass") removeKnob.setTooltip('Remove this tracker') node.addKnob( removeKnob ) def J_VTT_Export(): node = nuke.thisNode() #deselect nodes an = allScriptNodes() selnodes = [i for i in an if i['selected'].value()] for snode in selnodes: snode['selected'].setValue(False) #select VectorTracker node node['selected'].setValue(True) #find group name if node is in group fnn = node.fullName().split('.') groupName = 'root.' for i in range(len(fnn)-1): groupName += fnn[i] + '.' #get parent if groupName != 'root.': parent = nuke.toNode(groupName[:-1]) else: parent = nuke.root() #create node in parent root with parent: #create tracker node trackerNode = nuke.nodes.Tracker4() trackerNode['xpos'].setValue(node['xpos'].value()+100) trackerNode['ypos'].setValue(node['ypos'].value()+50) trackerNode.showControlPanel() #define tracks container knob container = trackerNode['tracks'] #collect existing trackers trackers = [i.name() for i in node.allKnobs() if i.Class() == 'XY_Knob' and 'tracker' in i.name()] #copy keyframes for each tracker for i, tracker in enumerate(trackers): #add tracker to container trackerNode['add_track'].execute() #remove auto made keys for inx in [0,2,3,4,5,9]: container.removeKey(i*31 + inx) container.setValue(False, i*31 + 6) #define some stuff trackerKnob = node[tracker].value() tracker = node[tracker] #set keys for x and y curves for curve in [0,1]: animcheck = tracker.animation(0+curve) is not None #set value if there is no animation if not animcheck: container.setValue(trackerKnob[0+curve], i*31 + 2+curve) #if there are keyframes on original tracker knob if animcheck: #set x y knobs animated container.setAnimated(i*31 + 2+curve) #find frame numbers of first and last keyframe keys = tracker.animation(0+curve).keys() first = int(keys[0].x) last = int(keys[len(keys)-1].x) #set value at each frame framerange = range(first, last+1) for frame in framerange: #check if current frame is tracked before setting key if tracker.isKeyAt(frame): pos = tracker.getValueAt(frame) #set key container.setValueAt(pos[0+curve],frame,i*31+2+curve) #remove key at frame 0 if not used if 0 not in framerange: container.removeKeyAt(0,i*31 + 2+curve) #reselect nodes trackerNode['selected'].setValue(False) for snode in selnodes: snode['selected'].setValue(True) #deselect VectorTracker node if node not in selnodes: node['selected'].setValue(False) ================================================ FILE: NukeSurvivalToolkit/python/NST_cardToTrack.py ================================================ import nuke def setRefFrame(): n = nuke.thisGroup() n.begin() nuke.toNode("Switch1")['disable'].setValue(0) nuke.toNode("ScanlineRender1")['disable'].setValue(0) nuke.toNode("StabFrameHold")['first_frame'].setValue(n['refFrame'].value()) if n['S'].value() == 1: n['Stabilize'].execute() n = a.input(1) ss = n.input(1) n.end() topnode_name = nuke.tcl("full_name [topnode %s]" % ss.name()) cam = nuke.toNode(topnode_name) cam['near'].clearAnimated() cam['far'].clearAnimated() cam['near'].setValue(0.01) cam['far'].setValue(10000) ss=n['scene'].value() n.begin() nuke.toNode("NoOp1")['pick'].execute() n['refFrame'].setValue(nuke.frame()) nuke.toNode("Switch")['which'].setValue(0) r=nuke.toNode("Perspective") r.setSelected(False) r.hideControlPanel() r['rotate'].setValue(0) r['translate'].setValue(0) r['scaling'].setValue(1) r['uniform_scale'].setValue(ss) n.end() if n['extraHelper'].value() in [0,1,2]: n['findZ'].clearFlag(1) n['happyGroup'].setFlag(1) n['goGroup'].setFlag(1) if n['extraHelper'].value() in [1,2,5]: n['Adjust'].execute() def stabilize(): node = nuke.thisGroup() t = node['S'] h = node['HighPass'] if t.value() == 0: nuke.thisKnob().setLabel('Stabilized') t.setValue(1) nuke.toNode("StabFrameHold")['disable'].setValue(0) nuke.toNode("StabFrameHold")['first_frame'].setValue(node['refFrame'].value()) nuke.toNode("StabRef")['first_frame'].setValue(node['refFrame'].value()) nuke.toNode("StabSwitch")['disable'].setValue(0) else: nuke.thisKnob().setLabel('Stabilize') t.setValue(0) h.setValue(0) nuke.toNode("StabFrameHold")['disable'].setValue(1) nuke.toNode("StabSwitch")['disable'].setValue(1) def consolidateAnimatedNodeTransforms(): # This is based on Ivan B's consolidateNodeTransforms(). # Added support for animated Axis/Camera nodes. Also, if it's # a Camera being concatenated, then projection settings get copied. # -Ean C 24/Feb/2011 import math import nuke axisNode = nuke.toNode('Z_finder') m = nuke.math.Matrix4() nuke.toNode("Switch")['which'].setValue(1) n = nuke.toNode('Perspective') n['scaling'].setExpression('curve') n['rotate'].setExpression('curve') n['translate'].setExpression('curve') first_frame_v = nuke.root()['first_frame'].value() last_frame_v = nuke.root()['last_frame'].value() scale_anim = n['scaling'].animations() rotate_anim = n['rotate'].animations() translate_anim = n['translate'].animations() for i in range(int(first_frame_v), int(last_frame_v+1)): k = axisNode['world_matrix'] k_time_aware = axisNode['world_matrix'].getValueAt(i) for y in range(k.height()): for x in range(k.width()): m[x+(y*k.width())] = k_time_aware[y + k.width()*x] transM =nuke.math.Matrix4(m) transM.translationOnly() rotM = nuke.math.Matrix4(m) rotM.rotationOnly() scaleM = nuke.math.Matrix4(m) scaleM.scaleOnly() scale = (scaleM.xAxis().x, scaleM.yAxis().y, scaleM.zAxis().z) rot = rotM.rotationsZXY() rotDegrees = ( math.degrees(rot[0]), math.degrees(rot[1]), math.degrees(rot[2]) ) trans = (transM[12], transM[13], transM[14]) for s in range(3): scale_anim[s].setKey(i, scale[s]) rotate_anim[s].setKey(i, rotDegrees[s]) translate_anim[s].setKey(i, trans[s]) n['translate'].clearAnimated() n['rotate'].clearAnimated() n['scaling'].clearAnimated() n['uniform_scale'].setValue(nuke.toNode("Card1")['uniform_scale'].value()) #nuke.show((n), True) n.setSelected(True) r=nuke.toNode("look_at_Axis") r.setSelected(False) r.hideControlPanel() def happy(): consolidateAnimatedNodeTransforms() a=nuke.thisNode() if a['S'].value() == 1: a['Stabilize'].execute() n=a if n['extraHelper'].value() in [0,1,2,5]: n['findZ'].setFlag(1) n['happyGroup'].clearFlag(1) n['goGroup'].clearFlag(1) def go(): import nuke axisCase = 0 a=nuke.thisNode() C2Tgroup = nuke.thisNode() #check if camera has animation and if yes collect first and last frame of it with nuke.Root(): try: n = a.input(1) topnode_name = nuke.tcl("full_name [topnode %s]" % n.name()) topnode = nuke.toNode(topnode_name) n = topnode f,l=[],[] print (topnode.name()) tr = n['translate'].getKeyList() first_frame_v = min(tr) last_frame_v = max(tr) except: first_frame_v = int(nuke.toNode('root')['first_frame'].value()) last_frame_v = int(nuke.toNode('root')['last_frame'].value()) if a['S'].value() == 1: a['Stabilize'].execute() a.begin() x=int(a['xpos'].value()) y=int(a['ypos'].value()) p = nuke.toNode("Perspective") t=p['translate'].value() r=p['rotate'].value() s=p['scaling'].value() us=p['uniform_scale'].value() nuke.toNode("Switch")['which'].setValue(1) a.end() for node in nuke.allNodes(): node.setSelected(False) try: a.input(1).setSelected(True) except: nuke.message("please connect your Camera") try: a.input(0).setSelected(True) except: nuke.message("please connect your footage to BG input") #Card case if a['extraHelper'].value()==3: crd = a.input(2) crd.setSelected(True) crd.setXYpos(x,y+50) axisCase = 2 #Axises case elif a['extraHelper'].value()==4: axisCase = 1 import math import nuke axisNode = a.input(2) nuke.thisGroup().end() m = nuke.math.Matrix4() n = nuke.nodes.Card2() n['scaling'].setExpression('curve') n['rotate'].setExpression('curve') n['translate'].setExpression('curve') n['name'].setValue("consolidate of "+axisNode.name()) n['xpos'].setValue(int(x)) n['ypos'].setValue(int(y+50)) scale_anim = n['scaling'].animations() rotate_anim = n['rotate'].animations() translate_anim = n['translate'].animations() for i in range(int(first_frame_v), int(last_frame_v+1)): k = axisNode['world_matrix'] k_time_aware = axisNode['world_matrix'].getValueAt(i) for y in range(k.height()): for x in range(k.width()): m[x+(y*k.width())] = k_time_aware[y + k.width()*x] transM =nuke.math.Matrix4(m) transM.translationOnly() rotM = nuke.math.Matrix4(m) rotM.rotationOnly() scaleM = nuke.math.Matrix4(m) scaleM.scaleOnly() scale = (scaleM.xAxis().x, scaleM.yAxis().y, scaleM.zAxis().z) rot = rotM.rotationsZXY() rotDegrees = ( math.degrees(rot[0]), math.degrees(rot[1]), math.degrees(rot[2]) ) trans = (transM[12], transM[13], transM[14]) for s in range(3): scale_anim[s].setKey(i, scale[s]) rotate_anim[s].setKey(i, rotDegrees[s]) translate_anim[s].setKey(i, trans[s]) a.input(1).setSelected(True) a.input(0).setSelected(True) n.setSelected(True) a.setInput(2,n) #Deep input case else: n = nuke.nodes.Card2() n.setXYpos(x,y+100) n['translate'].setValue(t) n['rotate'].setValue(r) n['scaling'].setValue(s) n['uniform_scale'].setValue(us) n.setSelected(True) with nuke.Root(): try: import thread, threading, time, nuke, math, nukescripts except: import _thread, threading, time, nuke, math, nukescripts def execRC(first,last): runMe = True while runMe == True: nuke.execute('r1',first,last) nuke.execute('r2',first,last) nuke.execute('r3',first,last) nuke.execute('r4',first,last) stop_event.set() runMe = False break def getCamera(): n = a.input(1) topnode_name = nuke.tcl("full_name [topnode %s]" % n.name()) topnode = nuke.toNode(topnode_name) cam = topnode return cam def BGdetect(): for n in nuke.selectedNodes(): if 'xform_order' not in n.knobs(): Name = n.name() Width = n.width() Height = n.height() Aspect = n.pixelAspect() form = str(Width)+" "+str(Height)+" "+str(Aspect) bg = nuke.nodes.Constant(postage_stamp = False) bg['format'].setValue(nuke.addFormat(form)) return bg def C2T(dialog): #card card = None for n in nuke.selectedNodes(): if "Card" in n.Class() or "Axis" in n.Class(): card = n break if card == None: nuke.message('no card selected?') return # initialize tool values for auto-creation label = card['label'].value() ref = int(nuke.frame()) first = first_frame_v last = last_frame_v bg = BGdetect() cam = getCamera() rootAspect = nuke.Root()['format'].value().pixelAspect() x = card.xpos() y = card.ypos() bg.setXYpos(x,y+50) if dialog == True: #panel panel = nuke.Panel("C2T") panel.addSingleLineInput("label:", card['label'].value()) panel.addSingleLineInput("firstFrame:", str(first)) panel.addSingleLineInput("lastFrame:", str(last)) panel.addSingleLineInput("ref frame:", str(ref)) if panel.show(): first = int(panel.value("firstFrame:")) last = int(panel.value("lastFrame:")) ref = int(panel.value("ref frame:")) if ref>last or ref ref: ##### kill tail X if curveXDown == 1: ##### curve X is going down####################################################################################FIXEDforEnd lastGoodX= k.valueAt(valsx.index(minX)+first,0) prelastGoodX= k.valueAt(valsx.index(minX)+first-1,0) diffX= abs(lastGoodX) - abs(prelastGoodX) offsetX = abs(lastGoodX)+maxX+diffX*2 for i in range(valsx.index(maxX)+first,last+1): val = k.valueAt(i)[0] k.setValueAt(val-offsetX,i,0) if curveXUp == 1: ##### curve X is going up####################################################################################FIXEDforEnd lastGoodX = k.valueAt(valsx.index(maxX)+first,0) prelastGoodX= k.valueAt(valsx.index(maxX)+first-1,0) diffX= abs(lastGoodX)- abs(prelastGoodX) offsetX= maxX+abs(minX)+diffX*2 for i in range(valsx.index(minX)+first,last+1): val = k.valueAt(i)[0] k.setValueAt(val+offsetX,i,0) if valsy.index(maxY)+first > ref: ##### kill tail Y if curveYDown == 1: ##### curve Y is going down#####################################################################################FIXEDforEnd lastGoodY= k.valueAt(valsy.index(minY)+first,1) prelastGoodY= k.valueAt(valsy.index(minY)+first-1,1) diffY= abs(lastGoodY) - abs(prelastGoodY) offsetY = abs(lastGoodY)+maxY+diffY*2 for i in range(valsy.index(maxY)+first,last+1): val = k.valueAt(i)[1] k.setValueAt(val-offsetY,i,1) if curveYUp == 1: ##### curve Y is going up####################################################################################FIXEDforEnd lastGoodY = k.valueAt(valsy.index(maxY)+first,1) prelastGoodY= k.valueAt(valsy.index(maxY)+first-1,1) diffY=abs(lastGoodY) - abs(prelastGoodY) offsetY= maxY+abs(minY)+diffY*2 for i in range(valsy.index(minY)+first,last+1): val = k.valueAt(i)[1] k.setValueAt(val+offsetY,i,1) if valsx.index(maxX)+first < ref: ##### kill head X------------------------------------------------------------------------------------- if curveXDown == 1: ##### curve X is going down#####################################################################################FIXEDforBeginning firstGoodX= k.valueAt(valsx.index(maxX)+first,0) prefirstGoodX= k.valueAt(valsx.index(maxX)+first+1,0) diffX= abs(firstGoodX) - abs(prefirstGoodX) offsetX = abs(firstGoodX)+abs(minX)+diffX*2 for i in range(first,valsx.index(maxX)+first): val = k.valueAt(i)[0] k.setValueAt(val+offsetX,i,0) if curveXUp == 1: ##### curve X is going up#####################################################################################FIXEDforBeginning firstGoodX = k.valueAt(valsx.index(minX)+first,0) prefirstGoodX= k.valueAt(valsx.index(minX)+first+1,0) diffX= abs(firstGoodX) - abs(prefirstGoodX) offsetX= abs(firstGoodX)+maxX+diffX*2 for i in range(first,valsx.index(minX)+first): val = k.valueAt(i)[0] k.setValueAt(val-offsetX,i,0) if valsy.index(maxY)+first < ref: ##### kill head Y if curveYDown == 1: ##### curve Y is going down#####################################################################################FIXEDforBeginning firstGoodY = k.valueAt(valsy.index(maxY)+first,1) prefirstGoodY = k.valueAt(valsy.index(maxY)+first+1,1) diffY = abs(firstGoodY) - abs(prefirstGoodY) offsetY = abs(firstGoodY)+abs(minY)+diffY*2 for i in range(first,valsy.index(maxY)+first): val = k.valueAt(i)[1] k.setValueAt(val+offsetY,i,1) if curveYUp == 1: ##### curve Y is going up#####################################################################################FIXEDforBeginning firstGoodY = k.valueAt(valsy.index(minY)+first,1) prefirstGoodY = k.valueAt(valsy.index(minY)+first+1,1) diffY = abs(firstGoodY) - abs(prefirstGoodY) offsetY = abs(firstGoodY)+maxY+diffY*2 for i in range(first,valsy.index(minY)+first): val = k.valueAt(i)[1] k.setValueAt(val-offsetY,i,1) last = lastB first = firstB else: pass # corner pin normal or NST_CProject try : cp = nuke.nodes.NST_CProject(xpos = x+110, ypos = y) cp['camera'].setValue(cam.name()) cp['translate'].setValue(card['translate'].value()) cp['rotation'].setValue(card['rotate'].value()) cp['element'].setValue(label) cp.setName("CP_"+label) cp['refFrame'].setValue(ref) except: cp = nuke.nodes.CornerPin2D(label = label +' ('+str(ref)+')', xpos = x+110, ypos = y) cp['to1'].copyAnimations(r1['output'].animations()) cp['to2'].copyAnimations(r2['output'].animations()) cp['to3'].copyAnimations(r3['output'].animations()) cp['to4'].copyAnimations(r4['output'].animations()) cp['from1'].setValue(r1['output'].getValueAt(ref)) cp['from2'].setValue(r2['output'].getValueAt(ref)) cp['from3'].setValue(r3['output'].getValueAt(ref)) cp['from4'].setValue(r4['output'].getValueAt(ref)) #transform normal or NST_TProject try: tr = nuke.nodes.NST_TProject(xpos = x+330, ypos = y) tr.setName("TP_"+label) tr['translate'].setAnimated() except: tr = nuke.nodes.Transform(label = label+' transform ('+str(ref)+')',xpos = x+330, ypos = y) tr['translate'].setAnimated() # corner pin matrix & roto & transform if C2Tgroup["Matrix"].value() == True or C2Tgroup["Roto"].value() == True or C2Tgroup["Transform"].value() == True: cpm = nuke.nodes.CornerPin2D(label = label+' matrix ('+str(ref)+')', xpos = x+440, ypos = y) cpm['transform_matrix'].setAnimated() roto = nuke.nodes.Roto( xpos = x+220, ypos = y) roto.setName(roto['name'].value().replace('Roto','R')+"_"+label) roto_transform = roto['curves'].rootLayer.getTransform() # transform of root layer in roto nuke.show(roto) projectionMatrixTo = nuke.math.Matrix4() projectionMatrixFrom = nuke.math.Matrix4() frame = first while frame 15) def _undo_disable(): if hasattr(nuke, 'Undo'): nuke.Undo.disable() def _undo_enable(): if hasattr(nuke, 'Undo'): nuke.Undo.enable() # ------------------------------------------------------------------------------------- # OPTIMIZATION HELPERS # ------------------------------------------------------------------------------------- def set_anim_curve_from_data(knob, data_list_per_channel): """ Constructs a Nuke animation and applies it to the knob. Nuke 16+: uses fromScript for speed. Nuke 15 and lower: uses setKey per channel. """ if NUKE_16_PLUS and hasattr(knob, 'fromScript'): full_script = "" for channel_data in data_list_per_channel: if channel_data: curve_str = "{curve " keys_str = " ".join([f"x{int(f)} {val:.6f}" for f, val in channel_data]) curve_str += keys_str + "} " else: curve_str = "{curve} " full_script += curve_str if full_script.strip(): knob.fromScript(full_script) return # Nuke 15 and lower: setKey per channel (avoid isAnimated(ch_idx) for API compatibility) aSize = 1 if knob.singleValue() else knob.arraySize() for ch_idx in range(min(len(data_list_per_channel), aSize)): channel_data = data_list_per_channel[ch_idx] if not channel_data: continue try: knob.setAnimated(ch_idx) except Exception: pass anim = knob.animation(ch_idx) if anim is not None: for f, val in channel_data: anim.setKey(f, val) def kill_animation(knobs): ''' Kill animation in knobs if knobs are animated but animation is constant. ''' for knob in knobs: if knob.isAnimated(): aSize = 1 if knob.singleValue() else knob.arraySize() for index in range(aSize): anim = knob.animation(index) if anim and anim.constant(): knob.clearAnimated(index) def offset_nodes(x,y): ''' find how far newly created node should be created. ''' allNodes = nuke.allNodes() for step in range(1,10): step = abs(10-step) for node in allNodes: if node['xpos'].value() == x+110*step and node['ypos'].value() == y: x = x+110*step break return x def check_first_last_frame(C2Tgroup): ''' check if camera has animation and if yes collect first and last frame of it ''' with nuke.Root(): how = C2Tgroup['extraHelper'].value() try: with C2Tgroup: tr = nuke.toNode('DummyCam')['translate'].getKeyList() first_frame_v = min(tr) last_frame_v = max(tr) if how == 1: translateKeys = C2Tgroup.input(2)['translate'].getKeyList() first_frame_v = min([first_frame_v,min(translateKeys)]) last_frame_v = max([last_frame_v,max(translateKeys)]) except: first_frame_v = int(nuke.toNode('root')['first_frame'].value()) last_frame_v = int(nuke.toNode('root')['last_frame'].value()) if C2Tgroup['S'].value() == 1: C2Tgroup['Stabilize'].execute() return first_frame_v, last_frame_v def check_curve(knob,first,last,ref): ''' Check if a curve has Euler flip issue ''' import math problem = False vals = [knob.valueAt(i,0) for i in range(first, last+1)] if not vals: return False valSort = sorted(vals) minX = valSort[0] maxX = valSort[-1] if abs(vals.index(maxX) - vals.index(minX)) == 1: problem = True return problem def fix_curves(one,first,last,ref): import math timeline = ["beginning","end"] lastB = last firstB = first for side in timeline: if side == "beginning": last = ref if side == "end": first = ref last = lastB curveXDown = curveXUp = curveYDown = curveYUp = 0 valsx = [one.valueAt(i,0) for i in range(first,last+1)] valsy = [one.valueAt(i,1) for i in range(first,last+1)] if not valsx or not valsy: continue valSortx = sorted(valsx) valSorty = sorted(valsy) minX = valSortx[0]; maxX = valSortx[-1] minY = valSorty[0]; maxY = valSorty[-1] if math.fabs(valsx.index(maxX)-valsx.index(minX)) == 1: if valsx.index(maxX)-valsx.index(minX) < 0: curveXUp = 1 else: curveXDown = 1 if valsy.index(maxY)-valsy.index(minY) < 0: curveYUp = 1 else: curveYDown = 1 if valsx.index(maxX)+first > ref: if curveXDown == 1: lastGoodX= one.valueAt(valsx.index(minX)+first,0) prelastGoodX= one.valueAt(valsx.index(minX)+first-1,0) offsetX = abs(lastGoodX)+maxX+(abs(lastGoodX) - abs(prelastGoodX))*2 for i in range(valsx.index(maxX)+first,last+1): one.setValueAt(one.valueAt(i)[0]-offsetX,i,0) if curveXUp == 1: lastGoodX = one.valueAt(valsx.index(maxX)+first,0) prelastGoodX= one.valueAt(valsx.index(maxX)+first-1,0) offsetX= maxX+abs(minX)+(abs(lastGoodX)- abs(prelastGoodX))*2 for i in range(valsx.index(minX)+first,last+1): one.setValueAt(one.valueAt(i)[0]+offsetX,i,0) if valsy.index(maxY)+first > ref: if curveYDown == 1: lastGoodY= one.valueAt(valsy.index(minY)+first,1) prelastGoodY= one.valueAt(valsy.index(minY)+first-1,1) offsetY = abs(lastGoodY)+maxY+(abs(lastGoodY) - abs(prelastGoodY))*2 for i in range(valsy.index(maxY)+first,last+1): one.setValueAt(one.valueAt(i)[1]-offsetY,i,1) if curveYUp == 1: lastGoodY = one.valueAt(valsy.index(maxY)+first,1) prelastGoodY= one.valueAt(valsy.index(maxY)+first-1,1) offsetY= maxY+abs(minY)+(abs(lastGoodY) - abs(prelastGoodY))*2 for i in range(valsy.index(minY)+first,last+1): one.setValueAt(one.valueAt(i)[1]+offsetY,i,1) def delete_tab(): if nuke.ask("This will delete currect Tab and all nodes inside of it\nAre you very sure you want to do so?\n"): node = nuke.thisGroup() tab_knob_name = nuke.thisKnob().name().replace('Delete','') to_remove = [] for n in range(node.numKnobs()): cur_knob = node.knob(n) if tab_knob_name in cur_knob.name(): to_remove.append(cur_knob) for element in to_remove: if isinstance(element, nuke.Tab_Knob): to_remove.remove(element) to_remove.append(element) for k in to_remove: node.removeKnob(k) if 'card_to_track' in node.knobs(): node['card_to_track'].setFlag(1) # ------------------------------------------------------------------------------------- # MAIN FUNCTIONS # ------------------------------------------------------------------------------------- def set_ref_frame(): C2Tgroup = nuke.thisGroup() C2Tgroup['Zfind'].setValue(0) if NUKE_16_PLUS: with C2Tgroup: nuke.toNode("ScanlineRender1")['disable'].setValue(0) nuke.toNode("StabFrameHold")['first_frame'].setValue(C2Tgroup['refFrame'].value()) if C2Tgroup['S'].value() == 1: C2Tgroup['Stabilize'].execute() if not C2Tgroup.input(1): nuke.message('Could you please connect some Camera if you do not mind.') if not C2Tgroup.input(0): nuke.message('No connectd BG footage, will use the project resolution instead') nuke.toNode("NoOp1")['pick'].execute() C2Tgroup['refFrame'].setValue(nuke.frame()) nuke.toNode("Switch")['which'].setValue(0) r=nuke.toNode("Perspective") r.setSelected(False); r.hideControlPanel() r['rotate'].setValue(0); r['translate'].setValue(0); r['scaling'].setValue(1) r['uniform_scale'].setValue(C2Tgroup['scene'].value()) else: C2Tgroup.begin() try: nuke.toNode("ScanlineRender1")['disable'].setValue(0) nuke.toNode("StabFrameHold")['first_frame'].setValue(C2Tgroup['refFrame'].value()) if C2Tgroup['S'].value() == 1: C2Tgroup['Stabilize'].execute() if not C2Tgroup.input(1): nuke.message('Could you please connect some Camera if you do not mind.') if not C2Tgroup.input(0): nuke.message('No connectd BG footage, will use the project resolution instead') nuke.toNode("NoOp1")['pick'].execute() C2Tgroup['refFrame'].setValue(nuke.frame()) nuke.toNode("Switch")['which'].setValue(0) r=nuke.toNode("Perspective") r.setSelected(False); r.hideControlPanel() r['rotate'].setValue(0); r['translate'].setValue(0); r['scaling'].setValue(1) r['uniform_scale'].setValue(C2Tgroup['scene'].value()) finally: C2Tgroup.end() if C2Tgroup['extraHelper'].value() in [0]: C2Tgroup['findZ'].clearFlag(1) for one in ['happyGroup','goGroup','goGroup']: C2Tgroup[one].setFlag(1) if C2Tgroup['extraHelper'].value() in [1,2,3,4]: C2Tgroup['Adjust'].execute() def stabilize(): ''' add stabilization to card in order to find its position in 3d space in easier way ''' node = nuke.thisGroup() t = node['S'] with node: if t.value() == 0: nuke.thisKnob().setLabel('Stabilized') t.setValue(1) nuke.toNode("StabFrameHold")['disable'].setValue(0) nuke.toNode("StabFrameHold")['first_frame'].setValue(node['refFrame'].value()) nuke.toNode("StabRef")['first_frame'].setValue(node['refFrame'].value()) nuke.toNode("StabSwitch")['disable'].setValue(0) else: nuke.thisKnob().setLabel('Stabilize') t.setValue(0) node['HighPass'].setValue(0) node['HighPass_1'].setValue(0) nuke.toNode("StabFrameHold")['disable'].setValue(1) nuke.toNode("StabSwitch")['disable'].setValue(1) def happy(): ''' bake position we did find in previous step in temporary Axis, this axis will be later used to get corner pin from 3d position. ''' C2Tgroup=nuke.thisNode() with C2Tgroup: nuke.toNode("Switch")['which'].setValue(1) axisNode = nuke.toNode('Z_finder') perspective_axis = nuke.toNode('Perspective') refFrame = C2Tgroup['refFrame'].value() matrixVal = axisNode['world_matrix'].valueAt(refFrame) perspective_axis['translate'].setValue([matrixVal[3],matrixVal[7],matrixVal[11]]) perspective_axis.setSelected(True) r=nuke.toNode("look_at_Axis") r.setSelected(False) r.hideControlPanel() if C2Tgroup['S'].value() == 1: C2Tgroup['Stabilize'].execute() C2Tgroup['HighPass'].setValue(0) if C2Tgroup['extraHelper'].value() in [0,2,3,4]: C2Tgroup['findZ'].setFlag(1) C2Tgroup['happyGroup'].clearFlag(1) C2Tgroup['goGroup'].clearFlag(1) C2Tgroup['setGroup'].setFlag(1) def show_grid_axis(): C2Tgroup=nuke.thisNode() with C2Tgroup: perspective_axis = nuke.toNode('Perspective') perspective_axis.setSelected(True) nuke.show(perspective_axis) def go(): C2Tgroup=nuke.thisNode() modes = ['MatchMove','3D Locator(card or axis)','Geometry',"WorldPosition","Deep"] mode = modes[int(C2Tgroup['extraHelper'].value())] if mode == '3D Locator(card or axis)': if C2Tgroup.input(2): axisNode = C2Tgroup.input(2) try: if 'world_matrix' not in axisNode.knobs() and 'matrix' not in axisNode.knobs(): raise Exception except: nuke.message("Supported nodes are an Axis,Card or any Other 3D node with world_matrix") return else: nuke.message("It looks like you did not connect an Axis or a Card to the Extra input.") return if C2Tgroup['S'].value() == 1: C2Tgroup['Stabilize'].execute() C2Tgroup['HighPass'].setValue(0) for one in ['happyGroup','C2T','scene_settings','cameraExchange','goGroup','findZ']: C2Tgroup[one].setFlag(1) # THIS WAS THE MISSING FUNCTION CALL IN THE PREVIOUS VERSION first_frame_v, last_frame_v = check_first_last_frame(C2Tgroup) x=int(C2Tgroup['xpos'].value()) y=int(C2Tgroup['ypos'].value()) with C2Tgroup: nuke.toNode("Perspective").setSelected(False) with nuke.Root(): def C2T(dialog): ref = int(nuke.frame()) first = first_frame_v last = last_frame_v bg = C2Tgroup.input(0) recalculate = False if dialog == True: panel = nuke.Panel("C2T") panel.addSingleLineInput("label:", "") panel.addSingleLineInput("firstFrame:", str(first)) panel.addSingleLineInput("lastFrame:", str(last)) panel.addSingleLineInput("ref frame:", str(ref)) if panel.show(): first = int(panel.value("firstFrame:")) last = int(panel.value("lastFrame:")) ref = int(panel.value("ref frame:")) if ref>last or refDelete Tab") flags = [card, corner, roto, transform] for one in flags: one.clearFlag(nuke.STARTLINE) card.setFlag(nuke.STARTLINE) knobs = [tab_knob, refFrame, firstFrame, lastFrame, card, corner, roto, transform, baked, bGCard, translate, rotate, scale, uniform_scale, eGCard, bGCorner, to1, to2, to3, to4, eGCorner, bGTransform, translateT, centerT, eGTransform , bGMatrix, matrix, eGMatrix, delete] for one in knobs: C2Tgroup.addKnob(one) # Set Values & Scripts C2Tgroup['ReferenceFrame_X_'+label].setValue(ref) C2Tgroup['FirstFrame_X_'+label].setValue(int(first)) C2Tgroup['LastFrame_X_'+label].setValue(int(last)) C2Tgroup['Card_X_'+label].setValue('import NST_cardToTrack_v9; NST_cardToTrack_v9.card_code()') C2Tgroup['CornerPin_X_'+label].setValue('import NST_cardToTrack_v9; NST_cardToTrack_v9.corner_code()') C2Tgroup['Roto_X_'+label].setValue('import NST_cardToTrack_v9; NST_cardToTrack_v9.roto_code()') C2Tgroup['Transform_X_'+label].setValue('import NST_cardToTrack_v9; NST_cardToTrack_v9.transform_code()') C2Tgroup['Delete_X_'+label].setValue('import NST_cardToTrack_v9; NST_cardToTrack_v9.delete_tab()') # Calculation Call import time as time_module start_time = time_module.time() print(f"\n[CardToTrack] Starting calculation for '{label}'...") # This calls the function that includes the UNDO FIX and STRING INJECTION calculate_corner_pin(C2Tgroup, label, recalculate) calc_time = time_module.time() - start_time print(f"[CardToTrack] Calculation completed in {calc_time:.3f} seconds") # Clean up Internal Connections with C2Tgroup: am = nuke.toNode('aM') am['translate'].setExpression('parent.Perspective.translate') am['rotate'].setExpression('parent.Perspective.rotate') # Revert internal helpers to default expressions scale_x_expr = '-0.5*Perspective.uniform_scale*Perspective.scaling.x' scale_y_expr = 'input0.pixel_aspect*-0.5*Perspective.uniform_scale*Perspective.scaling.y' nuke.toNode('a1')['translate'].setExpression(scale_x_expr,0) toes = [C2Tgroup['to1_X_'+label], C2Tgroup['to2_X_'+label], C2Tgroup['to3_X_'+label], C2Tgroup['to4_X_'+label]] cardknobs = [C2Tgroup['Translate_X_'+label], C2Tgroup['Rotate_X_'+label], C2Tgroup['Scale_X_'+label], C2Tgroup['Uniform_scale_X_'+label]] kill_animation(toes + cardknobs) issues = [] for one in toes: issues.append(check_curve(one,first,last,ref)) if True in issues: if nuke.ask("Perspective problem detected! Fix it?"): for i, issue in enumerate(issues): if issue: fix_curves(toes[i],first,last,ref) if '_X_'+label in C2Tgroup.knobs(): C2Tgroup['_X_'+label].setFlag(0) C2T(True) def recalculate_camera(): C2Tgroup=nuke.thisNode() cardTabs = [k.rpartition('_X_')[2] for k in C2Tgroup.knobs() if k.startswith('_X_')] iterations = len(cardTabs) if iterations > 1: progress_bar = nuke.ProgressTask("Processing Tabs") for i, label in enumerate(cardTabs): if iterations > 1 and progress_bar.isCancelled(): break calculate_corner_pin(C2Tgroup, label, True) if C2Tgroup['TranslateT_X_'+label].isAnimated(): calculate_translate(C2Tgroup, label) if C2Tgroup['matrix_X_'+label].isAnimated(): calculate_matrix(C2Tgroup, label) with C2Tgroup: nuke.toNode('aM')['translate'].setExpression('parent.Perspective.translate') nuke.toNode('aM')['rotate'].setExpression('parent.Perspective.rotate') if iterations > 1: progress_bar.setProgress(int(100*(i / float(iterations)))) progress_bar.setMessage("Processing Tab: "+label) if iterations > 1: del progress_bar def select_associated_nodes(): ''' Select all nodes created by this Group. ''' C2Tgroup = nuke.thisGroup() group_name = C2Tgroup.name() cardTabs = [] for label in C2Tgroup.knobs(): if label.startswith('_X_'): cardTabs.append(label.rpartition('_X_')[2]) with nuke.Root(): nan = nuke.allNodes() for node in nan: node.setSelected(False) for node in nan: if 'card_to_track' in node.knobs() and "CardToTrack" not in node.name(): if group_name+":" in node['card_to_track'].value(): node.setSelected(True) def update_baked(): ''' Recalculate selected nodes to match updated camera. ''' C2Tgroup = nuke.thisGroup() group_name = C2Tgroup.name() cardTabs = [] for label in C2Tgroup.knobs(): if label.startswith('_X_'): cardTabs.append(label.rpartition('_X_')[2]) with nuke.Root(): c2t_nodes = nuke.selectedNodes() for node in c2t_nodes: identificator = node['card_to_track'].value() label = identificator.rpartition(": ")[2] nodetype = identificator.split(':')[1] if '_X_'+label not in C2Tgroup.knobs(): nuke.message('looks like '+node.name() +" is not a part of the " +C2Tgroup.name()+" anymore.\nCould be you erased the tab with it?\nPlease deselect this node and run Update Selected Nodes again.") return if nodetype == 'card': if C2Tgroup['Translate_X_'+label].isAnimated(): node['translate'].copyAnimations(C2Tgroup['Translate_X_'+label].animations()) else: node['translate'].setValue(C2Tgroup['Translate_X_'+label].value()) if C2Tgroup['Rotate_X_'+label].isAnimated(): node['rotate'].copyAnimations(C2Tgroup['Rotate_X_'+label].animations()) else: node['rotate'].setValue(C2Tgroup['Rotate_X_'+label].value()) if C2Tgroup['Scale_X_'+label].isAnimated(): node['scaling'].copyAnimations(C2Tgroup['Scale_X_'+label].animations()) else: node['scaling'].setValue(C2Tgroup['Scale_X_'+label].value()) if C2Tgroup['Uniform_scale_X_'+label].isAnimated(): node['uniform_scale'].copyAnimations(C2Tgroup['Uniform_scale_X_'+label].animations()) else: node['uniform_scale'].setValue(C2Tgroup['Uniform_scale_X_'+label].value()) elif nodetype == 'cornerpin': node['to1'].copyAnimations(C2Tgroup['to1_X_'+label].animations()) node['to2'].copyAnimations(C2Tgroup['to2_X_'+label].animations()) node['to3'].copyAnimations(C2Tgroup['to3_X_'+label].animations()) node['to4'].copyAnimations(C2Tgroup['to4_X_'+label].animations()) elif nodetype == 'transform': if C2Tgroup['TranslateT_X_'+label].isAnimated(): node['translate'].copyAnimations(C2Tgroup['TranslateT_X_'+label].animations()) else: node['translate'].setValue(C2Tgroup['TranslateT_X_'+label].value()) node['center'].setValue(C2Tgroup['centerT_X_'+label].value()) elif nodetype == 'roto': nuke.show(node) node['transform_matrix'].copyAnimations(C2Tgroup['matrix_X_'+label].animations()) node['curves'].changed() # ------------------------------------------------------------------------------------- # CORE CALCULATION FUNCTIONS (WITH FIXES) # ------------------------------------------------------------------------------------- def calculate_corner_pin(C2Tgroup,label,recalculate): import time as time_module start_time = time_module.time() modes = ['MatchMove','3D Locator(card or axis)','Geometry',"WorldPosition","Deep"] mode = modes[int(C2Tgroup['extraHelper'].value())] first = int(C2Tgroup['FirstFrame_X_'+label].value()) last = int(C2Tgroup['LastFrame_X_'+label].value()) frame_count = last - first + 1 print(f" [calculate_corner_pin] Processing {frame_count} frames ({first}-{last}), mode: {mode}") translate = C2Tgroup['Translate_X_'+label] rotate = C2Tgroup['Rotate_X_'+label] scale = C2Tgroup['Scale_X_'+label] uniform_scale = C2Tgroup['Uniform_scale_X_'+label] toes = [C2Tgroup['to1_X_'+label], C2Tgroup['to2_X_'+label], C2Tgroup['to3_X_'+label], C2Tgroup['to4_X_'+label]] cardknobs = [translate, rotate, scale, uniform_scale] task = nuke.ProgressTask("Calculating Corner Pin Data") progress_step = 30 # --- UNDO DISABLE (CRITICAL FOR SPEED) --- _undo_disable() try: if recalculate: recalc_start = time_module.time() with C2Tgroup: am = nuke.toNode('aM') am['translate'].setExpression('parent.'+'Translate_X_'+label) am['rotate'].setExpression('parent.'+'Rotate_X_'+label) expr_x = '0.5*parent.Scale_X_'+label+'.x*parent.Uniform_scale_X_'+label expr_y = 'input0.pixel_aspect*0.5*parent.Scale_X_'+label+'.y*parent.Uniform_scale_X_'+label nuke.toNode('a1')['translate'].setExpression('-'+expr_x, 0); nuke.toNode('a1')['translate'].setExpression('-'+expr_y, 1) nuke.toNode('a2')['translate'].setExpression(expr_x, 0); nuke.toNode('a2')['translate'].setExpression('-'+expr_y, 1) nuke.toNode('a3')['translate'].setExpression(expr_x, 0); nuke.toNode('a3')['translate'].setExpression(expr_y, 1) nuke.toNode('a4')['translate'].setExpression('-'+expr_x, 0); nuke.toNode('a4')['translate'].setExpression(expr_y, 1) print(f" [calculate_corner_pin] Recalculate expressions set in {time_module.time() - recalc_start:.3f}s") else: if mode == '3D Locator(card or axis)': matrix_start = time_module.time() axisNode = C2Tgroup.input(2) axis_matrix = axisNode['world_matrix'] if 'world_matrix' in axisNode.knobs() else axisNode['matrix'] math_matrix = nuke.math.Matrix4() for k in cardknobs: k.setExpression('curve') frames = range(int(first), int(last+1)) scale_data, rotate_data, translate_data = [[],[],[]], [[],[],[]], [[],[],[]] for idx, i in enumerate(frames): if task.isCancelled(): break if idx % progress_step == 0: task.setMessage(f"Reading 3D Data frame {i}") task.setProgress(int((idx / len(frames)) * 30)) k_vals = axis_matrix.getValueAt(i) for y in range(4): for x in range(4): math_matrix[x+(y*4)] = k_vals[y + 4*x] transM = nuke.math.Matrix4(math_matrix); transM.translationOnly() rotM = nuke.math.Matrix4(math_matrix); rotM.rotationOnly() scaleM = nuke.math.Matrix4(math_matrix); scaleM.scaleOnly() s = (scaleM.xAxis().x, scaleM.yAxis().y, scaleM.zAxis().z) r = rotM.rotationsZXY() t = (transM[12], transM[13], transM[14]) for ch in range(3): scale_data[ch].append((i, s[ch])) rotate_data[ch].append((i, math.degrees(r[ch]))) translate_data[ch].append((i, t[ch])) print(f" [calculate_corner_pin] Matrix decomposition completed in {time_module.time() - matrix_start:.3f}s") # --- BATCH INJECT STRINGS (FIXES SLOWDOWN) --- inject_start = time_module.time() set_anim_curve_from_data(scale, scale_data) set_anim_curve_from_data(rotate, rotate_data) set_anim_curve_from_data(translate, translate_data) uniform_scale.setValue(1) print(f" [calculate_corner_pin] Animation injection completed in {time_module.time() - inject_start:.3f}s") with C2Tgroup: am = nuke.toNode('aM') am['translate'].setExpression('parent.'+'Translate_X_'+label) am['rotate'].setExpression('parent.'+'Rotate_X_'+label) expr_x = '0.5*parent.Scale_X_'+label+'.x'; expr_y = 'input0.pixel_aspect*0.5*parent.Scale_X_'+label+'.y' nuke.toNode('a1')['translate'].setExpression('-'+expr_x, 0); nuke.toNode('a1')['translate'].setExpression('-'+expr_y, 1) nuke.toNode('a2')['translate'].setExpression(expr_x, 0); nuke.toNode('a2')['translate'].setExpression('-'+expr_y, 1) nuke.toNode('a3')['translate'].setExpression(expr_x, 0); nuke.toNode('a3')['translate'].setExpression(expr_y, 1) nuke.toNode('a4')['translate'].setExpression('-'+expr_x, 0); nuke.toNode('a4')['translate'].setExpression(expr_y, 1) else: translate.setExpression('Perspective.translate.x',0); translate.setExpression('Perspective.translate.y',1); translate.setExpression('Perspective.translate.z',2) rotate.setExpression('Perspective.rotate.x',0); rotate.setExpression('Perspective.rotate.y',1); rotate.setExpression('Perspective.rotate.z',2) scale.setExpression('Perspective.scaling.x',0); scale.setExpression('Perspective.scaling.y',1); scale.setExpression('Perspective.scaling.z',2) uniform_scale.setExpression('Perspective.uniform_scale') # Internal Expressions for CornerPin for one in toes: idx = "a" + str(toes.index(one) + 1) ratio = "input0.width*DummyCam.focal/DummyCam.haperture" one.setExpression(f"({idx}.world_matrix.3/-{idx}.world_matrix.11) * {ratio}+input0.width/2 - DummyCam.win_translate.u*input0.width/2", 0) one.setExpression(f"({idx}.world_matrix.7/-{idx}.world_matrix.11)*input0.pixel_aspect*{ratio}+input0.height/2-DummyCam.win_translate.v*input0.width/2", 1) # Bake Focal Length (Fast enough with standard loop) with C2Tgroup: focal_knob = nuke.toNode("DummyCam")['focal'] if focal_knob.isAnimated() and not focal_knob.animation(0).constant(): f_anim = focal_knob.animation(0) f_data = [(f, f_anim.evaluate(f)) for f in range(first, last+1)] for f, v in f_data: f_anim.setKey(f, v) focal_knob.setExpression('curve') # --- BATCH BAKE CORNER PINS AND CARD KNOBS --- # Must bake both toes (corner pins) and cardknobs (translate, rotate, scale) bake_start = time_module.time() knobs_to_bake = toes + cardknobs for k_idx, knob in enumerate(knobs_to_bake): if task.isCancelled(): break task.setMessage(f"Baking {knob.name()}") task.setProgress(40 + int((k_idx/len(knobs_to_bake))*50)) if knob.isAnimated(): aSize = 1 if knob.singleValue() else knob.arraySize() k_data = [[] for _ in range(aSize)] for f in range(first, last+1): for ch in range(aSize): anim = knob.animation(ch) if anim and not anim.noExpression(): k_data[ch].append((f, anim.evaluate(f))) # Only apply if we have data if any(k_data): # Filter out empty channels non_empty_data = [ch_data for ch_data in k_data if ch_data] if non_empty_data: set_anim_curve_from_data(knob, k_data) print(f" [calculate_corner_pin] Baking knobs completed in {time_module.time() - bake_start:.3f}s") with C2Tgroup: focal_knob.setExpression("[expression [value the_cam]focal([value the_frame])]") except Exception as e: print(f"Error in calculate_corner_pin: {e}") finally: _undo_enable() del task total_time = time_module.time() - start_time print(f" [calculate_corner_pin] Total time: {total_time:.3f}s") def calculate_translate(C2Tgroup,label): import time as time_module start_time = time_module.time() bg = C2Tgroup.input(0) first = int(C2Tgroup['FirstFrame_X_'+label].value()) last = int(C2Tgroup['LastFrame_X_'+label].value()) frame_count = last - first + 1 print(f" [calculate_translate] Processing {frame_count} frames ({first}-{last})") to1,to2,to3,to4 = C2Tgroup['to1_X_'+label], C2Tgroup['to2_X_'+label], C2Tgroup['to3_X_'+label], C2Tgroup['to4_X_'+label] task = nuke.ProgressTask("Calculating Translate") progress_step = 30 _undo_disable() try: translateT_knob = C2Tgroup['TranslateT_X_'+label] bg_width_half = bg.width() / 2 bg_height_half = bg.height() / 2 data_x, data_y = [], [] frames = range(first, last+1) read_start = time_module.time() for idx, f in enumerate(frames): if task.isCancelled(): break if idx % progress_step == 0: task.setMessage(f"Processing frame {f}") task.setProgress(int((idx / len(frames)) * 100)) t1 = to1.getValueAt(f); t2 = to2.getValueAt(f); t3 = to3.getValueAt(f); t4 = to4.getValueAt(f) avg_x = (t1[0]+t2[0]+t3[0]+t4[0])/4 - bg_width_half avg_y = (t1[1]+t2[1]+t3[1]+t4[1])/4 - bg_height_half data_x.append((f, avg_x)); data_y.append((f, avg_y)) print(f" [calculate_translate] Data collection completed in {time_module.time() - read_start:.3f}s") set_anim_curve_from_data(translateT_knob, [data_x, data_y]) C2Tgroup['centerT_X_'+label].setValue([bg.width()/2, bg.height()/2]) finally: _undo_enable() del task total_time = time_module.time() - start_time print(f" [calculate_translate] Total time: {total_time:.3f}s") def calculate_matrix(C2Tgroup,label): import time as time_module start_time = time_module.time() to1 = C2Tgroup['to1_X_'+label]; to2 = C2Tgroup['to2_X_'+label] to3 = C2Tgroup['to3_X_'+label]; to4 = C2Tgroup['to4_X_'+label] matrix = C2Tgroup['matrix_X_'+label] width = C2Tgroup.input(0).width() height = C2Tgroup.input(0).height() first = int(C2Tgroup['FirstFrame_X_'+label].value()) last = int(C2Tgroup['LastFrame_X_'+label].value()) frame_count = last - first + 1 print(f" [calculate_matrix] Processing {frame_count} frames ({first}-{last})") task = nuke.ProgressTask("Calculating Matrix") progress_step = 30 _undo_disable() try: matrix_data = [[] for _ in range(16)] projFrom = nuke.math.Matrix4() projFrom.mapUnitSquareToQuad(0, 0, width, 0, width, height, 0, height) projFromInv = projFrom.inverse() projTo = nuke.math.Matrix4() calc_start = time_module.time() frames = range(first, last+1) for idx, f in enumerate(frames): if task.isCancelled(): break if idx % progress_step == 0: task.setMessage(f"Matrix frame {f}") task.setProgress(int((idx / len(frames)) * 100)) t1 = to1.getValueAt(f); t2 = to2.getValueAt(f); t3 = to3.getValueAt(f); t4 = to4.getValueAt(f) projTo.mapUnitSquareToQuad(t1[0], t1[1], t2[0], t2[1], t3[0], t3[1], t4[0], t4[1]) resM = projTo * projFromInv resM.transpose() for i in range(16): matrix_data[i].append((f, resM[i])) print(f" [calculate_matrix] Matrix computation completed in {time_module.time() - calc_start:.3f}s") inject_start = time_module.time() set_anim_curve_from_data(matrix, matrix_data) print(f" [calculate_matrix] Animation injection completed in {time_module.time() - inject_start:.3f}s") finally: _undo_enable() del task total_time = time_module.time() - start_time print(f" [calculate_matrix] Total time: {total_time:.3f}s") # ------------------------------------------------------------------------------------- # OBJECT CREATION # ------------------------------------------------------------------------------------- def card_code(): _create_object_helper('Card') def corner_code(): _create_object_helper('CornerPin') def transform_code(): _create_object_helper('Transform') def roto_code(): _create_object_helper('Roto') def _create_object_helper(type): if type == 'Card': _card_impl() elif type == 'CornerPin': _cp_impl() elif type == 'Transform': _tr_impl() elif type == 'Roto': _roto_impl() def _card_impl(): import time as time_module start_time = time_module.time() panel = nuke.Panel("Choose your 3D object") panel.addEnumerationPulldown("objects:", "Card Axis Cube Sphere Cylinder Light TransformGeo Camera2") if panel.show(): object_3d = panel.value("objects:") if object_3d in ['Card','Camera']: object_3d += '2' C2Tgroup = nuke.thisNode() label = nuke.thisKnob().name().rpartition('_X_')[2] print(f"\n[CardToTrack] Creating 3D object '{object_3d}' for '{label}'...") x = C2Tgroup['xpos'].value(); y = C2Tgroup['ypos'].value() with nuke.Root(): x = offset_nodes(x,y) card = nuke.createNode(object_3d) card.setInput(0,None); card.setXYpos(int(x+110), int(y)) card.setName(panel.value("objects:")+"_"+label) knob = nuke.Text_Knob('card_to_track', ''); knob.setValue(C2Tgroup.name()+":card: "+label); card.addKnob(knob) if object_3d == 'Card2': card['image_aspect'].setValue(0) if C2Tgroup['Baked_X_'+label].value(): for k, src in [('translate','Translate'),('rotate','Rotate'),('scaling','Scale'),('uniform_scale','Uniform_scale')]: if C2Tgroup[src+'_X_'+label].isAnimated(): card[k].copyAnimations(C2Tgroup[src+'_X_'+label].animations()) else: card[k].setValue(C2Tgroup[src+'_X_'+label].value()) else: card['translate'].setExpression("parent."+C2Tgroup.name()+'.Translate_X_'+label) card['rotate'].setExpression("parent."+C2Tgroup.name()+'.Rotate_X_'+label) card['scaling'].setExpression("parent."+C2Tgroup.name()+'.Scale_X_'+label) card['uniform_scale'].setExpression("parent."+C2Tgroup.name()+'.Uniform_scale_X_'+label) card.showControlPanel() elapsed = time_module.time() - start_time print(f"[CardToTrack] 3D object creation completed in {elapsed:.3f} seconds") def _cp_impl(): import time as time_module start_time = time_module.time() C2Tgroup = nuke.thisNode() label = nuke.thisKnob().name().rpartition('_X_')[2] print(f"\n[CardToTrack] Creating CornerPin for '{label}'...") ref = int(C2Tgroup['ReferenceFrame_X_'+label].value()) x = C2Tgroup['xpos'].value(); y = C2Tgroup['ypos'].value() with nuke.Root(): x = offset_nodes(x,y) try: cp = nuke.nodes.NST_CProject2(xpos = x+110, ypos = y) cp.setName("CP_"+label); cp['refFrame'].setValue(ref); cp['label'].setValue("Matchmove\n"+str(ref)) cp['card_to_track'].setValue(C2Tgroup.name()+":cornerpin: "+label) except: cp = nuke.nodes.CornerPin2D(label=label, xpos=x+110, ypos=y) if C2Tgroup['Baked_X_'+label].value(): for i in range(1,5): cp[f'to{i}'].copyAnimations(C2Tgroup[f'to{i}_X_'+label].animations()) cp[f'from{i}'].setValue(C2Tgroup[f'to{i}_X_'+label].getValueAt(float(ref))) else: for i in range(1,5): cp[f'to{i}'].setExpression(f"parent.parent.{C2Tgroup.name()}.to{i}_X_{label}") cp[f'from{i}'].setValue(C2Tgroup[f'to{i}_X_'+label].getValueAt(ref)) cp.showControlPanel() elapsed = time_module.time() - start_time print(f"[CardToTrack] CornerPin creation completed in {elapsed:.3f} seconds") def _tr_impl(): import time as time_module start_time = time_module.time() C2Tgroup = nuke.thisNode() label = nuke.thisKnob().name().rpartition('_X_')[2] print(f"\n[CardToTrack] Creating Transform for '{label}'...") calc_start = time_module.time() calculate_translate(C2Tgroup, label) print(f" [_tr_impl] calculate_translate took {time_module.time() - calc_start:.3f}s") ref = str(int(C2Tgroup['ReferenceFrame_X_'+label].value())) x = C2Tgroup['xpos'].value(); y = C2Tgroup['ypos'].value() with nuke.Root(): x = offset_nodes(x,y) try: tr = nuke.nodes.NST_TProject2(xpos=x+110, ypos=y) tr.setName("TP_"+label); tr['label'].setValue("Matchmove\n"+ref) tr['card_to_track'].setValue(C2Tgroup.name()+":transform: "+label) except: tr = nuke.nodes.Transform(label=label, xpos=x+110, ypos=y) if C2Tgroup['Baked_X_'+label].value(): tr['translate'].copyAnimations(C2Tgroup['TranslateT_X_'+label].animations()) tr['center'].setValue(C2Tgroup['centerT_X_'+label].value()) else: tr['translate'].setExpression(f"parent.parent.{C2Tgroup.name()}.TranslateT_X_{label}") tr['center'].setExpression(f"parent.parent.{C2Tgroup.name()}.centerT_X_{label}") tr.showControlPanel() if 'setCurrentAsRefFrame' in tr.knobs(): tr['setCurrentAsRefFrame'].execute() elapsed = time_module.time() - start_time print(f"[CardToTrack] Transform creation completed in {elapsed:.3f} seconds") def _roto_impl(): import time as time_module start_time = time_module.time() message = '''Looks like Nuke does not support linking of the transformation matrix in roto nodes - please bake instead. Since we are able to recalculate nodes if camera is updated - i will generally recommend to bake and not to link nodes while using CardToTrack.''' C2Tgroup = nuke.thisNode() label = nuke.thisKnob().name().rpartition('_X_')[2] ask = C2Tgroup['Baked_X_'+label].value() if ask: print(f"\n[CardToTrack] Creating Roto for '{label}'...") ref = C2Tgroup['ReferenceFrame_X_'+label].value() x = C2Tgroup['xpos'].value() y = C2Tgroup['ypos'].value() first = C2Tgroup['FirstFrame_X_'+label].value() last = C2Tgroup['LastFrame_X_'+label].value() to1 = C2Tgroup['to1_X_'+label] to2 = C2Tgroup['to2_X_'+label] to3 = C2Tgroup['to3_X_'+label] to4 = C2Tgroup['to4_X_'+label] matrix = C2Tgroup['matrix_X_'+label] # CRITICAL: Must set animated before calculating matrix matrix.setAnimated() calc_start = time_module.time() calculate_matrix(C2Tgroup, label) print(f" [_roto_impl] calculate_matrix took {time_module.time() - calc_start:.3f}s") # Create roto node and copy animation from matrix to roto root matrix with nuke.Root(): panel = nuke.Panel("Roto or RotoPaint") panel.addEnumerationPulldown("Roto Type:", "Roto RotoPaint") if panel.show(): rototype = panel.value("Roto Type:") x = offset_nodes(x, y) if rototype == "Roto": roto = nuke.nodes.Roto(xpos=x+110, ypos=y) else: roto = nuke.nodes.RotoPaint(xpos=x+110, ypos=y) roto.setName(roto['name'].value().replace('Roto', 'R')+"_"+label) roto['cliptype'].setValue("no clip") nuke.show(roto) knob = nuke.Text_Knob('card_to_track', '') knob.setValue(C2Tgroup.name()+":roto: "+label) roto.addKnob(knob) # Copy matrix animation to roto roto['transform_matrix'].copyAnimations(C2Tgroup['matrix_X_'+label].animations()) roto['curves'].changed() # Apply format to the roto node group_format = C2Tgroup.format() name = group_format.name() if name: roto['format'].setValue(name) else: width = str(group_format.width()) height = str(group_format.height()) aspect = str(group_format.pixelAspect()) name = "temp_"+width+"x"+height new_format = width+" "+height+" "+aspect+" "+name nuke.addFormat(new_format) roto['format'].setValue(name) elapsed = time_module.time() - start_time print(f"[CardToTrack] Roto creation completed in {elapsed:.3f} seconds") else: nuke.message(message) def object_only(): C2Tgroup=nuke.thisGroup() t = C2Tgroup['translate'].value(); r = C2Tgroup['rotate'].value() s = C2Tgroup['scaling'].value(); u = C2Tgroup['uniform_scale'].value() panel = nuke.Panel("object") panel.addSingleLineInput("Object Name:","") panel.addEnumerationPulldown("objects:", "Card Axis Cube Sphere Cylinder Light TransformGeo Camera") if panel.show(): ob = panel.value("objects:"); name = panel.value("Object Name:") obj = nuke.createNode(ob); x = C2Tgroup['xpos'].value(); y = C2Tgroup['ypos'].value() obj.setInput(0,None); obj['xpos'].setValue(int(x)); obj['ypos'].setValue(int(y+100)) obj['translate'].setValue(t); obj['rotate'].setValue(r) obj['scaling'].setValue(s); obj['uniform_scale'].setValue(u) obj.setName(name) # ------------------------------------------------------------------------------------- # CProject and TProject Functions # ------------------------------------------------------------------------------------- def set_ref_frame_cp(frame, node): ''' Set reference frame for corner pin node (CProject/TProject) ''' ntn = nuke.thisNode() if node == 'cornerpin': set_to_input_label_toggle(ntn, unset=True) for one in range(1, 5): ntn['from'+str(one)].setValue(ntn['to'+str(one)].valueAt(frame)) elif node == 'translate': with ntn: pall = nuke.toNode("refPall") papa = nuke.toNode("Transform1") pall['disable'].setValue(False) knobs = ["translate", "rotate", "scale", "center"] for one in knobs: pall[one].setValue(papa[one].value()) ntn['label'].setValue(ntn['mode_toggle'].label().rpartition(">")[2]+"\n"+str(frame)) ntn['refFrame'].setValue(frame) with ntn: nuke.toNode("FHold")['first_frame'].setValue(frame) stored = [] def recurseUpSelect(node): ''' Recursively select upstream nodes ''' global stored if node != None and node not in stored: for i in range(node.inputs()): recurseUpSelect(node.input(i)) stored.append(node.input(i)) return stored def toggle_matchmove_stabilise(node): ''' Toggle matchmove vs stabilise in CProject or TProject ''' ntn = nuke.thisNode() ntk = nuke.thisKnob() ref_frame = str(int(ntn['refFrame'].value())) lab = ntk.label() mm = "

    Matchmove" stab = "

    Stabilize" if lab == mm: ntk.setLabel(stab) ntn['invert'].setValue(True) ntn['tile_color'].setValue(1834205695) if node == 'translate': ntn['label'].setValue("Stabilize\n"+ref_frame) with ntn: nuke.toNode('refPall')['disable'].setValue(False) else: if ntn['set_to_input_1'].label() == "

    Set To Input": ntn['label'].setValue("Stabilize\ninput") else: ntn['label'].setValue("Stabilize\n"+ref_frame) elif lab == stab: ntk.setLabel(mm) ntn['invert'].setValue(False) ntn['tile_color'].setValue(2051246591) if node == 'translate': ntn['label'].setValue("Matchmove\n"+ref_frame) with ntn: nuke.toNode('refPall')['disable'].setValue(True) else: if ntn['set_to_input_1'].label() == "

    Set To Input": ntn['label'].setValue("Matchmove\ninput") else: ntn['label'].setValue("Matchmove\n"+ref_frame) if node != 'translate': # Auto toggle for second CProject to check input/output aspect checkboxes global stored stored = [] upstreamNodes = recurseUpSelect(ntn.input(0)) for one in upstreamNodes: if one: if 'card_to_track' in one.knobs(): image_aspect = one['image_aspect'].value() image_aspect_out = one['image_aspect_out'].value() if image_aspect_out: ntn['image_aspect'].setValue(True) ntn['image_aspect_out'].setValue(False) break elif image_aspect: ntn['image_aspect_out'].setValue(True) ntn['image_aspect'].setValue(False) break else: ntn['image_aspect_out'].setValue(False) ntn['image_aspect'].setValue(False) break else: ntn['image_aspect_out'].setValue(False) ntn['image_aspect'].setValue(False) def set_to_input_label_toggle(ntn, unset): ''' Toggle the set-to-input label state ''' ntk = ntn['set_to_input_1'] lab = ntk.label() input_set = "

    Set To Input" ref_frame_set = "Set To Input" if unset: ntk.setLabel(ref_frame_set) return if lab == input_set: ntk.setLabel(ref_frame_set) else: ntk.setLabel(input_set) def set_to_input_cp(): ''' Set 'From' values of the Corner pin to the input footage canvas. ''' ntn = nuke.thisNode() set_to_input_label_toggle(ntn, unset=False) with ntn: nuke.toNode("CornerPin2D2")["set_to_input"].execute() ntn['label'].setValue(ntn['mode_toggle'].label().rpartition(">")[2]+"\ninput") def knob_changed_cp(): ''' Handle knob changes in CProject/TProject nodes ''' nn = nuke.thisNode() k = nuke.thisKnob() kn = k.name() if kn == "cropP": if nn['cropP'].value() in ["Hard Crop"]: nn["growBbox"].setVisible(False) nn["text"].setValue("Image is cropped to Input, Concatenation preserved.") elif nn['cropP'].value() in ["Adjustable Crop"]: nn["growBbox"].setVisible(True) nn["text"].setValue("Adjust your Bbox , Downward Concatenation is broken.") elif nn['cropP'].value() in ["No Crop"]: nn["growBbox"].setVisible(False) nn["text"].setValue("No Crop applied, Concatenation preserved.") ================================================ FILE: NukeSurvivalToolkit/python/NST_helper.py ================================================ ############################################################################################## # NST helper utilities: # - Fixes file paths on created nodes that contain the <<>> token. # - Handles Documentation menu behavior (Auto, Online, Offline, PDF). # - Applies docs fallback order: Online -> Offline -> PDF with clear user messages. import functools import http.server import nuke import nukescripts import socketserver import ssl import threading import urllib.error import urllib.request import webbrowser from pathlib import Path ############################################################################################## # Use Path.as_posix() to ensure forward slashes on all platforms (fixes Windows path issues) NST_FolderPath = Path(__file__).parent.parent.as_posix() # Defining a function to replace filepaths on tools importing files on creation def filepathCreateNode(gizmoName): if '.nk' in gizmoName: nukescripts.clear_selection_recursive() nuke.nodePaste(gizmoName) fileNodes = nuke.selectedNodes() else: newGizmo = nuke.createNode(gizmoName) fileNodes = newGizmo.nodes() for i in fileNodes: if i.Class() in ("Read", "DeepRead", "ReadGeo", "ReadGeo2", "Camera2", "Axis2"): filepath = i.knob("file").getValue() if "<<>>" in filepath: newFilepath = filepath.replace("<<>>", NST_FolderPath) i.knob("file").setValue(newFilepath) ############################################################################################## ############################################################################################## ### Documentation configuration # Values are configured in menu.py and assigned onto this module: # - NST_DOCS_ONLINE_URL # - NST_DOCS_ONLINE_TIMEOUT_SECONDS # - NST_DOCS_PDF_NAME # - NST_DOCS_OFFLINE_INDEX ############################################################################################## ############################################################################################## # Section to Handle Documentation Logic: Online -> Offline -> PDF def _toolkit_root(): return Path(NST_FolderPath) def find_offline_index(): # Offline wiki is installed in one canonical location. # Checking if it's available. doc_path = _toolkit_root() / NST_DOCS_OFFLINE_INDEX if doc_path.is_file(): return doc_path return None def find_pdf_doc(): # PDF path is explicit; when docs release changes, update NST_DOCS_PDF_NAME. # Checking if it's available. pdf_path = _toolkit_root() / NST_DOCS_PDF_NAME if pdf_path.is_file(): return pdf_path return None # Local HTTP server for offline MkDocs (Material search / workers do not work reliably on file://). _httpd = None _httpd_thread = None _served_root = None class _ReusableThreadingTCPServer(socketserver.ThreadingTCPServer): allow_reuse_address = True class _QuietStaticHTTPRequestHandler(http.server.SimpleHTTPRequestHandler): """Same as SimpleHTTPRequestHandler but does not print one line per request to stderr.""" def log_message(self, format, *args): pass def _shutdown_offline_http_server(): """Stop the background http.server if it was started.""" global _httpd, _httpd_thread, _served_root if _httpd is None: return httpd = _httpd thread = _httpd_thread _httpd = None _httpd_thread = None _served_root = None try: httpd.shutdown() except Exception: pass if thread is not None and thread.is_alive(): thread.join(timeout=2.0) def _ensure_local_http_server(root): """Serve root on 127.0.0.1 with an ephemeral port; reuse if already serving same path.""" global _httpd, _httpd_thread, _served_root root = Path(root).resolve() if ( _httpd is not None and _httpd_thread is not None and _httpd_thread.is_alive() and _served_root == root ): return _httpd.server_address[1] _shutdown_offline_http_server() handler = functools.partial(_QuietStaticHTTPRequestHandler, directory=str(root)) _httpd_local = _ReusableThreadingTCPServer(("127.0.0.1", 0), handler) thread = threading.Thread(target=_httpd_local.serve_forever, daemon=True) thread.start() _httpd = _httpd_local _httpd_thread = thread _served_root = root return _httpd.server_address[1] def _open_url_in_browser_async(url): """ Open the system browser without blocking Nuke's main thread. webbrowser.open can stall the UI while the OS launches or hands off to the browser. """ def _run(): try: webbrowser.open(url) except Exception: pass threading.Thread(target=_run, daemon=True).start() def _open_offline_index_in_browser(offline_index): """ Open offline wiki in the default browser. Prefer http://127.0.0.1 so MkDocs search works; fall back to file:// if the local server cannot start. """ try: port = _ensure_local_http_server(offline_index.parent) _open_url_in_browser_async(f"http://127.0.0.1:{port}/") except Exception: _open_url_in_browser_async(offline_index.as_uri()) def is_online_wiki_reachable(timeout=None): if timeout is None: timeout = globals().get("NST_DOCS_ONLINE_TIMEOUT_SECONDS", 1.5) # Short preflight check prevents dead-clicks when the site is blocked/unreachable. # Some environments/proxies reject HEAD while allowing GET, so always fall back to GET # before returning False. # If Python's SSL trust store cannot validate certs, treat as reachable and let the # user's browser handle HTTPS trust (avoids false PDF fallback in Nuke environments). for method in ("HEAD", "GET"): request = urllib.request.Request( NST_DOCS_ONLINE_URL, headers={"User-Agent": "NukeSurvivalToolkit"}, method=method, ) try: with urllib.request.urlopen(request, timeout=timeout): return True except urllib.error.HTTPError: if method == "HEAD": continue return False except urllib.error.URLError as error: if isinstance(getattr(error, "reason", None), ssl.SSLCertVerificationError): return True if method == "HEAD": continue return False except ValueError: if method == "HEAD": continue return False return False def openNSTDocumentationDefault(): # Auto fallback order: Online -> Offline -> PDF # Note: this runs HTTPS reachability checks first (can block up to ~timeout per attempt). # Use "Wiki (Offline)" when you have no network to skip that step. if is_online_wiki_reachable(): webbrowser.open(NST_DOCS_ONLINE_URL) return offline_index = find_offline_index() if offline_index: _open_offline_index_in_browser(offline_index) return pdf_doc = find_pdf_doc() if pdf_doc: webbrowser.open(pdf_doc.as_uri()) return nuke.message( "No documentation source was found.\n" "Use 'Wiki (Online)', or unzip NST_Documentation_Release_x.y.z.zip into " "NukeSurvivalToolkit/NST_Documentation, or place a documentation PDF in the toolkit root." ) def openNSTDocumentationOnline(): # Online command stays direct: no fallback, just clear guidance if unreachable. if is_online_wiki_reachable(): webbrowser.open(NST_DOCS_ONLINE_URL) return nuke.message( "Online wiki is not reachable right now.\n" "Try 'Wiki (Offline)' or 'Docs (PDF)'." ) def openNSTDocumentationOffline(): # Offline command opens canonical local index only. offline_index = find_offline_index() if offline_index: _open_offline_index_in_browser(offline_index) return nuke.message( "Offline wiki not found.\n" "Unzip NST_Documentation_Release_x.y.z.zip into NukeSurvivalToolkit so " "NST_Documentation/index.html exists." ) def openNSTDocumentationPDF(): # PDF command opens one explicit release PDF path. pdf_doc = find_pdf_doc() if pdf_doc: webbrowser.open(pdf_doc.as_uri()) return nuke.message( "Documentation PDF not found in toolkit root.\n" "Try 'Wiki (Online)' or install the optional offline docs release ZIP." ) ############################################################################################## ================================================ FILE: NukeSurvivalToolkit/python/NST_stickit.py ================================================ # stickit.py # Copyright (c) 2017 Mads Hagbarth Damsbo. All Rights Reserved. # Not for redistribution. import nuke import nuke.splinewarp as sw import string #This is used by the code. Include! import math import struct import time ''' REAL TODO: General Feedback: In regards to assist its hard to figure if something have been sucessfully been applied or not. This could be fixed by making a green label with "Roto Node Assisted", then fade to grey using a timer. MUST HAVE: -Hook up the "Output" options to their respective nodes in that regard remove the "hide source" option -Check the buttons in the buttom of the advanced tab and remove the ones that we no longer need. -Test the heck out of different formats and what not to enure that we don't get bounding issues. -option to invert input mask! -The ST map should source its X and Y from the Source image, not the overlay image! --Add a option to only source the alpha from the Overlay (so that if the source have a alpha it won't carry through.) Add another ST frame offset for calculating center motionblur. (or should it be hacked using offset?) NICE TO HAVE: Add a button for the ref frame called "Current Frame" Add a status that show if the shot have been tracked and solved (solve range aswell). This should also highlight if the "Disable Warp" have been toggeled Add some Analyze/Tracking presets (ie; Full Frame, Medium Object, Small Object) Add a button that generates a ST-Map node and a vectorblur node outside the node. (Create ST Setup) DONE +Make sure that the ST map matches. (check again!) FOR CONSIDERATION: Consider a workflow to work with fully obscured regions (guides maybe) Post filter that takes all the keyframes created and does eighter smoothing or reduces the number of keyframes to the bare minimum (based on a threshold) Calculate the length of the vector Devide each axis by the length to get a normalized vector First do a check to ensure that the vector is shorter than the threshold Then comput a direction that is the averaged normalized vector from the frames that we inspect If the computed direction is within the threshhold then... one thing that there is to consider is that you may want to not write down the keyframes first. for example in a roto or rotopaint workflow, it might be smart to gther the keyframes, filter, then apply them to the spline. Save the animation curve. Add a interpolate range feature. -You set the in and out point. -You hit interpolate (it will do a linear interpolation between the points) -Now the user can retrack forward ''' ''' #Todo: -Get all points from the CameraTracker and put them into a list -Create a initial set of points, this could be all points on a certain frame or a general set of points. If we take from a certain frame we need to get a list of all points that are on the specified frame -For every source object we put in a single value that is the XY pos of the object in the specified frame -For every target object we triangulate the nearby points and get a new position, we do that for all the frames in the framerange specified. -For every target object we bake animation calculated in the step above Remember that we must save the new calculated position into a new list or modify the exsisting to get perfect results ''' '''================================================================================ ; Function: CreateWarpPinPair(myNode): ; Description: Create a Splinewarp pin pair. ; Parameter(s): node - The node create pin in ; Return(s): Returns a pair of pin objects (_curveknob.Stroke objects) [source,target] ; specified - Only take knobs with this tag (like "UserTrack" from a cameratracker) ; Note(s): N/A ;==================================================================================''' def CreateWarpPinPair(myNode,pointlist,refframe): ItemX = pointlist #First we want to clear the current splinewarp. #As there is no build-in function to do this, we just purge it with default data warpCurve = myNode['curves'] warpRoot = warpCurve.rootLayer Header = """AddMode 0 0 1 0 {{v x3f99999a} {f 0} {n {layer Root {f 0} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0}}}} """ warpCurve.fromScript(Header) warpCurve.changed() #As we just cleared the curves knob we need to re-fetch it. #If we don't do this Nuke will crash in some cases. #This should be reported to TheFoundry. warpCurve = myNode['curves'] warpRoot = warpCurve.rootLayer #We start off by creating all the pins that we need. #We do this in 2 steps. First we create the src then the dst for i in range(0, len(ItemX)): PinSource = sw.Shape(warpCurve, type="bezier") #single point distortion newpoint = sw.ShapeControlPoint() #create point ConvertedX = float(pointlist[i][int(refframe-float(pointlist[i][0][0]))][1]) ConvertedY = float(pointlist[i][int(refframe-float(pointlist[i][0][0]))][2]) newpoint.center = (ConvertedX,ConvertedY) #set center position newpoint.leftTangent = (0,0) #set left tangent relative to center newpoint.rightTangent = (0,0) #set right tangent relative to center PinSource.append(newpoint) #add point to shape PinTarget = sw.Shape(warpCurve, type="bezier") #single point distortion newpointB = sw.ShapeControlPoint() #create point newpointB.center = (ConvertedX,ConvertedY) #set center position newpointB.leftTangent = (0,0) #set left tangent relative to center newpointB.rightTangent = (0,0) #set right tangent relative to center PinTarget.append(newpointB) #add point to shape warpRoot.append(PinSource) #add to the rootLayer warpRoot.append(PinTarget) #add to the rootLayer warpCurve.defaultJoin(PinSource,PinTarget) warpCurve.changed() #Update the curve PinSource.getTransform().getTranslationAnimCurve(0).removeAllKeys() PinSource.getTransform().getTranslationAnimCurve(1).removeAllKeys() PinTarget.getTransform().getTranslationAnimCurve(0).removeAllKeys() PinTarget.getTransform().getTranslationAnimCurve(1).removeAllKeys() PinSource.getTransform().addTranslationKey(refframe,0,0,100.0) for ix in range(0, len(pointlist[i])): PinTarget.getTransform().getTranslationAnimCurve(0).addKey(pointlist[i][ix][0],float(pointlist[i][ix][1])-float(pointlist[i][int(refframe-float(pointlist[i][0][0]))][1])) PinTarget.getTransform().getTranslationAnimCurve(1).addKey(pointlist[i][ix][0],float(pointlist[i][ix][2])-float(pointlist[i][int(refframe-float(pointlist[i][0][0]))][2])) #print pointlist[i][ix][0] warpCurve.changed() #Update the curve CurrentData = warpCurve.toScript().replace('{f 8192}','{f 8224}') #Convert to splinewarp pins warpCurve.fromScript(CurrentData) '''================================================================================ ; Function: ExportCameraTrack(myNode): ; Description: Extracts all 2D Tracking Featrures from a 3D CameraTracker node (not usertracks). ; Parameter(s): myNode - A CameraTracker node containing tracking features ; Return: Output - A list of points formated [ [[Frame,X,Y][...]] [[...][...]] ] ; ; Note(s): N/A ;==================================================================================''' def ExportCameraTrack(myNode): myKnob = myNode.knob("serializeKnob") myLines = myKnob.toScript() DataItems = string.split(myLines, '\n') Output = [] for index,line in enumerate(DataItems): tempSplit = string.split(line, ' ') if (len(tempSplit) > 4 and tempSplit[ len(tempSplit)-1] == "10") or (len(tempSplit) > 6 and tempSplit[len(tempSplit)-1] == "10"): #Header #The first object always have 2 unknown ints, lets just fix it the easy way by offsetting by 2 if len(tempSplit) > 6 and tempSplit[6] == "10": offsetKey = 2 offsetItem = 0 else: offsetKey = 0 offsetItem = 0 #For some wierd reason the header is located at the first index after the first item. So we go one step down and look for the header data. itemHeader = DataItems[index+1] itemHeadersplit = string.split(itemHeader, ' ') itemHeader_UniqueID = itemHeadersplit[1] #So this one is rather wierd but after a certain ammount of items the structure will change again. backofs = 0 lastofs = 0 firstOffset = 0 secondOffset = 0 secondItem = DataItems[index+2] secondSplit = string.split(secondItem, ' ') if len(secondSplit) == 7: firstOffset = 0 if len(itemHeadersplit) == 3: itemHeader = DataItems[index+2] itemHeadersplit = string.split(itemHeader, ' ') offsetKey = 2 offsetItem = 2 if len(secondSplit) == 11: firstOffset = 1 #In this case the 2nd item will be +1 backofs = 1 elif len(secondSplit) == 7: firstOffset = 1 else: firstOffset = 0 #In this case the 2nd item will be +0 itemHeader_FirstItem = itemHeadersplit[3+offsetItem] itemHeader_NumberOfKeys = itemHeadersplit[4+offsetKey] #Here we extract the individual XY coordinates PositionList =[] PositionList.append([LastFrame+(0),float(string.split(DataItems[index+0], ' ')[2]) ,float(string.split(DataItems[index+0], ' ')[3])]) for x in range(2,int(itemHeader_NumberOfKeys)+1): if len(string.split(DataItems[index+x+firstOffset-1], ' '))>7 and len(string.split(DataItems[index+x+firstOffset-1], ' '))<10 and int(string.split(DataItems[index+x+firstOffset-1], ' ')[5]) > 0: Offset = int(string.split(DataItems[index+x+firstOffset-1], ' ')[7]) PositionList.append([LastFrame+(x-1),float(string.split(DataItems[Offset+1], ' ')[2]) ,float(string.split(DataItems[Offset+1], ' ')[3])]) secondOffset = 1 else: if x==(int(itemHeader_NumberOfKeys)) and backofs == 1: PositionList.append([LastFrame+(x-1),float(string.split(DataItems[int(lastofs)], ' ')[2] ) ,float(string.split(DataItems[int(lastofs)], ' ')[3])]) else: PositionList.append([LastFrame+(x-1),float(string.split(DataItems[index+x+firstOffset-secondOffset], ' ')[2] ) ,float(string.split(DataItems[index+x+firstOffset-secondOffset], ' ')[3])]) if len(string.split(DataItems[index+x+firstOffset+secondOffset], ' ')) > 5 and len(string.split(DataItems[index+x+firstOffset+secondOffset], ' ')) < 16: lastofs = str(string.split(DataItems[index+x+firstOffset+secondOffset], ' ')[5]) else: lastofs = index+x+1 Output.append(PositionList) elif (len(tempSplit) > 8 and tempSplit[1] == "0" and tempSplit[2] == "1"): LastFrame = int(tempSplit[3]) else: #Content pass return Output '''================================================================================ ; Function: GetAnimtionList(myList,myFrame): ; Description: Returns a list of points that contain animation between myFrame and the following frame ; Parameter(s): myList - A list of points formated [ [[Frame,X,Y][...]] [[...][...]] ] myFrame - The frame to take into consideration ; Return: Output - A list of points formated [ [[Frame,X,Y][...]] [[...][...]] ] ; ; Note(s): N/A ;==================================================================================''' def GetAnimtionList(myList,nestedPoints,myFrame,_rev=False,_ofs=False): Output = [] thisFrame = int(myFrame) try: if _rev: #This will reverse the output for i,item in enumerate(nestedPoints[thisFrame]): if nestedPoints[thisFrame][i][4]>thisFrame: outThisframe = myList[nestedPoints[thisFrame][i][2]][(thisFrame-nestedPoints[thisFrame][i][3])] outNextframe = myList[nestedPoints[thisFrame][i][2]][(thisFrame-nestedPoints[thisFrame][i][3])+1] Output.append([outNextframe,outThisframe]) elif _ofs: #This is a temporary fix to the strange offset bug for i,item in enumerate(nestedPoints[thisFrame]): if nestedPoints[thisFrame][i][4]>thisFrame: outThisframe = myList[nestedPoints[thisFrame][i][2]][(thisFrame-nestedPoints[thisFrame][i][3])] outNextframe = myList[nestedPoints[thisFrame][i][2]][(thisFrame-nestedPoints[thisFrame][i][3])+1] outThisframe = [outThisframe[0],outThisframe[1]+1,outThisframe[2]+0.01] outNextframe = [outNextframe[0],outNextframe[1]+1,outNextframe[2]+0.01] Output.append([outNextframe,outThisframe]) else: for i,item in enumerate(nestedPoints[thisFrame]): if nestedPoints[thisFrame][i][4]>thisFrame: outThisframe = myList[nestedPoints[thisFrame][i][2]][(thisFrame-nestedPoints[thisFrame][i][3])] outNextframe = myList[nestedPoints[thisFrame][i][2]][(thisFrame-nestedPoints[thisFrame][i][3])+1] Output.append([outThisframe,outNextframe]) except: pass #No points on this frame! return Output '''================================================================================ ; Function: GetNearestPoints(myList,myFrame): ; Note(s): N/A ;==================================================================================''' def GetNearestPoints(refpoint,pointList,_rev=False): if len(pointList) < 3: xOffset = 0.0 yOffset = 0.0 else: #Distance Calculation x1 = refpoint[1] y1 = refpoint[2] distancelist = [] #Check if there is more than 3 points at the current frame. for item in pointList: #Does it read from the same frame or a new one? #print item x2 = item[0][1] y2 = item[0][2] dist = math.hypot(x2-x1, y2-y1) distancelist.append(dist+1) sorted_lookup = sorted(enumerate(distancelist), key=lambda i:i[1]) index0 = sorted_lookup[0][0] index1 = sorted_lookup[1][0] index2 = sorted_lookup[2][0] perc0 = 1 / (sorted_lookup[0][1]) perc1 = 1 / (sorted_lookup[1][1]) perc2 = 1 / (sorted_lookup[2][1]) if perc0 == 1: perc1 = 0 perc2 = 0 perctotal = perc0+perc1+perc2 Percent0 = perc0 if perctotal == 0 else perc0 / (perctotal) Percent1 = perc1 if perctotal == 0 else perc1 / (perctotal) Percent2 = perc2 if perctotal == 0 else perc2 / (perctotal) x02 = pointList[index0][1][1] y02 = pointList[index0][1][2] x12 = pointList[index1][1][1] y12 = pointList[index1][1][2] x22 = pointList[index2][1][1] y22 = pointList[index2][1][2] x01 = pointList[index0][0][1] y01 = pointList[index0][0][2] x11 = pointList[index1][0][1] y11 = pointList[index1][0][2] x21 = pointList[index2][0][1] y21 = pointList[index2][0][2] xOffset = (((x02-x01) * Percent0) + (( x12-x11) * Percent1) + (( x22-x21) * Percent2)) yOffset = (((y02-y01) * Percent0) + (( y12-y11) * Percent1) + ((y22-y21) * Percent2)) return [xOffset, yOffset] def GrabListData(): Node = nuke.toNode("si_ct") #change this to your tracker node! #01: Get all points from the cameratracker node. _return = ExportCameraTrack(Node) #02: To optimize the lookups we index all the data into frame lists containing [x,y,index,firstframe,lastframe] # this will give a 40+ times performence boost. item_dict = {} for list_index, big_lst in enumerate(_return): for lst in big_lst: if lst[0] in item_dict: item_dict[lst[0]] += [lst[1:]+[list_index]+[_return[list_index][0][0], _return[list_index][len(_return[list_index])-1][0]],] # Append else: item_dict[lst[0]] = [lst[1:]+[list_index]+[_return[list_index][0][0], _return[list_index][len(_return[list_index])-1][0]],] # Initialize return [_return,item_dict] '''================================================================================ Simple median. ;==================================================================================''' def median(lst): sortedLst = sorted(lst) lstLen = len(lst) index = (lstLen - 1) // 2 if (lstLen % 2): return sortedLst[index] else: return (sortedLst[index] + sortedLst[index + 1])/2.0 '''================================================================================ RangeKeeper, use to store and calculate frame ranges. ;==================================================================================''' class rangeKeeper(): def __init__(self,_type): self.frameForRef = 0 self.StartFrame = 0 self.EndFrame = 0 self.type = _type self.appendAnimation = False self.initvalues() def initvalues(self): self.appendAnimation = nuke.thisNode().knob("appendAnimation").value() if nuke.thisNode().knob("assistStep").value(): #We only run "x" number of frames _thisFrame = nuke.frame() _startFrame = _thisFrame - int(nuke.thisNode().knob("AssistStepSize").value()) _endFrame = _thisFrame + int(nuke.thisNode().knob("AssistStepSize").value()) else: #We run the full range _thisFrame = nuke.frame() _startFrame = int(nuke.thisNode().knob("InputFrom").value()) _endFrame = int(nuke.thisNode().knob("InputTo").value()) if self.type == 0: #Both Ways self.frameForRef = _thisFrame self.StartFrame = _startFrame self.EndFrame = _endFrame elif self.type == 1: #Only forward self.frameForRef = _thisFrame self.StartFrame = _thisFrame self.EndFrame = _endFrame elif self.type == 2: #Only Backwards self.frameForRef = _thisFrame self.StartFrame = _startFrame self.EndFrame = _thisFrame '''================================================================================ ; Function: KeyframeReducer(): ; Description: Removes unwanted keyframes based on a threshold ; ; Note(s): _method #0 = Local, 1 = Median, 2 = Average ;==================================================================================''' def KeyframeReducer(knob): myKnob = knob threshold = 1.5 firstFrame = 1 lastFrame = 99 reduce = False for frame in range(firstFrame,lastFrame): xd = myKnob.getValueAt(frame)[0]-myKnob.getValueAt(frame+1)[0] yd = myKnob.getValueAt(frame)[1]-myKnob.getValueAt(frame+1)[1] delta = math.sqrt(xd*xd+yd*yd) if delta < threshold: if reduce: print ("Reduce this",frame) if myKnob.isAnimated(): myKnob.removeKeyAt(frame) else: print (help(myKnob.setValueAt)) #myKnob.removeKeyAt(frame) #myKnob.setValueAt(myKnob.getValueAt(frame)[0],frame,0) #myKnob.setValueAt(myKnob.getValueAt(frame)[1],frame,1) reduce = True print (frame, delta) else: reduce = False '''================================================================================ ; Function: Solve2DTransform(): ; Description: Used to solve the trackers in a 2dtracker node. ; ; Note(s): _method #0 = Local, 1 = Median, 2 = Average ;==================================================================================''' def CalculatePositionDelta(_method,_refpointList,temp_pos=[0,0]): if _method == 0: #If we use local interpolation newOffset = GetNearestPoints([0,temp_pos[0],temp_pos[1]],_refpointList) _x3 = newOffset[0] _y3 = newOffset[1] elif _method == 1: #If we use global median interpolation xlist = [] #Init the lists ylist = [] for items in _refpointList: xlist.append(float(items[1][1])-float(items[0][1])) #Add the motion delta to the list ylist.append(float(items[1][2])-float(items[0][2])) _x3 = median(xlist) #Calculate median _y3 = median(ylist) else: #If we use global average interpolcation _x3 = 0 #Init the value _y3 = 0 for items in _refpointList: _x3 += float(items[1][1])-float(items[0][1]) #Calculate motion delta _y3 += float(items[1][2])-float(items[0][2]) _x3 = _x3/(len(_refpointList)+0.00001) #Devide by item cound to get average _y3 = _y3/(len(_refpointList)+0.00001) return [_x3,_y3] ''' thisFrame = nuke.frame() myNode =nuke.toNode("Transform15") myKnob = myNode["translate"] animationsX = myKnob.animation(0) #X-axis animations animationsY = myKnob.animation(1) #Y-axis animations animationList = [] #List to contain the animationnlist preProcessList = [] postProcessList = [] for x,keys in enumerate(animationsX.keys()): if keys.x=0 and useExsistingKeyframes: if frame == preProcessList[frameindex][0]: tempX = preProcessList[frameindex][1] tempY = preProcessList[frameindex][2] print ("Reached keyframe",preProcessList[frameindex][0],preProcessList[frameindex][1],preProcessList[frameindex][2]) print ("Dif:", tempX-(temp_pos[0]-center_pos[0]),tempY-(temp_pos[1]-center_pos[1])) frameindex -= 1 #------------------------- #Resolve forwards [----->] temp_pos = init_pos for frame in range(frameForRef,EndFrame): RefPointList = GetAnimtionList(PointData[0],PointData[1],frame) _xy = CalculatePositionDelta(solve_method,RefPointList,temp_pos) temp_pos = [temp_pos[0]+_xy[0],temp_pos[1]+_xy[1]] #Add our calculated motion delta to the current position myKnob.setValueAt(temp_pos[0]-center_pos[0],frame+1,0) myKnob.setValueAt(temp_pos[1]-center_pos[1],frame+1,1) '''================================================================================ ; Function: SolveCornerpin(): ; Description: Used to solve the points of a cornerpin ; ; Note(s): N/A ;==================================================================================''' def SolveCornerpin(_node): #Define Variables solve_method = int(nuke.thisNode().knob("AssistType").getValue()) #0 = Local, 1 = Median, 2 = Average frameForRef = nuke.frame() StartFrame = int(nuke.thisNode().knob("InputFrom").value()) EndFrame = int(nuke.thisNode().knob("InputTo").value()) myNode = _node myKnob = myNode.knob("translate") myKnobCenter = myNode.knob("center") #Set some initial defaults init_pos = [0,0] center_pos = [0,0] temp_pos = [0,0] _xy = [0,0] #Read data from the knobs knobs = [myNode['to1'],myNode['to2'],myNode['to3'],myNode['to4']] RefPointList = [] for myKnob in knobs: init_pos = myKnob.getValue() RefPointList.append([init_pos,myKnob]) myKnob.clearAnimated() #Only if overwrite!! myKnob.setAnimated(0) myKnob.setAnimated(1) myKnob.setValueAt(init_pos[0],frameForRef,0) myKnob.setValueAt(init_pos[1],frameForRef,1) PointData = GrabListData() for item in RefPointList: temp_pos = item[0] myKnob = item[1] #-------------------------- #Resolve backwards [<-----] for frame in reversed(range(StartFrame,frameForRef)): RefPointList = GetAnimtionList(PointData[0],PointData[1],frame,True) _xy = CalculatePositionDelta(solve_method,RefPointList,temp_pos) temp_pos = [temp_pos[0]+_xy[0],temp_pos[1]+_xy[1]] #Add our calculated motion delta to the current position myKnob.setValueAt(temp_pos[0]-center_pos[0],frame,0) #Add a keyframe with the values myKnob.setValueAt(temp_pos[1]-center_pos[1],frame,1) #------------------------- #Resolve forwards [----->] temp_pos = item[0] for frame in range(frameForRef,EndFrame): RefPointList = GetAnimtionList(PointData[0],PointData[1],frame) _xy = CalculatePositionDelta(solve_method,RefPointList,temp_pos) temp_pos = [temp_pos[0]+_xy[0],temp_pos[1]+_xy[1]] #Add our calculated motion delta to the current position myKnob.setValueAt(temp_pos[0]-center_pos[0],frame+1,0) myKnob.setValueAt(temp_pos[1]-center_pos[1],frame+1,1) '''================================================================================ ; Function: SolveCurves(): ; Description: Used to solve the curves knobs (like roto, rotopaint and splinewarps) ; ; Note(s): N/A ;==================================================================================''' def SolveCurves(_node,_isSplineWarp=False): #Define Variables solve_method = int(nuke.thisNode().knob("AssistType").getValue()) #0 = Local, 1 = Median, 2 = Average frameForRef = nuke.frame() StartFrame = int(nuke.thisNode().knob("InputFrom").value()) EndFrame = int(nuke.thisNode().knob("InputTo").value()) myNode = _node myKnob = myNode.knob("translate") myKnobCenter = myNode.knob("center") #Set some initial defaults init_pos = [0,0] center_pos = [0,0] temp_pos = [0,0] _xy = [0,0] #Read data from the knobs RefPointListInt=[] for item in _node["curves"].getSelected(): #Only apply to selected roto items for subitem in item: try: RefPointListInt.append([subitem.center.getPosition(frameForRef)[0],subitem.center.getPosition(frameForRef)[1],subitem.center]) except: RefPointListInt.append([subitem.getPosition(frameForRef)[0],subitem.getPosition(frameForRef)[1],subitem]) PointData = GrabListData() for item in RefPointListInt: temp_pos = [item[0],item[1]] print ("tempbos:",temp_pos) centerPoint = item[2] #-------------------------- #Resolve backwards [<-----] for frame in reversed(range(StartFrame,frameForRef)): RefPointList = GetAnimtionList(PointData[0],PointData[1],frame,True) _xy = CalculatePositionDelta(solve_method,RefPointList,temp_pos) temp_pos = [temp_pos[0]+_xy[0],temp_pos[1]+_xy[1]] #Add our calculated motion delta to the current position centerPoint.addPositionKey(frame,[temp_pos[0],temp_pos[1] ]) #Add a keyframe with the values #------------------------- #Resolve forwards [----->] temp_pos = [item[0],item[1]] for frame in range(frameForRef,EndFrame): RefPointList = GetAnimtionList(PointData[0],PointData[1],frame) _xy = CalculatePositionDelta(solve_method,RefPointList,temp_pos) temp_pos = [temp_pos[0]+_xy[0],temp_pos[1]+_xy[1]] #Add our calculated motion delta to the current position centerPoint.addPositionKey(frame+1,[temp_pos[0],temp_pos[1] ]) #Add a keyframe with the values '''================================================================================ ; Function: Solve2DTracker(): ; Description: Used to solve the trackers in a 2dtracker node. ; ; Note(s): N/A ;==================================================================================''' def Solve2DTracker(_node): #Define Variables solve_method = int(nuke.thisNode().knob("AssistType").getValue()) #0 = Local, 1 = Median, 2 = Average frameForRef = nuke.frame() StartFrame = int(nuke.thisNode().knob("InputFrom").value()) EndFrame = int(nuke.thisNode().knob("InputTo").value()) #Grap the number of trackers. n_tracks = int(_node["tracks"].toScript().split(" ")[3]) #Constants etc. numColumns = 31 colTrackX = 2 colTrackY = 3 RefPointList = [] for x in range(0,n_tracks): track_a = [float(_node.knob("tracks").getValue(numColumns*x + colTrackX)),float(_node.knob("tracks").getValue(numColumns*x + colTrackY))] RefPointList.append(track_a) print ("the ref point list:",RefPointList) #Grap data from the camera tracker and convert it into a format we can use. PointData = GrabListData() print ("--Initializing Main Loop--") trackIdx = 0 for item in RefPointList: temp_pos = item #-------------------------- #Resolve backwards [<-----] for frame in reversed(range(StartFrame,frameForRef)): RefPointList = GetAnimtionList(PointData[0],PointData[1],frame,True) _xy = CalculatePositionDelta(solve_method,RefPointList,temp_pos) temp_pos = [temp_pos[0]+_xy[0],temp_pos[1]+_xy[1]] #Add our calculated motion delta to the current position _node.knob("tracks").setValueAt(temp_pos[0],frame,numColumns*trackIdx + colTrackX) _node.knob("tracks").setValueAt(temp_pos[1],frame,numColumns*trackIdx + colTrackY) #------------------------- #Resolve forwards [----->] temp_pos = item for frame in range(frameForRef,EndFrame): RefPointList = GetAnimtionList(PointData[0],PointData[1],frame) _xy = CalculatePositionDelta(solve_method,RefPointList,temp_pos) temp_pos = [temp_pos[0]+_xy[0],temp_pos[1]+_xy[1]] #Add our calculated motion delta to the current position _node.knob("tracks").setValueAt(temp_pos[0],frame+1,numColumns*trackIdx + colTrackX) _node.knob("tracks").setValueAt(temp_pos[1],frame+1,numColumns*trackIdx + colTrackY) trackIdx += 1 def Initializer(_method): global RangeKeeper RangeKeeper = rangeKeeper(_method) ResolveSelectedNodes() '''================================================================================ ; Function: ResolveSelectedNodes(): ; Description: Used to find what functions to run for the given nodes. ; ; Note(s): N/A ;==================================================================================''' def ResolveSelectedNodes(): frameForRef = int(nuke.thisNode().knob("RefrenceFrameInput").value()) #Not used here... yet StartFrame = int(nuke.thisNode().knob("InputFrom").value()) EndFrame = int(nuke.thisNode().knob("InputTo").value()) selectedNodes = nuke.root().selectedNodes() sucess = False for item in selectedNodes: itemclass = item.Class() if itemclass == "CornerPin2D": sucess = True SolveCornerpin(item) print ("Cornerpin") elif itemclass == "Transform" or itemclass == "TransformMasked": sucess = True Solve2DTransform(item) print ("Transform") elif itemclass == "Roto" or itemclass == "RotoPaint": sucess = True if nuke.thisNode().knob("assist_rototransform").value(): Solve2DTransform(item) else: SolveCurves(item) print ("roto or paint") elif itemclass == "SplineWarp3": sucess = True SolveCurves(item,True) print ("SplineWarp3") elif itemclass == "Tracker4": sucess = True Solve2DTracker(item) print ("Tracker") else: print ("selected node not supported:",itemclass) if not sucess: nuke.message("Please select a assistable node in the nodegraph.") '''================================================================================ ; Function: StickIT(): ; Description: Used to solve the base build-in warping module ; ; Note(s): N/A ;==================================================================================''' def StickIT(): #Define Variables frameForRef = int(nuke.thisNode().knob("RefrenceFrameInput").value()) StartFrame = int(nuke.thisNode().knob("InputFrom").value()) EndFrame = int(nuke.thisNode().knob("InputTo").value()) if frameForRef > EndFrame or frameForRef < StartFrame: nuke.message("You must set a reference frame inside the active range") else: taskB = nuke.ProgressTask('Calculating Solve, please wait...') NodePin = nuke.toNode("si_sw") #change this to your tracker node! #Grap data from the camera tracker and convert it into a format we can use. PointData = GrabListData() #03: Get a set of reference points. This is the points we want to move. RefPointList = GetAnimtionList(PointData[0],PointData[1],frameForRef,False,True) #04: Go through all of the frames and triangulate best points to move the refpoints with. start = time.clock() finalAnimation = [] for item in RefPointList: zx = item[0][1] zy = item[0][2] tempAnimation = [] tempAnimation.append([frameForRef,item[0][1],item[0][2]]) #Add a keyframe on the reference frame #Now start from the ref frame and move back for frame in reversed(range(StartFrame,frameForRef)): newOffset = GetNearestPoints(item[0],GetAnimtionList(PointData[0],PointData[1],frame,True)) tempAnimation.append([frame,item[0][1]+newOffset[0],item[0][2]+newOffset[1]]) item[0][1] = item[0][1]+newOffset[0] item[0][2] = item[0][2]+newOffset[1] #Now start from the ref frame and move forward for frame in range(frameForRef,EndFrame): newOffset = GetNearestPoints([0,zx,zy],GetAnimtionList(PointData[0],PointData[1],frame)) tempAnimation.append([frame+1,zx+newOffset[0],zy+newOffset[1]]) zx = zx+newOffset[0] zy = zy+newOffset[1] #Now add the animation created to the animation list finalAnimation.append(sorted(tempAnimation)) #print finalAnimation end = time.clock() print ("%.2gs" % (end-start)) CreateWarpPinPair(NodePin,finalAnimation,frameForRef) del(taskB) #GLOBALS: RangeKeeper = 0 ================================================ FILE: README.md ================================================ ![NukeSurvivalToolkit-TonyLyons](https://user-images.githubusercontent.com/46404545/93950690-76be2e00-fd44-11ea-96a6-07070b28df81.jpg) # Nuke Survival Toolkit [Intro and Installation Video](https://youtu.be/MQq9GH3SekA) The Nuke Survival Toolkit is a portable tool menu for the Foundry’s Nuke with a hand-picked selection of nuke gizmos collected from all over the web, organized into 1 easy to install toolbar. ## Installation Here’s how to install and use the Nuke Survival Toolkit: 1. Download the .zip folder from the Nuke Survival Toolkit github website. https://github.com/CreativeLyons/NukeSurvivalToolkit_publicRelease/releases/latest This github will have all of the up to date changes, bug fixes, tweaks, additions, etc. So feel free to watch or star the github, and check back regularly if you’d like to stay up to date. 2. Copy or move the NukeSurvivalToolkit Folder either in your User/.nuke/ folder for personal use, or for use in a pipeline or to share with multiple artists, place the folder in any shared and accessible network folder. 3. Open your init.py file in your /.nuke/ folder into any text editor (or create a new init.py in your User/.nuke/ directory if one doesn’t already exist) 4. Copy the following code into your init.py file: ``` nuke.pluginAddPath("Your/NukeSurvivalToolkit/FolderPath/Here") ``` 5. Copy the filepath location of where you placed your NukeSurvivalToolkit. Replace the Your/NukeSurvivalToolkit/FolderPath/Here text with your NukeSurvivalToolkit filepath location, making sure to keep quotation marks around the filepath. 6. Save your init.py file, and restart your Nuke session 7. That’s it! Congrats, you will now see a little red multi-tool in your nuke toolbar. ## Online Wiki For full online documentation and tool index Wiki, visit: [Nuke Survival Toolkit Online Wiki](https://creativelyons.github.io/NukeSurvivalToolkit_Wiki/) (live site) [Wiki GitHub repository](https://github.com/CreativeLyons/NukeSurvivalToolkit_Wiki) — source, issues, and [wiki releases](https://github.com/CreativeLyons/NukeSurvivalToolkit_Wiki/releases/) ## Offline Documentation (optional) You can install local wiki docs for offline use. 1. Download the documentation ZIP release from either location: [Nuke Survival Toolkit Releases (latest)](https://github.com/CreativeLyons/NukeSurvivalToolkit_publicRelease/releases/latest) [Nuke Survival Toolkit Wiki Releases](https://github.com/CreativeLyons/NukeSurvivalToolkit_Wiki/releases/) 2. Unzip `NST_Documentation_Release_x.y.z.zip` directly into the toolkit root so this file exists: `NukeSurvivalToolkit/NST_Documentation/index.html` 3. In Nuke, open `NukeSurvivalToolkit > Documentation` and use: - `Wiki/Docs (Auto)` which falls back in this order: `Wiki (Online)` -> `Wiki (Offline)` -> `Docs (PDF)`. - `Wiki (Online)` for the live wiki (checked first for reachability). - `Wiki (Offline)` for local HTML docs. - `Docs (PDF)` for local PDF docs. ## Development For a more in-depth look into the repo and menu structure, check the development guide. [View the Development Guide](DEVELOPMENT.md) ## Changelog View recent updates, tools additions, bug fixes, etc. [View the Changelog](CHANGELOG.md)